<?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>206519</bug_id>
          
          <creation_ts>2020-01-21 00:25:40 -0800</creation_ts>
          <short_desc>Move ImageBuffer utilities function to separate files</short_desc>
          <delta_ts>2020-01-21 23:02:39 -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>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>206516</dependson>
          <blocked>204955</blocked>
    
    <blocked>206541</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1608951</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-21 00:25:40 -0800</bug_when>
    <thetext>These utilities function are merely related to the ImageData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608952</commentid>
    <comment_count>1</comment_count>
      <attachid>388284</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-21 00:30:53 -0800</bug_when>
    <thetext>Created attachment 388284
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609042</commentid>
    <comment_count>2</comment_count>
      <attachid>388298</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-21 08:10:33 -0800</bug_when>
    <thetext>Created attachment 388298
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609065</commentid>
    <comment_count>3</comment_count>
      <attachid>388301</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-21 08:37:28 -0800</bug_when>
    <thetext>Created attachment 388301
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609084</commentid>
    <comment_count>4</comment_count>
      <attachid>388309</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-21 09:33:47 -0800</bug_when>
    <thetext>Created attachment 388309
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609395</commentid>
    <comment_count>5</comment_count>
      <attachid>388380</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-21 17:20:52 -0800</bug_when>
    <thetext>Created attachment 388380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609424</commentid>
    <comment_count>6</comment_count>
      <attachid>388388</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-21 18:44:22 -0800</bug_when>
    <thetext>Created attachment 388388
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609459</commentid>
    <comment_count>7</comment_count>
      <attachid>388388</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-21 23:00:21 -0800</bug_when>
    <thetext>Comment on attachment 388388
Patch

Clearing flags on attachment: 388388

Committed r254900: &lt;https://trac.webkit.org/changeset/254900&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609460</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-21 23:00:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609462</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-21 23:02:39 -0800</bug_when>
    <thetext>&lt;rdar://problem/58787889&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388284</attachid>
            <date>2020-01-21 00:30:53 -0800</date>
            <delta_ts>2020-01-21 08:10:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206519-20200121003052.patch</filename>
            <type>text/plain</type>
            <size>79704</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDE0ZjAwY2EzZGFkNjI1
