<?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>33034</bug_id>
          
          <creation_ts>2009-12-29 18:08:07 -0800</creation_ts>
          <short_desc>[v8] Move world-specific state out of V8Proxy</short_desc>
          <delta_ts>2009-12-30 10:23:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>175738</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-29 18:08:07 -0800</bug_when>
    <thetext>[v8] Move window-specific state out of V8Proxy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175739</commentid>
    <comment_count>1</comment_count>
      <attachid>45625</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-29 18:12:52 -0800</bug_when>
    <thetext>Created attachment 45625
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175740</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-29 18:18:02 -0800</bug_when>
    <thetext>Attachment 45625 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/v8/V8DOMWindowShell.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/V8DOMWindowShell.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/V8DOMWindowShell.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/V8DOMWindowShell.cpp:62:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/V8DOMWindowShell.cpp:288:  Use 0 instead of NULL.  [readability/null] [4]
Total errors found: 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175742</commentid>
    <comment_count>3</comment_count>
      <attachid>45626</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-29 18:28:12 -0800</bug_when>
    <thetext>Created attachment 45626
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175744</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-29 18:33:53 -0800</bug_when>
    <thetext>Attachment 45626 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/v8/V8DOMWindowShell.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/V8DOMWindowShell.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175747</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-29 18:36:57 -0800</bug_when>
    <thetext>Style errors are false positives:
https://bugs.webkit.org/show_bug.cgi?id=33037</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175831</commentid>
    <comment_count>6</comment_count>
      <attachid>45626</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-29 23:51:00 -0800</bug_when>
    <thetext>Comment on attachment 45626
Patch

I did not review the + lines careful as I assumed they were all copy code.  I did look carefully at the - lines however.

This looks sane to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175926</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-12-30 08:38:42 -0800</bug_when>
    <thetext>This looks pretty cool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175969</commentid>
    <comment_count>8</comment_count>
      <attachid>45626</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-30 10:23:05 -0800</bug_when>
    <thetext>Comment on attachment 45626
Patch

Clearing flags on attachment: 45626

Committed r52666: &lt;http://trac.webkit.org/changeset/52666&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175970</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-30 10:23:13 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45625</attachid>
            <date>2009-12-29 18:12:52 -0800</date>
            <delta_ts>2009-12-29 18:28:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33034-20091229181251.patch</filename>
            <type>text/plain</type>
            <size>61529</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjYzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzkgQEAKKzIwMDktMTItMjkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbdjhd
IE1vdmUgd29ybGQtc3BlY2lmaWMgc3RhdGUgb3V0IG9mIFY4UHJveHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMDM0CisKKyAgICAgICAgVGhpcyBp
cyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIHVuaWZ5aW5nIHRoZSBWOCBpbXBsZW1lbnRhdGlvbiBv
ZgorICAgICAgICBpc29sYXRlZCB3b3JsZHMgd2l0aCB0aGUgSlNDIGltcGxlbWVudGF0aW9uLiAg
V2UgbmVlZCBhbiBvYmplY3QgdG8KKyAgICAgICAgZW5jYXB1bGF0ZSBhbGwgdGhlIHdvcmxkLXNw
ZWNpZmljIGJpbmRpbmdzIHN0YXRlLiAgUHJldmlvdWxzeSwgd2UgdXNlZAorICAgICAgICBWOFBy
b3h5IGZvciB0aGlzIHB1cnBvc2UgKGFsb25nIHdpdGggYSBtaWxsaW9uIG90aGVyIHRoaW5ncyks
IGJ1dAorICAgICAgICB0aGVyZSdzIGEgb25lLXRvLW9uZSBtYXBwaW5nIGJldHdlZW4gVjhQcm94
eSBvYmplY3RzIGFuZCBGcmFtZSBvYmplY3RzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdGFrZXMg
dGhlIHdvcmxkLXNwZWNpZmljIHN0YXRlIGFuZCBtb3ZlcyBpdCB0byBhIG5ldyBvYmplY3QsCisg
ICAgICAgIGFmZmVjdGlvbmF0ZWx5IGNhbGxlZCBWOERPTVdpbmRvd1NoZWxsLiAgVGhpcyBvYmpl
Y3QgaXMgdGhlIG1vcmFsCisgICAgICAgIGVxdWl2YWxlbnQgb2YgSlNET01XaW5kb3dTaGVsbCBi
dXQgd2l0aCBtb3JlIGRhdGEgbWVtYmVycyBiZWNhdXNlIGxpZmUKKyAgICAgICAgaXMgbW9yZSBj
b21wbGljYXRlZCBpbiBWOC1sYW5kLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYWxtb3N0IGVu
dGlyZWx5IGNvZGUgbW90aW9uLiAgRnV0dXJlIHBhdGNoZXMgd2lsbCBjbGVhbgorICAgICAgICB1
cCB0aGlzIGNsYXNzIGFzIHdlIHVzZSBpdCB0byByZXByZXNlbnQgd2luZG93IHNoZWxscyBpbiBp
c29sYXRlZAorICAgICAgICB3b3JsZHMgYXMgd2VsbCBhcyB0aGUgbWFpbiB3b3JsZC4KKworICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZVNlY3Vy
aXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmhhdmVJbnRl
cnByZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1
bWVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRmF0YWxFcnJvckluVjgpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVwb3J0RmF0YWxFcnJvckluVjgpOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0VW5z
YWZlSmF2YVNjcmlwdEFjY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxs
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6VjhET01XaW5k
b3dTaGVsbCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppc0NvbnRleHRJ
bml0aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3Nl
Q29udGV4dEhhbmRsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6ZGVz
dHJveUdsb2JhbCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjbGVhckZv
ckNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNsZWFyRm9yTmF2
aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppbml0Q29udGV4
dElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZU5l
d0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbERP
TVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1
bWVudFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Y2xlYXJE
b2N1bWVudFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBk
YXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dT
aGVsbDo6Y2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpWOERP
TVdpbmRvd1NoZWxsOjpzZXRTZWN1cml0eVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2lu
ZG93U2hlbGw6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V2luZG93U2hlbGw6OmdldEhpZGRlbk9iamVjdFByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOERPTVdpbmRvd1NoZWxsOjppbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGVTbG93
Q2FzZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlV3JhcHBlckZyb21DYWNoZSk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3JGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpW
OERPTVdyYXBwZXI6OmNvbnZlcnREb2N1bWVudFRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3QpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xh
dGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpWOFByb3h5KToKKyAgICAgICAgKFdl
YkNvcmU6OlY4UHJveHk6On5WOFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6Omhh
bmRsZU91dE9mTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmV2YWx1YXRlSW5J
c29sYXRlZFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmV2YWx1YXRlSW5OZXdD
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnNldEluamVjdGVkU2NyaXB0Q29u
dGV4dERlYnVnSWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y2xlYXJGb3JDbG9zZSk6
CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpjbGVhckZvck5hdmlnYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6VjhQcm94eTo6bWFpbldvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFByb3h5OjpzZXRDb250ZXh0RGVidWdJZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQ
cm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6d2luZG93U2hlbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhQcm94eTo6ZXh0ZW5zaW9ucyk6CisKIDIwMDktMTItMjkgIEFuZHJlaSBQ
b3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0g
QmFydGguCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTI2MzUpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
d29ya2luZyBjb3B5KQpAQCAtODA4LDYgKzgwOCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhEYXRhR3JpZERhdGFTb3VyY2UuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhE
T01NYXAuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOERPTU1hcC5oJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcCcsCisgICAgICAgICAgICAn
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHAn
LApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biA1MjYzNSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyU2NyaXB0T2JqZWN0CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlU2VjdXJpdHlP
cmlnaW4oKQogewotICAgIG1fcHJveHktPnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7CisgICAgbV9w
cm94eS0+d2luZG93U2hlbGwoKS0+dXBkYXRlU2VjdXJpdHlPcmlnaW4oKTsKIH0KIAogdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQpAQCAtMjk1LDcg
KzI5NSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6bG93TWVtb3J5Tm90aWZpY2EKIAogYm9v
bCBTY3JpcHRDb250cm9sbGVyOjpoYXZlSW50ZXJwcmV0ZXIoKSBjb25zdAogewotICAgIHJldHVy
biBtX3Byb3h5LT5pc0NvbnRleHRJbml0aWFsaXplZCgpOworICAgIHJldHVybiBtX3Byb3h5LT53
aW5kb3dTaGVsbCgpLT5pc0NvbnRleHRJbml0aWFsaXplZCgpOwogfQogCiBib29sIFNjcmlwdENv
bnRyb2xsZXI6OmlzRW5hYmxlZCgpIGNvbnN0CkBAIC00NDQsNyArNDQ0LDcgQEAgdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcih2bwogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OnVwZGF0ZURvY3VtZW50KCkKIHsKLSAgICBtX3Byb3h5LT51cGRhdGVEb2N1bWVudCgpOworICAg
IG1fcHJveHktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50KCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVs
bC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTE0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKKworI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNp
bmNsdWRlICJEYXRlRXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0c0luY2x1ZGUuaCIK
KyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgor
I2luY2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCisj
aW5jbHVkZSAiVjhDb25zb2xlTWVzc2FnZS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5o
IgorI2luY2x1ZGUgIlY4RE9NTWFwLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNs
dWRlICJWOEhpZGRlblByb3BlcnR5TmFtZS5oIgorI2luY2x1ZGUgIlY4SW5kZXguaCIKKyNpbmNs
dWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAi
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+Cisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHY4Lmg+Cisj
aW5jbHVkZSA8djgtZGVidWcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgaGFuZGxlRmF0YWxFcnJvcklu
VjgoKQoreworICAgIC8vIEZJWE1FOiBXZSB0ZW1wb3JhcmlseSBkZWFsIHdpdGggVjggaW50ZXJu
YWwgZXJyb3Igc2l0dWF0aW9ucworICAgIC8vIHN1Y2ggYXMgb3V0LW9mLW1lbW9yeSBieSBjcmFz
aGluZyB0aGUgcmVuZGVyZXIuCisgICAgQ1JBU0goKTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0
RmF0YWxFcnJvckluVjgoY29uc3QgY2hhciogbG9jYXRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2Up
Cit7CisgICAgLy8gVjggaXMgc2h1dGRvd24sIHdlIGNhbm5vdCB1c2UgVjggYXBpLgorICAgIC8v
IFRoZSBvbmx5IHRoaW5nIHdlIGNhbiBkbyBpcyB0byBkaXNhYmxlIEphdmFTY3JpcHQuCisgICAg
Ly8gRklYTUU6IGNsZWFuIHVwIFY4UHJveHkgYW5kIGRpc2FibGUgSmF2YVNjcmlwdC4KKyAgICBw
cmludGYoIlY4IGVycm9yOiAlcyAoJXMpXG4iLCBtZXNzYWdlLCBsb2NhdGlvbik7CisgICAgaGFu
ZGxlRmF0YWxFcnJvckluVjgoKTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0VW5zYWZlSmF2YVNj
cmlwdEFjY2Vzcyh2ODo6TG9jYWw8djg6Ok9iamVjdD4gaG9zdCwgdjg6OkFjY2Vzc1R5cGUgdHlw
ZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZGF0YSkKK3sKKyAgICBGcmFtZSogdGFyZ2V0ID0gVjhD
dXN0b206OkdldFRhcmdldEZyYW1lKGhvc3QsIGRhdGEpOworICAgIGlmICh0YXJnZXQpCisgICAg
ICAgIFY4UHJveHk6OnJlcG9ydFVuc2FmZUFjY2Vzc1RvKHRhcmdldCwgVjhQcm94eTo6UmVwb3J0
TGF0ZXIpOworfQorCitQYXNzUmVmUHRyPFY4RE9NV2luZG93U2hlbGw+IFY4RE9NV2luZG93U2hl
bGw6OmNyZWF0ZShGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOERP
TVdpbmRvd1NoZWxsKGZyYW1lKSk7Cit9CisKK1Y4RE9NV2luZG93U2hlbGw6OlY4RE9NV2luZG93
U2hlbGwoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKK3sKK30KKworYm9vbCBW
OERPTVdpbmRvd1NoZWxsOjppc0NvbnRleHRJbml0aWFsaXplZCgpCit7CisgICAgLy8gbV9jb250
ZXh0LCBtX2dsb2JhbCwgYW5kIG1fd3JhcHBlckJvaWxlcnBsYXRlcyBzaG91bGQKKyAgICAvLyBh
bGwgYmUgbm9uLWVtcHR5IGlmIGlmIG1fY29udGV4dCBpcyBub24tZW1wdHkuCisgICAgQVNTRVJU
KG1fY29udGV4dC5Jc0VtcHR5KCkgfHwgIW1fZ2xvYmFsLklzRW1wdHkoKSk7CisgICAgQVNTRVJU
KG1fY29udGV4dC5Jc0VtcHR5KCkgfHwgIW1fd3JhcHBlckJvaWxlcnBsYXRlcy5Jc0VtcHR5KCkp
OworICAgIHJldHVybiAhbV9jb250ZXh0LklzRW1wdHkoKTsKK30KKwordm9pZCBWOERPTVdpbmRv
d1NoZWxsOjpkaXNwb3NlQ29udGV4dEhhbmRsZXMoKQoreworICAgIGlmICghbV9jb250ZXh0Lklz
RW1wdHkoKSkgeworICAgICAgICBtX2NvbnRleHQuRGlzcG9zZSgpOworICAgICAgICBtX2NvbnRl
eHQuQ2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAoIW1fd3JhcHBlckJvaWxlcnBsYXRlcy5Jc0Vt
cHR5KCkpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIFY4R0NDb250cm9sbGVyOjp1bnJlZ2lz
dGVyR2xvYmFsSGFuZGxlKHRoaXMsIG1fd3JhcHBlckJvaWxlcnBsYXRlcyk7CisjZW5kaWYKKyAg
ICAgICAgbV93cmFwcGVyQm9pbGVycGxhdGVzLkRpc3Bvc2UoKTsKKyAgICAgICAgbV93cmFwcGVy
Qm9pbGVycGxhdGVzLkNsZWFyKCk7CisgICAgfQorfQorCit2b2lkIFY4RE9NV2luZG93U2hlbGw6
OmRlc3Ryb3lHbG9iYWwoKQoreworICAgIGlmICghbV9nbG9iYWwuSXNFbXB0eSgpKSB7CisjaWZu
ZGVmIE5ERUJVRworICAgICAgICBWOEdDQ29udHJvbGxlcjo6dW5yZWdpc3Rlckdsb2JhbEhhbmRs
ZSh0aGlzLCBtX2dsb2JhbCk7CisjZW5kaWYKKyAgICAgICAgbV9nbG9iYWwuRGlzcG9zZSgpOwor
ICAgICAgICBtX2dsb2JhbC5DbGVhcigpOworICAgIH0KK30KKwordm9pZCBWOERPTVdpbmRvd1No
ZWxsOjpjbGVhckZvckNsb3NlKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5KCkpIHsK
KyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAgICAgIGNsZWFyRG9j
dW1lbnRXcmFwcGVyKCk7CisgICAgICAgIGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOworICAgIH0K
K30KKwordm9pZCBWOERPTVdpbmRvd1NoZWxsOjpjbGVhckZvck5hdmlnYXRpb24oKQoreworICAg
IGlmICghbV9jb250ZXh0LklzRW1wdHkoKSkgeworICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlOworICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlcigpOworCisgICAgICAgIHY4OjpDb250
ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250ZXh0KTsKKworICAgICAgICAvLyBDbGVhciB0
aGUgZG9jdW1lbnQgd3JhcHBlciBjYWNoZSBiZWZvcmUgdHVybmluZyBvbiBhY2Nlc3MgY2hlY2tz
IG9uCisgICAgICAgIC8vIHRoZSBvbGQgRE9NV2luZG93IHdyYXBwZXIuIFRoaXMgd2F5LCBhY2Nl
c3MgdG8gdGhlIGRvY3VtZW50IHdyYXBwZXIKKyAgICAgICAgLy8gd2lsbCBiZSBwcm90ZWN0ZWQg
YnkgdGhlIHNlY3VyaXR5IGNoZWNrcyBvbiB0aGUgRE9NV2luZG93IHdyYXBwZXIuCisgICAgICAg
IGNsZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKKworICAgICAgICAvLyBUdXJuIG9uIGFjY2Vz
cyBjaGVjayBvbiB0aGUgb2xkIERPTVdpbmRvdyB3cmFwcGVyLgorICAgICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIG1fZ2xvYmFsKTsKKyAgICAgICAgQVNTRVJUKCF3cmFwcGVy
LklzRW1wdHkoKSk7CisgICAgICAgIHdyYXBwZXItPlR1cm5PbkFjY2Vzc0NoZWNrKCk7CisKKyAg
ICAgICAgLy8gU2VwYXJhdGUgdGhlIGNvbnRleHQgZnJvbSBpdHMgZ2xvYmFsIG9iamVjdC4KKyAg
ICAgICAgbV9jb250ZXh0LT5EZXRhY2hHbG9iYWwoKTsKKworICAgICAgICBkaXNwb3NlQ29udGV4
dEhhbmRsZXMoKTsKKyAgICB9Cit9CisKKy8vIENyZWF0ZSBhIG5ldyBlbnZpcm9ubWVudCBhbmQg
c2V0dXAgdGhlIGdsb2JhbCBvYmplY3QuCisvLworLy8gVGhlIGdsb2JhbCBvYmplY3QgY29ycmVz
cG9uZHMgdG8gYSBET01XaW5kb3cgaW5zdGFuY2UuIEhvd2V2ZXIsIHRvCisvLyBhbGxvdyBwcm9w
ZXJ0aWVzIG9mIHRoZSBKUyBET01XaW5kb3cgaW5zdGFuY2UgdG8gYmUgc2hhZG93ZWQsIHdlCisv
LyB1c2UgYSBzaGFkb3cgb2JqZWN0IGFzIHRoZSBnbG9iYWwgb2JqZWN0IGFuZCB1c2UgdGhlIEpT
IERPTVdpbmRvdworLy8gaW5zdGFuY2UgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhhdCBzaGFkb3cg
b2JqZWN0LiBUaGUgSlMgRE9NV2luZG93CisvLyBpbnN0YW5jZSBpcyB1bmRldGVjdGFibGUgZnJv
bSBqYXZhc2NyaXB0IGNvZGUgYmVjYXVzZSB0aGUgX19wcm90b19fCisvLyBhY2Nlc3NvcnMgc2tp
cCB0aGF0IG9iamVjdC4KKy8vCisvLyBUaGUgc2hhZG93IG9iamVjdCBhbmQgdGhlIERPTVdpbmRv
dyBpbnN0YW5jZSBhcmUgc2VlbiBhcyBvbmUgb2JqZWN0CisvLyBmcm9tIGphdmFzY3JpcHQuIFRo
ZSBqYXZhc2NyaXB0IG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEKKy8vIERPTVdpbmRvdyBp
bnN0YW5jZSBpcyB0aGUgc2hhZG93IG9iamVjdC4gV2hlbiBtYXBwaW5nIGEgRE9NV2luZG93Cisv
LyBpbnN0YW5jZSB0byBhIFY4IG9iamVjdCwgd2UgcmV0dXJuIHRoZSBzaGFkb3cgb2JqZWN0Lgor
Ly8KKy8vIFRvIGltcGxlbWVudCBzcGxpdC13aW5kb3csIHNlZQorLy8gICAxKSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyNDkKKy8vICAgMikgaHR0cHM6Ly93aWtp
Lm1vemlsbGEub3JnL0dlY2tvOlNwbGl0V2luZG93CisvLyAgIDMpIGh0dHBzOi8vYnVnemlsbGEu
bW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTI5NjYzOQorLy8gd2UgbmVlZCB0byBzcGxpdCB0
aGUgc2hhZG93IG9iamVjdCBmdXJ0aGVyIGludG8gdHdvIG9iamVjdHM6CisvLyBhbiBvdXRlciB3
aW5kb3cgYW5kIGFuIGlubmVyIHdpbmRvdy4gVGhlIGlubmVyIHdpbmRvdyBpcyB0aGUgaGlkZGVu
CisvLyBwcm90b3R5cGUgb2YgdGhlIG91dGVyIHdpbmRvdy4gVGhlIGlubmVyIHdpbmRvdyBpcyB0
aGUgZGVmYXVsdAorLy8gZ2xvYmFsIG9iamVjdCBvZiB0aGUgY29udGV4dC4gQSB2YXJpYWJsZSBk
ZWNsYXJlZCBpbiB0aGUgZ2xvYmFsCisvLyBzY29wZSBpcyBhIHByb3BlcnR5IG9mIHRoZSBpbm5l
ciB3aW5kb3cuCisvLworLy8gVGhlIG91dGVyIHdpbmRvdyBzdGlja3MgdG8gYSBGcmFtZSwgaXQg
aXMgZXhwb3NlZCB0byBKYXZhU2NyaXB0CisvLyB2aWEgd2luZG93LndpbmRvdywgd2luZG93LnNl
bGYsIHdpbmRvdy5wYXJlbnQsIGV0Yy4gVGhlIG91dGVyIHdpbmRvdworLy8gaGFzIGEgc2VjdXJp
dHkgdG9rZW4gd2hpY2ggaXMgdGhlIGRvbWFpbi4gVGhlIG91dGVyIHdpbmRvdyBjYW5ub3QKKy8v
IGhhdmUgaXRzIG93biBwcm9wZXJ0aWVzLiB3aW5kb3cuZm9vID0gJ3gnIGlzIGRlbGVnYXRlZCB0
byB0aGUKKy8vIGlubmVyIHdpbmRvdy4KKy8vCisvLyBXaGVuIGEgZnJhbWUgbmF2aWdhdGVzIHRv
IGEgbmV3IHBhZ2UsIHRoZSBpbm5lciB3aW5kb3cgaXMgY3V0IG9mZgorLy8gdGhlIG91dGVyIHdp
bmRvdywgYW5kIHRoZSBvdXRlciB3aW5kb3cgaWRlbnRpZnkgaXMgcHJlc2VydmVkIGZvcgorLy8g
dGhlIGZyYW1lLiBIb3dldmVyLCBhIG5ldyBpbm5lciB3aW5kb3cgaXMgY3JlYXRlZCBmb3IgdGhl
IG5ldyBwYWdlLgorLy8gSWYgdGhlcmUgYXJlIEpTIGNvZGUgaG9sZHMgYSBjbG9zdXJlIHRvIHRo
ZSBvbGQgaW5uZXIgd2luZG93LAorLy8gaXQgd29uJ3QgYmUgYWJsZSB0byByZWFjaCB0aGUgb3V0
ZXIgd2luZG93IHZpYSBpdHMgZ2xvYmFsIG9iamVjdC4KK3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6
aW5pdENvbnRleHRJZk5lZWRlZCgpCit7CisgICAgLy8gQmFpbCBvdXQgaWYgdGhlIGNvbnRleHQg
aGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KKyAgICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENyZWF0ZSBhIGhhbmRsZSBzY29wZSBmb3Ig
YWxsIGxvY2FsIGhhbmRsZXMuCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisg
ICAgLy8gU2V0dXAgdGhlIHNlY3VyaXR5IGhhbmRsZXJzIGFuZCBtZXNzYWdlIGxpc3RlbmVyLiBU
aGlzIG9ubHkgaGFzCisgICAgLy8gdG8gYmUgZG9uZSBvbmNlLgorICAgIHN0YXRpYyBib29sIGlz
VjhJbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmICghaXNWOEluaXRpYWxpemVkKSB7CisgICAg
ICAgIC8vIFRlbGxzIFY4IG5vdCB0byBjYWxsIHRoZSBkZWZhdWx0IE9PTSBoYW5kbGVyLCBiaW5k
aW5nIGNvZGUKKyAgICAgICAgLy8gd2lsbCBoYW5kbGUgaXQuCisgICAgICAgIHY4OjpWODo6SWdu
b3JlT3V0T2ZNZW1vcnlFeGNlcHRpb24oKTsKKyAgICAgICAgdjg6OlY4OjpTZXRGYXRhbEVycm9y
SGFuZGxlcihyZXBvcnRGYXRhbEVycm9ySW5WOCk7CisKKyAgICAgICAgdjg6OlY4OjpTZXRHbG9i
YWxHQ1Byb2xvZ3VlQ2FsbGJhY2soJlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKTsKKyAgICAg
ICAgdjg6OlY4OjpTZXRHbG9iYWxHQ0VwaWxvZ3VlQ2FsbGJhY2soJlY4R0NDb250cm9sbGVyOjpn
Y0VwaWxvZ3VlKTsKKworICAgICAgICB2ODo6Vjg6OkFkZE1lc3NhZ2VMaXN0ZW5lcigmVjhDb25z
b2xlTWVzc2FnZTo6aGFuZGxlcik7CisKKyAgICAgICAgdjg6OlY4OjpTZXRGYWlsZWRBY2Nlc3ND
aGVja0NhbGxiYWNrRnVuY3Rpb24ocmVwb3J0VW5zYWZlSmF2YVNjcmlwdEFjY2Vzcyk7CisKKyAg
ICAgICAgaXNWOEluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKworICAgIG1fY29udGV4dCA9
IGNyZWF0ZU5ld0NvbnRleHQobV9nbG9iYWwsIDApOworICAgIGlmIChtX2NvbnRleHQuSXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IHY4Q29u
dGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOworICAgIHY4OjpD
b250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjhDb250ZXh0KTsKKworICAgIC8vIFN0b3JlIHRo
ZSBmaXJzdCBnbG9iYWwgb2JqZWN0IGNyZWF0ZWQgc28gd2UgY2FuIHJldXNlIGl0LgorICAgIGlm
IChtX2dsb2JhbC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgbV9nbG9iYWwgPSB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pjo6TmV3KHY4Q29udGV4dC0+R2xvYmFsKCkpOworICAgICAgICAvLyBCYWls
IG91dCBpZiBhbGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBnbG9iYWwgb2JqZWN0cyBmYWlscy4KKyAg
ICAgICAgaWYgKG1fZ2xvYmFsLklzRW1wdHkoKSkgeworICAgICAgICAgICAgZGlzcG9zZUNvbnRl
eHRIYW5kbGVzKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIFY4R0NDb250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShQUk9YWSwg
dGhpcywgbV9nbG9iYWwpOworI2VuZGlmCisgICAgfQorCisgICAgaW5zdGFsbEhpZGRlbk9iamVj
dFByb3RvdHlwZSh2OENvbnRleHQpOworICAgIG1fd3JhcHBlckJvaWxlcnBsYXRlcyA9IHY4OjpQ
ZXJzaXN0ZW50PHY4OjpBcnJheT46Ok5ldyh2ODo6QXJyYXk6Ok5ldyhWOENsYXNzSW5kZXg6OldS
QVBQRVJfVFlQRV9DT1VOVCkpOworICAgIC8vIEJhaWwgb3V0IGlmIGFsbG9jYXRpb24gZmFpbGVk
LgorICAgIGlmIChtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuSXNFbXB0eSgpKSB7CisgICAgICAgIGRp
c3Bvc2VDb250ZXh0SGFuZGxlcygpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmbmRlZiBO
REVCVUcKKyAgICBWOEdDQ29udHJvbGxlcjo6cmVnaXN0ZXJHbG9iYWxIYW5kbGUoUFJPWFksIHRo
aXMsIG1fd3JhcHBlckJvaWxlcnBsYXRlcyk7CisjZW5kaWYKKworICAgIGlmICghaW5zdGFsbERP
TVdpbmRvdyh2OENvbnRleHQsIG1fZnJhbWUtPmRvbVdpbmRvdygpKSkKKyAgICAgICAgZGlzcG9z
ZUNvbnRleHRIYW5kbGVzKCk7CisKKyAgICB1cGRhdGVEb2N1bWVudCgpOworCisgICAgc2V0U2Vj
dXJpdHlUb2tlbigpOworCisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVh
dGVTY3JpcHRDb250ZXh0Rm9yRnJhbWUoKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25n
LiBXZSBzaG91bGQgYWN0dWFsbHkgZG8gdGhpcyBmb3IgdGhlIHByb3BlciB3b3JsZCBvbmNlCisg
ICAgLy8gd2UgZG8gaXNvbGF0ZWQgd29ybGRzIHRoZSBXZWJDb3JlIHdheS4KKyAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoMCk7Cit9CisK
K3Y4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVOZXdD
b250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsLCBpbnQgZXh0ZW5zaW9uR3JvdXAp
Cit7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHJlc3VsdDsKKworICAgIC8vIFRo
ZSBhY3RpdmVEb2N1bWVudExvYWRlciBwb2ludGVyIGNvdWxkIGJlIE5VTEwgZHVyaW5nIGZyYW1l
IHNodXRkb3duLgorICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9h
ZGVyKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgZW52
aXJvbm1lbnQgdXNpbmcgYW4gZW1wdHkgdGVtcGxhdGUgZm9yIHRoZSBzaGFkb3cKKyAgICAvLyBv
YmplY3QuIFJldXNlIHRoZSBnbG9iYWwgb2JqZWN0IGlmIG9uZSBoYXMgYmVlbiBjcmVhdGVkIGVh
cmxpZXIuCisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPiBnbG9iYWxUZW1w
bGF0ZSA9IFY4RE9NV2luZG93OjpHZXRTaGFkb3dPYmplY3RUZW1wbGF0ZSgpOworICAgIGlmIChn
bG9iYWxUZW1wbGF0ZS5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAv
LyBJbnN0YWxsIGEgc2VjdXJpdHkgaGFuZGxlciB3aXRoIFY4LgorICAgIGdsb2JhbFRlbXBsYXRl
LT5TZXRBY2Nlc3NDaGVja0NhbGxiYWNrcyhWOEN1c3RvbTo6djhET01XaW5kb3dOYW1lZFNlY3Vy
aXR5Q2hlY2ssIFY4Q3VzdG9tOjp2OERPTVdpbmRvd0luZGV4ZWRTZWN1cml0eUNoZWNrLCB2ODo6
SW50ZWdlcjo6TmV3KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKSk7CisgICAgZ2xvYmFsVGVtcGxh
dGUtPlNldEludGVybmFsRmllbGRDb3VudChWOEN1c3RvbTo6a0RPTVdpbmRvd0ludGVybmFsRmll
bGRDb3VudCk7CisKKyAgICAvLyBVc2VkIHRvIGF2b2lkIHNsZWVwIGNhbGxzIGluIHVubG9hZCBo
YW5kbGVycy4KKyAgICBpZiAoIVY4UHJveHk6OnJlZ2lzdGVyZWRFeHRlbnNpb25XaXRoVjgoRGF0
ZUV4dGVuc2lvbjo6Z2V0KCkpKQorICAgICAgICBWOFByb3h5OjpyZWdpc3RlckV4dGVuc2lvbihE
YXRlRXh0ZW5zaW9uOjpnZXQoKSwgU3RyaW5nKCkpOworCisgICAgLy8gRHluYW1pY2FsbHkgdGVs
bCB2OCBhYm91dCBvdXIgZXh0ZW5zaW9ucyBub3cuCisgICAgY29uc3QgVjhFeHRlbnNpb25zJiBl
eHRlbnNpb25zID0gVjhQcm94eTo6ZXh0ZW5zaW9ucygpOworICAgIE93bkFycmF5UHRyPGNvbnN0
IGNoYXIqPiBleHRlbnNpb25OYW1lcyhuZXcgY29uc3QgY2hhcipbZXh0ZW5zaW9ucy5zaXplKCld
KTsKKyAgICBpbnQgaW5kZXggPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXh0ZW5z
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXS5ncm91cCAmJiBl
eHRlbnNpb25zW2ldLmdyb3VwICE9IGV4dGVuc2lvbkdyb3VwKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgLy8gTm90ZTogd2UgY2hlY2sgdGhlIGxvYWRlciBVUkwgaGVyZSBpbnN0
ZWFkIG9mIHRoZSBkb2N1bWVudCBVUkwKKyAgICAgICAgLy8gYmVjYXVzZSB3ZSBtaWdodCBiZSBj
dXJyZW50bHkgbG9hZGluZyBhbiBVUkwgaW50byBhIGJsYW5rIHBhZ2UuCisgICAgICAgIC8vIFNl
ZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDky
NAorICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXS5zY2hlbWUubGVuZ3RoKCkgPiAwICYmIChleHRl
bnNpb25zW2ldLnNjaGVtZSAhPSBtX2ZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2Fk
ZXIoKS0+dXJsKCkucHJvdG9jb2woKSB8fCBleHRlbnNpb25zW2ldLnNjaGVtZSAhPSBtX2ZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+
dXJsKCkucHJvdG9jb2woKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBleHRl
bnNpb25OYW1lc1tpbmRleCsrXSA9IGV4dGVuc2lvbnNbaV0uZXh0ZW5zaW9uLT5uYW1lKCk7Cisg
ICAgfQorICAgIHY4OjpFeHRlbnNpb25Db25maWd1cmF0aW9uIGV4dGVuc2lvbkNvbmZpZ3VyYXRp
b24oaW5kZXgsIGV4dGVuc2lvbk5hbWVzLmdldCgpKTsKKyAgICByZXN1bHQgPSB2ODo6Q29udGV4
dDo6TmV3KCZleHRlbnNpb25Db25maWd1cmF0aW9uLCBnbG9iYWxUZW1wbGF0ZSwgZ2xvYmFsKTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFs
bERPTVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0LCBET01XaW5kb3cqIHdp
bmRvdykKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGltcGxpY2l0UHJvdG9TdHJpbmcg
PSB2ODo6U3RyaW5nOjpOZXcoIl9fcHJvdG9fXyIpOworICAgIGlmIChpbXBsaWNpdFByb3RvU3Ry
aW5nLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGEg
bmV3IEpTIHdpbmRvdyBvYmplY3QgYW5kIHVzZSBpdCBhcyB0aGUgcHJvdG90eXBlIGZvciB0aGUg
IHNoYWRvdyBnbG9iYWwgb2JqZWN0LgorICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB3aW5k
b3dDb25zdHJ1Y3RvciA9IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4
OjpET01XSU5ET1csIGdldEhpZGRlbk9iamVjdFByb3RvdHlwZShjb250ZXh0KSk7CisgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IGpzV2luZG93ID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNl
KHdpbmRvd0NvbnN0cnVjdG9yKTsKKyAgICAvLyBCYWlsIG91dCBpZiBhbGxvY2F0aW9uIGZhaWxl
ZC4KKyAgICBpZiAoanNXaW5kb3cuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBXcmFwIHRoZSB3aW5kb3cuCisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVy
KGpzV2luZG93LCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKSwg
d2luZG93KTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChqc1dpbmRvdy0+R2V0UHJvdG90eXBlKCkpLCBWOENsYXNzSW5kZXg6OlRv
SW50KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKSwgd2luZG93KTsKKworICAgIHdpbmRvdy0+cmVm
KCk7CisgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qod2luZG93LCB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGpzV2luZG93KSk7CisKKyAgICAvLyBJbnNl
cnQgdGhlIHdpbmRvdyBpbnN0YW5jZSBhcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBzaGFkb3cgb2Jq
ZWN0LgorICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdjhHbG9iYWwgPSBjb250ZXh0LT5HbG9i
YWwoKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdCh2OEdsb2JhbC0+R2V0UHJvdG90eXBlKCkpLCBWOENsYXNzSW5kZXg6OlRvSW50
KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKSwgd2luZG93KTsKKyAgICB2OEdsb2JhbC0+U2V0KGlt
cGxpY2l0UHJvdG9TdHJpbmcsIGpzV2luZG93KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHdyYXBwZXIpCit7CisgICAgY2xlYXJEb2N1bWVudFdyYXBwZXIoKTsKKworICAgIEFT
U0VSVChtX2RvY3VtZW50LklzRW1wdHkoKSk7CisgICAgbV9kb2N1bWVudCA9IHY4OjpQZXJzaXN0
ZW50PHY4OjpWYWx1ZT46Ok5ldyh3cmFwcGVyKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgVjhHQ0Nv
bnRyb2xsZXI6OnJlZ2lzdGVyR2xvYmFsSGFuZGxlKFBST1hZLCB0aGlzLCBtX2RvY3VtZW50KTsK
KyNlbmRpZgorfQorCit2b2lkIFY4RE9NV2luZG93U2hlbGw6OmNsZWFyRG9jdW1lbnRXcmFwcGVy
KCkKK3sKKyAgICBpZiAoIW1fZG9jdW1lbnQuSXNFbXB0eSgpKSB7CisjaWZuZGVmIE5ERUJVRwor
ICAgICAgICBWOEdDQ29udHJvbGxlcjo6dW5yZWdpc3Rlckdsb2JhbEhhbmRsZSh0aGlzLCBtX2Rv
Y3VtZW50KTsKKyNlbmRpZgorICAgICAgICBtX2RvY3VtZW50LkRpc3Bvc2UoKTsKKyAgICAgICAg
bV9kb2N1bWVudC5DbGVhcigpOworICAgIH0KK30KKwordm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1
cGRhdGVEb2N1bWVudFdyYXBwZXJDYWNoZSgpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250ZXh0KTsK
KworICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMgbm8gZnJhbWUsIE5vZGVUb1Y4T2JqZWN0IG1p
Z2h0IGdldCB0aGUKKyAgICAvLyBkb2N1bWVudCB3cmFwcGVyIGZvciBhIGRvY3VtZW50IHRoYXQg
aXMgYWJvdXQgdG8gYmUgZGVsZXRlZC4KKyAgICAvLyBJZiB0aGUgRm9yY2VTZXQgYmVsb3cgY2F1
c2VzIGEgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGUgZG9jdW1lbnQKKyAgICAvLyBtaWdodCBnZXQg
ZGVsZXRlZCBhbmQgdGhlIGdsb2JhbCBoYW5kbGUgZm9yIHRoZSBkb2N1bWVudAorICAgIC8vIHdy
YXBwZXIgY2xlYXJlZC4gVXNpbmcgdGhlIGNsZWFyZWQgZ2xvYmFsIGhhbmRsZSB3aWxsIGxlYWQg
dG8KKyAgICAvLyBjcmFzaGVzLiBJbiB0aGlzIGNhc2Ugd2UgY2xlYXIgdGhlIGNhY2hlIGFuZCBs
ZXQgdGhlIERPTVdpbmRvdworICAgIC8vIGFjY2Vzc29yIGhhbmRsZSBhY2Nlc3MgdG8gdGhlIGRv
Y3VtZW50LgorICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAg
ICBjbGVhckRvY3VtZW50V3JhcHBlckNhY2hlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZG9jdW1lbnRXcmFwcGVyID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisKKyAgICAvLyBJ
ZiBpbnN0YW50aWF0aW9uIG9mIHRoZSBkb2N1bWVudCB3cmFwcGVyIGZhaWxzLCBjbGVhciB0aGUg
Y2FjaGUKKyAgICAvLyBhbmQgbGV0IHRoZSBET01XaW5kb3cgYWNjZXNzb3IgaGFuZGxlIGFjY2Vz
cyB0byB0aGUgZG9jdW1lbnQuCisgICAgaWYgKGRvY3VtZW50V3JhcHBlci5Jc0VtcHR5KCkpIHsK
KyAgICAgICAgY2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1fY29udGV4dC0+R2xvYmFsKCktPkZvcmNlU2V0KHY4OjpTdHJpbmc6Ok5ldygi
ZG9jdW1lbnQiKSwgZG9jdW1lbnRXcmFwcGVyLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpSZWFkT25seSB8IHY4OjpEb250RGVsZXRlKSk7Cit9CisKK3ZvaWQgVjhET01X
aW5kb3dTaGVsbDo6Y2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSgpCit7CisgICAgQVNTRVJUKCFt
X2NvbnRleHQuSXNFbXB0eSgpKTsKKyAgICBtX2NvbnRleHQtPkdsb2JhbCgpLT5Gb3JjZURlbGV0
ZSh2ODo6U3RyaW5nOjpOZXcoImRvY3VtZW50IikpOworfQorCit2b2lkIFY4RE9NV2luZG93U2hl
bGw6OnNldFNlY3VyaXR5VG9rZW4oKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJh
bWUtPmRvY3VtZW50KCk7CisgICAgLy8gU2V0dXAgc2VjdXJpdHkgb3JpZ2luIGFuZCBzZWN1cml0
eSB0b2tlbi4KKyAgICBpZiAoIWRvY3VtZW50KSB7CisgICAgICAgIG1fY29udGV4dC0+VXNlRGVm
YXVsdFNlY3VyaXR5VG9rZW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEFz
ayB0aGUgZG9jdW1lbnQncyBTZWN1cml0eU9yaWdpbiB0byBnZW5lcmF0ZSBhIHNlY3VyaXR5IHRv
a2VuLgorICAgIC8vIElmIHR3byB0b2tlbnMgYXJlIGVxdWFsLCB0aGVuIHRoZSBTZWN1cml0eU9y
aWdpbnMgY2FuQWNjZXNzIGVhY2ggb3RoZXIuCisgICAgLy8gSWYgdHdvIHRva2VucyBhcmUgbm90
IGVxdWFsLCB0aGVuIHdlIGhhdmUgdG8gY2FsbCBjYW5BY2Nlc3MuCisgICAgLy8gTm90ZTogd2Ug
Y2FuJ3QgdXNlIHRoZSBIVFRQT3JpZ2luIGlmIGl0IHdhcyBzZXQgZnJvbSB0aGUgRE9NLgorICAg
IFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKKyAg
ICBTdHJpbmcgdG9rZW47CisgICAgaWYgKCFvcmlnaW4tPmRvbWFpbldhc1NldEluRE9NKCkpCisg
ICAgICAgIHRva2VuID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7CisK
KyAgICAvLyBBbiBlbXB0eSBvciAibnVsbCIgdG9rZW4gbWVhbnMgd2UgYWx3YXlzIGhhdmUgdG8g
Y2FsbAorICAgIC8vIGNhbkFjY2Vzcy4gVGhlIHRvU3RyaW5nIG1ldGhvZCBvbiBzZWN1cml0eU9y
aWdpbnMgcmV0dXJucyB0aGUKKyAgICAvLyBzdHJpbmcgIm51bGwiIGZvciBlbXB0eSBzZWN1cml0
eSBvcmlnaW5zIGFuZCBmb3Igc2VjdXJpdHkKKyAgICAvLyBvcmlnaW5zIHRoYXQgc2hvdWxkIG9u
bHkgYWxsb3cgYWNjZXNzIHRvIHRoZW1zZWx2ZXMuIEluIHRoaXMKKyAgICAvLyBjYXNlLCB3ZSB1
c2UgdGhlIGdsb2JhbCBvYmplY3QgYXMgdGhlIHNlY3VyaXR5IHRva2VuIHRvIGF2b2lkCisgICAg
Ly8gY2FsbGluZyBjYW5BY2Nlc3Mgd2hlbiBhIHNjcmlwdCBhY2Nlc3NlcyBpdHMgb3duIG9iamVj
dHMuCisgICAgaWYgKHRva2VuLmlzRW1wdHkoKSB8fCB0b2tlbiA9PSAibnVsbCIpIHsKKyAgICAg
ICAgbV9jb250ZXh0LT5Vc2VEZWZhdWx0U2VjdXJpdHlUb2tlbigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQ1N0cmluZyB1dGY4VG9rZW4gPSB0b2tlbi51dGY4KCk7CisgICAgLy8g
Tk9URTogVjggZG9lcyBpZGVudGl0eSBjb21wYXJpc29uIGluIGZhc3QgcGF0aCwgbXVzdCB1c2Ug
YSBzeW1ib2wKKyAgICAvLyBhcyB0aGUgc2VjdXJpdHkgdG9rZW4uCisgICAgbV9jb250ZXh0LT5T
ZXRTZWN1cml0eVRva2VuKHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCh1dGY4VG9rZW4uZGF0YSgpLCB1
dGY4VG9rZW4ubGVuZ3RoKCkpKTsKK30KKwordm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVE
b2N1bWVudCgpCit7CisgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9nbG9iYWwuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBUaGVyZSBpcyBhbiBleGlzdGluZyBKYXZhU2NyaXB0IHdyYXBwZXIgZm9yIHRoZSBnbG9i
YWwgb2JqZWN0CisgICAgLy8gb2YgdGhpcyBmcmFtZS4gSmF2YVNjcmlwdCBjb2RlIGluIG90aGVy
IGZyYW1lcyBtaWdodCBob2xkIGEKKyAgICAvLyByZWZlcmVuY2UgdG8gdGhpcyB3cmFwcGVyLiBX
ZSBlYWdlcmx5IGluaXRpYWxpemUgdGhlIEphdmFTY3JpcHQKKyAgICAvLyBjb250ZXh0IGZvciB0
aGUgbmV3IGRvY3VtZW50IHRvIG1ha2UgcHJvcGVydHkgYWNjZXNzIG9uIHRoZQorICAgIC8vIGds
b2JhbCBvYmplY3Qgd3JhcHBlciBzdWNjZWVkLgorICAgIGluaXRDb250ZXh0SWZOZWVkZWQoKTsK
KworICAgIC8vIEJhaWwgb3V0IGlmIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gZmFpbGVkLgorICAg
IGlmIChtX2NvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBo
YXZlIGEgbmV3IGRvY3VtZW50IGFuZCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY2FjaGUuCisgICAg
dXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKKworICAgIHVwZGF0ZVNlY3VyaXR5T3JpZ2lu
KCk7Cit9CisKK3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlU2VjdXJpdHlPcmlnaW4oKQor
eworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICBzZXRTZWN1cml0eVRva2VuKCk7Cit9
CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvd1NoZWxsOjpnZXRIaWRkZW5PYmpl
Y3RQcm90b3R5cGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKK3sKKyAgICByZXR1
cm4gY29udGV4dC0+R2xvYmFsKCktPkdldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1l
OjpvYmplY3RQcm90b3R5cGUoKSk7Cit9CisKK3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFs
bEhpZGRlbk9iamVjdFByb3RvdHlwZSh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQor
eworICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gb2JqZWN0U3RyaW5nID0gdjg6OlN0cmluZzo6
TmV3KCJPYmplY3QiKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHByb3RvdHlwZVN0cmlu
ZyA9IHY4OjpTdHJpbmc6Ok5ldygicHJvdG90eXBlIik7CisgICAgdjg6OkhhbmRsZTx2ODo6U3Ry
aW5nPiBoaWRkZW5PYmplY3RQcm90b3R5cGVTdHJpbmcgPSBWOEhpZGRlblByb3BlcnR5TmFtZTo6
b2JqZWN0UHJvdG90eXBlKCk7CisgICAgLy8gQmFpbCBvdXQgaWYgYWxsb2NhdGlvbiBmYWlsZWQu
CisgICAgaWYgKG9iamVjdFN0cmluZy5Jc0VtcHR5KCkgfHwgcHJvdG90eXBlU3RyaW5nLklzRW1w
dHkoKSB8fCBoaWRkZW5PYmplY3RQcm90b3R5cGVTdHJpbmcuSXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldChvYmplY3RTdHJpbmcpKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90eXBlID0gb2JqZWN0LT5HZXQo
cHJvdG90eXBlU3RyaW5nKTsKKworICAgIGNvbnRleHQtPkdsb2JhbCgpLT5TZXRIaWRkZW5WYWx1
ZShoaWRkZW5PYmplY3RQcm90b3R5cGVTdHJpbmcsIG9iamVjdFByb3RvdHlwZSk7Cit9CisKK3Y4
OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVXcmFwcGVyRnJvbUNh
Y2hlU2xvd0Nhc2UoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUpCit7CisgICAgLy8g
Tm90IGluIGNhY2hlLgorICAgIGludCBjbGFzc0luZGV4ID0gVjhDbGFzc0luZGV4OjpUb0ludCh0
eXBlKTsKKyAgICBpbml0Q29udGV4dElmTmVlZGVkKCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3Bl
IHNjb3BlKG1fY29udGV4dCk7CisgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24g
PSBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUsIGdldEhpZGRlbk9iamVjdFByb3Rv
dHlwZShtX2NvbnRleHQpKTsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFuY2UgPSBT
YWZlQWxsb2NhdGlvbjo6bmV3SW5zdGFuY2UoZnVuY3Rpb24pOworICAgIGlmICghaW5zdGFuY2Uu
SXNFbXB0eSgpKSB7CisgICAgICAgIG1fd3JhcHBlckJvaWxlcnBsYXRlcy0+U2V0KHY4OjpJbnRl
Z2VyOjpOZXcoY2xhc3NJbmRleCksIGluc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNl
LT5DbG9uZSgpOworICAgIH0KKyAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
K30KKworCisKK30gLy8gV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdp
bmRvd1NoZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRv
d1NoZWxsLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93
U2hlbGwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4RE9NV2lu
ZG93U2hlbGxfaAorI2RlZmluZSBWOERPTVdpbmRvd1NoZWxsX2gKKworI2luY2x1ZGUgPHY4Lmg+
CisKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBET01XaW5kb3c7CitjbGFzcyBGcmFtZTsKKworLy8gVjhXaW5kb3dTaGVsbCByZXByZXNl
bnRzIGFsbCB0aGUgcGVyLWdsb2JhbCBvYmplY3Qgc3RhdGUgZm9yIGEgRnJhbWUgdGhhdAorLy8g
cGVyc2lzdCBiZXR3ZWVuIG5hdmlnYXRpb25zLgorY2xhc3MgVjhET01XaW5kb3dTaGVsbCA6IHB1
YmxpYyBSZWZDb3VudGVkPFY4RE9NV2luZG93U2hlbGw+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxWOERPTVdpbmRvd1NoZWxsPiBjcmVhdGUoRnJhbWUqKTsKKworICAgIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0K
KworICAgIC8vIFVwZGF0ZSBkb2N1bWVudCBvYmplY3Qgb2YgdGhlIGZyYW1lLgorICAgIHZvaWQg
dXBkYXRlRG9jdW1lbnQoKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgc2VjdXJpdHkgb3JpZ2luIG9m
IGEgZG9jdW1lbnQKKyAgICAvLyAoZS5nLiwgYWZ0ZXIgc2V0dGluZyBkb2NvdW1lbnQuZG9tYWlu
KS4KKyAgICB2b2lkIHVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7CisKKyAgICBib29sIGlzQ29udGV4
dEluaXRpYWxpemVkKCk7CisKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gY3JlYXRl
TmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCwgaW50IGV4dGVuc2lvbkdy
b3VwKTsKKyAgICBzdGF0aWMgYm9vbCBpbnN0YWxsRE9NV2luZG93KHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQsIERPTVdpbmRvdyopOworCisgICAgdm9pZCBpbml0Q29udGV4dElmTmVl
ZGVkKCk7CisgICAgdm9pZCB1cGRhdGVEb2N1bWVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdyYXBwZXIpOworCisgICAgdm9pZCBjbGVhckZvck5hdmlnYXRpb24oKTsKKyAgICB2b2lk
IGNsZWFyRm9yQ2xvc2UoKTsKKworICAgIHZvaWQgZGVzdHJveUdsb2JhbCgpOworCisgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUodjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4pOworICAgIC8vIFdBUk5JTkc6IENhbGwgfGluc3RhbGxIaWRkZW5P
YmplY3RQcm90b3R5cGV8IG9ubHkgb24gZnJlc2ggY29udGV4dHMhCisgICAgc3RhdGljIHZvaWQg
aW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlwZSh2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pik7CisK
KyAgICAvLyBUbyBjcmVhdGUgSlMgV3JhcHBlciBvYmplY3RzLCB3ZSBjcmVhdGUgYSBjYWNoZSBv
ZiBhICdib2lsZXIgcGxhdGUnCisgICAgLy8gb2JqZWN0LCBhbmQgdGhlbiBzaW1wbHkgQ2xvbmUg
dGhhdCBvYmplY3QgZWFjaCB0aW1lIHdlIG5lZWQgYSBuZXcgb25lLgorICAgIC8vIFRoaXMgaXMg
ZmFzdGVyIHRoYW4gZ29pbmcgdGhyb3VnaCB0aGUgZnVsbCBvYmplY3QgY3JlYXRpb24gcHJvY2Vz
cy4KKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBlckZyb21DYWNoZShWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIGludCBjbGFzc0lu
ZGV4ID0gVjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGNsb25lKG1fd3JhcHBlckJvaWxlcnBsYXRlcy0+Q2xvbmVFbGVtZW50QXQoY2xhc3NJ
bmRleCkpOworICAgICAgICByZXR1cm4gY2xvbmUuSXNFbXB0eSgpID8gY3JlYXRlV3JhcHBlckZy
b21DYWNoZVNsb3dDYXNlKHR5cGUpIDogY2xvbmU7CisgICAgfQorCitwcml2YXRlOgorICAgIFY4
RE9NV2luZG93U2hlbGwoRnJhbWUqKTsKKworICAgIHZvaWQgZGlzcG9zZUNvbnRleHRIYW5kbGVz
KCk7CisKKyAgICB2b2lkIHNldFNlY3VyaXR5VG9rZW4oKTsKKyAgICB2b2lkIGNsZWFyRG9jdW1l
bnRXcmFwcGVyKCk7CisKKyAgICAvLyBUaGUgSmF2YVNjcmlwdCB3cmFwcGVyIGZvciB0aGUgZG9j
dW1lbnQgb2JqZWN0IGlzIGNhY2hlZCBvbiB0aGUgZ2xvYmFsCisgICAgLy8gb2JqZWN0IGZvciBm
YXN0IGFjY2Vzcy4gVXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUgc2V0cyB0aGUgd3JhcHBlcgor
ICAgIC8vIGZvciB0aGUgY3VycmVudCBkb2N1bWVudCBvbiB0aGUgZ2xvYmFsIG9iamVjdC4gQ2xl
YXJEb2N1bWVudFdyYXBwZXJDYWNoZQorICAgIC8vIGRlbGV0ZXMgdGhlIGRvY3VtZW50IHdyYXBw
ZXIgZnJvbSB0aGUgZ2xvYmFsIG9iamVjdC4KKyAgICB2b2lkIHVwZGF0ZURvY3VtZW50V3JhcHBl
ckNhY2hlKCk7CisgICAgdm9pZCBjbGVhckRvY3VtZW50V3JhcHBlckNhY2hlKCk7CisKKyAgICB2
ODo6TG9jYWw8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBlckZyb21DYWNoZVNsb3dDYXNlKFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSk7CisKKyAgICBGcmFtZSogbV9mcmFtZTsKKworICAgIC8v
IEZvciBlYWNoIHBvc3NpYmxlIHR5cGUgb2Ygd3JhcHBlciwgd2Uga2VlcCBhIGJvaWxlcnBsYXRl
IG9iamVjdC4KKyAgICAvLyBUaGUgYm9pbGVycGxhdGUgaXMgdXNlZCB0byBjcmVhdGUgYWRkaXRp
b25hbCB3cmFwcGVycyBvZiB0aGUgc2FtZQorICAgIC8vIHR5cGUuICBXZSBrZWVwIGEgc2luZ2xl
IHBlcnNpc3RlbnQgaGFuZGxlIHRvIGFuIGFycmF5IG9mIHRoZQorICAgIC8vIGFjdGl2YXRlZCBi
b2lsZXJwbGF0ZXMuCisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkFycmF5PiBtX3dyYXBwZXJCb2ls
ZXJwbGF0ZXM7CisKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gbV9jb250ZXh0Owor
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fZ2xvYmFsOworICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpWYWx1ZT4gbV9kb2N1bWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFY4RE9NV2luZG93U2hlbGxfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XcmFwcGVyLmNwcAkocmV2aXNpb24gNTI2MzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MCw3ICs1OTAsNyBAQCB2ODo6TG9j
YWw8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OmdlCiAgICAgLy8gRW50ZXIgdGhlIHNjb3Bl
IGZvciB0aGlzIGNvbnRleHQgdG8gZ2V0IHRoZSBjb3JyZWN0IGNvbnN0cnVjdG9yLgogICAgIHY4
OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKIAotICAgIHJldHVybiBnZXRDb25zdHJ1
Y3Rvcih0eXBlLCBWOFByb3h5OjpnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUoY29udGV4dCkpOwor
ICAgIHJldHVybiBnZXRDb25zdHJ1Y3Rvcih0eXBlLCBWOERPTVdpbmRvd1NoZWxsOjpnZXRIaWRk
ZW5PYmplY3RQcm90b3R5cGUoY29udGV4dCkpOwogfQogCiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9u
PiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSB0eXBlLCBET01XaW5kb3cqIHdpbmRvdykKQEAgLTg2NSw3ICs4NjUsOCBAQCB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gVjhET01XcmFwcGVyOjppbnN0CiAKICAgICB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gaW5zdGFuY2U7CiAgICAgaWYgKHByb3h5KQotICAgICAgICBpbnN0YW5jZSA9IHByb3h5LT5j
cmVhdGVXcmFwcGVyRnJvbUNhY2hlKGRlc2NyaXB0b3JUeXBlKTsKKyAgICAgICAgLy8gRklYTUU6
IEZpeCB0aGlzIHRvIHdvcmsgcHJvcGVybHkgd2l0aCBpc29sYXRlZCB3b3JsZHMgKHNlZSBhYm92
ZSkuCisgICAgICAgIGluc3RhbmNlID0gcHJveHktPndpbmRvd1NoZWxsKCktPmNyZWF0ZVdyYXBw
ZXJGcm9tQ2FjaGUoZGVzY3JpcHRvclR5cGUpOwogICAgIGVsc2UgewogICAgICAgICB2ODo6TG9j
YWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IGdldFRlbXBsYXRlKGRlc2NyaXB0b3JUeXBlKS0+
R2V0RnVuY3Rpb24oKTsKICAgICAgICAgaW5zdGFuY2UgPSBTYWZlQWxsb2NhdGlvbjo6bmV3SW5z
dGFuY2UoZnVuY3Rpb24pOwpAQCAtMTI2OCw3ICsxMjY5LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4RE9NV3JhcHBlcjo6Y29udgogICAgIC8vIGNoZWNraW5nIGlmIHRoZSBub2RlIGFscmVh
ZHkgaGFzIGEgd3JhcHBlci4KICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZl
KGRvY3VtZW50LT5mcmFtZSgpKTsKICAgICBpZiAocHJveHkpCi0gICAgICAgIHByb3h5LT5pbml0
Q29udGV4dElmTmVlZGVkKCk7CisgICAgICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT5pbml0Q29u
dGV4dElmTmVlZGVkKCk7CiAKICAgICBET01XcmFwcGVyTWFwPE5vZGU+JiBkb21Ob2RlTWFwID0g
Z2V0RE9NTm9kZU1hcCgpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGRv
bU5vZGVNYXAuZ2V0KGRvY3VtZW50KTsKQEAgLTEzNTgsNyArMTM1OSw3IEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnYKIAogICAgIGlmIChpc0RvY3VtZW50KSB7CiAg
ICAgICAgIGlmIChwcm94eSkKLSAgICAgICAgICAgIHByb3h5LT51cGRhdGVEb2N1bWVudFdyYXBw
ZXIocmVzdWx0KTsKKyAgICAgICAgICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1
bWVudFdyYXBwZXIocmVzdWx0KTsKIAogICAgICAgICBpZiAodHlwZSA9PSBWOENsYXNzSW5kZXg6
OkhUTUxET0NVTUVOVCkgewogICAgICAgICAgICAgLy8gQ3JlYXRlIG1hcmtlciBvYmplY3QgYW5k
IGluc2VydCBpdCBpbiB0d28gaW50ZXJuYWwgZmllbGRzLgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9WOElzb2xhdGVkV29ybGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhJc29sYXRlZFdvcmxkLmNwcAkocmV2aXNpb24gNTI2MzUpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDgg
QEAgVjhJc29sYXRlZFdvcmxkOjpWOElzb2xhdGVkV29ybGQoVjhQcm94eQogICAgICsraXNvbGF0
ZWRXb3JsZENvdW50OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIG1fY29udGV4
dCA9IFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+OjpjcmVhdGUocHJveHktPmNyZWF0ZU5l
d0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBleHRlbnNpb25Hcm91cCkpOworICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgY3JlYXRpbmcgYSBuZXcgVjhET01XaW5kb3dTaGVsbCBo
ZXJlIGluc3RlYWQgb2YgcmlwaW5nIG91dCB0aGUgY29udGV4dC4KKyAgICBtX2NvbnRleHQgPSBT
aGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6Y3JlYXRlKHByb3h5LT53aW5kb3dTaGVsbCgp
LT5jcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgZXh0ZW5zaW9uR3Jv
dXApKTsKICAgICBpZiAobV9jb250ZXh0LT5nZXQoKS5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNjYsOCArNjcsOSBAQCBWOElzb2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZChW
OFByb3h5CiAKICAgICBnZXRHbG9iYWxPYmplY3QobV9jb250ZXh0LT5nZXQoKSktPlNldFBvaW50
ZXJJbkludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XaW5kb3dFbnRlcmVkSXNvbGF0ZWRXb3Js
ZEluZGV4LCB0aGlzKTsKIAotICAgIFY4UHJveHk6Omluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5
cGUobV9jb250ZXh0LT5nZXQoKSk7Ci0gICAgcHJveHktPmluc3RhbGxET01XaW5kb3cobV9jb250
ZXh0LT5nZXQoKSwgcHJveHktPmZyYW1lKCktPmRvbVdpbmRvdygpKTsKKyAgICBWOERPTVdpbmRv
d1NoZWxsOjppbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKG1fY29udGV4dC0+Z2V0KCkpOwor
ICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgZ28gYXdheSBvbmNlIHdlIGhhdmUgYSB3aW5kb3dTaGVs
bCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLgorICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT5pbnN0
YWxsRE9NV2luZG93KG1fY29udGV4dC0+Z2V0KCksIHByb3h5LT5mcmFtZSgpLT5kb21XaW5kb3co
KSk7CiAKICAgICAvLyBVc2luZyB0aGUgZGVmYXVsdCBzZWN1cml0eSB0b2tlbiBtZWFucyB0aGF0
IHRoZSBjYW5BY2Nlc3MgaXMgYWx3YXlzCiAgICAgLy8gY2FsbGVkLCB3aGljaCBpcyBzbG93LgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCShyZXZpc2lvbiA1MjYzNSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCwxMyArMjA0LDYg
QEAgdm9pZCBWOFByb3h5OjpyZXBvcnRVbnNhZmVBY2Nlc3NUbyhGcmFtZQogICAgIH0KIH0KIAot
c3RhdGljIHZvaWQgcmVwb3J0VW5zYWZlSmF2YVNjcmlwdEFjY2Vzcyh2ODo6TG9jYWw8djg6Ok9i
amVjdD4gaG9zdCwgdjg6OkFjY2Vzc1R5cGUgdHlwZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZGF0
YSkKLXsKLSAgICBGcmFtZSogdGFyZ2V0ID0gVjhDdXN0b206OkdldFRhcmdldEZyYW1lKGhvc3Qs
IGRhdGEpOwotICAgIGlmICh0YXJnZXQpCi0gICAgICAgIFY4UHJveHk6OnJlcG9ydFVuc2FmZUFj
Y2Vzc1RvKHRhcmdldCwgVjhQcm94eTo6UmVwb3J0TGF0ZXIpOwotfQotCiBzdGF0aWMgdm9pZCBo
YW5kbGVGYXRhbEVycm9ySW5WOCgpCiB7CiAgICAgLy8gRklYTUU6IFdlIHRlbXBvcmFyaWx5IGRl
YWwgd2l0aCBWOCBpbnRlcm5hbCBlcnJvciBzaXR1YXRpb25zCkBAIC0yMTgsMTcgKzIxMSw5IEBA
IHN0YXRpYyB2b2lkIGhhbmRsZUZhdGFsRXJyb3JJblY4KCkKICAgICBDUkFTSCgpOwogfQogCi1z
dGF0aWMgdm9pZCByZXBvcnRGYXRhbEVycm9ySW5WOChjb25zdCBjaGFyKiBsb2NhdGlvbiwgY29u
c3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICAvLyBWOCBpcyBzaHV0ZG93biwgd2UgY2Fubm90IHVz
ZSBWOCBhcGkuCi0gICAgLy8gVGhlIG9ubHkgdGhpbmcgd2UgY2FuIGRvIGlzIHRvIGRpc2FibGUg
SmF2YVNjcmlwdC4KLSAgICAvLyBGSVhNRTogY2xlYW4gdXAgVjhQcm94eSBhbmQgZGlzYWJsZSBK
YXZhU2NyaXB0LgotICAgIHByaW50ZigiVjggZXJyb3I6ICVzICglcylcbiIsIG1lc3NhZ2UsIGxv
Y2F0aW9uKTsKLSAgICBoYW5kbGVGYXRhbEVycm9ySW5WOCgpOwotfQotCiBWOFByb3h5OjpWOFBy
b3h5KEZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3dpbmRvd1No
ZWxsKFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZShmcmFtZSkpCiAgICAgLCBtX2lubGluZUNvZGUo
ZmFsc2UpCiAgICAgLCBtX3RpbWVyQ2FsbGJhY2soZmFsc2UpCiAgICAgLCBtX3JlY3Vyc2lvbigw
KQpAQCAtMjM4LDE4ICsyMjMsNyBAQCBWOFByb3h5OjpWOFByb3h5KEZyYW1lKiBmcmFtZSkKIFY4
UHJveHk6On5WOFByb3h5KCkKIHsKICAgICBjbGVhckZvckNsb3NlKCk7Ci0gICAgZGVzdHJveUds
b2JhbCgpOwotfQotCi12b2lkIFY4UHJveHk6OmRlc3Ryb3lHbG9iYWwoKQotewotICAgIGlmICgh
bV9nbG9iYWwuSXNFbXB0eSgpKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBWOEdDQ29udHJv
bGxlcjo6dW5yZWdpc3Rlckdsb2JhbEhhbmRsZSh0aGlzLCBtX2dsb2JhbCk7Ci0jZW5kaWYKLSAg
ICAgICAgbV9nbG9iYWwuRGlzcG9zZSgpOwotICAgICAgICBtX2dsb2JhbC5DbGVhcigpOwotICAg
IH0KKyAgICB3aW5kb3dTaGVsbCgpLT5kZXN0cm95R2xvYmFsKCk7CiB9CiAKIHY4OjpIYW5kbGU8
djg6OlNjcmlwdD4gVjhQcm94eTo6Y29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSkKQEAgLTI3Nyw3ICsy
NTEsNyBAQCBib29sIFY4UHJveHk6OmhhbmRsZU91dE9mTWVtb3J5KCkKICAgICAgICAgLy8gQ2xl
YW4gbV9jb250ZXh0LCBhbmQgZXZlbnQgaGFuZGxlcnMuCiAgICAgICAgIHByb3h5LT5jbGVhckZv
ckNsb3NlKCk7CiAKLSAgICAgICAgcHJveHktPmRlc3Ryb3lHbG9iYWwoKTsKKyAgICAgICAgcHJv
eHktPndpbmRvd1NoZWxsKCktPmRlc3Ryb3lHbG9iYWwoKTsKICAgICB9CiAKICAgICBDaHJvbWl1
bUJyaWRnZTo6bm90aWZ5SlNPdXRPZk1lbW9yeShmcmFtZSk7CkBAIC0yOTIsNyArMjY2LDggQEAg
Ym9vbCBWOFByb3h5OjpoYW5kbGVPdXRPZk1lbW9yeSgpCiAKIHZvaWQgVjhQcm94eTo6ZXZhbHVh
dGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VD
b2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQogewotICAgIGluaXRDb250ZXh0SWZO
ZWVkZWQoKTsKKyAgICAvLyBGSVhNRTogVGhpcyB3aWxsIG5lZWQgdG8gZ2V0IHJlb3JnYW5pemVk
IG9uY2Ugd2UgaGF2ZSBhIHdpbmRvd1NoZWxsIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQuCisgICAg
d2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpOwogCiAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwogICAgIFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSAwOwpAQCAtMzM0
LDIwICszMDksMjEgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbgog
ICAgICAgd29ybGQtPmRlc3Ryb3koKTsKIH0KIAorLy8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUg
dGhpcyBmdW5jdGlvbiEKIHZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbk5ld0NvbnRleHQoY29uc3Qg
VmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApCiB7
Ci0gICAgaW5pdENvbnRleHRJZk5lZWRlZCgpOworICAgIHdpbmRvd1NoZWxsKCktPmluaXRDb250
ZXh0SWZOZWVkZWQoKTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAogICAg
IC8vIFNldCB1cCB0aGUgRE9NIHdpbmRvdyBhcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBuZXcgZ2xv
YmFsIG9iamVjdC4KLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB3aW5kb3dDb250ZXh0ID0g
bV9jb250ZXh0OworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHdpbmRvd0NvbnRleHQgPSB3
aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5k
b3dHbG9iYWwgPSB3aW5kb3dDb250ZXh0LT5HbG9iYWwoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdpbmRvd1dyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIHdpbmRvd0dsb2JhbCk7CiAKICAgICBBU1NFUlQoVjhET01X
cmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPERPTVdpbmRvdz4od2luZG93V3JhcHBl
cikgPT0gbV9mcmFtZS0+ZG9tV2luZG93KCkpOwogCi0gICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNv
bnRleHQ+IGNvbnRleHQgPSBjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4o
KSwgZXh0ZW5zaW9uR3JvdXApOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBjb250
ZXh0ID0gd2luZG93U2hlbGwoKS0+Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+KCksIGV4dGVuc2lvbkdyb3VwKTsKICAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMzg3LDkgKzM2MywxMCBAQCBib29sIFY4UHJveHk6OnNldEluamVj
dGVkU2NyaXB0Q29udGV4dERlCiB7CiAgICAgLy8gU2V0dXAgY29udGV4dCBpZCBmb3IgSlMgZGVi
dWdnZXIuCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZSh0YXJnZXRDb250ZXh0
KTsKLSAgICBpZiAobV9jb250ZXh0LklzRW1wdHkoKSkKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0ID0gd2luZG93U2hlbGwoKS0+Y29udGV4dCgpOworICAgIGlmIChjb250ZXh0
LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludCBkZWJ1Z0lkID0gY29u
dGV4dERlYnVnSWQobV9jb250ZXh0KTsKKyAgICBpbnQgZGVidWdJZCA9IGNvbnRleHREZWJ1Z0lk
KGNvbnRleHQpOwogCiAgICAgY2hhciBidWZmZXJbMzJdOwogICAgIGlmIChkZWJ1Z0lkID09IC0x
KQpAQCAtNTYzLDMwICs1NDAsNiBAQCB2ODo6TG9jYWw8djg6OlZhbHVlPiBWOFByb3h5OjpuZXdJ
bnN0YW5jCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4
UHJveHk6OmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGVTbG93Q2FzZShWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgdHlwZSkKLXsKLSAgICAvLyBOb3QgaW4gY2FjaGUuCi0gICAgaW50IGNsYXNzSW5k
ZXggPSBWOENsYXNzSW5kZXg6OlRvSW50KHR5cGUpOwotICAgIGluaXRDb250ZXh0SWZOZWVkZWQo
KTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUobV9jb250ZXh0KTsKLSAgICB2ODo6TG9j
YWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3Io
dHlwZSwgZ2V0SGlkZGVuT2JqZWN0UHJvdG90eXBlKG1fY29udGV4dCkpOwotICAgIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBpbnN0YW5jZSA9IFNhZmVBbGxvY2F0aW9uOjpuZXdJbnN0YW5jZShmdW5j
dGlvbik7Ci0gICAgaWYgKCFpbnN0YW5jZS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgbV93cmFwcGVy
Qm9pbGVycGxhdGVzLT5TZXQodjg6OkludGVnZXI6Ok5ldyhjbGFzc0luZGV4KSwgaW5zdGFuY2Up
OwotICAgICAgICByZXR1cm4gaW5zdGFuY2UtPkNsb25lKCk7Ci0gICAgfQotICAgIHJldHVybiBu
b3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwotfQotCi1ib29sIFY4UHJveHk6OmlzQ29udGV4dElu
aXRpYWxpemVkKCkKLXsKLSAgICAvLyBtX2NvbnRleHQsIG1fZ2xvYmFsLCBhbmQgbV93cmFwcGVy
Qm9pbGVycGxhdGVzIHNob3VsZAotICAgIC8vIGFsbCBiZSBub24tZW1wdHkgaWYgaWYgbV9jb250
ZXh0IGlzIG5vbi1lbXB0eS4KLSAgICBBU1NFUlQobV9jb250ZXh0LklzRW1wdHkoKSB8fCAhbV9n
bG9iYWwuSXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9jb250ZXh0LklzRW1wdHkoKSB8fCAhbV93
cmFwcGVyQm9pbGVycGxhdGVzLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuICFtX2NvbnRleHQuSXNF
bXB0eSgpOwotfQotCiBET01XaW5kb3cqIFY4UHJveHk6OnJldHJpZXZlV2luZG93KHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBn
bG9iYWwgPSBjb250ZXh0LT5HbG9iYWwoKTsKQEAgLTY1Nyw3OSArNjEwLDYgQEAgdm9pZCBWOFBy
b3h5OjpkaXNjb25uZWN0RnJhbWUoKQogewogfQogCi12b2lkIFY4UHJveHk6OnVwZGF0ZURvY3Vt
ZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlcikKLXsKLSAgICBjbGVhckRv
Y3VtZW50V3JhcHBlcigpOwotCi0gICAgQVNTRVJUKG1fZG9jdW1lbnQuSXNFbXB0eSgpKTsKLSAg
ICBtX2RvY3VtZW50ID0gdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPjo6TmV3KHdyYXBwZXIpOwot
I2lmbmRlZiBOREVCVUcKLSAgICBWOEdDQ29udHJvbGxlcjo6cmVnaXN0ZXJHbG9iYWxIYW5kbGUo
UFJPWFksIHRoaXMsIG1fZG9jdW1lbnQpOwotI2VuZGlmCi19Ci0KLXZvaWQgVjhQcm94eTo6Y2xl
YXJEb2N1bWVudFdyYXBwZXIoKQotewotICAgIGlmICghbV9kb2N1bWVudC5Jc0VtcHR5KCkpIHsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFY4R0NDb250cm9sbGVyOjp1bnJlZ2lzdGVyR2xvYmFs
SGFuZGxlKHRoaXMsIG1fZG9jdW1lbnQpOwotI2VuZGlmCi0gICAgICAgIG1fZG9jdW1lbnQuRGlz
cG9zZSgpOwotICAgICAgICBtX2RvY3VtZW50LkNsZWFyKCk7Ci0gICAgfQotfQotCi12b2lkIFY4
UHJveHk6OnVwZGF0ZURvY3VtZW50V3JhcHBlckNhY2hlKCkKLXsKLSAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX2Nv
bnRleHQpOwotCi0gICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyBubyBmcmFtZSwgTm9kZVRvVjhP
YmplY3QgbWlnaHQgZ2V0IHRoZQotICAgIC8vIGRvY3VtZW50IHdyYXBwZXIgZm9yIGEgZG9jdW1l
bnQgdGhhdCBpcyBhYm91dCB0byBiZSBkZWxldGVkLgotICAgIC8vIElmIHRoZSBGb3JjZVNldCBi
ZWxvdyBjYXVzZXMgYSBnYXJiYWdlIGNvbGxlY3Rpb24sIHRoZSBkb2N1bWVudAotICAgIC8vIG1p
Z2h0IGdldCBkZWxldGVkIGFuZCB0aGUgZ2xvYmFsIGhhbmRsZSBmb3IgdGhlIGRvY3VtZW50Ci0g
ICAgLy8gd3JhcHBlciBjbGVhcmVkLiBVc2luZyB0aGUgY2xlYXJlZCBnbG9iYWwgaGFuZGxlIHdp
bGwgbGVhZCB0bwotICAgIC8vIGNyYXNoZXMuIEluIHRoaXMgY2FzZSB3ZSBjbGVhciB0aGUgY2Fj
aGUgYW5kIGxldCB0aGUgRE9NV2luZG93Ci0gICAgLy8gYWNjZXNzb3IgaGFuZGxlIGFjY2VzcyB0
byB0aGUgZG9jdW1lbnQuCi0gICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpLT5mcmFtZSgpKSB7
Ci0gICAgICAgIGNsZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkb2N1bWVudFdyYXBwZXIgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKLQot
ICAgIC8vIElmIGluc3RhbnRpYXRpb24gb2YgdGhlIGRvY3VtZW50IHdyYXBwZXIgZmFpbHMsIGNs
ZWFyIHRoZSBjYWNoZQotICAgIC8vIGFuZCBsZXQgdGhlIERPTVdpbmRvdyBhY2Nlc3NvciBoYW5k
bGUgYWNjZXNzIHRvIHRoZSBkb2N1bWVudC4KLSAgICBpZiAoZG9jdW1lbnRXcmFwcGVyLklzRW1w
dHkoKSkgewotICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlckNhY2hlKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5HbG9iYWwoKS0+Rm9yY2VTZXQodjg6OlN0cmlu
Zzo6TmV3KCJkb2N1bWVudCIpLCBkb2N1bWVudFdyYXBwZXIsIHN0YXRpY19jYXN0PHY4OjpQcm9w
ZXJ0eUF0dHJpYnV0ZT4odjg6OlJlYWRPbmx5IHwgdjg6OkRvbnREZWxldGUpKTsKLX0KLQotdm9p
ZCBWOFByb3h5OjpjbGVhckRvY3VtZW50V3JhcHBlckNhY2hlKCkKLXsKLSAgICBBU1NFUlQoIW1f
Y29udGV4dC5Jc0VtcHR5KCkpOwotICAgIG1fY29udGV4dC0+R2xvYmFsKCktPkZvcmNlRGVsZXRl
KHY4OjpTdHJpbmc6Ok5ldygiZG9jdW1lbnQiKSk7Ci19Ci0KLXZvaWQgVjhQcm94eTo6ZGlzcG9z
ZUNvbnRleHRIYW5kbGVzKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWREZXN0cm95U2NyaXB0Q29udGV4
dEZvckZyYW1lKCk7Ci0gICAgICAgIG1fY29udGV4dC5EaXNwb3NlKCk7Ci0gICAgICAgIG1fY29u
dGV4dC5DbGVhcigpOwotICAgIH0KLQotICAgIGlmICghbV93cmFwcGVyQm9pbGVycGxhdGVzLklz
RW1wdHkoKSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgVjhHQ0NvbnRyb2xsZXI6OnVucmVn
aXN0ZXJHbG9iYWxIYW5kbGUodGhpcywgbV93cmFwcGVyQm9pbGVycGxhdGVzKTsKLSNlbmRpZgot
ICAgICAgICBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuRGlzcG9zZSgpOwotICAgICAgICBtX3dyYXBw
ZXJCb2lsZXJwbGF0ZXMuQ2xlYXIoKTsKLSAgICB9Ci19Ci0KIHZvaWQgVjhQcm94eTo6cmVsZWFz
ZVN0b3JhZ2VNdXRleCgpCiB7CiAgICAgLy8gSWYgd2UndmUganVzdCBsZWZ0IGEgdG9wIGxldmVs
IHNjcmlwdCBjb250ZXh0IGFuZCBsb2NhbCBzdG9yYWdlIGhhcyBiZWVuCkBAIC03NTYsMjg1ICs2
MzYsMTMgQEAgdm9pZCBWOFByb3h5OjpyZXNldElzb2xhdGVkV29ybGRzKCkKIHZvaWQgVjhQcm94
eTo6Y2xlYXJGb3JDbG9zZSgpCiB7CiAgICAgcmVzZXRJc29sYXRlZFdvcmxkcygpOwotCi0gICAg
aWYgKCFtX2NvbnRleHQuSXNFbXB0eSgpKSB7Ci0gICAgICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKLQotICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlcigpOwotICAgICAgICBkaXNw
b3NlQ29udGV4dEhhbmRsZXMoKTsKLSAgICB9CisgICAgd2luZG93U2hlbGwoKS0+Y2xlYXJGb3JD
bG9zZSgpOwogfQogCiB2b2lkIFY4UHJveHk6OmNsZWFyRm9yTmF2aWdhdGlvbigpCiB7CiAgICAg
cmVzZXRJc29sYXRlZFdvcmxkcygpOwotCi0gICAgaWYgKCFtX2NvbnRleHQuSXNFbXB0eSgpKSB7
Ci0gICAgICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGU7Ci0gICAgICAgIGNsZWFyRG9jdW1lbnRX
cmFwcGVyKCk7Ci0KLSAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX2Nv
bnRleHQpOwotCi0gICAgICAgIC8vIENsZWFyIHRoZSBkb2N1bWVudCB3cmFwcGVyIGNhY2hlIGJl
Zm9yZSB0dXJuaW5nIG9uIGFjY2VzcyBjaGVja3Mgb24KLSAgICAgICAgLy8gdGhlIG9sZCBET01X
aW5kb3cgd3JhcHBlci4gVGhpcyB3YXksIGFjY2VzcyB0byB0aGUgZG9jdW1lbnQgd3JhcHBlcgot
ICAgICAgICAvLyB3aWxsIGJlIHByb3RlY3RlZCBieSB0aGUgc2VjdXJpdHkgY2hlY2tzIG9uIHRo
ZSBET01XaW5kb3cgd3JhcHBlci4KLSAgICAgICAgY2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSgp
OwotCi0gICAgICAgIC8vIFR1cm4gb24gYWNjZXNzIGNoZWNrIG9uIHRoZSBvbGQgRE9NV2luZG93
IHdyYXBwZXIuCi0gICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4RE9N
V3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgbV9nbG9i
YWwpOwotICAgICAgICBBU1NFUlQoIXdyYXBwZXIuSXNFbXB0eSgpKTsKLSAgICAgICAgd3JhcHBl
ci0+VHVybk9uQWNjZXNzQ2hlY2soKTsKLQotICAgICAgICAvLyBTZXBhcmF0ZSB0aGUgY29udGV4
dCBmcm9tIGl0cyBnbG9iYWwgb2JqZWN0LgotICAgICAgICBtX2NvbnRleHQtPkRldGFjaEdsb2Jh
bCgpOwotCi0gICAgICAgIGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOwotICAgIH0KLX0KLQotdm9p
ZCBWOFByb3h5OjpzZXRTZWN1cml0eVRva2VuKCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIC8vIFNldHVwIHNlY3VyaXR5IG9yaWdpbiBhbmQg
c2VjdXJpdHkgdG9rZW4uCi0gICAgaWYgKCFkb2N1bWVudCkgewotICAgICAgICBtX2NvbnRleHQt
PlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBBc2sgdGhlIGRvY3VtZW50J3MgU2VjdXJpdHlPcmlnaW4gdG8gZ2VuZXJhdGUgYSBzZWN1
cml0eSB0b2tlbi4KLSAgICAvLyBJZiB0d28gdG9rZW5zIGFyZSBlcXVhbCwgdGhlbiB0aGUgU2Vj
dXJpdHlPcmlnaW5zIGNhbkFjY2VzcyBlYWNoIG90aGVyLgotICAgIC8vIElmIHR3byB0b2tlbnMg
YXJlIG5vdCBlcXVhbCwgdGhlbiB3ZSBoYXZlIHRvIGNhbGwgY2FuQWNjZXNzLgotICAgIC8vIE5v
dGU6IHdlIGNhbid0IHVzZSB0aGUgSFRUUE9yaWdpbiBpZiBpdCB3YXMgc2V0IGZyb20gdGhlIERP
TS4KLSAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCk7Ci0gICAgU3RyaW5nIHRva2VuOwotICAgIGlmICghb3JpZ2luLT5kb21haW5XYXNTZXRJbkRP
TSgpKQotICAgICAgICB0b2tlbiA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpOwotCi0gICAgLy8gQW4gZW1wdHkgb3IgIm51bGwiIHRva2VuIG1lYW5zIHdlIGFsd2F5cyBo
YXZlIHRvIGNhbGwKLSAgICAvLyBjYW5BY2Nlc3MuIFRoZSB0b1N0cmluZyBtZXRob2Qgb24gc2Vj
dXJpdHlPcmlnaW5zIHJldHVybnMgdGhlCi0gICAgLy8gc3RyaW5nICJudWxsIiBmb3IgZW1wdHkg
c2VjdXJpdHkgb3JpZ2lucyBhbmQgZm9yIHNlY3VyaXR5Ci0gICAgLy8gb3JpZ2lucyB0aGF0IHNo
b3VsZCBvbmx5IGFsbG93IGFjY2VzcyB0byB0aGVtc2VsdmVzLiBJbiB0aGlzCi0gICAgLy8gY2Fz
ZSwgd2UgdXNlIHRoZSBnbG9iYWwgb2JqZWN0IGFzIHRoZSBzZWN1cml0eSB0b2tlbiB0byBhdm9p
ZAotICAgIC8vIGNhbGxpbmcgY2FuQWNjZXNzIHdoZW4gYSBzY3JpcHQgYWNjZXNzZXMgaXRzIG93
biBvYmplY3RzLgotICAgIGlmICh0b2tlbi5pc0VtcHR5KCkgfHwgdG9rZW4gPT0gIm51bGwiKSB7
Ci0gICAgICAgIG1fY29udGV4dC0+VXNlRGVmYXVsdFNlY3VyaXR5VG9rZW4oKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIENTdHJpbmcgdXRmOFRva2VuID0gdG9rZW4udXRmOCgpOwot
ICAgIC8vIE5PVEU6IFY4IGRvZXMgaWRlbnRpdHkgY29tcGFyaXNvbiBpbiBmYXN0IHBhdGgsIG11
c3QgdXNlIGEgc3ltYm9sCi0gICAgLy8gYXMgdGhlIHNlY3VyaXR5IHRva2VuLgotICAgIG1fY29u
dGV4dC0+U2V0U2VjdXJpdHlUb2tlbih2ODo6U3RyaW5nOjpOZXdTeW1ib2wodXRmOFRva2VuLmRh
dGEoKSwgdXRmOFRva2VuLmxlbmd0aCgpKSk7Ci19Ci0KLXZvaWQgVjhQcm94eTo6dXBkYXRlRG9j
dW1lbnQoKQotewotICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fZ2xvYmFsLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gVGhlcmUgaXMgYW4gZXhpc3RpbmcgSmF2YVNjcmlwdCB3cmFwcGVyIGZvciB0aGUgZ2xvYmFs
IG9iamVjdAotICAgIC8vIG9mIHRoaXMgZnJhbWUuIEphdmFTY3JpcHQgY29kZSBpbiBvdGhlciBm
cmFtZXMgbWlnaHQgaG9sZCBhCi0gICAgLy8gcmVmZXJlbmNlIHRvIHRoaXMgd3JhcHBlci4gV2Ug
ZWFnZXJseSBpbml0aWFsaXplIHRoZSBKYXZhU2NyaXB0Ci0gICAgLy8gY29udGV4dCBmb3IgdGhl
IG5ldyBkb2N1bWVudCB0byBtYWtlIHByb3BlcnR5IGFjY2VzcyBvbiB0aGUKLSAgICAvLyBnbG9i
YWwgb2JqZWN0IHdyYXBwZXIgc3VjY2VlZC4KLSAgICBpbml0Q29udGV4dElmTmVlZGVkKCk7Ci0K
LSAgICAvLyBCYWlsIG91dCBpZiBjb250ZXh0IGluaXRpYWxpemF0aW9uIGZhaWxlZC4KLSAgICBp
ZiAobV9jb250ZXh0LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgaGF2
ZSBhIG5ldyBkb2N1bWVudCBhbmQgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNhY2hlLgotICAgIHVw
ZGF0ZURvY3VtZW50V3JhcHBlckNhY2hlKCk7Ci0KLSAgICB1cGRhdGVTZWN1cml0eU9yaWdpbigp
OwotfQotCi12b2lkIFY4UHJveHk6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKLXsKLSAgICB2ODo6
SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgc2V0U2VjdXJpdHlUb2tlbigpOwotfQotCi12ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGdsb2JhbCwgaW50IGV4dGVuc2lvbkdyb3VwKQotewotICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpDb250ZXh0PiByZXN1bHQ7Ci0KLSAgICAvLyBUaGUgYWN0aXZlRG9jdW1lbnRM
b2FkZXIgcG9pbnRlciBjb3VsZCBiZSBOVUxMIGR1cmluZyBmcmFtZSBzaHV0ZG93bi4KLSAgICBp
ZiAoIW1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IGVudmlyb25tZW50IHVzaW5nIGFu
IGVtcHR5IHRlbXBsYXRlIGZvciB0aGUgc2hhZG93Ci0gICAgLy8gb2JqZWN0LiBSZXVzZSB0aGUg
Z2xvYmFsIG9iamVjdCBpZiBvbmUgaGFzIGJlZW4gY3JlYXRlZCBlYXJsaWVyLgotICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3RUZW1wbGF0ZT4gZ2xvYmFsVGVtcGxhdGUgPSBWOERPTVdpbmRv
dzo6R2V0U2hhZG93T2JqZWN0VGVtcGxhdGUoKTsKLSAgICBpZiAoZ2xvYmFsVGVtcGxhdGUuSXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gSW5zdGFsbCBhIHNlY3Vy
aXR5IGhhbmRsZXIgd2l0aCBWOC4KLSAgICBnbG9iYWxUZW1wbGF0ZS0+U2V0QWNjZXNzQ2hlY2tD
YWxsYmFja3MoVjhDdXN0b206OnY4RE9NV2luZG93TmFtZWRTZWN1cml0eUNoZWNrLCBWOEN1c3Rv
bTo6djhET01XaW5kb3dJbmRleGVkU2VjdXJpdHlDaGVjaywgdjg6OkludGVnZXI6Ok5ldyhWOENs
YXNzSW5kZXg6OkRPTVdJTkRPVykpOwotICAgIGdsb2JhbFRlbXBsYXRlLT5TZXRJbnRlcm5hbEZp
ZWxkQ291bnQoVjhDdXN0b206OmtET01XaW5kb3dJbnRlcm5hbEZpZWxkQ291bnQpOwotCi0gICAg
Ly8gVXNlZCB0byBhdm9pZCBzbGVlcCBjYWxscyBpbiB1bmxvYWQgaGFuZGxlcnMuCi0gICAgaWYg
KCFyZWdpc3RlcmVkRXh0ZW5zaW9uV2l0aFY4KERhdGVFeHRlbnNpb246OmdldCgpKSkKLSAgICAg
ICAgcmVnaXN0ZXJFeHRlbnNpb24oRGF0ZUV4dGVuc2lvbjo6Z2V0KCksIFN0cmluZygpKTsKLQot
ICAgIC8vIER5bmFtaWNhbGx5IHRlbGwgdjggYWJvdXQgb3VyIGV4dGVuc2lvbnMgbm93LgotICAg
IE93bkFycmF5UHRyPGNvbnN0IGNoYXIqPiBleHRlbnNpb25OYW1lcyhuZXcgY29uc3QgY2hhcipb
bV9leHRlbnNpb25zLnNpemUoKV0pOwotICAgIGludCBpbmRleCA9IDA7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2V4dGVuc2lvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
ZXh0ZW5zaW9uc1tpXS5ncm91cCAmJiBtX2V4dGVuc2lvbnNbaV0uZ3JvdXAgIT0gZXh0ZW5zaW9u
R3JvdXApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBOb3RlOiB3ZSBjaGVj
ayB0aGUgbG9hZGVyIFVSTCBoZXJlIGluc3RlYWQgb2YgdGhlIGRvY3VtZW50IFVSTAotICAgICAg
ICAvLyBiZWNhdXNlIHdlIG1pZ2h0IGJlIGN1cnJlbnRseSBsb2FkaW5nIGFuIFVSTCBpbnRvIGEg
YmxhbmsgcGFnZS4KLSAgICAgICAgLy8gU2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJv
bWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwOTI0Ci0gICAgICAgIGlmIChtX2V4dGVuc2lvbnNbaV0u
c2NoZW1lLmxlbmd0aCgpID4gMCAmJiAobV9leHRlbnNpb25zW2ldLnNjaGVtZSAhPSBtX2ZyYW1l
LT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkucHJvdG9jb2woKSB8fCBt
X2V4dGVuc2lvbnNbaV0uc2NoZW1lICE9IG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmxv
YWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT51cmwoKS5wcm90b2NvbCgpKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGV4dGVuc2lvbk5hbWVzW2luZGV4KytdID0gbV9l
eHRlbnNpb25zW2ldLmV4dGVuc2lvbi0+bmFtZSgpOwotICAgIH0KLSAgICB2ODo6RXh0ZW5zaW9u
Q29uZmlndXJhdGlvbiBleHRlbnNpb25zKGluZGV4LCBleHRlbnNpb25OYW1lcy5nZXQoKSk7Ci0g
ICAgcmVzdWx0ID0gdjg6OkNvbnRleHQ6Ok5ldygmZXh0ZW5zaW9ucywgZ2xvYmFsVGVtcGxhdGUs
IGdsb2JhbCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFY4UHJveHk6Omluc3Rh
bGxET01XaW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwgRE9NV2luZG93KiB3
aW5kb3cpCi17Ci0gICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBpbXBsaWNpdFByb3RvU3RyaW5n
ID0gdjg6OlN0cmluZzo6TmV3KCJfX3Byb3RvX18iKTsKLSAgICBpZiAoaW1wbGljaXRQcm90b1N0
cmluZy5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENyZWF0ZSBh
IG5ldyBKUyB3aW5kb3cgb2JqZWN0IGFuZCB1c2UgaXQgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhl
ICBzaGFkb3cgZ2xvYmFsIG9iamVjdC4KLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd2lu
ZG93Q29uc3RydWN0b3IgPSBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRl
eDo6RE9NV0lORE9XLCBnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUoY29udGV4dCkpOwotICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBqc1dpbmRvdyA9IFNhZmVBbGxvY2F0aW9uOjpuZXdJbnN0YW5j
ZSh3aW5kb3dDb25zdHJ1Y3Rvcik7Ci0gICAgLy8gQmFpbCBvdXQgaWYgYWxsb2NhdGlvbiBmYWls
ZWQuCi0gICAgaWYgKGpzV2luZG93LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gV3JhcCB0aGUgd2luZG93LgotICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBl
cihqc1dpbmRvdywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyks
IHdpbmRvdyk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoanNXaW5kb3ctPkdldFByb3RvdHlwZSgpKSwgVjhDbGFzc0luZGV4OjpU
b0ludChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyksIHdpbmRvdyk7Ci0KLSAgICB3aW5kb3ctPnJl
ZigpOwotICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KHdpbmRvdywg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhqc1dpbmRvdykpOwotCi0gICAgLy8gSW5z
ZXJ0IHRoZSB3aW5kb3cgaW5zdGFuY2UgYXMgdGhlIHByb3RvdHlwZSBvZiB0aGUgc2hhZG93IG9i
amVjdC4KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHY4R2xvYmFsID0gY29udGV4dC0+R2xv
YmFsKCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QodjhHbG9iYWwtPkdldFByb3RvdHlwZSgpKSwgVjhDbGFzc0luZGV4OjpUb0lu
dChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyksIHdpbmRvdyk7Ci0gICAgdjhHbG9iYWwtPlNldChp
bXBsaWNpdFByb3RvU3RyaW5nLCBqc1dpbmRvdyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IENyZWF0ZSBhIG5ldyBlbnZpcm9ubWVudCBhbmQgc2V0dXAgdGhlIGdsb2JhbCBvYmplY3QuCi0v
LwotLy8gVGhlIGdsb2JhbCBvYmplY3QgY29ycmVzcG9uZHMgdG8gYSBET01XaW5kb3cgaW5zdGFu
Y2UuIEhvd2V2ZXIsIHRvCi0vLyBhbGxvdyBwcm9wZXJ0aWVzIG9mIHRoZSBKUyBET01XaW5kb3cg
aW5zdGFuY2UgdG8gYmUgc2hhZG93ZWQsIHdlCi0vLyB1c2UgYSBzaGFkb3cgb2JqZWN0IGFzIHRo
ZSBnbG9iYWwgb2JqZWN0IGFuZCB1c2UgdGhlIEpTIERPTVdpbmRvdwotLy8gaW5zdGFuY2UgYXMg
dGhlIHByb3RvdHlwZSBmb3IgdGhhdCBzaGFkb3cgb2JqZWN0LiBUaGUgSlMgRE9NV2luZG93Ci0v
LyBpbnN0YW5jZSBpcyB1bmRldGVjdGFibGUgZnJvbSBqYXZhc2NyaXB0IGNvZGUgYmVjYXVzZSB0
aGUgX19wcm90b19fCi0vLyBhY2Nlc3NvcnMgc2tpcCB0aGF0IG9iamVjdC4KLS8vCi0vLyBUaGUg
c2hhZG93IG9iamVjdCBhbmQgdGhlIERPTVdpbmRvdyBpbnN0YW5jZSBhcmUgc2VlbiBhcyBvbmUg
b2JqZWN0Ci0vLyBmcm9tIGphdmFzY3JpcHQuIFRoZSBqYXZhc2NyaXB0IG9iamVjdCB0aGF0IGNv
cnJlc3BvbmRzIHRvIGEKLS8vIERPTVdpbmRvdyBpbnN0YW5jZSBpcyB0aGUgc2hhZG93IG9iamVj
dC4gV2hlbiBtYXBwaW5nIGEgRE9NV2luZG93Ci0vLyBpbnN0YW5jZSB0byBhIFY4IG9iamVjdCwg
d2UgcmV0dXJuIHRoZSBzaGFkb3cgb2JqZWN0LgotLy8KLS8vIFRvIGltcGxlbWVudCBzcGxpdC13
aW5kb3csIHNlZQotLy8gICAxKSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTcyNDkKLS8vICAgMikgaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL0dlY2tvOlNwbGl0V2lu
ZG93Ci0vLyAgIDMpIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lk
PTI5NjYzOQotLy8gd2UgbmVlZCB0byBzcGxpdCB0aGUgc2hhZG93IG9iamVjdCBmdXJ0aGVyIGlu
dG8gdHdvIG9iamVjdHM6Ci0vLyBhbiBvdXRlciB3aW5kb3cgYW5kIGFuIGlubmVyIHdpbmRvdy4g
VGhlIGlubmVyIHdpbmRvdyBpcyB0aGUgaGlkZGVuCi0vLyBwcm90b3R5cGUgb2YgdGhlIG91dGVy
IHdpbmRvdy4gVGhlIGlubmVyIHdpbmRvdyBpcyB0aGUgZGVmYXVsdAotLy8gZ2xvYmFsIG9iamVj
dCBvZiB0aGUgY29udGV4dC4gQSB2YXJpYWJsZSBkZWNsYXJlZCBpbiB0aGUgZ2xvYmFsCi0vLyBz
Y29wZSBpcyBhIHByb3BlcnR5IG9mIHRoZSBpbm5lciB3aW5kb3cuCi0vLwotLy8gVGhlIG91dGVy
IHdpbmRvdyBzdGlja3MgdG8gYSBGcmFtZSwgaXQgaXMgZXhwb3NlZCB0byBKYXZhU2NyaXB0Ci0v
LyB2aWEgd2luZG93LndpbmRvdywgd2luZG93LnNlbGYsIHdpbmRvdy5wYXJlbnQsIGV0Yy4gVGhl
IG91dGVyIHdpbmRvdwotLy8gaGFzIGEgc2VjdXJpdHkgdG9rZW4gd2hpY2ggaXMgdGhlIGRvbWFp
bi4gVGhlIG91dGVyIHdpbmRvdyBjYW5ub3QKLS8vIGhhdmUgaXRzIG93biBwcm9wZXJ0aWVzLiB3
aW5kb3cuZm9vID0gJ3gnIGlzIGRlbGVnYXRlZCB0byB0aGUKLS8vIGlubmVyIHdpbmRvdy4KLS8v
Ci0vLyBXaGVuIGEgZnJhbWUgbmF2aWdhdGVzIHRvIGEgbmV3IHBhZ2UsIHRoZSBpbm5lciB3aW5k
b3cgaXMgY3V0IG9mZgotLy8gdGhlIG91dGVyIHdpbmRvdywgYW5kIHRoZSBvdXRlciB3aW5kb3cg
aWRlbnRpZnkgaXMgcHJlc2VydmVkIGZvcgotLy8gdGhlIGZyYW1lLiBIb3dldmVyLCBhIG5ldyBp
bm5lciB3aW5kb3cgaXMgY3JlYXRlZCBmb3IgdGhlIG5ldyBwYWdlLgotLy8gSWYgdGhlcmUgYXJl
IEpTIGNvZGUgaG9sZHMgYSBjbG9zdXJlIHRvIHRoZSBvbGQgaW5uZXIgd2luZG93LAotLy8gaXQg
d29uJ3QgYmUgYWJsZSB0byByZWFjaCB0aGUgb3V0ZXIgd2luZG93IHZpYSBpdHMgZ2xvYmFsIG9i
amVjdC4KLXZvaWQgVjhQcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCgpCi17Ci0gICAgLy8gQmFp
bCBvdXQgaWYgdGhlIGNvbnRleHQgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLSAgICBp
ZiAoIW1fY29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENyZWF0
ZSBhIGhhbmRsZSBzY29wZSBmb3IgYWxsIGxvY2FsIGhhbmRsZXMuCi0gICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwotCi0gICAgLy8gU2V0dXAgdGhlIHNlY3VyaXR5IGhhbmRsZXJzIGFu
ZCBtZXNzYWdlIGxpc3RlbmVyLiBUaGlzIG9ubHkgaGFzCi0gICAgLy8gdG8gYmUgZG9uZSBvbmNl
LgotICAgIHN0YXRpYyBib29sIGlzVjhJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIGlmICghaXNW
OEluaXRpYWxpemVkKSB7Ci0gICAgICAgIC8vIFRlbGxzIFY4IG5vdCB0byBjYWxsIHRoZSBkZWZh
dWx0IE9PTSBoYW5kbGVyLCBiaW5kaW5nIGNvZGUKLSAgICAgICAgLy8gd2lsbCBoYW5kbGUgaXQu
Ci0gICAgICAgIHY4OjpWODo6SWdub3JlT3V0T2ZNZW1vcnlFeGNlcHRpb24oKTsKLSAgICAgICAg
djg6OlY4OjpTZXRGYXRhbEVycm9ySGFuZGxlcihyZXBvcnRGYXRhbEVycm9ySW5WOCk7Ci0KLSAg
ICAgICAgdjg6OlY4OjpTZXRHbG9iYWxHQ1Byb2xvZ3VlQ2FsbGJhY2soJlY4R0NDb250cm9sbGVy
OjpnY1Byb2xvZ3VlKTsKLSAgICAgICAgdjg6OlY4OjpTZXRHbG9iYWxHQ0VwaWxvZ3VlQ2FsbGJh
Y2soJlY4R0NDb250cm9sbGVyOjpnY0VwaWxvZ3VlKTsKLQotICAgICAgICB2ODo6Vjg6OkFkZE1l
c3NhZ2VMaXN0ZW5lcigmVjhDb25zb2xlTWVzc2FnZTo6aGFuZGxlcik7Ci0KLSAgICAgICAgdjg6
OlY4OjpTZXRGYWlsZWRBY2Nlc3NDaGVja0NhbGxiYWNrRnVuY3Rpb24ocmVwb3J0VW5zYWZlSmF2
YVNjcmlwdEFjY2Vzcyk7Ci0KLSAgICAgICAgaXNWOEluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9
Ci0KLQotICAgIG1fY29udGV4dCA9IGNyZWF0ZU5ld0NvbnRleHQobV9nbG9iYWwsIDApOwotICAg
IGlmIChtX2NvbnRleHQuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyht
X2NvbnRleHQpOwotICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjhDb250ZXh0
KTsKLQotICAgIC8vIFN0b3JlIHRoZSBmaXJzdCBnbG9iYWwgb2JqZWN0IGNyZWF0ZWQgc28gd2Ug
Y2FuIHJldXNlIGl0LgotICAgIGlmIChtX2dsb2JhbC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgbV9n
bG9iYWwgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHY4Q29udGV4dC0+R2xvYmFs
KCkpOwotICAgICAgICAvLyBCYWlsIG91dCBpZiBhbGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBnbG9i
YWwgb2JqZWN0cyBmYWlscy4KLSAgICAgICAgaWYgKG1fZ2xvYmFsLklzRW1wdHkoKSkgewotICAg
ICAgICAgICAgZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFY4R0NDb250cm9sbGVyOjpyZWdpc3Rl
ckdsb2JhbEhhbmRsZShQUk9YWSwgdGhpcywgbV9nbG9iYWwpOwotI2VuZGlmCi0gICAgfQotCi0g
ICAgaW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlwZSh2OENvbnRleHQpOwotICAgIG1fd3JhcHBl
ckJvaWxlcnBsYXRlcyA9IHY4OjpQZXJzaXN0ZW50PHY4OjpBcnJheT46Ok5ldyh2ODo6QXJyYXk6
Ok5ldyhWOENsYXNzSW5kZXg6OldSQVBQRVJfVFlQRV9DT1VOVCkpOwotICAgIC8vIEJhaWwgb3V0
IGlmIGFsbG9jYXRpb24gZmFpbGVkLgotICAgIGlmIChtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuSXNF
bXB0eSgpKSB7Ci0gICAgICAgIGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2lmbmRlZiBOREVCVUcKLSAgICBWOEdDQ29udHJvbGxlcjo6cmVnaXN0ZXJH
bG9iYWxIYW5kbGUoUFJPWFksIHRoaXMsIG1fd3JhcHBlckJvaWxlcnBsYXRlcyk7Ci0jZW5kaWYK
LQotICAgIGlmICghaW5zdGFsbERPTVdpbmRvdyh2OENvbnRleHQsIG1fZnJhbWUtPmRvbVdpbmRv
dygpKSkKLSAgICAgICAgZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7Ci0KLSAgICB1cGRhdGVEb2N1
bWVudCgpOwotCi0gICAgc2V0U2VjdXJpdHlUb2tlbigpOwotCi0gICAgbV9mcmFtZS0+bG9hZGVy
KCktPmNsaWVudCgpLT5kaWRDcmVhdGVTY3JpcHRDb250ZXh0Rm9yRnJhbWUoKTsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHdyb25nLiBXZSBzaG91bGQgYWN0dWFsbHkgZG8gdGhpcyBmb3IgdGhl
IHByb3BlciB3b3JsZCBvbmNlCi0gICAgLy8gd2UgZG8gaXNvbGF0ZWQgd29ybGRzIHRoZSBXZWJD
b3JlIHdheS4KLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09i
amVjdEluV29ybGQoMCk7CisgICAgd2luZG93U2hlbGwoKS0+Y2xlYXJGb3JOYXZpZ2F0aW9uKCk7
CiB9CiAKIHZvaWQgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGludCBleGNlcHRpb25Db2RlKQpA
QCAtMTEyMiw4ICs3MzAsOCBAQCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJveHk6OmNvbnRl
eHQoCiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6bWFpbldvcmxkQ29udGV4dCgp
CiB7Ci0gICAgaW5pdENvbnRleHRJZk5lZWRlZCgpOwotICAgIHJldHVybiB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsKKyAgICB3aW5kb3dTaGVsbCgpLT5pbml0Q29udGV4
dElmTmVlZGVkKCk7CisgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyh3aW5k
b3dTaGVsbCgpLT5jb250ZXh0KCkpOwogfQogCiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJv
eHk6Om1haW5Xb3JsZENvbnRleHQoRnJhbWUqIGZyYW1lKQpAQCAtMTI3MSwxNyArODc5LDE4IEBA
IHZvaWQgVjhQcm94eTo6cmVnaXN0ZXJFeHRlbnNpb24odjg6OkV4dGUKIGJvb2wgVjhQcm94eTo6
c2V0Q29udGV4dERlYnVnSWQoaW50IGRlYnVnSWQpCiB7CiAgICAgQVNTRVJUKGRlYnVnSWQgPiAw
KTsKLSAgICBpZiAobV9jb250ZXh0LklzRW1wdHkoKSkKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0ID0gd2luZG93U2hlbGwoKS0+Y29udGV4dCgpOworICAgIGlmIChjb250ZXh0
LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHY4OjpIYW5kbGVTY29wZSBz
Y29wZTsKLSAgICBpZiAoIW1fY29udGV4dC0+R2V0RGF0YSgpLT5Jc1VuZGVmaW5lZCgpKQorICAg
IGlmICghY29udGV4dC0+R2V0RGF0YSgpLT5Jc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dCk7
CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0KTsKIAogICAgIGNo
YXIgYnVmZmVyWzMyXTsKICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAicGFn
ZSwlZCIsIGRlYnVnSWQpOwotICAgIG1fY29udGV4dC0+U2V0RGF0YSh2ODo6U3RyaW5nOjpOZXco
YnVmZmVyKSk7CisgICAgY29udGV4dC0+U2V0RGF0YSh2ODo6U3RyaW5nOjpOZXcoYnVmZmVyKSk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyOTgsMjYgKzkwNyw2IEBAIGludCBWOFByb3h5
Ojpjb250ZXh0RGVidWdJZCh2ODo6SGFuZGxlPHYKICAgICByZXR1cm4gYXRvaShjb21tYSArIDEp
OwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Z2V0SGlkZGVuT2JqZWN0UHJv
dG90eXBlKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIGNv
bnRleHQtPkdsb2JhbCgpLT5HZXRIaWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6b2Jq
ZWN0UHJvdG90eXBlKCkpOwotfQotCi12b2lkIFY4UHJveHk6Omluc3RhbGxIaWRkZW5PYmplY3RQ
cm90b3R5cGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKLXsKLSAgICB2ODo6SGFu
ZGxlPHY4OjpTdHJpbmc+IG9iamVjdFN0cmluZyA9IHY4OjpTdHJpbmc6Ok5ldygiT2JqZWN0Iik7
Ci0gICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBwcm90b3R5cGVTdHJpbmcgPSB2ODo6U3RyaW5n
OjpOZXcoInByb3RvdHlwZSIpOwotICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gaGlkZGVuT2Jq
ZWN0UHJvdG90eXBlU3RyaW5nID0gVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6Om9iamVjdFByb3RvdHlw
ZSgpOwotICAgIC8vIEJhaWwgb3V0IGlmIGFsbG9jYXRpb24gZmFpbGVkLgotICAgIGlmIChvYmpl
Y3RTdHJpbmcuSXNFbXB0eSgpIHx8IHByb3RvdHlwZVN0cmluZy5Jc0VtcHR5KCkgfHwgaGlkZGVu
T2JqZWN0UHJvdG90eXBlU3RyaW5nLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KGNvbnRleHQtPkdsb2JhbCgpLT5HZXQob2JqZWN0U3RyaW5nKSk7Ci0gICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG9iamVjdFByb3RvdHlwZSA9IG9iamVjdC0+R2V0KHByb3RvdHlwZVN0cmlu
Zyk7Ci0KLSAgICBjb250ZXh0LT5HbG9iYWwoKS0+U2V0SGlkZGVuVmFsdWUoaGlkZGVuT2JqZWN0
UHJvdG90eXBlU3RyaW5nLCBvYmplY3RQcm90b3R5cGUpOwotfQotCiB2ODo6TG9jYWw8djg6OkNv
bnRleHQ+IHRvVjhDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0KQogewogICAgIGlmIChjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiA1MjYzNSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIgLy8gZm9yIFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luCiAjaW5jbHVkZSAiU2hhcmVkUGVyc2lzdGVudC5oIgogI2luY2x1ZGUgIlY4
QWJzdHJhY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgog
I2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4R0NDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiVjhJbmRleC5oIgpAQCAtMTUxLDIyICsxNTIsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgRnJhbWUqIGZyYW1lKCkgeyByZXR1cm4gbV9mcmFtZTsgfQogCi0gICAg
ICAgIC8vIENsZWFyIHBhZ2Utc3BlY2lmaWMgZGF0YSwgYnV0IGtlZXAgdGhlIGdsb2JhbCBvYmpl
Y3QgaWRlbnRpZnkuCiAgICAgICAgIHZvaWQgY2xlYXJGb3JOYXZpZ2F0aW9uKCk7Ci0KLSAgICAg
ICAgLy8gQ2xlYXIgcGFnZS1zcGVjaWZpYyBkYXRhIGJlZm9yZSBzaHV0dGluZyBkb3duIHRoZSBw
cm94eSBvYmplY3QuCiAgICAgICAgIHZvaWQgY2xlYXJGb3JDbG9zZSgpOwogCi0gICAgICAgIC8v
IFVwZGF0ZSBkb2N1bWVudCBvYmplY3Qgb2YgdGhlIGZyYW1lLgotICAgICAgICB2b2lkIHVwZGF0
ZURvY3VtZW50KCk7Ci0KLSAgICAgICAgLy8gVXBkYXRlIHRoZSBzZWN1cml0eSBvcmlnaW4gb2Yg
YSBkb2N1bWVudAotICAgICAgICAvLyAoZS5nLiwgYWZ0ZXIgc2V0dGluZyBkb2NvdW1lbnQuZG9t
YWluKS4KLSAgICAgICAgdm9pZCB1cGRhdGVTZWN1cml0eU9yaWdpbigpOwotCi0gICAgICAgIC8v
IERlc3Ryb3kgdGhlIGdsb2JhbCBvYmplY3QuCi0gICAgICAgIHZvaWQgZGVzdHJveUdsb2JhbCgp
OwotCiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIGNvbW1lbnQuIFVzZXIgR2VzdHVyZSByZWxhdGVk
LgogICAgICAgICBib29sIGlubGluZUNvZGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUNvZGU7
IH0KICAgICAgICAgdm9pZCBzZXRJbmxpbmVDb2RlKGJvb2wgdmFsdWUpIHsgbV9pbmxpbmVDb2Rl
ID0gdmFsdWU7IH0KQEAgLTE3NCw5ICsxNjIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIGJvb2wgdGltZXJDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXJDYWxsYmFjazsg
fQogICAgICAgICB2b2lkIHNldFRpbWVyQ2FsbGJhY2soYm9vbCB2YWx1ZSkgeyBtX3RpbWVyQ2Fs
bGJhY2sgPSB2YWx1ZTsgfQogCi0gICAgICAgIC8vIEhhcyB0aGUgY29udGV4dCBmb3IgdGhpcyBw
cm94eSBiZWVuIGluaXRpYWxpemVkPwotICAgICAgICBib29sIGlzQ29udGV4dEluaXRpYWxpemVk
KCk7Ci0KICAgICAgICAgLy8gRGlzY29ubmVjdHMgdGhlIHByb3h5IGZyb20gaXRzIG93bmVyIGZy
YW1lLAogICAgICAgICAvLyBhbmQgY2xlYXJzIGFsbCB0aW1lb3V0cyBvbiB0aGUgRE9NIHdpbmRv
dy4KICAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKQEAgLTI0MSwxNiArMjI2LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBhcyBjb25z
dHJ1Y3RvciB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IG5ld0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiwgaW50IGFyZ2MsIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10pOwogCi0gICAgICAgIC8vIFRvIGNyZWF0ZSBKUyBX
cmFwcGVyIG9iamVjdHMsIHdlIGNyZWF0ZSBhIGNhY2hlIG9mIGEgJ2JvaWxlciBwbGF0ZScKLSAg
ICAgICAgLy8gb2JqZWN0LCBhbmQgdGhlbiBzaW1wbHkgQ2xvbmUgdGhhdCBvYmplY3QgZWFjaCB0
aW1lIHdlIG5lZWQgYSBuZXcgb25lLgotICAgICAgICAvLyBUaGlzIGlzIGZhc3RlciB0aGFuIGdv
aW5nIHRocm91Z2ggdGhlIGZ1bGwgb2JqZWN0IGNyZWF0aW9uIHByb2Nlc3MuCi0gICAgICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyRnJvbUNhY2hlKFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSB0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgY2xhc3NJbmRl
eCA9IFY4Q2xhc3NJbmRleDo6VG9JbnQodHlwZSk7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6
Ok9iamVjdD4gY2xvbmUobV93cmFwcGVyQm9pbGVycGxhdGVzLT5DbG9uZUVsZW1lbnRBdChjbGFz
c0luZGV4KSk7Ci0gICAgICAgICAgICByZXR1cm4gY2xvbmUuSXNFbXB0eSgpID8gY3JlYXRlV3Jh
cHBlckZyb21DYWNoZVNsb3dDYXNlKHR5cGUpIDogY2xvbmU7Ci0gICAgICAgIH0KLQogICAgICAg
ICAvLyBSZXR1cm5zIHRoZSB3aW5kb3cgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBhIGNvbnRleHQu
CiAgICAgICAgIHN0YXRpYyBET01XaW5kb3cqIHJldHJpZXZlV2luZG93KHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+KTsKICAgICAgICAgLy8gUmV0dXJucyBWOFByb3h5IG9iamVjdCBvZiB0aGUgY3Vy
cmVudGx5IGV4ZWN1dGluZyBjb250ZXh0LgpAQCAtMzQxLDEzICszMTYsMTIgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQoKTsKICAg
ICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBtYWluV29ybGRDb250ZXh0KCk7CiAKKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgdGFrZSBET01XcmFwcGVyV29ybGQg
YXJndW1lbnQhCisgICAgICAgIFY4RE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsKCkgY29uc3Qg
eyByZXR1cm4gbV93aW5kb3dTaGVsbC5nZXQoKTsgfQorCiAgICAgICAgIGJvb2wgc2V0Q29udGV4
dERlYnVnSWQoaW50IGlkKTsKICAgICAgICAgc3RhdGljIGludCBjb250ZXh0RGVidWdJZCh2ODo6
SGFuZGxlPHY4OjpDb250ZXh0Pik7CiAKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwot
ICAgICAgICAvLyBXQVJOSU5HOiBDYWxsIHxpbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlfCBv
bmx5IG9uIGZyZXNoIGNvbnRleHRzIQotICAgICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsSGlkZGVu
T2JqZWN0UHJvdG90eXBlKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KTsKLQogICAgICAgICAvLyBS
ZWdpc3RlcnMgYSB2OCBleHRlbnNpb24gdG8gYmUgYXZhaWxhYmxlIG9uIHdlYnBhZ2VzLiBUaGUg
dHdvIGZvcm1zCiAgICAgICAgIC8vIG9mZmVyIHZhcmlvdXMgcmVzdHJpY3Rpb25zIG9uIHdoYXQg
dHlwZXMgb2YgY29udGV4dHMgdGhlIGV4dGVuc2lvbiBpcwogICAgICAgICAvLyBsb2FkZWQgaW50
by4gSWYgYSBzY2hlbWUgaXMgcHJvdmlkZWQsIG9ubHkgcGFnZXMgd2hvc2UgVVJMIGhhcyB0aGUg
Z2l2ZW4KQEAgLTM1OCwzMCArMzMyLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
c3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbnNpb24odjg6OkV4dGVuc2lvbiosIGNvbnN0IFN0cmlu
ZyYgc2NoZW1lUmVzdHJpY3Rpb24pOwogICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVu
c2lvbih2ODo6RXh0ZW5zaW9uKiwgaW50IGV4dGVuc2lvbkdyb3VwKTsKIAotICAgICAgICAvLyBG
SVhNRTogU2VwYXJhdGUgdGhlc2UgY29uY2VybnMgZnJvbSBWOFByb3h5PwotICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gY3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGdsb2JhbCwgaW50IGV4dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgc3RhdGljIGJvb2wg
aW5zdGFsbERPTVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0LCBET01XaW5k
b3cqIHdpbmRvdyk7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uV2l0aFY4
KHY4OjpFeHRlbnNpb24qKTsKKyAgICAgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJlZEV4dGVuc2lv
bldpdGhWOCh2ODo6RXh0ZW5zaW9uKik7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFY4RXh0ZW5z
aW9ucyYgZXh0ZW5zaW9ucygpIHsgcmV0dXJuIG1fZXh0ZW5zaW9uczsgfQogCi0gICAgICAgIHZv
aWQgaW5pdENvbnRleHRJZk5lZWRlZCgpOwotICAgICAgICB2b2lkIHVwZGF0ZURvY3VtZW50V3Jh
cHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlcik7Ci0gICAgICAgIAogICAgICAgICAv
LyBSZXBvcnQgYW4gdW5zYWZlIGF0dGVtcHQgdG8gYWNjZXNzIHRoZSBnaXZlbiBmcmFtZSBvbiB0
aGUgY29uc29sZS4KICAgICAgICAgc3RhdGljIHZvaWQgcmVwb3J0VW5zYWZlQWNjZXNzVG8oRnJh
bWUqIHRhcmdldCwgRGVsYXlSZXBvcnRpbmcgZGVsYXkpOwogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgdm9pZCBzZXRTZWN1cml0eVRva2VuKCk7Ci0gICAgICAgIHZvaWQgY2xlYXJEb2N1bWVudFdy
YXBwZXIoKTsKLQotICAgICAgICAvLyBUaGUgSmF2YVNjcmlwdCB3cmFwcGVyIGZvciB0aGUgZG9j
dW1lbnQgb2JqZWN0IGlzIGNhY2hlZCBvbiB0aGUgZ2xvYmFsCi0gICAgICAgIC8vIG9iamVjdCBm
b3IgZmFzdCBhY2Nlc3MuIFVwZGF0ZURvY3VtZW50V3JhcHBlckNhY2hlIHNldHMgdGhlIHdyYXBw
ZXIKLSAgICAgICAgLy8gZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50IG9uIHRoZSBnbG9iYWwgb2Jq
ZWN0LiBDbGVhckRvY3VtZW50V3JhcHBlckNhY2hlCi0gICAgICAgIC8vIGRlbGV0ZXMgdGhlIGRv
Y3VtZW50IHdyYXBwZXIgZnJvbSB0aGUgZ2xvYmFsIG9iamVjdC4KLSAgICAgICAgdm9pZCB1cGRh
dGVEb2N1bWVudFdyYXBwZXJDYWNoZSgpOwotICAgICAgICB2b2lkIGNsZWFyRG9jdW1lbnRXcmFw
cGVyQ2FjaGUoKTsKLQotICAgICAgICAvLyBEaXNwb3NlIGdsb2JhbCBoYW5kbGVzIG9mIG1fY29u
dGV4dHMgYW5kIGZyaWVuZHMuCi0gICAgICAgIHZvaWQgZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7
Ci0KICAgICAgICAgLy8gSWYgbV9yZWN1cnNpb25Db3VudCBpcyAwLCBsZXQgTG9jYWxTdG9yYWdl
IGtub3cgc28gd2UgY2FuIHJlbGVhc2UKICAgICAgICAgLy8gdGhlIHN0b3JhZ2UgbXV0ZXguCiAg
ICAgICAgIHZvaWQgcmVsZWFzZVN0b3JhZ2VNdXRleCgpOwpAQCAtNDE0LDI0ICszNzMsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29u
dGV4dD46Ok5ldyhtX3V0aWxpdHlDb250ZXh0KTsKICAgICAgICAgfQogCi0gICAgICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UoVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlKTsKLQotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVu
c2lvbldpdGhWOCh2ODo6RXh0ZW5zaW9uKik7Ci0gICAgICAgIHN0YXRpYyBib29sIHJlZ2lzdGVy
ZWRFeHRlbnNpb25XaXRoVjgodjg6OkV4dGVuc2lvbiopOwotCiAgICAgICAgIEZyYW1lKiBtX2Zy
YW1lOwogCi0gICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX2NvbnRleHQ7Ci0K
LSAgICAgICAgLy8gRm9yIGVhY2ggcG9zc2libGUgdHlwZSBvZiB3cmFwcGVyLCB3ZSBrZWVwIGEg
Ym9pbGVycGxhdGUgb2JqZWN0LgotICAgICAgICAvLyBUaGUgYm9pbGVycGxhdGUgaXMgdXNlZCB0
byBjcmVhdGUgYWRkaXRpb25hbCB3cmFwcGVycyBvZiB0aGUgc2FtZQotICAgICAgICAvLyB0eXBl
LiAgV2Uga2VlcCBhIHNpbmdsZSBwZXJzaXN0ZW50IGhhbmRsZSB0byBhbiBhcnJheSBvZiB0aGUK
LSAgICAgICAgLy8gYWN0aXZhdGVkIGJvaWxlcnBsYXRlcy4KLSAgICAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkFycmF5PiBtX3dyYXBwZXJCb2lsZXJwbGF0ZXM7Ci0KLSAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gbV9nbG9iYWw7Ci0gICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpW
YWx1ZT4gbV9kb2N1bWVudDsKLQorICAgICAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBv
bmUgb2YgdGhlc2UuICBTb29uIHdlIHdpbGwgaGF2ZSBvbmUgcGVyIERPTVdyYXBwZXJXb3JsZC4K
KyAgICAgICAgUmVmUHRyPFY4RE9NV2luZG93U2hlbGw+IG1fd2luZG93U2hlbGw7CisgICAgICAg
IAogICAgICAgICAvLyBVdGlsaXR5IGNvbnRleHQgaG9sZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9u
cyB1c2VkIGludGVybmFsbHkuCiAgICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6Q29u
dGV4dD4gbV91dGlsaXR5Q29udGV4dDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45626</attachid>
            <date>2009-12-29 18:28:12 -0800</date>
            <delta_ts>2009-12-30 10:23:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33034-20091229182810.patch</filename>
            <type>text/plain</type>
            <size>61507</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjYzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzkgQEAKKzIwMDktMTItMjkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbdjhd
IE1vdmUgd29ybGQtc3BlY2lmaWMgc3RhdGUgb3V0IG9mIFY4UHJveHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMDM0CisKKyAgICAgICAgVGhpcyBp
cyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIHVuaWZ5aW5nIHRoZSBWOCBpbXBsZW1lbnRhdGlvbiBv
ZgorICAgICAgICBpc29sYXRlZCB3b3JsZHMgd2l0aCB0aGUgSlNDIGltcGxlbWVudGF0aW9uLiAg
V2UgbmVlZCBhbiBvYmplY3QgdG8KKyAgICAgICAgZW5jYXB1bGF0ZSBhbGwgdGhlIHdvcmxkLXNw
ZWNpZmljIGJpbmRpbmdzIHN0YXRlLiAgUHJldmlvdWxzeSwgd2UgdXNlZAorICAgICAgICBWOFBy
b3h5IGZvciB0aGlzIHB1cnBvc2UgKGFsb25nIHdpdGggYSBtaWxsaW9uIG90aGVyIHRoaW5ncyks
IGJ1dAorICAgICAgICB0aGVyZSdzIGEgb25lLXRvLW9uZSBtYXBwaW5nIGJldHdlZW4gVjhQcm94
eSBvYmplY3RzIGFuZCBGcmFtZSBvYmplY3RzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdGFrZXMg
dGhlIHdvcmxkLXNwZWNpZmljIHN0YXRlIGFuZCBtb3ZlcyBpdCB0byBhIG5ldyBvYmplY3QsCisg
ICAgICAgIGFmZmVjdGlvbmF0ZWx5IGNhbGxlZCBWOERPTVdpbmRvd1NoZWxsLiAgVGhpcyBvYmpl
Y3QgaXMgdGhlIG1vcmFsCisgICAgICAgIGVxdWl2YWxlbnQgb2YgSlNET01XaW5kb3dTaGVsbCBi
dXQgd2l0aCBtb3JlIGRhdGEgbWVtYmVycyBiZWNhdXNlIGxpZmUKKyAgICAgICAgaXMgbW9yZSBj
b21wbGljYXRlZCBpbiBWOC1sYW5kLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYWxtb3N0IGVu
dGlyZWx5IGNvZGUgbW90aW9uLiAgRnV0dXJlIHBhdGNoZXMgd2lsbCBjbGVhbgorICAgICAgICB1
cCB0aGlzIGNsYXNzIGFzIHdlIHVzZSBpdCB0byByZXByZXNlbnQgd2luZG93IHNoZWxscyBpbiBp
c29sYXRlZAorICAgICAgICB3b3JsZHMgYXMgd2VsbCBhcyB0aGUgbWFpbiB3b3JsZC4KKworICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZVNlY3Vy
aXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmhhdmVJbnRl
cnByZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1
bWVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRmF0YWxFcnJvckluVjgpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVwb3J0RmF0YWxFcnJvckluVjgpOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0VW5z
YWZlSmF2YVNjcmlwdEFjY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxs
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6VjhET01XaW5k
b3dTaGVsbCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppc0NvbnRleHRJ
bml0aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3Nl
Q29udGV4dEhhbmRsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6ZGVz
dHJveUdsb2JhbCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjbGVhckZv
ckNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNsZWFyRm9yTmF2
aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppbml0Q29udGV4
dElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZU5l
d0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbERP
TVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1
bWVudFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Y2xlYXJE
b2N1bWVudFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBk
YXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dT
aGVsbDo6Y2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpWOERP
TVdpbmRvd1NoZWxsOjpzZXRTZWN1cml0eVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2lu
ZG93U2hlbGw6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V2luZG93U2hlbGw6OmdldEhpZGRlbk9iamVjdFByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOERPTVdpbmRvd1NoZWxsOjppbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGVTbG93
Q2FzZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlV3JhcHBlckZyb21DYWNoZSk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3JGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpW
OERPTVdyYXBwZXI6OmNvbnZlcnREb2N1bWVudFRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3QpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xh
dGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpWOFByb3h5KToKKyAgICAgICAgKFdl
YkNvcmU6OlY4UHJveHk6On5WOFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6Omhh
bmRsZU91dE9mTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmV2YWx1YXRlSW5J
c29sYXRlZFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmV2YWx1YXRlSW5OZXdD
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnNldEluamVjdGVkU2NyaXB0Q29u
dGV4dERlYnVnSWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y2xlYXJGb3JDbG9zZSk6
CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpjbGVhckZvck5hdmlnYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6VjhQcm94eTo6bWFpbldvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFByb3h5OjpzZXRDb250ZXh0RGVidWdJZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQ
cm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6d2luZG93U2hlbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhQcm94eTo6ZXh0ZW5zaW9ucyk6CisKIDIwMDktMTItMjkgIEFuZHJlaSBQ
b3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0g
QmFydGguCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTI2MzUpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
d29ya2luZyBjb3B5KQpAQCAtODA4LDYgKzgwOCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhEYXRhR3JpZERhdGFTb3VyY2UuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhE
T01NYXAuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOERPTU1hcC5oJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcCcsCisgICAgICAgICAgICAn
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHAn
LApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biA1MjYzNSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyU2NyaXB0T2JqZWN0CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlU2VjdXJpdHlP
cmlnaW4oKQogewotICAgIG1fcHJveHktPnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7CisgICAgbV9w
cm94eS0+d2luZG93U2hlbGwoKS0+dXBkYXRlU2VjdXJpdHlPcmlnaW4oKTsKIH0KIAogdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQpAQCAtMjk1LDcg
KzI5NSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6bG93TWVtb3J5Tm90aWZpY2EKIAogYm9v
bCBTY3JpcHRDb250cm9sbGVyOjpoYXZlSW50ZXJwcmV0ZXIoKSBjb25zdAogewotICAgIHJldHVy
biBtX3Byb3h5LT5pc0NvbnRleHRJbml0aWFsaXplZCgpOworICAgIHJldHVybiBtX3Byb3h5LT53
aW5kb3dTaGVsbCgpLT5pc0NvbnRleHRJbml0aWFsaXplZCgpOwogfQogCiBib29sIFNjcmlwdENv
bnRyb2xsZXI6OmlzRW5hYmxlZCgpIGNvbnN0CkBAIC00NDQsNyArNDQ0LDcgQEAgdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcih2bwogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OnVwZGF0ZURvY3VtZW50KCkKIHsKLSAgICBtX3Byb3h5LT51cGRhdGVEb2N1bWVudCgpOworICAg
IG1fcHJveHktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50KCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVs
bC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTE0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKKworI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNp
bmNsdWRlICJEYXRlRXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNp
bmNsdWRlICJET01PYmplY3RzSW5jbHVkZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgor
I2luY2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCisj
aW5jbHVkZSAiVjhDb25zb2xlTWVzc2FnZS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5o
IgorI2luY2x1ZGUgIlY4RE9NTWFwLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNs
dWRlICJWOEhpZGRlblByb3BlcnR5TmFtZS5oIgorI2luY2x1ZGUgIlY4SW5kZXguaCIKKyNpbmNs
dWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAi
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+Cisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHY4LWRlYnVn
Lmg+CisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgaGFuZGxlRmF0YWxFcnJvcklu
VjgoKQoreworICAgIC8vIEZJWE1FOiBXZSB0ZW1wb3JhcmlseSBkZWFsIHdpdGggVjggaW50ZXJu
YWwgZXJyb3Igc2l0dWF0aW9ucworICAgIC8vIHN1Y2ggYXMgb3V0LW9mLW1lbW9yeSBieSBjcmFz
aGluZyB0aGUgcmVuZGVyZXIuCisgICAgQ1JBU0goKTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0
RmF0YWxFcnJvckluVjgoY29uc3QgY2hhciogbG9jYXRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2Up
Cit7CisgICAgLy8gVjggaXMgc2h1dGRvd24sIHdlIGNhbm5vdCB1c2UgVjggYXBpLgorICAgIC8v
IFRoZSBvbmx5IHRoaW5nIHdlIGNhbiBkbyBpcyB0byBkaXNhYmxlIEphdmFTY3JpcHQuCisgICAg
Ly8gRklYTUU6IGNsZWFuIHVwIFY4UHJveHkgYW5kIGRpc2FibGUgSmF2YVNjcmlwdC4KKyAgICBw
cmludGYoIlY4IGVycm9yOiAlcyAoJXMpXG4iLCBtZXNzYWdlLCBsb2NhdGlvbik7CisgICAgaGFu
ZGxlRmF0YWxFcnJvckluVjgoKTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0VW5zYWZlSmF2YVNj
cmlwdEFjY2Vzcyh2ODo6TG9jYWw8djg6Ok9iamVjdD4gaG9zdCwgdjg6OkFjY2Vzc1R5cGUgdHlw
ZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZGF0YSkKK3sKKyAgICBGcmFtZSogdGFyZ2V0ID0gVjhD
dXN0b206OkdldFRhcmdldEZyYW1lKGhvc3QsIGRhdGEpOworICAgIGlmICh0YXJnZXQpCisgICAg
ICAgIFY4UHJveHk6OnJlcG9ydFVuc2FmZUFjY2Vzc1RvKHRhcmdldCwgVjhQcm94eTo6UmVwb3J0
TGF0ZXIpOworfQorCitQYXNzUmVmUHRyPFY4RE9NV2luZG93U2hlbGw+IFY4RE9NV2luZG93U2hl
bGw6OmNyZWF0ZShGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOERP
TVdpbmRvd1NoZWxsKGZyYW1lKSk7Cit9CisKK1Y4RE9NV2luZG93U2hlbGw6OlY4RE9NV2luZG93
U2hlbGwoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKK3sKK30KKworYm9vbCBW
OERPTVdpbmRvd1NoZWxsOjppc0NvbnRleHRJbml0aWFsaXplZCgpCit7CisgICAgLy8gbV9jb250
ZXh0LCBtX2dsb2JhbCwgYW5kIG1fd3JhcHBlckJvaWxlcnBsYXRlcyBzaG91bGQKKyAgICAvLyBh
bGwgYmUgbm9uLWVtcHR5IGlmIGlmIG1fY29udGV4dCBpcyBub24tZW1wdHkuCisgICAgQVNTRVJU
KG1fY29udGV4dC5Jc0VtcHR5KCkgfHwgIW1fZ2xvYmFsLklzRW1wdHkoKSk7CisgICAgQVNTRVJU
KG1fY29udGV4dC5Jc0VtcHR5KCkgfHwgIW1fd3JhcHBlckJvaWxlcnBsYXRlcy5Jc0VtcHR5KCkp
OworICAgIHJldHVybiAhbV9jb250ZXh0LklzRW1wdHkoKTsKK30KKwordm9pZCBWOERPTVdpbmRv
d1NoZWxsOjpkaXNwb3NlQ29udGV4dEhhbmRsZXMoKQoreworICAgIGlmICghbV9jb250ZXh0Lklz
RW1wdHkoKSkgeworICAgICAgICBtX2NvbnRleHQuRGlzcG9zZSgpOworICAgICAgICBtX2NvbnRl
eHQuQ2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAoIW1fd3JhcHBlckJvaWxlcnBsYXRlcy5Jc0Vt
cHR5KCkpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIFY4R0NDb250cm9sbGVyOjp1bnJlZ2lz
dGVyR2xvYmFsSGFuZGxlKHRoaXMsIG1fd3JhcHBlckJvaWxlcnBsYXRlcyk7CisjZW5kaWYKKyAg
ICAgICAgbV93cmFwcGVyQm9pbGVycGxhdGVzLkRpc3Bvc2UoKTsKKyAgICAgICAgbV93cmFwcGVy
Qm9pbGVycGxhdGVzLkNsZWFyKCk7CisgICAgfQorfQorCit2b2lkIFY4RE9NV2luZG93U2hlbGw6
OmRlc3Ryb3lHbG9iYWwoKQoreworICAgIGlmICghbV9nbG9iYWwuSXNFbXB0eSgpKSB7CisjaWZu
ZGVmIE5ERUJVRworICAgICAgICBWOEdDQ29udHJvbGxlcjo6dW5yZWdpc3Rlckdsb2JhbEhhbmRs
ZSh0aGlzLCBtX2dsb2JhbCk7CisjZW5kaWYKKyAgICAgICAgbV9nbG9iYWwuRGlzcG9zZSgpOwor
ICAgICAgICBtX2dsb2JhbC5DbGVhcigpOworICAgIH0KK30KKwordm9pZCBWOERPTVdpbmRvd1No
ZWxsOjpjbGVhckZvckNsb3NlKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5KCkpIHsK
KyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAgICAgIGNsZWFyRG9j
dW1lbnRXcmFwcGVyKCk7CisgICAgICAgIGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOworICAgIH0K
K30KKwordm9pZCBWOERPTVdpbmRvd1NoZWxsOjpjbGVhckZvck5hdmlnYXRpb24oKQoreworICAg
IGlmICghbV9jb250ZXh0LklzRW1wdHkoKSkgeworICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlOworICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlcigpOworCisgICAgICAgIHY4OjpDb250
ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250ZXh0KTsKKworICAgICAgICAvLyBDbGVhciB0
aGUgZG9jdW1lbnQgd3JhcHBlciBjYWNoZSBiZWZvcmUgdHVybmluZyBvbiBhY2Nlc3MgY2hlY2tz
IG9uCisgICAgICAgIC8vIHRoZSBvbGQgRE9NV2luZG93IHdyYXBwZXIuIFRoaXMgd2F5LCBhY2Nl
c3MgdG8gdGhlIGRvY3VtZW50IHdyYXBwZXIKKyAgICAgICAgLy8gd2lsbCBiZSBwcm90ZWN0ZWQg
YnkgdGhlIHNlY3VyaXR5IGNoZWNrcyBvbiB0aGUgRE9NV2luZG93IHdyYXBwZXIuCisgICAgICAg
IGNsZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKKworICAgICAgICAvLyBUdXJuIG9uIGFjY2Vz
cyBjaGVjayBvbiB0aGUgb2xkIERPTVdpbmRvdyB3cmFwcGVyLgorICAgICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIG1fZ2xvYmFsKTsKKyAgICAgICAgQVNTRVJUKCF3cmFwcGVy
LklzRW1wdHkoKSk7CisgICAgICAgIHdyYXBwZXItPlR1cm5PbkFjY2Vzc0NoZWNrKCk7CisKKyAg
ICAgICAgLy8gU2VwYXJhdGUgdGhlIGNvbnRleHQgZnJvbSBpdHMgZ2xvYmFsIG9iamVjdC4KKyAg
ICAgICAgbV9jb250ZXh0LT5EZXRhY2hHbG9iYWwoKTsKKworICAgICAgICBkaXNwb3NlQ29udGV4
dEhhbmRsZXMoKTsKKyAgICB9Cit9CisKKy8vIENyZWF0ZSBhIG5ldyBlbnZpcm9ubWVudCBhbmQg
c2V0dXAgdGhlIGdsb2JhbCBvYmplY3QuCisvLworLy8gVGhlIGdsb2JhbCBvYmplY3QgY29ycmVz
cG9uZHMgdG8gYSBET01XaW5kb3cgaW5zdGFuY2UuIEhvd2V2ZXIsIHRvCisvLyBhbGxvdyBwcm9w
ZXJ0aWVzIG9mIHRoZSBKUyBET01XaW5kb3cgaW5zdGFuY2UgdG8gYmUgc2hhZG93ZWQsIHdlCisv
LyB1c2UgYSBzaGFkb3cgb2JqZWN0IGFzIHRoZSBnbG9iYWwgb2JqZWN0IGFuZCB1c2UgdGhlIEpT
IERPTVdpbmRvdworLy8gaW5zdGFuY2UgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhhdCBzaGFkb3cg
b2JqZWN0LiBUaGUgSlMgRE9NV2luZG93CisvLyBpbnN0YW5jZSBpcyB1bmRldGVjdGFibGUgZnJv
bSBqYXZhc2NyaXB0IGNvZGUgYmVjYXVzZSB0aGUgX19wcm90b19fCisvLyBhY2Nlc3NvcnMgc2tp
cCB0aGF0IG9iamVjdC4KKy8vCisvLyBUaGUgc2hhZG93IG9iamVjdCBhbmQgdGhlIERPTVdpbmRv
dyBpbnN0YW5jZSBhcmUgc2VlbiBhcyBvbmUgb2JqZWN0CisvLyBmcm9tIGphdmFzY3JpcHQuIFRo
ZSBqYXZhc2NyaXB0IG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEKKy8vIERPTVdpbmRvdyBp
bnN0YW5jZSBpcyB0aGUgc2hhZG93IG9iamVjdC4gV2hlbiBtYXBwaW5nIGEgRE9NV2luZG93Cisv
LyBpbnN0YW5jZSB0byBhIFY4IG9iamVjdCwgd2UgcmV0dXJuIHRoZSBzaGFkb3cgb2JqZWN0Lgor
Ly8KKy8vIFRvIGltcGxlbWVudCBzcGxpdC13aW5kb3csIHNlZQorLy8gICAxKSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyNDkKKy8vICAgMikgaHR0cHM6Ly93aWtp
Lm1vemlsbGEub3JnL0dlY2tvOlNwbGl0V2luZG93CisvLyAgIDMpIGh0dHBzOi8vYnVnemlsbGEu
bW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTI5NjYzOQorLy8gd2UgbmVlZCB0byBzcGxpdCB0
aGUgc2hhZG93IG9iamVjdCBmdXJ0aGVyIGludG8gdHdvIG9iamVjdHM6CisvLyBhbiBvdXRlciB3
aW5kb3cgYW5kIGFuIGlubmVyIHdpbmRvdy4gVGhlIGlubmVyIHdpbmRvdyBpcyB0aGUgaGlkZGVu
CisvLyBwcm90b3R5cGUgb2YgdGhlIG91dGVyIHdpbmRvdy4gVGhlIGlubmVyIHdpbmRvdyBpcyB0
aGUgZGVmYXVsdAorLy8gZ2xvYmFsIG9iamVjdCBvZiB0aGUgY29udGV4dC4gQSB2YXJpYWJsZSBk
ZWNsYXJlZCBpbiB0aGUgZ2xvYmFsCisvLyBzY29wZSBpcyBhIHByb3BlcnR5IG9mIHRoZSBpbm5l
ciB3aW5kb3cuCisvLworLy8gVGhlIG91dGVyIHdpbmRvdyBzdGlja3MgdG8gYSBGcmFtZSwgaXQg
aXMgZXhwb3NlZCB0byBKYXZhU2NyaXB0CisvLyB2aWEgd2luZG93LndpbmRvdywgd2luZG93LnNl
bGYsIHdpbmRvdy5wYXJlbnQsIGV0Yy4gVGhlIG91dGVyIHdpbmRvdworLy8gaGFzIGEgc2VjdXJp
dHkgdG9rZW4gd2hpY2ggaXMgdGhlIGRvbWFpbi4gVGhlIG91dGVyIHdpbmRvdyBjYW5ub3QKKy8v
IGhhdmUgaXRzIG93biBwcm9wZXJ0aWVzLiB3aW5kb3cuZm9vID0gJ3gnIGlzIGRlbGVnYXRlZCB0
byB0aGUKKy8vIGlubmVyIHdpbmRvdy4KKy8vCisvLyBXaGVuIGEgZnJhbWUgbmF2aWdhdGVzIHRv
IGEgbmV3IHBhZ2UsIHRoZSBpbm5lciB3aW5kb3cgaXMgY3V0IG9mZgorLy8gdGhlIG91dGVyIHdp
bmRvdywgYW5kIHRoZSBvdXRlciB3aW5kb3cgaWRlbnRpZnkgaXMgcHJlc2VydmVkIGZvcgorLy8g
dGhlIGZyYW1lLiBIb3dldmVyLCBhIG5ldyBpbm5lciB3aW5kb3cgaXMgY3JlYXRlZCBmb3IgdGhl
IG5ldyBwYWdlLgorLy8gSWYgdGhlcmUgYXJlIEpTIGNvZGUgaG9sZHMgYSBjbG9zdXJlIHRvIHRo
ZSBvbGQgaW5uZXIgd2luZG93LAorLy8gaXQgd29uJ3QgYmUgYWJsZSB0byByZWFjaCB0aGUgb3V0
ZXIgd2luZG93IHZpYSBpdHMgZ2xvYmFsIG9iamVjdC4KK3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6
aW5pdENvbnRleHRJZk5lZWRlZCgpCit7CisgICAgLy8gQmFpbCBvdXQgaWYgdGhlIGNvbnRleHQg
aGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KKyAgICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENyZWF0ZSBhIGhhbmRsZSBzY29wZSBmb3Ig
YWxsIGxvY2FsIGhhbmRsZXMuCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisg
ICAgLy8gU2V0dXAgdGhlIHNlY3VyaXR5IGhhbmRsZXJzIGFuZCBtZXNzYWdlIGxpc3RlbmVyLiBU
aGlzIG9ubHkgaGFzCisgICAgLy8gdG8gYmUgZG9uZSBvbmNlLgorICAgIHN0YXRpYyBib29sIGlz
VjhJbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmICghaXNWOEluaXRpYWxpemVkKSB7CisgICAg
ICAgIC8vIFRlbGxzIFY4IG5vdCB0byBjYWxsIHRoZSBkZWZhdWx0IE9PTSBoYW5kbGVyLCBiaW5k
aW5nIGNvZGUKKyAgICAgICAgLy8gd2lsbCBoYW5kbGUgaXQuCisgICAgICAgIHY4OjpWODo6SWdu
b3JlT3V0T2ZNZW1vcnlFeGNlcHRpb24oKTsKKyAgICAgICAgdjg6OlY4OjpTZXRGYXRhbEVycm9y
SGFuZGxlcihyZXBvcnRGYXRhbEVycm9ySW5WOCk7CisKKyAgICAgICAgdjg6OlY4OjpTZXRHbG9i
YWxHQ1Byb2xvZ3VlQ2FsbGJhY2soJlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKTsKKyAgICAg
ICAgdjg6OlY4OjpTZXRHbG9iYWxHQ0VwaWxvZ3VlQ2FsbGJhY2soJlY4R0NDb250cm9sbGVyOjpn
Y0VwaWxvZ3VlKTsKKworICAgICAgICB2ODo6Vjg6OkFkZE1lc3NhZ2VMaXN0ZW5lcigmVjhDb25z
b2xlTWVzc2FnZTo6aGFuZGxlcik7CisKKyAgICAgICAgdjg6OlY4OjpTZXRGYWlsZWRBY2Nlc3ND
aGVja0NhbGxiYWNrRnVuY3Rpb24ocmVwb3J0VW5zYWZlSmF2YVNjcmlwdEFjY2Vzcyk7CisKKyAg
ICAgICAgaXNWOEluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKworICAgIG1fY29udGV4dCA9
IGNyZWF0ZU5ld0NvbnRleHQobV9nbG9iYWwsIDApOworICAgIGlmIChtX2NvbnRleHQuSXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IHY4Q29u
dGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOworICAgIHY4OjpD
b250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjhDb250ZXh0KTsKKworICAgIC8vIFN0b3JlIHRo
ZSBmaXJzdCBnbG9iYWwgb2JqZWN0IGNyZWF0ZWQgc28gd2UgY2FuIHJldXNlIGl0LgorICAgIGlm
IChtX2dsb2JhbC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgbV9nbG9iYWwgPSB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pjo6TmV3KHY4Q29udGV4dC0+R2xvYmFsKCkpOworICAgICAgICAvLyBCYWls
IG91dCBpZiBhbGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBnbG9iYWwgb2JqZWN0cyBmYWlscy4KKyAg
ICAgICAgaWYgKG1fZ2xvYmFsLklzRW1wdHkoKSkgeworICAgICAgICAgICAgZGlzcG9zZUNvbnRl
eHRIYW5kbGVzKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIFY4R0NDb250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShQUk9YWSwg
dGhpcywgbV9nbG9iYWwpOworI2VuZGlmCisgICAgfQorCisgICAgaW5zdGFsbEhpZGRlbk9iamVj
dFByb3RvdHlwZSh2OENvbnRleHQpOworICAgIG1fd3JhcHBlckJvaWxlcnBsYXRlcyA9IHY4OjpQ
ZXJzaXN0ZW50PHY4OjpBcnJheT46Ok5ldyh2ODo6QXJyYXk6Ok5ldyhWOENsYXNzSW5kZXg6OldS
QVBQRVJfVFlQRV9DT1VOVCkpOworICAgIC8vIEJhaWwgb3V0IGlmIGFsbG9jYXRpb24gZmFpbGVk
LgorICAgIGlmIChtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuSXNFbXB0eSgpKSB7CisgICAgICAgIGRp
c3Bvc2VDb250ZXh0SGFuZGxlcygpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmbmRlZiBO
REVCVUcKKyAgICBWOEdDQ29udHJvbGxlcjo6cmVnaXN0ZXJHbG9iYWxIYW5kbGUoUFJPWFksIHRo
aXMsIG1fd3JhcHBlckJvaWxlcnBsYXRlcyk7CisjZW5kaWYKKworICAgIGlmICghaW5zdGFsbERP
TVdpbmRvdyh2OENvbnRleHQsIG1fZnJhbWUtPmRvbVdpbmRvdygpKSkKKyAgICAgICAgZGlzcG9z
ZUNvbnRleHRIYW5kbGVzKCk7CisKKyAgICB1cGRhdGVEb2N1bWVudCgpOworCisgICAgc2V0U2Vj
dXJpdHlUb2tlbigpOworCisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVh
dGVTY3JpcHRDb250ZXh0Rm9yRnJhbWUoKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25n
LiBXZSBzaG91bGQgYWN0dWFsbHkgZG8gdGhpcyBmb3IgdGhlIHByb3BlciB3b3JsZCBvbmNlCisg
ICAgLy8gd2UgZG8gaXNvbGF0ZWQgd29ybGRzIHRoZSBXZWJDb3JlIHdheS4KKyAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoMCk7Cit9CisK
K3Y4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVOZXdD
b250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsLCBpbnQgZXh0ZW5zaW9uR3JvdXAp
Cit7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHJlc3VsdDsKKworICAgIC8vIFRo
ZSBhY3RpdmVEb2N1bWVudExvYWRlciBwb2ludGVyIGNvdWxkIGJlIDAgZHVyaW5nIGZyYW1lIHNo
dXRkb3duLgorICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVy
KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgZW52aXJv
bm1lbnQgdXNpbmcgYW4gZW1wdHkgdGVtcGxhdGUgZm9yIHRoZSBzaGFkb3cKKyAgICAvLyBvYmpl
Y3QuIFJldXNlIHRoZSBnbG9iYWwgb2JqZWN0IGlmIG9uZSBoYXMgYmVlbiBjcmVhdGVkIGVhcmxp
ZXIuCisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPiBnbG9iYWxUZW1wbGF0
ZSA9IFY4RE9NV2luZG93OjpHZXRTaGFkb3dPYmplY3RUZW1wbGF0ZSgpOworICAgIGlmIChnbG9i
YWxUZW1wbGF0ZS5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBJ
bnN0YWxsIGEgc2VjdXJpdHkgaGFuZGxlciB3aXRoIFY4LgorICAgIGdsb2JhbFRlbXBsYXRlLT5T
ZXRBY2Nlc3NDaGVja0NhbGxiYWNrcyhWOEN1c3RvbTo6djhET01XaW5kb3dOYW1lZFNlY3VyaXR5
Q2hlY2ssIFY4Q3VzdG9tOjp2OERPTVdpbmRvd0luZGV4ZWRTZWN1cml0eUNoZWNrLCB2ODo6SW50
ZWdlcjo6TmV3KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKSk7CisgICAgZ2xvYmFsVGVtcGxhdGUt
PlNldEludGVybmFsRmllbGRDb3VudChWOEN1c3RvbTo6a0RPTVdpbmRvd0ludGVybmFsRmllbGRD
b3VudCk7CisKKyAgICAvLyBVc2VkIHRvIGF2b2lkIHNsZWVwIGNhbGxzIGluIHVubG9hZCBoYW5k
bGVycy4KKyAgICBpZiAoIVY4UHJveHk6OnJlZ2lzdGVyZWRFeHRlbnNpb25XaXRoVjgoRGF0ZUV4
dGVuc2lvbjo6Z2V0KCkpKQorICAgICAgICBWOFByb3h5OjpyZWdpc3RlckV4dGVuc2lvbihEYXRl
RXh0ZW5zaW9uOjpnZXQoKSwgU3RyaW5nKCkpOworCisgICAgLy8gRHluYW1pY2FsbHkgdGVsbCB2
OCBhYm91dCBvdXIgZXh0ZW5zaW9ucyBub3cuCisgICAgY29uc3QgVjhFeHRlbnNpb25zJiBleHRl
bnNpb25zID0gVjhQcm94eTo6ZXh0ZW5zaW9ucygpOworICAgIE93bkFycmF5UHRyPGNvbnN0IGNo
YXIqPiBleHRlbnNpb25OYW1lcyhuZXcgY29uc3QgY2hhcipbZXh0ZW5zaW9ucy5zaXplKCldKTsK
KyAgICBpbnQgaW5kZXggPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXh0ZW5zaW9u
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXS5ncm91cCAmJiBleHRl
bnNpb25zW2ldLmdyb3VwICE9IGV4dGVuc2lvbkdyb3VwKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgLy8gTm90ZTogd2UgY2hlY2sgdGhlIGxvYWRlciBVUkwgaGVyZSBpbnN0ZWFk
IG9mIHRoZSBkb2N1bWVudCBVUkwKKyAgICAgICAgLy8gYmVjYXVzZSB3ZSBtaWdodCBiZSBjdXJy
ZW50bHkgbG9hZGluZyBhbiBVUkwgaW50byBhIGJsYW5rIHBhZ2UuCisgICAgICAgIC8vIFNlZSBo
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDkyNAor
ICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXS5zY2hlbWUubGVuZ3RoKCkgPiAwICYmIChleHRlbnNp
b25zW2ldLnNjaGVtZSAhPSBtX2ZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIo
KS0+dXJsKCkucHJvdG9jb2woKSB8fCBleHRlbnNpb25zW2ldLnNjaGVtZSAhPSBtX2ZyYW1lLT5w
YWdlKCktPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+dXJs
KCkucHJvdG9jb2woKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBleHRlbnNp
b25OYW1lc1tpbmRleCsrXSA9IGV4dGVuc2lvbnNbaV0uZXh0ZW5zaW9uLT5uYW1lKCk7CisgICAg
fQorICAgIHY4OjpFeHRlbnNpb25Db25maWd1cmF0aW9uIGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24o
aW5kZXgsIGV4dGVuc2lvbk5hbWVzLmdldCgpKTsKKyAgICByZXN1bHQgPSB2ODo6Q29udGV4dDo6
TmV3KCZleHRlbnNpb25Db25maWd1cmF0aW9uLCBnbG9iYWxUZW1wbGF0ZSwgZ2xvYmFsKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbERP
TVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0LCBET01XaW5kb3cqIHdpbmRv
dykKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGltcGxpY2l0UHJvdG9TdHJpbmcgPSB2
ODo6U3RyaW5nOjpOZXcoIl9fcHJvdG9fXyIpOworICAgIGlmIChpbXBsaWNpdFByb3RvU3RyaW5n
LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGEgbmV3
IEpTIHdpbmRvdyBvYmplY3QgYW5kIHVzZSBpdCBhcyB0aGUgcHJvdG90eXBlIGZvciB0aGUgIHNo
YWRvdyBnbG9iYWwgb2JqZWN0LgorICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB3aW5kb3dD
b25zdHJ1Y3RvciA9IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpE
T01XSU5ET1csIGdldEhpZGRlbk9iamVjdFByb3RvdHlwZShjb250ZXh0KSk7CisgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IGpzV2luZG93ID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKHdp
bmRvd0NvbnN0cnVjdG9yKTsKKyAgICAvLyBCYWlsIG91dCBpZiBhbGxvY2F0aW9uIGZhaWxlZC4K
KyAgICBpZiAoanNXaW5kb3cuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBXcmFwIHRoZSB3aW5kb3cuCisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGpz
V2luZG93LCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKSwgd2lu
ZG93KTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdChqc1dpbmRvdy0+R2V0UHJvdG90eXBlKCkpLCBWOENsYXNzSW5kZXg6OlRvSW50
KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKSwgd2luZG93KTsKKworICAgIHdpbmRvdy0+cmVmKCk7
CisgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qod2luZG93LCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGpzV2luZG93KSk7CisKKyAgICAvLyBJbnNlcnQg
dGhlIHdpbmRvdyBpbnN0YW5jZSBhcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBzaGFkb3cgb2JqZWN0
LgorICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdjhHbG9iYWwgPSBjb250ZXh0LT5HbG9iYWwo
KTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdCh2OEdsb2JhbC0+R2V0UHJvdG90eXBlKCkpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XKSwgd2luZG93KTsKKyAgICB2OEdsb2JhbC0+U2V0KGltcGxp
Y2l0UHJvdG9TdHJpbmcsIGpzV2luZG93KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBW
OERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdyYXBwZXIpCit7CisgICAgY2xlYXJEb2N1bWVudFdyYXBwZXIoKTsKKworICAgIEFTU0VS
VChtX2RvY3VtZW50LklzRW1wdHkoKSk7CisgICAgbV9kb2N1bWVudCA9IHY4OjpQZXJzaXN0ZW50
PHY4OjpWYWx1ZT46Ok5ldyh3cmFwcGVyKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgVjhHQ0NvbnRy
b2xsZXI6OnJlZ2lzdGVyR2xvYmFsSGFuZGxlKFBST1hZLCB0aGlzLCBtX2RvY3VtZW50KTsKKyNl
bmRpZgorfQorCit2b2lkIFY4RE9NV2luZG93U2hlbGw6OmNsZWFyRG9jdW1lbnRXcmFwcGVyKCkK
K3sKKyAgICBpZiAoIW1fZG9jdW1lbnQuSXNFbXB0eSgpKSB7CisjaWZuZGVmIE5ERUJVRworICAg
ICAgICBWOEdDQ29udHJvbGxlcjo6dW5yZWdpc3Rlckdsb2JhbEhhbmRsZSh0aGlzLCBtX2RvY3Vt
ZW50KTsKKyNlbmRpZgorICAgICAgICBtX2RvY3VtZW50LkRpc3Bvc2UoKTsKKyAgICAgICAgbV9k
b2N1bWVudC5DbGVhcigpOworICAgIH0KK30KKwordm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRh
dGVEb2N1bWVudFdyYXBwZXJDYWNoZSgpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250ZXh0KTsKKwor
ICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMgbm8gZnJhbWUsIE5vZGVUb1Y4T2JqZWN0IG1pZ2h0
IGdldCB0aGUKKyAgICAvLyBkb2N1bWVudCB3cmFwcGVyIGZvciBhIGRvY3VtZW50IHRoYXQgaXMg
YWJvdXQgdG8gYmUgZGVsZXRlZC4KKyAgICAvLyBJZiB0aGUgRm9yY2VTZXQgYmVsb3cgY2F1c2Vz
IGEgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGUgZG9jdW1lbnQKKyAgICAvLyBtaWdodCBnZXQgZGVs
ZXRlZCBhbmQgdGhlIGdsb2JhbCBoYW5kbGUgZm9yIHRoZSBkb2N1bWVudAorICAgIC8vIHdyYXBw
ZXIgY2xlYXJlZC4gVXNpbmcgdGhlIGNsZWFyZWQgZ2xvYmFsIGhhbmRsZSB3aWxsIGxlYWQgdG8K
KyAgICAvLyBjcmFzaGVzLiBJbiB0aGlzIGNhc2Ugd2UgY2xlYXIgdGhlIGNhY2hlIGFuZCBsZXQg
dGhlIERPTVdpbmRvdworICAgIC8vIGFjY2Vzc29yIGhhbmRsZSBhY2Nlc3MgdG8gdGhlIGRvY3Vt
ZW50LgorICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAgICBj
bGVhckRvY3VtZW50V3JhcHBlckNhY2hlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZG9jdW1lbnRXcmFwcGVyID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0Tm9kZVRvVjhPYmplY3QobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisKKyAgICAvLyBJZiBp
bnN0YW50aWF0aW9uIG9mIHRoZSBkb2N1bWVudCB3cmFwcGVyIGZhaWxzLCBjbGVhciB0aGUgY2Fj
aGUKKyAgICAvLyBhbmQgbGV0IHRoZSBET01XaW5kb3cgYWNjZXNzb3IgaGFuZGxlIGFjY2VzcyB0
byB0aGUgZG9jdW1lbnQuCisgICAgaWYgKGRvY3VtZW50V3JhcHBlci5Jc0VtcHR5KCkpIHsKKyAg
ICAgICAgY2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fY29udGV4dC0+R2xvYmFsKCktPkZvcmNlU2V0KHY4OjpTdHJpbmc6Ok5ldygiZG9j
dW1lbnQiKSwgZG9jdW1lbnRXcmFwcGVyLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1
dGU+KHY4OjpSZWFkT25seSB8IHY4OjpEb250RGVsZXRlKSk7Cit9CisKK3ZvaWQgVjhET01XaW5k
b3dTaGVsbDo6Y2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSgpCit7CisgICAgQVNTRVJUKCFtX2Nv
bnRleHQuSXNFbXB0eSgpKTsKKyAgICBtX2NvbnRleHQtPkdsb2JhbCgpLT5Gb3JjZURlbGV0ZSh2
ODo6U3RyaW5nOjpOZXcoImRvY3VtZW50IikpOworfQorCit2b2lkIFY4RE9NV2luZG93U2hlbGw6
OnNldFNlY3VyaXR5VG9rZW4oKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUt
PmRvY3VtZW50KCk7CisgICAgLy8gU2V0dXAgc2VjdXJpdHkgb3JpZ2luIGFuZCBzZWN1cml0eSB0
b2tlbi4KKyAgICBpZiAoIWRvY3VtZW50KSB7CisgICAgICAgIG1fY29udGV4dC0+VXNlRGVmYXVs
dFNlY3VyaXR5VG9rZW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEFzayB0
aGUgZG9jdW1lbnQncyBTZWN1cml0eU9yaWdpbiB0byBnZW5lcmF0ZSBhIHNlY3VyaXR5IHRva2Vu
LgorICAgIC8vIElmIHR3byB0b2tlbnMgYXJlIGVxdWFsLCB0aGVuIHRoZSBTZWN1cml0eU9yaWdp
bnMgY2FuQWNjZXNzIGVhY2ggb3RoZXIuCisgICAgLy8gSWYgdHdvIHRva2VucyBhcmUgbm90IGVx
dWFsLCB0aGVuIHdlIGhhdmUgdG8gY2FsbCBjYW5BY2Nlc3MuCisgICAgLy8gTm90ZTogd2UgY2Fu
J3QgdXNlIHRoZSBIVFRQT3JpZ2luIGlmIGl0IHdhcyBzZXQgZnJvbSB0aGUgRE9NLgorICAgIFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBT
dHJpbmcgdG9rZW47CisgICAgaWYgKCFvcmlnaW4tPmRvbWFpbldhc1NldEluRE9NKCkpCisgICAg
ICAgIHRva2VuID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7CisKKyAg
ICAvLyBBbiBlbXB0eSBvciAibnVsbCIgdG9rZW4gbWVhbnMgd2UgYWx3YXlzIGhhdmUgdG8gY2Fs
bAorICAgIC8vIGNhbkFjY2Vzcy4gVGhlIHRvU3RyaW5nIG1ldGhvZCBvbiBzZWN1cml0eU9yaWdp
bnMgcmV0dXJucyB0aGUKKyAgICAvLyBzdHJpbmcgIm51bGwiIGZvciBlbXB0eSBzZWN1cml0eSBv
cmlnaW5zIGFuZCBmb3Igc2VjdXJpdHkKKyAgICAvLyBvcmlnaW5zIHRoYXQgc2hvdWxkIG9ubHkg
YWxsb3cgYWNjZXNzIHRvIHRoZW1zZWx2ZXMuIEluIHRoaXMKKyAgICAvLyBjYXNlLCB3ZSB1c2Ug
dGhlIGdsb2JhbCBvYmplY3QgYXMgdGhlIHNlY3VyaXR5IHRva2VuIHRvIGF2b2lkCisgICAgLy8g
Y2FsbGluZyBjYW5BY2Nlc3Mgd2hlbiBhIHNjcmlwdCBhY2Nlc3NlcyBpdHMgb3duIG9iamVjdHMu
CisgICAgaWYgKHRva2VuLmlzRW1wdHkoKSB8fCB0b2tlbiA9PSAibnVsbCIpIHsKKyAgICAgICAg
bV9jb250ZXh0LT5Vc2VEZWZhdWx0U2VjdXJpdHlUb2tlbigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQ1N0cmluZyB1dGY4VG9rZW4gPSB0b2tlbi51dGY4KCk7CisgICAgLy8gTk9U
RTogVjggZG9lcyBpZGVudGl0eSBjb21wYXJpc29uIGluIGZhc3QgcGF0aCwgbXVzdCB1c2UgYSBz
eW1ib2wKKyAgICAvLyBhcyB0aGUgc2VjdXJpdHkgdG9rZW4uCisgICAgbV9jb250ZXh0LT5TZXRT
ZWN1cml0eVRva2VuKHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCh1dGY4VG9rZW4uZGF0YSgpLCB1dGY4
VG9rZW4ubGVuZ3RoKCkpKTsKK30KKwordm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1
bWVudCgpCit7CisgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9nbG9iYWwuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBUaGVyZSBpcyBhbiBleGlzdGluZyBKYXZhU2NyaXB0IHdyYXBwZXIgZm9yIHRoZSBnbG9iYWwg
b2JqZWN0CisgICAgLy8gb2YgdGhpcyBmcmFtZS4gSmF2YVNjcmlwdCBjb2RlIGluIG90aGVyIGZy
YW1lcyBtaWdodCBob2xkIGEKKyAgICAvLyByZWZlcmVuY2UgdG8gdGhpcyB3cmFwcGVyLiBXZSBl
YWdlcmx5IGluaXRpYWxpemUgdGhlIEphdmFTY3JpcHQKKyAgICAvLyBjb250ZXh0IGZvciB0aGUg
bmV3IGRvY3VtZW50IHRvIG1ha2UgcHJvcGVydHkgYWNjZXNzIG9uIHRoZQorICAgIC8vIGdsb2Jh
bCBvYmplY3Qgd3JhcHBlciBzdWNjZWVkLgorICAgIGluaXRDb250ZXh0SWZOZWVkZWQoKTsKKwor
ICAgIC8vIEJhaWwgb3V0IGlmIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gZmFpbGVkLgorICAgIGlm
IChtX2NvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBoYXZl
IGEgbmV3IGRvY3VtZW50IGFuZCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY2FjaGUuCisgICAgdXBk
YXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKKworICAgIHVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7
Cit9CisKK3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlU2VjdXJpdHlPcmlnaW4oKQorewor
ICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICBzZXRTZWN1cml0eVRva2VuKCk7Cit9CisK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvd1NoZWxsOjpnZXRIaWRkZW5PYmplY3RQ
cm90b3R5cGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKK3sKKyAgICByZXR1cm4g
Y29udGV4dC0+R2xvYmFsKCktPkdldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpv
YmplY3RQcm90b3R5cGUoKSk7Cit9CisKK3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbEhp
ZGRlbk9iamVjdFByb3RvdHlwZSh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQorewor
ICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gb2JqZWN0U3RyaW5nID0gdjg6OlN0cmluZzo6TmV3
KCJPYmplY3QiKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHByb3RvdHlwZVN0cmluZyA9
IHY4OjpTdHJpbmc6Ok5ldygicHJvdG90eXBlIik7CisgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5n
PiBoaWRkZW5PYmplY3RQcm90b3R5cGVTdHJpbmcgPSBWOEhpZGRlblByb3BlcnR5TmFtZTo6b2Jq
ZWN0UHJvdG90eXBlKCk7CisgICAgLy8gQmFpbCBvdXQgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCisg
ICAgaWYgKG9iamVjdFN0cmluZy5Jc0VtcHR5KCkgfHwgcHJvdG90eXBlU3RyaW5nLklzRW1wdHko
KSB8fCBoaWRkZW5PYmplY3RQcm90b3R5cGVTdHJpbmcuSXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldChvYmplY3RTdHJpbmcpKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90eXBlID0gb2JqZWN0LT5HZXQocHJv
dG90eXBlU3RyaW5nKTsKKworICAgIGNvbnRleHQtPkdsb2JhbCgpLT5TZXRIaWRkZW5WYWx1ZSho
aWRkZW5PYmplY3RQcm90b3R5cGVTdHJpbmcsIG9iamVjdFByb3RvdHlwZSk7Cit9CisKK3Y4OjpM
b2NhbDx2ODo6T2JqZWN0PiBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVXcmFwcGVyRnJvbUNhY2hl
U2xvd0Nhc2UoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUpCit7CisgICAgLy8gTm90
IGluIGNhY2hlLgorICAgIGludCBjbGFzc0luZGV4ID0gVjhDbGFzc0luZGV4OjpUb0ludCh0eXBl
KTsKKyAgICBpbml0Q29udGV4dElmTmVlZGVkKCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNj
b3BlKG1fY29udGV4dCk7CisgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSBW
OERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUsIGdldEhpZGRlbk9iamVjdFByb3RvdHlw
ZShtX2NvbnRleHQpKTsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFuY2UgPSBTYWZl
QWxsb2NhdGlvbjo6bmV3SW5zdGFuY2UoZnVuY3Rpb24pOworICAgIGlmICghaW5zdGFuY2UuSXNF
bXB0eSgpKSB7CisgICAgICAgIG1fd3JhcHBlckJvaWxlcnBsYXRlcy0+U2V0KHY4OjpJbnRlZ2Vy
OjpOZXcoY2xhc3NJbmRleCksIGluc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlLT5D
bG9uZSgpOworICAgIH0KKyAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKK30K
KworCisKK30gLy8gV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRv
d1NoZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1No
ZWxsLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hl
bGwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4RE9NV2luZG93
U2hlbGxfaAorI2RlZmluZSBWOERPTVdpbmRvd1NoZWxsX2gKKworI2luY2x1ZGUgIlY4Q3VzdG9t
QmluZGluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNz
IEZyYW1lOworCisvLyBWOFdpbmRvd1NoZWxsIHJlcHJlc2VudHMgYWxsIHRoZSBwZXItZ2xvYmFs
IG9iamVjdCBzdGF0ZSBmb3IgYSBGcmFtZSB0aGF0CisvLyBwZXJzaXN0IGJldHdlZW4gbmF2aWdh
dGlvbnMuCitjbGFzcyBWOERPTVdpbmRvd1NoZWxsIDogcHVibGljIFJlZkNvdW50ZWQ8VjhET01X
aW5kb3dTaGVsbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4RE9NV2luZG93
U2hlbGw+IGNyZWF0ZShGcmFtZSopOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgLy8gVXBkYXRlIGRvY3Vt
ZW50IG9iamVjdCBvZiB0aGUgZnJhbWUuCisgICAgdm9pZCB1cGRhdGVEb2N1bWVudCgpOworCisg
ICAgLy8gVXBkYXRlIHRoZSBzZWN1cml0eSBvcmlnaW4gb2YgYSBkb2N1bWVudAorICAgIC8vIChl
LmcuLCBhZnRlciBzZXR0aW5nIGRvY291bWVudC5kb21haW4pLgorICAgIHZvaWQgdXBkYXRlU2Vj
dXJpdHlPcmlnaW4oKTsKKworICAgIGJvb2wgaXNDb250ZXh0SW5pdGlhbGl6ZWQoKTsKKworICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gZ2xvYmFsLCBpbnQgZXh0ZW5zaW9uR3JvdXApOworICAgIHN0YXRpYyBib29s
IGluc3RhbGxET01XaW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwgRE9NV2lu
ZG93Kik7CisKKyAgICB2b2lkIGluaXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgICB2b2lkIHVwZGF0
ZURvY3VtZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlcik7CisKKyAgICB2
b2lkIGNsZWFyRm9yTmF2aWdhdGlvbigpOworICAgIHZvaWQgY2xlYXJGb3JDbG9zZSgpOworCisg
ICAgdm9pZCBkZXN0cm95R2xvYmFsKCk7CisKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGdldEhpZGRlbk9iamVjdFByb3RvdHlwZSh2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pik7Cisg
ICAgLy8gV0FSTklORzogQ2FsbCB8aW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlwZXwgb25seSBv
biBmcmVzaCBjb250ZXh0cyEKKyAgICBzdGF0aWMgdm9pZCBpbnN0YWxsSGlkZGVuT2JqZWN0UHJv
dG90eXBlKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KTsKKworICAgIC8vIFRvIGNyZWF0ZSBKUyBX
cmFwcGVyIG9iamVjdHMsIHdlIGNyZWF0ZSBhIGNhY2hlIG9mIGEgJ2JvaWxlciBwbGF0ZScKKyAg
ICAvLyBvYmplY3QsIGFuZCB0aGVuIHNpbXBseSBDbG9uZSB0aGF0IG9iamVjdCBlYWNoIHRpbWUg
d2UgbmVlZCBhIG5ldyBvbmUuCisgICAgLy8gVGhpcyBpcyBmYXN0ZXIgdGhhbiBnb2luZyB0aHJv
dWdoIHRoZSBmdWxsIG9iamVjdCBjcmVhdGlvbiBwcm9jZXNzLgorICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBjcmVhdGVXcmFwcGVyRnJvbUNhY2hlKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSB0eXBlKQorICAgIHsKKyAgICAgICAgaW50IGNsYXNzSW5kZXggPSBWOENsYXNzSW5kZXg6OlRv
SW50KHR5cGUpOworICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2xvbmUobV93cmFwcGVy
Qm9pbGVycGxhdGVzLT5DbG9uZUVsZW1lbnRBdChjbGFzc0luZGV4KSk7CisgICAgICAgIHJldHVy
biBjbG9uZS5Jc0VtcHR5KCkgPyBjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UodHlwZSkg
OiBjbG9uZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVjhET01XaW5kb3dTaGVsbChGcmFtZSop
OworCisgICAgdm9pZCBkaXNwb3NlQ29udGV4dEhhbmRsZXMoKTsKKworICAgIHZvaWQgc2V0U2Vj
dXJpdHlUb2tlbigpOworICAgIHZvaWQgY2xlYXJEb2N1bWVudFdyYXBwZXIoKTsKKworICAgIC8v
IFRoZSBKYXZhU2NyaXB0IHdyYXBwZXIgZm9yIHRoZSBkb2N1bWVudCBvYmplY3QgaXMgY2FjaGVk
IG9uIHRoZSBnbG9iYWwKKyAgICAvLyBvYmplY3QgZm9yIGZhc3QgYWNjZXNzLiBVcGRhdGVEb2N1
bWVudFdyYXBwZXJDYWNoZSBzZXRzIHRoZSB3cmFwcGVyCisgICAgLy8gZm9yIHRoZSBjdXJyZW50
IGRvY3VtZW50IG9uIHRoZSBnbG9iYWwgb2JqZWN0LiBDbGVhckRvY3VtZW50V3JhcHBlckNhY2hl
CisgICAgLy8gZGVsZXRlcyB0aGUgZG9jdW1lbnQgd3JhcHBlciBmcm9tIHRoZSBnbG9iYWwgb2Jq
ZWN0LgorICAgIHZvaWQgdXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKKyAgICB2b2lkIGNs
ZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKKworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBj
cmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
KTsKKworICAgIEZyYW1lKiBtX2ZyYW1lOworCisgICAgLy8gRm9yIGVhY2ggcG9zc2libGUgdHlw
ZSBvZiB3cmFwcGVyLCB3ZSBrZWVwIGEgYm9pbGVycGxhdGUgb2JqZWN0LgorICAgIC8vIFRoZSBi
b2lsZXJwbGF0ZSBpcyB1c2VkIHRvIGNyZWF0ZSBhZGRpdGlvbmFsIHdyYXBwZXJzIG9mIHRoZSBz
YW1lCisgICAgLy8gdHlwZS4gIFdlIGtlZXAgYSBzaW5nbGUgcGVyc2lzdGVudCBoYW5kbGUgdG8g
YW4gYXJyYXkgb2YgdGhlCisgICAgLy8gYWN0aXZhdGVkIGJvaWxlcnBsYXRlcy4KKyAgICB2ODo6
UGVyc2lzdGVudDx2ODo6QXJyYXk+IG1fd3JhcHBlckJvaWxlcnBsYXRlczsKKworICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD4gbV9nbG9iYWw7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBtX2RvY3Vt
ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhET01XaW5k
b3dTaGVsbF9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCShyZXZpc2lv
biA1MjYzNSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTkwLDcgKzU5MCw3IEBAIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9N
V3JhcHBlcjo6Z2UKICAgICAvLyBFbnRlciB0aGUgc2NvcGUgZm9yIHRoaXMgY29udGV4dCB0byBn
ZXQgdGhlIGNvcnJlY3QgY29uc3RydWN0b3IuCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3Bl
KGNvbnRleHQpOwogCi0gICAgcmV0dXJuIGdldENvbnN0cnVjdG9yKHR5cGUsIFY4UHJveHk6Omdl
dEhpZGRlbk9iamVjdFByb3RvdHlwZShjb250ZXh0KSk7CisgICAgcmV0dXJuIGdldENvbnN0cnVj
dG9yKHR5cGUsIFY4RE9NV2luZG93U2hlbGw6OmdldEhpZGRlbk9iamVjdFByb3RvdHlwZShjb250
ZXh0KSk7CiB9CiAKIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29u
c3RydWN0b3IoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIERPTVdpbmRvdyogd2lu
ZG93KQpAQCAtODY1LDcgKzg2NSw4IEBAIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdyYXBw
ZXI6Omluc3QKIAogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5jZTsKICAgICBpZiAo
cHJveHkpCi0gICAgICAgIGluc3RhbmNlID0gcHJveHktPmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGUo
ZGVzY3JpcHRvclR5cGUpOworICAgICAgICAvLyBGSVhNRTogRml4IHRoaXMgdG8gd29yayBwcm9w
ZXJseSB3aXRoIGlzb2xhdGVkIHdvcmxkcyAoc2VlIGFib3ZlKS4KKyAgICAgICAgaW5zdGFuY2Ug
PSBwcm94eS0+d2luZG93U2hlbGwoKS0+Y3JlYXRlV3JhcHBlckZyb21DYWNoZShkZXNjcmlwdG9y
VHlwZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGZ1bmN0
aW9uID0gZ2V0VGVtcGxhdGUoZGVzY3JpcHRvclR5cGUpLT5HZXRGdW5jdGlvbigpOwogICAgICAg
ICBpbnN0YW5jZSA9IFNhZmVBbGxvY2F0aW9uOjpuZXdJbnN0YW5jZShmdW5jdGlvbik7CkBAIC0x
MjY4LDcgKzEyNjksNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252
CiAgICAgLy8gY2hlY2tpbmcgaWYgdGhlIG5vZGUgYWxyZWFkeSBoYXMgYSB3cmFwcGVyLgogICAg
IFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoZG9jdW1lbnQtPmZyYW1lKCkpOwog
ICAgIGlmIChwcm94eSkKLSAgICAgICAgcHJveHktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKKyAg
ICAgICAgcHJveHktPndpbmRvd1NoZWxsKCktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKIAogICAg
IERPTVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5vZGVNYXAgPSBnZXRET01Ob2RlTWFwKCk7CiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZG9tTm9kZU1hcC5nZXQoZG9jdW1lbnQp
OwpAQCAtMTM1OCw3ICsxMzU5LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBl
cjo6Y29udgogCiAgICAgaWYgKGlzRG9jdW1lbnQpIHsKICAgICAgICAgaWYgKHByb3h5KQotICAg
ICAgICAgICAgcHJveHktPnVwZGF0ZURvY3VtZW50V3JhcHBlcihyZXN1bHQpOworICAgICAgICAg
ICAgcHJveHktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcihyZXN1bHQpOwog
CiAgICAgICAgIGlmICh0eXBlID09IFY4Q2xhc3NJbmRleDo6SFRNTERPQ1VNRU5UKSB7CiAgICAg
ICAgICAgICAvLyBDcmVhdGUgbWFya2VyIG9iamVjdCBhbmQgaW5zZXJ0IGl0IGluIHR3byBpbnRl
cm5hbCBmaWVsZHMuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3Bw
CShyZXZpc2lvbiA1MjYzNSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsOCBAQCBWOElzb2xhdGVkV29ybGQ6OlY4
SXNvbGF0ZWRXb3JsZChWOFByb3h5CiAgICAgKytpc29sYXRlZFdvcmxkQ291bnQ7CiAKICAgICB2
ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgbV9jb250ZXh0ID0gU2hhcmVkUGVyc2lzdGVudDx2
ODo6Q29udGV4dD46OmNyZWF0ZShwcm94eS0+Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KCksIGV4dGVuc2lvbkdyb3VwKSk7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBi
ZSBjcmVhdGluZyBhIG5ldyBWOERPTVdpbmRvd1NoZWxsIGhlcmUgaW5zdGVhZCBvZiByaXBpbmcg
b3V0IHRoZSBjb250ZXh0LgorICAgIG1fY29udGV4dCA9IFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNv
bnRleHQ+OjpjcmVhdGUocHJveHktPndpbmRvd1NoZWxsKCktPmNyZWF0ZU5ld0NvbnRleHQodjg6
OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBleHRlbnNpb25Hcm91cCkpOwogICAgIGlmIChtX2NvbnRl
eHQtPmdldCgpLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02Niw4ICs2Nyw5IEBA
IFY4SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRlZFdvcmxkKFY4UHJveHkKIAogICAgIGdldEdsb2Jh
bE9iamVjdChtX2NvbnRleHQtPmdldCgpKS0+U2V0UG9pbnRlckluSW50ZXJuYWxGaWVsZChWOEN1
c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29sYXRlZFdvcmxkSW5kZXgsIHRoaXMpOwogCi0gICAg
VjhQcm94eTo6aW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlwZShtX2NvbnRleHQtPmdldCgpKTsK
LSAgICBwcm94eS0+aW5zdGFsbERPTVdpbmRvdyhtX2NvbnRleHQtPmdldCgpLCBwcm94eS0+ZnJh
bWUoKS0+ZG9tV2luZG93KCkpOworICAgIFY4RE9NV2luZG93U2hlbGw6Omluc3RhbGxIaWRkZW5P
YmplY3RQcm90b3R5cGUobV9jb250ZXh0LT5nZXQoKSk7CisgICAgLy8gRklYTUU6IFRoaXMgd2ls
bCBnbyBhd2F5IG9uY2Ugd2UgaGF2ZSBhIHdpbmRvd1NoZWxsIGZvciB0aGUgaXNvbGF0ZWQgd29y
bGQuCisgICAgcHJveHktPndpbmRvd1NoZWxsKCktPmluc3RhbGxET01XaW5kb3cobV9jb250ZXh0
LT5nZXQoKSwgcHJveHktPmZyYW1lKCktPmRvbVdpbmRvdygpKTsKIAogICAgIC8vIFVzaW5nIHRo
ZSBkZWZhdWx0IHNlY3VyaXR5IHRva2VuIG1lYW5zIHRoYXQgdGhlIGNhbkFjY2VzcyBpcyBhbHdh
eXMKICAgICAvLyBjYWxsZWQsIHdoaWNoIGlzIHNsb3cuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5jcHAJKHJldmlzaW9uIDUyNjM1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDEzICsyMDQsNiBAQCB2b2lkIFY4UHJveHk6OnJlcG9y
dFVuc2FmZUFjY2Vzc1RvKEZyYW1lCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCByZXBvcnRVbnNh
ZmVKYXZhU2NyaXB0QWNjZXNzKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBob3N0LCB2ODo6QWNjZXNz
VHlwZSB0eXBlLCB2ODo6TG9jYWw8djg6OlZhbHVlPiBkYXRhKQotewotICAgIEZyYW1lKiB0YXJn
ZXQgPSBWOEN1c3RvbTo6R2V0VGFyZ2V0RnJhbWUoaG9zdCwgZGF0YSk7Ci0gICAgaWYgKHRhcmdl
dCkKLSAgICAgICAgVjhQcm94eTo6cmVwb3J0VW5zYWZlQWNjZXNzVG8odGFyZ2V0LCBWOFByb3h5
OjpSZXBvcnRMYXRlcik7Ci19Ci0KIHN0YXRpYyB2b2lkIGhhbmRsZUZhdGFsRXJyb3JJblY4KCkK
IHsKICAgICAvLyBGSVhNRTogV2UgdGVtcG9yYXJpbHkgZGVhbCB3aXRoIFY4IGludGVybmFsIGVy
cm9yIHNpdHVhdGlvbnMKQEAgLTIxOCwxNyArMjExLDkgQEAgc3RhdGljIHZvaWQgaGFuZGxlRmF0
YWxFcnJvckluVjgoKQogICAgIENSQVNIKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlcG9ydEZhdGFs
RXJyb3JJblY4KGNvbnN0IGNoYXIqIGxvY2F0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQotewot
ICAgIC8vIFY4IGlzIHNodXRkb3duLCB3ZSBjYW5ub3QgdXNlIFY4IGFwaS4KLSAgICAvLyBUaGUg
b25seSB0aGluZyB3ZSBjYW4gZG8gaXMgdG8gZGlzYWJsZSBKYXZhU2NyaXB0LgotICAgIC8vIEZJ
WE1FOiBjbGVhbiB1cCBWOFByb3h5IGFuZCBkaXNhYmxlIEphdmFTY3JpcHQuCi0gICAgcHJpbnRm
KCJWOCBlcnJvcjogJXMgKCVzKVxuIiwgbWVzc2FnZSwgbG9jYXRpb24pOwotICAgIGhhbmRsZUZh
dGFsRXJyb3JJblY4KCk7Ci19Ci0KIFY4UHJveHk6OlY4UHJveHkoRnJhbWUqIGZyYW1lKQogICAg
IDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fd2luZG93U2hlbGwoVjhET01XaW5kb3dTaGVsbDo6
Y3JlYXRlKGZyYW1lKSkKICAgICAsIG1faW5saW5lQ29kZShmYWxzZSkKICAgICAsIG1fdGltZXJD
YWxsYmFjayhmYWxzZSkKICAgICAsIG1fcmVjdXJzaW9uKDApCkBAIC0yMzgsMTggKzIyMyw3IEBA
IFY4UHJveHk6OlY4UHJveHkoRnJhbWUqIGZyYW1lKQogVjhQcm94eTo6flY4UHJveHkoKQogewog
ICAgIGNsZWFyRm9yQ2xvc2UoKTsKLSAgICBkZXN0cm95R2xvYmFsKCk7Ci19Ci0KLXZvaWQgVjhQ
cm94eTo6ZGVzdHJveUdsb2JhbCgpCi17Ci0gICAgaWYgKCFtX2dsb2JhbC5Jc0VtcHR5KCkpIHsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFY4R0NDb250cm9sbGVyOjp1bnJlZ2lzdGVyR2xvYmFs
SGFuZGxlKHRoaXMsIG1fZ2xvYmFsKTsKLSNlbmRpZgotICAgICAgICBtX2dsb2JhbC5EaXNwb3Nl
KCk7Ci0gICAgICAgIG1fZ2xvYmFsLkNsZWFyKCk7Ci0gICAgfQorICAgIHdpbmRvd1NoZWxsKCkt
PmRlc3Ryb3lHbG9iYWwoKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpj
b21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSwgaW50IGJhc2VMaW5lKQpAQCAtMjc3LDcgKzI1MSw3IEBAIGJvb2wgVjhQcm94eTo6
aGFuZGxlT3V0T2ZNZW1vcnkoKQogICAgICAgICAvLyBDbGVhbiBtX2NvbnRleHQsIGFuZCBldmVu
dCBoYW5kbGVycy4KICAgICAgICAgcHJveHktPmNsZWFyRm9yQ2xvc2UoKTsKIAotICAgICAgICBw
cm94eS0+ZGVzdHJveUdsb2JhbCgpOworICAgICAgICBwcm94eS0+d2luZG93U2hlbGwoKS0+ZGVz
dHJveUdsb2JhbCgpOwogICAgIH0KIAogICAgIENocm9taXVtQnJpZGdlOjpub3RpZnlKU091dE9m
TWVtb3J5KGZyYW1lKTsKQEAgLTI5Miw3ICsyNjYsOCBAQCBib29sIFY4UHJveHk6OmhhbmRsZU91
dE9mTWVtb3J5KCkKIAogdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQg
d29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0
ZW5zaW9uR3JvdXApCiB7Ci0gICAgaW5pdENvbnRleHRJZk5lZWRlZCgpOworICAgIC8vIEZJWE1F
OiBUaGlzIHdpbGwgbmVlZCB0byBnZXQgcmVvcmdhbml6ZWQgb25jZSB3ZSBoYXZlIGEgd2luZG93
U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4KKyAgICB3aW5kb3dTaGVsbCgpLT5pbml0Q29u
dGV4dElmTmVlZGVkKCk7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAg
VjhJc29sYXRlZFdvcmxkKiB3b3JsZCA9IDA7CkBAIC0zMzQsMjAgKzMwOSwyMSBAQCB2b2lkIFY4
UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGluCiAgICAgICB3b3JsZC0+ZGVzdHJveSgp
OwogfQogCisvLyBGSVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIQogdm9pZCBW
OFByb3h5OjpldmFsdWF0ZUluTmV3Q29udGV4dChjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29k
ZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCkKIHsKLSAgICBpbml0Q29udGV4dElmTmVl
ZGVkKCk7CisgICAgd2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpOwogCiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCiAgICAgLy8gU2V0IHVwIHRoZSBET00gd2lu
ZG93IGFzIHRoZSBwcm90b3R5cGUgb2YgdGhlIG5ldyBnbG9iYWwgb2JqZWN0LgotICAgIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IHdpbmRvd0NvbnRleHQgPSBtX2NvbnRleHQ7CisgICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gd2luZG93Q29udGV4dCA9IHdpbmRvd1NoZWxsKCktPmNvbnRleHQo
KTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdpbmRvd0dsb2JhbCA9IHdpbmRvd0NvbnRl
eHQtPkdsb2JhbCgpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2luZG93V3JhcHBlciA9
IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywg
d2luZG93R2xvYmFsKTsKIAogICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFw
cGVyVG9OYXRpdmU8RE9NV2luZG93Pih3aW5kb3dXcmFwcGVyKSA9PSBtX2ZyYW1lLT5kb21XaW5k
b3coKSk7CiAKLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGNyZWF0
ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBleHRlbnNpb25Hcm91cCk7Cisg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB3aW5kb3dTaGVsbCgpLT5j
cmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgZXh0ZW5zaW9uR3JvdXAp
OwogICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zODcs
OSArMzYzLDEwIEBAIGJvb2wgVjhQcm94eTo6c2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGUKIHsK
ICAgICAvLyBTZXR1cCBjb250ZXh0IGlkIGZvciBKUyBkZWJ1Z2dlci4KICAgICB2ODo6Q29udGV4
dDo6U2NvcGUgY29udGV4dFNjb3BlKHRhcmdldENvbnRleHQpOwotICAgIGlmIChtX2NvbnRleHQu
SXNFbXB0eSgpKQorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB3aW5kb3dT
aGVsbCgpLT5jb250ZXh0KCk7CisgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaW50IGRlYnVnSWQgPSBjb250ZXh0RGVidWdJZChtX2NvbnRleHQp
OworICAgIGludCBkZWJ1Z0lkID0gY29udGV4dERlYnVnSWQoY29udGV4dCk7CiAKICAgICBjaGFy
IGJ1ZmZlclszMl07CiAgICAgaWYgKGRlYnVnSWQgPT0gLTEpCkBAIC01NjMsMzAgKzU0MCw2IEBA
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJveHk6Om5ld0luc3RhbmMKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12ODo6TG9jYWw8djg6Ok9iamVjdD4gVjhQcm94eTo6Y3JlYXRlV3JhcHBlckZy
b21DYWNoZVNsb3dDYXNlKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlKQotewotICAg
IC8vIE5vdCBpbiBjYWNoZS4KLSAgICBpbnQgY2xhc3NJbmRleCA9IFY4Q2xhc3NJbmRleDo6VG9J
bnQodHlwZSk7Ci0gICAgaW5pdENvbnRleHRJZk5lZWRlZCgpOwotICAgIHY4OjpDb250ZXh0OjpT
Y29wZSBzY29wZShtX2NvbnRleHQpOwotICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGZ1bmN0
aW9uID0gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3Rvcih0eXBlLCBnZXRIaWRkZW5PYmplY3RQ
cm90b3R5cGUobV9jb250ZXh0KSk7Ci0gICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbmNl
ID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKGZ1bmN0aW9uKTsKLSAgICBpZiAoIWluc3Rh
bmNlLklzRW1wdHkoKSkgewotICAgICAgICBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMtPlNldCh2ODo6
SW50ZWdlcjo6TmV3KGNsYXNzSW5kZXgpLCBpbnN0YW5jZSk7Ci0gICAgICAgIHJldHVybiBpbnN0
YW5jZS0+Q2xvbmUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9y
KCk7Ci19Ci0KLWJvb2wgVjhQcm94eTo6aXNDb250ZXh0SW5pdGlhbGl6ZWQoKQotewotICAgIC8v
IG1fY29udGV4dCwgbV9nbG9iYWwsIGFuZCBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMgc2hvdWxkCi0g
ICAgLy8gYWxsIGJlIG5vbi1lbXB0eSBpZiBpZiBtX2NvbnRleHQgaXMgbm9uLWVtcHR5LgotICAg
IEFTU0VSVChtX2NvbnRleHQuSXNFbXB0eSgpIHx8ICFtX2dsb2JhbC5Jc0VtcHR5KCkpOwotICAg
IEFTU0VSVChtX2NvbnRleHQuSXNFbXB0eSgpIHx8ICFtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuSXNF
bXB0eSgpKTsKLSAgICByZXR1cm4gIW1fY29udGV4dC5Jc0VtcHR5KCk7Ci19Ci0KIERPTVdpbmRv
dyogVjhQcm94eTo6cmV0cmlldmVXaW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4
dCkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGNvbnRleHQtPkdsb2Jh
bCgpOwpAQCAtNjU3LDc5ICs2MTAsNiBAQCB2b2lkIFY4UHJveHk6OmRpc2Nvbm5lY3RGcmFtZSgp
CiB7CiB9CiAKLXZvaWQgVjhQcm94eTo6dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB3cmFwcGVyKQotewotICAgIGNsZWFyRG9jdW1lbnRXcmFwcGVyKCk7Ci0KLSAg
ICBBU1NFUlQobV9kb2N1bWVudC5Jc0VtcHR5KCkpOwotICAgIG1fZG9jdW1lbnQgPSB2ODo6UGVy
c2lzdGVudDx2ODo6VmFsdWU+OjpOZXcod3JhcHBlcik7Ci0jaWZuZGVmIE5ERUJVRwotICAgIFY4
R0NDb250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShQUk9YWSwgdGhpcywgbV9kb2N1bWVu
dCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBWOFByb3h5OjpjbGVhckRvY3VtZW50V3JhcHBlcigpCi17
Ci0gICAgaWYgKCFtX2RvY3VtZW50LklzRW1wdHkoKSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAg
ICAgVjhHQ0NvbnRyb2xsZXI6OnVucmVnaXN0ZXJHbG9iYWxIYW5kbGUodGhpcywgbV9kb2N1bWVu
dCk7Ci0jZW5kaWYKLSAgICAgICAgbV9kb2N1bWVudC5EaXNwb3NlKCk7Ci0gICAgICAgIG1fZG9j
dW1lbnQuQ2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgVjhQcm94eTo6dXBkYXRlRG9jdW1lbnRX
cmFwcGVyQ2FjaGUoKQotewotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICB2
ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dCk7Ci0KLSAgICAvLyBJZiB0
aGUgZG9jdW1lbnQgaGFzIG5vIGZyYW1lLCBOb2RlVG9WOE9iamVjdCBtaWdodCBnZXQgdGhlCi0g
ICAgLy8gZG9jdW1lbnQgd3JhcHBlciBmb3IgYSBkb2N1bWVudCB0aGF0IGlzIGFib3V0IHRvIGJl
IGRlbGV0ZWQuCi0gICAgLy8gSWYgdGhlIEZvcmNlU2V0IGJlbG93IGNhdXNlcyBhIGdhcmJhZ2Ug
Y29sbGVjdGlvbiwgdGhlIGRvY3VtZW50Ci0gICAgLy8gbWlnaHQgZ2V0IGRlbGV0ZWQgYW5kIHRo
ZSBnbG9iYWwgaGFuZGxlIGZvciB0aGUgZG9jdW1lbnQKLSAgICAvLyB3cmFwcGVyIGNsZWFyZWQu
IFVzaW5nIHRoZSBjbGVhcmVkIGdsb2JhbCBoYW5kbGUgd2lsbCBsZWFkIHRvCi0gICAgLy8gY3Jh
c2hlcy4gSW4gdGhpcyBjYXNlIHdlIGNsZWFyIHRoZSBjYWNoZSBhbmQgbGV0IHRoZSBET01XaW5k
b3cKLSAgICAvLyBhY2Nlc3NvciBoYW5kbGUgYWNjZXNzIHRvIHRoZSBkb2N1bWVudC4KLSAgICBp
ZiAoIW1fZnJhbWUtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgY2xlYXJEb2N1bWVu
dFdyYXBwZXJDYWNoZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGRvY3VtZW50V3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVU
b1Y4T2JqZWN0KG1fZnJhbWUtPmRvY3VtZW50KCkpOwotCi0gICAgLy8gSWYgaW5zdGFudGlhdGlv
biBvZiB0aGUgZG9jdW1lbnQgd3JhcHBlciBmYWlscywgY2xlYXIgdGhlIGNhY2hlCi0gICAgLy8g
YW5kIGxldCB0aGUgRE9NV2luZG93IGFjY2Vzc29yIGhhbmRsZSBhY2Nlc3MgdG8gdGhlIGRvY3Vt
ZW50LgotICAgIGlmIChkb2N1bWVudFdyYXBwZXIuSXNFbXB0eSgpKSB7Ci0gICAgICAgIGNsZWFy
RG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2Nv
bnRleHQtPkdsb2JhbCgpLT5Gb3JjZVNldCh2ODo6U3RyaW5nOjpOZXcoImRvY3VtZW50IiksIGRv
Y3VtZW50V3JhcHBlciwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6UmVh
ZE9ubHkgfCB2ODo6RG9udERlbGV0ZSkpOwotfQotCi12b2lkIFY4UHJveHk6OmNsZWFyRG9jdW1l
bnRXcmFwcGVyQ2FjaGUoKQotewotICAgIEFTU0VSVCghbV9jb250ZXh0LklzRW1wdHkoKSk7Ci0g
ICAgbV9jb250ZXh0LT5HbG9iYWwoKS0+Rm9yY2VEZWxldGUodjg6OlN0cmluZzo6TmV3KCJkb2N1
bWVudCIpKTsKLX0KLQotdm9pZCBWOFByb3h5OjpkaXNwb3NlQ29udGV4dEhhbmRsZXMoKQotewot
ICAgIGlmICghbV9jb250ZXh0LklzRW1wdHkoKSkgewotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+Y2xpZW50KCktPmRpZERlc3Ryb3lTY3JpcHRDb250ZXh0Rm9yRnJhbWUoKTsKLSAgICAgICAg
bV9jb250ZXh0LkRpc3Bvc2UoKTsKLSAgICAgICAgbV9jb250ZXh0LkNsZWFyKCk7Ci0gICAgfQot
Ci0gICAgaWYgKCFtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuSXNFbXB0eSgpKSB7Ci0jaWZuZGVmIE5E
RUJVRwotICAgICAgICBWOEdDQ29udHJvbGxlcjo6dW5yZWdpc3Rlckdsb2JhbEhhbmRsZSh0aGlz
LCBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMpOwotI2VuZGlmCi0gICAgICAgIG1fd3JhcHBlckJvaWxl
cnBsYXRlcy5EaXNwb3NlKCk7Ci0gICAgICAgIG1fd3JhcHBlckJvaWxlcnBsYXRlcy5DbGVhcigp
OwotICAgIH0KLX0KLQogdm9pZCBWOFByb3h5OjpyZWxlYXNlU3RvcmFnZU11dGV4KCkKIHsKICAg
ICAvLyBJZiB3ZSd2ZSBqdXN0IGxlZnQgYSB0b3AgbGV2ZWwgc2NyaXB0IGNvbnRleHQgYW5kIGxv
Y2FsIHN0b3JhZ2UgaGFzIGJlZW4KQEAgLTc1NiwyODUgKzYzNiwxMyBAQCB2b2lkIFY4UHJveHk6
OnJlc2V0SXNvbGF0ZWRXb3JsZHMoKQogdm9pZCBWOFByb3h5OjpjbGVhckZvckNsb3NlKCkKIHsK
ICAgICByZXNldElzb2xhdGVkV29ybGRzKCk7Ci0KLSAgICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5
KCkpIHsKLSAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotCi0gICAgICAgIGNs
ZWFyRG9jdW1lbnRXcmFwcGVyKCk7Ci0gICAgICAgIGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOwot
ICAgIH0KKyAgICB3aW5kb3dTaGVsbCgpLT5jbGVhckZvckNsb3NlKCk7CiB9CiAKIHZvaWQgVjhQ
cm94eTo6Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKIHsKICAgICByZXNldElzb2xhdGVkV29ybGRzKCk7
Ci0KLSAgICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZTsKLSAgICAgICAgY2xlYXJEb2N1bWVudFdyYXBwZXIoKTsKLQotICAgICAgICB2
ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dCk7Ci0KLSAgICAgICAgLy8g
Q2xlYXIgdGhlIGRvY3VtZW50IHdyYXBwZXIgY2FjaGUgYmVmb3JlIHR1cm5pbmcgb24gYWNjZXNz
IGNoZWNrcyBvbgotICAgICAgICAvLyB0aGUgb2xkIERPTVdpbmRvdyB3cmFwcGVyLiBUaGlzIHdh
eSwgYWNjZXNzIHRvIHRoZSBkb2N1bWVudCB3cmFwcGVyCi0gICAgICAgIC8vIHdpbGwgYmUgcHJv
dGVjdGVkIGJ5IHRoZSBzZWN1cml0eSBjaGVja3Mgb24gdGhlIERPTVdpbmRvdyB3cmFwcGVyLgot
ICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlckNhY2hlKCk7Ci0KLSAgICAgICAgLy8gVHVybiBv
biBhY2Nlc3MgY2hlY2sgb24gdGhlIG9sZCBET01XaW5kb3cgd3JhcHBlci4KLSAgICAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFw
cGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBtX2dsb2JhbCk7Ci0gICAgICAgIEFTU0VSVCgh
d3JhcHBlci5Jc0VtcHR5KCkpOwotICAgICAgICB3cmFwcGVyLT5UdXJuT25BY2Nlc3NDaGVjaygp
OwotCi0gICAgICAgIC8vIFNlcGFyYXRlIHRoZSBjb250ZXh0IGZyb20gaXRzIGdsb2JhbCBvYmpl
Y3QuCi0gICAgICAgIG1fY29udGV4dC0+RGV0YWNoR2xvYmFsKCk7Ci0KLSAgICAgICAgZGlzcG9z
ZUNvbnRleHRIYW5kbGVzKCk7Ci0gICAgfQotfQotCi12b2lkIFY4UHJveHk6OnNldFNlY3VyaXR5
VG9rZW4oKQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7
Ci0gICAgLy8gU2V0dXAgc2VjdXJpdHkgb3JpZ2luIGFuZCBzZWN1cml0eSB0b2tlbi4KLSAgICBp
ZiAoIWRvY3VtZW50KSB7Ci0gICAgICAgIG1fY29udGV4dC0+VXNlRGVmYXVsdFNlY3VyaXR5VG9r
ZW4oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEFzayB0aGUgZG9jdW1lbnQn
cyBTZWN1cml0eU9yaWdpbiB0byBnZW5lcmF0ZSBhIHNlY3VyaXR5IHRva2VuLgotICAgIC8vIElm
IHR3byB0b2tlbnMgYXJlIGVxdWFsLCB0aGVuIHRoZSBTZWN1cml0eU9yaWdpbnMgY2FuQWNjZXNz
IGVhY2ggb3RoZXIuCi0gICAgLy8gSWYgdHdvIHRva2VucyBhcmUgbm90IGVxdWFsLCB0aGVuIHdl
IGhhdmUgdG8gY2FsbCBjYW5BY2Nlc3MuCi0gICAgLy8gTm90ZTogd2UgY2FuJ3QgdXNlIHRoZSBI
VFRQT3JpZ2luIGlmIGl0IHdhcyBzZXQgZnJvbSB0aGUgRE9NLgotICAgIFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4gPSBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICBTdHJpbmcgdG9rZW47
Ci0gICAgaWYgKCFvcmlnaW4tPmRvbWFpbldhc1NldEluRE9NKCkpCi0gICAgICAgIHRva2VuID0g
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7Ci0KLSAgICAvLyBBbiBlbXB0
eSBvciAibnVsbCIgdG9rZW4gbWVhbnMgd2UgYWx3YXlzIGhhdmUgdG8gY2FsbAotICAgIC8vIGNh
bkFjY2Vzcy4gVGhlIHRvU3RyaW5nIG1ldGhvZCBvbiBzZWN1cml0eU9yaWdpbnMgcmV0dXJucyB0
aGUKLSAgICAvLyBzdHJpbmcgIm51bGwiIGZvciBlbXB0eSBzZWN1cml0eSBvcmlnaW5zIGFuZCBm
b3Igc2VjdXJpdHkKLSAgICAvLyBvcmlnaW5zIHRoYXQgc2hvdWxkIG9ubHkgYWxsb3cgYWNjZXNz
IHRvIHRoZW1zZWx2ZXMuIEluIHRoaXMKLSAgICAvLyBjYXNlLCB3ZSB1c2UgdGhlIGdsb2JhbCBv
YmplY3QgYXMgdGhlIHNlY3VyaXR5IHRva2VuIHRvIGF2b2lkCi0gICAgLy8gY2FsbGluZyBjYW5B
Y2Nlc3Mgd2hlbiBhIHNjcmlwdCBhY2Nlc3NlcyBpdHMgb3duIG9iamVjdHMuCi0gICAgaWYgKHRv
a2VuLmlzRW1wdHkoKSB8fCB0b2tlbiA9PSAibnVsbCIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5V
c2VEZWZhdWx0U2VjdXJpdHlUb2tlbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Q1N0cmluZyB1dGY4VG9rZW4gPSB0b2tlbi51dGY4KCk7Ci0gICAgLy8gTk9URTogVjggZG9lcyBp
ZGVudGl0eSBjb21wYXJpc29uIGluIGZhc3QgcGF0aCwgbXVzdCB1c2UgYSBzeW1ib2wKLSAgICAv
LyBhcyB0aGUgc2VjdXJpdHkgdG9rZW4uCi0gICAgbV9jb250ZXh0LT5TZXRTZWN1cml0eVRva2Vu
KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCh1dGY4VG9rZW4uZGF0YSgpLCB1dGY4VG9rZW4ubGVuZ3Ro
KCkpKTsKLX0KLQotdm9pZCBWOFByb3h5Ojp1cGRhdGVEb2N1bWVudCgpCi17Ci0gICAgaWYgKCFt
X2ZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9nbG9iYWwu
SXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGVyZSBpcyBhbiBleGlzdGlu
ZyBKYXZhU2NyaXB0IHdyYXBwZXIgZm9yIHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgLy8gb2YgdGhp
cyBmcmFtZS4gSmF2YVNjcmlwdCBjb2RlIGluIG90aGVyIGZyYW1lcyBtaWdodCBob2xkIGEKLSAg
ICAvLyByZWZlcmVuY2UgdG8gdGhpcyB3cmFwcGVyLiBXZSBlYWdlcmx5IGluaXRpYWxpemUgdGhl
IEphdmFTY3JpcHQKLSAgICAvLyBjb250ZXh0IGZvciB0aGUgbmV3IGRvY3VtZW50IHRvIG1ha2Ug
cHJvcGVydHkgYWNjZXNzIG9uIHRoZQotICAgIC8vIGdsb2JhbCBvYmplY3Qgd3JhcHBlciBzdWNj
ZWVkLgotICAgIGluaXRDb250ZXh0SWZOZWVkZWQoKTsKLQotICAgIC8vIEJhaWwgb3V0IGlmIGNv
bnRleHQgaW5pdGlhbGl6YXRpb24gZmFpbGVkLgotICAgIGlmIChtX2NvbnRleHQuSXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBoYXZlIGEgbmV3IGRvY3VtZW50IGFuZCB3
ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY2FjaGUuCi0gICAgdXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2Fj
aGUoKTsKLQotICAgIHVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7Ci19Ci0KLXZvaWQgVjhQcm94eTo6
dXBkYXRlU2VjdXJpdHlPcmlnaW4oKQotewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAg
ICBzZXRTZWN1cml0eVRva2VuKCk7Ci19Ci0KLXY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBW
OFByb3h5OjpjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsLCBp
bnQgZXh0ZW5zaW9uR3JvdXApCi17Ci0gICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHJl
c3VsdDsKLQotICAgIC8vIFRoZSBhY3RpdmVEb2N1bWVudExvYWRlciBwb2ludGVyIGNvdWxkIGJl
IE5VTEwgZHVyaW5nIGZyYW1lIHNodXRkb3duLgotICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCkt
PmFjdGl2ZURvY3VtZW50TG9hZGVyKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAv
LyBDcmVhdGUgYSBuZXcgZW52aXJvbm1lbnQgdXNpbmcgYW4gZW1wdHkgdGVtcGxhdGUgZm9yIHRo
ZSBzaGFkb3cKLSAgICAvLyBvYmplY3QuIFJldXNlIHRoZSBnbG9iYWwgb2JqZWN0IGlmIG9uZSBo
YXMgYmVlbiBjcmVhdGVkIGVhcmxpZXIuCi0gICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRl
bXBsYXRlPiBnbG9iYWxUZW1wbGF0ZSA9IFY4RE9NV2luZG93OjpHZXRTaGFkb3dPYmplY3RUZW1w
bGF0ZSgpOwotICAgIGlmIChnbG9iYWxUZW1wbGF0ZS5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0KLSAgICAvLyBJbnN0YWxsIGEgc2VjdXJpdHkgaGFuZGxlciB3aXRoIFY4Lgot
ICAgIGdsb2JhbFRlbXBsYXRlLT5TZXRBY2Nlc3NDaGVja0NhbGxiYWNrcyhWOEN1c3RvbTo6djhE
T01XaW5kb3dOYW1lZFNlY3VyaXR5Q2hlY2ssIFY4Q3VzdG9tOjp2OERPTVdpbmRvd0luZGV4ZWRT
ZWN1cml0eUNoZWNrLCB2ODo6SW50ZWdlcjo6TmV3KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKSk7
Ci0gICAgZ2xvYmFsVGVtcGxhdGUtPlNldEludGVybmFsRmllbGRDb3VudChWOEN1c3RvbTo6a0RP
TVdpbmRvd0ludGVybmFsRmllbGRDb3VudCk7Ci0KLSAgICAvLyBVc2VkIHRvIGF2b2lkIHNsZWVw
IGNhbGxzIGluIHVubG9hZCBoYW5kbGVycy4KLSAgICBpZiAoIXJlZ2lzdGVyZWRFeHRlbnNpb25X
aXRoVjgoRGF0ZUV4dGVuc2lvbjo6Z2V0KCkpKQotICAgICAgICByZWdpc3RlckV4dGVuc2lvbihE
YXRlRXh0ZW5zaW9uOjpnZXQoKSwgU3RyaW5nKCkpOwotCi0gICAgLy8gRHluYW1pY2FsbHkgdGVs
bCB2OCBhYm91dCBvdXIgZXh0ZW5zaW9ucyBub3cuCi0gICAgT3duQXJyYXlQdHI8Y29uc3QgY2hh
cio+IGV4dGVuc2lvbk5hbWVzKG5ldyBjb25zdCBjaGFyKlttX2V4dGVuc2lvbnMuc2l6ZSgpXSk7
Ci0gICAgaW50IGluZGV4ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZXh0ZW5z
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9leHRlbnNpb25zW2ldLmdyb3VwICYm
IG1fZXh0ZW5zaW9uc1tpXS5ncm91cCAhPSBleHRlbnNpb25Hcm91cCkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIC8vIE5vdGU6IHdlIGNoZWNrIHRoZSBsb2FkZXIgVVJMIGhlcmUg
aW5zdGVhZCBvZiB0aGUgZG9jdW1lbnQgVVJMCi0gICAgICAgIC8vIGJlY2F1c2Ugd2UgbWlnaHQg
YmUgY3VycmVudGx5IGxvYWRpbmcgYW4gVVJMIGludG8gYSBibGFuayBwYWdlLgotICAgICAgICAv
LyBTZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9
MTA5MjQKLSAgICAgICAgaWYgKG1fZXh0ZW5zaW9uc1tpXS5zY2hlbWUubGVuZ3RoKCkgPiAwICYm
IChtX2V4dGVuc2lvbnNbaV0uc2NoZW1lICE9IG1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1
bWVudExvYWRlcigpLT51cmwoKS5wcm90b2NvbCgpIHx8IG1fZXh0ZW5zaW9uc1tpXS5zY2hlbWUg
IT0gbV9mcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50
TG9hZGVyKCktPnVybCgpLnByb3RvY29sKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgZXh0ZW5zaW9uTmFtZXNbaW5kZXgrK10gPSBtX2V4dGVuc2lvbnNbaV0uZXh0ZW5zaW9u
LT5uYW1lKCk7Ci0gICAgfQotICAgIHY4OjpFeHRlbnNpb25Db25maWd1cmF0aW9uIGV4dGVuc2lv
bnMoaW5kZXgsIGV4dGVuc2lvbk5hbWVzLmdldCgpKTsKLSAgICByZXN1bHQgPSB2ODo6Q29udGV4
dDo6TmV3KCZleHRlbnNpb25zLCBnbG9iYWxUZW1wbGF0ZSwgZ2xvYmFsKTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLWJvb2wgVjhQcm94eTo6aW5zdGFsbERPTVdpbmRvdyh2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjb250ZXh0LCBET01XaW5kb3cqIHdpbmRvdykKLXsKLSAgICB2ODo6SGFu
ZGxlPHY4OjpTdHJpbmc+IGltcGxpY2l0UHJvdG9TdHJpbmcgPSB2ODo6U3RyaW5nOjpOZXcoIl9f
cHJvdG9fXyIpOwotICAgIGlmIChpbXBsaWNpdFByb3RvU3RyaW5nLklzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IEpTIHdpbmRvdyBvYmplY3Qg
YW5kIHVzZSBpdCBhcyB0aGUgcHJvdG90eXBlIGZvciB0aGUgIHNoYWRvdyBnbG9iYWwgb2JqZWN0
LgotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB3aW5kb3dDb25zdHJ1Y3RvciA9IFY4RE9N
V3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGdldEhpZGRl
bk9iamVjdFByb3RvdHlwZShjb250ZXh0KSk7Ci0gICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGpz
V2luZG93ID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKHdpbmRvd0NvbnN0cnVjdG9yKTsK
LSAgICAvLyBCYWlsIG91dCBpZiBhbGxvY2F0aW9uIGZhaWxlZC4KLSAgICBpZiAoanNXaW5kb3cu
SXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXcmFwIHRoZSB3aW5k
b3cuCi0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGpzV2luZG93LCBWOENsYXNzSW5k
ZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKSwgd2luZG93KTsKLSAgICBWOERPTVdy
YXBwZXI6OnNldERPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChqc1dpbmRv
dy0+R2V0UHJvdG90eXBlKCkpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XKSwgd2luZG93KTsKLQotICAgIHdpbmRvdy0+cmVmKCk7Ci0gICAgVjhET01XcmFwcGVy
OjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qod2luZG93LCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0Pjo6TmV3KGpzV2luZG93KSk7Ci0KLSAgICAvLyBJbnNlcnQgdGhlIHdpbmRvdyBpbnN0YW5j
ZSBhcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBzaGFkb3cgb2JqZWN0LgotICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gdjhHbG9iYWwgPSBjb250ZXh0LT5HbG9iYWwoKTsKLSAgICBWOERPTVdyYXBw
ZXI6OnNldERPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2OEdsb2JhbC0+
R2V0UHJvdG90eXBlKCkpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6RE9NV0lO
RE9XKSwgd2luZG93KTsKLSAgICB2OEdsb2JhbC0+U2V0KGltcGxpY2l0UHJvdG9TdHJpbmcsIGpz
V2luZG93KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQ3JlYXRlIGEgbmV3IGVudmlyb25t
ZW50IGFuZCBzZXR1cCB0aGUgZ2xvYmFsIG9iamVjdC4KLS8vCi0vLyBUaGUgZ2xvYmFsIG9iamVj
dCBjb3JyZXNwb25kcyB0byBhIERPTVdpbmRvdyBpbnN0YW5jZS4gSG93ZXZlciwgdG8KLS8vIGFs
bG93IHByb3BlcnRpZXMgb2YgdGhlIEpTIERPTVdpbmRvdyBpbnN0YW5jZSB0byBiZSBzaGFkb3dl
ZCwgd2UKLS8vIHVzZSBhIHNoYWRvdyBvYmplY3QgYXMgdGhlIGdsb2JhbCBvYmplY3QgYW5kIHVz
ZSB0aGUgSlMgRE9NV2luZG93Ci0vLyBpbnN0YW5jZSBhcyB0aGUgcHJvdG90eXBlIGZvciB0aGF0
IHNoYWRvdyBvYmplY3QuIFRoZSBKUyBET01XaW5kb3cKLS8vIGluc3RhbmNlIGlzIHVuZGV0ZWN0
YWJsZSBmcm9tIGphdmFzY3JpcHQgY29kZSBiZWNhdXNlIHRoZSBfX3Byb3RvX18KLS8vIGFjY2Vz
c29ycyBza2lwIHRoYXQgb2JqZWN0LgotLy8KLS8vIFRoZSBzaGFkb3cgb2JqZWN0IGFuZCB0aGUg
RE9NV2luZG93IGluc3RhbmNlIGFyZSBzZWVuIGFzIG9uZSBvYmplY3QKLS8vIGZyb20gamF2YXNj
cmlwdC4gVGhlIGphdmFzY3JpcHQgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gYQotLy8gRE9N
V2luZG93IGluc3RhbmNlIGlzIHRoZSBzaGFkb3cgb2JqZWN0LiBXaGVuIG1hcHBpbmcgYSBET01X
aW5kb3cKLS8vIGluc3RhbmNlIHRvIGEgVjggb2JqZWN0LCB3ZSByZXR1cm4gdGhlIHNoYWRvdyBv
YmplY3QuCi0vLwotLy8gVG8gaW1wbGVtZW50IHNwbGl0LXdpbmRvdywgc2VlCi0vLyAgIDEpIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI0OQotLy8gICAyKSBodHRw
czovL3dpa2kubW96aWxsYS5vcmcvR2Vja286U3BsaXRXaW5kb3cKLS8vICAgMykgaHR0cHM6Ly9i
dWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk2NjM5Ci0vLyB3ZSBuZWVkIHRv
IHNwbGl0IHRoZSBzaGFkb3cgb2JqZWN0IGZ1cnRoZXIgaW50byB0d28gb2JqZWN0czoKLS8vIGFu
IG91dGVyIHdpbmRvdyBhbmQgYW4gaW5uZXIgd2luZG93LiBUaGUgaW5uZXIgd2luZG93IGlzIHRo
ZSBoaWRkZW4KLS8vIHByb3RvdHlwZSBvZiB0aGUgb3V0ZXIgd2luZG93LiBUaGUgaW5uZXIgd2lu
ZG93IGlzIHRoZSBkZWZhdWx0Ci0vLyBnbG9iYWwgb2JqZWN0IG9mIHRoZSBjb250ZXh0LiBBIHZh
cmlhYmxlIGRlY2xhcmVkIGluIHRoZSBnbG9iYWwKLS8vIHNjb3BlIGlzIGEgcHJvcGVydHkgb2Yg
dGhlIGlubmVyIHdpbmRvdy4KLS8vCi0vLyBUaGUgb3V0ZXIgd2luZG93IHN0aWNrcyB0byBhIEZy
YW1lLCBpdCBpcyBleHBvc2VkIHRvIEphdmFTY3JpcHQKLS8vIHZpYSB3aW5kb3cud2luZG93LCB3
aW5kb3cuc2VsZiwgd2luZG93LnBhcmVudCwgZXRjLiBUaGUgb3V0ZXIgd2luZG93Ci0vLyBoYXMg
YSBzZWN1cml0eSB0b2tlbiB3aGljaCBpcyB0aGUgZG9tYWluLiBUaGUgb3V0ZXIgd2luZG93IGNh
bm5vdAotLy8gaGF2ZSBpdHMgb3duIHByb3BlcnRpZXMuIHdpbmRvdy5mb28gPSAneCcgaXMgZGVs
ZWdhdGVkIHRvIHRoZQotLy8gaW5uZXIgd2luZG93LgotLy8KLS8vIFdoZW4gYSBmcmFtZSBuYXZp
Z2F0ZXMgdG8gYSBuZXcgcGFnZSwgdGhlIGlubmVyIHdpbmRvdyBpcyBjdXQgb2ZmCi0vLyB0aGUg
b3V0ZXIgd2luZG93LCBhbmQgdGhlIG91dGVyIHdpbmRvdyBpZGVudGlmeSBpcyBwcmVzZXJ2ZWQg
Zm9yCi0vLyB0aGUgZnJhbWUuIEhvd2V2ZXIsIGEgbmV3IGlubmVyIHdpbmRvdyBpcyBjcmVhdGVk
IGZvciB0aGUgbmV3IHBhZ2UuCi0vLyBJZiB0aGVyZSBhcmUgSlMgY29kZSBob2xkcyBhIGNsb3N1
cmUgdG8gdGhlIG9sZCBpbm5lciB3aW5kb3csCi0vLyBpdCB3b24ndCBiZSBhYmxlIHRvIHJlYWNo
IHRoZSBvdXRlciB3aW5kb3cgdmlhIGl0cyBnbG9iYWwgb2JqZWN0Lgotdm9pZCBWOFByb3h5Ojpp
bml0Q29udGV4dElmTmVlZGVkKCkKLXsKLSAgICAvLyBCYWlsIG91dCBpZiB0aGUgY29udGV4dCBo
YXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotICAgIGlmICghbV9jb250ZXh0LklzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ3JlYXRlIGEgaGFuZGxlIHNjb3BlIGZvciBh
bGwgbG9jYWwgaGFuZGxlcy4KLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0KLSAg
ICAvLyBTZXR1cCB0aGUgc2VjdXJpdHkgaGFuZGxlcnMgYW5kIG1lc3NhZ2UgbGlzdGVuZXIuIFRo
aXMgb25seSBoYXMKLSAgICAvLyB0byBiZSBkb25lIG9uY2UuCi0gICAgc3RhdGljIGJvb2wgaXNW
OEluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgaWYgKCFpc1Y4SW5pdGlhbGl6ZWQpIHsKLSAgICAg
ICAgLy8gVGVsbHMgVjggbm90IHRvIGNhbGwgdGhlIGRlZmF1bHQgT09NIGhhbmRsZXIsIGJpbmRp
bmcgY29kZQotICAgICAgICAvLyB3aWxsIGhhbmRsZSBpdC4KLSAgICAgICAgdjg6OlY4OjpJZ25v
cmVPdXRPZk1lbW9yeUV4Y2VwdGlvbigpOwotICAgICAgICB2ODo6Vjg6OlNldEZhdGFsRXJyb3JI
YW5kbGVyKHJlcG9ydEZhdGFsRXJyb3JJblY4KTsKLQotICAgICAgICB2ODo6Vjg6OlNldEdsb2Jh
bEdDUHJvbG9ndWVDYWxsYmFjaygmVjhHQ0NvbnRyb2xsZXI6OmdjUHJvbG9ndWUpOwotICAgICAg
ICB2ODo6Vjg6OlNldEdsb2JhbEdDRXBpbG9ndWVDYWxsYmFjaygmVjhHQ0NvbnRyb2xsZXI6Omdj
RXBpbG9ndWUpOwotCi0gICAgICAgIHY4OjpWODo6QWRkTWVzc2FnZUxpc3RlbmVyKCZWOENvbnNv
bGVNZXNzYWdlOjpoYW5kbGVyKTsKLQotICAgICAgICB2ODo6Vjg6OlNldEZhaWxlZEFjY2Vzc0No
ZWNrQ2FsbGJhY2tGdW5jdGlvbihyZXBvcnRVbnNhZmVKYXZhU2NyaXB0QWNjZXNzKTsKLQotICAg
ICAgICBpc1Y4SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotCi0gICAgbV9jb250ZXh0ID0g
Y3JlYXRlTmV3Q29udGV4dChtX2dsb2JhbCwgMCk7Ci0gICAgaWYgKG1fY29udGV4dC5Jc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdjhDb250
ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dCk7Ci0gICAgdjg6OkNv
bnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZSh2OENvbnRleHQpOwotCi0gICAgLy8gU3RvcmUgdGhl
IGZpcnN0IGdsb2JhbCBvYmplY3QgY3JlYXRlZCBzbyB3ZSBjYW4gcmV1c2UgaXQuCi0gICAgaWYg
KG1fZ2xvYmFsLklzRW1wdHkoKSkgewotICAgICAgICBtX2dsb2JhbCA9IHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+OjpOZXcodjhDb250ZXh0LT5HbG9iYWwoKSk7Ci0gICAgICAgIC8vIEJhaWwg
b3V0IGlmIGFsbG9jYXRpb24gb2YgdGhlIGZpcnN0IGdsb2JhbCBvYmplY3RzIGZhaWxzLgotICAg
ICAgICBpZiAobV9nbG9iYWwuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkaXNwb3NlQ29udGV4
dEhhbmRsZXMoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2lmbmRlZiBOREVC
VUcKLSAgICAgICAgVjhHQ0NvbnRyb2xsZXI6OnJlZ2lzdGVyR2xvYmFsSGFuZGxlKFBST1hZLCB0
aGlzLCBtX2dsb2JhbCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpbnN0YWxsSGlkZGVuT2JqZWN0
UHJvdG90eXBlKHY4Q29udGV4dCk7Ci0gICAgbV93cmFwcGVyQm9pbGVycGxhdGVzID0gdjg6OlBl
cnNpc3RlbnQ8djg6OkFycmF5Pjo6TmV3KHY4OjpBcnJheTo6TmV3KFY4Q2xhc3NJbmRleDo6V1JB
UFBFUl9UWVBFX0NPVU5UKSk7Ci0gICAgLy8gQmFpbCBvdXQgaWYgYWxsb2NhdGlvbiBmYWlsZWQu
Ci0gICAgaWYgKG1fd3JhcHBlckJvaWxlcnBsYXRlcy5Jc0VtcHR5KCkpIHsKLSAgICAgICAgZGlz
cG9zZUNvbnRleHRIYW5kbGVzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWZuZGVmIE5E
RUJVRwotICAgIFY4R0NDb250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShQUk9YWSwgdGhp
cywgbV93cmFwcGVyQm9pbGVycGxhdGVzKTsKLSNlbmRpZgotCi0gICAgaWYgKCFpbnN0YWxsRE9N
V2luZG93KHY4Q29udGV4dCwgbV9mcmFtZS0+ZG9tV2luZG93KCkpKQotICAgICAgICBkaXNwb3Nl
Q29udGV4dEhhbmRsZXMoKTsKLQotICAgIHVwZGF0ZURvY3VtZW50KCk7Ci0KLSAgICBzZXRTZWN1
cml0eVRva2VuKCk7Ci0KLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENyZWF0
ZVNjcmlwdENvbnRleHRGb3JGcmFtZSgpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jvbmcu
IFdlIHNob3VsZCBhY3R1YWxseSBkbyB0aGlzIGZvciB0aGUgcHJvcGVyIHdvcmxkIG9uY2UKLSAg
ICAvLyB3ZSBkbyBpc29sYXRlZCB3b3JsZHMgdGhlIFdlYkNvcmUgd2F5LgotICAgIG1fZnJhbWUt
PmxvYWRlcigpLT5kaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCgwKTsKKyAgICB3
aW5kb3dTaGVsbCgpLT5jbGVhckZvck5hdmlnYXRpb24oKTsKIH0KIAogdm9pZCBWOFByb3h5Ojpz
ZXRET01FeGNlcHRpb24oaW50IGV4Y2VwdGlvbkNvZGUpCkBAIC0xMTIyLDggKzczMCw4IEBAIHY4
OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y29udGV4dCgKIAogdjg6OkxvY2FsPHY4OjpD
b250ZXh0PiBWOFByb3h5OjptYWluV29ybGRDb250ZXh0KCkKIHsKLSAgICBpbml0Q29udGV4dElm
TmVlZGVkKCk7Ci0gICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRl
eHQpOworICAgIHdpbmRvd1NoZWxsKCktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgICByZXR1
cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KHdpbmRvd1NoZWxsKCktPmNvbnRleHQoKSk7
CiB9CiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6bWFpbldvcmxkQ29udGV4dChG
cmFtZSogZnJhbWUpCkBAIC0xMjcxLDE3ICs4NzksMTggQEAgdm9pZCBWOFByb3h5OjpyZWdpc3Rl
ckV4dGVuc2lvbih2ODo6RXh0ZQogYm9vbCBWOFByb3h5OjpzZXRDb250ZXh0RGVidWdJZChpbnQg
ZGVidWdJZCkKIHsKICAgICBBU1NFUlQoZGVidWdJZCA+IDApOwotICAgIGlmIChtX2NvbnRleHQu
SXNFbXB0eSgpKQorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB3aW5kb3dT
aGVsbCgpLT5jb250ZXh0KCk7CisgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIGlmICghbV9jb250
ZXh0LT5HZXREYXRhKCktPklzVW5kZWZpbmVkKCkpCisgICAgaWYgKCFjb250ZXh0LT5HZXREYXRh
KCktPklzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHY4OjpDb250
ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250ZXh0KTsKKyAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgY29udGV4dFNjb3BlKGNvbnRleHQpOwogCiAgICAgY2hhciBidWZmZXJbMzJdOwogICAgIHNu
cHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJwYWdlLCVkIiwgZGVidWdJZCk7Ci0gICAg
bV9jb250ZXh0LT5TZXREYXRhKHY4OjpTdHJpbmc6Ok5ldyhidWZmZXIpKTsKKyAgICBjb250ZXh0
LT5TZXREYXRhKHY4OjpTdHJpbmc6Ok5ldyhidWZmZXIpKTsKIAogICAgIHJldHVybiB0cnVlOwog
fQpAQCAtMTI5OCwyNiArOTA3LDYgQEAgaW50IFY4UHJveHk6OmNvbnRleHREZWJ1Z0lkKHY4OjpI
YW5kbGU8dgogICAgIHJldHVybiBhdG9pKGNvbW1hICsgMSk7CiB9CiAKLXY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOFByb3h5OjpnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUodjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY29udGV4dCkKLXsKLSAgICByZXR1cm4gY29udGV4dC0+R2xvYmFsKCktPkdldEhp
ZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpvYmplY3RQcm90b3R5cGUoKSk7Ci19Ci0K
LXZvaWQgVjhQcm94eTo6aW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlwZSh2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjb250ZXh0KQotewotICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gb2JqZWN0
U3RyaW5nID0gdjg6OlN0cmluZzo6TmV3KCJPYmplY3QiKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpT
dHJpbmc+IHByb3RvdHlwZVN0cmluZyA9IHY4OjpTdHJpbmc6Ok5ldygicHJvdG90eXBlIik7Ci0g
ICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBoaWRkZW5PYmplY3RQcm90b3R5cGVTdHJpbmcgPSBW
OEhpZGRlblByb3BlcnR5TmFtZTo6b2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgLy8gQmFpbCBvdXQg
aWYgYWxsb2NhdGlvbiBmYWlsZWQuCi0gICAgaWYgKG9iamVjdFN0cmluZy5Jc0VtcHR5KCkgfHwg
cHJvdG90eXBlU3RyaW5nLklzRW1wdHkoKSB8fCBoaWRkZW5PYmplY3RQcm90b3R5cGVTdHJpbmcu
SXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IG9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCkt
PkdldChvYmplY3RTdHJpbmcpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJv
dG90eXBlID0gb2JqZWN0LT5HZXQocHJvdG90eXBlU3RyaW5nKTsKLQotICAgIGNvbnRleHQtPkds
b2JhbCgpLT5TZXRIaWRkZW5WYWx1ZShoaWRkZW5PYmplY3RQcm90b3R5cGVTdHJpbmcsIG9iamVj
dFByb3RvdHlwZSk7Ci19Ci0KIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdG9WOENvbnRleHQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3
b3JsZENvbnRleHQpCiB7CiAgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmgJKHJldmlzaW9uIDUyNjM1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIiAvLyBmb3IgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4KICNpbmNsdWRl
ICJTaGFyZWRQZXJzaXN0ZW50LmgiCiAjaW5jbHVkZSAiVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlICJWOERPTVdpbmRvd1NoZWxsLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVy
LmgiCiAjaW5jbHVkZSAiVjhHQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJWOEluZGV4LmgiCkBA
IC0xNTEsMjIgKzE1Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBGcmFtZSog
ZnJhbWUoKSB7IHJldHVybiBtX2ZyYW1lOyB9CiAKLSAgICAgICAgLy8gQ2xlYXIgcGFnZS1zcGVj
aWZpYyBkYXRhLCBidXQga2VlcCB0aGUgZ2xvYmFsIG9iamVjdCBpZGVudGlmeS4KICAgICAgICAg
dm9pZCBjbGVhckZvck5hdmlnYXRpb24oKTsKLQotICAgICAgICAvLyBDbGVhciBwYWdlLXNwZWNp
ZmljIGRhdGEgYmVmb3JlIHNodXR0aW5nIGRvd24gdGhlIHByb3h5IG9iamVjdC4KICAgICAgICAg
dm9pZCBjbGVhckZvckNsb3NlKCk7CiAKLSAgICAgICAgLy8gVXBkYXRlIGRvY3VtZW50IG9iamVj
dCBvZiB0aGUgZnJhbWUuCi0gICAgICAgIHZvaWQgdXBkYXRlRG9jdW1lbnQoKTsKLQotICAgICAg
ICAvLyBVcGRhdGUgdGhlIHNlY3VyaXR5IG9yaWdpbiBvZiBhIGRvY3VtZW50Ci0gICAgICAgIC8v
IChlLmcuLCBhZnRlciBzZXR0aW5nIGRvY291bWVudC5kb21haW4pLgotICAgICAgICB2b2lkIHVw
ZGF0ZVNlY3VyaXR5T3JpZ2luKCk7Ci0KLSAgICAgICAgLy8gRGVzdHJveSB0aGUgZ2xvYmFsIG9i
amVjdC4KLSAgICAgICAgdm9pZCBkZXN0cm95R2xvYmFsKCk7Ci0KICAgICAgICAgLy8gRklYTUU6
IE5lZWQgY29tbWVudC4gVXNlciBHZXN0dXJlIHJlbGF0ZWQuCiAgICAgICAgIGJvb2wgaW5saW5l
Q29kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29kZTsgfQogICAgICAgICB2b2lkIHNldElu
bGluZUNvZGUoYm9vbCB2YWx1ZSkgeyBtX2lubGluZUNvZGUgPSB2YWx1ZTsgfQpAQCAtMTc0LDkg
KzE2Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCB0aW1lckNhbGxiYWNr
KCkgY29uc3QgeyByZXR1cm4gbV90aW1lckNhbGxiYWNrOyB9CiAgICAgICAgIHZvaWQgc2V0VGlt
ZXJDYWxsYmFjayhib29sIHZhbHVlKSB7IG1fdGltZXJDYWxsYmFjayA9IHZhbHVlOyB9CiAKLSAg
ICAgICAgLy8gSGFzIHRoZSBjb250ZXh0IGZvciB0aGlzIHByb3h5IGJlZW4gaW5pdGlhbGl6ZWQ/
Ci0gICAgICAgIGJvb2wgaXNDb250ZXh0SW5pdGlhbGl6ZWQoKTsKLQogICAgICAgICAvLyBEaXNj
b25uZWN0cyB0aGUgcHJveHkgZnJvbSBpdHMgb3duZXIgZnJhbWUsCiAgICAgICAgIC8vIGFuZCBj
bGVhcnMgYWxsIHRpbWVvdXRzIG9uIHRoZSBET00gd2luZG93LgogICAgICAgICB2b2lkIGRpc2Nv
bm5lY3RGcmFtZSgpOwpAQCAtMjQxLDE2ICsyMjYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIGFzIGNvbnN0cnVjdG9yIHdpdGggdGhlIGdpdmVu
IGFyZ3VtZW50cy4KICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gbmV3SW5zdGFuY2Uodjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+LCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFy
Z3ZbXSk7CiAKLSAgICAgICAgLy8gVG8gY3JlYXRlIEpTIFdyYXBwZXIgb2JqZWN0cywgd2UgY3Jl
YXRlIGEgY2FjaGUgb2YgYSAnYm9pbGVyIHBsYXRlJwotICAgICAgICAvLyBvYmplY3QsIGFuZCB0
aGVuIHNpbXBseSBDbG9uZSB0aGF0IG9iamVjdCBlYWNoIHRpbWUgd2UgbmVlZCBhIG5ldyBvbmUu
Ci0gICAgICAgIC8vIFRoaXMgaXMgZmFzdGVyIHRoYW4gZ29pbmcgdGhyb3VnaCB0aGUgZnVsbCBv
YmplY3QgY3JlYXRpb24gcHJvY2Vzcy4KLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNy
ZWF0ZVdyYXBwZXJGcm9tQ2FjaGUoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludCBjbGFzc0luZGV4ID0gVjhDbGFzc0luZGV4OjpUb0lu
dCh0eXBlKTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjbG9uZShtX3dyYXBw
ZXJCb2lsZXJwbGF0ZXMtPkNsb25lRWxlbWVudEF0KGNsYXNzSW5kZXgpKTsKLSAgICAgICAgICAg
IHJldHVybiBjbG9uZS5Jc0VtcHR5KCkgPyBjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2Uo
dHlwZSkgOiBjbG9uZTsKLSAgICAgICAgfQotCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHdpbmRv
dyBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIGEgY29udGV4dC4KICAgICAgICAgc3RhdGljIERPTVdp
bmRvdyogcmV0cmlldmVXaW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwogICAgICAgICAv
LyBSZXR1cm5zIFY4UHJveHkgb2JqZWN0IG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbnRl
eHQuCkBAIC0zNDEsMTMgKzMxNiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHY4
OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCgpOwogICAgICAgICB2ODo6TG9jYWw8djg6OkNv
bnRleHQ+IG1haW5Xb3JsZENvbnRleHQoKTsKIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgZXZlbnR1YWxseSB0YWtlIERPTVdyYXBwZXJXb3JsZCBhcmd1bWVudCEKKyAgICAgICAgVjhE
T01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd1NoZWxs
LmdldCgpOyB9CisKICAgICAgICAgYm9vbCBzZXRDb250ZXh0RGVidWdJZChpbnQgaWQpOwogICAg
ICAgICBzdGF0aWMgaW50IGNvbnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KTsK
IAotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEhpZGRlbk9iamVjdFBy
b3RvdHlwZSh2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pik7Ci0gICAgICAgIC8vIFdBUk5JTkc6IENh
bGwgfGluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5cGV8IG9ubHkgb24gZnJlc2ggY29udGV4dHMh
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5cGUodjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4pOwotCiAgICAgICAgIC8vIFJlZ2lzdGVycyBhIHY4IGV4dGVuc2lv
biB0byBiZSBhdmFpbGFibGUgb24gd2VicGFnZXMuIFRoZSB0d28gZm9ybXMKICAgICAgICAgLy8g
b2ZmZXIgdmFyaW91cyByZXN0cmljdGlvbnMgb24gd2hhdCB0eXBlcyBvZiBjb250ZXh0cyB0aGUg
ZXh0ZW5zaW9uIGlzCiAgICAgICAgIC8vIGxvYWRlZCBpbnRvLiBJZiBhIHNjaGVtZSBpcyBwcm92
aWRlZCwgb25seSBwYWdlcyB3aG9zZSBVUkwgaGFzIHRoZSBnaXZlbgpAQCAtMzU4LDMwICszMzIs
MTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4
dGVuc2lvbih2ODo6RXh0ZW5zaW9uKiwgY29uc3QgU3RyaW5nJiBzY2hlbWVSZXN0cmljdGlvbik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uKHY4OjpFeHRlbnNpb24qLCBp
bnQgZXh0ZW5zaW9uR3JvdXApOwogCi0gICAgICAgIC8vIEZJWE1FOiBTZXBhcmF0ZSB0aGVzZSBj
b25jZXJucyBmcm9tIFY4UHJveHk/Ci0gICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0
PiBjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsLCBpbnQgZXh0
ZW5zaW9uR3JvdXApOwotICAgICAgICBzdGF0aWMgYm9vbCBpbnN0YWxsRE9NV2luZG93KHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIERPTVdpbmRvdyogd2luZG93KTsKKyAgICAgICAg
c3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbnNpb25XaXRoVjgodjg6OkV4dGVuc2lvbiopOworICAg
ICAgICBzdGF0aWMgYm9vbCByZWdpc3RlcmVkRXh0ZW5zaW9uV2l0aFY4KHY4OjpFeHRlbnNpb24q
KTsKKworICAgICAgICBzdGF0aWMgY29uc3QgVjhFeHRlbnNpb25zJiBleHRlbnNpb25zKCkgeyBy
ZXR1cm4gbV9leHRlbnNpb25zOyB9CiAKLSAgICAgICAgdm9pZCBpbml0Q29udGV4dElmTmVlZGVk
KCk7Ci0gICAgICAgIHZvaWQgdXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3cmFwcGVyKTsKLSAgICAgICAgCiAgICAgICAgIC8vIFJlcG9ydCBhbiB1bnNhZmUgYXR0
ZW1wdCB0byBhY2Nlc3MgdGhlIGdpdmVuIGZyYW1lIG9uIHRoZSBjb25zb2xlLgogICAgICAgICBz
dGF0aWMgdm9pZCByZXBvcnRVbnNhZmVBY2Nlc3NUbyhGcmFtZSogdGFyZ2V0LCBEZWxheVJlcG9y
dGluZyBkZWxheSk7CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHNldFNlY3VyaXR5VG9r
ZW4oKTsKLSAgICAgICAgdm9pZCBjbGVhckRvY3VtZW50V3JhcHBlcigpOwotCi0gICAgICAgIC8v
IFRoZSBKYXZhU2NyaXB0IHdyYXBwZXIgZm9yIHRoZSBkb2N1bWVudCBvYmplY3QgaXMgY2FjaGVk
IG9uIHRoZSBnbG9iYWwKLSAgICAgICAgLy8gb2JqZWN0IGZvciBmYXN0IGFjY2Vzcy4gVXBkYXRl
RG9jdW1lbnRXcmFwcGVyQ2FjaGUgc2V0cyB0aGUgd3JhcHBlcgotICAgICAgICAvLyBmb3IgdGhl
IGN1cnJlbnQgZG9jdW1lbnQgb24gdGhlIGdsb2JhbCBvYmplY3QuIENsZWFyRG9jdW1lbnRXcmFw
cGVyQ2FjaGUKLSAgICAgICAgLy8gZGVsZXRlcyB0aGUgZG9jdW1lbnQgd3JhcHBlciBmcm9tIHRo
ZSBnbG9iYWwgb2JqZWN0LgotICAgICAgICB2b2lkIHVwZGF0ZURvY3VtZW50V3JhcHBlckNhY2hl
KCk7Ci0gICAgICAgIHZvaWQgY2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSgpOwotCi0gICAgICAg
IC8vIERpc3Bvc2UgZ2xvYmFsIGhhbmRsZXMgb2YgbV9jb250ZXh0cyBhbmQgZnJpZW5kcy4KLSAg
ICAgICAgdm9pZCBkaXNwb3NlQ29udGV4dEhhbmRsZXMoKTsKLQogICAgICAgICAvLyBJZiBtX3Jl
Y3Vyc2lvbkNvdW50IGlzIDAsIGxldCBMb2NhbFN0b3JhZ2Uga25vdyBzbyB3ZSBjYW4gcmVsZWFz
ZQogICAgICAgICAvLyB0aGUgc3RvcmFnZSBtdXRleC4KICAgICAgICAgdm9pZCByZWxlYXNlU3Rv
cmFnZU11dGV4KCk7CkBAIC00MTQsMjQgKzM3MywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fdXRpbGl0eUNv
bnRleHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNyZWF0
ZVdyYXBwZXJGcm9tQ2FjaGVTbG93Q2FzZShWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUpOwot
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uV2l0aFY4KHY4OjpFeHRlbnNp
b24qKTsKLSAgICAgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJlZEV4dGVuc2lvbldpdGhWOCh2ODo6
RXh0ZW5zaW9uKik7Ci0KICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAKLSAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkNvbnRleHQ+IG1fY29udGV4dDsKLQotICAgICAgICAvLyBGb3IgZWFjaCBw
b3NzaWJsZSB0eXBlIG9mIHdyYXBwZXIsIHdlIGtlZXAgYSBib2lsZXJwbGF0ZSBvYmplY3QuCi0g
ICAgICAgIC8vIFRoZSBib2lsZXJwbGF0ZSBpcyB1c2VkIHRvIGNyZWF0ZSBhZGRpdGlvbmFsIHdy
YXBwZXJzIG9mIHRoZSBzYW1lCi0gICAgICAgIC8vIHR5cGUuICBXZSBrZWVwIGEgc2luZ2xlIHBl
cnNpc3RlbnQgaGFuZGxlIHRvIGFuIGFycmF5IG9mIHRoZQotICAgICAgICAvLyBhY3RpdmF0ZWQg
Ym9pbGVycGxhdGVzLgotICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6QXJyYXk+IG1fd3JhcHBl
ckJvaWxlcnBsYXRlczsKLQotICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2ds
b2JhbDsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBtX2RvY3VtZW50OwotCisg
ICAgICAgIC8vIEZvciB0aGUgbW9tZW50LCB3ZSBoYXZlIG9uZSBvZiB0aGVzZS4gIFNvb24gd2Ug
d2lsbCBoYXZlIG9uZSBwZXIgRE9NV3JhcHBlcldvcmxkLgorICAgICAgICBSZWZQdHI8VjhET01X
aW5kb3dTaGVsbD4gbV93aW5kb3dTaGVsbDsKKyAgICAgICAgCiAgICAgICAgIC8vIFV0aWxpdHkg
Y29udGV4dCBob2xkaW5nIEphdmFTY3JpcHQgZnVuY3Rpb25zIHVzZWQgaW50ZXJuYWxseS4KICAg
ICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX3V0aWxpdHlDb250ZXh0
OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>