MDkwYjYzMDVkNGE3ZGFjMzhjMWNmMjllNS4uZWNmMmJiYWQ0OGU5ZTJhZThiYmM1NGE1MWQ3YmM2
OWU3MGI2NjM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNSBAQAorMjAyMC0wMS0yMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUg
SW1hZ2VCdWZmZXIgdXRpbGl0aWVzIGZ1bmN0aW9uIHRvIHNlcGFyYXRlIGZpbGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY1MTkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVzZSB1dGlsaXRpZXMg
ZnVuY3Rpb24gYXJlIG1lcmVseSByZWxhdGVkIHRvIHRoZSBJbWFnZURhdGEuCisKKyAgICAgICAg
KiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0OgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlRnVuY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmpwZWdVVEkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbUlt
YWdlQnVmZmVyTUlNRVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNm
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6anBlZ1VUSSk6CisgICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwOiBSZW1vdmVkLgorCisy
MDIwLTAxLTIwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgTWFrZSBSZW5kZXJpbmdNb2RlIGFuZCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGVu
dW0gY2xhc3NlcyBhbmQgbW92ZSB0aGVtIHRvIHNlcGFyYXRlIGhlYWRlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjUxNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmRlcmluZ01vZGUgYW5kIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gbmVlZCB0byBiZSBlbmNvZGVkIGFuZCBkZWNvZGVkCisgICAg
ICAgIHdoZW4gdGhleSBhcmUgc2VudCBmcm9tIHRoZSBXZWJQcm9jZXNzIHRvIHRoZSBHUFVQcm9j
ZXNzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5j
LWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1U
eXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZWRlZCk6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVh
ZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICog
aHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWlu
dENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAg
ICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3Jl
ZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZz
Y3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0
ZVBhdHRlcm4pOgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6
OmlzQWNjZWxlcmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAqIGh0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVSZXNwZWN0aW5nT3JpZW50
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdNb2RlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRjaEJ1ZmZlcjo6Z2V0U2NyYXRjaEJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRU
aWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0
aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRv
d1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hh
ZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRh
dGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZlciBj
b25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNy
ZWF0ZVJhc3RlclNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUpOgorCiAyMDIwLTAxLTIwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3
YUBhcHBsZS5jb20+CiAKICAgICAgICAgRVhJRiBvcmllbnRhdGlvbiBpcyBpZ25vcmVkIGZvciBz
b21lIENTUyBpbWFnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA2ZmFiMjdjNWYw
ZDMxOTFiNGFiZTJmYzdmZWJkMjI3NzQxMjg2ODJhLi4yOWUyNjNjYWZmODJmOGJkY2Q5MTk3NTA0
MmI1MDA3MTAzZWIyM2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMjAtMDEtMjAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxl
LmNvbT4KKworICAgICAgICBNYWtlIFJlbmRlcmluZ01vZGUgYW5kIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZW51bSBjbGFzc2VzIGFuZCBtb3ZlIHRoZW0gdG8gc2VwYXJhdGUgaGVhZGVycworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NTE2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51Q2xp
ZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0pOgorCiAyMDIwLTAx
LTIwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IG1p
c3NpbmcgaGVhZGVyIGd1YXJkcyBhbmQgY2xlYW4gdXAgZW1wdHkgZmlsZXMgaW4gV2ViQ29yZSwg
V2ViS2l0TGVnYWN5LCBXZWJLaXQsIFRvb2xzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiYjg3ODA2
MTgzNzQxZjk2MjY4Mzg2OGVmYzY4OTEwMmJjNGY0YTJkLi40NTUyYzA1YTczOWY3NTg3OGI2N2Zh
NGU2ODgwZTZjNzQ2NWU2MTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMzEsNiArMTAzMSw3
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9n
YW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0
Zm9ybUdhbWVwYWQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCkBAIC0xMTI4LDYgKzExMjksNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFu
Z2VzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1JlbW90ZVZpZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdN
b2RlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXpl
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0Ns
aXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5k
ZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2ZiNmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2
ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENsaXBi
b2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5p
dGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6
Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcEltYWdlLT5zZXREYXRhKFdURk1vdmUoYnVmZmVyVG9T
YW5pdGl6ZSksIHRydWUpOwotICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIp
IHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsgbnVsbFN0cmluZygpIH07CiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IDcyMDVlMjBkM2FiNGUzOWZiZWU0YmI5NDMx
YWVjYjRiY2NjMjhiZDIuLjk3ZjMzNmU3YzVjOWU4ZDBkYTI1ZTJiZDRlNjFhZDcxYWU1MmRmMmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC04NCw3ICs4NCw2IEBAIHBsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Db2xvckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9EaXNwbGF5UmVmcmVzaE1v
bml0b3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2d0
ay9JbWFnZUJ1ZmZlckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAK
IAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZDViM2NlYWVkZWNkNjMwNjgzYThkODBlOTgyMmIzZGY0MWQ3NjIwZS4uNmVkNGFjMjNhNmQ5
YWM5NDRlYzE4NjRiYzY0OTdiMjc1Zjg1YTQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE0MSw2ICsyMTQxLDggQEAKIAkJ
NzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1
RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVF
NTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0Yy
NUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3Mjk5QkM2NzIzRDZBNTMyMDBD
QzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYy
M0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyog
VGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRG
YWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1Nzkz
RTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkw
RDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNN
ZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTk2NDAsNiArOTY0Miw4IEBACiAJCTcyN0FGRUQxMUEy
RUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdB
RkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FG
RUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5OUJDNjQyM0Q2
ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNG
MjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTAxMiw2ICsyNTAxNiw3IEBACiAJCQkJRkJDMjIwREQxMjM3RkJFQjAw
QkNGNzg4IC8qIG9wZW5nbCAqLywKIAkJCQkzNzIxNDkzMzE4RjBCNkQ2MDAxNTZFREMgLyogb3Bl
bnR5cGUgKi8sCiAJCQkJNDlFOTExQjIwRUY4NkQyNzAwOUQwQ0FGIC8qIHRyYW5zZm9ybXMgKi8s
CisJCQkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24u
aCAqLywKIAkJCQk0OTA3MDdFNDEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJLaXRCcmlkZ2Uu
Y3BwICovLAogCQkJCTQ5MDcwN0U1MTIxOUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRn
ZS5oICovLAogCQkJCUJFRjI5RUU5MTcxNUREMDkwMEM0QjRDOSAvKiBBdWRpb1RyYWNrUHJpdmF0
ZS5oICovLApAQCAtMjUxODgsNiArMjUxOTMsNyBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4
QUFGMyAvKiBSZWdpb24uaCAqLywKIAkJCQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4RjIgLyogUmVt
b3RlVmlkZW9TYW1wbGUuY3BwICovLAogCQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVBMDhGMiAvKiBS
ZW1vdGVWaWRlb1NhbXBsZS5oICovLAorCQkJCTcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBS
ZW5kZXJpbmdNb2RlLmggKi8sCiAJCQkJQTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5k
ZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJl
Y3QuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAg
Ki8sCkBAIC0yOTAzOSw2ICsyOTA0NSw3IEBACiAJCQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3
IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTEx
NUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgz
QkI1Qzg4MUQ1RDZGNDUwMDVBNzFGNCAvKiBBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyOTlCQzY3MjNENkE1MzIwMENDNjg4MyAvKiBBbHBoYVByZW11bHRp
cGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQg
LyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTA4QzNEMjE1
MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0U3QjJEQjMxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTM2OCw2ICszMTM3NSw3IEBACiAJCQkJMTE5
OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8qIExheW91dENvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1QThEMCAvKiBMYXlvdXREZXNjZW5kYW50
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MTgwMjU1MjNENDU0OUIwMEZGQjA3MSAv
KiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QUJBQkRE
MjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThEMCAvKiBMYXlvdXRJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1MzAwQzRDMDdFIC8qIExheW91dE1p
bGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjAxMiw2ICszMjAyMCw3IEBACiAJCQkJQkNF
QTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVz
b3VyY2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Mjk5QkM2ODIzRDZBNTNFMDBD
QzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2QzdDNEIyMjEy
Mzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1MUNEIC8qIFJlbmRlckl0ZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMyMDYyLDcgKzMyMDcxLDYgQEAKIAkJCQk0NThGRTQwQTE1ODlE
RjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBQjI0N0E2RDBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQlFNDE4MDI1NTIzRDQ1NDlCMDBGRkIwNzEgLyogTGF5b3V0SW50ZWdy
YXRpb25Cb3hUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTk1NUE4ODE2MEQxOTkyMDA4NTgw
MjUgLyogUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEM4
RkFFMEREQ0QzMUIwMEI1OTJGNCAvKiBSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM1RUI2NjgwRTgxQ0I3MTAwQjI1OTY1IC8qIFJlbmRlclN0eWxlQ29uc3RhbnRzLmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCmluZGV4IDY0ZGZmMmQ5ODRlZjcyZGQ5ZWJhNTEwMjQwNjEwZmMxOGUy
MWQ5NDcuLmVkYTE3MTdkZGZmZDdlYjBiYzNmODcwMmI4MjkzZTg5OWJkNWNlN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cApAQCAtMjc4NSw3ICsyNzg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFVuYWNjZWxlcmF0
ZWQsIHJlc29sdXRpb25TY2FsZSk7CisgICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShGbG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKICAgICAgICAgaWYgKCFidWZm
ZXIpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFi
NDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZh
ZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zp
bHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1h
Z2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAK
ICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAo
MTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2Nl
bGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVu
YWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAg
ICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1
c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2
ZGRmZjUwMmU1Li4xNDc3NjJmNTUyNDJlNjMxNTQ5ZGRiMGEwNjc0YTYyMWZlOGNmM2Q1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBA
QCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAo
IXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1f
Y29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQs
IDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEs
IENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCmluZGV4IDIzZDliMzRlODQ4ZjZkMDFkMzRhOWRhZmZiYTMwNTBmYzdhNzEzMTYu
LmY1ZTc2NTAwNjlhNmQ4NjkwZDk0M2RlZTI2YmIzNjFmOTE4OWNlMzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC04Myw2ICs4MywxMCBAQAogI2luY2x1
ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogI2VuZGlmCiAKKyNpZiBVU0UoQ0cpCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEhUTUxDYW52YXNFbGVtZW50
KTsKQEAgLTg4NSw3ICs4ODksNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxl
cmF0ZShzaXplKCkpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOworICAgIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIAogICAg
IGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXco
KS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6IG51
bGxwdHI7CiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJl
bmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggNWY0OWY3MzlhMWY1YzNiZTBlZTE3MWYzNGY5NjNl
MDI2NmJjNDQ5Mi4uMmI4MTk4OWU4ZmQ2MmVmZTM0NTM4N2E5MDJmZTY5MmIzMDk5NTRmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTYxLDkgKzYxLDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwKTsKIAog
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2Rl
ID0gQWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2Rl
ID0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJlbmRlcmluZ01v
ZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5n
TW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
ICNlbmRpZgogCiBSZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpjcmVhdGUoSW50U2l6ZSBz
aXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4IGY3NDQ4NTEy
MDAxNTc1YjRhZjRiYmEyNGVhYTU3YWJlNmEwNjQzYzkuLjc1NWYxMWVmODllMTE4MWJlMDZkNWVh
MmYwMDc4Njk2ZTM5YmU0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5j
cHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBP
ZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpCiAgICAgICAgICAgICByZXR1
cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAKICAgICAgICAgaWYgKCFt
X2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFw
OjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCksIHRy
dWUgfSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoeyBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCksIHRy
dWUgfSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRha2VJbWFnZUJ1ZmZlcigpOwogICAg
ICAgICBpZiAoIWJ1ZmZlcikKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIE9mZnNjcmVlbkNhbnZh
czo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSk7CisgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0K
IAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFn
ZUJ1ZmZlcigpIGNvbnN0CkBAIC0yNTcsNyArMjU3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYg
KHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVk
KSk7CisgICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSk7CiB9CiAKIHZvaWQgT2Zmc2NyZWVuQ2Fu
dmFzOjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDg5ZDhmNDI0M2IyYjkyZGZi
Y2IzMmFhMjIxYjc1M2M5M2YxZjU5NDEuLmQ0OTQ3MTIwODMyMzEwYzdjMGQ3YmVmMWM4NzlkYTNm
ZmIyOTNmMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0xODA2LDcgKzE4MDYsNyBAQCB0
ZW1wbGF0ZTxjbGFzcyBUPiBJbnRSZWN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNh
bGN1bGF0ZUNvbXBvc2l0aW5nQnVmZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKGNvbnN0
IEludFJlY3QmIGJ1ZmZlclJlY3QpCiB7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUo
YnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2Nl
bGVyYXRlZCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXpl
KCksIGlzQWNjZWxlcmF0ZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6Y29tcG9zaXRlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEludFJl
Y3QmIGJ1ZmZlclJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpAQCAtMTk5MCw3ICsxOTkwLDcg
QEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQ
YXR0ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1v
dmUobmF0aXZlSW1hZ2UpKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pIH07CiAjZW5k
aWYKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlk
ZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmlu
Z01vZGUoKSA6IEFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKHZpZGVvRWxlbWVudCksIGRyYXdpbmdDb250ZXh0KCkgPyBkcmF3aW5n
Q29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQuY3BwCmluZGV4IDE0ZWEzN2Q4ZDdlYWZiMDFiNWM0Y2UxOWViZTc2YzUxOGNmY2Q0
YTguLmI1MWI0ZGJmMTNlZTUwNmViOTQ5OGM0M2VmNDVjOTQ0ZGQ3M2UwYTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0LmNwcApAQCAtMzYsOSArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KTsKIAogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0g
QWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJlbmRlcmluZ01vZGUg
YnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9k
ZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNl
bmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBJbWFn
ZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCkBAIC02OSw3ICs2OSw3
IEBAIEhUTUxDYW52YXNFbGVtZW50KiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNhbnZh
cygpIGNvbnN0CiAKIGJvb2wgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJh
dGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVy
YXRlZDsKKyAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZDsKIH0KIAogdm9pZCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91
dHB1dEJpdG1hcChSZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWFwKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAppbmRleCA2N2NhNTNjNDdlZWEwMDhiZWEzZjYxZGY5NmU3Mzg5Y2FlY2E2ZGVhLi40Mjg4MjE2
NDQ5OGRmYzE4NTY5NDdiMTZjM2EyOWE4NjM3ZmQ5NTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAt
NjM4Niw3ICs2Mzg2LDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAv
LyBGSVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1w
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRl
eCAzNGJhMzcyZDQ5MTQzY2ZlMjkzYTdjMmE4OTQ1ZTQwZjM1MWIxMDUxLi5mNmJiZmFkZDM3N2Ji
NTFiMDYwYWEwYjMzZjBiNjgwZjExMmM5OTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ3LDcgKzE0NDcsNyBA
QCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNy
ZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50
UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIp
OiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVk
LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpj
cmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0
b3IpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNo
b3R0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCmlu
ZGV4IDBhNDRjMmZhMWEwOTQ5N2NmZGY1NTg4ODMyZmZkZmYxMDIzMzMwZTEuLmUyNGQ5MmU2ZjNl
NjFkMzhhOWIyNDQ4NWY0ZDEzZGU1MGU1MzNhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVTbmFwc2hvdHRpbmcuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBzbmFwc2hvdEZyYW1lUmVjdFdpdGhDbGlwKEZyYW1lJiBmcmFtZSwgY29uc3Qg
SW50UmUKICAgICBpZiAob3B0aW9ucyAmIFNuYXBzaG90T3B0aW9uc1BhaW50V2l0aEludGVncmFs
U2NhbGVGYWN0b3IpCiAgICAgICAgIHNjYWxlRmFjdG9yID0gY2VpbGYoc2NhbGVGYWN0b3IpOwog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoaW1hZ2VSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgc2NhbGVG
YWN0b3IpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBi
dWZmZXItPmNvbnRleHQoKS50cmFuc2xhdGUoLWltYWdlUmVjdC54KCksIC1pbWFnZVJlY3QueSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDQyMWRmYmQ5
NTc1NGM0NjI3NTdiNzhkYmZhNDEwMjU0MzJhZjBiN2QuLmY5MGQyNDZlYzU5YjRmOGE4ZTEzOGI3
MjI0MGNmMjAyNTgzMTkyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nv
dXJjZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJv
LnR4dApAQCAtMzEsNiArMzEsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fp
cm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBo
YVByZW11bHRpcGxpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9B
bHBoYVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxY2FlZjg1NDFkZWUwNjJiZmUw
NTQxNmNkYTJmMmE3Zjc5MjZlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2VudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4X3QgeworICAgIFByZW11
bHRpcGxpZWQsCisgICAgVW5wcmVtdWx0aXBsaWVkCit9OworCitXRUJDT1JFX0VYUE9SVCBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCBjNzFkOThmOGE1ZjY2NzQ2
ODYzMDk0NGFiNzFkYmFmYzkxZGNiNjRlLi40ODIyNDRhNGYyYmRjZWRlN2M4NzRjZDFiNTBlYTkx
NGIxNDk5YTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1h
Z2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lUmVzcGVjdGluZ09yaWVudGF0aW9uKGNvbnMK
ICAgICAgICAgcmV0dXJuIGltYWdlOwogCiAgICAgRmxvYXRSZWN0IHJlY3QgPSB7IEZsb2F0UG9p
bnQoKSwgc2l6ZSgpIH07Ci0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJl
Y3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gaW1hZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4NmRkNGIy
YWY5MWY0NTY1NTM1YTcwMjkzOTIzYWYyYmFhZGJhMi4uZTVjMzFjMWU2NGVmNTRiOTYxMTMxZGJi
MjVjNGNlNGIxODllMmQzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbWFn
ZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKICNpbmNs
dWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9PcHRpb25TZXQuaD4KQEAgLTM1MCw3ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKTsKICNlbmRpZgogICAgIGJv
b2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxl
cmF0ZWQgOiBVbmFjY2VsZXJhdGVkOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3Jl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwCmluZGV4IDQ1OGFlNzJmMmFlMDI1NjI0NzY4ZTg3OWRiZDQ5Njk2NGI0OTFiMTguLmRj
NTRhOTk4NWU0ZDQyMDY3ZGE2YzIzODE4MzVmYmQzNzM2ODc2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgog
CisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4IGNlZWExZGE0MGViMzJmZjc4YTFlNzVlMTdiZmUwMDky
MDFiNzZmMTIuLjU3ZWViZGM1MDAzYzM3MGI4YjQ3NDFlYzJiYTU0MjQ3Yzk1YzkzZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAg
LTEyMiwxNyArMTIyLDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9
OwogCi1lbnVtIFJlbmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0gICAgVW5hY2Nl
bGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFsbG9jYXRpb24g
cmF0aGVyIHRoYW4gcGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUuCi0gICAg
QWNjZWxlcmF0ZWQKLX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiB7Ci0g
ICAgUHJlbXVsdGlwbGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0cmluZyBjb21w
b3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJs
ZW5kTW9kZSk7CiBTdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwogYm9v
bCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKQEAg
LTE0Myw3ICsxMzIsNiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlTwogV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsK
IFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mLCBMaW5lQ2FwKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggY2I3NDM4NDQ4MDJhYjQyYjU1MzUxMTdj
YWI1Y2I3NTY0NGQ1YjNmNC4uMjZkZjdjZGQ5ZmI2YzEzZGQzMDBlMWQzOTNlYzQ0MjUyNDdkMjBh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CkBAIC0yOCw2ICsyOCw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJD
b2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXNHTC5oIgpAQCAtMzUsNiArMzYsNyBAQAogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdP
cHRpb25zLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KQEAgLTE4OCwxMCArMTkwLDQgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotI2lm
IFVTRShDRykKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci1WZWN0b3I8dWludDhfdD4gZGF0
YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpOwotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY5ZDhhZTgxYzg0OGIxMGU2ZjJkMDdhNzg5YjE2YzMzM2RjMjNjYjQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgK
QEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3Mg
UmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3QgeworICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxl
cmF0ZWQsCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDQwNDFiM2Y4MTA3Njc4YzU2
YWNkYjBjNTMzYTA5ODZmN2U2NDU1OTYuLjY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0MWY5
MzM2NzRkMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJTY3JhdGNo
QnVmZmVyKCk7CiAKICAgICAgICAgLy8gU2hhZG93Qmx1ciBpcyBub3QgdXNlZCB3aXRoIGFjY2Vs
ZXJhdGVkIGRyYXdpbmcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5h
Y2NlbGVyYXRlZCBidWZmZXIuCi0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHJvdW5kZWRTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICAgICAgbV9pbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIDEpOwogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKICAg
ICB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRv
dyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiB2b2lk
IFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IExheWVy
SW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZlckNh
bGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSks
IFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXQKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYgZnVsbFJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBjb25zdCBMYXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJ
bWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsK
LSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6
ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAg
ICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShs
YXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkLCAxKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg1
LDcgKzY4NSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zCiAgICAgYXV0byogbGF5ZXJJbWFn
ZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVT
aXplKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxheWVySW1hZ2VQcm9wZXJ0aWVzKTsKLSAg
ICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6
ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQs
IDEpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2Vu
ZGlmCiAKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRv
d1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbgogI2lmIFVT
RShDRykKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCku
Z2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKLSAgICBhdXRvIGxheWVySW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRl
ZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0
ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEpOwogICAgIGF1dG8q
IGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAgLTkxMiw3
ICs5MTIsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dMYXllcihjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiAgICAgYWRqdXN0Qmx1clJhZGl1
cyh0cmFuc2Zvcm0pOwogCi0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
ZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCAxZjEzMzNhNzQyNjlmNTI0NzA1
ZjU0M2YwZGRiODM0Y2M3Y2JkZjBkLi5lMDYwZDA4NzkxOGMyNjVkNzMyZTk5NjIzNDMwOTY2ODIx
ODQyMDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1
ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKQEAgLTc2LDcgKzc3LDYgQEAKICNlbmRp
ZgogI2VuZGlmCiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbWFnZUJ1ZmZlckRhdGE6Oklt
YWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCkBAIC0xMDMsNyArMTAzLDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRh
dGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2QKIAogSW1h
Z2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKIHsKLSAgICBpZiAobV9yZW5kZXJpbmdN
b2RlICE9IEFjY2VsZXJhdGVkKQorICAgIGlmIChtX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQpCiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCkBAIC0yOTIsMTQgKzI5MiwxNCBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhYwogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkKSB7CisgICAg
aWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQp
IHsKICAgICAgICAgbV9kYXRhLmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7CiAgICAgICAgIGlmICgh
bV9kYXRhLm1fc3VyZmFjZSB8fCBjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNl
LmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIG1fZGF0YS5tX3Jl
bmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxs
IGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCisgICAgICAgICAgICBtX2RhdGEubV9yZW5k
ZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxsb2NhdGlv
biBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgogICAgIH0KLSAgICBp
ZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKQorICAgIGlmIChtX2Rh
dGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpCiAjZWxz
ZQotICAgIEFTU0VSVChtX2RhdGEubV9yZW5kZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKTsKKyAg
ICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCk7CiAjZW5kaWYKICAgICB7CiAgICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5
X3Qgc19zdXJmYWNlRGF0YUtleTsKQEAgLTY1NCwyMSArNjU0LDYgQEAgdm9pZCBJbWFnZUJ1ZmZl
cjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJl
bXVsdGlwbGkKICAgICB9CiB9CiAKLSNpZiAhUExBVEZPUk0oR1RLKQotc3RhdGljIGNhaXJvX3N0
YXR1c190IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghcmVpbnRlcnByZXRfY2FzdDxW
ZWN0b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgbGVuZ3RoKSkKLSAgICAg
ICAgcmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKLSAgICByZXR1cm4gQ0FJUk9fU1RB
VFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2Vf
dCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1aW50OF90Piogb3V0cHV0
KQotewotICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBlID09ICJpbWFnZS9wbmci
KTsgLy8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgotCi0gICAgcmV0dXJu
IGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwgd3JpdGVGdW5jdGlvbiwg
b3V0cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQogU3RyaW5nIEltYWdlQnVmZmVy
Ojp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGVu
Y29kZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CkBAIC02ODQsMTggKzY2OSwx
MCBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksCiBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6
OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KSBjb25zdAog
ewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNh
aXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLQotICAg
IFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2U7Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5jb2Rl
SW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIHsg
fTsKLQotICAgIHJldHVybiBlbmNvZGVkSW1hZ2U7CisgICAgcmV0dXJuIGRhdGEoaW1hZ2UsIG1p
bWVUeXBlLCBxdWFsaXR5KTsKIH0KIAotI2VuZGlmCi0KICNpZiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogdm9pZCBJbWFnZUJ1ZmZl
ckRhdGE6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQ1OTQxNmM1N2MxNTgzODU0ZTg0YmE2MDgwOTBkM2ZkMTk5
MjBmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDYWlyby5oIgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisj
aW5jbHVkZSAiR1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhUExBVEZPUk0oR1RLKQorc3RhdGlj
IGNhaXJvX3N0YXR1c190IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKCFyZWludGVycHJldF9j
YXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1dCktPnRyeUFwcGVuZChkYXRhLCBsZW5ndGgpKQor
ICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9SOworICAgIHJldHVybiBDQUlS
T19TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3Vy
ZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBv
dXRwdXQpCit7CisgICAgQVNTRVJUX1VOVVNFRChtaW1lVHlwZSwgbWltZVR5cGUgPT0gImltYWdl
L3BuZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCisKKyAgICBy
ZXR1cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0
aW9uLCBvdXRwdXQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTOworfQorCitWZWN0b3I8dWludDhf
dD4gZGF0YShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+KQoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2U7Cisg
ICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCAmZW5jb2RlZElt
YWdlKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gZW5jb2RlZEltYWdlOworfQor
I2Vsc2UKK3N0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBHVW5pcXVl
T3V0UHRyPGdjaGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKK3sKKyAgICAvLyBMaXN0
IG9mIHN1cHBvcnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQaXhi
dWYgZG9jdW1lbnRhdGlvbi4KKyAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nZGst
cGl4YnVmL3N0YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1zYXZl
LXRvLWJ1ZmZlcnYKKworICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNpemVv
ZiAiaW1hZ2UiKTsKKyAgICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAmJiB0
eXBlICE9ICJ0aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7CisgICAgaWYg
KHR5cGUgPT0gImpwZWciKSB7CisgICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFscGhh
IGNoYW5uZWwuIFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11c3Qg
ZW5jb2RlIGEgUG9ydGVyLUR1ZmYKKyAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVyIGJs
YWNrIGZvciBpbWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgorICAgICAgICBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlOworICAgICAgICBpZiAoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKKyAg
ICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZV9mb3JfZGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAorICAgICAg
ICAgICAgICAgIENBSVJPX0ZPUk1BVF9SR0IyNCwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBJbnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UpOworICAgICAg
ICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENB
SVJPX0ZPUk1BVF9SR0IyNCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgICAg
ICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFj
ZS5nZXQoKSkpOworICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgp
LCBzdXJmYWNlLCAwLCAwKTsKKyAgICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAg
ICAgICAgfQorICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhi
dWYobmV3U3VyZmFjZS5nZXQoKSkpOworICAgIH0gZWxzZQorICAgICAgICBwaXhidWYgPSBhZG9w
dEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOworICAgIGlmICghcGl4YnVm
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgaWYgKHR5cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4w
ICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAgICBTdHJpbmcgcXVhbGl0eVN0cmluZyA9IFN0
cmluZzo6bnVtYmVyKHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCArIDAuNSkpOwor
ICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5v
dXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigp
LCAicXVhbGl0eSIsIHF1YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisgICAgfSBl
bHNlCisgICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVm
ZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0
UHRyKCksIE5VTEwpOworCisgICAgcmV0dXJuICFlcnJvcjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+
IGRhdGEoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPikKK3sKKyAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBidWZmZXI7CisgICAg
Z3NpemUgYnVmZmVyU2l6ZTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwg
cXVhbGl0eSwgYnVmZmVyLCBidWZmZXJTaXplKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChidWZmZXIu
Z2V0KCksIGJ1ZmZlclNpemUpOworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fp
cm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTA4OGQwZWE0ZDNlZWY0NWJjNzcxN2Y1Yzgy
NWVhM2Q1MGU3ZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNo
IE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShDQUlSTykKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmluZGV4IDM1NmYxOTY0
ZDA5NTUyYmQxYTI3ZmMwZDIyODA5ZDhhM2RhNmI3NWIuLjhhNjM3ZTEwYTExMDY2YzYyZWJmN2Uy
Y2M4ZDRlMTU3NTg5ODNhMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgSW1hZ2VC
dWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDR0NvbG9yU3AKICAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2Fs
ZWRIZWlnaHQpOwogICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwogCi0gICAg
Ym9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsK
KyAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkOwogICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6
ZS5oZWlnaHQoKSA8PSAwKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ0NSw3OSArNDQ1LDYgQEAg
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIEFscGhhUHJlbXVsdGlwbGkKICAgICAgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0
UmVjdCgxLCAxLCAwLCAwKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYganBlZ1VU
SSgpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lOKQotICAgIHN0
YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJsaWMuanBlZyIp
OwotI2VuZGlmCi0gICAgcmV0dXJuIGtVVFR5cGVKUEVHOwotfQotICAgIAotc3RhdGljIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKLXsKLSAgICAvLyBGSVhNRTogV2h5IGRvZXNuJ3QgaU9TIHVzZSB0aGUgQ29y
ZVNlcnZpY2VzIHZlcnNpb24/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVybiBVVElGcm9t
TUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0jZWxzZQotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7IC8vIEl0IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhyZWFkc2FmZS4K
LQotICAgIC8vIEZJWE1FOiBBZGQgV2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1cHBvcnRl
ZCBVVElzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJs
eSBpcyBmb3VuZC4KLSAgICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHLCBhbmQg
R0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgotICAgIHN0YXRpYyBjb25zdCBDRlN0
cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKLSAgICBzdGF0aWMgY29u
c3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2ZS5naWYiKTsK
LQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdl
L3BuZyIpKQotICAgICAgICByZXR1cm4ga1VUVHlwZVBORzsKLSAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9qcGVnIikpCi0gICAgICAgIHJldHVy
biBqcGVnVVRJKCk7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVU
eXBlLCAiaW1hZ2UvZ2lmIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlR0lGOwotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0jZW5kaWYKLX0KLQot
c3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRp
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKLXsKLSAg
ICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdp
dGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOwotICAgIGlmICghZGVzdGluYXRpb24pCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJv
cGVydGllczsKLSAgICBpZiAoQ0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAmJiAq
cXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIC8vIEFwcGx5IHRo
ZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgotICAg
ICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7Ci0gICAg
ICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNzaW9u
UXVhbGl0eTsKLSAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxpdHku
Z2V0KCk7Ci0gICAgICAgIGltYWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3Jl
YXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIH0KLQotICAgIC8vIFNldHRp
bmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3IgSlBFRyBp
bWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCi0gICAgLy8gaW4g
dGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsuCi0KLSAg
ICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UsIGlt
YWdlUHJvcGVydGllcy5nZXQoKSk7Ci0gICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFs
aXplKGRlc3RpbmF0aW9uLmdldCgpKTsKLX0KLQotc3RhdGljIFN0cmluZyBkYXRhVVJMKENGRGF0
YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIFZlY3RvcjxjaGFyPiBi
YXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRh
dGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBt
aW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1zdGF0aWMgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKLXsKLSAgICBWZWN0b3I8dWludDhf
dD4gZGF0YTsKLSAgICBkYXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0
YUdldExlbmd0aChjZkRhdGEpKTsKLSAgICByZXR1cm4gZGF0YTsKLX0KLQogU3RyaW5nIEltYWdl
QnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAog
ewogICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2Vy
dmVSZXNvbHV0aW9uKSkKQEAgLTU3OCw3MCArNTA1LDYgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4g
SW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWIKICAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENG
RGF0YVJlZj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgQVNTRVJUKE1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7
Ci0KLSAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsK
LSAgICBBU1NFUlQodXRpKTsKLQotICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9
IGtDR0ltYWdlQWxwaGFMYXN0OwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0
YSgpLT5kYXRhKCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOwotCi0g
ICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdz
IGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21w
b3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uu
d2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0
YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOwotICAgICAgICB1bnNpZ25l
ZCBjaGFyICpidWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBh
bHBoYSA9IGRhdGFbaSArIDNdOwotICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1Owot
ICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1
OwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8g
MjU1OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBd
ID0gZGF0YVtpICsgMF07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSAr
IDFdOwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFs
cGhhTm9uZVNraXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgICAgIGRh
dGEgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAgfQotCi0gICAgdmVyaWZ5SW1hZ2VC
dWZmZXJJc0JpZ0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0
KCkpOwotICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0
ZVdpdGhEYXRhKDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwg
MCkpOwotICAgIGlmICghZGF0YVByb3ZpZGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNv
dXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VS
ZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92
aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLQotICAg
IGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCks
IHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
cmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VE
YXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1
YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0g
ICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IElt
YWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBl
LCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAg
cmV0dXJuIHsgfTsKLX0KLQogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRh
KCkgY29uc3QKIHsKICAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuaAppbmRleCBjNTVhNTRhZDkxMTc5NTNjYTVlNjk2ZGEwN2U2ZTBkZjY4MTQzZDU4
Li4zZTIzNzRiYWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNH
LmgKQEAgLTI2LDYgKzI2LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGht
ZXRpYy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAppbmRleCA4OWQwNDM5YzIxMGRiNTAx
YWM5MzllYjExNDE0ODgxZWVlYzY1YjI0Li40ZjEzOGU0ZDczYWNlNzJjYzFhZDBkNmE4YTgwY2Nh
ODc0NmJkYzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiwxOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIK
IAorI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUg
PEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5j
bHVkZSAiVVRJVXRpbGl0aWVzLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00MSw0ICs1MiwxNDMgQEAgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNv
bnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCiAgICAgcmV0dXJuICoodWludDhf
dCopbGFzdEJ5dGU7CiB9CiAKK0NGU3RyaW5nUmVmIGpwZWdVVEkoKQoreworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdS
ZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKKyNlbmRpZgorICAgIHJldHVy
biBrVVRUeXBlSlBFRzsKK30KKworUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VC
dWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIC8vIEZJWE1FOiBX
aHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2VydmljZXMgdmVyc2lvbj8KKyNpZiBQTEFURk9S
TShNQUMpCisgICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJp
bmcoKTsKKyNlbHNlCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVh
ciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgorCisgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1
cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZy
b20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgorICAgIC8vIEZvciBub3csIG9u
bHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4
Nj4uCisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVi
bGljLnBuZyIpOworICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZT
VFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCisgICAgICAgIHJldHVybiBrVVRUeXBl
UE5HOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImlt
YWdlL2pwZWciKSkKKyAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKKyAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKKyAgICAgICAgcmV0
dXJuIGtVVFR5cGVHSUY7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
a1VUVHlwZVBORzsKKyNlbmRpZgorfQorCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1h
Z2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVE
YXRhUmVmIGRhdGEpCit7CisgICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdl
RGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKKyAgICBpZiAoIWRl
c3RpbmF0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7CisgICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJ
KCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewor
ICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFn
ZSBkZXN0aW5hdGlvbi4KKyAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENG
KENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUs
ICYqcXVhbGl0eSkpOworICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0
aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0g
Y29tcHJlc3Npb25RdWFsaXR5LmdldCgpOworICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9w
dENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlv
bmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAg
ICB9CisKKyAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3Ig
dG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNv
bWUgbWF0aAorICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qg
c2VlbSB0byB3b3JrLgorCisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRp
b24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOworICAgIHJldHVybiBDR0lt
YWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiB9CisKK3N0YXRpYyBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBBU1NF
UlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rpbmco
bWltZVR5cGUpKTsKKworICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUo
bWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRh
QWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7CisgICAgdW5zaWduZWQgY2hhciogZGF0YSA9
IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGll
ZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAg
ICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1h
bnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIHNpemVfdCBzaXplID0g
NCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOworICAgICAgICBpZiAoIXByZW11
bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7CisgICAg
ICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107CisgICAgICAgICAgICBpZiAoYWxwaGEgIT0g
MjU1KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxw
aGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICog
YWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJd
ICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1
ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFd
ID0gZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSAr
IDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZGF0YUFscGhhSW5mbyA9
IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4K
KyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICB9CisKKyAgICB2
ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNv
dXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNl
LmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uu
d2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdC
Q29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5m
bywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCkpOworCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCks
IHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitTdHJpbmcgZGF0YVVSTChD
RkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBWZWN0b3I8Y2hh
cj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwg
Q0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKKworICAgIHJldHVybiAiZGF0YToi
ICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30KKworU3RyaW5nIGRhdGFV
UkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJj
ZSwgbWltZVR5cGUsIHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgp
LCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGE7CisgICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRM
ZW5ndGgoY2ZEYXRhKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBk
YXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3Vy
Y2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5n
ZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCmluZGV4IDE2MTI4YTE5YWJk
MWZiODNhYjMxYTExNWM2ODk1MDQ5MWQ0MTk1NTIuLmJjODc3NTg4NzhkNTE2M2E5MzhhZjgyNDJj
N2E2ODAwZWE5YmQxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOCArMjUsMzEgQEAK
IAogI3ByYWdtYSBvbmNlCiAKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VEYXRhOworCiBXRUJDT1JFX0VY
UE9SVCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVm
ZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CiAKLX0KK0NGU3RyaW5nUmVmIGpwZWdVVEkoKTsKK1Jl
dGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJik7CisKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdSZWYgdXRpLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYpOworCitTdHJpbmcgZGF0
YVVSTChDRkRhdGFSZWYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworU3RyaW5nIGRhdGFVUkwo
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KTsKKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmKTsKK1Zl
Y3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IDQ5ZThjNWEyNmU3NzFjNDI0OTY3ODE5NTI3YTU2
MjczNTNkZjQ0OTYuLmRkMzVjYzY1YjEzN2Q4MjJjNzAxNTMyZGFiZDI0OTAwNGJmMmE5ZjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
aApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gbV9zb3VyY2VJbWFnZTsKICAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwog
ICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01v
ZGUgbV9yZW5kZXJpbmdNb2RlIHsgVW5hY2NlbGVyYXRlZCB9OworICAgIFJlbmRlcmluZ01vZGUg
bV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwogICAgIGZs
b2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYWI1YTBkNTBmOGNlMWFhZjY1MzVkZWVjOTQwYjg1ZGM1NTE3ZTRi
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQ
dHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQotewotICAgIC8vIExpc3Qgb2Yg
c3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBk
b2N1bWVudGF0aW9uLgotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhi
dWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8t
YnVmZmVydgotCi0gICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJp
bWFnZSIpOwotICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUg
IT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsKLSAgICBpZiAodHlw
ZSA9PSAianBlZyIpIHsKLSAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hh
bm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNv
ZGUgYSBQb3J0ZXItRHVmZgotICAgICAgICAvLyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sg
Zm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCi0gICAgICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7Ci0gICAgICAgIGlmIChjYWlyb19zdXJmYWNl
X2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgewotICAgICAg
ICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zv
cl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCi0gICAgICAgICAg
ICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZSk7Ci0gICAgICAgICAg
ICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9f
Rk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAg
IFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdl
dCgpKSk7Ci0gICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1
cmZhY2UsIDAsIDApOwotICAgICAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgICAg
ICB9Ci0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1Zihu
ZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1Jl
ZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7Ci0gICAgaWYgKCFwaXhidWYpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsK
LSAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYg
KnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5n
OjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41KSk7Ci0gICAg
ICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0
cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksICJx
dWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxMKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIu
b3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIo
KSwgTlVMTCk7Ci0KLSAgICByZXR1cm4gIWVycm9yOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gaW1h
Z2VEYXRhID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoaW1hZ2VEYXRhLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJh
c2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGltYWdlRGF0YS5kYXRhKCksIGltYWdlRGF0YS5z
aXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7
YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6
OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPGdjaGFy
PiBidWZmZXI7Ci0gICAgZ3NpemUgYnVmZmVyU2l6ZTsKLSAgICBpZiAoIWVuY29kZUltYWdlKG1f
ZGF0YS5tX3N1cmZhY2UuZ2V0KCksIG1pbWVUeXBlLCBxdWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNp
emUpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0
YTsKLSAgICBpbWFnZURhdGEuYXBwZW5kKGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7Ci0gICAg
cmV0dXJuIGltYWdlRGF0YTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCmluZGV4IDdkMmNlZmQ2
MjYxZGVlMmEzOWE4OWQxMDE3MDJlYjUwMjUyZjRmNWUuLmYwMzkxMzgwNjBkMzQ0MzRlNmNkZGJm
OTZlYTY0YzMwMWE2MzU1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAg
dm9pZCBCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyJiwgR3JhcGhp
Y3NMYXllciogc291cmNlTGF5ZXIsIGMKIHsKICAgICAvLyBNYWtpbmcgYW4gdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyIGhlcmUgaXMgT0sgYmVjYXVzZSB0aGlzIGNvZGUKICAg
ICAvLyBpc24ndCB1c2VkIGJ5IGFueSBwbGF0Zm9ybXMgdGhhdCByZXNwZWN0IHRoZSBhY2NlbGVy
YXRlZCBiaXQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUodGFyZ2V0UmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KTsKIAogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJELmNwcAppbmRleCA1ZTljZjA1NzhhNmI4MjlmMGE2YzBhMDFiMDk4NmU2MDNkNjA0Mjhj
Li5iOGUzYjBiYTE5YjJjYWRmZDZiZjc0OTZiYzdiODJjNTNlOTE4MDlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkQuY3BwCkBAIC05MSw3ICs5MSw3IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjCiAg
ICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKICAgICBtX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKIAotICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZyA9IHJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsK
ICAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKICAg
ICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IGNhMTFiYjhiYTBiMTkxMGM2Mjc5
NjdkNGQyNjBiMDRjNjg0ODY3MzEuLjVhYzlkNjYwNmM0MjIxMjQ4YmM0MWRlOTM4OWNlNWM4N2U0
YTQxN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC00NTgsNyArNDU4LDcgQEAgSW1hZ2VCdWZmZXIq
IE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKG1f
aW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogCi0gICAg
bV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwgVW5hY2Nl
bGVyYXRlZCk7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2FwdHVy
ZVNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFtX2ltYWdl
QnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDViOTFiMjY4NmFlMjYxZWI1M2MwNjg5YmVlYzYyZjU1
ZTNmYjQ1OC4uOGY1MGU1NzU3MWQ3YjM4NTAwZWVkN2JjZGE2YjNhNjQyYWJmNzk1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC02OTA1LDcgKzY5MDUsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkKICAgICB9
CiAgICAgCiAgICAgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7Ci0gICAgbV9maWx0ZXJzLT5idWlsZEZp
bHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5z
ZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5h
Y2NlbGVyYXRlZCk7CisgICAgbV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdl
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVk
RmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmZpbHRlck5lZWRz
UmVwYWludCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCmluZGV4
IDkxNDIwMjlhMmQ0NDY0ZGY1Y2I3YjNhNDQxOTNiZTI4NjNjMWVkMmEuLjg1MWE4NjY3ODliNDgz
NTQyMmM1N2E0MWRkYTc1YTBiY2FkN2Q2NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGUuY3BwCkBAIC0xODEsNyArMTgxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBl
PiBTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQs
IGMKICAgICBJbnRSZWN0IG1hcmdpblJlY3QgPSBzbmFwcGVkSW50UmVjdChtYXJnaW5SKTsKICAg
ICBhdXRvIGludGVydmFscyA9IG1ha2VVbmlxdWU8UmFzdGVyU2hhcGVJbnRlcnZhbHM+KG1hcmdp
blJlY3QuaGVpZ2h0KCksIC1tYXJnaW5SZWN0LnkoKSk7CiAgICAgLy8gRklYTUUgKDE0OTQyMCk6
IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQu
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
aW1hZ2VSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBp
ZiAoaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDA4ZTQ5
MjgyYWQ5M2JjYWNkMjk3NzViODQ2ZjA1OWQ1YTJjYTcxM2UuLjFkNzdiNjNjNmZlMjgzMTJhZTEx
ZWQ4MjViNTIzYWFjZTcxN2VjNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTE0Miw3ICsxNDIs
NyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4
dChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgYwogCiAgICAgaWYgKHNob3VsZENyZWF0ZUNsaXBw
ZXJNYXNrSW1hZ2UgJiYgIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhN
RSAoMTQ5NDY5KTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFs
bHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0
ZWQgY2xpcHBpbmcsIHRob3VnaC4KLSAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5z
Zm9ybSwgQ29sb3JTcGFjZTo6U1JHQiwgVW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOworICAgICAg
ICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAmY29udGV4dCk7CiAgICAgICAgIGlmICghY2xpcHBl
ck1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApp
bmRleCA3NWI1OWI2M2MzZTQ5NjBiZDRlM2JkYmQ4NzQ5MmE5MzJmNDMxNjFiLi5kZGRiYTQzMmQz
NzkzN2ViMDQzYTZjYzE3YmY5MzJlNmI3ODk1NDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMTkx
LDcgKzE5MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2Uo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgZWZmZWN0aXZlVHJhbnNm
b3JtLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICBlZmZlY3RpdmVU
cmFuc2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0p
OwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3Mo
KS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0
ZWQ7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3Mo
KS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAgICAgYXV0byBzb3VyY2VHcmFwaGlj
ID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJh
d2luZ1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpMaW5lYXJSR0IsIHJl
bmRlcmluZ01vZGUsIGNvbnRleHQpOwogICAgIGlmICghc291cmNlR3JhcGhpYykgewogICAgICAg
ICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlTWFza2VyLmNwcAppbmRleCAxNzg3ZTE4YzJkY2VmNWJkZjk5MjQ3NGNmYzAyMmI1MTY2YWQ1
ODQ4Li4xMjBjNTdiNTY5Nzg3MjIwNDY1YmM2YWVjMGI1ODA0YzQ1NWNkODI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjph
cHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAg
ICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlv
bigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFy
UkdCIDogQ29sb3JTcGFjZTo6U1JHQjsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRoaXMg
aW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQu
IE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgYWxwaGEgbWFza2luZywgdGhvdWdo
LgotICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3Bh
Y2UsIFVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOworICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1h
Z2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwg
YWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQsIGNvbnRleHQpOwogICAgICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAKaW5kZXggYjgyMTQxMWFkZTc3NTA4NTYxNjg4NTZlZDIyYjYyZWE2YjVjZDNkOS4uOTc4
NjdhYWQzYzI3YjViNTM4ZDNhNzlmYjQ5NWRkZDRmMGY0M2Q5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0yMTgsNyArMjE4LDcgQEAgTmF0aXZlSW1hZ2VQ
dHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCopCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gQ2Fpcm8gZG9lcyBub3Qg
dXNlIHRoZSBhY2NlbGVyYXRlZCBkcmF3aW5nIGZsYWcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1
bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIuCi0gICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2Nl
bGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAg
ICAgaWYgKCFidWZmZXIpIC8vIGZhaWxlZCB0byBhbGxvY2F0ZSBpbWFnZQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQppbmRleCBlZjAzNTAzNDJi
YjgyMjQ2Y2QxOWYzNTRkOWJjYzAyOTFmMjkwNDNkLi4yNDA3ZjEwNjliNTdmYmY2NTk0ODg3NTQx
MjhjZThmYWIxZWNiYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQpAQCAtMjAyLDcg
KzIwMiw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBXZWJDb250ZXh0TWVudUNsaWVudDo6aW1hZ2VG
b3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtCiAgICAgICAgIHJldHVybiBuaWw7CiAK
ICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgc25hcHNob3QsIGFuZCB3aWxsIGJlIHBhaW50
ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9uIGluIGxpbmUgd2l0aCBGcmFtZVNuYXBzaG90
dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNpemUo
KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388298</attachid>
            <date>2020-01-21 08:10:33 -0800</date>
            <delta_ts>2020-01-21 08:37:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206519-20200121081032.patch</filename>
            <type>text/plain</type>
            <size>79868</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDE0ZjAwY2EzZGFkNjI1
MDkwYjYzMDVkNGE3ZGFjMzhjMWNmMjllNS4uZWNmMmJiYWQ0OGU5ZTJhZThiYmM1NGE1MWQ3YmM2
OWU3MGI2NjM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNSBAQAorMjAyMC0wMS0yMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUg
SW1hZ2VCdWZmZXIgdXRpbGl0aWVzIGZ1bmN0aW9uIHRvIHNlcGFyYXRlIGZpbGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY1MTkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVzZSB1dGlsaXRpZXMg
ZnVuY3Rpb24gYXJlIG1lcmVseSByZWxhdGVkIHRvIHRoZSBJbWFnZURhdGEuCisKKyAgICAgICAg
KiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0OgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlRnVuY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmpwZWdVVEkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbUlt
YWdlQnVmZmVyTUlNRVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNm
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6anBlZ1VUSSk6CisgICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwOiBSZW1vdmVkLgorCisy
MDIwLTAxLTIwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgTWFrZSBSZW5kZXJpbmdNb2RlIGFuZCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGVu
dW0gY2xhc3NlcyBhbmQgbW92ZSB0aGVtIHRvIHNlcGFyYXRlIGhlYWRlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjUxNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmRlcmluZ01vZGUgYW5kIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gbmVlZCB0byBiZSBlbmNvZGVkIGFuZCBkZWNvZGVkCisgICAg
ICAgIHdoZW4gdGhleSBhcmUgc2VudCBmcm9tIHRoZSBXZWJQcm9jZXNzIHRvIHRoZSBHUFVQcm9j
ZXNzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5j
LWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1U
eXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZWRlZCk6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVh
ZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICog
aHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWlu
dENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAg
ICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3Jl
ZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZz
Y3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0
ZVBhdHRlcm4pOgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6
OmlzQWNjZWxlcmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAqIGh0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVSZXNwZWN0aW5nT3JpZW50
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdNb2RlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRjaEJ1ZmZlcjo6Z2V0U2NyYXRjaEJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRU
aWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0
aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRv
d1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hh
ZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRh
dGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZlciBj
b25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNy
ZWF0ZVJhc3RlclNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUpOgorCiAyMDIwLTAxLTIwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3
YUBhcHBsZS5jb20+CiAKICAgICAgICAgRVhJRiBvcmllbnRhdGlvbiBpcyBpZ25vcmVkIGZvciBz
b21lIENTUyBpbWFnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA2ZmFiMjdjNWYw
ZDMxOTFiNGFiZTJmYzdmZWJkMjI3NzQxMjg2ODJhLi4yOWUyNjNjYWZmODJmOGJkY2Q5MTk3NTA0
MmI1MDA3MTAzZWIyM2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMjAtMDEtMjAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxl
LmNvbT4KKworICAgICAgICBNYWtlIFJlbmRlcmluZ01vZGUgYW5kIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZW51bSBjbGFzc2VzIGFuZCBtb3ZlIHRoZW0gdG8gc2VwYXJhdGUgaGVhZGVycworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NTE2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51Q2xp
ZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0pOgorCiAyMDIwLTAx
LTIwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IG1p
c3NpbmcgaGVhZGVyIGd1YXJkcyBhbmQgY2xlYW4gdXAgZW1wdHkgZmlsZXMgaW4gV2ViQ29yZSwg
V2ViS2l0TGVnYWN5LCBXZWJLaXQsIFRvb2xzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiYjg3ODA2
MTgzNzQxZjk2MjY4Mzg2OGVmYzY4OTEwMmJjNGY0YTJkLi40NTUyYzA1YTczOWY3NTg3OGI2N2Zh
NGU2ODgwZTZjNzQ2NWU2MTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMzEsNiArMTAzMSw3
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9n
YW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0
Zm9ybUdhbWVwYWQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCkBAIC0xMTI4LDYgKzExMjksNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFu
Z2VzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1JlbW90ZVZpZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdN
b2RlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXpl
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0Ns
aXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5k
ZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2ZiNmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2
ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENsaXBi
b2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5p
dGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6
Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcEltYWdlLT5zZXREYXRhKFdURk1vdmUoYnVmZmVyVG9T
YW5pdGl6ZSksIHRydWUpOwotICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIp
IHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsgbnVsbFN0cmluZygpIH07CiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IDcyMDVlMjBkM2FiNGUzOWZiZWU0YmI5NDMx
YWVjYjRiY2NjMjhiZDIuLjk3ZjMzNmU3YzVjOWU4ZDBkYTI1ZTJiZDRlNjFhZDcxYWU1MmRmMmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC04NCw3ICs4NCw2IEBAIHBsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Db2xvckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9EaXNwbGF5UmVmcmVzaE1v
bml0b3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2d0
ay9JbWFnZUJ1ZmZlckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAK
IAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZDViM2NlYWVkZWNkNjMwNjgzYThkODBlOTgyMmIzZGY0MWQ3NjIwZS4uNmVkNGFjMjNhNmQ5
YWM5NDRlYzE4NjRiYzY0OTdiMjc1Zjg1YTQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE0MSw2ICsyMTQxLDggQEAKIAkJ
NzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1
RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVF
NTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0Yy
NUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3Mjk5QkM2NzIzRDZBNTMyMDBD
QzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYy
M0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyog
VGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRG
YWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1Nzkz
RTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkw
RDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNN
ZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTk2NDAsNiArOTY0Miw4IEBACiAJCTcyN0FGRUQxMUEy
RUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdB
RkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FG
RUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5OUJDNjQyM0Q2
ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNG
MjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTAxMiw2ICsyNTAxNiw3IEBACiAJCQkJRkJDMjIwREQxMjM3RkJFQjAw
QkNGNzg4IC8qIG9wZW5nbCAqLywKIAkJCQkzNzIxNDkzMzE4RjBCNkQ2MDAxNTZFREMgLyogb3Bl
bnR5cGUgKi8sCiAJCQkJNDlFOTExQjIwRUY4NkQyNzAwOUQwQ0FGIC8qIHRyYW5zZm9ybXMgKi8s
CisJCQkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24u
aCAqLywKIAkJCQk0OTA3MDdFNDEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJLaXRCcmlkZ2Uu
Y3BwICovLAogCQkJCTQ5MDcwN0U1MTIxOUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRn
ZS5oICovLAogCQkJCUJFRjI5RUU5MTcxNUREMDkwMEM0QjRDOSAvKiBBdWRpb1RyYWNrUHJpdmF0
ZS5oICovLApAQCAtMjUxODgsNiArMjUxOTMsNyBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4
QUFGMyAvKiBSZWdpb24uaCAqLywKIAkJCQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4RjIgLyogUmVt
b3RlVmlkZW9TYW1wbGUuY3BwICovLAogCQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVBMDhGMiAvKiBS
ZW1vdGVWaWRlb1NhbXBsZS5oICovLAorCQkJCTcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBS
ZW5kZXJpbmdNb2RlLmggKi8sCiAJCQkJQTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5k
ZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJl
Y3QuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAg
Ki8sCkBAIC0yOTAzOSw2ICsyOTA0NSw3IEBACiAJCQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3
IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTEx
NUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgz
QkI1Qzg4MUQ1RDZGNDUwMDVBNzFGNCAvKiBBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyOTlCQzY3MjNENkE1MzIwMENDNjg4MyAvKiBBbHBoYVByZW11bHRp
cGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQg
LyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTA4QzNEMjE1
MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0U3QjJEQjMxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTM2OCw2ICszMTM3NSw3IEBACiAJCQkJMTE5
OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8qIExheW91dENvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1QThEMCAvKiBMYXlvdXREZXNjZW5kYW50
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MTgwMjU1MjNENDU0OUIwMEZGQjA3MSAv
KiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QUJBQkRE
MjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThEMCAvKiBMYXlvdXRJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1MzAwQzRDMDdFIC8qIExheW91dE1p
bGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjAxMiw2ICszMjAyMCw3IEBACiAJCQkJQkNF
QTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVz
b3VyY2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Mjk5QkM2ODIzRDZBNTNFMDBD
QzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2QzdDNEIyMjEy
Mzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1MUNEIC8qIFJlbmRlckl0ZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMyMDYyLDcgKzMyMDcxLDYgQEAKIAkJCQk0NThGRTQwQTE1ODlE
RjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBQjI0N0E2RDBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQlFNDE4MDI1NTIzRDQ1NDlCMDBGRkIwNzEgLyogTGF5b3V0SW50ZWdy
YXRpb25Cb3hUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTk1NUE4ODE2MEQxOTkyMDA4NTgw
MjUgLyogUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEM4
RkFFMEREQ0QzMUIwMEI1OTJGNCAvKiBSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM1RUI2NjgwRTgxQ0I3MTAwQjI1OTY1IC8qIFJlbmRlclN0eWxlQ29uc3RhbnRzLmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCmluZGV4IDY0ZGZmMmQ5ODRlZjcyZGQ5ZWJhNTEwMjQwNjEwZmMxOGUy
MWQ5NDcuLmVkYTE3MTdkZGZmZDdlYjBiYzNmODcwMmI4MjkzZTg5OWJkNWNlN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cApAQCAtMjc4NSw3ICsyNzg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFVuYWNjZWxlcmF0
ZWQsIHJlc29sdXRpb25TY2FsZSk7CisgICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShGbG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKICAgICAgICAgaWYgKCFidWZm
ZXIpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFi
NDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZh
ZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zp
bHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1h
Z2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAK
ICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAo
MTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2Nl
bGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVu
YWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAg
ICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1
c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2
ZGRmZjUwMmU1Li4xNDc3NjJmNTUyNDJlNjMxNTQ5ZGRiMGEwNjc0YTYyMWZlOGNmM2Q1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBA
QCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAo
IXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1f
Y29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQs
IDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEs
IENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCmluZGV4IDIzZDliMzRlODQ4ZjZkMDFkMzRhOWRhZmZiYTMwNTBmYzdhNzEzMTYu
LmY1ZTc2NTAwNjlhNmQ4NjkwZDk0M2RlZTI2YmIzNjFmOTE4OWNlMzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC04Myw2ICs4MywxMCBAQAogI2luY2x1
ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogI2VuZGlmCiAKKyNpZiBVU0UoQ0cpCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEhUTUxDYW52YXNFbGVtZW50
KTsKQEAgLTg4NSw3ICs4ODksNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxl
cmF0ZShzaXplKCkpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOworICAgIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIAogICAg
IGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXco
KS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6IG51
bGxwdHI7CiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJl
bmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggNWY0OWY3MzlhMWY1YzNiZTBlZTE3MWYzNGY5NjNl
MDI2NmJjNDQ5Mi4uMmI4MTk4OWU4ZmQ2MmVmZTM0NTM4N2E5MDJmZTY5MmIzMDk5NTRmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTYxLDkgKzYxLDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwKTsKIAog
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2Rl
ID0gQWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2Rl
ID0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJlbmRlcmluZ01v
ZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5n
TW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
ICNlbmRpZgogCiBSZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpjcmVhdGUoSW50U2l6ZSBz
aXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4IGY3NDQ4NTEy
MDAxNTc1YjRhZjRiYmEyNGVhYTU3YWJlNmEwNjQzYzkuLjc1NWYxMWVmODllMTE4MWJlMDZkNWVh
MmYwMDc4Njk2ZTM5YmU0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5j
cHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBP
ZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpCiAgICAgICAgICAgICByZXR1
cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAKICAgICAgICAgaWYgKCFt
X2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFw
OjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCksIHRy
dWUgfSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoeyBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCksIHRy
dWUgfSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRha2VJbWFnZUJ1ZmZlcigpOwogICAg
ICAgICBpZiAoIWJ1ZmZlcikKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIE9mZnNjcmVlbkNhbnZh
czo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSk7CisgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0K
IAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFn
ZUJ1ZmZlcigpIGNvbnN0CkBAIC0yNTcsNyArMjU3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYg
KHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVk
KSk7CisgICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSk7CiB9CiAKIHZvaWQgT2Zmc2NyZWVuQ2Fu
dmFzOjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDg5ZDhmNDI0M2IyYjkyZGZi
Y2IzMmFhMjIxYjc1M2M5M2YxZjU5NDEuLmQ0OTQ3MTIwODMyMzEwYzdjMGQ3YmVmMWM4NzlkYTNm
ZmIyOTNmMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0xODA2LDcgKzE4MDYsNyBAQCB0
ZW1wbGF0ZTxjbGFzcyBUPiBJbnRSZWN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNh
bGN1bGF0ZUNvbXBvc2l0aW5nQnVmZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKGNvbnN0
IEludFJlY3QmIGJ1ZmZlclJlY3QpCiB7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUo
YnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2Nl
bGVyYXRlZCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXpl
KCksIGlzQWNjZWxlcmF0ZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6Y29tcG9zaXRlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEludFJl
Y3QmIGJ1ZmZlclJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpAQCAtMTk5MCw3ICsxOTkwLDcg
QEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQ
YXR0ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1v
dmUobmF0aXZlSW1hZ2UpKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pIH07CiAjZW5k
aWYKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlk
ZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmlu
Z01vZGUoKSA6IEFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKHZpZGVvRWxlbWVudCksIGRyYXdpbmdDb250ZXh0KCkgPyBkcmF3aW5n
Q29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQuY3BwCmluZGV4IDE0ZWEzN2Q4ZDdlYWZiMDFiNWM0Y2UxOWViZTc2YzUxOGNmY2Q0
YTguLmI1MWI0ZGJmMTNlZTUwNmViOTQ5OGM0M2VmNDVjOTQ0ZGQ3M2UwYTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0LmNwcApAQCAtMzYsOSArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KTsKIAogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0g
QWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJlbmRlcmluZ01vZGUg
YnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9k
ZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNl
bmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBJbWFn
ZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCkBAIC02OSw3ICs2OSw3
IEBAIEhUTUxDYW52YXNFbGVtZW50KiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNhbnZh
cygpIGNvbnN0CiAKIGJvb2wgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJh
dGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVy
YXRlZDsKKyAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZDsKIH0KIAogdm9pZCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91
dHB1dEJpdG1hcChSZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWFwKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAppbmRleCA2N2NhNTNjNDdlZWEwMDhiZWEzZjYxZGY5NmU3Mzg5Y2FlY2E2ZGVhLi40Mjg4MjE2
NDQ5OGRmYzE4NTY5NDdiMTZjM2EyOWE4NjM3ZmQ5NTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAt
NjM4Niw3ICs2Mzg2LDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAv
LyBGSVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1w
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRl
eCAzNGJhMzcyZDQ5MTQzY2ZlMjkzYTdjMmE4OTQ1ZTQwZjM1MWIxMDUxLi5mNmJiZmFkZDM3N2Ji
NTFiMDYwYWEwYjMzZjBiNjgwZjExMmM5OTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ3LDcgKzE0NDcsNyBA
QCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNy
ZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50
UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIp
OiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVk
LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpj
cmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0
b3IpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNo
b3R0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCmlu
ZGV4IDBhNDRjMmZhMWEwOTQ5N2NmZGY1NTg4ODMyZmZkZmYxMDIzMzMwZTEuLmUyNGQ5MmU2ZjNl
NjFkMzhhOWIyNDQ4NWY0ZDEzZGU1MGU1MzNhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVTbmFwc2hvdHRpbmcuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBzbmFwc2hvdEZyYW1lUmVjdFdpdGhDbGlwKEZyYW1lJiBmcmFtZSwgY29uc3Qg
SW50UmUKICAgICBpZiAob3B0aW9ucyAmIFNuYXBzaG90T3B0aW9uc1BhaW50V2l0aEludGVncmFs
U2NhbGVGYWN0b3IpCiAgICAgICAgIHNjYWxlRmFjdG9yID0gY2VpbGYoc2NhbGVGYWN0b3IpOwog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoaW1hZ2VSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgc2NhbGVG
YWN0b3IpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBi
dWZmZXItPmNvbnRleHQoKS50cmFuc2xhdGUoLWltYWdlUmVjdC54KCksIC1pbWFnZVJlY3QueSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDQyMWRmYmQ5
NTc1NGM0NjI3NTdiNzhkYmZhNDEwMjU0MzJhZjBiN2QuLmY5MGQyNDZlYzU5YjRmOGE4ZTEzOGI3
MjI0MGNmMjAyNTgzMTkyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nv
dXJjZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJv
LnR4dApAQCAtMzEsNiArMzEsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fp
cm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBo
YVByZW11bHRpcGxpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9B
bHBoYVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxY2FlZjg1NDFkZWUwNjJiZmUw
NTQxNmNkYTJmMmE3Zjc5MjZlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2VudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4X3QgeworICAgIFByZW11
bHRpcGxpZWQsCisgICAgVW5wcmVtdWx0aXBsaWVkCit9OworCitXRUJDT1JFX0VYUE9SVCBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCBjNzFkOThmOGE1ZjY2NzQ2
ODYzMDk0NGFiNzFkYmFmYzkxZGNiNjRlLi40ODIyNDRhNGYyYmRjZWRlN2M4NzRjZDFiNTBlYTkx
NGIxNDk5YTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1h
Z2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lUmVzcGVjdGluZ09yaWVudGF0aW9uKGNvbnMK
ICAgICAgICAgcmV0dXJuIGltYWdlOwogCiAgICAgRmxvYXRSZWN0IHJlY3QgPSB7IEZsb2F0UG9p
bnQoKSwgc2l6ZSgpIH07Ci0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJl
Y3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gaW1hZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4NmRkNGIy
YWY5MWY0NTY1NTM1YTcwMjkzOTIzYWYyYmFhZGJhMi4uZTVjMzFjMWU2NGVmNTRiOTYxMTMxZGJi
MjVjNGNlNGIxODllMmQzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbWFn
ZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKICNpbmNs
dWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9PcHRpb25TZXQuaD4KQEAgLTM1MCw3ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKTsKICNlbmRpZgogICAgIGJv
b2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxl
cmF0ZWQgOiBVbmFjY2VsZXJhdGVkOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3Jl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwCmluZGV4IDQ1OGFlNzJmMmFlMDI1NjI0NzY4ZTg3OWRiZDQ5Njk2NGI0OTFiMTguLmRj
NTRhOTk4NWU0ZDQyMDY3ZGE2YzIzODE4MzVmYmQzNzM2ODc2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgog
CisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4IGNlZWExZGE0MGViMzJmZjc4YTFlNzVlMTdiZmUwMDky
MDFiNzZmMTIuLjU3ZWViZGM1MDAzYzM3MGI4YjQ3NDFlYzJiYTU0MjQ3Yzk1YzkzZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAg
LTEyMiwxNyArMTIyLDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9
OwogCi1lbnVtIFJlbmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0gICAgVW5hY2Nl
bGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFsbG9jYXRpb24g
cmF0aGVyIHRoYW4gcGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUuCi0gICAg
QWNjZWxlcmF0ZWQKLX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiB7Ci0g
ICAgUHJlbXVsdGlwbGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0cmluZyBjb21w
b3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJs
ZW5kTW9kZSk7CiBTdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwogYm9v
bCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKQEAg
LTE0Myw3ICsxMzIsNiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlTwogV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsK
IFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mLCBMaW5lQ2FwKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggY2I3NDM4NDQ4MDJhYjQyYjU1MzUxMTdj
YWI1Y2I3NTY0NGQ1YjNmNC4uMjZkZjdjZGQ5ZmI2YzEzZGQzMDBlMWQzOTNlYzQ0MjUyNDdkMjBh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CkBAIC0yOCw2ICsyOCw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJD
b2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXNHTC5oIgpAQCAtMzUsNiArMzYsNyBAQAogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdP
cHRpb25zLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KQEAgLTE4OCwxMCArMTkwLDQgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotI2lm
IFVTRShDRykKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci1WZWN0b3I8dWludDhfdD4gZGF0
YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpOwotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY5ZDhhZTgxYzg0OGIxMGU2ZjJkMDdhNzg5YjE2YzMzM2RjMjNjYjQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgK
QEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3Mg
UmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3QgeworICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxl
cmF0ZWQsCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDQwNDFiM2Y4MTA3Njc4YzU2
YWNkYjBjNTMzYTA5ODZmN2U2NDU1OTYuLjY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0MWY5
MzM2NzRkMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJTY3JhdGNo
QnVmZmVyKCk7CiAKICAgICAgICAgLy8gU2hhZG93Qmx1ciBpcyBub3QgdXNlZCB3aXRoIGFjY2Vs
ZXJhdGVkIGRyYXdpbmcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5h
Y2NlbGVyYXRlZCBidWZmZXIuCi0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHJvdW5kZWRTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICAgICAgbV9pbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIDEpOwogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKICAg
ICB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRv
dyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiB2b2lk
IFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IExheWVy
SW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZlckNh
bGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSks
IFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXQKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYgZnVsbFJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBjb25zdCBMYXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJ
bWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsK
LSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6
ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAg
ICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShs
YXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkLCAxKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg1
LDcgKzY4NSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zCiAgICAgYXV0byogbGF5ZXJJbWFn
ZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVT
aXplKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxheWVySW1hZ2VQcm9wZXJ0aWVzKTsKLSAg
ICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6
ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQs
IDEpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2Vu
ZGlmCiAKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRv
d1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbgogI2lmIFVT
RShDRykKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCku
Z2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKLSAgICBhdXRvIGxheWVySW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRl
ZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0
ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEpOwogICAgIGF1dG8q
IGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAgLTkxMiw3
ICs5MTIsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dMYXllcihjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiAgICAgYWRqdXN0Qmx1clJhZGl1
cyh0cmFuc2Zvcm0pOwogCi0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
ZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCAxZjEzMzNhNzQyNjlmNTI0NzA1
ZjU0M2YwZGRiODM0Y2M3Y2JkZjBkLi45MWMwYTFhOWUxNDg1YTJhMTRlNjFjNjhmMDY4ZmUzMTk2
MDFhODY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1
ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKQEAgLTc2LDcgKzc3LDYgQEAKICNlbmRp
ZgogI2VuZGlmCiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbWFnZUJ1ZmZlckRhdGE6Oklt
YWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCkBAIC0xMDMsNyArMTAzLDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRh
dGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2QKIAogSW1h
Z2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKIHsKLSAgICBpZiAobV9yZW5kZXJpbmdN
b2RlICE9IEFjY2VsZXJhdGVkKQorICAgIGlmIChtX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQpCiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCkBAIC0yOTIsMTQgKzI5MiwxNCBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhYwogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkKSB7CisgICAg
aWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQp
IHsKICAgICAgICAgbV9kYXRhLmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7CiAgICAgICAgIGlmICgh
bV9kYXRhLm1fc3VyZmFjZSB8fCBjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNl
LmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIG1fZGF0YS5tX3Jl
bmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxs
IGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCisgICAgICAgICAgICBtX2RhdGEubV9yZW5k
ZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxsb2NhdGlv
biBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgogICAgIH0KLSAgICBp
ZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKQorICAgIGlmIChtX2Rh
dGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpCiAjZWxz
ZQotICAgIEFTU0VSVChtX2RhdGEubV9yZW5kZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKTsKKyAg
ICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCk7CiAjZW5kaWYKICAgICB7CiAgICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5
X3Qgc19zdXJmYWNlRGF0YUtleTsKQEAgLTY1NCwyMSArNjU0LDYgQEAgdm9pZCBJbWFnZUJ1ZmZl
cjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJl
bXVsdGlwbGkKICAgICB9CiB9CiAKLSNpZiAhUExBVEZPUk0oR1RLKQotc3RhdGljIGNhaXJvX3N0
YXR1c190IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghcmVpbnRlcnByZXRfY2FzdDxW
ZWN0b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgbGVuZ3RoKSkKLSAgICAg
ICAgcmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKLSAgICByZXR1cm4gQ0FJUk9fU1RB
VFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2Vf
dCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1aW50OF90Piogb3V0cHV0
KQotewotICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBlID09ICJpbWFnZS9wbmci
KTsgLy8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgotCi0gICAgcmV0dXJu
IGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwgd3JpdGVGdW5jdGlvbiwg
b3V0cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQogU3RyaW5nIEltYWdlQnVmZmVy
Ojp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGVu
Y29kZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CkBAIC02ODEsMjEgKzY2Niwx
MyBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksCiAgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlw
ZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwogfQogCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VC
dWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KSBj
b25zdAorVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAogewogICAgIEFTU0VSVChN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1l
VHlwZSkpOwotCiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQo
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90
PiBlbmNvZGVkSW1hZ2U7Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1p
bWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVy
biBlbmNvZGVkSW1hZ2U7CisgICAgcmV0dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5
KTsKIH0KIAotI2VuZGlmCi0KICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiAh
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBhaW50VG9U
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQg
b3BhY2l0eSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWUxOGFmZjYwOGY1MmZkNTMxMDg3ZWQzMTQ4MjgzNWE4Y2M2ZmEzMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNo
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorCisj
aWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiR1JlZlB0
ckd0ay5oIgorI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyNpZiAhUExBVEZPUk0oR1RLKQorc3RhdGljIGNhaXJvX3N0YXR1c190
IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50
OF90Pio+KG91dHB1dCktPnRyeUFwcGVuZChkYXRhLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4g
Q0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9SOworICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VT
UzsKK30KKworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCit7CisgICAg
QVNTRVJUX1VOVVNFRChtaW1lVHlwZSwgbWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5
IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCisKKyAgICByZXR1cm4gY2Fpcm9fc3Vy
ZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09
IENBSVJPX1NUQVRVU19TVUNDRVNTOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19z
dXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
KQoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2U7CisgICAgaWYgKCFpbWFnZSB8
fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICByZXR1cm4gZW5jb2RlZEltYWdlOworfQorI2Vsc2UKK3N0YXRpYyBi
b29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBHVW5pcXVlT3V0UHRyPGdjaGFyPiYg
YnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKK3sKKyAgICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBp
bWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQaXhidWYgZG9jdW1lbnRhdGlv
bi4KKyAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nZGstcGl4YnVmL3N0YWJsZS9n
ZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1ZmZlcnYKKwor
ICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKTsKKyAg
ICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAmJiB0eXBlICE9ICJ0aWZmIiAm
JiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7CisgICAgaWYgKHR5cGUgPT0gImpwZWci
KSB7CisgICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFscGhhIGNoYW5uZWwuIFRoZSA8
Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11c3QgZW5jb2RlIGEgUG9ydGVy
LUR1ZmYKKyAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVyIGJsYWNrIGZvciBpbWFnZSB0
eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgorICAgICAgICBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiBuZXdTdXJmYWNlOworICAgICAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShz
dXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKKyAgICAgICAgICAgIG5ld1N1
cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgIENBSVJP
X0ZPUk1BVF9SR0IyNCwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93
aWR0aChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
c3RyaWRlKHN1cmZhY2UpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbnRTaXpl
IHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UpOworICAgICAgICAgICAgbmV3U3VyZmFj
ZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9SR0Iy
NCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5nZXQoKSkpOworICAg
ICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNlLCAwLCAw
KTsKKyAgICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICAgICAgfQorICAgICAg
ICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYobmV3U3VyZmFjZS5n
ZXQoKSkpOworICAgIH0gZWxzZQorICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJm
YWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOworICAgIGlmICghcGl4YnVmKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgaWYgKHR5
cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9
IDEuMCkgeworICAgICAgICBTdHJpbmcgcXVhbGl0eVN0cmluZyA9IFN0cmluZzo6bnVtYmVyKHN0
YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCArIDAuNSkpOworICAgICAgICBnZGtfcGl4
YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZl
clNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCAicXVhbGl0eSIsIHF1
YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisgICAgfSBlbHNlCisgICAgICAgIGdk
a19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAm
YnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksIE5VTEwpOwor
CisgICAgcmV0dXJuICFlcnJvcjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3Vy
ZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5KQoreworICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGJ1ZmZlcjsKKyAgICBnc2l6ZSBi
dWZmZXJTaXplOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5
LCBidWZmZXIsIGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKGJ1ZmZlci5nZXQoKSwg
YnVmZmVyU2l6ZSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDYWlyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMDg4ZDBlYTRkM2VlZjQ1YmM3NzE3ZjVjODI1ZWEzZDUw
ZTdkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8
emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxl
IChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJP
KQorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCosIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggMzU2ZjE5NjRkMDk1NTJi
ZDFhMjdmYzBkMjI4MDlkOGEzZGE2Yjc1Yi4uOGE2MzdlMTBhMTEwNjZjNjJlYmY3ZTJjYzhkNGUx
NTc1ODk4M2ExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCBJbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENHQ29sb3JTcAogICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdo
dCk7CiAgICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7CiAKLSAgICBib29sIGFj
Y2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkOworICAgIGJv
b2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQ7CiAgICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXplLmhlaWdo
dCgpIDw9IDApCiAgICAgICAgIHJldHVybjsKIApAQCAtNDQ1LDc5ICs0NDUsNiBAQCB2b2lkIElt
YWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaQogICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEs
IDEsIDAsIDApKTsKIH0KIAotc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKLXsK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIGNv
bnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7Ci0jZW5k
aWYKLSAgICByZXR1cm4ga1VUVHlwZUpQRUc7Ci19Ci0gICAgCi1zdGF0aWMgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQotewotICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2Vydmlj
ZXMgdmVyc2lvbj8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIFVUSUZyb21NSU1FVHlw
ZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgotCi0gICAg
Ly8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMg
d2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZv
dW5kLgotICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNl
ZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVm
IGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBDRlN0
cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOwotCi0gICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikp
Ci0gICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGpwZWdV
VEkoKTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJp
bWFnZS9naWYiKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7Ci0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4ga1VUVHlwZVBORzsKLSNlbmRpZgotfQotCi1zdGF0aWMg
Ym9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQotewotICAgIGlmICgh
aW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEo
ZGF0YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVz
OwotICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5
ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXBy
ZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1
dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29u
c3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5
OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsK
LSAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwg
JmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0dGluZyBrQ0dJ
bWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBp
biBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKLSAgICAvLyBpbiB0aGUgY2Fs
bGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KLQotICAgIENHSW1h
Z2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9w
ZXJ0aWVzLmdldCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVz
dGluYXRpb24uZ2V0KCkpOwotfQotCi1zdGF0aWMgU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRh
dGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERh
dGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExl
bmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBl
ICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8dWludDhfdD4g
ZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQotewotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRh
OwotICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVu
Z3RoKGNmRGF0YSkpOwotICAgIHJldHVybiBkYXRhOwotfQotCiBTdHJpbmcgSW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7CiAgICAg
aWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29s
dXRpb24pKQpAQCAtNTc4LDcwICs1MDUsNiBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1
ZmZlcjo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YgogICAg
IHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAg
IGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFT
U0VSVCh1dGkpOwotCi0gICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1h
Z2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRh
dGEoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAo
Q0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3Qg
aGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBv
biB0b3Agb2YgYmxhY2suCi0gICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgp
ICogc291cmNlLmhlaWdodCgpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJl
c2VydmVDYXBhY2l0eShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIg
KmJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0g
ZGF0YVtpICsgM107Ci0gICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7Ci0gICAgICAg
ICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRh
W2kgKyAwXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07Ci0g
ICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25l
U2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KLSAgICAgICAgZGF0YSA9IHBy
ZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklz
QmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7Ci0g
ICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERh
dGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7Ci0g
ICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0
byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhl
aWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBr
Q0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdl
dCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotCi0gICAgYXV0byBj
ZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
MCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0
eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4g
V1RGTW92ZShjZkRhdGEpOwotfQotCi1TdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQot
ewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkp
Ci0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1
cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRh
JiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxp
dHkpKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4g
eyB9OwotfQotCiBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25z
dAogewogICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNH
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5oCmluZGV4IGM1NWE1NGFkOTExNzk1M2NhNWU2OTZkYTA3ZTZlMGRmNjgxNDNkNTguLjNlMjM3
NGJhZDI0ZjA3ODdmZWYwNTQzYzFiNTFiOTEyMGYxMjMwZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApAQCAt
MjYsNiArMjYsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlw
bGljYXRpb24uaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCmluZGV4IDg5ZDA0MzljMjEwZGI1MDFhYzkzOWVi
MTE0MTQ4ODFlZWVjNjViMjQuLjRmMTM4ZTRkNzNhY2U3MmNjMWFkMGQ2YThhODBjY2E4NzQ2YmRj
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDE4IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgogCisjaWYg
VVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8SW1hZ2VJ
Ty9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJV
VElVdGlsaXRpZXMuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDQg
KzUyLDE0MyBAQCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9p
ZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKICAgICByZXR1cm4gKih1aW50OF90KilsYXN0
Qnl0ZTsKIH0KIAorQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCit7CisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkgfHwgUExBVEZPUk0oV0lOKQorICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRU
eXBlSlBFRyA9IENGU1RSKCJwdWJsaWMuanBlZyIpOworI2VuZGlmCisgICAgcmV0dXJuIGtVVFR5
cGVKUEVHOworfQorCitSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gRklYTUU6IFdoeSBkb2Vz
bid0IGlPUyB1c2UgdGhlIENvcmVTZXJ2aWNlcyB2ZXJzaW9uPworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0cmluZygpOwor
I2Vsc2UKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1bmNsZWFyIGlmIENG
U1RSIGlzIHRocmVhZHNhZmUuCisKKyAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBm
b3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1F
VHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCisgICAgLy8gRm9yIG5vdywgb25seSBzdXBw
b3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1Mjg2Pi4KKyAg
ICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5n
Iik7CisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYgPSBDRlNUUigiY29t
LmNvbXB1c2VydmUuZ2lmIik7CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVQTkc7Cisg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBl
ZyIpKQorICAgICAgICByZXR1cm4ganBlZ1VUSSgpOworICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIpKQorICAgICAgICByZXR1cm4ga1VU
VHlwZUdJRjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBrVVRUeXBl
UE5HOworI2VuZGlmCit9CisKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZT
dHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYg
ZGF0YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5h
dGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOworICAgIGlmICghZGVzdGluYXRp
b24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IGltYWdlUHJvcGVydGllczsKKyAgICBpZiAoQ0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYg
cXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAg
IC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3Rp
bmF0aW9uLgorICAgICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1i
ZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFs
aXR5KSk7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3Nz
eUNvbXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVz
c2lvblF1YWxpdHkuZ2V0KCk7CisgICAgICAgIGltYWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIH0KKwor
ICAgIC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFj
ayBmb3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRo
CisgICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRv
IHdvcmsuCisKKyAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQo
KSwgaW1hZ2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7CisgICAgcmV0dXJuIENHSW1hZ2VEZXN0
aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIH0KKworc3RhdGljIFJldGFpblB0
cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIEFTU0VSVChNSU1F
VHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlw
ZSkpOworCisgICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlw
ZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUlu
Zm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNl
LmRhdGEoKS0+ZGF0YSgpOworICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsK
KworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgeworICAgICAgICAvLyBK
UEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkg
Y29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KKyAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291
cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7CisgICAgICAgIGlmICghcHJlbXVsdGlwbGll
ZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3JvdyhzaXplKTsKKyAgICAgICAgdW5z
aWduZWQgY2hhciogYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgeworICAgICAgICAgICAgdW5zaWdu
ZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKKyAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsK
KyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsgMF0gKiBhbHBoYSAvIDI1
NTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV0gKiBhbHBoYSAv
IDI1NTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl0gKiBhbHBo
YSAvIDI1NTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kg
KyAwXSA9IGRhdGFbaSArIDBdOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRh
W2kgKyAxXTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl07Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkYXRhQWxwaGFJbmZvID0ga0NHSW1h
Z2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVsLgorICAgICAg
ICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOworICAgIH0KKworICAgIHZlcmlmeUlt
YWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhl
aWdodCgpKTsKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJD
cmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0
KCksIDApKTsKKyAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJjZS53aWR0aCgp
LCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRoKCksIHNSR0JDb2xvclNw
YWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRh
UHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisK
KyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdl
dCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1N0cmluZyBkYXRhVVJMKENGRGF0YVJl
ZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIFZlY3RvcjxjaGFyPiBiYXNl
NjREYXRhOworICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFH
ZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOworCisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1l
VHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitTdHJpbmcgZGF0YVVSTChjb25z
dCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1l
VHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVU
eXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFW
ZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAg
ICBkYXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExlbmd0aChj
ZkRhdGEpKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29u
c3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWlt
ZVR5cGUsIHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsK
KyAgICByZXR1cm4geyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKaW5kZXggMTYxMjhhMTlhYmQxZmI4M2Fi
MzFhMTE1YzY4OTUwNDkxZDQxOTU1Mi4uYmM4Nzc1ODg3OGQ1MTYzYTkzOGFmODI0MmM3YTY4MDBl
YTliZDEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw4ICsyNSwzMSBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2lmIFVTRShDRykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIFdFQkNPUkVfRVhQT1JUIHVp
bnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIsIHNp
emVfdCBidWZmZXJTaXplKTsKIAotfQorQ0ZTdHJpbmdSZWYganBlZ1VUSSgpOworUmV0YWluUHRy
PENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmKTsK
KworYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZik7CisKK1N0cmluZyBkYXRhVVJMKENG
RGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CitTdHJpbmcgZGF0YVVSTChjb25zdCBJ
bWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpOworCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYpOworVmVjdG9yPHVp
bnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmgKaW5kZXggNDllOGM1YTI2ZTc3MWM0MjQ5Njc4MTk1MjdhNTYyNzM1M2Rm
NDQ5Ni4uZGQzNWNjNjViMTM3ZDgyMmM3MDE1MzJkYWJkMjQ5MDA0YmYyYTlmNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC03
MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBt
X3NvdXJjZUltYWdlOwogICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CiAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3Jl
bmRlcmluZ01vZGUgeyBVbmFjY2VsZXJhdGVkIH07CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRl
cmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07CiAgICAgZmxvYXQgbV9m
aWx0ZXJTY2FsZSB7IDEgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBhYjVhMGQ1MGY4Y2UxYWFmNjUzNWRlZWM5NDBiODVkYzU1MTdlNGIxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0
aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgR1VuaXF1ZU91dFB0cjxnY2hh
cj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZlclNpemUpCi17Ci0gICAgLy8gTGlzdCBvZiBzdXBwb3J0
ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMgY29tZXMgZnJvbSB0aGUgR2RrUGl4YnVmIGRvY3VtZW50
YXRpb24uCi0gICAgLy8gaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZ2RrLXBpeGJ1Zi9zdGFi
bGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmluZy5odG1sI2dkay1waXhidWYtc2F2ZS10by1idWZmZXJ2
Ci0KLSAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIik7
Ci0gICAgaWYgKHR5cGUgIT0gImpwZWciICYmIHR5cGUgIT0gInBuZyIgJiYgdHlwZSAhPSAidGlm
ZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0eXBlICE9ICJibXAiKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmOwotICAgIGlmICh0eXBlID09ICJq
cGVnIikgewotICAgICAgICAvLyBKUEVHIGRvZXNuJ3Qgc3VwcG9ydCBhbHBoYSBjaGFubmVsLiBU
aGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMgdGhhdCB0b0RhdGFVUkwoKSBtdXN0IGVuY29kZSBhIFBv
cnRlci1EdWZmCi0gICAgICAgIC8vIGNvbXBvc2l0ZSBzb3VyY2Utb3ZlciBibGFjayBmb3IgaW1h
Z2UgdHlwZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbHBoYS4KLSAgICAgICAgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4gbmV3U3VyZmFjZTsKLSAgICAgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5
cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKSB7Ci0gICAgICAgICAgICBu
ZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBD
QUlST19GT1JNQVRfUkdCMjQsCi0gICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KHN1cmZhY2UpLAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3N0cmlkZShzdXJmYWNlKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50
U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlKTsKLSAgICAgICAgICAgIG5ld1N1
cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRf
UkdCMjQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgUmVmUHRy
PGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsK
LSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwg
MCwgMCk7Ci0gICAgICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKG5ld1N1cmZh
Y2UuZ2V0KCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJv
U3VyZmFjZVRvR2RrUGl4YnVmKHN1cmZhY2UpKTsKLSAgICBpZiAoIXBpeGJ1ZikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgIGlm
ICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0
eSA8PSAxLjApIHsKLSAgICAgICAgU3RyaW5nIHF1YWxpdHlTdHJpbmcgPSBTdHJpbmc6Om51bWJl
cihzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAgKyAwLjUpKTsKLSAgICAgICAgZ2Rr
X3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZi
dWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgInF1YWxpdHki
LCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwpOwotICAgIH0gZWxzZQotICAgICAg
ICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIo
KSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCBOVUxM
KTsKLQotICAgIHJldHVybiAhZXJyb3I7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGEg
PSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwotICAgIGlmIChpbWFnZURhdGEuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0
YTsKLSAgICBiYXNlNjRFbmNvZGUoaW1hZ2VEYXRhLmRhdGEoKSwgaW1hZ2VEYXRhLnNpemUoKSwg
YmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQs
IiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QK
LXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
Rm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGJ1ZmZl
cjsKLSAgICBnc2l6ZSBidWZmZXJTaXplOwotICAgIGlmICghZW5jb2RlSW1hZ2UobV9kYXRhLm1f
c3VyZmFjZS5nZXQoKSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCi0g
ICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwotICAg
IGltYWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKLSAgICByZXR1cm4g
aW1hZ2VEYXRhOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKaW5kZXggN2QyY2VmZDYyNjFkZWUy
YTM5YTg5ZDEwMTcwMmViNTAyNTJmNGY1ZS4uZjAzOTEzODA2MGQzNDQzNGU2Y2RkYmY5NmVhNjRj
MzAxYTYzNTUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcApAQCAtMzgsNyArMzgsNyBAQCB2b2lkIEJp
dG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXImLCBHcmFwaGljc0xheWVy
KiBzb3VyY2VMYXllciwgYwogewogICAgIC8vIE1ha2luZyBhbiB1bmNvbmRpdGlvbmFsbHkgdW5h
Y2NlbGVyYXRlZCBidWZmZXIgaGVyZSBpcyBPSyBiZWNhdXNlIHRoaXMgY29kZQogICAgIC8vIGlz
bid0IHVzZWQgYnkgYW55IHBsYXRmb3JtcyB0aGF0IHJlc3BlY3QgdGhlIGFjY2VsZXJhdGVkIGJp
dC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZSh0YXJnZXRSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUodGFyZ2V0UmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogCiAg
ICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQu
Y3BwCmluZGV4IDVlOWNmMDU3OGE2YjgyOWYwYTZjMGEwMWIwOTg2ZTYwM2Q2MDQyOGMuLmI4ZTNi
MGJhMTliMmNhZGZkNmJmNzQ5NmJjN2I4MmM1M2U5MTgwOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
RC5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWMKICAgICBtX3Np
emUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwogICAgIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplID0gbV9zaXplOwogCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0g
cmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsKKyAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJp
bmcgPSByZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogICAgIGlm
IChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQogICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggY2ExMWJiOGJhMGIxOTEwYzYyNzk2N2Q0ZDI2
MGIwNGM2ODQ4NjczMS4uNWFjOWQ2NjA2YzQyMjEyNDhiYzQxZGU5Mzg5Y2U1Yzg3ZTRhNDE3YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZS5jcHAKQEAgLTQ1OCw3ICs0NTgsNyBAQCBJbWFnZUJ1ZmZlciogTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAobV9pbWFnZUJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAKLSAgICBtX2ltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBVbmFjY2VsZXJhdGVk
KTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAppbmRleCBkNWI5MWIyNjg2YWUyNjFlYjUzYzA2ODliZWVjNjJmNTVlM2ZiNDU4
Li44ZjUwZTU3NTcxZDdiMzg1MDBlZWQ3YmNkYTZiM2E2NDJhYmY3OTUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTY5MDUsNyArNjkwNSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogICAgIH0KICAgICAK
ICAgICBlbnN1cmVMYXllckZpbHRlcnMoKTsKLSAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJl
bmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdz
KCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJh
dGVkKTsKKyAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJz
RW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXggOTE0MjAy
OWEyZDQ0NjRkZjVjYjdiM2E0NDE5M2JlMjg2M2MxZWQyYS4uODUxYTg2Njc4OWI0ODM1NDIyYzU3
YTQxZGRhNzVhMGJjYWQ3ZDY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZS5jcHAKQEAgLTE4MSw3ICsxODEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBl
OjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAg
IEludFJlY3QgbWFyZ2luUmVjdCA9IHNuYXBwZWRJbnRSZWN0KG1hcmdpblIpOwogICAgIGF1dG8g
aW50ZXJ2YWxzID0gbWFrZVVuaXF1ZTxSYXN0ZXJTaGFwZUludGVydmFscz4obWFyZ2luUmVjdC5o
ZWlnaHQoKSwgLW1hcmdpblJlY3QueSgpKTsKICAgICAvLyBGSVhNRSAoMTQ5NDIwKTogVGhpcyBi
dWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJl
Y3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGlmIChpbWFn
ZUJ1ZmZlcikgewogICAgICAgICBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCA9IGlt
YWdlQnVmZmVyLT5jb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggMDhlNDkyODJhZDkz
YmNhY2QyOTc3NWI4NDZmMDU5ZDVhMmNhNzEzZS4uMWQ3N2I2M2M2ZmUyODMxMmFlMTFlZDgyNWI1
MjNhYWNlNzE3ZWM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIGJv
b2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjCiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJ
bWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0
NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFj
Y2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3RlZCBjbGlw
cGluZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBD
b2xvclNwYWNlOjpTUkdCLCBVbmFjY2VsZXJhdGVkLCAmY29udGV4dCk7CisgICAgICAgIGNsaXBw
ZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBh
aW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNSR0IsIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKICAgICAgICAgaWYgKCFjbGlwcGVyTWFza0lt
YWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDc1
YjU5YjYzYzNlNDk2MGJkNGUzYmRiZDg3NDkyYTkzMmY0MzE2MWIuLmRkZGJhNDMyZDM3OTM3ZWIw
NDNhNmNjMTdiZjkzMmU2Yjc4OTU0MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0xOTEsNyArMTkx
LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2Nh
bGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAgIGVmZmVjdGl2ZVRyYW5zZm9y
bS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAg
ICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2Vs
ZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsKKyAg
ICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2Vs
ZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVn
aW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OkxpbmVhclJHQiwgcmVuZGVyaW5n
TW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VS
VCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwCmluZGV4IDE3ODdlMThjMmRjZWY1YmRmOTkyNDc0Y2ZjMDIyYjUxNjZhZDU4NDguLjEy
MGM1N2I1Njk3ODcyMjA0NjViYzZhZWMwYjU4MDRjNDU1Y2Q4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3Bw
CkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVz
b3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgICAgIGNvbnN0
IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAgICAg
Q29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3ZnU3R5bGUuY29sb3JJbnRlcnBvbGF0aW9uKCkgPT0g
Q29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBDb2xvclNwYWNlOjpMaW5lYXJSR0IgOiBD
b2xvclNwYWNlOjpTUkdCOwogICAgICAgICAvLyBGSVhNRSAoMTQ5NDcwKTogVGhpcyBpbWFnZSBi
dWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5n
IGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBtYXNraW5nLCB0aG91Z2guCi0gICAg
ICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgVW5h
Y2NlbGVyYXRlZCwgY29udGV4dCk7CisgICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNW
R1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0
ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgY29u
dGV4dCk7CiAgICAgICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdlKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcApp
bmRleCBiODIxNDExYWRlNzc1MDg1NjE2ODg1NmVkMjJiNjJlYTZiNWNkM2Q5Li45Nzg2N2FhZDNj
MjdiNWI1MzhkM2E3OWZiNDk1ZGRkNGYwZjQzZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHAKQEAgLTIxOCw3ICsyMTgsNyBAQCBOYXRpdmVJbWFnZVB0ciBTVkdJ
bWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBDYWlybyBkb2VzIG5vdCB1c2UgdGhl
IGFjY2VsZXJhdGVkIGRyYXdpbmcgZmxhZywgc28gaXQncyBPSyB0byBtYWtlIGFuIHVuY29uZGl0
aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlci4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVk
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAo
IWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDb250ZXh0TWVudUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCmluZGV4IGVmMDM1MDM0MmJiODIyNDZj
ZDE5ZjM1NGQ5YmNjMDI5MWYyOTA0M2QuLjI0MDdmMTA2OWI1N2ZiZjY1OTQ4ODc1NDEyOGNlOGZh
YjFlY2JiZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCkBAIC0yMDIsNyArMjAyLDcg
QEAgUmV0YWluUHRyPE5TSW1hZ2U+IFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJl
bnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0KICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIC8v
IFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBzbmFwc2hvdCwgYW5kIHdpbGwgYmUgcGFpbnRlZCBpbiBh
biB1bmFjY2VsZXJhdGVkIGZhc2hpb24gaW4gbGluZSB3aXRoIEZyYW1lU25hcHNob3R0aW5nLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShyZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIG5pbDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388301</attachid>
            <date>2020-01-21 08:37:28 -0800</date>
            <delta_ts>2020-01-21 17:20:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206519-20200121083727.patch</filename>
            <type>text/plain</type>
            <size>79894</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDE0ZjAwY2EzZGFkNjI1
MDkwYjYzMDVkNGE3ZGFjMzhjMWNmMjllNS4uZWNmMmJiYWQ0OGU5ZTJhZThiYmM1NGE1MWQ3YmM2
OWU3MGI2NjM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNSBAQAorMjAyMC0wMS0yMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUg
SW1hZ2VCdWZmZXIgdXRpbGl0aWVzIGZ1bmN0aW9uIHRvIHNlcGFyYXRlIGZpbGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY1MTkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVzZSB1dGlsaXRpZXMg
ZnVuY3Rpb24gYXJlIG1lcmVseSByZWxhdGVkIHRvIHRoZSBJbWFnZURhdGEuCisKKyAgICAgICAg
KiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0OgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlRnVuY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmpwZWdVVEkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbUlt
YWdlQnVmZmVyTUlNRVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNm
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6anBlZ1VUSSk6CisgICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwOiBSZW1vdmVkLgorCisy
MDIwLTAxLTIwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgTWFrZSBSZW5kZXJpbmdNb2RlIGFuZCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGVu
dW0gY2xhc3NlcyBhbmQgbW92ZSB0aGVtIHRvIHNlcGFyYXRlIGhlYWRlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjUxNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmRlcmluZ01vZGUgYW5kIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gbmVlZCB0byBiZSBlbmNvZGVkIGFuZCBkZWNvZGVkCisgICAg
ICAgIHdoZW4gdGhleSBhcmUgc2VudCBmcm9tIHRoZSBXZWJQcm9jZXNzIHRvIHRoZSBHUFVQcm9j
ZXNzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5j
LWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1U
eXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZWRlZCk6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVh
ZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICog
aHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWlu
dENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAg
ICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3Jl
ZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZz
Y3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0
ZVBhdHRlcm4pOgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6
OmlzQWNjZWxlcmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAqIGh0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVSZXNwZWN0aW5nT3JpZW50
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdNb2RlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRjaEJ1ZmZlcjo6Z2V0U2NyYXRjaEJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRU
aWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0
aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRv
d1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hh
ZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRh
dGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZlciBj
b25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNy
ZWF0ZVJhc3RlclNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUpOgorCiAyMDIwLTAxLTIwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3
YUBhcHBsZS5jb20+CiAKICAgICAgICAgRVhJRiBvcmllbnRhdGlvbiBpcyBpZ25vcmVkIGZvciBz
b21lIENTUyBpbWFnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA2ZmFiMjdjNWYw
ZDMxOTFiNGFiZTJmYzdmZWJkMjI3NzQxMjg2ODJhLi4yOWUyNjNjYWZmODJmOGJkY2Q5MTk3NTA0
MmI1MDA3MTAzZWIyM2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMjAtMDEtMjAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxl
LmNvbT4KKworICAgICAgICBNYWtlIFJlbmRlcmluZ01vZGUgYW5kIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZW51bSBjbGFzc2VzIGFuZCBtb3ZlIHRoZW0gdG8gc2VwYXJhdGUgaGVhZGVycworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NTE2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51Q2xp
ZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0pOgorCiAyMDIwLTAx
LTIwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IG1p
c3NpbmcgaGVhZGVyIGd1YXJkcyBhbmQgY2xlYW4gdXAgZW1wdHkgZmlsZXMgaW4gV2ViQ29yZSwg
V2ViS2l0TGVnYWN5LCBXZWJLaXQsIFRvb2xzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiYjg3ODA2
MTgzNzQxZjk2MjY4Mzg2OGVmYzY4OTEwMmJjNGY0YTJkLi40NTUyYzA1YTczOWY3NTg3OGI2N2Zh
NGU2ODgwZTZjNzQ2NWU2MTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMzEsNiArMTAzMSw3
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9n
YW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0
Zm9ybUdhbWVwYWQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCkBAIC0xMTI4LDYgKzExMjksNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFu
Z2VzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1JlbW90ZVZpZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdN
b2RlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXpl
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0Ns
aXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5k
ZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2ZiNmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2
ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENsaXBi
b2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5p
dGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6
Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcEltYWdlLT5zZXREYXRhKFdURk1vdmUoYnVmZmVyVG9T
YW5pdGl6ZSksIHRydWUpOwotICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIp
IHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsgbnVsbFN0cmluZygpIH07CiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IDcyMDVlMjBkM2FiNGUzOWZiZWU0YmI5NDMx
YWVjYjRiY2NjMjhiZDIuLjk3ZjMzNmU3YzVjOWU4ZDBkYTI1ZTJiZDRlNjFhZDcxYWU1MmRmMmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC04NCw3ICs4NCw2IEBAIHBsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Db2xvckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9EaXNwbGF5UmVmcmVzaE1v
bml0b3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2d0
ay9JbWFnZUJ1ZmZlckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAK
IAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZDViM2NlYWVkZWNkNjMwNjgzYThkODBlOTgyMmIzZGY0MWQ3NjIwZS4uNmVkNGFjMjNhNmQ5
YWM5NDRlYzE4NjRiYzY0OTdiMjc1Zjg1YTQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE0MSw2ICsyMTQxLDggQEAKIAkJ
NzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1
RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVF
NTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0Yy
NUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3Mjk5QkM2NzIzRDZBNTMyMDBD
QzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYy
M0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyog
VGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRG
YWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1Nzkz
RTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkw
RDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNN
ZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTk2NDAsNiArOTY0Miw4IEBACiAJCTcyN0FGRUQxMUEy
RUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdB
RkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FG
RUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5OUJDNjQyM0Q2
ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNG
MjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTAxMiw2ICsyNTAxNiw3IEBACiAJCQkJRkJDMjIwREQxMjM3RkJFQjAw
QkNGNzg4IC8qIG9wZW5nbCAqLywKIAkJCQkzNzIxNDkzMzE4RjBCNkQ2MDAxNTZFREMgLyogb3Bl
bnR5cGUgKi8sCiAJCQkJNDlFOTExQjIwRUY4NkQyNzAwOUQwQ0FGIC8qIHRyYW5zZm9ybXMgKi8s
CisJCQkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24u
aCAqLywKIAkJCQk0OTA3MDdFNDEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJLaXRCcmlkZ2Uu
Y3BwICovLAogCQkJCTQ5MDcwN0U1MTIxOUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRn
ZS5oICovLAogCQkJCUJFRjI5RUU5MTcxNUREMDkwMEM0QjRDOSAvKiBBdWRpb1RyYWNrUHJpdmF0
ZS5oICovLApAQCAtMjUxODgsNiArMjUxOTMsNyBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4
QUFGMyAvKiBSZWdpb24uaCAqLywKIAkJCQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4RjIgLyogUmVt
b3RlVmlkZW9TYW1wbGUuY3BwICovLAogCQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVBMDhGMiAvKiBS
ZW1vdGVWaWRlb1NhbXBsZS5oICovLAorCQkJCTcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBS
ZW5kZXJpbmdNb2RlLmggKi8sCiAJCQkJQTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5k
ZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJl
Y3QuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAg
Ki8sCkBAIC0yOTAzOSw2ICsyOTA0NSw3IEBACiAJCQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3
IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTEx
NUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgz
QkI1Qzg4MUQ1RDZGNDUwMDVBNzFGNCAvKiBBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyOTlCQzY3MjNENkE1MzIwMENDNjg4MyAvKiBBbHBoYVByZW11bHRp
cGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQg
LyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTA4QzNEMjE1
MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0U3QjJEQjMxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTM2OCw2ICszMTM3NSw3IEBACiAJCQkJMTE5
OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8qIExheW91dENvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1QThEMCAvKiBMYXlvdXREZXNjZW5kYW50
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MTgwMjU1MjNENDU0OUIwMEZGQjA3MSAv
KiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QUJBQkRE
MjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThEMCAvKiBMYXlvdXRJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1MzAwQzRDMDdFIC8qIExheW91dE1p
bGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjAxMiw2ICszMjAyMCw3IEBACiAJCQkJQkNF
QTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVz
b3VyY2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Mjk5QkM2ODIzRDZBNTNFMDBD
QzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2QzdDNEIyMjEy
Mzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1MUNEIC8qIFJlbmRlckl0ZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMyMDYyLDcgKzMyMDcxLDYgQEAKIAkJCQk0NThGRTQwQTE1ODlE
RjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBQjI0N0E2RDBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQlFNDE4MDI1NTIzRDQ1NDlCMDBGRkIwNzEgLyogTGF5b3V0SW50ZWdy
YXRpb25Cb3hUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTk1NUE4ODE2MEQxOTkyMDA4NTgw
MjUgLyogUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEM4
RkFFMEREQ0QzMUIwMEI1OTJGNCAvKiBSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM1RUI2NjgwRTgxQ0I3MTAwQjI1OTY1IC8qIFJlbmRlclN0eWxlQ29uc3RhbnRzLmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCmluZGV4IDY0ZGZmMmQ5ODRlZjcyZGQ5ZWJhNTEwMjQwNjEwZmMxOGUy
MWQ5NDcuLmVkYTE3MTdkZGZmZDdlYjBiYzNmODcwMmI4MjkzZTg5OWJkNWNlN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cApAQCAtMjc4NSw3ICsyNzg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFVuYWNjZWxlcmF0
ZWQsIHJlc29sdXRpb25TY2FsZSk7CisgICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShGbG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKICAgICAgICAgaWYgKCFidWZm
ZXIpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFi
NDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZh
ZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zp
bHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1h
Z2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAK
ICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAo
MTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2Nl
bGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVu
YWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAg
ICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1
c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2
ZGRmZjUwMmU1Li4xNDc3NjJmNTUyNDJlNjMxNTQ5ZGRiMGEwNjc0YTYyMWZlOGNmM2Q1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBA
QCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAo
IXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1f
Y29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQs
IDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEs
IENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCmluZGV4IDIzZDliMzRlODQ4ZjZkMDFkMzRhOWRhZmZiYTMwNTBmYzdhNzEzMTYu
LmY1ZTc2NTAwNjlhNmQ4NjkwZDk0M2RlZTI2YmIzNjFmOTE4OWNlMzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC04Myw2ICs4MywxMCBAQAogI2luY2x1
ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogI2VuZGlmCiAKKyNpZiBVU0UoQ0cpCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEhUTUxDYW52YXNFbGVtZW50
KTsKQEAgLTg4NSw3ICs4ODksNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxl
cmF0ZShzaXplKCkpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOworICAgIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIAogICAg
IGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXco
KS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6IG51
bGxwdHI7CiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJl
bmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggNWY0OWY3MzlhMWY1YzNiZTBlZTE3MWYzNGY5NjNl
MDI2NmJjNDQ5Mi4uMmI4MTk4OWU4ZmQ2MmVmZTM0NTM4N2E5MDJmZTY5MmIzMDk5NTRmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTYxLDkgKzYxLDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwKTsKIAog
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2Rl
ID0gQWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2Rl
ID0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJlbmRlcmluZ01v
ZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5n
TW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
ICNlbmRpZgogCiBSZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpjcmVhdGUoSW50U2l6ZSBz
aXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4IGY3NDQ4NTEy
MDAxNTc1YjRhZjRiYmEyNGVhYTU3YWJlNmEwNjQzYzkuLjc1NWYxMWVmODllMTE4MWJlMDZkNWVh
MmYwMDc4Njk2ZTM5YmU0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5j
cHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBP
ZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpCiAgICAgICAgICAgICByZXR1
cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAKICAgICAgICAgaWYgKCFt
X2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFw
OjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCksIHRy
dWUgfSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoeyBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCksIHRy
dWUgfSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRha2VJbWFnZUJ1ZmZlcigpOwogICAg
ICAgICBpZiAoIWJ1ZmZlcikKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIE9mZnNjcmVlbkNhbnZh
czo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSk7CisgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0K
IAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFn
ZUJ1ZmZlcigpIGNvbnN0CkBAIC0yNTcsNyArMjU3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYg
KHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVk
KSk7CisgICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSk7CiB9CiAKIHZvaWQgT2Zmc2NyZWVuQ2Fu
dmFzOjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDg5ZDhmNDI0M2IyYjkyZGZi
Y2IzMmFhMjIxYjc1M2M5M2YxZjU5NDEuLmQ0OTQ3MTIwODMyMzEwYzdjMGQ3YmVmMWM4NzlkYTNm
ZmIyOTNmMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0xODA2LDcgKzE4MDYsNyBAQCB0
ZW1wbGF0ZTxjbGFzcyBUPiBJbnRSZWN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNh
bGN1bGF0ZUNvbXBvc2l0aW5nQnVmZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKGNvbnN0
IEludFJlY3QmIGJ1ZmZlclJlY3QpCiB7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUo
YnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2Nl
bGVyYXRlZCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXpl
KCksIGlzQWNjZWxlcmF0ZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6Y29tcG9zaXRlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEludFJl
Y3QmIGJ1ZmZlclJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpAQCAtMTk5MCw3ICsxOTkwLDcg
QEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQ
YXR0ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1v
dmUobmF0aXZlSW1hZ2UpKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pIH07CiAjZW5k
aWYKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlk
ZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmlu
Z01vZGUoKSA6IEFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKHZpZGVvRWxlbWVudCksIGRyYXdpbmdDb250ZXh0KCkgPyBkcmF3aW5n
Q29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQuY3BwCmluZGV4IDE0ZWEzN2Q4ZDdlYWZiMDFiNWM0Y2UxOWViZTc2YzUxOGNmY2Q0
YTguLmI1MWI0ZGJmMTNlZTUwNmViOTQ5OGM0M2VmNDVjOTQ0ZGQ3M2UwYTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0LmNwcApAQCAtMzYsOSArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KTsKIAogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0g
QWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJlbmRlcmluZ01vZGUg
YnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9k
ZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNl
bmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBJbWFn
ZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCkBAIC02OSw3ICs2OSw3
IEBAIEhUTUxDYW52YXNFbGVtZW50KiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNhbnZh
cygpIGNvbnN0CiAKIGJvb2wgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJh
dGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVy
YXRlZDsKKyAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZDsKIH0KIAogdm9pZCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91
dHB1dEJpdG1hcChSZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWFwKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAppbmRleCA2N2NhNTNjNDdlZWEwMDhiZWEzZjYxZGY5NmU3Mzg5Y2FlY2E2ZGVhLi40Mjg4MjE2
NDQ5OGRmYzE4NTY5NDdiMTZjM2EyOWE4NjM3ZmQ5NTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAt
NjM4Niw3ICs2Mzg2LDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAv
LyBGSVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1w
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRl
eCAzNGJhMzcyZDQ5MTQzY2ZlMjkzYTdjMmE4OTQ1ZTQwZjM1MWIxMDUxLi5mNmJiZmFkZDM3N2Ji
NTFiMDYwYWEwYjMzZjBiNjgwZjExMmM5OTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ3LDcgKzE0NDcsNyBA
QCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNy
ZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50
UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIp
OiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVk
LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpj
cmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0
b3IpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNo
b3R0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCmlu
ZGV4IDBhNDRjMmZhMWEwOTQ5N2NmZGY1NTg4ODMyZmZkZmYxMDIzMzMwZTEuLmUyNGQ5MmU2ZjNl
NjFkMzhhOWIyNDQ4NWY0ZDEzZGU1MGU1MzNhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVTbmFwc2hvdHRpbmcuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBzbmFwc2hvdEZyYW1lUmVjdFdpdGhDbGlwKEZyYW1lJiBmcmFtZSwgY29uc3Qg
SW50UmUKICAgICBpZiAob3B0aW9ucyAmIFNuYXBzaG90T3B0aW9uc1BhaW50V2l0aEludGVncmFs
U2NhbGVGYWN0b3IpCiAgICAgICAgIHNjYWxlRmFjdG9yID0gY2VpbGYoc2NhbGVGYWN0b3IpOwog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoaW1hZ2VSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgc2NhbGVG
YWN0b3IpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBi
dWZmZXItPmNvbnRleHQoKS50cmFuc2xhdGUoLWltYWdlUmVjdC54KCksIC1pbWFnZVJlY3QueSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDQyMWRmYmQ5
NTc1NGM0NjI3NTdiNzhkYmZhNDEwMjU0MzJhZjBiN2QuLmY5MGQyNDZlYzU5YjRmOGE4ZTEzOGI3
MjI0MGNmMjAyNTgzMTkyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nv
dXJjZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJv
LnR4dApAQCAtMzEsNiArMzEsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fp
cm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBo
YVByZW11bHRpcGxpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9B
bHBoYVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxY2FlZjg1NDFkZWUwNjJiZmUw
NTQxNmNkYTJmMmE3Zjc5MjZlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2VudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4X3QgeworICAgIFByZW11
bHRpcGxpZWQsCisgICAgVW5wcmVtdWx0aXBsaWVkCit9OworCitXRUJDT1JFX0VYUE9SVCBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCBjNzFkOThmOGE1ZjY2NzQ2
ODYzMDk0NGFiNzFkYmFmYzkxZGNiNjRlLi40ODIyNDRhNGYyYmRjZWRlN2M4NzRjZDFiNTBlYTkx
NGIxNDk5YTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1h
Z2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lUmVzcGVjdGluZ09yaWVudGF0aW9uKGNvbnMK
ICAgICAgICAgcmV0dXJuIGltYWdlOwogCiAgICAgRmxvYXRSZWN0IHJlY3QgPSB7IEZsb2F0UG9p
bnQoKSwgc2l6ZSgpIH07Ci0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJl
Y3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gaW1hZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4NmRkNGIy
YWY5MWY0NTY1NTM1YTcwMjkzOTIzYWYyYmFhZGJhMi4uZTVjMzFjMWU2NGVmNTRiOTYxMTMxZGJi
MjVjNGNlNGIxODllMmQzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbWFn
ZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKICNpbmNs
dWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9PcHRpb25TZXQuaD4KQEAgLTM1MCw3ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKTsKICNlbmRpZgogICAgIGJv
b2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxl
cmF0ZWQgOiBVbmFjY2VsZXJhdGVkOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3Jl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwCmluZGV4IDQ1OGFlNzJmMmFlMDI1NjI0NzY4ZTg3OWRiZDQ5Njk2NGI0OTFiMTguLmRj
NTRhOTk4NWU0ZDQyMDY3ZGE2YzIzODE4MzVmYmQzNzM2ODc2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgog
CisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4IGNlZWExZGE0MGViMzJmZjc4YTFlNzVlMTdiZmUwMDky
MDFiNzZmMTIuLjU3ZWViZGM1MDAzYzM3MGI4YjQ3NDFlYzJiYTU0MjQ3Yzk1YzkzZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAg
LTEyMiwxNyArMTIyLDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9
OwogCi1lbnVtIFJlbmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0gICAgVW5hY2Nl
bGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFsbG9jYXRpb24g
cmF0aGVyIHRoYW4gcGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUuCi0gICAg
QWNjZWxlcmF0ZWQKLX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiB7Ci0g
ICAgUHJlbXVsdGlwbGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0cmluZyBjb21w
b3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJs
ZW5kTW9kZSk7CiBTdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwogYm9v
bCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKQEAg
LTE0Myw3ICsxMzIsNiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlTwogV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsK
IFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mLCBMaW5lQ2FwKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggY2I3NDM4NDQ4MDJhYjQyYjU1MzUxMTdj
YWI1Y2I3NTY0NGQ1YjNmNC4uMjZkZjdjZGQ5ZmI2YzEzZGQzMDBlMWQzOTNlYzQ0MjUyNDdkMjBh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CkBAIC0yOCw2ICsyOCw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJD
b2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXNHTC5oIgpAQCAtMzUsNiArMzYsNyBAQAogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdP
cHRpb25zLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KQEAgLTE4OCwxMCArMTkwLDQgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotI2lm
IFVTRShDRykKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci1WZWN0b3I8dWludDhfdD4gZGF0
YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpOwotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY5ZDhhZTgxYzg0OGIxMGU2ZjJkMDdhNzg5YjE2YzMzM2RjMjNjYjQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgK
QEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3Mg
UmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3QgeworICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxl
cmF0ZWQsCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDQwNDFiM2Y4MTA3Njc4YzU2
YWNkYjBjNTMzYTA5ODZmN2U2NDU1OTYuLjY4MWFiNTZlZWIzNDE5NDYyYjIzNDQ1MGQwMGY0MWY5
MzM2NzRkMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJTY3JhdGNo
QnVmZmVyKCk7CiAKICAgICAgICAgLy8gU2hhZG93Qmx1ciBpcyBub3QgdXNlZCB3aXRoIGFjY2Vs
ZXJhdGVkIGRyYXdpbmcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5h
Y2NlbGVyYXRlZCBidWZmZXIuCi0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHJvdW5kZWRTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICAgICAgbV9pbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIDEpOwogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKICAg
ICB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRv
dyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiB2b2lk
IFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IExheWVy
SW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZlckNh
bGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSks
IFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXQKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYgZnVsbFJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBjb25zdCBMYXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJ
bWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsK
LSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6
ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAg
ICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShs
YXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkLCAxKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg1
LDcgKzY4NSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zCiAgICAgYXV0byogbGF5ZXJJbWFn
ZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVT
aXplKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxheWVySW1hZ2VQcm9wZXJ0aWVzKTsKLSAg
ICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6
ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQs
IDEpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2Vu
ZGlmCiAKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRv
d1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbgogI2lmIFVT
RShDRykKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCku
Z2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKLSAgICBhdXRvIGxheWVySW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRl
ZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0
ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEpOwogICAgIGF1dG8q
IGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAgLTkxMiw3
ICs5MTIsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dMYXllcihjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiAgICAgYWRqdXN0Qmx1clJhZGl1
cyh0cmFuc2Zvcm0pOwogCi0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
ZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCAxZjEzMzNhNzQyNjlmNTI0NzA1
ZjU0M2YwZGRiODM0Y2M3Y2JkZjBkLi45MWMwYTFhOWUxNDg1YTJhMTRlNjFjNjhmMDY4ZmUzMTk2
MDFhODY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1
ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKQEAgLTc2LDcgKzc3LDYgQEAKICNlbmRp
ZgogI2VuZGlmCiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbWFnZUJ1ZmZlckRhdGE6Oklt
YWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCkBAIC0xMDMsNyArMTAzLDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRh
dGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2QKIAogSW1h
Z2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKIHsKLSAgICBpZiAobV9yZW5kZXJpbmdN
b2RlICE9IEFjY2VsZXJhdGVkKQorICAgIGlmIChtX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQpCiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCkBAIC0yOTIsMTQgKzI5MiwxNCBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhYwogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkKSB7CisgICAg
aWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQp
IHsKICAgICAgICAgbV9kYXRhLmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7CiAgICAgICAgIGlmICgh
bV9kYXRhLm1fc3VyZmFjZSB8fCBjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNl
LmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIG1fZGF0YS5tX3Jl
bmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxs
IGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCisgICAgICAgICAgICBtX2RhdGEubV9yZW5k
ZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxsb2NhdGlv
biBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgogICAgIH0KLSAgICBp
ZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKQorICAgIGlmIChtX2Rh
dGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpCiAjZWxz
ZQotICAgIEFTU0VSVChtX2RhdGEubV9yZW5kZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKTsKKyAg
ICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCk7CiAjZW5kaWYKICAgICB7CiAgICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5
X3Qgc19zdXJmYWNlRGF0YUtleTsKQEAgLTY1NCwyMSArNjU0LDYgQEAgdm9pZCBJbWFnZUJ1ZmZl
cjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJl
bXVsdGlwbGkKICAgICB9CiB9CiAKLSNpZiAhUExBVEZPUk0oR1RLKQotc3RhdGljIGNhaXJvX3N0
YXR1c190IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghcmVpbnRlcnByZXRfY2FzdDxW
ZWN0b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgbGVuZ3RoKSkKLSAgICAg
ICAgcmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKLSAgICByZXR1cm4gQ0FJUk9fU1RB
VFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2Vf
dCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1aW50OF90Piogb3V0cHV0
KQotewotICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBlID09ICJpbWFnZS9wbmci
KTsgLy8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgotCi0gICAgcmV0dXJu
IGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwgd3JpdGVGdW5jdGlvbiwg
b3V0cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQogU3RyaW5nIEltYWdlQnVmZmVy
Ojp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGVu
Y29kZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CkBAIC02ODEsMjEgKzY2Niwx
MyBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksCiAgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlw
ZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwogfQogCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VC
dWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KSBj
b25zdAorVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAogewogICAgIEFTU0VSVChN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1l
VHlwZSkpOwotCiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQo
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90
PiBlbmNvZGVkSW1hZ2U7Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1p
bWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVy
biBlbmNvZGVkSW1hZ2U7CisgICAgcmV0dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5
KTsKIH0KIAotI2VuZGlmCi0KICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiAh
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBhaW50VG9U
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQg
b3BhY2l0eSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWU2M2MyM2E5MDM0MDhkZGNlYzkyOTJjMjhiZTQ5NTZjODAxZGZlOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNo
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorCisj
aWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiR1JlZlB0
ckd0ay5oIgorI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyNpZiAhUExBVEZPUk0oR1RLKQorc3RhdGljIGNhaXJvX3N0YXR1c190
IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50
OF90Pio+KG91dHB1dCktPnRyeUFwcGVuZChkYXRhLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4g
Q0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9SOworICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VT
UzsKK30KKworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCit7CisgICAg
QVNTRVJUX1VOVVNFRChtaW1lVHlwZSwgbWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5
IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCisKKyAgICByZXR1cm4gY2Fpcm9fc3Vy
ZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09
IENBSVJPX1NUQVRVU19TVUNDRVNTOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19z
dXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
KQoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2U7CisgICAgaWYgKCFpbWFnZSB8
fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICByZXR1cm4gZW5jb2RlZEltYWdlOworfQorI2Vsc2UKK3N0YXRpYyBi
b29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBHVW5pcXVlT3V0UHRyPGdjaGFyPiYg
YnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKK3sKKyAgICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBp
bWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQaXhidWYgZG9jdW1lbnRhdGlv
bi4KKyAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nZGstcGl4YnVmL3N0YWJsZS9n
ZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1ZmZlcnYKKwor
ICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKTsKKyAg
ICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAmJiB0eXBlICE9ICJ0aWZmIiAm
JiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7CisgICAgaWYgKHR5cGUgPT0gImpwZWci
KSB7CisgICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFscGhhIGNoYW5uZWwuIFRoZSA8
Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11c3QgZW5jb2RlIGEgUG9ydGVy
LUR1ZmYKKyAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVyIGJsYWNrIGZvciBpbWFnZSB0
eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgorICAgICAgICBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiBuZXdTdXJmYWNlOworICAgICAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShz
dXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKKyAgICAgICAgICAgIG5ld1N1
cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgIENBSVJP
X0ZPUk1BVF9SR0IyNCwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93
aWR0aChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
c3RyaWRlKHN1cmZhY2UpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbnRTaXpl
IHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UpOworICAgICAgICAgICAgbmV3U3VyZmFj
ZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9SR0Iy
NCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5nZXQoKSkpOworICAg
ICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNlLCAwLCAw
KTsKKyAgICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICAgICAgfQorICAgICAg
ICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYobmV3U3VyZmFjZS5n
ZXQoKSkpOworICAgIH0gZWxzZQorICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJm
YWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOworICAgIGlmICghcGl4YnVmKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgaWYgKHR5
cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9
IDEuMCkgeworICAgICAgICBTdHJpbmcgcXVhbGl0eVN0cmluZyA9IFN0cmluZzo6bnVtYmVyKHN0
YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCArIDAuNSkpOworICAgICAgICBnZGtfcGl4
YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZl
clNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCAicXVhbGl0eSIsIHF1
YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisgICAgfSBlbHNlCisgICAgICAgIGdk
a19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAm
YnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksIE5VTEwpOwor
CisgICAgcmV0dXJuICFlcnJvcjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3Vy
ZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5KQoreworICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGJ1ZmZlcjsKKyAgICBnc2l6ZSBi
dWZmZXJTaXplOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5
LCBidWZmZXIsIGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKGJ1ZmZlci5nZXQoKSwg
YnVmZmVyU2l6ZSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKyNlbmRpZiAvLyAhUExBVEZP
Uk0oR1RLKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTEwODhkMGVh
NGQzZWVmNDViYzc3MTdmNWM4MjVlYTNkNTBlN2RjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fp
cm8uaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3Vy
ZmFjZV90KiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAppbmRleCAzNTZmMTk2NGQwOTU1MmJkMWEyN2ZjMGQyMjgwOWQ4YTNkYTZiNzViLi44YTYz
N2UxMGExMTA2NmM2MmViZjdlMmNjOGQ0ZTE1NzU4OTgzYTExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApAQCAtMTI3
LDcgKzEyNyw3IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwCiAgICAgbV9zaXplID0gSW50U2l6
ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKICAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZSA9IG1fc2l6ZTsKIAotICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01v
ZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVy
aW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICAgICBpZiAobV9zaXplLndp
ZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKICAgICAgICAgcmV0dXJuOwogCkBA
IC00NDUsNzkgKzQ0NSw2IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpCiAgICAgICAgIGNvbnRl
eHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOwogfQogCi1zdGF0aWMgaW5saW5l
IENGU3RyaW5nUmVmIGpwZWdVVEkoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBM
QVRGT1JNKFdJTikKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBD
RlNUUigicHVibGljLmpwZWciKTsKLSNlbmRpZgotICAgIHJldHVybiBrVVRUeXBlSlBFRzsKLX0K
LSAgICAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgLy8gRklYTUU6IFdoeSBkb2Vz
bid0IGlPUyB1c2UgdGhlIENvcmVTZXJ2aWNlcyB2ZXJzaW9uPwotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0cmluZygpOwot
I2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1bmNsZWFyIGlmIENG
U1RSIGlzIHRocmVhZHNhZmUuCi0KLSAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBm
b3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1F
VHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCi0gICAgLy8gRm9yIG5vdywgb25seSBzdXBw
b3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1Mjg2Pi4KLSAg
ICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5n
Iik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYgPSBDRlNUUigiY29t
LmNvbXB1c2VydmUuZ2lmIik7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBl
ZyIpKQotICAgICAgICByZXR1cm4ganBlZ1VUSSgpOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIpKQotICAgICAgICByZXR1cm4ga1VU
VHlwZUdJRjsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBrVVRUeXBl
UE5HOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1h
Z2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVE
YXRhUmVmIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdl
RGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKLSAgICBpZiAoIWRl
c3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7Ci0gICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJ
KCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewot
ICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFn
ZSBkZXN0aW5hdGlvbi4KLSAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENG
KENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUs
ICYqcXVhbGl0eSkpOwotICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0
aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0g
Y29tcHJlc3Npb25RdWFsaXR5LmdldCgpOwotICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9w
dENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlv
bmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAg
ICB9Ci0KLSAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3Ig
dG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNv
bWUgbWF0aAotICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qg
c2VlbSB0byB3b3JrLgotCi0gICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRp
b24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOwotICAgIHJldHVybiBDR0lt
YWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBT
dHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsK
LSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0
Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKLQotICAg
IHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0K
LQotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCi17
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0
ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7Ci0gICAgcmV0dXJuIGRhdGE7
Ci19Ci0KIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3QKIHsKICAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5
cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCkBAIC01NzgsNzAgKzUwNSw2IEBAIFJl
dGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3ViCiAgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKIH0KIAot
c3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJj
ZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewot
ICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJN
SU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBDR0ltYWdlQWxwaGFJ
bmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKLSAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOwotICAgIFZlY3Rvcjx1aW50OF90PiBwcmVt
dWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkg
ewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhh
dmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgc2l6ZV90
IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7Ci0gICAgICAgIGlm
ICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3JvdyhzaXpl
KTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0
YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgewotICAg
ICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKLSAgICAgICAgICAgIGlmIChh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsg
MF0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtp
ICsgMV0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0
YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOwotICAgICAgICAgICAgICAgIGJ1ZmZl
cltpICsgMV0gPSBkYXRhW2kgKyAxXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0g
ZGF0YVtpICsgMl07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkYXRhQWxw
aGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBhbHBoYSBj
aGFubmVsLgotICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAgIH0K
LQotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJjZS53aWR0
aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndpZHRoKCkg
KiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKLSAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRl
KHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRo
KCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRh
QWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRl
bnREZWZhdWx0KSk7Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0
YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFn
ZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLVN0cmluZyBk
YXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShz
b3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5n
ZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWlu
dDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRh
dGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9y
KGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KIFZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1ZTY5
NmRhMDdlNmUwZGY2ODE0M2Q1OC4uM2UyMzc0YmFkMjRmMDc4N2ZlZjA1NDNjMWI1MWI5MTIwZjEy
MzBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5oCkBAIC0yNiw2ICsyNiw3IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRl
IDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKaW5k
ZXggODlkMDQzOWMyMTBkYjUwMWFjOTM5ZWIxMTQxNDg4MWVlZWM2NWIyNC4uNGYxMzhlNGQ3M2Fj
ZTcyY2MxYWQwZDZhOGE4MGNjYTg3NDZiZGM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsNyArMjYsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmgiCiAKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KICNpbmNsdWRlIDx3dGYvQ2hl
Y2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKworI2lmIFBM
QVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNCArNTIsMTQzIEBAIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VC
dWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQog
ICAgIHJldHVybiAqKHVpbnQ4X3QqKWxhc3RCeXRlOwogfQogCitDRlN0cmluZ1JlZiBqcGVnVVRJ
KCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCisgICAgc3Rh
dGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7
CisjZW5kaWYKKyAgICByZXR1cm4ga1VUVHlwZUpQRUc7Cit9CisKK1JldGFpblB0cjxDRlN0cmlu
Z1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkK
K3sKKyAgICAvLyBGSVhNRTogV2h5IGRvZXNuJ3QgaU9TIHVzZSB0aGUgQ29yZVNlcnZpY2VzIHZl
cnNpb24/CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBVVElGcm9tTUlNRVR5cGUobWlt
ZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7CisjZWxzZQorICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7IC8vIEl0IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhyZWFkc2FmZS4KKworICAgIC8vIEZJ
WE1FOiBBZGQgV2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1cHBvcnRlZCBVVElzIHdoZW4g
YSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4K
KyAgICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHLCBhbmQgR0lGLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzYwOTUyODY+LgorICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRU
eXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdS
ZWYga1VUVHlwZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2ZS5naWYiKTsKKworICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL3BuZyIpKQorICAg
ICAgICByZXR1cm4ga1VUVHlwZVBORzsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UobWltZVR5cGUsICJpbWFnZS9qcGVnIikpCisgICAgICAgIHJldHVybiBqcGVnVVRJKCk7
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2Uv
Z2lmIikpCisgICAgICAgIHJldHVybiBrVVRUeXBlR0lGOworCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGtVVFR5cGVQTkc7CisjZW5kaWYKK30KKworYm9vbCBlbmNvZGVJ
bWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQoreworICAgIGlmICghaW1hZ2UgfHwgIXV0
aSB8fCAhZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkZXN0aW5hdGlv
biA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAx
LCAwKSk7CisgICAgaWYgKCFkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOworICAgIGlmIChD
RkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAq
cXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxp
dHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCisgICAgICAgIGF1dG8gY29tcHJlc3Np
b25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBr
Q0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKKyAgICAgICAgY29uc3Qgdm9pZCoga2V5
ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgICBj
b25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKKyAgICAgICAgaW1h
Z2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVl
LCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZh
bHVlQ2FsbEJhY2tzKSk7CisgICAgfQorCisgICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0
aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3Bl
cnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKKyAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlv
bnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KKworICAgIENHSW1hZ2VEZXN0aW5hdGlv
bkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgp
KTsKKyAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0
KCkpOwogfQorCitzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IEltYWdl
RGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpCit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21J
bWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIENH
SW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFMYXN0OworICAgIHVu
c2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRhKCk7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBq
cGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5l
bCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAg
ICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsK
KyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwcmVtdWx0aXBsaWVkRGF0
YS5ncm93KHNpemUpOworICAgICAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXIgPSBwcmVtdWx0aXBs
aWVkRGF0YS5kYXRhKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSAr
PSA0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGRhdGFbaSArIDNdOworICAgICAg
ICAgICAgaWYgKGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0g
PSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsg
MV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgICAgIGJ1ZmZlcltp
ICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsgMF07CisgICAgICAgICAg
ICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOworICAgICAgICAgICAgICAgIGJ1ZmZl
cltpICsgMl0gPSBkYXRhW2kgKyAyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0OyAvLyBJZ25vcmUg
dGhlIGFscGhhIGNoYW5uZWwuCisgICAgICAgIGRhdGEgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRh
KCk7CisgICAgfQorCisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCA0ICog
c291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOworICAgIGF1dG8gZGF0YVByb3ZpZGVy
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIDQgKiBzb3Vy
Y2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOworICAgIGlmICghZGF0YVByb3ZpZGVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENH
SW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBz
b3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVm
YXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1Jl
bmRlcmluZ0ludGVudERlZmF1bHQpKTsKKworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRh
dGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29k
ZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30K
KworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
Cit7CisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKENGRGF0
YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7CisK
KyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7
Cit9CisKK1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8g
ZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJu
IGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOwor
fQorCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQoreworICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIo
Y2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOworICAgIHJldHVybiBkYXRhOworfQor
CitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRv
IGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVy
biBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aAppbmRleCAxNjEyOGExOWFiZDFmYjgzYWIzMWExMTVjNjg5NTA0OTFkNDE5NTUyLi5iYzg3NzU4
ODc4ZDUxNjNhOTM4YWY4MjQyYzdhNjgwMGVhOWJkMTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI1LDggKzI1LDMxIEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgVVNFKENHKQorCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdl
RGF0YTsKKwogV0VCQ09SRV9FWFBPUlQgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5v
dWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOwogCi19CitDRlN0cmlu
Z1JlZiBqcGVnVVRJKCk7CitSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZl
ck1JTUVUeXBlKGNvbnN0IFN0cmluZyYpOworCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYs
IENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRh
UmVmKTsKKworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKK1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVj
dG9yKENGRGF0YVJlZik7CitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCA0OWU4YzVhMjZl
NzcxYzQyNDk2NzgxOTUyN2E1NjI3MzUzZGY0NDk2Li5kZDM1Y2M2NWIxMzdkODIyYzcwMTUzMmRh
YmQyNDkwMDRiZjJhOWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7CiAgICAgRmxvYXRTaXplIG1f
ZmlsdGVyUmVzb2x1dGlvbjsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9y
bTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFVuYWNjZWxlcmF0ZWQgfTsK
KyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQgfTsKICAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0
ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNWEwZDUwZjhjZTFhYWY2NTM1
ZGVlYzk0MGI4NWRjNTUxN2U0YjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVm
ZmVyR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpbmNs
dWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRl
ICJHZGtDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNp
bmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZh
Y2VfdCogc3VyZmFjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBHVW5pcXVlT3V0UHRyPGdjaGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkK
LXsKLSAgICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBm
cm9tIHRoZSBHZGtQaXhidWYgZG9jdW1lbnRhdGlvbi4KLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVy
Lmdub21lLm9yZy9nZGstcGl4YnVmL3N0YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwj
Z2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1ZmZlcnYKLQotICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUu
c3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKTsKLSAgICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlw
ZSAhPSAicG5nIiAmJiB0eXBlICE9ICJ0aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0g
ImJtcCIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBw
aXhidWY7Ci0gICAgaWYgKHR5cGUgPT0gImpwZWciKSB7Ci0gICAgICAgIC8vIEpQRUcgZG9lc24n
dCBzdXBwb3J0IGFscGhhIGNoYW5uZWwuIFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRv
RGF0YVVSTCgpIG11c3QgZW5jb2RlIGEgUG9ydGVyLUR1ZmYKLSAgICAgICAgLy8gY29tcG9zaXRl
IHNvdXJjZS1vdmVyIGJsYWNrIGZvciBpbWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFs
cGhhLgotICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlOwotICAgICAg
ICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZ
UEVfSU1BR0UpIHsKLSAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1
cmZhY2UpLAotICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9SR0IyNCwKLSAgICAgICAgICAg
ICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgICAg
ICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSksCi0gICAgICAgICAg
ICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1
cmZhY2UpOwotICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9SR0IyNCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKSk7Ci0gICAgICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19j
cmVhdGUobmV3U3VyZmFjZS5nZXQoKSkpOwotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9z
dXJmYWNlKGNyLmdldCgpLCBzdXJmYWNlLCAwLCAwKTsKLSAgICAgICAgICAgIGNhaXJvX3BhaW50
KGNyLmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9T
dXJmYWNlVG9HZGtQaXhidWYobmV3U3VyZmFjZS5nZXQoKSkpOwotICAgIH0gZWxzZQotICAgICAg
ICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOwot
ICAgIGlmICghcGl4YnVmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHVW5pcXVlT3V0
UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgaWYgKHR5cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYg
KnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewotICAgICAgICBTdHJpbmcgcXVh
bGl0eVN0cmluZyA9IFN0cmluZzo6bnVtYmVyKHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAx
MDAuMCArIDAuNSkpOwotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5n
ZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwg
JmVycm9yLm91dFB0cigpLCAicXVhbGl0eSIsIHF1YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwg
TlVMTCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4
YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0
YSgpLCAmZXJyb3Iub3V0UHRyKCksIE5VTEwpOwotCi0gICAgcmV0dXJuICFlcnJvcjsKLX0KLQot
U3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAg
VmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Ci0g
ICAgaWYgKGltYWdlRGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQot
ICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShpbWFnZURhdGEu
ZGF0YSgpLCBpbWFnZURhdGEuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0
YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotVmVjdG9yPHVp
bnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAg
R1VuaXF1ZU91dFB0cjxnY2hhcj4gYnVmZmVyOwotICAgIGdzaXplIGJ1ZmZlclNpemU7Ci0gICAg
aWYgKCFlbmNvZGVJbWFnZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBtaW1lVHlwZSwgcXVhbGl0
eSwgYnVmZmVyLCBidWZmZXJTaXplKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3Rv
cjx1aW50OF90PiBpbWFnZURhdGE7Ci0gICAgaW1hZ2VEYXRhLmFwcGVuZChidWZmZXIuZ2V0KCks
IGJ1ZmZlclNpemUpOwotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJl
LmNwcAppbmRleCA3ZDJjZWZkNjI2MWRlZTJhMzlhODlkMTAxNzAyZWI1MDI1MmY0ZjVlLi5mMDM5
MTM4MDYwZDM0NDM0ZTZjZGRiZjk2ZWE2NGMzMDFhNjM1NTNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3Bw
CkBAIC0zOCw3ICszOCw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMoVGV4
dHVyZU1hcHBlciYsIEdyYXBoaWNzTGF5ZXIqIHNvdXJjZUxheWVyLCBjCiB7CiAgICAgLy8gTWFr
aW5nIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlciBoZXJlIGlzIE9LIGJl
Y2F1c2UgdGhpcyBjb2RlCiAgICAgLy8gaXNuJ3QgdXNlZCBieSBhbnkgcGxhdGZvcm1zIHRoYXQg
cmVzcGVjdCB0aGUgYWNjZWxlcmF0ZWQgYml0LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgp
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0YXJnZXRSZWN0LnNpemUoKSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKaW5kZXggNWU5Y2YwNTc4YTZiODI5ZjBhNmMw
YTAxYjA5ODZlNjAzZDYwNDI4Yy4uYjhlM2IwYmExOWIyY2FkZmQ2YmY3NDk2YmM3YjgyYzUzZTkx
ODA5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcApAQCAtOTEsNyArOTEsNyBAQCBJbWFnZUJ1
ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhYwogICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxl
ZEhlaWdodCk7CiAgICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7CiAKLSAgICBi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkOwor
ICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQ7CiAgICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXpl
LmhlaWdodCgpIDw9IDApCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAppbmRleCBj
YTExYmI4YmEwYjE5MTBjNjI3OTY3ZDRkMjYwYjA0YzY4NDg2NzMxLi41YWM5ZDY2MDZjNDIyMTI0
OGJjNDFkZTkzODljZTVjODdlNGE0MTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcApAQCAtNDU4LDcgKzQ1
OCw3IEBAIEltYWdlQnVmZmVyKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIo
KSBjb25zdAogICAgIGlmIChtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlci5nZXQoKTsKIAotICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNh
cHR1cmVTaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGQ1YjkxYjI2ODZhZTI2
MWViNTNjMDY4OWJlZWM2MmY1NWUzZmI0NTguLjhmNTBlNTc1NzFkN2IzODUwMGVlZDdiY2RhNmIz
YTY0MmFiZjc5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApA
QCAtNjkwNSw3ICs2OTA1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRp
bmdTdHJhdGVneSgpCiAgICAgfQogICAgIAogICAgIGVuc3VyZUxheWVyRmlsdGVycygpOwotICAg
IG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFj
dG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkg
PyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOworICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0
ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0
dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogfQogCiB2b2lkIFJlbmRl
ckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlLmNwcAppbmRleCA5MTQyMDI5YTJkNDQ2NGRmNWNiN2IzYTQ0MTkzYmUyODYzYzFl
ZDJhLi44NTFhODY2Nzg5YjQ4MzU0MjJjNTdhNDFkZGE3NWEwYmNhZDdkNjc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMTgxLDcgKzE4MSw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFn
ZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAgSW50UmVjdCBtYXJnaW5SZWN0ID0gc25hcHBlZElu
dFJlY3QobWFyZ2luUik7CiAgICAgYXV0byBpbnRlcnZhbHMgPSBtYWtlVW5pcXVlPFJhc3RlclNo
YXBlSW50ZXJ2YWxzPihtYXJnaW5SZWN0LmhlaWdodCgpLCAtbWFyZ2luUmVjdC55KCkpOwogICAg
IC8vIEZJWE1FICgxNDk0MjApOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9u
YWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxl
cmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOwogCiAgICAgaWYgKGltYWdlQnVmZmVyKSB7CiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyLmNwcAppbmRleCAwOGU0OTI4MmFkOTNiY2FjZDI5Nzc1Yjg0NmYwNTlkNWEyY2E3MTNlLi4x
ZDc3YjYzYzZmZTI4MzEyYWUxMWVkODI1YjUyM2FhY2U3MTdlYzVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFw
cGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGMKIAogICAgIGlm
IChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0ltYWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkp
IHsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ2OSk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBu
b3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUg
Y29udGV4dCBicmVha3MgbmVzdGVkIGNsaXBwaW5nLCB0aG91Z2guCi0gICAgICAgIGNsaXBwZXJN
YXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50
UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNSR0IsIFVuYWNjZWxlcmF0ZWQs
ICZjb250ZXh0KTsKKyAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29s
b3JTcGFjZTo6U1JHQiwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOwog
ICAgICAgICBpZiAoIWNsaXBwZXJNYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNzViNTliNjNjM2U0OTYwYmQ0ZTNiZGJkODc0OTJhOTMy
ZjQzMTYxYi4uZGRkYmE0MzJkMzc5MzdlYjA0M2E2Y2MxN2JmOTMyZTZiNzg5NTQyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQog
ICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQo
KSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJl
ZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9
IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxl
cmF0ZWQgOiBVbmFjY2VsZXJhdGVkOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9
IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogICAg
IGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVm
ZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29sb3JT
cGFjZTo6TGluZWFyUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0KTsKICAgICBpZiAoIXNvdXJj
ZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250
YWlucygmcmVuZGVyZXIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKaW5kZXggMTc4N2UxOGMyZGNlZjViZGY5
OTI0NzRjZmMwMjJiNTE2NmFkNTg0OC4uMTIwYzU3YjU2OTc4NzIyMDQ2NWJjNmFlYzBiNTgwNGM0
NTVjZDgyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZU1hc2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
Y29uc3QgUmVuZGUKICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5
bGUoKS5zdmdTdHlsZSgpOwogICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdmdTdHls
ZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/
IENvbG9yU3BhY2U6OkxpbmVhclJHQiA6IENvbG9yU3BhY2U6OlNSR0I7CiAgICAgICAgIC8vIEZJ
WE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9u
YWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIGFs
cGhhIG1hc2tpbmcsIHRob3VnaC4KLSAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRl
VHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkLCBjb250ZXh0KTsKKyAgICAgICAg
bWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBjb250ZXh0KTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRh
LT5tYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4IGI4MjE0MTFhZGU3NzUwODU2MTY4ODU2ZWQy
MmI2MmVhNmI1Y2QzZDkuLjk3ODY3YWFkM2MyN2I1YjUzOGQzYTc5ZmI0OTVkZGQ0ZjBmNDNkOTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcApAQCAtMjE4LDcgKzIx
OCw3IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZShjb25zdCBHcmFwaGljc0NvbnRleHQqKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IC8vIENhaXJvIGRvZXMgbm90IHVzZSB0aGUgYWNjZWxlcmF0ZWQgZHJhd2luZyBmbGFnLCBzbyBp
dCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUg
aW1hZ2UKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQu
bW0KaW5kZXggZWYwMzUwMzQyYmI4MjI0NmNkMTlmMzU0ZDliY2MwMjkxZjI5MDQzZC4uMjQwN2Yx
MDY5YjU3ZmJmNjU5NDg4NzU0MTI4Y2U4ZmFiMWVjYmJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVD
bGllbnQubW0KQEAgLTIwMiw3ICsyMDIsNyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gV2ViQ29udGV4
dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbQogICAg
ICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gVGhpcyBpcyBlZmZlY3RpdmVseSBhIHNuYXBzaG90
LCBhbmQgd2lsbCBiZSBwYWludGVkIGluIGFuIHVuYWNjZWxlcmF0ZWQgZmFzaGlvbiBpbiBsaW5l
IHdpdGggRnJhbWVTbmFwc2hvdHRpbmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVk
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbmlsOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388309</attachid>
            <date>2020-01-21 09:33:47 -0800</date>
            <delta_ts>2020-01-21 17:20:50 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>ImageBuffer-Pacthes-02.patch</filename>
            <type>text/plain</type>
            <size>33587</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ODZhMTk3ZjU2Yy4uZWNmMmJiYWQ0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAyMC0wMS0yMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgSW1hZ2VCdWZmZXIgdXRpbGl0aWVzIGZ1bmN0aW9u
IHRvIHNlcGFyYXRlIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDY1MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGVzZSB1dGlsaXRpZXMgZnVuY3Rpb24gYXJlIG1lcmVseSByZWxhdGVkIHRv
IHRoZSBJbWFnZURhdGEuCisKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzQ2Fp
cm8udHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OndyaXRlRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6ZGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDYWlyby5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpwZWdVVEkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6ZGF0YVVSTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpkYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anBlZ1VUSSk6CisgICAgICAg
IChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjplbmNvZGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VC
dWZmZXJHdGsuY3BwOiBSZW1vdmVkLgorCiAyMDIwLTAxLTIwICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBSZW5kZXJpbmdNb2RlIGFu
ZCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGVudW0gY2xhc3NlcyBhbmQgbW92ZSB0aGVtIHRvIHNl
cGFyYXRlIGhlYWRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKaW5kZXggNzIwNWUyMGQzYWIuLjk3ZjMz
NmU3YzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtODQsNyArODQsNiBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRGlzcGxheVJl
ZnJlc2hNb25pdG9yR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0
aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwCi1wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VH
dGsuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJv
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBiODQ0
NDcxZDdhOC4uZjVlNzY1MDA2OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCkBAIC04Myw2ICs4MywxMCBAQAogI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5oPgogI2VuZGlmCiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKEhUTUxDYW52YXNFbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDQyMWRmYmQ5NTc1Li5mOTBkMjQ2ZWM1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CkBAIC0zMSw2ICszMSw3IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50
UmVjdENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDYyZDBhNWIzMDU2Li4y
NmRmN2NkZDlmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCkBAIC0xOTAsOSArMTkwLDQgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotI2lm
IFVTRShDRykKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci1WZWN0b3I8dWludDhfdD4gZGF0
YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpOwotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAKaW5kZXggY2NjNWY5Y2RiMDEuLjkxYzBhMWE5ZTE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgogI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBhdHRlcm4uaCIKQEAgLTc2LDcgKzc3LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJ
bnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCkBAIC02NTQsMjEgKzY1
NCw2IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpCiAgICAgfQogfQogCi0jaWYgIVBMQVRGT1JN
KEdUSykKLXN0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1dCwg
Y29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgaW50IGxlbmd0aCkKLXsKLSAgICBp
ZiAoIXJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPHVpbnQ4X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5k
KGRhdGEsIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBDQUlST19TVEFUVVNfV1JJVEVfRVJST1I7
Ci0gICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgYm9vbCBlbmNv
ZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBW
ZWN0b3I8dWludDhfdD4qIG91dHB1dCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBt
aW1lVHlwZSA9PSAiaW1hZ2UvcG5nIik7IC8vIE9ubHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQg
Zm9yIG5vdy4KLQotICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0o
aW1hZ2UsIHdyaXRlRnVuY3Rpb24sIG91dHB1dCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Ci19
Ci0KIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAogewog
ICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxp
dHkpOwpAQCAtNjgxLDIxICs2NjYsMTMgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LAogICAgIHJl
dHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKIH0KIAot
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPikgY29uc3QKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3QKIHsKICAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQogICAgIGNhaXJvX3N1cmZhY2VfdCogaW1h
Z2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7
Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlOwotICAgIGlmICghaW1hZ2UgfHwg
IWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwgJmVuY29kZWRJbWFnZSkpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0KLSAgICByZXR1cm4gZW5jb2RlZEltYWdlOworICAgIHJldHVybiBkYXRhKGlt
YWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAKLSNlbmRpZgotCiAjaWYgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIHZvaWQgSW1h
Z2VCdWZmZXJEYXRhOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJl
TWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ2Fpcm8uY3BwCmluZGV4IGU2OWRlMjliYjJkLi41ZTYzYzIzYTkwMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGls
aXRpZXNDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHpl
Y2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0Nh
aXJvLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgor
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNs
dWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShHVEspCitzdGF0aWMgY2Fp
cm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIXJlaW50ZXJwcmV0X2Nhc3Q8
VmVjdG9yPHVpbnQ4X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEsIGxlbmd0aCkpCisgICAg
ICAgIHJldHVybiBDQUlST19TVEFUVVNfV1JJVEVfRVJST1I7CisgICAgcmV0dXJuIENBSVJPX1NU
QVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNl
X3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8dWludDhfdD4qIG91dHB1
dCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlwZSA9PSAiaW1hZ2UvcG5n
Iik7IC8vIE9ubHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KKworICAgIHJldHVy
biBjYWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2UsIHdyaXRlRnVuY3Rpb24s
IG91dHB1dCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBk
YXRhKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4pCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZTsKKyAgICBp
ZiAoIWltYWdlIHx8ICFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsICZlbmNvZGVkSW1hZ2Up
KQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBlbmNvZGVkSW1hZ2U7Cit9CisjZWxz
ZQorc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQ
dHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQoreworICAgIC8vIExpc3Qgb2Yg
c3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBk
b2N1bWVudGF0aW9uLgorICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhi
dWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8t
YnVmZmVydgorCisgICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJp
bWFnZSIpOworICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUg
IT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsKKyAgICBpZiAodHlw
ZSA9PSAianBlZyIpIHsKKyAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hh
bm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNv
ZGUgYSBQb3J0ZXItRHVmZgorICAgICAgICAvLyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sg
Zm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCisgICAgICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7CisgICAgICAgIGlmIChjYWlyb19zdXJmYWNl
X2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgeworICAgICAg
ICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zv
cl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCisgICAgICAgICAg
ICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZSk7CisgICAgICAgICAg
ICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9f
Rk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAg
IFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdl
dCgpKSk7CisgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1
cmZhY2UsIDAsIDApOworICAgICAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAg
ICB9CisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1Zihu
ZXdTdXJmYWNlLmdldCgpKSk7CisgICAgfSBlbHNlCisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1Jl
ZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7CisgICAgaWYgKCFwaXhidWYpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsK
KyAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYg
KnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5n
OjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41KSk7CisgICAg
ICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0
cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksICJx
dWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxMKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIu
b3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIo
KSwgTlVMTCk7CisKKyAgICByZXR1cm4gIWVycm9yOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0
YShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gYnVmZmVyOwor
ICAgIGdzaXplIGJ1ZmZlclNpemU7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5
cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGltYWdlRGF0YS5hcHBlbmQoYnVm
ZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorI2VuZGlm
IC8vICFQTEFURk9STShHVEspCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaAppbmRleCBlNjlk
ZTI5YmIyZC4uZTEwODhkMGVhNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJv
LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNhaXJvX3N1cmZh
Y2VfdCosIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAKaW5kZXggOTQ3ZmY5MzIwYjYuLjhhNjM3ZTEwYTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApAQCAtNDQ1LDc5
ICs0NDUsNiBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaQogICAgICAgICBjb250ZXh0KCkuZmls
bFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKIH0KIAotc3RhdGljIGlubGluZSBDRlN0cmlu
Z1JlZiBqcGVnVVRJKCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShX
SU4pCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1
YmxpYy5qcGVnIik7Ci0jZW5kaWYKLSAgICByZXR1cm4ga1VUVHlwZUpQRUc7Ci19Ci0gICAgCi1z
dGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCBpT1Mg
dXNlIHRoZSBDb3JlU2VydmljZXMgdmVyc2lvbj8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0
dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSNlbHNlCi0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0
aHJlYWRzYWZlLgotCi0gICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0
aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8g
VVRJIHJlbGlhYmx5IGlzIGZvdW5kLgotICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcs
IEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCi0gICAgc3RhdGlj
IGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwotICAg
IHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNl
cnZlLmdpZiIpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVU
eXBlLCAiaW1hZ2UvcG5nIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwotICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKLSAg
ICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7
Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ga1VUVHlwZVBORzsKLSNl
bmRpZgotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0
cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBk
YXRhKQotewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0
aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlv
bikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gaW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBx
dWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAg
Ly8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGlu
YXRpb24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJl
ckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxp
dHkpKTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5
Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNz
aW9uUXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQotCi0g
ICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNr
IGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgK
LSAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8g
d29yay4KLQotICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgp
LCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZURlc3Rp
bmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwotfQotCi1zdGF0aWMgU3RyaW5nIGRh
dGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgVmVj
dG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIo
ZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4g
ImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLXN0YXRp
YyBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQotewotICAgIFZl
Y3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZE
YXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOwotICAgIHJldHVybiBkYXRhOwotfQotCiBT
dHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFs
aXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQpAQCAtNTc4LDcwICs1MDUsNiBAQCBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YgogICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7CiB9CiAKLXN0YXRpYyBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBBU1NF
UlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rpbmco
bWltZVR5cGUpKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUo
bWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRh
QWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9
IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGll
ZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAg
ICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1h
bnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHNpemVfdCBzaXplID0g
NCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOwotICAgICAgICBpZiAoIXByZW11
bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107Ci0gICAgICAgICAgICBpZiAoYWxwaGEgIT0g
MjU1KSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxw
aGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICog
YWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJd
ICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJ1
ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFd
ID0gZGF0YVtpICsgMV07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSAr
IDJdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGF0YUFscGhhSW5mbyA9
IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4K
LSAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICB9Ci0KLSAgICB2
ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNv
dXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNl
LmhlaWdodCgpLCAwKSk7Ci0gICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uu
d2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdC
Q29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5m
bywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCkpOwotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCks
IHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1TdHJpbmcgZGF0YVVSTChj
b25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBt
aW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1p
bWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IGRh
dGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJj
ZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdl
dCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCiBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6
OnRvQkdSQURhdGEoKSBjb25zdAogewogICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKaW5kZXggODlkMDQzOWMyMTAuLjRm
MTM4ZTRkNzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiwxOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIK
IAorI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUg
PEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5j
bHVkZSAiVVRJVXRpbGl0aWVzLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00MSw0ICs1MiwxNDMgQEAgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNv
bnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCiAgICAgcmV0dXJuICoodWludDhf
dCopbGFzdEJ5dGU7CiB9CiAKK0NGU3RyaW5nUmVmIGpwZWdVVEkoKQoreworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdS
ZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKKyNlbmRpZgorICAgIHJldHVy
biBrVVRUeXBlSlBFRzsKK30KKworUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VC
dWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIC8vIEZJWE1FOiBX
aHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2VydmljZXMgdmVyc2lvbj8KKyNpZiBQTEFURk9S
TShNQUMpCisgICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJp
bmcoKTsKKyNlbHNlCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVh
ciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgorCisgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1
cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZy
b20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgorICAgIC8vIEZvciBub3csIG9u
bHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4
Nj4uCisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVi
bGljLnBuZyIpOworICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZT
VFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCisgICAgICAgIHJldHVybiBrVVRUeXBl
UE5HOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImlt
YWdlL2pwZWciKSkKKyAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKKyAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKKyAgICAgICAgcmV0
dXJuIGtVVFR5cGVHSUY7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
a1VUVHlwZVBORzsKKyNlbmRpZgorfQorCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1h
Z2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVE
YXRhUmVmIGRhdGEpCit7CisgICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdl
RGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKKyAgICBpZiAoIWRl
c3RpbmF0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7CisgICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJ
KCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewor
ICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFn
ZSBkZXN0aW5hdGlvbi4KKyAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENG
KENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUs
ICYqcXVhbGl0eSkpOworICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0
aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0g
Y29tcHJlc3Npb25RdWFsaXR5LmdldCgpOworICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9w
dENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlv
bmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAg
ICB9CisKKyAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3Ig
dG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNv
bWUgbWF0aAorICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qg
c2VlbSB0byB3b3JrLgorCisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRp
b24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOworICAgIHJldHVybiBDR0lt
YWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiB9CisKK3N0YXRpYyBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBBU1NF
UlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rpbmco
bWltZVR5cGUpKTsKKworICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUo
bWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRh
QWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7CisgICAgdW5zaWduZWQgY2hhciogZGF0YSA9
IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGll
ZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAg
ICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1h
bnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIHNpemVfdCBzaXplID0g
NCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOworICAgICAgICBpZiAoIXByZW11
bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7CisgICAg
ICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107CisgICAgICAgICAgICBpZiAoYWxwaGEgIT0g
MjU1KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxw
aGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICog
YWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJd
ICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1
ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFd
ID0gZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSAr
IDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZGF0YUFscGhhSW5mbyA9
IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4K
KyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICB9CisKKyAgICB2
ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNv
dXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNl
LmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uu
d2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdC
Q29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5m
bywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCkpOworCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCks
IHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitTdHJpbmcgZGF0YVVSTChD
RkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBWZWN0b3I8Y2hh
cj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwg
Q0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKKworICAgIHJldHVybiAiZGF0YToi
ICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30KKworU3RyaW5nIGRhdGFV
UkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJj
ZSwgbWltZVR5cGUsIHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgp
LCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGE7CisgICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRM
ZW5ndGgoY2ZEYXRhKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBk
YXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3Vy
Y2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5n
ZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCmluZGV4IDE2MTI4YTE5YWJk
Li5iYzg3NzU4ODc4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw4ICsyNSwzMSBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2lmIFVTRShDRykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIFdFQkNPUkVfRVhQ
T1JUIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZm
ZXIsIHNpemVfdCBidWZmZXJTaXplKTsKIAotfQorQ0ZTdHJpbmdSZWYganBlZ1VUSSgpOworUmV0
YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJp
bmcmKTsKKworYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiB1dGksIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZik7CisKK1N0cmluZyBkYXRh
VVJMKENGRGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CitTdHJpbmcgZGF0YVVSTChj
b25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpOworCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYpOworVmVj
dG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGFiNWEwZDUwZjhjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTA0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z3Rr
L2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJv
b2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2NoYXI+JiBi
dWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQotewotICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGlt
YWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9u
LgotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dk
ay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgotCi0g
ICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOwotICAg
IGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYm
IHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIp
IHsKLSAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxj
YW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXIt
RHVmZgotICAgICAgICAvLyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5
cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCi0gICAgICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IG5ld1N1cmZhY2U7Ci0gICAgICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1
cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgewotICAgICAgICAgICAgbmV3U3Vy
ZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgQ0FJUk9f
Rk9STUFUX1JHQjI0LAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dp
ZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hl
aWdodChzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9z
dHJpZGUoc3VyZmFjZSkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUg
c2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZSk7Ci0gICAgICAgICAgICBuZXdTdXJmYWNl
ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JHQjI0
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIFJlZlB0cjxjYWly
b190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAg
ICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDAp
OwotICAgICAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAg
IHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJmYWNlLmdl
dCgpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZh
Y2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7Ci0gICAgaWYgKCFwaXhidWYpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBpZiAodHlw
ZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0g
MS4wKSB7Ci0gICAgICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5nOjpudW1iZXIoc3Rh
dGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41KSk7Ci0gICAgICAgIGdka19waXhi
dWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVy
U2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5IiwgcXVh
bGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxMKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2Rr
X3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZi
dWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgTlVMTCk7Ci0K
LSAgICByZXR1cm4gIWVycm9yOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhID0gdG9E
YXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoaW1hZ2VEYXRhLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0g
ICAgYmFzZTY0RW5jb2RlKGltYWdlRGF0YS5kYXRhKCksIGltYWdlRGF0YS5zaXplKCksIGJhc2U2
NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBi
YXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBidWZmZXI7Ci0g
ICAgZ3NpemUgYnVmZmVyU2l6ZTsKLSAgICBpZiAoIWVuY29kZUltYWdlKG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCksIG1pbWVUeXBlLCBxdWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNpemUpKQotICAgICAg
ICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpbWFn
ZURhdGEuYXBwZW5kKGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIGltYWdl
RGF0YTsKLX0KLQotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388380</attachid>
            <date>2020-01-21 17:20:52 -0800</date>
            <delta_ts>2020-01-21 18:44:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206519-20200121172052.patch</filename>
            <type>text/plain</type>
            <size>33620</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDg5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTAxLTIxICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBJbWFn
ZUJ1ZmZlciB1dGlsaXRpZXMgZnVuY3Rpb24gdG8gc2VwYXJhdGUgZmlsZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjUxOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgVGhlc2UgdXRpbGl0aWVzIGZ1bmN0aW9u
IGFyZSBtZXJlbHkgcmVsYXRlZCB0byB0aGUgSW1hZ2VEYXRhLgorCisgICAgICAgICogU291cmNl
c0dUSy50eHQ6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjp3cml0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpqcGVnVVRJKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnV0aUZyb21JbWFnZUJ1ZmZl
ck1JTUVUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRhdGFVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6ZGF0YVZlY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmpwZWdVVEkpOgorICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Y2ZEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
ZGF0YVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcDogUmVtb3ZlZC4KKwogMjAyMC0wMS0y
MSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAg
IE1ha2UgUmVuZGVyaW5nTW9kZSBhbmQgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBlbnVtIGNsYXNz
ZXMgYW5kIG1vdmUgdGhlbSB0byBzZXBhcmF0ZSBoZWFkZXJzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzR1RLLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RL
LnR4dAkocmV2aXNpb24gMjU0ODkzKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Nv
bG9yR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckd0
ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdl
QnVmZmVyR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcAogCiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNTQ4OTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsMTAgQEAKICNpbmNsdWRlIDxwYWwvY2YvQ29yZU1lZGlhU29mdExp
bmsuaD4KICNlbmRpZgogCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChIVE1MQ2FudmFzRWxlbWVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NvdXJjZXNDYWlyby50eHQJKHJldmlzaW9uIDI1NDg5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0RwogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RD
YWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI1NDg5MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5MCw5ICsxOTAsNCBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi0jaWYg
VVNFKENHKQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLVZlY3Rvcjx1aW50OF90PiBkYXRh
KGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSk7Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDI1NDg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5o
IgpAQCAtNzYsNyArNzcsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNp
emUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKQEAgLTY1NCwyMSArNjU0LDYgQEAgdm9p
ZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbgogICAgIH0KIH0KIAotI2lmICFQ
TEFURk9STShHVEspCi1zdGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBv
dXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17
Ci0gICAgaWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1dCktPnRy
eUFwcGVuZChkYXRhLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRF
X0VSUk9SOwotICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGJv
b2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChtaW1l
VHlwZSwgbWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQgaXMgc3Vw
cG9ydGVkIGZvciBub3cuCi0KLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdf
c3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09IENBSVJPX1NUQVRVU19TVUND
RVNTOwotfQotCiBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKIHsKICAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBl
LCBxdWFsaXR5KTsKQEAgLTY4MSwyMSArNjY2LDEzIEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9E
YXRhVVJMKGNvbnN0IFN0cmkKICAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9E
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4pIGNvbnN0CitWZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0CiB7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVn
aXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0K
ICAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCku
cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJ
bWFnZTsKLSAgICBpZiAoIWltYWdlIHx8ICFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsICZl
bmNvZGVkSW1hZ2UpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIGVuY29kZWRJ
bWFnZTsKKyAgICByZXR1cm4gZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOwogfQogCi0j
ZW5kaWYKLQogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmICFVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCiB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIg
PHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmls
ZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NhaXJvLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNp
bmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShHVEspCitzdGF0aWMg
Y2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQsIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIXJlaW50ZXJwcmV0X2Nh
c3Q8VmVjdG9yPHVpbnQ4X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEsIGxlbmd0aCkpCisg
ICAgICAgIHJldHVybiBDQUlST19TVEFUVVNfV1JJVEVfRVJST1I7CisgICAgcmV0dXJuIENBSVJP
X1NUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJm
YWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8dWludDhfdD4qIG91
dHB1dCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlwZSA9PSAiaW1hZ2Uv
cG5nIik7IC8vIE9ubHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KKworICAgIHJl
dHVybiBjYWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2UsIHdyaXRlRnVuY3Rp
b24sIG91dHB1dCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4pCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZTsKKyAg
ICBpZiAoIWltYWdlIHx8ICFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsICZlbmNvZGVkSW1h
Z2UpKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBlbmNvZGVkSW1hZ2U7Cit9Cisj
ZWxzZQorc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVP
dXRQdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQoreworICAgIC8vIExpc3Qg
b2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1
ZiBkb2N1bWVudGF0aW9uLgorICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1w
aXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUt
dG8tYnVmZmVydgorCisgICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9m
ICJpbWFnZSIpOworICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5
cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsKKyAgICBpZiAo
dHlwZSA9PSAianBlZyIpIHsKKyAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEg
Y2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBl
bmNvZGUgYSBQb3J0ZXItRHVmZgorICAgICAgICAvLyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxh
Y2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCisgICAgICAgIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7CisgICAgICAgIGlmIChjYWlyb19zdXJm
YWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgeworICAg
ICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCisgICAgICAg
ICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZSk7CisgICAgICAg
ICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJ
Uk9fRk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAg
ICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNl
LmdldCgpKSk7CisgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCks
IHN1cmZhY2UsIDAsIDApOworICAgICAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAg
ICAgICB9CisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1
ZihuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgfSBlbHNlCisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0
R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7CisgICAgaWYgKCFwaXhidWYp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJv
cjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAg
JiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3Ry
aW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41KSk7Cisg
ICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91
dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCks
ICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxMKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZm
ZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQ
dHIoKSwgTlVMTCk7CisKKyAgICByZXR1cm4gIWVycm9yOworfQorCitWZWN0b3I8dWludDhfdD4g
ZGF0YShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gYnVmZmVy
OworICAgIGdzaXplIGJ1ZmZlclNpemU7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZSwgbWlt
ZVR5cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGltYWdlRGF0YS5hcHBlbmQo
YnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorI2Vu
ZGlmIC8vICFQTEFURk9STShHVEspCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShDQUlSTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNo
IE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShDQUlSTykKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNp
b24gMjU0ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSw3OSArNDQ1LDYgQEAgdm9pZCBJbWFn
ZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbgogICAgICAgICBjb250ZXh0KCkuZmlsbFJl
Y3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKIH0KIAotc3RhdGljIGlubGluZSBDRlN0cmluZ1Jl
ZiBqcGVnVVRJKCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4p
Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1Ymxp
Yy5qcGVnIik7Ci0jZW5kaWYKLSAgICByZXR1cm4ga1VUVHlwZUpQRUc7Ci19Ci0gICAgCi1zdGF0
aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCBpT1MgdXNl
IHRoZSBDb3JlU2VydmljZXMgdmVyc2lvbj8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJu
IFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSNlbHNlCi0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJl
YWRzYWZlLgotCi0gICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUg
c3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJ
IHJlbGlhYmx5IGlzIGZvdW5kLgotICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQ
RUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCi0gICAgc3RhdGljIGNv
bnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwotICAgIHN0
YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZl
LmdpZiIpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBl
LCAiaW1hZ2UvcG5nIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwotICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKLSAgICAg
ICAgcmV0dXJuIGpwZWdVVEkoKTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7Ci0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ga1VUVHlwZVBORzsKLSNlbmRp
ZgotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmlu
Z1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRh
KQotewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9u
Q3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
aW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFs
aXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgLy8g
QXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRp
b24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkp
KTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29t
cHJlc3Npb25RdWFsaXR5OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9u
UXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQotCi0gICAg
Ly8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZv
ciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKLSAg
ICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29y
ay4KLQotICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBp
bWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0
aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwotfQotCi1zdGF0aWMgU3RyaW5nIGRhdGFV
UkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgVmVjdG9y
PGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0
YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRh
dGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLXN0YXRpYyBW
ZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQotewotICAgIFZlY3Rv
cjx1aW50OF90PiBkYXRhOwotICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRh
KSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOwotICAgIHJldHVybiBkYXRhOwotfQotCiBTdHJp
bmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0CiB7CiAgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5
LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQpAQCAtNTc4LDcwICs1MDUsNiBAQCBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhCiAgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsK
IH0KIAotc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEm
IHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KQotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VC
dWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBDR0ltYWdl
QWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKLSAgICB1bnNpZ25l
ZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOwotICAgIFZlY3Rvcjx1aW50OF90
PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VU
SSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNv
IHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAg
c2l6ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7Ci0gICAg
ICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3Jv
dyhzaXplKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gcHJlbXVsdGlwbGllZERh
dGEuZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkg
ewotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKLSAgICAgICAgICAg
IGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0
YVtpICsgMF0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0g
ZGF0YVtpICsgMV0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJd
ID0gZGF0YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOwotICAgICAgICAgICAgICAg
IGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSAr
IDJdID0gZGF0YVtpICsgMl07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBk
YXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBh
bHBoYSBjaGFubmVsLgotICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwot
ICAgIH0KLQotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJj
ZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFk
b3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndp
ZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKLSAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlKHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNl
LndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQg
fCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSk7Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFn
ZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLVN0
cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNm
RGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwo
ZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEg
PSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRh
VmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KIFZlY3Rvcjx1aW50OF90
PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJ
KHJldmlzaW9uIDI1NDg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDE4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5o
IgogCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVk
ZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNp
bmNsdWRlICJVVElVdGlsaXRpZXMuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQxLDQgKzUyLDE0MyBAQCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2go
Y29uCiAgICAgcmV0dXJuICoodWludDhfdCopbGFzdEJ5dGU7CiB9CiAKK0NGU3RyaW5nUmVmIGpw
ZWdVVEkoKQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKKyAg
ICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpw
ZWciKTsKKyNlbmRpZgorICAgIHJldHVybiBrVVRUeXBlSlBFRzsKIH0KKworUmV0YWluUHRyPENG
U3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQoreworICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2Vydmlj
ZXMgdmVyc2lvbj8KKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIFVUSUZyb21NSU1FVHlw
ZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyNlbHNlCisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgorCisgICAg
Ly8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMg
d2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZv
dW5kLgorICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNl
ZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVm
IGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOworICAgIHN0YXRpYyBjb25zdCBDRlN0
cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOworCisgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikp
CisgICAgICAgIHJldHVybiBrVVRUeXBlUE5HOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKKyAgICAgICAgcmV0dXJuIGpwZWdV
VEkoKTsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJp
bWFnZS9naWYiKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga1VUVHlwZVBORzsKKyNlbmRpZgorfQorCitib29sIGVu
Y29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCit7CisgICAgaWYgKCFpbWFnZSB8
fCAhdXRpIHx8ICFkYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRlc3Rp
bmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1
dGksIDEsIDApKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7CisgICAg
aWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4w
ICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24g
cXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KKyAgICAgICAgYXV0byBjb21w
cmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOworICAgICAgICBjb25zdCB2b2lk
KiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7CisgICAg
ICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOworICAgICAg
ICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAm
dmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICB9CisKKyAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVz
dGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdl
UHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAorICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1
bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgorCisgICAgQ0dJbWFnZURlc3Rp
bmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMu
Z2V0KCkpOworICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlv
bi5nZXQoKSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3Qg
SW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIGF1dG8gdXRpID0gdXRp
RnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisg
ICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Cisg
ICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKKyAgICBWZWN0
b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0
KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBj
aGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2su
CisgICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdo
dCgpOworICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShz
aXplKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHByZW11bHRpcGxp
ZWREYXRhLmdyb3coc2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11
bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyBpICs9IDQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107Cisg
ICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kg
KyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVy
W2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVm
ZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKKyAgICAg
ICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAg
YnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIEln
bm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KKyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRh
LmRhdGEoKTsKKyAgICB9CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEs
IDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBkYXRhUHJv
dmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAq
IHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFkYXRhUHJv
dmlkZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbWFnZSA9IGFkb3B0
Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwg
NCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3Jk
ZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwg
a0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENG
KENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICgh
ZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgp
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEp
OworfQorCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUo
Q0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRh
KTsKKworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKK30KKworU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAo
YXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQorICAgICAgICBy
ZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwi
X3M7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCit7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0
ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7CisgICAgcmV0dXJuIGRhdGE7
Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYg
KGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAg
cmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaAkocmV2aXNpb24gMjU0ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1
LDggKzI1LDMxIEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlRGF0YTsK
KwogV0VCQ09SRV9FWFBPUlQgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNv
bnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOwogCi19CitDRlN0cmluZ1JlZiBq
cGVnVVRJKCk7CitSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVU
eXBlKGNvbnN0IFN0cmluZyYpOworCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3Ry
aW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsK
KworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKK1N0
cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENG
RGF0YVJlZik7CitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAJKHJl
dmlzaW9uIDI1NDg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9J
bWFnZUJ1ZmZlckd0ay5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgot
Ci0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0j
aW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8
d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgR1VuaXF1ZU91dFB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZl
clNpemUpCi17Ci0gICAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMg
Y29tZXMgZnJvbSB0aGUgR2RrUGl4YnVmIGRvY3VtZW50YXRpb24uCi0gICAgLy8gaHR0cDovL2Rl
dmVsb3Blci5nbm9tZS5vcmcvZ2RrLXBpeGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmlu
Zy5odG1sI2dkay1waXhidWYtc2F2ZS10by1idWZmZXJ2Ci0KLSAgICBTdHJpbmcgdHlwZSA9IG1p
bWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIik7Ci0gICAgaWYgKHR5cGUgIT0gImpwZWci
ICYmIHR5cGUgIT0gInBuZyIgJiYgdHlwZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0
eXBlICE9ICJibXAiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdka1Bp
eGJ1Zj4gcGl4YnVmOwotICAgIGlmICh0eXBlID09ICJqcGVnIikgewotICAgICAgICAvLyBKUEVH
IGRvZXNuJ3Qgc3VwcG9ydCBhbHBoYSBjaGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMg
dGhhdCB0b0RhdGFVUkwoKSBtdXN0IGVuY29kZSBhIFBvcnRlci1EdWZmCi0gICAgICAgIC8vIGNv
bXBvc2l0ZSBzb3VyY2Utb3ZlciBibGFjayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3Vw
cG9ydCBhbHBoYS4KLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZTsK
LSAgICAgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VS
RkFDRV9UWVBFX0lNQUdFKSB7Ci0gICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
ZGF0YShzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCi0gICAg
ICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAg
ICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAotICAg
ICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSkpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNl
U2l6ZShzdXJmYWNlKTsKLSAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfUkdCMjQsIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYo
Y2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9z
b3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgICAgICAgICBjYWly
b19wYWludChjci5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVm
KGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKHN1cmZh
Y2UpKTsKLSAgICBpZiAoIXBpeGJ1ZikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1Vu
aXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFs
aXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgU3Ry
aW5nIHF1YWxpdHlTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCpxdWFs
aXR5ICogMTAwLjAgKyAwLjUpKTsKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihw
aXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5k
YXRhKCksICZlcnJvci5vdXRQdHIoKSwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5k
YXRhKCksIE5VTEwpOwotICAgIH0gZWxzZQotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVm
ZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRm
OCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCBOVUxMKTsKLQotICAgIHJldHVybiAhZXJyb3I7
Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAot
ewotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGEgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxp
dHkpOwotICAgIGlmIChpbWFnZURhdGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6
LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoaW1h
Z2VEYXRhLmRhdGEoKSwgaW1hZ2VEYXRhLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1
cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsK
LQotICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGJ1ZmZlcjsKLSAgICBnc2l6ZSBidWZmZXJTaXpl
OwotICAgIGlmICghZW5jb2RlSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbWltZVR5cGUs
IHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAg
ICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwotICAgIGltYWdlRGF0YS5hcHBlbmQoYnVmZmVy
LmdldCgpLCBidWZmZXJTaXplKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi19CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1h
Z2VCdWZmZXJHdGsuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSAr
MCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388388</attachid>
            <date>2020-01-21 18:44:22 -0800</date>
            <delta_ts>2020-01-21 23:00:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206519-20200121184421.patch</filename>
            <type>text/plain</type>
            <size>34246</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ2MDQwNjVjOWM3MWJi
OTA1NWUyMmRmZGQ1ZTE5NGIyNDg4ZDg3ZS4uYzgxOTMzOGZmZjk0OGZkNjY3YWU3OGE0MzYxZjNh
YjFjY2IwZTcwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTAxLTIxICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBJ
bWFnZUJ1ZmZlciB1dGlsaXRpZXMgZnVuY3Rpb24gdG8gc2VwYXJhdGUgZmlsZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjUxOQorCisgICAgICAg
IFJldmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgVGhlc2UgdXRpbGl0aWVzIGZ1bmN0
aW9uIGFyZSBtZXJlbHkgcmVsYXRlZCB0byB0aGUgSW1hZ2VEYXRhLgorCisgICAgICAgICogU291
cmNlc0dUSy50eHQ6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjp3cml0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29k
ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpqcGVnVVRJKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnV0aUZyb21JbWFnZUJ1
ZmZlck1JTUVUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRhdGFVUkwpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6ZGF0YVZlY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGF0YSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmpwZWdVVEkpOgorICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbUltYWdlQnVmZmVyTUlN
RVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2ZEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6ZGF0YVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcDogUmVtb3ZlZC4KKwogMjAyMC0w
MS0yMSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAg
ICBBIHBhcnRpYWxseSBzZWxlY3RlZCBSVEwgdGV4dCBpcyBwbGFjZWQgYXQgYSB3cm9uZyB2ZXJ0
aWNhbCBwb3NpdGlvbiBpZiBpdCBoYXMgYSB2ZXJ0aWNhbCBpbml0aWFsIGFkdmFuY2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlc0dUSy50eHQKaW5kZXggNzIwNWUyMGQzYWI0ZTM5ZmJlZTRiYjk0MzFhZWNiNGJjY2MyOGJk
Mi4uOTdmMzM2ZTdjNWM5ZThkMGRhMjVlMmJkNGU2MWFkNzFhZTUyZGYyYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0dUSy50eHQKQEAgLTg0LDcgKzg0LDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3Rr
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckd0ay5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2d0ay9JY29uR3RrLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVy
R3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcAogCiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggYjg0NDQ3MWQ3YThlYTg1Yzg4MzIyYjEy
OWM0MGExODA0OTYxYjc1MC4uZjVlNzY1MDA2OWE2ZDg2OTBkOTQzZGVlMjZiYjM2MWY5MTg5Y2Uz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTgzLDYg
KzgzLDEwIEBACiAjaW5jbHVkZSA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CiAjZW5kaWYK
IAorI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SFRNTENhbnZhc0VsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U291cmNlc0NhaXJvLnR4dCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50
eHQKaW5kZXggNDIxZGZiZDk1NzU0YzQ2Mjc1N2I3OGRiZmE0MTAyNTQzMmFmMGI3ZC4uZjkwZDI0
NmVjNTliNGY4YThlMTM4YjcyMjQwY2YyMDI1ODMxOTJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CkBAIC0zMSw2ICszMSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dEltcGxDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDYyZDBhNWIzMDU2ZWFiZTU1YWIyYmU2MTlkN2VhNzhk
OGRjNGE1NzUuLjI2ZGY3Y2RkOWZiNmMxM2RkMzAwZTFkMzkzZWM0NDI1MjQ3ZDIwYTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMTkw
LDkgKzE5MCw0IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLSNpZiBVU0UoQ0cpCi1TdHJpbmcg
ZGF0YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpOwotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLSNl
bmRpZgotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmluZGV4
IGNjYzVmOWNkYjAxNTMyZGJlODg5NmI0ZDFjNjBkYjA4NTYxNmM5MzguLjkxYzBhMWE5ZTE0ODVh
MmExNGU2MWM2OGYwNjhmZTMxOTYwMWE4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgpAQCAt
NzYsNyArNzcsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKQEAgLTY1NCwyMSArNjU0LDYgQEAgdm9pZCBJbWFn
ZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFs
cGhhUHJlbXVsdGlwbGkKICAgICB9CiB9CiAKLSNpZiAhUExBVEZPUk0oR1RLKQotc3RhdGljIGNh
aXJvX3N0YXR1c190IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghcmVpbnRlcnByZXRf
Y2FzdDxWZWN0b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgbGVuZ3RoKSkK
LSAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKLSAgICByZXR1cm4gQ0FJ
Uk9fU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1
cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1aW50OF90Piog
b3V0cHV0KQotewotICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBlID09ICJpbWFn
ZS9wbmciKTsgLy8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgotCi0gICAg
cmV0dXJuIGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwgd3JpdGVGdW5j
dGlvbiwgb3V0cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQogU3RyaW5nIEltYWdl
QnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CkBAIC02ODEsMjEg
KzY2NiwxMyBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksCiAgICAgcmV0dXJuICJkYXRhOiIgKyBt
aW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwogfQogCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+KSBjb25zdAorVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAogewogICAgIEFT
U0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGlu
ZyhtaW1lVHlwZSkpOwotCiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90
YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLQotICAgIFZlY3Rvcjx1
aW50OF90PiBlbmNvZGVkSW1hZ2U7Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1h
Z2UsIG1pbWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IHJldHVybiBlbmNvZGVkSW1hZ2U7CisgICAgcmV0dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBx
dWFsaXR5KTsKIH0KIAotI2VuZGlmCi0KICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBh
aW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWU2M2MyM2E5MDM0MDhkZGNlYzkyOTJjMjhiZTQ5NTZjODAxZGZlOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBz
ZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5o
IgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAi
R1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhUExBVEZPUk0oR1RLKQorc3RhdGljIGNhaXJvX3N0
YXR1c190IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rv
cjx1aW50OF90Pio+KG91dHB1dCktPnRyeUFwcGVuZChkYXRhLCBsZW5ndGgpKQorICAgICAgICBy
ZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9SOworICAgIHJldHVybiBDQUlST19TVEFUVVNf
U1VDQ0VTUzsKK30KKworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBp
bWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCit7
CisgICAgQVNTRVJUX1VOVVNFRChtaW1lVHlwZSwgbWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAv
LyBPbmx5IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCisKKyAgICByZXR1cm4gY2Fp
cm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRw
dXQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShj
YWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+KQoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2U7CisgICAgaWYgKCFp
bWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gZW5jb2RlZEltYWdlOworfQorI2Vsc2UKK3N0
YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBHVW5pcXVlT3V0UHRyPGdj
aGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKK3sKKyAgICAvLyBMaXN0IG9mIHN1cHBv
cnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQaXhidWYgZG9jdW1l
bnRhdGlvbi4KKyAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nZGstcGl4YnVmL3N0
YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1ZmZl
cnYKKworICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2Ui
KTsKKyAgICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAmJiB0eXBlICE9ICJ0
aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7CisgICAgaWYgKHR5cGUgPT0g
ImpwZWciKSB7CisgICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFscGhhIGNoYW5uZWwu
IFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11c3QgZW5jb2RlIGEg
UG9ydGVyLUR1ZmYKKyAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVyIGJsYWNrIGZvciBp
bWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgorICAgICAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlOworICAgICAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRf
dHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKKyAgICAgICAgICAg
IG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0
YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAgICAgICAg
IENBSVJPX0ZPUk1BVF9SR0IyNCwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJ
bnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UpOworICAgICAgICAgICAgbmV3
U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1B
VF9SR0IyNCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBSZWZQ
dHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5nZXQoKSkp
OworICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNl
LCAwLCAwKTsKKyAgICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICAgICAgfQor
ICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYobmV3U3Vy
ZmFjZS5nZXQoKSkpOworICAgIH0gZWxzZQorICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fp
cm9TdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOworICAgIGlmICghcGl4YnVmKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAg
aWYgKHR5cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFs
aXR5IDw9IDEuMCkgeworICAgICAgICBTdHJpbmcgcXVhbGl0eVN0cmluZyA9IFN0cmluZzo6bnVt
YmVyKHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCArIDAuNSkpOworICAgICAgICBn
ZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwg
JmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCAicXVhbGl0
eSIsIHF1YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisgICAgfSBlbHNlCisgICAg
ICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0
cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksIE5V
TEwpOworCisgICAgcmV0dXJuICFlcnJvcjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fp
cm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KQoreworICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGJ1ZmZlcjsKKyAgICBn
c2l6ZSBidWZmZXJTaXplOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCBx
dWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKGJ1ZmZlci5n
ZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKyNlbmRpZiAvLyAh
UExBVEZPUk0oR1RLKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
Q0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA3
NGM4MzBlYjljMjc2NTUwMGI2Y2M1MzYzZjE5ZTdhYjAwNTA2ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0
aWVzQ2Fpcm8uaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlIDxjYWlyby5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWZWN0
b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmluZGV4IDk0N2ZmOTMyMGI2OGNiYzAxZDlm
M2E0NTRlODM1NDNmZDNkOTQyMzcuLjhhNjM3ZTEwYTExMDY2YzYyZWJmN2UyY2M4ZDRlMTU3NTg5
ODNhMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC00NDUsNzkgKzQ0NSw2IEBAIHZvaWQgSW1hZ2VCdWZmZXI6
OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11
bHRpcGxpCiAgICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkp
OwogfQogCi1zdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQotewotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJp
bmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKLSNlbmRpZgotICAgIHJl
dHVybiBrVVRUeXBlSlBFRzsKLX0KLSAgICAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0g
ICAgLy8gRklYTUU6IFdoeSBkb2Vzbid0IGlPUyB1c2UgdGhlIENvcmVTZXJ2aWNlcyB2ZXJzaW9u
PwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBl
KS5jcmVhdGVDRlN0cmluZygpOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAv
LyBJdCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCi0KLSAgICAvLyBGSVhNRTog
QWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5
IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCi0gICAg
Ly8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8v
cHJvYmxlbS82MDk1Mjg2Pi4KLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBO
RyA9IENGU1RSKCJwdWJsaWMucG5nIik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtV
VFR5cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7Ci0KLSAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKLSAgICAgICAg
cmV0dXJuIGtVVFR5cGVQTkc7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIpKQotICAgICAgICByZXR1cm4ganBlZ1VUSSgpOwotICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIp
KQotICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBrVVRUeXBlUE5HOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBib29sIGVuY29k
ZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAh
dXRpIHx8ICFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RpbmF0
aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGks
IDEsIDApKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7Ci0gICAgaWYg
KENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYm
ICpxdWFsaXR5IDw9IDEuMCkgewotICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVh
bGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KLSAgICAgICAgYXV0byBjb21wcmVz
c2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOwotICAgICAgICBjb25zdCB2b2lkKiBr
ZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7Ci0gICAgICAg
IGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOwotICAgICAgICBp
bWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFs
dWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpKTsKLSAgICB9Ci0KLSAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGlu
YXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJv
cGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAotICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0
aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgotCi0gICAgQ0dJbWFnZURlc3RpbmF0
aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0
KCkpOwotICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5n
ZXQoKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBi
YXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEp
LCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2
NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9y
KENGRGF0YVJlZiBjZkRhdGEpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgZGF0
YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRh
KSk7Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKIHsKICAgICBpZiAoYXV0byBk
YXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCkBA
IC01NzgsNzAgKzUwNSw2IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0b0NG
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3ViCiAgICAgcmV0dXJuIFdU
Rk1vdmUoY2ZEYXRhKTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShj
b25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KQotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgYXV0byB1dGkg
PSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7
Ci0KLSAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFz
dDsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOwotICAg
IFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0
aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFs
cGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBi
bGFjay4KLSAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2Uu
aGVpZ2h0KCk7Ci0gICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFj
aXR5KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcHJlbXVs
dGlwbGllZERhdGEuZ3JvdyhzaXplKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0g
cHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7IGkgKz0gNCkgewotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAz
XTsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBidWZm
ZXJbaSArIDBdID0gZGF0YVtpICsgMF0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBi
dWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOwot
ICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXTsKLSAgICAgICAgICAg
ICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsg
Ly8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVsLgotICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGll
ZERhdGEuZGF0YSgpOwotICAgIH0KLQotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2go
ZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRh
dGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRh
LCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKLSAgICBpZiAoIWRh
dGFQcm92aWRlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGltYWdlID0g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgs
IDMyLCA0ICogc291cmNlLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5
dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZh
bHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFk
b3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAg
aWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEu
Z2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNm
RGF0YSk7Ci19Ci0KLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYg
KGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAg
cmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTos
Il9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAg
IGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAg
ICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0K
IFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0CiB7CiAgICAg
aWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmNwcAppbmRleCA4OWQwNDM5YzIxMGRiNTAxYWM5MzllYjExNDE0ODgxZWVlYzY1YjI0Li40
ZjEzOGU0ZDczYWNlNzJjYzFhZDBkNmE4YTgwY2NhODc0NmJkYzQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw3ICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKIAorI2lmIFVTRShDRykKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1
ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCisjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw0ICs1MiwxNDMgQEAgdWludDhfdCB2
ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1
ZmZlclNpemUpCiAgICAgcmV0dXJuICoodWludDhfdCopbGFzdEJ5dGU7CiB9CiAKK0NGU3RyaW5n
UmVmIGpwZWdVVEkoKQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJ
TikKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVi
bGljLmpwZWciKTsKKyNlbmRpZgorICAgIHJldHVybiBrVVRUeXBlSlBFRzsKK30KKworUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQoreworICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3Jl
U2VydmljZXMgdmVyc2lvbj8KKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIFVUSUZyb21N
SU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyNlbHNlCisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgor
CisgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVk
IFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5
IGlzIGZvdW5kLgorICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBH
SUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCisgICAgc3RhdGljIGNvbnN0IENGU3Ry
aW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOworICAgIHN0YXRpYyBjb25z
dCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOwor
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2Uv
cG5nIikpCisgICAgICAgIHJldHVybiBrVVRUeXBlUE5HOworICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKKyAgICAgICAgcmV0dXJu
IGpwZWdVVEkoKTsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5
cGUsICJpbWFnZS9naWYiKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga1VUVHlwZVBORzsKKyNlbmRpZgorfQorCiti
b29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCit7CisgICAgaWYgKCFp
bWFnZSB8fCAhdXRpIHx8ICFkYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShk
YXRhLCB1dGksIDEsIDApKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7
CisgICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkg
Pj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJl
c3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KKyAgICAgICAgYXV0
byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOworICAgICAgICBjb25z
dCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7
CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOwor
ICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAm
a2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICB9CisKKyAgICAvLyBTZXR0aW5nIGtDR0lt
YWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGlu
IGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAorICAgIC8vIGluIHRoZSBjYWxs
aW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgorCisgICAgQ0dJbWFn
ZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3Bl
cnRpZXMuZ2V0KCkpOworICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0
aW5hdGlvbi5nZXQoKSk7CiB9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEo
Y29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIGF1dG8gdXRp
ID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkp
OworCisgICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxh
c3Q7CisgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVhbCh1
dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBh
bHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2Yg
YmxhY2suCisgICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNl
LmhlaWdodCgpOworICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBh
Y2l0eShzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHByZW11
bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9
IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyBpICs9IDQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsg
M107CisgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgYnVm
ZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAg
YnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAg
ICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsK
KyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07CisgICAgICAgICAg
ICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7
IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KKyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxp
ZWREYXRhLmRhdGEoKTsKKyAgICB9CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdo
KGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBk
YXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0
YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFk
YXRhUHJvdmlkZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbWFnZSA9
IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4
LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBC
eXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBm
YWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworCisgICAgYXV0byBjZkRhdGEgPSBh
ZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAg
IGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRh
LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShj
ZkRhdGEpOworfQorCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRF
bmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNl
NjREYXRhKTsKKworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsg
YmFzZTY0RGF0YTsKK30KKworU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2Us
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAg
ICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQorICAg
ICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJk
YXRhOiwiX3M7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRh
dGEpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgZGF0YS5hcHBlbmQoQ0ZEYXRh
R2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7CisgICAgcmV0dXJu
IGRhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNl
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7Cisg
ICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAg
ICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oCmluZGV4IDE2MTI4YTE5YWJkMWZiODNhYjMxYTExNWM2ODk1MDQ5MWQ0MTk1
NTIuLmJjODc3NTg4NzhkNTE2M2E5MzhhZjgyNDJjN2E2ODAwZWE5YmQxM2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NHLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjUsOCArMjUsMzEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBVU0Uo
Q0cpCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgSW1hZ2VEYXRhOworCiBXRUJDT1JFX0VYUE9SVCB1aW50OF90IHZlcmlmeUltYWdlQnVm
ZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CiAK
LX0KK0NGU3RyaW5nUmVmIGpwZWdVVEkoKTsKK1JldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJv
bUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJik7CisKK2Jvb2wgZW5jb2RlSW1hZ2Uo
Q0dJbWFnZVJlZiwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENG
TXV0YWJsZURhdGFSZWYpOworCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpOworU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworVmVjdG9yPHVpbnQ4
X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmKTsKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IElt
YWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJH
dGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjVhMGQ1MGY4Y2UxYWFmNjUz
NWRlZWM5NDBiODVkYzU1MTdlNGIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1
ZmZlckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaW5j
bHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVk
ZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0j
aW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2ds
aWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgR1VuaXF1ZU91dFB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZlclNpemUp
Ci17Ci0gICAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMgY29tZXMg
ZnJvbSB0aGUgR2RrUGl4YnVmIGRvY3VtZW50YXRpb24uCi0gICAgLy8gaHR0cDovL2RldmVsb3Bl
ci5nbm9tZS5vcmcvZ2RrLXBpeGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmluZy5odG1s
I2dkay1waXhidWYtc2F2ZS10by1idWZmZXJ2Ci0KLSAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBl
LnN1YnN0cmluZyhzaXplb2YgImltYWdlIik7Ci0gICAgaWYgKHR5cGUgIT0gImpwZWciICYmIHR5
cGUgIT0gInBuZyIgJiYgdHlwZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0eXBlICE9
ICJibXAiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
cGl4YnVmOwotICAgIGlmICh0eXBlID09ICJqcGVnIikgewotICAgICAgICAvLyBKUEVHIGRvZXNu
J3Qgc3VwcG9ydCBhbHBoYSBjaGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMgdGhhdCB0
b0RhdGFVUkwoKSBtdXN0IGVuY29kZSBhIFBvcnRlci1EdWZmCi0gICAgICAgIC8vIGNvbXBvc2l0
ZSBzb3VyY2Utb3ZlciBibGFjayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBh
bHBoYS4KLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZTsKLSAgICAg
ICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9U
WVBFX0lNQUdFKSB7Ci0gICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShz
dXJmYWNlKSwKLSAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCi0gICAgICAgICAg
ICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAgICAgICAg
ICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAotICAgICAgICAg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSkpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShz
dXJmYWNlKTsKLSAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfUkdCMjQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSkpOwotICAgICAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9f
Y3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vf
c3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgICAgICAgICBjYWlyb19wYWlu
dChjci5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJv
U3VyZmFjZVRvR2RrUGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKHN1cmZhY2UpKTsK
LSAgICBpZiAoIXBpeGJ1ZikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1VuaXF1ZU91
dFB0cjxHRXJyb3I+IGVycm9yOwotICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYm
ICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgU3RyaW5nIHF1
YWxpdHlTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICog
MTAwLjAgKyAwLjUpKTsKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYu
Z2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCks
ICZlcnJvci5vdXRQdHIoKSwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCks
IE5VTEwpOwotICAgIH0gZWxzZQotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBp
eGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRh
dGEoKSwgJmVycm9yLm91dFB0cigpLCBOVUxMKTsKLQotICAgIHJldHVybiAhZXJyb3I7Ci19Ci0K
LVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAg
IFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGEgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwot
ICAgIGlmIChpbWFnZURhdGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0K
LSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoaW1hZ2VEYXRh
LmRhdGEoKSwgaW1hZ2VEYXRhLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRh
dGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAg
IEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGJ1ZmZlcjsKLSAgICBnc2l6ZSBidWZmZXJTaXplOwotICAg
IGlmICghZW5jb2RlSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbWltZVR5cGUsIHF1YWxp
dHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBWZWN0
b3I8dWludDhfdD4gaW1hZ2VEYXRhOwotICAgIGltYWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdldCgp
LCBidWZmZXJTaXplKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi19Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>