<?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>219273</bug_id>
          
          <creation_ts>2020-11-24 03:46:07 -0800</creation_ts>
          <short_desc>Have scroll-snap support code use ScrollSnapOffsetsInfo as much as possible</short_desc>
          <delta_ts>2021-01-20 04:43:34 -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>Scrolling</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>145157</dup_id>
          
          <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>219345</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>077janesmith</cc>
    
    <cc>annulen</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1709980</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2020-11-24 03:46:07 -0800</bug_when>
    <thetext>In the future, WebKit will not use two vectors of offsets to store snap offset info. In order to prepare for this, it can instead pass around the pre-existing SnapOffsetsInfo which abstracts away how snap points are stored. This bug tracks using SnapOffsetsInfo to a greater extent and removing references to &quot;horizontal snap offsets&quot; and &quot;vertical snap offsets.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710170</commentid>
    <comment_count>2</comment_count>
      <attachid>414902</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2020-11-26 06:54:26 -0800</bug_when>
    <thetext>Created attachment 414902
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710172</commentid>
    <comment_count>3</comment_count>
      <attachid>414904</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2020-11-26 07:24:31 -0800</bug_when>
    <thetext>Created attachment 414904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710173</commentid>
    <comment_count>4</comment_count>
      <attachid>414905</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2020-11-26 08:03:04 -0800</bug_when>
    <thetext>Created attachment 414905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710175</commentid>
    <comment_count>5</comment_count>
      <attachid>414906</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2020-11-26 08:32:21 -0800</bug_when>
    <thetext>Created attachment 414906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710288</commentid>
    <comment_count>6</comment_count>
      <attachid>414906</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2020-11-27 06:27:33 -0800</bug_when>
    <thetext>Comment on attachment 414906
Patch

I&apos;m going to split these changes up into smaller pieces that are easier to review. Sorry for the noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711001</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-01 03:47:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/71844999&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720854</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-01-20 04:42:21 -0800</bug_when>
    <thetext>I&apos;m going to close this metabug in favor of using bug 145157 as the metabug, just to make chasing these a bit easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720856</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-01-20 04:42:37 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 145157 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414902</attachid>
            <date>2020-11-26 06:54:26 -0800</date>
            <delta_ts>2020-11-26 07:37:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219273-20201126155424.patch</filename>
            <type>text/plain</type>
            <size>85836</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU4OTczNDk1NDJmNTQx
NTk1NGNkN2Q2MDgyNmQxYzg0YWVjYWZlMy4uM2ZlYTYxM2YxMDU1ZTYyNThmZWM3ZTJlZmQ3Yzk1
ZmM4MTQ4ZTRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDIwLTExLTI2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBVc2UgU2Nyb2xs
U25hcE9mZnNldHNJbmZvIGluIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlIGFuZCBhYnN0cmFjdCBh
d2F5IHNvbWUgb2YgdGhlIGludGVybmFscyBvZiBTbmFwT2Zmc2V0c0luZm8gaW4gU2Nyb2xsYWJs
ZUFyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
IG9yZGVyIHRvIHN1cHBvcnQgbWFzb25yeSBsYXlvdXQgZm9yIENTUyBzY3JvbGwgc25hcCwgU2Ny
b2xsIG9mZnNldHMgd2lsbCBzb29uIG5vIGxvbmdlciBiZSBhIHNlcGFyYXRlIHNldCBvZiBvbmUg
ZGltZW5zaW9uYWwKKyAgICAgICAgdmVydGljYWwgYW5kIGhvcml6b250YWwgb2Zmc2V0cywgYnV0
IG9mZnNldCBwb2ludHMgaW4gdHdvIGRpbWVuc2lvbnMuIEFsbW9zdCBhbGwgb2YgdGhlIGV4aXN0
aW5nIHN1cHBvcnQgY29kZSBmb3Igc2Nyb2xsIHNuYXAKKyAgICAgICAgaXMgd3JpdHRlbiB3aXRo
IHRoZSBvbmUgZGltZW5zaW9uYWwgb2Zmc2V0cyBpbiBtaW5kLgorCisgICAgICAgIFRoaXMgcmVm
YWN0b3IgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGFic3RyYWN0aW5nIGF3YXkgdGhlIGRldGFp
bHMgb2Ygc2Nyb2xsIG9mZnNldHMgYnkgdXNpbmcgU2Nyb2xsU25hcE9mZnNldHNJbmZvIGluIG1v
cmUgcGxhY2VzCisgICAgICAgIHdoZXJlIHRoZSBvbmUgZGltZW5zaW9uYWwgc2V0IG9mIG9mZnNl
dHMgd2VyZSB1c2VkIGJlZm9yZS4gVGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZSBoZXJlIGlzIHRv
IHN0YXJ0IHVzaW5nIFNjcm9sbFNuYXBPZmZzZXRzSW5mbworICAgICAgICBpbiBTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZSBhbmQgaW4gU2Nyb2xsYWJsZUFyZWEuCisKKyAgICAgICAgVGhpcyBhbHNv
IGVsaW1pbmF0ZXMgQXhpc1Njcm9sbFNuYXBPZmZzZXRzIHdoaWNoIGhhcyBhbiBpbnRlcmZhY2Ug
dXNpbmcgb25lIGRpbWVuc2lvbmFsIHNjcm9sbCBvZmZzZXRzIGFuZCBtb3ZlcyB0aGUgY29kZQor
ICAgICAgICBpbnRvIFNjcm9sbFNuYXBPZmZzdHNJbmZvIGFuZCBTY3JvbGxhYmxlQXJlYS4gRmlu
YWxseSwgdGhpcyBjaGFuZ2UgYWRkcyBTY3JvbGxTbmFwT2Zmc2V0c0luZm9CdWlsZGVyIHRvIGhl
bHAgY29udmVydCBsYXlvdXQKKyAgICAgICAgcHJvcGVydGllcyBpbnRvIHNjcm9sbCBvZmZzZXRz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhlc2UgY2hhbmdlcyBzaG91bGQgbm90IG1vZGlm
eSBiZWhhdmlvci4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6IFJlbW92ZSBBeGlzU2Nyb2xs
U25hcE9mZnNldHMuaC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDogUmVtb3ZlIEF4aXNTY3JvbGxT
bmFwT2Zmc2V0cy5jcHAgYW5kIGFkZCBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVT
bmFwT2Zmc2V0cyk6IENoYW5nZXMgdG8gcmVmbGVjdCBuZXcgbWV0aG9kIG5hbWUuCisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKTog
TW92ZWQgZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuCisgICAgICAgIChXZWJDb3JlOjppbmRp
Y2VzT2ZOZWFyZXN0U25hcE9mZnNldHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNsb3Nl
c3RTbmFwT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXhpc1Byb3hp
bWl0eVNuYXBPZmZzZXRSYW5nZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNu
YXBPZmZzZXRzSW5mb0J1aWxkZXI6OlNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIpOiBBZGRl
ZCB0aGlzIGZhY3RvcnkgY2xhc3MsIHdoaWNoIGFic3RyYWN0cyBhd2F5IGNvbnN0cnVjdGlvbiBv
ZiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwT2Zm
c2V0c0luZm9CdWlsZGVyOjphZGRWZXJ0aWNhbE9mZnNldCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6YWRkSG9yaXpvbnRhbE9mZnNldCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6
YnVpbGQpOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0
c0luZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6aXNFbXB0
eSBjb25zdCk6IEFkZGVkIGhlbHBlciBmb3IgZGV0ZWN0aW5nIGVtcHR5IHNldHMgb2Ygb2Zmc2V0
cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6b2Zmc2V0c0ZvckF4
aXMgY29uc3QpOiBBZGRlZCBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwT2Zm
c2V0c0luZm86Om9mZnNldFJhbmdlc0ZvckF4aXMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDogUmVtb3ZlZCB1bm5lY2Vz
c2FyeSBoZWFkZXIgaW5jbHVkZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdN
b21lbnR1bUNhbGN1bGF0b3IuaDogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OnNuYXBPZmZzZXRzSW5mbyBjb25zdCk6IEFkZGVkLgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg6IFJlbW92ZWQg
YWNjZXNzIHRvIGhvcml6b250YWwKKyAgICAgICAgYW5kIHZlcnRpY2FsIG9mZnNldHMuCisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWMuaDogUmVtb3ZlZCBtZXRob2QuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0VG9MYXlvdXRVbml0cyk6IEFkZGVkIGEgY29udmVyc2lvbiBmdW5jdGlvbiBmb3Ig
U2Nyb2xsU25hcE9mZnNldHNJbmZvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6dXBkYXRlRnJvbVN0YXRlTm9kZSk6IEFsd2F5cyB0aGUg
ZW50aXJlIFNjcm9sbFNuYXBPZmZzZXRzSW5mby4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUpOiBVcGRhdGUg
dG8gcmVmbGVjdCBuZXcgYXJndW1lbnRzIHRvIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9s
bFNuYXBQb2ludHMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdCk6IE1vdmVkIGhl
cmUgZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRl
U2Nyb2xsU25hcEFsaWduT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y2xlYXJTbmFw
T2Zmc2V0cyk6IFNjcm9sbGFibGVBcmVhIGhhcyBhIFNjcm9sbFNuYXBPZmZzZXRzSW5mbyBpbnN0
ZWFkIG9mIHNlcGFyYXRlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIG9mZnNldHMuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bmVhcmVzdEFjdGl2ZVNuYXBQb2ludCk6IFVwZGF0
ZSB0byByZWZsZWN0IHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsU25hcE9mZnNldEluZm8gY29uc3QpOiBBZGRlZCBnZXR0ZXIuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU25hcE9mZnNldHNGb3JFbGVtZW50KTogQWRkZWQgdGhp
cyBtZXRob2Qgd2hpY2ggbWFpbmx5IGNvbWVzIGZyb20gQXhpc1Njcm9sbFNuYXBPZmZzZXRzIGFu
ZCB1c2VzIHRoZSBuZXcgU2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlci4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU25hcE9mZnNldHMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU25hcE9mZnNl
dHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6
b250YWxTbmFwT2Zmc2V0UmFuZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNsZWFySG9yaXpvbnRhbFNuYXBPZmZzZXRzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjbGVhclZlcnRpY2Fs
U25hcE9mZnNldHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVh
Lmg6IFVwZGF0ZSB0byByZWZsZWN0IG5ldyBhbmQgcmVtb3ZlZCBtZXRob2RzLgorICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaDogTW9kaWZ5IGFyZ3VtZW50cyBwYXNz
ZWQgdG8gbWV0aG9kcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVy
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZl
bnRGb3JTY3JvbGxTbmFwKTogVXNlIG5ldyBTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmlzRW1wdHkg
aGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xs
U25hcFBvaW50cyk6IE5vdyBzZXQgdGhlIGVudGlyZSBTY3JvbGxTbmFwT2Zmc2V0c0luZm8gYXQg
b25jZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNldE5lYXJlc3RTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KTogQWNjZXNzIHRoZSBTY3JvbGxTbmFwT2Zmc2V0
c0luZm8gbm93IGluc3RlYWQgb2YgdGhlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIG9mZnNldHMu
CisgICAgICAgIChXZWJDb3JlOjpvdGhlclNjcm9sbEV2ZW50QXhpcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRl
Lmg6IFN0b3JlIFNuYXBPZmZzZXRzSW5mbyBpbnN0ZWFkIG9mIHZlcnRpY2FsIGFuZCBob3Jpem9u
dGFsIG9mZnNldHMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6
c25hcE9mZnNldHNJbmZvIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZTo6c2V0U25hcE9mZnNldEluZm8pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpzbmFwT2Zmc2V0c0ZvckF4aXMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnNu
YXBPZmZzZXRSYW5nZXNGb3JBeGlzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpzZXRTbmFwT2Zmc2V0c0FuZFBvc2l0aW9uUmFuZ2Vz
Rm9yQXhpcyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZTo6c2V0dXBBbmltYXRpb25Gb3JTdGF0ZSk6IE1vZGlmaWVkIHRvIHBhc3MgU2Nyb2xsU25hcE9m
ZnNldHNJbmZvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRh
cmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0IGNvbnN0KTogQWNjZXB0cyBTY3JvbGxTbmFwT2Zmc3Rz
SW5mby4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBVc2UgU2Nyb2xsU25hcE9mZnN0
c0luZm8gZnJvbSBzdGF0ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKTogVXBkYXRl
IHRvIHJlZmxlY3QgbmV3IG1ldGhvZC4KKwogMjAyMC0xMS0xNiAgU2VyZ2lvIFZpbGxhciBTZW5p
biAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWZsZXhdIEltYWdlcyBhcyBm
bGV4IGl0ZW1zIHNob3VsZCB1c2UgdGhlIG92ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0IHdoZW4gZGVm
aW5lZCB0byBjb21wdXRlIHRoZSBsb2dpY2FsIHdpZHRoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAw
MjNlMTUzZGEzYzY3ZGUxN2EyNTJiZWYxY2FiMjY4N2Q0MzkzMDZkLi40ZWFiOWFiMzE4MzAzYTgy
YmNmYjI0MjczY2VmOTFiNmE1YTQ3NDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTkzNiw3ICs5
MzYsNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGFnZS9j
c3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLmgKIAogICAgIHBhZ2Uvc2Ny
b2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAotICAgIHBhZ2Uvc2Nyb2xsaW5nL0F4
aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmgKICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50cy5oCiAgICAg
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBh
ZmNmNDVhYWNiNDc0NzQzNjQxM2Y4YWU1OTlmM2RhZTRiZWRjZGNmLi45ZjM5ODcyZjRkMTk2ODYy
ZWZlNzFjMDkyODk2ODk2MDg3M2M4ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTc0Myw3ICsxNzQz
LDcgQEAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmNwcAogcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAKIHBhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUuY3BwCiBwYWdlL3Njcm9sbGluZy9Bc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAotcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZz
ZXRzLmNwcAorcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAogcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcAogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29uc3RyYWludHMuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA4YjI1MTRmZDJiMmI2NTM0MDIyYmI0ZGFiMmQwNjhhMGJkMDUyMGZmLi4wODJl
Y2ZhM2I5NjIyZGE4MWJmZmRmODhiYzNlOGE4OTA1Nzc1NmJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MjI0LDcgKzUyMjQs
NiBAQAogCQlGNDRBNUY1OTFGRUQzOEYyMDA3RjU5NDQgLyogTGVnYWN5TlNQYXN0ZWJvYXJkVHlw
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NEE1
RjU3MUZFRDM4MzAwMDdGNTk0NCAvKiBMZWdhY3lOU1Bhc3RlYm9hcmRUeXBlcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0NEVCQkQ5MURCNUQy
MTQwMDI3NzMzNCAvKiBTdGF0aWNSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjQ0RUJCRDgxREI1RDIxNDAwMjc3MzM0IC8qIFN0YXRpY1Jhbmdl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ1
Nzc1Q0UyNDE0MzdENTAwMkRGMUEwIC8qIElubGluZVBhdGhEYXRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDU3NzVDRDI0MTQzN0Q1MDAyREYxQTAg
LyogSW5saW5lUGF0aERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlGNDVDMjMxRTE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NDVDMjMxQzE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ2NzI5MjgxRTBE
RTY4NTAwQUNDM0Q4IC8qIFNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2NzI5MjUxRTBERTVBQjAwQUNDM0Q4IC8q
IFNjcm9sbFNuYXBPZmZzZXRzSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUY0NkM0NDdFMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJ
dGVtQmluZGluZ3NEYXRhU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNDZDNDQ3QzIzNDY1NDU0MDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbUJp
bmRpbmdzRGF0YVNvdXJjZS5oICovOyB9OwogCQlGNDc4NzU1NDE5OTgzQUZGMDAyNEEyODcgLyog
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0Nzg3NTUyMTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC05Mzc1LDYgKzkzNzQsNyBAQAogCQk1QjMwNjk1QTE4QjNEMzQ1MDA5OUQ1RTggLyog
V2ViR0xEcmF3QnVmZmVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJHTERyYXdCdWZmZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUIz
MDY5NUIxOEIzRDM0NTAwOTlENUU4IC8qIFdlYkdMRHJhd0J1ZmZlcnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xEcmF3QnVmZmVycy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1QjMwNjk1QzE4QjNEMzQ1MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVy
cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xEcmF3QnVmZmVycy5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCN0FCOUY2MjU2N0RCN0UwMDY1OTJEMCAvKiBTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUMwMDE1MjEyNTAwMTEwMDAwOTRBQTkzIC8qIFRleHRDb2RlY1NpbmdsZUJ5dGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENvZGVjU2luZ2xlQnl0ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMDAxNTIzMjUwMDExMDEwMDk0QUE5
MyAvKiBUZXh0Q29kZWNTaW5nbGVCeXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRleHRDb2RlY1NpbmdsZUJ5dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUMzOTMwNUQxQUEwRjZBOTAwMjlDODE2IC8qIERGQUJ5dGVjb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERGQUJ5dGVjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjQ2OCw4ICsxNjQ2OCw2IEBACiAJCUY0NEVCQkQ4MURCNUQyMTQwMDI3NzMzNCAv
KiBTdGF0aWNSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNS
YW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDRFQkJEQTFEQjVERDlEMDAy
NzczMzQgLyogU3RhdGljUmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3RhdGljUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDU3
NzVDRDI0MTQzN0Q1MDAyREYxQTAgLyogSW5saW5lUGF0aERhdGEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5saW5lUGF0aERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjQ1QzIzMUIx
OTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNDVDMjMxQzE5OTVCNzNCMDBBNkUyRTMgLyogQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF4
aXNTY3JvbGxTbmFwT2Zmc2V0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDYy
OEE5RTIzNEQzQkJGMDBCQzg4NEMgLyogUGxhdGZvcm1QYXN0ZWJvYXJkQ29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybVBhc3RlYm9hcmRDb2Nv
YS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ2MkU3OUYyNDJBREEzQzAwMjA0
REREIC8qIERyYWdEYXRhQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBEcmFnRGF0YUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NDYyRTdBMDI0MkFEQTNEMDAyMDREREQgLyogRHJhZ0ltYWdlQ29jb2EubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnSW1hZ2VDb2NvYS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NDIyLDggKzE4NDIwLDYgQEAKIAkJCQkxQUY2MkVFMjE0
REEyMkE3MDA0MTU1NkMgLyogbWFjICovLAogCQkJCTBGRkQ0RDVFMTg2NTFGQTMwMDUxMkY2RSAv
KiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKIAkJCQkwRkZENEQ1RjE4NjUxRkEz
MDA1MTJGNkUgLyogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oICovLAotCQkJCUY0NUMyMzFC
MTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwICovLAotCQkJCUY0
NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCAqLywKIAkJ
CQkwRjYwNUFFQTE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwICov
LAogCQkJCTBGNjA1QUVCMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5o
ICovLAogCQkJCTFBRjYyRUU0MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRv
ci5jcHAgKi8sCkBAIC0xODQ3Myw2ICsxODQ2OSw3IEBACiAJCQkJQTZENUE5OUIxNjI5RDcwMDAw
Mjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaCAqLywKIAkJCQkw
Rjk1MTBGMjI0RjQ3NjlDMDAxRjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcCAq
LywKIAkJCQkwRjk1MTBGMDI0RjQ3NjlDMDAxRjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9s
bGVyLmggKi8sCisJCQkJNUI3QUI5RjYyNTY3REI3RTAwNjU5MkQwIC8qIFNjcm9sbFNuYXBPZmZz
ZXRzSW5mby5jcHAgKi8sCiAJCQkJRjQ2NzI5MjUxRTBERTVBQjAwQUNDM0Q4IC8qIFNjcm9sbFNu
YXBPZmZzZXRzSW5mby5oICovLAogCQkJCTBGNjM4M0RCMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJl
YWRlZFNjcm9sbGluZ1RyZWUuY3BwICovLAogCQkJCTBGNjM4M0RDMTg2MTVCMjkwMDNFNURCNSAv
KiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuaCAqLywKQEAgLTMxMDg0LDcgKzMxMDgxLDYgQEAKIAkJ
CQkwNzAzNjNFNjE4MUExQ0RDMDBDMDc0QTUgLyogQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI5QUUyMTM1MjFBQkE0OEEwMDg2OTI4MyAvKiBBWElzb2xhdGVkT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUFFMjEyRDIxQUI5RUVCMDA4NjkyODMgLyogQVhJ
c29sYXRlZFRyZWUuaCBpbiBIZWFkZXJzICovLAotCQkJCUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJF
MyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjM4
MEZCQjlDMUQwMDUxMDI5MyAvKiBBWE9iamVjdENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MUM5RjJGOTFBRTNCRUIwMDA5NUI2MUMgLyogQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0NzdFNzc3MEJGNDEzNEEwMDE1Mjg3MiAvKiBCYWNrRm9yd2FyZENh
Y2hlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBkNjdi
NDQwMDBhNGU5Y2M5MjFjZmRkOTBlOTA2NDU2YjM4MzJiMTVhLi5mY2QzMGFiMDcyNjhkMzBhMDg4
NzI0MTBiOTllNzdmMzdiZjBmODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0x
MTcsMTAgKzExNyw2IEBACiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKICNlbmRpZgog
Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9m
ZnNldHMuaCIKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlICJE
b2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkxlZ2FjeVRpbGVDYWNoZS5oIgpAQCAtOTQ5LDcg
Kzk0NSw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVTbmFwT2Zmc2V0cygpCiAgICAgTGF5b3V0
UmVjdCB2aWV3cG9ydCA9IExheW91dFJlY3QoSW50UG9pbnQoKSwgYmFzZUxheW91dFZpZXdwb3J0
U2l6ZSgpKTsKICAgICB2aWV3cG9ydC5tb3ZlKC1yb290UmVuZGVyZXItPm1hcmdpbkxlZnQoKSwg
LXJvb3RSZW5kZXJlci0+bWFyZ2luVG9wKCkpOwogCi0gICAgdXBkYXRlU25hcE9mZnNldHNGb3JT
Y3JvbGxhYmxlQXJlYSgqdGhpcywgKnJvb3RSZW5kZXJlciwgKnN0eWxlVG9Vc2UsIHZpZXdwb3J0
KTsKKyAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvckVsZW1lbnQoKnJvb3RSZW5kZXJlciwgKnN0eWxl
VG9Vc2UsIHZpZXdwb3J0KTsKIH0KIAogYm9vbCBGcmFtZVZpZXc6OmlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3MoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
QXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGE1MjM5ODk4Yjk4MTMwYmQxMzJkY2VjZWRkOGZkYzdiOGU0Y2NkMTMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
QXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCi0KLSNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRv
ci5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiTGVuZ3RoLmgiCi0jaW5j
bHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgotI2luY2x1ZGUgIlN0eWxlU2Ny
b2xsU25hcFBvaW50cy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVt
YmVycy5oPgotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1lbnVtIGNsYXNzIEluc2V0T3JPdXRzZXQgewotICAgIEluc2V0LAotICAgIE91dHNl
dAotfTsKLQotc3RhdGljIExheW91dFJlY3QgY29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVj
dChjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBMZW5ndGhCb3gmIGluc2V0T3JPdXRzZXRC
b3gsIEluc2V0T3JPdXRzZXQgaW5zZXRPck91dHNldCkKLXsKLSAgICBMYXlvdXRCb3hFeHRlbnQg
ZXh0ZW50cyh2YWx1ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LnRvcCgpLCByZWN0LmhlaWdo
dCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRPck91dHNldEJveC5yaWdodCgpLCByZWN0LndpZHRo
KCkpLCB2YWx1ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LmJvdHRvbSgpLCByZWN0LmhlaWdo
dCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRPck91dHNldEJveC5sZWZ0KCksIHJlY3Qud2lkdGgo
KSkpOwotICAgIGF1dG8gc25hcFBvcnRPckFyZWEocmVjdCk7Ci0gICAgaWYgKGluc2V0T3JPdXRz
ZXQgPT0gSW5zZXRPck91dHNldDo6SW5zZXQpCi0gICAgICAgIHNuYXBQb3J0T3JBcmVhLmNvbnRy
YWN0KGV4dGVudHMpOwotICAgIGVsc2UKLSAgICAgICAgc25hcFBvcnRPckFyZWEuZXhwYW5kKGV4
dGVudHMpOwotICAgIHJldHVybiBzbmFwUG9ydE9yQXJlYTsKLX0KLQotc3RhdGljIExheW91dFVu
aXQgY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChMYXlvdXRVbml0IG1pbkxvY2F0aW9uLCBM
YXlvdXRVbml0IG1heExvY2F0aW9uLCBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZSBhbGlnbm1lbnQs
IGJvb2wgYXhpc0lzRmxpcHBlZCkKLXsKLSAgICBzd2l0Y2ggKGFsaWdubWVudCkgewotICAgIGNh
c2UgU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6OlN0YXJ0OgotICAgICAgICByZXR1cm4gYXhpc0lz
RmxpcHBlZCA/IG1heExvY2F0aW9uIDogbWluTG9jYXRpb247Ci0gICAgY2FzZSBTY3JvbGxTbmFw
QXhpc0FsaWduVHlwZTo6Q2VudGVyOgotICAgICAgICByZXR1cm4gKG1pbkxvY2F0aW9uICsgbWF4
TG9jYXRpb24pIC8gMjsKLSAgICBjYXNlIFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpFbmQ6Ci0g
ICAgICAgIHJldHVybiBheGlzSXNGbGlwcGVkID8gbWluTG9jYXRpb24gOiBtYXhMb2NhdGlvbjsK
LSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsT2Zmc2V0UmFuZ2U8VD4mIHJhbmdl
KQotewotICAgIHRzIDw8ICJzdGFydDogIiA8PCByYW5nZS5zdGFydCA8PCAiIGVuZDogIiA8PCBy
YW5nZS5lbmQ7Ci0gICAgcmV0dXJuIHRzOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0
VHlwZT4KLXN0YXRpYyB2b2lkIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKExheW91
dFR5cGUgb2Zmc2V0LCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+
JiBzbmFwT2Zmc2V0UmFuZ2VzLCB1bnNpZ25lZCYgbG93ZXJJbmRleCwgdW5zaWduZWQmIHVwcGVy
SW5kZXgpCi17Ci0gICAgaWYgKHNuYXBPZmZzZXRSYW5nZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGxvd2VySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OwotICAgICAgICB1cHBlckluZGV4
ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGludCBsb3dlckluZGV4QXNJbnQgPSAtMTsKLSAgICBpbnQgdXBwZXJJbmRleEFzSW50ID0gc25h
cE9mZnNldFJhbmdlcy5zaXplKCk7Ci0gICAgZG8gewotICAgICAgICBpbnQgbWlkZGxlSW5kZXgg
PSAobG93ZXJJbmRleEFzSW50ICsgdXBwZXJJbmRleEFzSW50KSAvIDI7Ci0gICAgICAgIGF1dG8m
IHJhbmdlID0gc25hcE9mZnNldFJhbmdlc1ttaWRkbGVJbmRleF07Ci0gICAgICAgIGlmIChyYW5n
ZS5zdGFydCA8IG9mZnNldCAmJiBvZmZzZXQgPCByYW5nZS5lbmQpIHsKLSAgICAgICAgICAgIGxv
d2VySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4OwotICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50
ID0gbWlkZGxlSW5kZXg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChvZmZzZXQgPiByYW5nZS5lbmQpCi0gICAgICAgICAgICBsb3dlckluZGV4QXNJbnQgPSBt
aWRkbGVJbmRleDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0g
bWlkZGxlSW5kZXg7Ci0gICAgfSB3aGlsZSAobG93ZXJJbmRleEFzSW50IDwgdXBwZXJJbmRleEFz
SW50IC0gMSk7Ci0KLSAgICBpZiAob2Zmc2V0IDw9IHNuYXBPZmZzZXRSYW5nZXMuZmlyc3QoKS5z
dGFydCkKLSAgICAgICAgbG93ZXJJbmRleCA9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7Ci0gICAg
ZWxzZQotICAgICAgICBsb3dlckluZGV4ID0gbG93ZXJJbmRleEFzSW50OwotCi0gICAgaWYgKG9m
ZnNldCA+PSBzbmFwT2Zmc2V0UmFuZ2VzLmxhc3QoKS5lbmQpCi0gICAgICAgIHVwcGVySW5kZXgg
PSBpbnZhbGlkU25hcE9mZnNldEluZGV4OwotICAgIGVsc2UKLSAgICAgICAgdXBwZXJJbmRleCA9
IHVwcGVySW5kZXhBc0ludDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+Ci1z
dGF0aWMgdm9pZCBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHMoTGF5b3V0VHlwZSBvZmZzZXQs
IGNvbnN0IFZlY3RvcjxMYXlvdXRUeXBlPiYgc25hcE9mZnNldHMsIHVuc2lnbmVkJiBsb3dlcklu
ZGV4LCB1bnNpZ25lZCYgdXBwZXJJbmRleCkKLXsKLSAgICBsb3dlckluZGV4ID0gMDsKLSAgICB1
cHBlckluZGV4ID0gc25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKLSAgICB3aGlsZSAobG93ZXJJbmRl
eCA8IHVwcGVySW5kZXggLSAxKSB7Ci0gICAgICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlcklu
ZGV4ICsgdXBwZXJJbmRleCkgLyAyOwotICAgICAgICBhdXRvIG1pZGRsZU9mZnNldCA9IHNuYXBP
ZmZzZXRzW21pZGRsZUluZGV4XTsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBtaWRkbGVPZmZzZXQp
IHsKLSAgICAgICAgICAgIHVwcGVySW5kZXggPSBtaWRkbGVJbmRleDsKLSAgICAgICAgICAgIGxv
d2VySW5kZXggPSBtaWRkbGVJbmRleDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG9mZnNldCA+IG1pZGRsZU9mZnNldCkKLSAgICAgICAgICAgIGxvd2VySW5k
ZXggPSBtaWRkbGVJbmRleDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXBwZXJJbmRleCA9
IG1pZGRsZUluZGV4OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29tcHV0ZUF4aXNQcm94aW1p
dHlTbmFwT2Zmc2V0UmFuZ2VzKGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMs
IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIG9mZnNldFJhbmdlcywgTGF5
b3V0VW5pdCBzY3JvbGxQb3J0QXhpc0xlbmd0aCkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGFyYml0
cmFyeSBjaG9pY2UgZm9yIHdoYXQgaXQgbWVhbnMgdG8gYmUgImluIHByb3hpbWl0eSIgb2YgYSBz
bmFwIG9mZnNldC4gV2Ugc2hvdWxkIHBsYXkgYXJvdW5kIHdpdGgKLSAgICAvLyB0aGlzIGFuZCBz
ZWUgd2hhdCBmZWVscyBiZXN0LgotICAgIHN0YXRpYyBjb25zdCBmbG9hdCByYXRpb09mU2Nyb2xs
UG9ydEF4aXNMZW5ndGhUb0JlQ29uc2lkZXJlZEZvclByb3hpbWl0eSA9IDAuMzsKLSAgICBpZiAo
c25hcE9mZnNldHMuc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGV4
dHJhIHJ1bGUgYWNjb3VudGluZyBmb3Igc2Nyb2xsIG9mZnNldCByYW5nZXMgaW4gYmV0d2VlbiB0
aGUgc2Nyb2xsIGRlc3RpbmF0aW9uIGFuZCBhIHBvdGVudGlhbCBzbmFwIG9mZnNldAotICAgIC8v
IGhhbmRsZXMgdGhlIGNvcm5lciBjYXNlIHdoZXJlIHRoZSB1c2VyIHNjcm9sbHMgd2l0aCBtb21l
bnR1bSB2ZXJ5IGxpZ2h0bHkgYXdheSBmcm9tIGEgc25hcCBvZmZzZXQsIHN1Y2ggdGhhdCB0aGUK
LSAgICAvLyBwcmVkaWN0ZWQgc2Nyb2xsIGRlc3RpbmF0aW9uIGlzIHN0aWxsIHdpdGhpbiBwcm94
aW1pdHkgb2YgdGhlIHNuYXAgb2Zmc2V0LiBJbiB0aGlzIGNhc2UsIHRoZSByZWd1bGFyIChtYW5k
YXRvcnkKLSAgICAvLyBzY3JvbGwgc25hcHBpbmcpIGJlaGF2aW9yIHdvdWxkIGJlIHRvIHNuYXAg
dG8gdGhlIG5leHQgb2Zmc2V0IGluIHRoZSBkaXJlY3Rpb24gb2YgbW9tZW50dW0gc2Nyb2xsaW5n
LCBidXQKLSAgICAvLyBpbnN0ZWFkLCBpdCBpcyBtb3JlIGludHVpdGl2ZSB0byBlaXRoZXIgcmV0
dXJuIHRvIHRoZSBvcmlnaW5hbCBzbmFwIHBvc2l0aW9uICh3aGljaCB3ZSBhcmJpdHJhcmlseSBj
aG9vc2UgaGVyZSkKLSAgICAvLyBvciBzY3JvbGwganVzdCBvdXRzaWRlIG9mIHRoZSBzbmFwIG9m
ZnNldCByYW5nZS4gVGhpcyBpcyBhbm90aGVyIG1pbm9yIGJlaGF2aW9yIHR3ZWFrIHRoYXQgd2Ug
c2hvdWxkIHBsYXkgYXJvdW5kCi0gICAgLy8gd2l0aCB0byBzZWUgd2hhdCBmZWVscyBiZXN0Lgot
ICAgIExheW91dFVuaXQgcHJveGltaXR5RGlzdGFuY2UgeyByYXRpb09mU2Nyb2xsUG9ydEF4aXNM
ZW5ndGhUb0JlQ29uc2lkZXJlZEZvclByb3hpbWl0eSAqIHNjcm9sbFBvcnRBeGlzTGVuZ3RoIH07
Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAxOyBpbmRleCA8IHNuYXBPZmZzZXRzLnNpemUoKTsg
KytpbmRleCkgewotICAgICAgICBhdXRvIHN0YXJ0T2Zmc2V0ID0gc25hcE9mZnNldHNbaW5kZXgg
LSAxXSArIHByb3hpbWl0eURpc3RhbmNlOwotICAgICAgICBhdXRvIGVuZE9mZnNldCA9IHNuYXBP
ZmZzZXRzW2luZGV4XSAtIHByb3hpbWl0eURpc3RhbmNlOwotICAgICAgICBpZiAoc3RhcnRPZmZz
ZXQgPCBlbmRPZmZzZXQpCi0gICAgICAgICAgICBvZmZzZXRSYW5nZXMuYXBwZW5kKHsgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCB9KTsKLSAgICB9Ci19Ci0KLXZvaWQgdXBkYXRlU25hcE9mZnNldHNG
b3JTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJl
bmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGlu
Z0VsZW1lbnRTdHlsZSwgTGF5b3V0UmVjdCB2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5h
dGVzKQotewotICAgIGF1dG8gc2Nyb2xsU25hcFR5cGUgPSBzY3JvbGxpbmdFbGVtZW50U3R5bGUu
c2Nyb2xsU25hcFR5cGUoKTsKLSAgICBjb25zdCBhdXRvJiBib3hlc1dpdGhTY3JvbGxTbmFwUG9z
aXRpb25zID0gc2Nyb2xsaW5nRWxlbWVudEJveC52aWV3KCkuYm94ZXNXaXRoU2Nyb2xsU25hcFBv
c2l0aW9ucygpOwotICAgIGlmIChzY3JvbGxTbmFwVHlwZS5zdHJpY3RuZXNzID09IFNjcm9sbFNu
YXBTdHJpY3RuZXNzOjpOb25lIHx8IGJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIHNjcm9sbGFibGVBcmVhLmNsZWFyU25hcE9mZnNldHMoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxMYXlvdXRVbml0PiB2ZXJ0aWNhbFNuYXBP
ZmZzZXRzOwotICAgIFZlY3RvcjxMYXlvdXRVbml0PiBob3Jpem9udGFsU25hcE9mZnNldHM7Ci0g
ICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiB2ZXJ0aWNhbFNuYXBPZmZz
ZXRSYW5nZXM7Ci0gICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiBob3Jp
em9udGFsU25hcE9mZnNldFJhbmdlczsKLSAgICBIYXNoU2V0PGZsb2F0PiBzZWVuVmVydGljYWxT
bmFwT2Zmc2V0czsKLSAgICBIYXNoU2V0PGZsb2F0PiBzZWVuSG9yaXpvbnRhbFNuYXBPZmZzZXRz
OwotICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNuYXBPZmZzZXRzID0gc2Nyb2xsU25hcFR5cGUuYXhp
cyA9PSBTY3JvbGxTbmFwQXhpczo6Qm90aCB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9s
bFNuYXBBeGlzOjpYQXhpcyB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlz
OjpJbmxpbmU7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNuYXBPZmZzZXRzID0gc2Nyb2xsU25hcFR5
cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6Qm90aCB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09
IFNjcm9sbFNuYXBBeGlzOjpZQXhpcyB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNu
YXBBeGlzOjpCbG9jazsKLQotICAgIGF1dG8gbWF4U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUFy
ZWEubWF4aW11bVNjcm9sbE9mZnNldCgpOwotICAgIGF1dG8gc2Nyb2xsUG9zaXRpb24gPSBMYXlv
dXRQb2ludCB7IHNjcm9sbGFibGVBcmVhLnNjcm9sbFBvc2l0aW9uKCkgfTsKLSAgICBib29sIHNj
cm9sbGVySXNSVEwgPSAhc2Nyb2xsaW5nRWxlbWVudEJveC5zdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKTsKLQotICAgIC8vIFRoZSBib3VuZHMgb2YgdGhlIHNjcm9sbGluZyBjb250YWlu
ZXIncyBzbmFwIHBvcnQsIHdoZXJlIHRoZSB0b3AgbGVmdCBvZiB0aGUgc2Nyb2xsaW5nIGNvbnRh
aW5lcidzIGJvcmRlciBib3ggaXMgdGhlIG9yaWdpbi4KLSAgICBhdXRvIHNjcm9sbFNuYXBQb3J0
ID0gY29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdCh2aWV3cG9ydFJlY3RJbkJvcmRlckJv
eENvb3JkaW5hdGVzLCBzY3JvbGxpbmdFbGVtZW50U3R5bGUuc2Nyb2xsUGFkZGluZygpLCBJbnNl
dE9yT3V0c2V0OjpJbnNldCk7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVh
bSA8PCAiQ29tcHV0aW5nIHNjcm9sbCBzbmFwIG9mZnNldHMgZm9yICIgPDwgc2Nyb2xsYWJsZUFy
ZWEgPDwgIiBpbiBzbmFwIHBvcnQgIiA8PCBzY3JvbGxTbmFwUG9ydCk7Ci0gICAgZm9yIChhdXRv
KiBjaGlsZCA6IGJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMpIHsKLSAgICAgICAgaWYgKGNo
aWxkLT5lbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyRm9yU25hcHBpbmcoKSAhPSAmc2Nyb2xs
aW5nRWxlbWVudEJveCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFRoZSBi
b3VuZHMgb2YgdGhlIGNoaWxkIGVsZW1lbnQncyBzbmFwIGFyZWEsIHdoZXJlIHRoZSB0b3AgbGVm
dCBvZiB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lcidzIGJvcmRlciBib3ggaXMgdGhlIG9yaWdpbi4K
LSAgICAgICAgLy8gVGhlIHNuYXAgYXJlYSBpcyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBjaGls
ZCBlbGVtZW50J3MgYm9yZGVyIGJveCwgYWZ0ZXIgYXBwbHlpbmcgdHJhbnNmb3JtYXRpb25zLgot
ICAgICAgICAvLyBGSVhNRTogRm9yIG5vdywganVzdCBjb25zaWRlciB3aGV0aGVyIHRoZSBzY3Jv
bGxlciBpcyBSVEwuIFRoZSBiZWhhdmlvciBvZiBMVFIgYm94ZXMgaW5zaWRlIGEgUlRMIHNjcm9s
bGVyIGlzIHBvb3JseSBkZWZpbmVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0
cy9pc3N1ZXMvNTM2MS4KLSAgICAgICAgYXV0byBzY3JvbGxTbmFwQXJlYSA9IExheW91dFJlY3Qo
Y2hpbGQtPmxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UXVhZChjaGlsZC0+Ym9yZGVyQm91bmRp
bmdCb3goKSksICZzY3JvbGxpbmdFbGVtZW50Qm94KS5ib3VuZGluZ0JveCgpKTsKLQotICAgICAg
ICAvLyBsb2NhbFRvQ29udGFpbmVyUXVhZCB3aWxsIHRyYW5zZm9ybSB0aGUgc2Nyb2xsIHNuYXAg
YXJlYSBieSB0aGUgc2Nyb2xsIHBvc2l0aW9uLCBleGNlcHQgaW4gdGhlIGNhc2UgdGhhdCB0aGlz
IHBvc2l0aW9uIGlzCi0gICAgICAgIC8vIGNvbWluZyBmcm9tIGEgU2Nyb2xsVmlldy4gV2Ugd2Fu
dCB0aGUgdHJhbnNmb3JtZWQgYXJlYSwgYnV0IHdpdGhvdXQgc2Nyb2xsIHBvc2l0aW9uIHRha2Vu
IGludG8gYWNjb3VudC4KLSAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYS5pc1Njcm9sbFZpZXco
KSkKLSAgICAgICAgICAgIHNjcm9sbFNuYXBBcmVhLm1vdmVCeShzY3JvbGxQb3NpdGlvbik7Ci0K
LSAgICAgICAgc2Nyb2xsU25hcEFyZWEgPSBjb21wdXRlU2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0
KHNjcm9sbFNuYXBBcmVhLCBjaGlsZC0+c3R5bGUoKS5zY3JvbGxNYXJnaW4oKSwgSW5zZXRPck91
dHNldDo6T3V0c2V0KTsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVh
bSA8PCAiICAgIENvbnNpZGVyaW5nIHNjcm9sbCBzbmFwIHRhcmdldCBhcmVhICIgPDwgc2Nyb2xs
U25hcEFyZWEpOwotICAgICAgICBhdXRvIGFsaWdubWVudCA9IGNoaWxkLT5zdHlsZSgpLnNjcm9s
bFNuYXBBbGlnbigpOwotICAgICAgICBpZiAoaGFzSG9yaXpvbnRhbFNuYXBPZmZzZXRzICYmIGFs
aWdubWVudC54ICE9IFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpOb25lKSB7Ci0gICAgICAgICAg
ICBhdXRvIGFic29sdXRlU2Nyb2xsWFBvc2l0aW9uID0gY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9m
ZnNldChzY3JvbGxTbmFwQXJlYS54KCksIHNjcm9sbFNuYXBBcmVhLm1heFgoKSwgYWxpZ25tZW50
LngsIHNjcm9sbGVySXNSVEwpIC0gY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxT
bmFwUG9ydC54KCksIHNjcm9sbFNuYXBQb3J0Lm1heFgoKSwgYWxpZ25tZW50LngsIHNjcm9sbGVy
SXNSVEwpOwotICAgICAgICAgICAgYXV0byBhYnNvbHV0ZVNjcm9sbE9mZnNldCA9IGNsYW1wVG88
aW50PihzY3JvbGxhYmxlQXJlYS5zY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oeyByb3VuZFRvSW50
KGFic29sdXRlU2Nyb2xsWFBvc2l0aW9uKSwgMCB9KS54KCksIDAsIG1heFNjcm9sbE9mZnNldC54
KCkpOwotICAgICAgICAgICAgaWYgKCFzZWVuSG9yaXpvbnRhbFNuYXBPZmZzZXRzLmNvbnRhaW5z
KGFic29sdXRlU2Nyb2xsT2Zmc2V0KSkgewotICAgICAgICAgICAgICAgIHNlZW5Ib3Jpem9udGFs
U25hcE9mZnNldHMuYWRkKGFic29sdXRlU2Nyb2xsT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBo
b3Jpem9udGFsU25hcE9mZnNldHMuYXBwZW5kKGFic29sdXRlU2Nyb2xsT2Zmc2V0KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoaGFzVmVydGljYWxTbmFwT2Zmc2V0cyAm
JiBhbGlnbm1lbnQueSAhPSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Tm9uZSkgewotICAgICAg
ICAgICAgYXV0byBhYnNvbHV0ZVNjcm9sbFlQb3NpdGlvbiA9IGNvbXB1dGVTY3JvbGxTbmFwQWxp
Z25PZmZzZXQoc2Nyb2xsU25hcEFyZWEueSgpLCBzY3JvbGxTbmFwQXJlYS5tYXhZKCksIGFsaWdu
bWVudC55LCBmYWxzZSkgLSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNuYXBQ
b3J0LnkoKSwgc2Nyb2xsU25hcFBvcnQubWF4WSgpLCBhbGlnbm1lbnQueSwgZmFsc2UpOwotICAg
ICAgICAgICAgYXV0byBhYnNvbHV0ZVNjcm9sbE9mZnNldCA9IGNsYW1wVG88aW50PihzY3JvbGxh
YmxlQXJlYS5zY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oeyAwLCByb3VuZFRvSW50KGFic29sdXRl
U2Nyb2xsWVBvc2l0aW9uKSB9KS55KCksIDAsIG1heFNjcm9sbE9mZnNldC55KCkpOwotICAgICAg
ICAgICAgaWYgKCFzZWVuVmVydGljYWxTbmFwT2Zmc2V0cy5jb250YWlucyhhYnNvbHV0ZVNjcm9s
bE9mZnNldCkpIHsKLSAgICAgICAgICAgICAgICBzZWVuVmVydGljYWxTbmFwT2Zmc2V0cy5hZGQo
YWJzb2x1dGVTY3JvbGxPZmZzZXQpOwotICAgICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNl
dHMuYXBwZW5kKGFic29sdXRlU2Nyb2xsT2Zmc2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmICghaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewot
ICAgICAgICBzdGQ6OnNvcnQoaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmJlZ2luKCksIGhvcml6b250
YWxTbmFwT2Zmc2V0cy5lbmQoKSk7Ci0gICAgICAgIGlmIChzY3JvbGxTbmFwVHlwZS5zdHJpY3Ru
ZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpQcm94aW1pdHkpCi0gICAgICAgICAgICBjb21w
dXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRSYW5nZXMoaG9yaXpvbnRhbFNuYXBPZmZzZXRzLCBo
b3Jpem9udGFsU25hcE9mZnNldFJhbmdlcywgc2Nyb2xsU25hcFBvcnQud2lkdGgoKSk7Ci0KLSAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVk
IGhvcml6b250YWwgc2Nyb2xsIHNuYXAgb2Zmc2V0czogIiA8PCBob3Jpem9udGFsU25hcE9mZnNl
dHMpOwotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4g
Q29tcHV0ZWQgaG9yaXpvbnRhbCBzY3JvbGwgc25hcCBvZmZzZXQgcmFuZ2VzOiAiIDw8IGhvcml6
b250YWxTbmFwT2Zmc2V0UmFuZ2VzKTsKLQotICAgICAgICBzY3JvbGxhYmxlQXJlYS5zZXRIb3Jp
em9udGFsU25hcE9mZnNldHMoaG9yaXpvbnRhbFNuYXBPZmZzZXRzKTsKLSAgICAgICAgc2Nyb2xs
YWJsZUFyZWEuc2V0SG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoaG9yaXpvbnRhbFNuYXBPZmZz
ZXRSYW5nZXMpOwotICAgIH0gZWxzZQotICAgICAgICBzY3JvbGxhYmxlQXJlYS5jbGVhckhvcml6
b250YWxTbmFwT2Zmc2V0cygpOwotCi0gICAgaWYgKCF2ZXJ0aWNhbFNuYXBPZmZzZXRzLmlzRW1w
dHkoKSkgewotICAgICAgICBzdGQ6OnNvcnQodmVydGljYWxTbmFwT2Zmc2V0cy5iZWdpbigpLCB2
ZXJ0aWNhbFNuYXBPZmZzZXRzLmVuZCgpKTsKLSAgICAgICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0
cmljdG5lc3MgPT0gU2Nyb2xsU25hcFN0cmljdG5lc3M6OlByb3hpbWl0eSkKLSAgICAgICAgICAg
IGNvbXB1dGVBeGlzUHJveGltaXR5U25hcE9mZnNldFJhbmdlcyh2ZXJ0aWNhbFNuYXBPZmZzZXRz
LCB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMsIHNjcm9sbFNuYXBQb3J0LmhlaWdodCgpKTsKLQot
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0
ZWQgdmVydGljYWwgc2Nyb2xsIHNuYXAgb2Zmc2V0czogIiA8PCB2ZXJ0aWNhbFNuYXBPZmZzZXRz
KTsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENv
bXB1dGVkIHZlcnRpY2FsIHNjcm9sbCBzbmFwIG9mZnNldCByYW5nZXM6ICIgPDwgdmVydGljYWxT
bmFwT2Zmc2V0UmFuZ2VzKTsKLQotICAgICAgICBzY3JvbGxhYmxlQXJlYS5zZXRWZXJ0aWNhbFNu
YXBPZmZzZXRzKHZlcnRpY2FsU25hcE9mZnNldHMpOwotICAgICAgICBzY3JvbGxhYmxlQXJlYS5z
ZXRWZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXModmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEuY2xlYXJWZXJ0aWNhbFNuYXBPZmZzZXRz
KCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgotTGF5b3V0VHlwZSBjbG9z
ZXN0U25hcE9mZnNldChjb25zdCBWZWN0b3I8TGF5b3V0VHlwZT4mIHNuYXBPZmZzZXRzLCBjb25z
dCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0UmFuZ2Vz
LCBMYXlvdXRUeXBlIHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQm
IGFjdGl2ZVNuYXBJbmRleCkKLXsKLSAgICBBU1NFUlQoc25hcE9mZnNldHMuc2l6ZSgpKTsKLSAg
ICBhY3RpdmVTbmFwSW5kZXggPSAwOwotCi0gICAgdW5zaWduZWQgbG93ZXJTbmFwT2Zmc2V0UmFu
Z2VJbmRleDsKLSAgICB1bnNpZ25lZCB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4OwotICAgIGlu
ZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzPExheW91dFR5cGU+KHNjcm9sbERlc3RpbmF0
aW9uLCBzbmFwT2Zmc2V0UmFuZ2VzLCBsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4LCB1cHBlclNu
YXBPZmZzZXRSYW5nZUluZGV4KTsKLSAgICBpZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCA9
PSB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4ICYmIHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXgg
IT0gaW52YWxpZFNuYXBPZmZzZXRJbmRleCkgewotICAgICAgICBhY3RpdmVTbmFwSW5kZXggPSBp
bnZhbGlkU25hcE9mZnNldEluZGV4OwotICAgICAgICByZXR1cm4gc2Nyb2xsRGVzdGluYXRpb247
Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbERlc3RpbmF0aW9uIDw9IHNuYXBPZmZzZXRzLmZpcnN0
KCkpCi0gICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5maXJzdCgpOwotCi0gICAgYWN0aXZlU25h
cEluZGV4ID0gc25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKLSAgICBpZiAoc2Nyb2xsRGVzdGluYXRp
b24gPj0gc25hcE9mZnNldHMubGFzdCgpKQotICAgICAgICByZXR1cm4gc25hcE9mZnNldHMubGFz
dCgpOwotCi0gICAgdW5zaWduZWQgbG93ZXJJbmRleDsKLSAgICB1bnNpZ25lZCB1cHBlckluZGV4
OwotICAgIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0czxMYXlvdXRUeXBlPihzY3JvbGxEZXN0
aW5hdGlvbiwgc25hcE9mZnNldHMsIGxvd2VySW5kZXgsIHVwcGVySW5kZXgpOwotICAgIExheW91
dFR5cGUgbG93ZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1tsb3dlckluZGV4XTsKLSAgICBM
YXlvdXRUeXBlIHVwcGVyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbdXBwZXJJbmRleF07Ci0g
ICAgaWYgKCFzdGQ6OmFicyh2ZWxvY2l0eSkpIHsKLSAgICAgICAgYm9vbCBpc0Nsb3NlclRvTG93
ZXJTbmFwUG9zaXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbiAtIGxvd2VyU25hcFBvc2l0aW9uIDw9
IHVwcGVyU25hcFBvc2l0aW9uIC0gc2Nyb2xsRGVzdGluYXRpb247Ci0gICAgICAgIGFjdGl2ZVNu
YXBJbmRleCA9IGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA/IGxvd2VySW5kZXggOiB1cHBl
ckluZGV4OwotICAgICAgICByZXR1cm4gaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93
ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNuYXBQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICAvLyBOb24t
emVybyB2ZWxvY2l0eSBpbmRpY2F0ZXMgYSBmbGljayBnZXN0dXJlLiBFdmVuIGlmIGFub3RoZXIg
c25hcCBwb2ludCBpcyBjbG9zZXIsIHdlIHNob3VsZCBjaG9vc2UgdGhlIG9uZSBpbiB0aGUgZGly
ZWN0aW9uIG9mIHRoZSBmbGljayBnZXN0dXJlCi0gICAgLy8gYXMgbG9uZyBhcyBhIHNjcm9sbCBz
bmFwIG9mZnNldCByYW5nZSBkb2VzIG5vdCBsaWUgYmV0d2VlbiB0aGUgc2Nyb2xsIGRlc3RpbmF0
aW9uIGFuZCB0aGUgdGFyZ2V0ZWQgc25hcCBvZmZzZXQuCi0gICAgaWYgKHZlbG9jaXR5IDwgMCkg
ewotICAgICAgICBpZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25hcE9m
ZnNldEluZGV4ICYmIGxvd2VyU25hcFBvc2l0aW9uIDwgc25hcE9mZnNldFJhbmdlc1tsb3dlclNu
YXBPZmZzZXRSYW5nZUluZGV4XS5lbmQpIHsKLSAgICAgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9
IHVwcGVySW5kZXg7Ci0gICAgICAgICAgICByZXR1cm4gdXBwZXJTbmFwUG9zaXRpb247Ci0gICAg
ICAgIH0KLSAgICAgICAgYWN0aXZlU25hcEluZGV4ID0gbG93ZXJJbmRleDsKLSAgICAgICAgcmV0
dXJuIGxvd2VyU25hcFBvc2l0aW9uOwotICAgIH0KLQotICAgIGlmICh1cHBlclNuYXBPZmZzZXRS
YW5nZUluZGV4ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXggJiYgc25hcE9mZnNldFJhbmdlc1t1
cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4XS5zdGFydCA8IHVwcGVyU25hcFBvc2l0aW9uKSB7Ci0g
ICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IGxvd2VySW5kZXg7Ci0gICAgICAgIHJldHVybiBsb3dl
clNuYXBQb3NpdGlvbjsKLSAgICB9Ci0gICAgYWN0aXZlU25hcEluZGV4ID0gdXBwZXJJbmRleDsK
LSAgICByZXR1cm4gdXBwZXJTbmFwUG9zaXRpb247Ci19Ci0KLUxheW91dFVuaXQgY2xvc2VzdFNu
YXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVj
dG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcE9mZnNldFJhbmdlcywgTGF5
b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBhY3Rp
dmVTbmFwSW5kZXgpCi17Ci0gICAgcmV0dXJuIGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVuaXQ+
KHNuYXBPZmZzZXRzLCBzbmFwT2Zmc2V0UmFuZ2VzLCBzY3JvbGxEZXN0aW5hdGlvbiwgdmVsb2Np
dHksIGFjdGl2ZVNuYXBJbmRleCk7Ci19Ci0KLWZsb2F0IGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0
IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFu
Z2U8ZmxvYXQ+PiYgc25hcE9mZnNldFJhbmdlcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZs
b2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0aXZlU25hcEluZGV4KQotewotICAgIHJldHVybiBj
bG9zZXN0U25hcE9mZnNldDxmbG9hdD4oc25hcE9mZnNldHMsIHNuYXBPZmZzZXRSYW5nZXMsIHNj
cm9sbERlc3RpbmF0aW9uLCB2ZWxvY2l0eSwgYWN0aXZlU25hcEluZGV4KTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ1NTX1NDUk9MTF9TTkFQCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGI2OGFlYmQ0MDI3YTEyZTE4ZWE1ZDc5NDA3
OWY3YTliMDgyNjRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5o
CisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotCi0jaW5jbHVkZSAiTGF5b3V0
UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKLSNpbmNsdWRlICJTY3JvbGxTbmFwT2Zm
c2V0c0luZm8uaCIKLSNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSFRNTEVsZW1lbnQ7Ci1jbGFz
cyBSZW5kZXJCb3g7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLWNsYXNzIFNjcm9sbGFibGVBcmVhOwot
Ci0vLyBVcGRhdGUgdGhlIHNuYXAgb2Zmc2V0cyBmb3IgdGhpcyBzY3JvbGxhYmxlIGFyZWEsIGdp
dmVuIHRoZSBSZW5kZXJCb3ggb2YgdGhlIHNjcm9sbCBjb250YWluZXIsIHRoZSBSZW5kZXJTdHls
ZQotLy8gd2hpY2ggZGVmaW5lcyB0aGUgc2Nyb2xsLXNuYXAgcHJvcGVydGllcywgYW5kIHRoZSB2
aWV3cG9ydCByZWN0YW5nbGUgd2l0aCB0aGUgb3JpZ2luIGF0IHRoZSB0b3AgbGVmdCBvZgotLy8g
dGhlIHNjcm9sbGluZyBjb250YWluZXIncyBib3JkZXIgYm94Lgotdm9pZCB1cGRhdGVTbmFwT2Zm
c2V0c0ZvclNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJiwgY29uc3QgUmVuZGVyQm94JiBz
Y3JvbGxpbmdFbGVtZW50Qm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0
eWxlLCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdEluQm9yZGVyQm94Q29vcmRpbmF0ZXMpOwotCi1j
b25zdCB1bnNpZ25lZCBpbnZhbGlkU25hcE9mZnNldEluZGV4ID0gVUlOVF9NQVg7Ci1XRUJDT1JF
X0VYUE9SVCBMYXlvdXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRV
bml0PiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRV
bml0Pj4mIHNuYXBPZmZzZXRSYW5nZXMsIExheW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb24sIGZs
b2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0aXZlU25hcEluZGV4KTsKLVdFQkNPUkVfRVhQT1JU
IGZsb2F0IGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRz
LCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8ZmxvYXQ+PiYgc25hcE9mZnNldFJhbmdl
cywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0
aXZlU25hcEluZGV4KTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2Zjg0ZjYxYTBk
MzU2MTgyNjUxZDBjYTRjZTc4OWUyOTQ5MjBkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCkBAIC0wLDAg
KzEsMjI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8uaCIKKworI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KK3N0YXRpYyB2b2lkIGluZGljZXNPZk5l
YXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKExheW91dFR5cGUgb2Zmc2V0LCBjb25zdCBWZWN0b3I8U2Ny
b2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCB1bnNpZ25lZCYg
bG93ZXJJbmRleCwgdW5zaWduZWQmIHVwcGVySW5kZXgpCit7CisgICAgaWYgKHNuYXBPZmZzZXRS
YW5nZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGxvd2VySW5kZXggPSBpbnZhbGlkU25hcE9mZnNl
dEluZGV4OworICAgICAgICB1cHBlckluZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBsb3dlckluZGV4QXNJbnQgPSAtMTsKKyAg
ICBpbnQgdXBwZXJJbmRleEFzSW50ID0gc25hcE9mZnNldFJhbmdlcy5zaXplKCk7CisgICAgZG8g
eworICAgICAgICBpbnQgbWlkZGxlSW5kZXggPSAobG93ZXJJbmRleEFzSW50ICsgdXBwZXJJbmRl
eEFzSW50KSAvIDI7CisgICAgICAgIGF1dG8mIHJhbmdlID0gc25hcE9mZnNldFJhbmdlc1ttaWRk
bGVJbmRleF07CisgICAgICAgIGlmIChyYW5nZS5zdGFydCA8IG9mZnNldCAmJiBvZmZzZXQgPCBy
YW5nZS5lbmQpIHsKKyAgICAgICAgICAgIGxvd2VySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4Owor
ICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5kZXg7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvZmZzZXQgPiByYW5nZS5lbmQpCisgICAg
ICAgICAgICBsb3dlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRleDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5kZXg7CisgICAgfSB3aGlsZSAobG93
ZXJJbmRleEFzSW50IDwgdXBwZXJJbmRleEFzSW50IC0gMSk7CisKKyAgICBpZiAob2Zmc2V0IDw9
IHNuYXBPZmZzZXRSYW5nZXMuZmlyc3QoKS5zdGFydCkKKyAgICAgICAgbG93ZXJJbmRleCA9IGlu
dmFsaWRTbmFwT2Zmc2V0SW5kZXg7CisgICAgZWxzZQorICAgICAgICBsb3dlckluZGV4ID0gbG93
ZXJJbmRleEFzSW50OworCisgICAgaWYgKG9mZnNldCA+PSBzbmFwT2Zmc2V0UmFuZ2VzLmxhc3Qo
KS5lbmQpCisgICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OworICAg
IGVsc2UKKyAgICAgICAgdXBwZXJJbmRleCA9IHVwcGVySW5kZXhBc0ludDsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIExheW91dFR5cGU+CitzdGF0aWMgdm9pZCBpbmRpY2VzT2ZOZWFyZXN0U25h
cE9mZnNldHMoTGF5b3V0VHlwZSBvZmZzZXQsIGNvbnN0IFZlY3RvcjxMYXlvdXRUeXBlPiYgc25h
cE9mZnNldHMsIHVuc2lnbmVkJiBsb3dlckluZGV4LCB1bnNpZ25lZCYgdXBwZXJJbmRleCkKK3sK
KyAgICBsb3dlckluZGV4ID0gMDsKKyAgICB1cHBlckluZGV4ID0gc25hcE9mZnNldHMuc2l6ZSgp
IC0gMTsKKyAgICB3aGlsZSAobG93ZXJJbmRleCA8IHVwcGVySW5kZXggLSAxKSB7CisgICAgICAg
IGludCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4ICsgdXBwZXJJbmRleCkgLyAyOworICAgICAg
ICBhdXRvIG1pZGRsZU9mZnNldCA9IHNuYXBPZmZzZXRzW21pZGRsZUluZGV4XTsKKyAgICAgICAg
aWYgKG9mZnNldCA9PSBtaWRkbGVPZmZzZXQpIHsKKyAgICAgICAgICAgIHVwcGVySW5kZXggPSBt
aWRkbGVJbmRleDsKKyAgICAgICAgICAgIGxvd2VySW5kZXggPSBtaWRkbGVJbmRleDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9mZnNldCA+IG1pZGRsZU9m
ZnNldCkKKyAgICAgICAgICAgIGxvd2VySW5kZXggPSBtaWRkbGVJbmRleDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgIH0KK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+CitzdGF0aWMgTGF5b3V0VHlwZSBjbG9zZXN0U25h
cE9mZnNldChTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VHlwZT4gb2Zmc2V0c0luZm8sIFNj
cm9sbEV2ZW50QXhpcyBheGlzLCBMYXlvdXRUeXBlIHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2
ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCkKK3sKKyAgICBjb25zdCBWZWN0b3I8
TGF5b3V0VHlwZT4mIHNuYXBPZmZzZXRzID0gb2Zmc2V0c0luZm8ub2Zmc2V0c0ZvckF4aXMoYXhp
cyk7CisgICAgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFR5cGU+PiYgc25h
cE9mZnNldFJhbmdlcyA9IG9mZnNldHNJbmZvLm9mZnNldFJhbmdlc0ZvckF4aXMoYXhpcyk7CisK
KyAgICBBU1NFUlQoc25hcE9mZnNldHMuc2l6ZSgpKTsKKyAgICBhY3RpdmVTbmFwSW5kZXggPSAw
OworCisgICAgdW5zaWduZWQgbG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleDsKKyAgICB1bnNpZ25l
ZCB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4OworICAgIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zm
c2V0UmFuZ2VzPExheW91dFR5cGU+KHNjcm9sbERlc3RpbmF0aW9uLCBzbmFwT2Zmc2V0UmFuZ2Vz
LCBsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4LCB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4KTsK
KyAgICBpZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCA9PSB1cHBlclNuYXBPZmZzZXRSYW5n
ZUluZGV4ICYmIHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXggIT0gaW52YWxpZFNuYXBPZmZzZXRJ
bmRleCkgeworICAgICAgICBhY3RpdmVTbmFwSW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4
OworICAgICAgICByZXR1cm4gc2Nyb2xsRGVzdGluYXRpb247CisgICAgfQorCisgICAgaWYgKHNj
cm9sbERlc3RpbmF0aW9uIDw9IHNuYXBPZmZzZXRzLmZpcnN0KCkpCisgICAgICAgIHJldHVybiBz
bmFwT2Zmc2V0cy5maXJzdCgpOworCisgICAgYWN0aXZlU25hcEluZGV4ID0gc25hcE9mZnNldHMu
c2l6ZSgpIC0gMTsKKyAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPj0gc25hcE9mZnNldHMubGFz
dCgpKQorICAgICAgICByZXR1cm4gc25hcE9mZnNldHMubGFzdCgpOworCisgICAgdW5zaWduZWQg
bG93ZXJJbmRleDsKKyAgICB1bnNpZ25lZCB1cHBlckluZGV4OworICAgIGluZGljZXNPZk5lYXJl
c3RTbmFwT2Zmc2V0czxMYXlvdXRUeXBlPihzY3JvbGxEZXN0aW5hdGlvbiwgc25hcE9mZnNldHMs
IGxvd2VySW5kZXgsIHVwcGVySW5kZXgpOworICAgIExheW91dFR5cGUgbG93ZXJTbmFwUG9zaXRp
b24gPSBzbmFwT2Zmc2V0c1tsb3dlckluZGV4XTsKKyAgICBMYXlvdXRUeXBlIHVwcGVyU25hcFBv
c2l0aW9uID0gc25hcE9mZnNldHNbdXBwZXJJbmRleF07CisgICAgaWYgKCFzdGQ6OmFicyh2ZWxv
Y2l0eSkpIHsKKyAgICAgICAgYm9vbCBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPSBzY3Jv
bGxEZXN0aW5hdGlvbiAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVwcGVyU25hcFBvc2l0aW9uIC0g
c2Nyb2xsRGVzdGluYXRpb247CisgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IGlzQ2xvc2VyVG9M
b3dlclNuYXBQb3NpdGlvbiA/IGxvd2VySW5kZXggOiB1cHBlckluZGV4OworICAgICAgICByZXR1
cm4gaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93ZXJTbmFwUG9zaXRpb24gOiB1cHBl
clNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICAvLyBOb24temVybyB2ZWxvY2l0eSBpbmRpY2F0
ZXMgYSBmbGljayBnZXN0dXJlLiBFdmVuIGlmIGFub3RoZXIgc25hcCBwb2ludCBpcyBjbG9zZXIs
IHdlIHNob3VsZCBjaG9vc2UgdGhlIG9uZSBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmbGljayBn
ZXN0dXJlCisgICAgLy8gYXMgbG9uZyBhcyBhIHNjcm9sbCBzbmFwIG9mZnNldCByYW5nZSBkb2Vz
IG5vdCBsaWUgYmV0d2VlbiB0aGUgc2Nyb2xsIGRlc3RpbmF0aW9uIGFuZCB0aGUgdGFyZ2V0ZWQg
c25hcCBvZmZzZXQuCisgICAgaWYgKHZlbG9jaXR5IDwgMCkgeworICAgICAgICBpZiAobG93ZXJT
bmFwT2Zmc2V0UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4ICYmIGxvd2VyU25h
cFBvc2l0aW9uIDwgc25hcE9mZnNldFJhbmdlc1tsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4XS5l
bmQpIHsKKyAgICAgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IHVwcGVySW5kZXg7CisgICAgICAg
ICAgICByZXR1cm4gdXBwZXJTbmFwUG9zaXRpb247CisgICAgICAgIH0KKyAgICAgICAgYWN0aXZl
U25hcEluZGV4ID0gbG93ZXJJbmRleDsKKyAgICAgICAgcmV0dXJuIGxvd2VyU25hcFBvc2l0aW9u
OworICAgIH0KKworICAgIGlmICh1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4ICE9IGludmFsaWRT
bmFwT2Zmc2V0SW5kZXggJiYgc25hcE9mZnNldFJhbmdlc1t1cHBlclNuYXBPZmZzZXRSYW5nZUlu
ZGV4XS5zdGFydCA8IHVwcGVyU25hcFBvc2l0aW9uKSB7CisgICAgICAgIGFjdGl2ZVNuYXBJbmRl
eCA9IGxvd2VySW5kZXg7CisgICAgICAgIHJldHVybiBsb3dlclNuYXBQb3NpdGlvbjsKKyAgICB9
CisgICAgYWN0aXZlU25hcEluZGV4ID0gdXBwZXJJbmRleDsKKyAgICByZXR1cm4gdXBwZXJTbmFw
UG9zaXRpb247Cit9CisKK2Zsb2F0IGNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbFNuYXBPZmZzZXRz
SW5mbzxmbG9hdD4gb2Zmc2V0c0luZm8sIFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBzY3Jv
bGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgp
Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmNsb3Nlc3RTbmFwT2Zmc2V0PGZsb2F0PihvZmZzZXRz
SW5mbywgYXhpcywgc2Nyb2xsRGVzdGluYXRpb24sIHZlbG9jaXR5LCBhY3RpdmVTbmFwSW5kZXgp
OworfQorCitMYXlvdXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbFNuYXBPZmZzZXRzSW5m
bzxMYXlvdXRVbml0PiBvZmZzZXRzSW5mbywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIExheW91dFVu
aXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0aXZlU25h
cEluZGV4KQoreworICAgIHJldHVybiBXZWJDb3JlOjpjbG9zZXN0U25hcE9mZnNldDxMYXlvdXRV
bml0PihvZmZzZXRzSW5mbywgYXhpcywgc2Nyb2xsRGVzdGluYXRpb24sIHZlbG9jaXR5LCBhY3Rp
dmVTbmFwSW5kZXgpOworfQorCitzdGF0aWMgdm9pZCBjb21wdXRlQXhpc1Byb3hpbWl0eVNuYXBP
ZmZzZXRSYW5nZXMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgVmVjdG9y
PFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgb2Zmc2V0UmFuZ2VzLCBMYXlvdXRVbml0
IHNjcm9sbFBvcnRBeGlzTGVuZ3RoKQoreworICAgIC8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IGNo
b2ljZSBmb3Igd2hhdCBpdCBtZWFucyB0byBiZSAiaW4gcHJveGltaXR5IiBvZiBhIHNuYXAgb2Zm
c2V0LiBXZSBzaG91bGQgcGxheSBhcm91bmQgd2l0aAorICAgIC8vIHRoaXMgYW5kIHNlZSB3aGF0
IGZlZWxzIGJlc3QuCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHJhdGlvT2ZTY3JvbGxQb3J0QXhp
c0xlbmd0aFRvQmVDb25zaWRlcmVkRm9yUHJveGltaXR5ID0gMC4zOworICAgIGlmIChzbmFwT2Zm
c2V0cy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgZXh0cmEgcnVs
ZSBhY2NvdW50aW5nIGZvciBzY3JvbGwgb2Zmc2V0IHJhbmdlcyBpbiBiZXR3ZWVuIHRoZSBzY3Jv
bGwgZGVzdGluYXRpb24gYW5kIGEgcG90ZW50aWFsIHNuYXAgb2Zmc2V0CisgICAgLy8gaGFuZGxl
cyB0aGUgY29ybmVyIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc2Nyb2xscyB3aXRoIG1vbWVudHVtIHZl
cnkgbGlnaHRseSBhd2F5IGZyb20gYSBzbmFwIG9mZnNldCwgc3VjaCB0aGF0IHRoZQorICAgIC8v
IHByZWRpY3RlZCBzY3JvbGwgZGVzdGluYXRpb24gaXMgc3RpbGwgd2l0aGluIHByb3hpbWl0eSBv
ZiB0aGUgc25hcCBvZmZzZXQuIEluIHRoaXMgY2FzZSwgdGhlIHJlZ3VsYXIgKG1hbmRhdG9yeQor
ICAgIC8vIHNjcm9sbCBzbmFwcGluZykgYmVoYXZpb3Igd291bGQgYmUgdG8gc25hcCB0byB0aGUg
bmV4dCBvZmZzZXQgaW4gdGhlIGRpcmVjdGlvbiBvZiBtb21lbnR1bSBzY3JvbGxpbmcsIGJ1dAor
ICAgIC8vIGluc3RlYWQsIGl0IGlzIG1vcmUgaW50dWl0aXZlIHRvIGVpdGhlciByZXR1cm4gdG8g
dGhlIG9yaWdpbmFsIHNuYXAgcG9zaXRpb24gKHdoaWNoIHdlIGFyYml0cmFyaWx5IGNob29zZSBo
ZXJlKQorICAgIC8vIG9yIHNjcm9sbCBqdXN0IG91dHNpZGUgb2YgdGhlIHNuYXAgb2Zmc2V0IHJh
bmdlLiBUaGlzIGlzIGFub3RoZXIgbWlub3IgYmVoYXZpb3IgdHdlYWsgdGhhdCB3ZSBzaG91bGQg
cGxheSBhcm91bmQKKyAgICAvLyB3aXRoIHRvIHNlZSB3aGF0IGZlZWxzIGJlc3QuCisgICAgTGF5
b3V0VW5pdCBwcm94aW1pdHlEaXN0YW5jZSB7IHJhdGlvT2ZTY3JvbGxQb3J0QXhpc0xlbmd0aFRv
QmVDb25zaWRlcmVkRm9yUHJveGltaXR5ICogc2Nyb2xsUG9ydEF4aXNMZW5ndGggfTsKKyAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDE7IGluZGV4IDwgc25hcE9mZnNldHMuc2l6ZSgpOyArK2luZGV4
KSB7CisgICAgICAgIGF1dG8gc3RhcnRPZmZzZXQgPSBzbmFwT2Zmc2V0c1tpbmRleCAtIDFdICsg
cHJveGltaXR5RGlzdGFuY2U7CisgICAgICAgIGF1dG8gZW5kT2Zmc2V0ID0gc25hcE9mZnNldHNb
aW5kZXhdIC0gcHJveGltaXR5RGlzdGFuY2U7CisgICAgICAgIGlmIChzdGFydE9mZnNldCA8IGVu
ZE9mZnNldCkKKyAgICAgICAgICAgIG9mZnNldFJhbmdlcy5hcHBlbmQoeyBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0IH0pOworICAgIH0KK30KKworU2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6
U2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcihTY3JvbGxTbmFwU3RyaWN0bmVzcyBzdHJpY3Ru
ZXNzKQorICAgIDogbV9zdHJpY3RuZXNzKHN0cmljdG5lc3MpIHsgfQorCit2b2lkIFNjcm9sbFNu
YXBPZmZzZXRzSW5mb0J1aWxkZXI6OmFkZFZlcnRpY2FsT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0
KQoreworICAgIGlmICghbV9zZWVuVmVydGljYWxTbmFwT2Zmc2V0cy5jb250YWlucyhvZmZzZXQp
KSB7CisgICAgICAgIG1fc2VlblZlcnRpY2FsU25hcE9mZnNldHMuYWRkKG9mZnNldCk7CisgICAg
ICAgIG1fdmVydGljYWxTbmFwT2Zmc2V0cy5hcHBlbmQob2Zmc2V0KTsKKyAgICB9Cit9CisKK3Zv
aWQgU2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6YWRkSG9yaXpvbnRhbE9mZnNldChMYXlv
dXRVbml0IG9mZnNldCkKK3sKKyAgICBpZiAoIW1fc2Vlbkhvcml6b250YWxTbmFwT2Zmc2V0cy5j
b250YWlucyhvZmZzZXQpKSB7CisgICAgICAgIG1fc2Vlbkhvcml6b250YWxTbmFwT2Zmc2V0cy5h
ZGQob2Zmc2V0KTsKKyAgICAgICAgbV9ob3Jpem9udGFsU25hcE9mZnNldHMuYXBwZW5kKG9mZnNl
dCk7CisgICAgfQorfQorCitzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsU25hcE9mZnNldHNJbmZvPExh
eW91dFVuaXQ+PiBTY3JvbGxTbmFwT2Zmc2V0c0luZm9CdWlsZGVyOjpidWlsZChjb25zdCBMYXlv
dXRSZWN0JiBzY3JvbGxTbmFwUG9ydCkKK3sKKyAgICBhdXRvIG9mZnNldHNJbmZvID0gbWFrZVVu
aXF1ZTxTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4+KCk7CisgICAgb2Zmc2V0c0lu
Zm8tPmhvcml6b250YWxTbmFwT2Zmc2V0cyA9IFdURk1vdmUobV9ob3Jpem9udGFsU25hcE9mZnNl
dHMpOworICAgIG9mZnNldHNJbmZvLT52ZXJ0aWNhbFNuYXBPZmZzZXRzID0gV1RGTW92ZShtX3Zl
cnRpY2FsU25hcE9mZnNldHMpOworCisgICAgaWYgKCFvZmZzZXRzSW5mby0+aG9yaXpvbnRhbFNu
YXBPZmZzZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvJiBob3Jpem9udGFsU25hcE9mZnNl
dHMgPSBvZmZzZXRzSW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzOworICAgICAgICBhdXRvJiBo
b3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyA9IG9mZnNldHNJbmZvLT5ob3Jpem9udGFsU25hcE9m
ZnNldFJhbmdlczsKKyAgICAgICAgc3RkOjpzb3J0KGhvcml6b250YWxTbmFwT2Zmc2V0cy5iZWdp
bigpLCBob3Jpem9udGFsU25hcE9mZnNldHMuZW5kKCkpOworICAgICAgICBpZiAobV9zdHJpY3Ru
ZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpQcm94aW1pdHkpCisgICAgICAgICAgICBjb21w
dXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRSYW5nZXMoaG9yaXpvbnRhbFNuYXBPZmZzZXRzLCBo
b3Jpem9udGFsU25hcE9mZnNldFJhbmdlcywgc2Nyb2xsU25hcFBvcnQud2lkdGgoKSk7CisgICAg
fQorCisgICAgaWYgKCFvZmZzZXRzSW5mby0+dmVydGljYWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgYXV0byYgdmVydGljYWxTbmFwT2Zmc2V0cyA9IG9mZnNldHNJbmZvLT52ZXJ0
aWNhbFNuYXBPZmZzZXRzOworICAgICAgICBhdXRvJiB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMg
PSBvZmZzZXRzSW5mby0+dmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOworICAgICAgICBzdGQ6OnNv
cnQodmVydGljYWxTbmFwT2Zmc2V0cy5iZWdpbigpLCB2ZXJ0aWNhbFNuYXBPZmZzZXRzLmVuZCgp
KTsKKyAgICAgICAgaWYgKG1fc3RyaWN0bmVzcyA9PSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6UHJv
eGltaXR5KQorICAgICAgICAgICAgY29tcHV0ZUF4aXNQcm94aW1pdHlTbmFwT2Zmc2V0UmFuZ2Vz
KHZlcnRpY2FsU25hcE9mZnNldHMsIHZlcnRpY2FsU25hcE9mZnNldFJhbmdlcywgc2Nyb2xsU25h
cFBvcnQuaGVpZ2h0KCkpOworICAgIH0KKworICAgIHJldHVybiBvZmZzZXRzSW5mbzsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9m
ZnNldHNJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zm
c2V0c0luZm8uaAppbmRleCAzYWI2NDA2ODI2NGM1MDQwOGJhYjRlZTM4ZDJjY2Q0YTY0MWM3ODY3
Li44OTI2OWE3ZWE3NzY2OWFjOTk3YmI5ZTRkYzVhZjlmYTY3ZTVhYWFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaApA
QCAtMjUsMTYgKzI1LDIzIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiTGF5b3V0VW5p
dC5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFw
UG9pbnRzLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIExheW91dFJlY3Q7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IFNj
cm9sbE9mZnNldFJhbmdlIHsKICAgICBUIHN0YXJ0OwogICAgIFQgZW5kOwogfTsKIAorY29uc3Qg
dW5zaWduZWQgaW52YWxpZFNuYXBPZmZzZXRJbmRleCA9IFVJTlRfTUFYOworCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KIHN0cnVjdCBTY3JvbGxTbmFwT2Zmc2V0c0luZm8gewogICAgIFdURl9NQUtF
X1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKQEAgLTQ3LDYgKzU0LDQ5IEBAIHN0cnVjdCBTY3JvbGxT
bmFwT2Zmc2V0c0luZm8gewogICAgIC8vIHdoZXJlIHRoZSBzbmFwIHBvcnQgZml0cyB3aXRoaW4g
dGhlIHNuYXAgYXJlYSBhcmUgY29uc2lkZXJlZCB0byBiZSB2YWxpZCBzbmFwIHBvc2l0aW9ucy4K
ICAgICBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8VD4+IGhvcml6b250YWxTbmFwT2Zmc2V0UmFu
Z2VzOwogICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxUPj4gdmVydGljYWxTbmFwT2Zmc2V0
UmFuZ2VzOworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBob3Jpem9udGFsU25hcE9mZnNldHMuaXNFbXB0eSgpICYmIHZlcnRpY2FsU25hcE9mZnNldHMu
aXNFbXB0eSgpICYmIGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzLmlzRW1wdHkoKSAmJiB2ZXJ0
aWNhbFNuYXBPZmZzZXRSYW5nZXMuaXNFbXB0eSgpOworICAgIH0KKworICAgIGNvbnN0IFZlY3Rv
cjxUPiYgb2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBob3Jp
em9udGFsU25hcE9mZnNldHMgOiB2ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgIH0KKworICAgIGNv
bnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxUPj4mIG9mZnNldFJhbmdlc0ZvckF4aXMoU2Ny
b2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXhpcyA9PSBT
Y3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyA6
IHZlcnRpY2FsU25hcE9mZnNldFJhbmdlczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPFQ+JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB2ZXJ0aWNhbFNuYXBPZmZzZXRzID09IG90aGVyLnZlcnRpY2FsU25hcE9mZnNl
dHMKKyAgICAgICAgICAgICYmIGhvcml6b250YWxTbmFwT2Zmc2V0cyA9PSBvdGhlci5ob3Jpem9u
dGFsU25hcE9mZnNldHMKKyAgICAgICAgICAgICYmIHZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyA9
PSBvdGhlci52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMKKyAgICAgICAgICAgICYmIGhvcml6b250
YWxTbmFwT2Zmc2V0UmFuZ2VzID09IG90aGVyLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzOwor
ICAgIH0KIH07CiAKK2NsYXNzIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIgeworcHVibGlj
OgorICAgIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIoU2Nyb2xsU25hcFN0cmljdG5lc3Mp
OworCisgICAgdm9pZCBhZGRWZXJ0aWNhbE9mZnNldChMYXlvdXRVbml0IG9mZnNldCk7CisgICAg
dm9pZCBhZGRIb3Jpem9udGFsT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4+IGJ1aWxkKGNvbnN0
IExheW91dFJlY3QmIHNjcm9sbFNuYXBQb3J0KTsKKworcHJpdmF0ZToKKyAgICBTY3JvbGxTbmFw
U3RyaWN0bmVzcyBtX3N0cmljdG5lc3M7CisgICAgSGFzaFNldDxmbG9hdD4gbV9zZWVuVmVydGlj
YWxTbmFwT2Zmc2V0czsKKyAgICBIYXNoU2V0PGZsb2F0PiBtX3NlZW5Ib3Jpem9udGFsU25hcE9m
ZnNldHM7CisgICAgVmVjdG9yPExheW91dFVuaXQ+IG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzOwor
ICAgIFZlY3RvcjxMYXlvdXRVbml0PiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7Cit9OworCitXRUJD
T1JFX0VYUE9SVCBmbG9hdCBjbG9zZXN0U25hcE9mZnNldChTY3JvbGxTbmFwT2Zmc2V0c0luZm88
ZmxvYXQ+LCBTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2
ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCk7CitXRUJDT1JFX0VYUE9SVCBMYXlv
dXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0
PiwgU2Nyb2xsRXZlbnRBeGlzLCBMYXlvdXRVbml0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2
ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCk7CisKIH07IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaAppbmRleCA3Yjc0ZjhhOTA1MWUzNTk5YzRkYmY0MmJhZmMwODllMWJlNDhm
NGQxLi4xZTEzMDVhMmY5OWNiY2I4ZjM5NzRjZGE0ZjI3YmEyNWYzZWZmOGIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgK
QEAgLTQyLDEwICs0Miw2IEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2VuZGlmCiAK
LSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotI2luY2x1ZGUgIkF4aXNTY3JvbGxTbmFwT2Zm
c2V0cy5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXVEYgewogY2xhc3MgVGV4dFN0cmVhbTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01vbWVu
dHVtQ2FsY3VsYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
TW9tZW50dW1DYWxjdWxhdG9yLmgKaW5kZXggMjFjMzExY2Q4OWI3OTQwODRhODQ5MGQ1ZmM5YmE1
NWE5M2I5YWViZC4uNzNlOTJhNjRkMjMyNWM1ZTFlYTU2OGM0NGQyZDZmOGRkZmE2YTc1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nTW9tZW50dW1D
YWxjdWxhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
TW9tZW50dW1DYWxjdWxhdG9yLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCiAKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAppbmRleCA0MDlhZTlk
OWFlNjc5MDNlZjZiYWEyOWY1YmQyNzRlNGMzZGIxNDVlLi40Nzg5N2FhNWEzNzU1NmQzOWZlNjYz
OWZmNmZmY2M3ZGQ5MWNlMTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaApAQCAtNzEsNiArNzEs
OCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTY3JvbGxPcmlnaW4oY29u
c3QgSW50UG9pbnQmKTsKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgY29uc3Qg
U2Nyb2xsU25hcE9mZnNldHNJbmZvPGZsb2F0PiYgc25hcE9mZnNldHNJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gbV9zbmFwT2Zmc2V0c0luZm87IH0KKwogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhv
cml6b250YWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJbmZvLmhv
cml6b250YWxTbmFwT2Zmc2V0czsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SG9yaXpv
bnRhbFNuYXBPZmZzZXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
LmgKaW5kZXggMTNhZmQzY2MwMGUyMTlhMjc4MjIxMDNhMzc3MTM1OWE1M2JkODAzMS4uOTE2ZDNh
OGEzOTZjZDU2NmQyZmQzZTU1OTAwMDA5OGJmN2FmMWFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5o
CkBAIC05NywxMCArOTcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5IYXZlU2Nyb2xsYmFycygp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzLmhvcml6b250YWxTY3Jv
bGxiYXJNb2RlICE9IFNjcm9sbGJhckFsd2F5c09mZiB8fCBtX3Njcm9sbGFibGVBcmVhUGFyYW1l
dGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmOyB9CiAKICNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhvcml6
b250YWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJbmZvLmhvcml6
b250YWxTbmFwT2Zmc2V0czsgfQotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZlcnRpY2FsU25h
cE9mZnNldHMoKSBjb25zdCB7IHJldHVybiBtX3NuYXBPZmZzZXRzSW5mby52ZXJ0aWNhbFNuYXBP
ZmZzZXRzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPGZsb2F0Pj4mIGhv
cml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwT2Zmc2V0c0lu
Zm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXM7IH0KLSAgICBjb25zdCBWZWN0b3I8U2Nyb2xs
T2Zmc2V0UmFuZ2U8ZmxvYXQ+PiYgdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zbmFwT2Zmc2V0c0luZm8udmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOyB9CisgICAg
Y29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPGZsb2F0PiYgc25hcE9mZnNldHNJbmZvKCkgY29u
c3Q7CiAgICAgdW5zaWduZWQgY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleDsgfQogICAgIHVuc2ln
bmVkIGN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50VmVydGljYWxTbmFwUG9pbnRJbmRleDsgfQogICAgIHZvaWQgc2V0Q3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleCh1bnNpZ25lZCBpbmRleCkgeyBtX2N1cnJlbnRIb3Jpem9udGFsU25h
cFBvaW50SW5kZXggPSBpbmRleDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlTWFjLmgKaW5kZXggN2EwZTczYTFlYjZhNGE5ZWU3NmIyYmNjZDNhZGVhNWE3YjFk
MmZjZS4uOGI2YTY3MDE1MmUzNGQ2ZDJhZDkxNzJlYTFhY2ZjNGE0OTViNWJlNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9t
YWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oCkBAIC01NSw3ICs1NSw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIGN1cnJlbnRTY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKIAog
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9p
bnRzKFNjcm9sbEV2ZW50QXhpcywgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiwgY29uc3QgVmVj
dG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYpOwogICAgIHZvaWQgc2V0QWN0aXZl
U2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMsIHVuc2lnbmVkKTsKICAgICBi
b29sIGFjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSgpIGNvbnN0OwogICAgIHVuc2lnbmVk
IGFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KaW5kZXggNTZm
ZTljMzI0YWNlMjMwNjE1ZWNhYThkOTk5ZTNmMmIyMzhiOGQxZi4uZjMwZWU2MDk2YzQ5MzEzNDU0
OTVlNzhkMjRjYmIwM2MxNTFkOTZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVNYWMubW0KQEAgLTc1LDYgKzc1LDE2IEBAIHN0YXRpYyBpbmxpbmUgVmVj
dG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiBjb252ZXJ0VG9MYXlvdXRVbml0cyhj
b25zdCBWCiAKICAgICByZXR1cm4gc25hcE9mZnNldFJhbmdlczsKIH0KKworc3RhdGljIGlubGlu
ZSBTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4gY29udmVydFRvTGF5b3V0VW5pdHMo
Y29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPGZsb2F0PiYgc25hcE9mZnNldHNJbmZvQXNGbG9h
dCkKK3sKKyAgICByZXR1cm4geworICAgICAgICBjb252ZXJ0VG9MYXlvdXRVbml0cyhzbmFwT2Zm
c2V0c0luZm9Bc0Zsb2F0LnZlcnRpY2FsU25hcE9mZnNldHMpLAorICAgICAgICBjb252ZXJ0VG9M
YXlvdXRVbml0cyhzbmFwT2Zmc2V0c0luZm9Bc0Zsb2F0Lmhvcml6b250YWxTbmFwT2Zmc2V0cyks
CisgICAgICAgIGNvbnZlcnRUb0xheW91dFVuaXRzKHNuYXBPZmZzZXRzSW5mb0FzRmxvYXQudmVy
dGljYWxTbmFwT2Zmc2V0UmFuZ2VzKSwKKyAgICAgICAgY29udmVydFRvTGF5b3V0VW5pdHMoc25h
cE9mZnNldHNJbmZvQXNGbG9hdC5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcykKKyAgICB9Owor
fQogI2VuZGlmCiAKIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6
dXBkYXRlRnJvbVN0YXRlTm9kZShjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmIHNj
cm9sbGluZ1N0YXRlTm9kZSkKQEAgLTg2LDExICs5NiwxMCBAQCB2b2lkIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0ZUZyb21TdGF0ZU5vZGUoY29uc3QgU2Nyb2xs
aW5nUwogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9w
ZXJ0eTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRzKSB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6Okhvcml6b250YWxTbmFw
T2Zmc2V0UmFuZ2VzKSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwsIGNvbnZlcnRUb0xheW91dFVuaXRzKHNjcm9sbGluZ1N0YXRlTm9k
ZS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSksIGNvbnZlcnRUb0xheW91dFVuaXRzKHNjcm9sbGlu
Z1N0YXRlTm9kZS5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcygpKSk7Ci0KLSAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlBy
b3BlcnR5OjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6OlZlcnRpY2FsU25hcE9m
ZnNldFJhbmdlcykpCi0gICAgICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbCwgY29udmVydFRvTGF5b3V0VW5pdHMoc2Nyb2xsaW5nU3RhdGVOb2RlLnZl
cnRpY2FsU25hcE9mZnNldHMoKSksIGNvbnZlcnRUb0xheW91dFVuaXRzKHNjcm9sbGluZ1N0YXRl
Tm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoKSkpOworICAgIGlmIChzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6OlZl
cnRpY2FsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9wZXJ0eTo6VmVydGljYWxTbmFwT2Zmc2V0UmFuZ2Vz
KQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6Okhvcml6b250YWxTbmFwT2Zmc2V0cykgfHwgc2Nyb2xs
aW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlByb3Bl
cnR5OjpIb3Jpem9udGFsU25hcE9mZnNldFJhbmdlcykpIHsKKyAgICAgICAgbV9zY3JvbGxDb250
cm9sbGVyLnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoY29udmVydFRvTGF5b3V0VW5pdHMoc2Nyb2xs
aW5nU3RhdGVOb2RlLnNuYXBPZmZzZXRzSW5mbygpKSk7CisgICAgfQogCiAgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9w
ZXJ0eTo6Q3VycmVudEhvcml6b250YWxTbmFwT2Zmc2V0SW5kZXgpKQogICAgICAgICBzZXRBY3Rp
dmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgc2Ny
b2xsaW5nU3RhdGVOb2RlLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSk7CkBAIC0x
MDAsMTEgKzEwOSw2IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yzo6dXBkYXRlRnJvbVN0YXRlTm9kZShjb25zdCBTY3JvbGxpbmdTCiAjZW5kaWYKIH0KIAotdm9p
ZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjp1cGRhdGVTY3JvbGxTbmFw
UG9pbnRzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNu
YXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBz
bmFwUmFuZ2VzKQotewotICAgIG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxTbmFwUG9p
bnRzKGF4aXMsIHNuYXBPZmZzZXRzLCBzbmFwUmFuZ2VzKTsKLX0KLQogdm9pZCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JB
eGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBtX3Njcm9s
bENvbnRyb2xsZXIuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhheGlzLCBpbmRleCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggZGFlMjdk
ZjNkMjg4N2FmZmE4Y2EwMmIyYzEwODAzMzM3NDg2YjJkZC4uMWQ4MGIxNmY0ZThmMDFhNjRjOWFi
ZWM4Zjk0ZGZhNTg0ZmNjNDg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmNwcApAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3I6Om5vdGlm
eVBvc2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKQogI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCiB2b2lkIFNjcm9sbEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUo
KQogewotICAgIG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxTbmFwU3RhdGUobV9zY3Jv
bGxhYmxlQXJlYSk7CisgICAgbV9zY3JvbGxDb250cm9sbGVyLnVwZGF0ZVNjcm9sbFNuYXBQb2lu
dHMobV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxTbmFwT2Zmc2V0SW5mbygpKTsKIH0KIAogRmxvYXRQ
b2ludCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsT2Zmc2V0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAppbmRleCBhODhkNzQ2MzA0Y2M4ZTZjMWFhYzNk
Mzk0OTUwYThjMmEwOGFlYWZiLi5mZDc0NWE0ZTE4MjljMzVmNTdmMTYyYjRkOTgxMTBiOWVmY2Ix
ZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0z
MiwxOSArMzIsNjYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxhYmxl
QXJlYS5oIgogCisjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlICJMZW5ndGgu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNsdWRl
ICJTY3JvbGxBbmltYXRvck1vY2suaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2lu
Y2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlTnVtYmVycy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK2Vu
dW0gY2xhc3MgSW5zZXRPck91dHNldCB7CisgICAgSW5zZXQsCisgICAgT3V0c2V0Cit9OworCitz
dGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlU2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0KGNvbnN0IExh
eW91dFJlY3QmIHJlY3QsIGNvbnN0IExlbmd0aEJveCYgaW5zZXRPck91dHNldEJveCwgSW5zZXRP
ck91dHNldCBpbnNldE9yT3V0c2V0KQoreworICAgIExheW91dEJveEV4dGVudCBleHRlbnRzKHZh
bHVlRm9yTGVuZ3RoKGluc2V0T3JPdXRzZXRCb3gudG9wKCksIHJlY3QuaGVpZ2h0KCkpLCB2YWx1
ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LnJpZ2h0KCksIHJlY3Qud2lkdGgoKSksIHZhbHVl
Rm9yTGVuZ3RoKGluc2V0T3JPdXRzZXRCb3guYm90dG9tKCksIHJlY3QuaGVpZ2h0KCkpLCB2YWx1
ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LmxlZnQoKSwgcmVjdC53aWR0aCgpKSk7CisgICAg
YXV0byBzbmFwUG9ydE9yQXJlYShyZWN0KTsKKyAgICBpZiAoaW5zZXRPck91dHNldCA9PSBJbnNl
dE9yT3V0c2V0OjpJbnNldCkKKyAgICAgICAgc25hcFBvcnRPckFyZWEuY29udHJhY3QoZXh0ZW50
cyk7CisgICAgZWxzZQorICAgICAgICBzbmFwUG9ydE9yQXJlYS5leHBhbmQoZXh0ZW50cyk7Cisg
ICAgcmV0dXJuIHNuYXBQb3J0T3JBcmVhOworfQorCitzdGF0aWMgTGF5b3V0VW5pdCBjb21wdXRl
U2Nyb2xsU25hcEFsaWduT2Zmc2V0KExheW91dFVuaXQgbWluTG9jYXRpb24sIExheW91dFVuaXQg
bWF4TG9jYXRpb24sIFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlIGFsaWdubWVudCwgYm9vbCBheGlz
SXNGbGlwcGVkKQoreworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7CisgICAgY2FzZSBTY3JvbGxT
bmFwQXhpc0FsaWduVHlwZTo6U3RhcnQ6CisgICAgICAgIHJldHVybiBheGlzSXNGbGlwcGVkID8g
bWF4TG9jYXRpb24gOiBtaW5Mb2NhdGlvbjsKKyAgICBjYXNlIFNjcm9sbFNuYXBBeGlzQWxpZ25U
eXBlOjpDZW50ZXI6CisgICAgICAgIHJldHVybiAobWluTG9jYXRpb24gKyBtYXhMb2NhdGlvbikg
LyAyOworICAgIGNhc2UgU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6OkVuZDoKKyAgICAgICAgcmV0
dXJuIGF4aXNJc0ZsaXBwZWQgPyBtaW5Mb2NhdGlvbiA6IG1heExvY2F0aW9uOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxPZmZzZXRSYW5nZTxUPiYgcmFuZ2UpCit7CisgICAg
dHMgPDwgInN0YXJ0OiAiIDw8IHJhbmdlLnN0YXJ0IDw8ICIgZW5kOiAiIDw8IHJhbmdlLmVuZDsK
KyAgICByZXR1cm4gdHM7Cit9CisjZW5kaWYKKwogc3RydWN0IFNhbWVTaXplQXNTY3JvbGxhYmxl
QXJlYSB7CiAgICAgdmlydHVhbCB+U2FtZVNpemVBc1Njcm9sbGFibGVBcmVhKCk7CiAjaWYgQVNT
RVJUX0VOQUJMRUQKQEAgLTUwMiw1OCArNTQ5LDExIEBAIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0
PiogU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU25hcE9mZnNldHMoKSBjb25zdAogICAgIHJldHVy
biAmbV9zbmFwT2Zmc2V0c0luZm8tPnZlcnRpY2FsU25hcE9mZnNldHM7CiB9CiAKLXZvaWQgU2Ny
b2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTbmFwT2Zmc2V0cyhjb25zdCBWZWN0b3I8TGF5b3V0
VW5pdD4mIGhvcml6b250YWxTbmFwT2Zmc2V0cykKLXsKLSAgICAvLyBDb25zaWRlciBoYXZpbmcg
YSBub24tZW1wdHkgc2V0IG9mIHNuYXAgb2Zmc2V0cyBhcyBhIGN1ZSB0byBpbml0aWFsaXplIHRo
ZSBTY3JvbGxBbmltYXRvci4KLSAgICBpZiAoaG9yaXpvbnRhbFNuYXBPZmZzZXRzLnNpemUoKSkK
LSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKTsKLQotICAgIGVuc3VyZVNuYXBPZmZzZXRzSW5mbygp
Lmhvcml6b250YWxTbmFwT2Zmc2V0cyA9IGhvcml6b250YWxTbmFwT2Zmc2V0czsKLX0KLQotdm9p
ZCBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTbmFwT2Zmc2V0cyhjb25zdCBWZWN0b3I8TGF5
b3V0VW5pdD4mIHZlcnRpY2FsU25hcE9mZnNldHMpCi17Ci0gICAgLy8gQ29uc2lkZXIgaGF2aW5n
IGEgbm9uLWVtcHR5IHNldCBvZiBzbmFwIG9mZnNldHMgYXMgYSBjdWUgdG8gaW5pdGlhbGl6ZSB0
aGUgU2Nyb2xsQW5pbWF0b3IuCi0gICAgaWYgKHZlcnRpY2FsU25hcE9mZnNldHMuc2l6ZSgpKQot
ICAgICAgICBzY3JvbGxBbmltYXRvcigpOwotCi0gICAgZW5zdXJlU25hcE9mZnNldHNJbmZvKCku
dmVydGljYWxTbmFwT2Zmc2V0cyA9IHZlcnRpY2FsU25hcE9mZnNldHM7Ci19Ci0KLXZvaWQgU2Ny
b2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKGNvbnN0IFZlY3RvcjxT
Y3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIGhvcml6b250YWxSYW5nZXMpCi17Ci0gICAg
ZW5zdXJlU25hcE9mZnNldHNJbmZvKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMgPSBob3Jp
em9udGFsUmFuZ2VzOwotfQotCi12b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNuYXBP
ZmZzZXRSYW5nZXMoY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYg
dmVydGljYWxSYW5nZXMpCi17Ci0gICAgZW5zdXJlU25hcE9mZnNldHNJbmZvKCkudmVydGljYWxT
bmFwT2Zmc2V0UmFuZ2VzID0gdmVydGljYWxSYW5nZXM7Ci19Ci0KIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6OmNsZWFyU25hcE9mZnNldHMoKQogewotICAgIGNsZWFySG9yaXpvbnRhbFNuYXBPZmZzZXRz
KCk7Ci0gICAgY2xlYXJWZXJ0aWNhbFNuYXBPZmZzZXRzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsYWJs
ZUFyZWE6OmNsZWFySG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkKLXsKLSAgICBpZiAoIW1fc25hcE9m
ZnNldHNJbmZvKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NuYXBPZmZzZXRzSW5mby0+aG9y
aXpvbnRhbFNuYXBPZmZzZXRzID0geyB9OwotICAgIG1fc25hcE9mZnNldHNJbmZvLT5ob3Jpem9u
dGFsU25hcE9mZnNldFJhbmdlcyA9IHsgfTsKLSAgICBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBv
aW50SW5kZXggPSAwOwotfQotCi12b2lkIFNjcm9sbGFibGVBcmVhOjpjbGVhclZlcnRpY2FsU25h
cE9mZnNldHMoKQotewotICAgIGlmICghbV9zbmFwT2Zmc2V0c0luZm8pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc25hcE9mZnNldHNJbmZvLT52ZXJ0aWNhbFNuYXBPZmZzZXRzID0geyB9Owot
ICAgIG1fc25hcE9mZnNldHNJbmZvLT52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMgPSB7IH07Cisg
ICAgbV9zbmFwT2Zmc2V0c0luZm8gPSBudWxscHRyOwogICAgIG1fY3VycmVudFZlcnRpY2FsU25h
cFBvaW50SW5kZXggPSAwOworICAgIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCA9
IDA7CiB9CiAKIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OnVzZXNTY3JvbGxTbmFwKCkgY29uc3QKQEAg
LTU2MywyOSArNTYzLDI0IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OnVzZXNTY3JvbGxTbmFwKCkg
Y29uc3QKIAogSW50UG9pbnQgU2Nyb2xsYWJsZUFyZWE6Om5lYXJlc3RBY3RpdmVTbmFwUG9pbnQo
Y29uc3QgSW50UG9pbnQmIGN1cnJlbnRQb3NpdGlvbikKIHsKLSAgICBpZiAoIWhvcml6b250YWxT
bmFwT2Zmc2V0cygpICYmICF2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpCisgICAgYXV0byogb2Zmc2V0
c0luZm8gPSBzY3JvbGxTbmFwT2Zmc2V0SW5mbygpOworICAgIGlmICghb2Zmc2V0c0luZm8gfHwg
b2Zmc2V0c0luZm8tPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsK
ICAgICAKICAgICBpZiAoIWV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKICAgICAgICAgcmV0dXJu
IGN1cnJlbnRQb3NpdGlvbjsKICAgICAKICAgICBJbnRQb2ludCBjb3JyZWN0ZWRQb3NpdGlvbiA9
IGN1cnJlbnRQb3NpdGlvbjsKLSAgICAKLSAgICBpZiAoaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkp
IHsKLSAgICAgICAgY29uc3QgYXV0byYgaG9yaXpvbnRhbCA9ICpob3Jpem9udGFsU25hcE9mZnNl
dHMoKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBhY3RpdmVJbmRleCA9IGN1cnJlbnRIb3Jp
em9udGFsU25hcFBvaW50SW5kZXgoKTsKLSAgICAgICAgaWYgKGFjdGl2ZUluZGV4IDwgaG9yaXpv
bnRhbC5zaXplKCkpCi0gICAgICAgICAgICBjb3JyZWN0ZWRQb3NpdGlvbi5zZXRYKGhvcml6b250
YWxbYWN0aXZlSW5kZXhdLnRvSW50KCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAodmVydGljYWxT
bmFwT2Zmc2V0cygpKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIHZlcnRpY2FsID0gKnZlcnRpY2Fs
U25hcE9mZnNldHMoKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBhY3RpdmVJbmRleCA9IGN1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCk7Ci0gICAgICAgIGlmIChhY3RpdmVJbmRleCA8
IHZlcnRpY2FsLnNpemUoKSkKLSAgICAgICAgICAgIGNvcnJlY3RlZFBvc2l0aW9uLnNldFkodmVy
dGljYWxbYWN0aXZlSW5kZXhdLnRvSW50KCkpOwotICAgIH0KKworICAgIGNvbnN0IGF1dG8mIGhv
cml6b250YWwgPSBvZmZzZXRzSW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzOworICAgIHNpemVf
dCBhY3RpdmVIb3Jpem9udGFsSW5kZXggPSBjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
KCk7CisgICAgaWYgKGFjdGl2ZUhvcml6b250YWxJbmRleCA8IGhvcml6b250YWwuc2l6ZSgpKQor
ICAgICAgICBjb3JyZWN0ZWRQb3NpdGlvbi5zZXRYKGhvcml6b250YWxbYWN0aXZlSG9yaXpvbnRh
bEluZGV4XS50b0ludCgpKTsKKworICAgIGNvbnN0IGF1dG8mIHZlcnRpY2FsID0gb2Zmc2V0c0lu
Zm8tPnZlcnRpY2FsU25hcE9mZnNldHM7CisgICAgc2l6ZV90IGFjdGl2ZVZlcnRpY2FsSW5kZXgg
PSBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOworICAgIGlmIChhY3RpdmVWZXJ0aWNh
bEluZGV4IDwgdmVydGljYWwuc2l6ZSgpKQorICAgICAgICBjb3JyZWN0ZWRQb3NpdGlvbi5zZXRZ
KHZlcnRpY2FsW2FjdGl2ZVZlcnRpY2FsSW5kZXhdLnRvSW50KCkpOwogCiAgICAgcmV0dXJuIGNv
cnJlY3RlZFBvc2l0aW9uOwogfQpAQCAtNjExLDYgKzYwNiw4MCBAQCB2b2lkIFNjcm9sbGFibGVB
cmVhOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKQogICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhv
dXRBbmltYXRpb24oY29ycmVjdGVkUG9zaXRpb24pOwogICAgIH0KIH0KKworU2Nyb2xsU25hcE9m
ZnNldHNJbmZvPExheW91dFVuaXQ+KiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsU25hcE9mZnNldElu
Zm8oKSBjb25zdAoreworICAgIHJldHVybiBtX3NuYXBPZmZzZXRzSW5mby5nZXQoKTsKK30KKwor
dm9pZCBTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU25hcE9mZnNldHNGb3JFbGVtZW50KGNvbnN0IFJl
bmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGlu
Z0VsZW1lbnRTdHlsZSwgTGF5b3V0UmVjdCB2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5h
dGVzKQoreworICAgIGF1dG8gc2Nyb2xsU25hcFR5cGUgPSBzY3JvbGxpbmdFbGVtZW50U3R5bGUu
c2Nyb2xsU25hcFR5cGUoKTsKKyAgICBjb25zdCBhdXRvJiBib3hlc1dpdGhTY3JvbGxTbmFwUG9z
aXRpb25zID0gc2Nyb2xsaW5nRWxlbWVudEJveC52aWV3KCkuYm94ZXNXaXRoU2Nyb2xsU25hcFBv
c2l0aW9ucygpOworICAgIGlmIChzY3JvbGxTbmFwVHlwZS5zdHJpY3RuZXNzID09IFNjcm9sbFNu
YXBTdHJpY3RuZXNzOjpOb25lIHx8IGJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMuaXNFbXB0
eSgpKSB7CisgICAgICAgIGNsZWFyU25hcE9mZnNldHMoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNuYXBPZmZzZXRzID0gc2Nyb2xsU25hcFR5cGUu
YXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6Qm90aCB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNj
cm9sbFNuYXBBeGlzOjpYQXhpcyB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBB
eGlzOjpJbmxpbmU7CisgICAgYm9vbCBoYXNWZXJ0aWNhbFNuYXBPZmZzZXRzID0gc2Nyb2xsU25h
cFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6Qm90aCB8fCBzY3JvbGxTbmFwVHlwZS5heGlz
ID09IFNjcm9sbFNuYXBBeGlzOjpZQXhpcyB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9s
bFNuYXBBeGlzOjpCbG9jazsKKworICAgIGF1dG8gbWF4U2Nyb2xsT2Zmc2V0ID0gbWF4aW11bVNj
cm9sbE9mZnNldCgpOworICAgIGF1dG8gc2Nyb2xsUG9zaXRpb24gPSBMYXlvdXRQb2ludCB7IHRo
aXMtPnNjcm9sbFBvc2l0aW9uKCkgfTsKKyAgICBib29sIHNjcm9sbGVySXNSVEwgPSAhc2Nyb2xs
aW5nRWxlbWVudEJveC5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKworICAgIC8v
IFRoZSBib3VuZHMgb2YgdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBzbmFwIHBvcnQsIHdoZXJl
IHRoZSB0b3AgbGVmdCBvZiB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lcidzIGJvcmRlciBib3ggaXMg
dGhlIG9yaWdpbi4KKyAgICBhdXRvIHNjcm9sbFNuYXBQb3J0ID0gY29tcHV0ZVNjcm9sbFNuYXBQ
b3J0T3JBcmVhUmVjdCh2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzLCBzY3JvbGxp
bmdFbGVtZW50U3R5bGUuc2Nyb2xsUGFkZGluZygpLCBJbnNldE9yT3V0c2V0OjpJbnNldCk7Cisg
ICAgU2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlciBidWlsZGVyKHNjcm9sbFNuYXBUeXBlLnN0
cmljdG5lc3MpOworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIkNv
bXB1dGluZyBzY3JvbGwgc25hcCBvZmZzZXRzIGZvciAiIDw8IHRoaXMgPDwgIiBpbiBzbmFwIHBv
cnQgIiA8PCBzY3JvbGxTbmFwUG9ydCk7CisgICAgZm9yIChhdXRvKiBjaGlsZCA6IGJveGVzV2l0
aFNjcm9sbFNuYXBQb3NpdGlvbnMpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5lbmNsb3NpbmdTY3Jv
bGxhYmxlQ29udGFpbmVyRm9yU25hcHBpbmcoKSAhPSAmc2Nyb2xsaW5nRWxlbWVudEJveCkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFRoZSBib3VuZHMgb2YgdGhlIGNoaWxk
IGVsZW1lbnQncyBzbmFwIGFyZWEsIHdoZXJlIHRoZSB0b3AgbGVmdCBvZiB0aGUgc2Nyb2xsaW5n
IGNvbnRhaW5lcidzIGJvcmRlciBib3ggaXMgdGhlIG9yaWdpbi4KKyAgICAgICAgLy8gVGhlIHNu
YXAgYXJlYSBpcyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBjaGlsZCBlbGVtZW50J3MgYm9yZGVy
IGJveCwgYWZ0ZXIgYXBwbHlpbmcgdHJhbnNmb3JtYXRpb25zLgorICAgICAgICAvLyBGSVhNRTog
Rm9yIG5vdywganVzdCBjb25zaWRlciB3aGV0aGVyIHRoZSBzY3JvbGxlciBpcyBSVEwuIFRoZSBi
ZWhhdmlvciBvZiBMVFIgYm94ZXMgaW5zaWRlIGEgUlRMIHNjcm9sbGVyIGlzIHBvb3JseSBkZWZp
bmVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvNTM2MS4KKyAg
ICAgICAgYXV0byBzY3JvbGxTbmFwQXJlYSA9IExheW91dFJlY3QoY2hpbGQtPmxvY2FsVG9Db250
YWluZXJRdWFkKEZsb2F0UXVhZChjaGlsZC0+Ym9yZGVyQm91bmRpbmdCb3goKSksICZzY3JvbGxp
bmdFbGVtZW50Qm94KS5ib3VuZGluZ0JveCgpKTsKKworICAgICAgICAvLyBsb2NhbFRvQ29udGFp
bmVyUXVhZCB3aWxsIHRyYW5zZm9ybSB0aGUgc2Nyb2xsIHNuYXAgYXJlYSBieSB0aGUgc2Nyb2xs
IHBvc2l0aW9uLCBleGNlcHQgaW4gdGhlIGNhc2UgdGhhdCB0aGlzIHBvc2l0aW9uIGlzCisgICAg
ICAgIC8vIGNvbWluZyBmcm9tIGEgU2Nyb2xsVmlldy4gV2Ugd2FudCB0aGUgdHJhbnNmb3JtZWQg
YXJlYSwgYnV0IHdpdGhvdXQgc2Nyb2xsIHBvc2l0aW9uIHRha2VuIGludG8gYWNjb3VudC4KKyAg
ICAgICAgaWYgKCFpc1Njcm9sbFZpZXcoKSkKKyAgICAgICAgICAgIHNjcm9sbFNuYXBBcmVhLm1v
dmVCeShzY3JvbGxQb3NpdGlvbik7CisKKyAgICAgICAgc2Nyb2xsU25hcEFyZWEgPSBjb21wdXRl
U2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0KHNjcm9sbFNuYXBBcmVhLCBjaGlsZC0+c3R5bGUoKS5z
Y3JvbGxNYXJnaW4oKSwgSW5zZXRPck91dHNldDo6T3V0c2V0KTsKKyAgICAgICAgTE9HX1dJVEhf
U1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiICAgIENvbnNpZGVyaW5nIHNjcm9sbCBzbmFw
IHRhcmdldCBhcmVhICIgPDwgc2Nyb2xsU25hcEFyZWEpOworICAgICAgICBhdXRvIGFsaWdubWVu
dCA9IGNoaWxkLT5zdHlsZSgpLnNjcm9sbFNuYXBBbGlnbigpOworICAgICAgICBpZiAoaGFzSG9y
aXpvbnRhbFNuYXBPZmZzZXRzICYmIGFsaWdubWVudC54ICE9IFNjcm9sbFNuYXBBeGlzQWxpZ25U
eXBlOjpOb25lKSB7CisgICAgICAgICAgICBhdXRvIGFic29sdXRlU2Nyb2xsWFBvc2l0aW9uID0g
Y29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwQXJlYS54KCksIHNjcm9sbFNu
YXBBcmVhLm1heFgoKSwgYWxpZ25tZW50LngsIHNjcm9sbGVySXNSVEwpIC0gY29tcHV0ZVNjcm9s
bFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwUG9ydC54KCksIHNjcm9sbFNuYXBQb3J0Lm1heFgo
KSwgYWxpZ25tZW50LngsIHNjcm9sbGVySXNSVEwpOworICAgICAgICAgICAgYXV0byBhYnNvbHV0
ZVNjcm9sbE9mZnNldCA9IGNsYW1wVG88aW50PihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oeyBy
b3VuZFRvSW50KGFic29sdXRlU2Nyb2xsWFBvc2l0aW9uKSwgMCB9KS54KCksIDAsIG1heFNjcm9s
bE9mZnNldC54KCkpOworICAgICAgICAgICAgYnVpbGRlci5hZGRIb3Jpem9udGFsT2Zmc2V0KGFi
c29sdXRlU2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzVmVydGljYWxT
bmFwT2Zmc2V0cyAmJiBhbGlnbm1lbnQueSAhPSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Tm9u
ZSkgeworICAgICAgICAgICAgYXV0byBhYnNvbHV0ZVNjcm9sbFlQb3NpdGlvbiA9IGNvbXB1dGVT
Y3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25hcEFyZWEueSgpLCBzY3JvbGxTbmFwQXJlYS5t
YXhZKCksIGFsaWdubWVudC55LCBmYWxzZSkgLSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0
KHNjcm9sbFNuYXBQb3J0LnkoKSwgc2Nyb2xsU25hcFBvcnQubWF4WSgpLCBhbGlnbm1lbnQueSwg
ZmFsc2UpOworICAgICAgICAgICAgYXV0byBhYnNvbHV0ZVNjcm9sbE9mZnNldCA9IGNsYW1wVG88
aW50PihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oeyAwLCByb3VuZFRvSW50KGFic29sdXRlU2Ny
b2xsWVBvc2l0aW9uKSB9KS55KCksIDAsIG1heFNjcm9sbE9mZnNldC55KCkpOworICAgICAgICAg
ICAgYnVpbGRlci5hZGRWZXJ0aWNhbE9mZnNldChhYnNvbHV0ZVNjcm9sbE9mZnNldCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBtX3NuYXBPZmZzZXRzSW5mbyA9IGJ1aWxkZXIuYnVpbGQoc2Ny
b2xsU25hcFBvcnQpOworICAgIEFTU0VSVChtX3NuYXBPZmZzZXRzSW5mbyk7CisKKyAgICBpZiAo
IW1fc25hcE9mZnNldHNJbmZvLT5ob3Jpem9udGFsU25hcE9mZnNldHMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21wdXRl
ZCBob3Jpem9udGFsIHNjcm9sbCBzbmFwIG9mZnNldHM6ICIgPDwgaG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+
IENvbXB1dGVkIGhvcml6b250YWwgc2Nyb2xsIHNuYXAgb2Zmc2V0IHJhbmdlczogIiA8PCBob3Jp
em9udGFsU25hcE9mZnNldFJhbmdlcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY3VycmVudEhv
cml6b250YWxTbmFwUG9pbnRJbmRleCA9IDA7CisKKyAgICBpZiAoIW1fc25hcE9mZnNldHNJbmZv
LT52ZXJ0aWNhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgdmVydGljYWwgc2Nyb2xsIHNu
YXAgb2Zmc2V0czogIiA8PCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKTsKKyAgICAgICAgTE9HX1dJVEhf
U1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIHZlcnRpY2FsIHNjcm9s
bCBzbmFwIG9mZnNldCByYW5nZXM6ICIgPDwgdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCA9IDA7CisK
KyAgICAvLyBDb25zaWRlciBoYXZpbmcgYSBub24tZW1wdHkgc2V0IG9mIHNuYXAgb2Zmc2V0cyBh
cyBhIGN1ZSB0byBpbml0aWFsaXplIHRoZSBTY3JvbGxBbmltYXRvci4KKyAgICBpZiAoIW1fc25h
cE9mZnNldHNJbmZvLT5pc0VtcHR5KCkpCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCk7Cit9CiAj
ZWxzZQogdm9pZCBTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCmluZGV4IDg1MWEwMmZjYmIzZTk3
NjkxYmYwMWQ5YjIxMDk3MWQ5YWU2ZDc5NDkuLjNkYTRkZTY2ZjNhNDY3MWUwMzAxODUxMTM1NGZj
ODc4ZjU0ZDg5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFi
bGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaApA
QCAtNDQsNiArNDQsOCBAQCBjbGFzcyBMYXlvdXRQb2ludDsKIGNsYXNzIExheW91dFNpemU7CiBj
bGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CitjbGFz
cyBSZW5kZXJCb3g7CitjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFNjcm9sbEFuaW1hdG9yOwog
Y2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIFRpbGVkQmFja2luZzsKQEAgLTkxLDE0ICs5Mywx
NiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+
KiB2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
VmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiogaG9yaXpvbnRhbFNuYXBPZmZz
ZXRSYW5nZXMoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBWZWN0b3I8U2Nyb2xs
T2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+KiB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4q
IHNjcm9sbFNuYXBPZmZzZXRJbmZvKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNu
YXBPZmZzZXRzKCkgeyB9OwotICAgIHZvaWQgc2V0SG9yaXpvbnRhbFNuYXBPZmZzZXRzKGNvbnN0
IFZlY3RvcjxMYXlvdXRVbml0PiYpOwotICAgIHZvaWQgc2V0VmVydGljYWxTbmFwT2Zmc2V0cyhj
b25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mKTsKLSAgICB2b2lkIHNldEhvcml6b250YWxTbmFwT2Zm
c2V0UmFuZ2VzKGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mKTsK
LSAgICB2b2lkIHNldFZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyhjb25zdCBWZWN0b3I8U2Nyb2xs
T2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+Jik7CisKKyAgICAvLyBVcGRhdGUgdGhlIHNuYXAgb2Zm
c2V0cyBmb3IgdGhpcyBzY3JvbGxhYmxlIGFyZWEsIGdpdmVuIHRoZSBSZW5kZXJCb3ggb2YgdGhl
IHNjcm9sbCBjb250YWluZXIsIHRoZSBSZW5kZXJTdHlsZQorICAgIC8vIHdoaWNoIGRlZmluZXMg
dGhlIHNjcm9sbC1zbmFwIHByb3BlcnRpZXMsIGFuZCB0aGUgdmlld3BvcnQgcmVjdGFuZ2xlIHdp
dGggdGhlIG9yaWdpbiBhdCB0aGUgdG9wIGxlZnQgb2YKKyAgICAvLyB0aGUgc2Nyb2xsaW5nIGNv
bnRhaW5lcidzIGJvcmRlciBib3guCisgICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvckVsZW1l
bnQoY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBjb25zdCBSZW5kZXJTdHls
ZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdEluQm9yZGVy
Qm94Q29vcmRpbmF0ZXMpOworCiAgICAgdm9pZCBjbGVhclNuYXBPZmZzZXRzKCk7Ci0gICAgdm9p
ZCBjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cygpOwotICAgIHZvaWQgY2xlYXJWZXJ0aWNhbFNu
YXBPZmZzZXRzKCk7CisKICAgICB1bnNpZ25lZCBjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludElu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4OyB9
CiAgICAgdm9pZCBzZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkIGlu
ZGV4KSB7IG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCA9IGluZGV4OyB9CiAgICAg
dW5zaWduZWQgY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgKaW5kZXggZmIyYWE4NjM3Y2Y4YzczMGVl
YzFlNDMzZmQ2YWIwMTA4ZmQ5YjExMi4uZjk4OTdkOTdlNTJiNzNkZjEwZWVmOTcxZmY2M2NjNTRh
MWVkMzMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xs
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENv
bnRyb2xsZXIuaApAQCAtMTYwLDEzICsxNjAsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2Nyb2xs
UG9zaXRpb25DaGFuZ2VkKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZv
aWQgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4aXMsIGNvbnN0IFZlY3RvcjxM
YXlvdXRVbml0PiYsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4m
KTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsU25hcE9mZnNldHNJbmZv
PExheW91dFVuaXQ+Kik7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnN0IFNj
cm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYpOwogICAgIHZvaWQgc2V0QWN0aXZlU2Ny
b2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMsIHVuc2lnbmVkKTsKICAgICB2b2lk
IHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2VzRm9yT2Zmc2V0KFNjcm9sbE9mZnNldCk7CiAgICAg
Ym9vbCBhY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2Fj
dGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZTsgfQogICAgIHZvaWQgc2V0U2Nyb2xsU25hcElu
ZGV4RGlkQ2hhbmdlKGJvb2wgc3RhdGUpIHsgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFu
Z2UgPSBzdGF0ZTsgfQogICAgIHVuc2lnbmVkIGFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMo
U2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZShj
b25zdCBTY3JvbGxhYmxlQXJlYSYpOwogCiAgICAgdm9pZCB1cGRhdGVHZXN0dXJlSW5Qcm9ncmVz
c1N0YXRlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQppbmRleCA3YmYwMDUxMGVkOTli
MmVkYWViYTYyMzllMmYzOTlhMTMzNzQ3YzkxLi42ZGRmYTM4ZGMwOGE5NDQ3ZDNkZjNjMjJmYzQ0
NjdjNGU5ZDhiMzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9T
Y3JvbGxDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Nj
cm9sbENvbnRyb2xsZXIubW0KQEAgLTgxLDExICs4MSw2IEBAIHN0YXRpYyBmbG9hdCBzY3JvbGxX
aGVlbE11bHRpcGxpZXIoKQogfQogI2VuZGlmCiAKLXN0YXRpYyBTY3JvbGxFdmVudEF4aXMgb3Ro
ZXJTY3JvbGxFdmVudEF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCi17Ci0gICAgcmV0dXJuIGF4
aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0
aWNhbCA6IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbDsKLX0KLQogU2Nyb2xsQ29udHJvbGxl
cjo6U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xpZW50JiBjbGllbnQpCiAgICAg
OiBtX2NsaWVudChjbGllbnQpCiB7CkBAIC03MjAsNyArNzE1LDcgQEAgYm9vbCBTY3JvbGxDb250
cm9sbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JgogICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKG1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xs
RXZlbnRBeGlzOjpIb3Jpem9udGFsKS5pc0VtcHR5KCkgJiYgbV9zY3JvbGxTbmFwU3RhdGUtPnNu
YXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKS5pc0VtcHR5KCkpCisg
ICAgaWYgKG1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0c0luZm8oKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8gc3RhdHVzID0gdG9XaGVlbEV2ZW50U3Rh
dHVzKHdoZWVsRXZlbnQucGhhc2UoKSwgd2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkpOwpAQCAt
ODIwLDQ2ICs4MTUsMzEgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzY3JvbGxTbmFwVGltZXJG
aXJlZCgpCiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi12b2lkIFNjcm9sbENvbnRyb2xs
ZXI6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZShjb25zdCBTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJs
ZUFyZWEpCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Ny
b2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+KiBzbmFwT2Zmc2V0c0luZm8pCiB7Ci0gICAg
aWYgKGF1dG8qIHNuYXBPZmZzZXRzID0gc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHNuYXBPZmZzZXRSYW5nZXMgPSBzY3JvbGxhYmxl
QXJlYS5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcygpKQotICAgICAgICAgICAgdXBkYXRlU2Ny
b2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsICpzbmFwT2Zmc2V0cywg
KnNuYXBPZmZzZXRSYW5nZXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cGRhdGVTY3Jv
bGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgKnNuYXBPZmZzZXRzLCB7
IH0pOwotICAgIH0gZWxzZQotICAgICAgICB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCwgeyB9LCB7IH0pOwotCi0gICAgaWYgKGF1dG8qIHNuYXBPZmZz
ZXRzID0gc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTbmFwT2Zmc2V0cygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBzbmFwT2Zmc2V0UmFuZ2VzID0gc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTbmFwT2Zm
c2V0UmFuZ2VzKCkpCi0gICAgICAgICAgICB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2
ZW50QXhpczo6VmVydGljYWwsICpzbmFwT2Zmc2V0cywgKnNuYXBPZmZzZXRSYW5nZXMpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwsICpzbmFwT2Zmc2V0cywgeyB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAg
dXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCB7IH0sIHsg
fSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJTY3JvbGxD
b250cm9sbGVyICIgPDwgdGhpcyA8PCAiIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSBmb3IgIiA8PCBz
Y3JvbGxhYmxlQXJlYSA8PCAiIG5ldyBzdGF0ZSAiIDw8IFZhbHVlT3JOdWxsKG1fc2Nyb2xsU25h
cFN0YXRlLmdldCgpKSk7CisgICAgaWYgKCFzbmFwT2Zmc2V0c0luZm8pIHsKKyAgICAgICAgbV9z
Y3JvbGxTbmFwU3RhdGUgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHVw
ZGF0ZVNjcm9sbFNuYXBQb2ludHMoKnNuYXBPZmZzZXRzSW5mbyk7CiB9CiAKLXZvaWQgU2Nyb2xs
Q29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4aXMgYXhpcywg
Y29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwUG9pbnRzLCBjb25zdCBWZWN0b3I8U2Nyb2xs
T2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBzbmFwUmFuZ2VzKQordm9pZCBTY3JvbGxDb250cm9s
bGVyOjp1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxM
YXlvdXRVbml0PiYgc25hcE9mZnNldHNJbmZvKQogewotICAgIGJvb2wgc2hvdWxkQ29tcHV0ZUN1
cnJlbnRTbmFwSW5kaWNlcyA9IGZhbHNlOwotICAgIGlmICghbV9zY3JvbGxTbmFwU3RhdGUpIHsK
LSAgICAgICAgaWYgKHNuYXBQb2ludHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChzbmFwT2Zmc2V0c0luZm8uaXNFbXB0eSgpKSB7CisgICAgICAgIG1fc2Nyb2xsU25h
cFN0YXRlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIGJvb2wgc2hv
dWxkQ29tcHV0ZUN1cnJlbnRTbmFwSW5kaWNlcyA9ICFtX3Njcm9sbFNuYXBTdGF0ZTsKKyAgICBp
ZiAoIW1fc2Nyb2xsU25hcFN0YXRlKQogICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZSA9IG1ha2VV
bmlxdWU8U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU+KCk7Ci0gICAgICAgIHNob3VsZENvbXB1dGVD
dXJyZW50U25hcEluZGljZXMgPSB0cnVlOwotICAgIH0KIAotICAgIGlmIChzbmFwUG9pbnRzLmlz
RW1wdHkoKSAmJiBtX3Njcm9sbFNuYXBTdGF0ZS0+c25hcE9mZnNldHNGb3JBeGlzKG90aGVyU2Ny
b2xsRXZlbnRBeGlzKGF4aXMpKS5pc0VtcHR5KCkpCi0gICAgICAgIG1fc2Nyb2xsU25hcFN0YXRl
ID0gbnVsbHB0cjsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnNldFNu
YXBPZmZzZXRzQW5kUG9zaXRpb25SYW5nZXNGb3JBeGlzKGF4aXMsIHNuYXBQb2ludHMsIHNuYXBS
YW5nZXMpOwotICAgICAgICBpZiAoc2hvdWxkQ29tcHV0ZUN1cnJlbnRTbmFwSW5kaWNlcykgewot
ICAgICAgICAgICAgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQocm91bmRlZElu
dFBvaW50KG1fY2xpZW50LnNjcm9sbE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3Jv
bGxTbmFwUG9pbnRzIC0gY29tcHV0ZWQgaW5pdGlhbCBzbmFwIGluZGljZXM6IHggIiA8PCBtX3Nj
cm9sbFNuYXBTdGF0ZS0+YWN0aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwpIDw8ICIsIHkgIiA8PCBtX3Njcm9sbFNuYXBTdGF0ZS0+YWN0aXZlU25hcEluZGV4
Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7Ci0gICAgICAgIH0KKyAgICBtX3Nj
cm9sbFNuYXBTdGF0ZS0+c2V0U25hcE9mZnNldEluZm8oc25hcE9mZnNldHNJbmZvKTsKKworICAg
IGlmIChzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzKSB7CisgICAgICAgIHNldEFjdGl2
ZVNjcm9sbFNuYXBJbmRpY2VzRm9yT2Zmc2V0KHJvdW5kZWRJbnRQb2ludChtX2NsaWVudC5zY3Jv
bGxPZmZzZXQoKSkpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFt
IDw8ICJTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwUG9pbnRzIC0gY29tcHV0ZWQg
aW5pdGlhbCBzbmFwIGluZGljZXM6IHggIiA8PCBtX3Njcm9sbFNuYXBTdGF0ZS0+YWN0aXZlU25h
cEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpIDw8ICIsIHkgIiA8PCBt
X3Njcm9sbFNuYXBTdGF0ZS0+YWN0aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6
OlZlcnRpY2FsKSk7CiAgICAgfQogfQogCkBAIC04ODcsMTQgKzg2NywxNCBAQCB2b2lkIFNjcm9s
bENvbnRyb2xsZXI6OnNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNj
cm9sbEV2ZW50QXhpcwogICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gbV9jbGllbnQucGFnZVNjYWxl
RmFjdG9yKCk7CiAgICAgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHNuYXBTdGF0ZSA9ICptX3Nj
cm9sbFNuYXBTdGF0ZTsKIAotICAgIGF1dG8gc25hcE9mZnNldHMgPSBzbmFwU3RhdGUuc25hcE9m
ZnNldHNGb3JBeGlzKGF4aXMpOworICAgIGF1dG8gc25hcE9mZnNldHMgPSBzbmFwU3RhdGUuc25h
cE9mZnNldHNJbmZvKCkub2Zmc2V0c0ZvckF4aXMoYXhpcyk7CiAgICAgaWYgKCFzbmFwT2Zmc2V0
cy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIExheW91dFVuaXQgY2xhbXBlZE9mZnNl
dCA9IHN0ZDo6bWluKHN0ZDo6bWF4KExheW91dFVuaXQob2Zmc2V0IC8gc2NhbGVGYWN0b3IpLCBz
bmFwT2Zmc2V0cy5maXJzdCgpKSwgc25hcE9mZnNldHMubGFzdCgpKTsKIAogICAgIHVuc2lnbmVk
IGFjdGl2ZUluZGV4ID0gMDsKLSAgICBjbG9zZXN0U25hcE9mZnNldChzbmFwU3RhdGUuc25hcE9m
ZnNldHNGb3JBeGlzKGF4aXMpLCBzbmFwU3RhdGUuc25hcE9mZnNldFJhbmdlc0ZvckF4aXMoYXhp
cyksIGNsYW1wZWRPZmZzZXQsIDAsIGFjdGl2ZUluZGV4KTsKKyAgICBjbG9zZXN0U25hcE9mZnNl
dChzbmFwU3RhdGUuc25hcE9mZnNldHNJbmZvKCksIGF4aXMsIGNsYW1wZWRPZmZzZXQsIDAsIGFj
dGl2ZUluZGV4KTsKIAogICAgIGlmIChhY3RpdmVJbmRleCA9PSBhY3RpdmVTY3JvbGxTbmFwSW5k
ZXhGb3JBeGlzKGF4aXMpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaAppbmRleCAwYmNl
NmI4YzQ3YWNmYjMxZWQ3NjViYjk4NjA5MTBhY2RlMmFhZDMwLi5lZTA3ZWNhNjI5MDc0YTVkYWZj
OGRjMDEwNjZlNjQ4ODY3MGU1OTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKQEAgLTI3LDcgKzI3LDYgQEAK
IAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25h
cE9mZnNldHMuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXpl
LmgiCiAjaW5jbHVkZSAiTGF5b3V0UG9pbnQuaCIKQEAgLTUzLDI3ICs1Miw4IEBAIGVudW0gY2xh
c3MgU2Nyb2xsU25hcFN0YXRlIHsKIGNsYXNzIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBjb25zdCBWZWN0b3I8TGF5
b3V0VW5pdD4mIHNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCA/IG1fc25hcE9mZnNldHNYIDogbV9zbmFwT2Zmc2V0c1k7Ci0gICAgfQotCi0gICAgY29uc3Qg
VmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcE9mZnNldFJhbmdlc0Zv
ckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
YXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBtX3NuYXBPZmZzZXRSYW5nZXNY
IDogbV9zbmFwT2Zmc2V0UmFuZ2VzWTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFNuYXBPZmZzZXRz
QW5kUG9zaXRpb25SYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0
b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFu
Z2U8TGF5b3V0VW5pdD4+JiBzbmFwT2Zmc2V0UmFuZ2VzKQotICAgIHsKLSAgICAgICAgaWYgKGF4
aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSB7Ci0gICAgICAgICAgICBtX3NuYXBP
ZmZzZXRzWCA9IHNuYXBPZmZzZXRzOwotICAgICAgICAgICAgbV9zbmFwT2Zmc2V0UmFuZ2VzWCA9
IHNuYXBPZmZzZXRSYW5nZXM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3NuYXBP
ZmZzZXRzWSA9IHNuYXBPZmZzZXRzOwotICAgICAgICAgICAgbV9zbmFwT2Zmc2V0UmFuZ2VzWSA9
IHNuYXBPZmZzZXRSYW5nZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0KKyAgICBjb25zdCBTY3JvbGxT
bmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzSW5mbygpIGNvbnN0IHsgcmV0
dXJuIG1fc25hcE9mZnNldHNJbmZvOyB9CisgICAgdm9pZCBzZXRTbmFwT2Zmc2V0SW5mbyhjb25z
dCBTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzSW5mbykgeyBt
X3NuYXBPZmZzZXRzSW5mbyA9IHNuYXBPZmZzZXRzSW5mbzsgfQogICAgIFNjcm9sbFNuYXBTdGF0
ZSBjdXJyZW50U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRTdGF0ZTsgfQogCiAgICAg
dW5zaWduZWQgYWN0aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29u
c3QKQEAgLTk4LDE3ICs3OCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCB0cmFuc2l0aW9uVG9EZXN0
aW5hdGlvblJlYWNoZWRTdGF0ZSgpOwogCiBwcml2YXRlOgotICAgIGZsb2F0IHRhcmdldE9mZnNl
dEZvclN0YXJ0T2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIGNv
bnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRSYW5n
ZXMsIGZsb2F0IG1heFNjcm9sbE9mZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHByZWRp
Y3RlZE9mZnNldCwgZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBkZWx0YSwgdW5zaWduZWQmIG91dEFj
dGl2ZVNuYXBJbmRleCkgY29uc3Q7CisgICAgZmxvYXQgdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZz
ZXQoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBtYXhTY3JvbGxPZmZzZXQsIGZsb2F0IHN0YXJ0T2Zm
c2V0LCBmbG9hdCBwcmVkaWN0ZWRPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgZGVsdGEs
IHVuc2lnbmVkJiBvdXRBY3RpdmVTbmFwSW5kZXgpIGNvbnN0OwogICAgIHZvaWQgdGVhcmRvd25B
bmltYXRpb25Gb3JTdGF0ZShTY3JvbGxTbmFwU3RhdGUpOwogICAgIHZvaWQgc2V0dXBBbmltYXRp
b25Gb3JTdGF0ZShTY3JvbGxTbmFwU3RhdGUsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudFNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgdmlld3BvcnRTaXplLCBmbG9hdCBwYWdlU2NhbGUsIGNvbnN0IEZs
b2F0UG9pbnQmIGluaXRpYWxPZmZzZXQsIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbFZlbG9jaXR5
LCBjb25zdCBGbG9hdFNpemUmIGluaXRpYWxEZWx0YSk7CiAKICAgICBTY3JvbGxTbmFwU3RhdGUg
bV9jdXJyZW50U3RhdGUgeyBTY3JvbGxTbmFwU3RhdGU6OlVzZXJJbnRlcmFjdGlvbiB9OwogCi0g
ICAgVmVjdG9yPExheW91dFVuaXQ+IG1fc25hcE9mZnNldHNYOwotICAgIFZlY3RvcjxTY3JvbGxP
ZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4gbV9zbmFwT2Zmc2V0UmFuZ2VzWDsKKyAgICBTY3JvbGxT
bmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4gbV9zbmFwT2Zmc2V0c0luZm87CiAgICAgdW5zaWdu
ZWQgbV9hY3RpdmVTbmFwSW5kZXhYIHsgMCB9OwotICAgIFZlY3RvcjxMYXlvdXRVbml0PiBtX3Nu
YXBPZmZzZXRzWTsKLSAgICBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+IG1f
c25hcE9mZnNldFJhbmdlc1k7CiAgICAgdW5zaWduZWQgbV9hY3RpdmVTbmFwSW5kZXhZIHsgMCB9
OwogCiAgICAgTW9ub3RvbmljVGltZSBtX3N0YXJ0VGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0KaW5kZXgg
OTQ1MDYwMzY1OWZjYTE4YmQyZWI3ODIwMjNmYWMxM2QzYTYwMWU5NC4uMzU2ZjllYjY4ZDVlYjQ4
NGRmMmNjOTQ5MWZhZWIwMTIxOTJjYjk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0KQEAgLTUxLDggKzUx
LDggQEAgdm9pZCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6c2V0dXBBbmltYXRpb25Gb3JTdGF0
ZShTY3JvbGxTbmFwU3RhdGUgc3RhdGUsIGNvbnMKIAogICAgIG1fbW9tZW50dW1DYWxjdWxhdG9y
ID0gU2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yOjpjcmVhdGUodmlld3BvcnRTaXplLCBjb250
ZW50U2l6ZSwgaW5pdGlhbE9mZnNldCwgaW5pdGlhbERlbHRhLCBpbml0aWFsVmVsb2NpdHkpOwog
ICAgIGF1dG8gcHJlZGljdGVkU2Nyb2xsVGFyZ2V0ID0gbV9tb21lbnR1bUNhbGN1bGF0b3ItPnBy
ZWRpY3RlZERlc3RpbmF0aW9uT2Zmc2V0KCk7Ci0gICAgZmxvYXQgdGFyZ2V0T2Zmc2V0WCA9IHRh
cmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KG1fc25hcE9mZnNldHNYLCBtX3NuYXBPZmZzZXRSYW5n
ZXNYLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlld3BvcnRTaXplLndpZHRoKCksIGluaXRpYWxP
ZmZzZXQueCgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQud2lkdGgoKSwgcGFnZVNjYWxlLCBpbml0
aWFsRGVsdGEud2lkdGgoKSwgbV9hY3RpdmVTbmFwSW5kZXhYKTsKLSAgICBmbG9hdCB0YXJnZXRP
ZmZzZXRZID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQobV9zbmFwT2Zmc2V0c1ksIG1fc25h
cE9mZnNldFJhbmdlc1ksIGNvbnRlbnRTaXplLmhlaWdodCgpIC0gdmlld3BvcnRTaXplLmhlaWdo
dCgpLCBpbml0aWFsT2Zmc2V0LnkoKSwgcHJlZGljdGVkU2Nyb2xsVGFyZ2V0LmhlaWdodCgpLCBw
YWdlU2NhbGUsIGluaXRpYWxEZWx0YS5oZWlnaHQoKSwgbV9hY3RpdmVTbmFwSW5kZXhZKTsKKyAg
ICBmbG9hdCB0YXJnZXRPZmZzZXRYID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xs
RXZlbnRBeGlzOjpIb3Jpem9udGFsLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlld3BvcnRTaXpl
LndpZHRoKCksIGluaXRpYWxPZmZzZXQueCgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQud2lkdGgo
KSwgcGFnZVNjYWxlLCBpbml0aWFsRGVsdGEud2lkdGgoKSwgbV9hY3RpdmVTbmFwSW5kZXhYKTsK
KyAgICBmbG9hdCB0YXJnZXRPZmZzZXRZID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2aWV3cG9ydFNp
emUuaGVpZ2h0KCksIGluaXRpYWxPZmZzZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQuaGVp
Z2h0KCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRhLmhlaWdodCgpLCBtX2FjdGl2ZVNuYXBJbmRl
eFkpOwogICAgIG1fbW9tZW50dW1DYWxjdWxhdG9yLT5zZXRSZXRhcmdldGVkU2Nyb2xsT2Zmc2V0
KHsgdGFyZ2V0T2Zmc2V0WCwgdGFyZ2V0T2Zmc2V0WSB9KTsKICAgICBtX3N0YXJ0VGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOwogICAgIG1fY3VycmVudFN0YXRlID0gc3RhdGU7CkBAIC05MSwx
NCArOTEsMTUgQEAgRmxvYXRQb2ludCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6Y3VycmVudEFu
aW1hdGVkU2Nyb2xsT2Zmc2V0KGJvb2wmIGlzQW5pbWF0aW8KICAgICByZXR1cm4gbV9tb21lbnR1
bUNhbGN1bGF0b3ItPnNjcm9sbE9mZnNldEFmdGVyRWxhcHNlZFRpbWUoZWxhcHNlZFRpbWUpOwog
fQogCi1mbG9hdCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6dGFyZ2V0T2Zmc2V0Rm9yU3RhcnRP
ZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9y
PFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcE9mZnNldFJhbmdlcywgZmxvYXQg
bWF4U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0
LCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2
ZVNuYXBJbmRleCkgY29uc3QKK2Zsb2F0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjp0YXJnZXRP
ZmZzZXRGb3JTdGFydE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgbWF4U2Nyb2xs
T2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBw
YWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRl
eCkgY29uc3QKIHsKKyAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0cyA9IG1fc25hcE9mZnNldHNJ
bmZvLm9mZnNldHNGb3JBeGlzKGF4aXMpOwogICAgIGlmIChzbmFwT2Zmc2V0cy5pc0VtcHR5KCkp
IHsKICAgICAgICAgb3V0QWN0aXZlU25hcEluZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsK
ICAgICAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0YXJ0T2Zmc2V0LCAwLCBtYXhTY3JvbGxP
ZmZzZXQpOwogICAgIH0KIAotICAgIGZsb2F0IHRhcmdldE9mZnNldCA9IGNsb3Nlc3RTbmFwT2Zm
c2V0KHNuYXBPZmZzZXRzLCBzbmFwT2Zmc2V0UmFuZ2VzLCBMYXlvdXRVbml0KHByZWRpY3RlZE9m
ZnNldCAvIHBhZ2VTY2FsZSksIGluaXRpYWxEZWx0YSwgb3V0QWN0aXZlU25hcEluZGV4KTsKKyAg
ICBmbG9hdCB0YXJnZXRPZmZzZXQgPSBjbG9zZXN0U25hcE9mZnNldChtX3NuYXBPZmZzZXRzSW5m
bywgYXhpcywgTGF5b3V0VW5pdChwcmVkaWN0ZWRPZmZzZXQgLyBwYWdlU2NhbGUpLCBpbml0aWFs
RGVsdGEsIG91dEFjdGl2ZVNuYXBJbmRleCk7CiAgICAgZmxvYXQgbWluaW11bVRhcmdldE9mZnNl
dCA9IHN0ZDo6bWF4PGZsb2F0PigwLCBzbmFwT2Zmc2V0cy5maXJzdCgpKTsKICAgICBmbG9hdCBt
YXhpbXVtVGFyZ2V0T2Zmc2V0ID0gc3RkOjptaW48ZmxvYXQ+KG1heFNjcm9sbE9mZnNldCwgc25h
cE9mZnNldHMubGFzdCgpKTsKICAgICB0YXJnZXRPZmZzZXQgPSBjbGFtcFRvPGZsb2F0Pih0YXJn
ZXRPZmZzZXQsIG1pbmltdW1UYXJnZXRPZmZzZXQsIG1heGltdW1UYXJnZXRPZmZzZXQpOwpAQCAt
MTE1LDEyICsxMTYsMTIgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgU2Nyb2xsT2Zmc2V0UmFuZ2U8VD4mIHJhbmdlKQogVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHN0YXRlKQog
ewogICAgIHRzIDw8ICJTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSI7Ci0gICAgdHMuZHVtcFByb3Bl
cnR5KCJzbmFwIG9mZnNldHMgeCIsIHN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyB5
Iiwgc3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsK
LSAgICBpZiAoIXN0YXRlLnNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6
SG9yaXpvbnRhbCkuaXNFbXB0eSgpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zm
c2V0cyByYW5nZXMgeCIsIHN0YXRlLnNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbCkpOwotICAgIGlmICghc3RhdGUuc25hcE9mZnNldFJhbmdlc0ZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkuaXNFbXB0eSgpKQotICAgICAgICB0cy5kdW1w
UHJvcGVydHkoInNuYXAgb2Zmc2V0cyByYW5nZXMgeSIsIHN0YXRlLnNuYXBPZmZzZXRSYW5nZXNG
b3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
InNuYXAgb2Zmc2V0cyB4Iiwgc3RhdGUuc25hcE9mZnNldHNJbmZvKCkub2Zmc2V0c0ZvckF4aXMo
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzbmFw
IG9mZnNldHMgeSIsIHN0YXRlLnNuYXBPZmZzZXRzSW5mbygpLm9mZnNldHNGb3JBeGlzKFNjcm9s
bEV2ZW50QXhpczo6VmVydGljYWwpKTsKKyAgICBpZiAoIXN0YXRlLnNuYXBPZmZzZXRzSW5mbygp
Lm9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKS5pc0VtcHR5
KCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHJhbmdlcyB4Iiwgc3Rh
dGUuc25hcE9mZnNldHNJbmZvKCkub2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwpKTsKKyAgICBpZiAoIXN0YXRlLnNuYXBPZmZzZXRzSW5mbygpLm9mZnNldFJh
bmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkuaXNFbXB0eSgpKQorICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyByYW5nZXMgeSIsIHN0YXRlLnNuYXBPZmZz
ZXRzSW5mbygpLm9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkp
OwogCiAgICAgdHMuZHVtcFByb3BlcnR5KCJhY3RpdmUgc25hcCBpbmRleCB4Iiwgc3RhdGUuYWN0
aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKICAgICB0
cy5kdW1wUHJvcGVydHkoImFjdGl2ZSBzbmFwIGluZGV4IHkiLCBzdGF0ZS5hY3RpdmVTbmFwSW5k
ZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDMyNmUyOGU2MGM0NzhiM2FhZDc2OWE2YzE0NWQz
ZTQ0YTEwMDU5ZDIuLjUxOTI1YmFmNzc4ZWVlZGJmY2ZjY2NhNGE1M2U5OWU3YWEzMmZlNjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTM1LDEwICsxMzUs
NiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotI2luY2x1ZGUgIkF4
aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIgotI2VuZGlmCi0KICNkZWZpbmUgTUlOX0lOVEVSU0VDVF9G
T1JfUkVWRUFMIDMyCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2MTYsNyArMzYxMiw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOwot
ICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpib3gsIGJveC0+
c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsKKyAgICB1cGRhdGVTbmFwT2Zmc2V0c0Zv
ckVsZW1lbnQoKmJveCwgYm94LT5zdHlsZSgpLCBib3gtPnBhZGRpbmdCb3hSZWN0KCkpOwogfQog
CiBib29sIFJlbmRlckxheWVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QK
</data>
<flag name="commit-queue"
          id="431895"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414904</attachid>
            <date>2020-11-26 07:24:31 -0800</date>
            <delta_ts>2020-11-26 08:06:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219273-20201126162429.patch</filename>
            <type>text/plain</type>
            <size>89962</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU4OTczNDk1NDJmNTQx
NTk1NGNkN2Q2MDgyNmQxYzg0YWVjYWZlMy4uM2ZlYTYxM2YxMDU1ZTYyNThmZWM3ZTJlZmQ3Yzk1
ZmM4MTQ4ZTRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDIwLTExLTI2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBVc2UgU2Nyb2xs
U25hcE9mZnNldHNJbmZvIGluIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlIGFuZCBhYnN0cmFjdCBh
d2F5IHNvbWUgb2YgdGhlIGludGVybmFscyBvZiBTbmFwT2Zmc2V0c0luZm8gaW4gU2Nyb2xsYWJs
ZUFyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
IG9yZGVyIHRvIHN1cHBvcnQgbWFzb25yeSBsYXlvdXQgZm9yIENTUyBzY3JvbGwgc25hcCwgU2Ny
b2xsIG9mZnNldHMgd2lsbCBzb29uIG5vIGxvbmdlciBiZSBhIHNlcGFyYXRlIHNldCBvZiBvbmUg
ZGltZW5zaW9uYWwKKyAgICAgICAgdmVydGljYWwgYW5kIGhvcml6b250YWwgb2Zmc2V0cywgYnV0
IG9mZnNldCBwb2ludHMgaW4gdHdvIGRpbWVuc2lvbnMuIEFsbW9zdCBhbGwgb2YgdGhlIGV4aXN0
aW5nIHN1cHBvcnQgY29kZSBmb3Igc2Nyb2xsIHNuYXAKKyAgICAgICAgaXMgd3JpdHRlbiB3aXRo
IHRoZSBvbmUgZGltZW5zaW9uYWwgb2Zmc2V0cyBpbiBtaW5kLgorCisgICAgICAgIFRoaXMgcmVm
YWN0b3IgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGFic3RyYWN0aW5nIGF3YXkgdGhlIGRldGFp
bHMgb2Ygc2Nyb2xsIG9mZnNldHMgYnkgdXNpbmcgU2Nyb2xsU25hcE9mZnNldHNJbmZvIGluIG1v
cmUgcGxhY2VzCisgICAgICAgIHdoZXJlIHRoZSBvbmUgZGltZW5zaW9uYWwgc2V0IG9mIG9mZnNl
dHMgd2VyZSB1c2VkIGJlZm9yZS4gVGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZSBoZXJlIGlzIHRv
IHN0YXJ0IHVzaW5nIFNjcm9sbFNuYXBPZmZzZXRzSW5mbworICAgICAgICBpbiBTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZSBhbmQgaW4gU2Nyb2xsYWJsZUFyZWEuCisKKyAgICAgICAgVGhpcyBhbHNv
IGVsaW1pbmF0ZXMgQXhpc1Njcm9sbFNuYXBPZmZzZXRzIHdoaWNoIGhhcyBhbiBpbnRlcmZhY2Ug
dXNpbmcgb25lIGRpbWVuc2lvbmFsIHNjcm9sbCBvZmZzZXRzIGFuZCBtb3ZlcyB0aGUgY29kZQor
ICAgICAgICBpbnRvIFNjcm9sbFNuYXBPZmZzdHNJbmZvIGFuZCBTY3JvbGxhYmxlQXJlYS4gRmlu
YWxseSwgdGhpcyBjaGFuZ2UgYWRkcyBTY3JvbGxTbmFwT2Zmc2V0c0luZm9CdWlsZGVyIHRvIGhl
bHAgY29udmVydCBsYXlvdXQKKyAgICAgICAgcHJvcGVydGllcyBpbnRvIHNjcm9sbCBvZmZzZXRz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhlc2UgY2hhbmdlcyBzaG91bGQgbm90IG1vZGlm
eSBiZWhhdmlvci4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6IFJlbW92ZSBBeGlzU2Nyb2xs
U25hcE9mZnNldHMuaC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDogUmVtb3ZlIEF4aXNTY3JvbGxT
bmFwT2Zmc2V0cy5jcHAgYW5kIGFkZCBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVT
bmFwT2Zmc2V0cyk6IENoYW5nZXMgdG8gcmVmbGVjdCBuZXcgbWV0aG9kIG5hbWUuCisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKTog
TW92ZWQgZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuCisgICAgICAgIChXZWJDb3JlOjppbmRp
Y2VzT2ZOZWFyZXN0U25hcE9mZnNldHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNsb3Nl
c3RTbmFwT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXhpc1Byb3hp
bWl0eVNuYXBPZmZzZXRSYW5nZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNu
YXBPZmZzZXRzSW5mb0J1aWxkZXI6OlNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIpOiBBZGRl
ZCB0aGlzIGZhY3RvcnkgY2xhc3MsIHdoaWNoIGFic3RyYWN0cyBhd2F5IGNvbnN0cnVjdGlvbiBv
ZiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwT2Zm
c2V0c0luZm9CdWlsZGVyOjphZGRWZXJ0aWNhbE9mZnNldCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6YWRkSG9yaXpvbnRhbE9mZnNldCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6
YnVpbGQpOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0
c0luZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6aXNFbXB0
eSBjb25zdCk6IEFkZGVkIGhlbHBlciBmb3IgZGV0ZWN0aW5nIGVtcHR5IHNldHMgb2Ygb2Zmc2V0
cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6b2Zmc2V0c0ZvckF4
aXMgY29uc3QpOiBBZGRlZCBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwT2Zm
c2V0c0luZm86Om9mZnNldFJhbmdlc0ZvckF4aXMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDogUmVtb3ZlZCB1bm5lY2Vz
c2FyeSBoZWFkZXIgaW5jbHVkZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdN
b21lbnR1bUNhbGN1bGF0b3IuaDogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OnNuYXBPZmZzZXRzSW5mbyBjb25zdCk6IEFkZGVkLgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg6IFJlbW92ZWQg
YWNjZXNzIHRvIGhvcml6b250YWwKKyAgICAgICAgYW5kIHZlcnRpY2FsIG9mZnNldHMuCisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWMuaDogUmVtb3ZlZCBtZXRob2QuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0VG9MYXlvdXRVbml0cyk6IEFkZGVkIGEgY29udmVyc2lvbiBmdW5jdGlvbiBmb3Ig
U2Nyb2xsU25hcE9mZnNldHNJbmZvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6dXBkYXRlRnJvbVN0YXRlTm9kZSk6IEFsd2F5cyB0aGUg
ZW50aXJlIFNjcm9sbFNuYXBPZmZzZXRzSW5mby4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUpOiBVcGRhdGUg
dG8gcmVmbGVjdCBuZXcgYXJndW1lbnRzIHRvIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9s
bFNuYXBQb2ludHMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdCk6IE1vdmVkIGhl
cmUgZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRl
U2Nyb2xsU25hcEFsaWduT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y2xlYXJTbmFw
T2Zmc2V0cyk6IFNjcm9sbGFibGVBcmVhIGhhcyBhIFNjcm9sbFNuYXBPZmZzZXRzSW5mbyBpbnN0
ZWFkIG9mIHNlcGFyYXRlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIG9mZnNldHMuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bmVhcmVzdEFjdGl2ZVNuYXBQb2ludCk6IFVwZGF0
ZSB0byByZWZsZWN0IHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsU25hcE9mZnNldEluZm8gY29uc3QpOiBBZGRlZCBnZXR0ZXIuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU25hcE9mZnNldHNGb3JFbGVtZW50KTogQWRkZWQgdGhp
cyBtZXRob2Qgd2hpY2ggbWFpbmx5IGNvbWVzIGZyb20gQXhpc1Njcm9sbFNuYXBPZmZzZXRzIGFu
ZCB1c2VzIHRoZSBuZXcgU2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlci4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU25hcE9mZnNldHMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU25hcE9mZnNl
dHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6
b250YWxTbmFwT2Zmc2V0UmFuZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNsZWFySG9yaXpvbnRhbFNuYXBPZmZzZXRzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjbGVhclZlcnRpY2Fs
U25hcE9mZnNldHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVh
Lmg6IFVwZGF0ZSB0byByZWZsZWN0IG5ldyBhbmQgcmVtb3ZlZCBtZXRob2RzLgorICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaDogTW9kaWZ5IGFyZ3VtZW50cyBwYXNz
ZWQgdG8gbWV0aG9kcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVy
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZl
bnRGb3JTY3JvbGxTbmFwKTogVXNlIG5ldyBTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmlzRW1wdHkg
aGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xs
U25hcFBvaW50cyk6IE5vdyBzZXQgdGhlIGVudGlyZSBTY3JvbGxTbmFwT2Zmc2V0c0luZm8gYXQg
b25jZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNldE5lYXJlc3RTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KTogQWNjZXNzIHRoZSBTY3JvbGxTbmFwT2Zmc2V0
c0luZm8gbm93IGluc3RlYWQgb2YgdGhlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIG9mZnNldHMu
CisgICAgICAgIChXZWJDb3JlOjpvdGhlclNjcm9sbEV2ZW50QXhpcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRl
Lmg6IFN0b3JlIFNuYXBPZmZzZXRzSW5mbyBpbnN0ZWFkIG9mIHZlcnRpY2FsIGFuZCBob3Jpem9u
dGFsIG9mZnNldHMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6
c25hcE9mZnNldHNJbmZvIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZTo6c2V0U25hcE9mZnNldEluZm8pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpzbmFwT2Zmc2V0c0ZvckF4aXMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnNu
YXBPZmZzZXRSYW5nZXNGb3JBeGlzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpzZXRTbmFwT2Zmc2V0c0FuZFBvc2l0aW9uUmFuZ2Vz
Rm9yQXhpcyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZTo6c2V0dXBBbmltYXRpb25Gb3JTdGF0ZSk6IE1vZGlmaWVkIHRvIHBhc3MgU2Nyb2xsU25hcE9m
ZnNldHNJbmZvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRh
cmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0IGNvbnN0KTogQWNjZXB0cyBTY3JvbGxTbmFwT2Zmc3Rz
SW5mby4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBVc2UgU2Nyb2xsU25hcE9mZnN0
c0luZm8gZnJvbSBzdGF0ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKTogVXBkYXRl
IHRvIHJlZmxlY3QgbmV3IG1ldGhvZC4KKwogMjAyMC0xMS0xNiAgU2VyZ2lvIFZpbGxhciBTZW5p
biAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWZsZXhdIEltYWdlcyBhcyBm
bGV4IGl0ZW1zIHNob3VsZCB1c2UgdGhlIG92ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0IHdoZW4gZGVm
aW5lZCB0byBjb21wdXRlIHRoZSBsb2dpY2FsIHdpZHRoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDdhMTA5YjhmZjFl
MDExZjdiOTgxZTNiMTQxODM2ZGRiYjQyMTU0OWUuLjBhOGNlYTY1MDg2ZDhjMzY3MjU3ZGFmMDYx
ZGI0MGMzNDJmMzQzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMTEtMjYgIE1h
cnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNpbXBsaWZ5
IG1haW5mcmFtZSB0ZXN0cyB0aWxlZC1kcmF3aW5nL3Njcm9sbGluZy9zY3JvbGwtc25hcAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NzU3CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83MTMyMjE1ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW06IFJlbW92ZSB1bnVzZWQgaW5jbHVk
ZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tOiBEaXR0by4KKwogMjAyMC0xMS0xOSAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChy
MjU5MTUxKTogVGhlICJDb252ZXJ0IFRleHQgdG8gVHJhZGl0aW9uYWwgQ2hpbmVzZSIgc2Vydmlj
ZXMgbWVudSBhY3Rpb24gaXMgYnJva2VuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAwMjNlMTUzZGEz
YzY3ZGUxN2EyNTJiZWYxY2FiMjY4N2Q0MzkzMDZkLi40ZWFiOWFiMzE4MzAzYTgyYmNmYjI0Mjcz
Y2VmOTFiNmE1YTQ3NDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTkzNiw3ICs5MzYsNiBAQCBz
ZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGFnZS9jc3AvQ29udGVu
dFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLmgKIAogICAgIHBhZ2Uvc2Nyb2xsaW5nL0Fz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAotICAgIHBhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxT
bmFwT2Zmc2V0cy5oCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgK
ICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50cy5oCiAgICAgcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBhZmNmNDVhYWNi
NDc0NzQzNjQxM2Y4YWU1OTlmM2RhZTRiZWRjZGNmLi45ZjM5ODcyZjRkMTk2ODYyZWZlNzFjMDky
ODk2ODk2MDg3M2M4ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTc0Myw3ICsxNzQzLDcgQEAgcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmNwcAogcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAKIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3REaXJlY3RpdmUuY3BwCiBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmNwcAotcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcAor
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAogcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcAogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29u
c3RyYWludHMuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA4YjI1MTRmZDJiMmI2NTM0MDIyYmI0ZGFiMmQwNjhhMGJkMDUyMGZmLi4wODJlY2ZhM2I5NjIy
ZGE4MWJmZmRmODhiYzNlOGE4OTA1Nzc1NmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MjI0LDcgKzUyMjQsNiBAQAogCQlG
NDRBNUY1OTFGRUQzOEYyMDA3RjU5NDQgLyogTGVnYWN5TlNQYXN0ZWJvYXJkVHlwZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NEE1RjU3MUZFRDM4
MzAwMDdGNTk0NCAvKiBMZWdhY3lOU1Bhc3RlYm9hcmRUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0NEVCQkQ5MURCNUQyMTQwMDI3NzMz
NCAvKiBTdGF0aWNSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ0RUJCRDgxREI1RDIxNDAwMjc3MzM0IC8qIFN0YXRpY1JhbmdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ1Nzc1Q0UyNDE0
MzdENTAwMkRGMUEwIC8qIElubGluZVBhdGhEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDU3NzVDRDI0MTQzN0Q1MDAyREYxQTAgLyogSW5saW5l
UGF0aERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlGNDVDMjMxRTE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDVDMjMxQzE5
OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ2NzI5MjgxRTBERTY4NTAwQUND
M0Q4IC8qIFNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2NzI5MjUxRTBERTVBQjAwQUNDM0Q4IC8qIFNjcm9sbFNu
YXBPZmZzZXRzSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUY0NkM0NDdFMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGlu
Z3NEYXRhU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNDZDNDQ3QzIzNDY1NDU0MDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZS5oICovOyB9OwogCQlGNDc4NzU1NDE5OTgzQUZGMDAyNEEyODcgLyogU2Nyb2xsU25h
cEFuaW1hdG9yU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0Nzg3NTUyMTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05
Mzc1LDYgKzkzNzQsNyBAQAogCQk1QjMwNjk1QTE4QjNEMzQ1MDA5OUQ1RTggLyogV2ViR0xEcmF3
QnVmZmVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTERy
YXdCdWZmZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUIzMDY5NUIxOEIz
RDM0NTAwOTlENUU4IC8qIFdlYkdMRHJhd0J1ZmZlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViR0xEcmF3QnVmZmVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1QjMwNjk1QzE4QjNEMzQ1MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVycy5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xEcmF3QnVmZmVycy5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTVCN0FCOUY2MjU2N0RCN0UwMDY1OTJEMCAvKiBTY3JvbGxTbmFwT2Zm
c2V0c0luZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xs
U25hcE9mZnNldHNJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMwMDE1
MjEyNTAwMTEwMDAwOTRBQTkzIC8qIFRleHRDb2RlY1NpbmdsZUJ5dGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENvZGVjU2luZ2xlQnl0ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMDAxNTIzMjUwMDExMDEwMDk0QUE5MyAvKiBUZXh0
Q29kZWNTaW5nbGVCeXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRD
b2RlY1NpbmdsZUJ5dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMzOTMwNUQx
QUEwRjZBOTAwMjlDODE2IC8qIERGQUJ5dGVjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERGQUJ5dGVjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NjQ2OCw4ICsxNjQ2OCw2IEBACiAJCUY0NEVCQkQ4MURCNUQyMTQwMDI3NzMzNCAvKiBTdGF0aWNS
YW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNSYW5nZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDRFQkJEQTFEQjVERDlEMDAyNzczMzQgLyog
U3RhdGljUmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Rh
dGljUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDU3NzVDRDI0MTQz
N0Q1MDAyREYxQTAgLyogSW5saW5lUGF0aERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lUGF0
aERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjQ1QzIzMUIxOTk1QjczQjAw
QTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGNDVDMjMxQzE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNu
YXBPZmZzZXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF4aXNTY3JvbGxT
bmFwT2Zmc2V0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDYyOEE5RTIzNEQz
QkJGMDBCQzg4NEMgLyogUGxhdGZvcm1QYXN0ZWJvYXJkQ29jb2EubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ2MkU3OUYyNDJBREEzQzAwMjA0REREIC8qIERy
YWdEYXRhQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBE
cmFnRGF0YUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDYyRTdBMDI0
MkFEQTNEMDAyMDREREQgLyogRHJhZ0ltYWdlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnSW1hZ2VDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4NDIyLDggKzE4NDIwLDYgQEAKIAkJCQkxQUY2MkVFMjE0REEyMkE3MDA0
MTU1NkMgLyogbWFjICovLAogCQkJCTBGRkQ0RDVFMTg2NTFGQTMwMDUxMkY2RSAvKiBBc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKIAkJCQkwRkZENEQ1RjE4NjUxRkEzMDA1MTJGNkUg
LyogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oICovLAotCQkJCUY0NUMyMzFCMTk5NUI3M0Iw
MEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwICovLAotCQkJCUY0NUMyMzFDMTk5
NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCAqLywKIAkJCQkwRjYwNUFF
QTE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwICovLAogCQkJCTBG
NjA1QUVCMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5oICovLAogCQkJ
CTFBRjYyRUU0MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5jcHAgKi8s
CkBAIC0xODQ3Myw2ICsxODQ2OSw3IEBACiAJCQkJQTZENUE5OUIxNjI5RDcwMDAwMjk3MzMwIC8q
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaCAqLywKIAkJCQkwRjk1MTBGMjI0
RjQ3NjlDMDAxRjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcCAqLywKIAkJCQkw
Rjk1MTBGMDI0RjQ3NjlDMDAxRjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmggKi8s
CisJCQkJNUI3QUI5RjYyNTY3REI3RTAwNjU5MkQwIC8qIFNjcm9sbFNuYXBPZmZzZXRzSW5mby5j
cHAgKi8sCiAJCQkJRjQ2NzI5MjUxRTBERTVBQjAwQUNDM0Q4IC8qIFNjcm9sbFNuYXBPZmZzZXRz
SW5mby5oICovLAogCQkJCTBGNjM4M0RCMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRlZFNjcm9s
bGluZ1RyZWUuY3BwICovLAogCQkJCTBGNjM4M0RDMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRl
ZFNjcm9sbGluZ1RyZWUuaCAqLywKQEAgLTMxMDg0LDcgKzMxMDgxLDYgQEAKIAkJCQkwNzAzNjNF
NjE4MUExQ0RDMDBDMDc0QTUgLyogQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI5QUUyMTM1MjFBQkE0OEEwMDg2OTI4MyAvKiBBWElzb2xhdGVkT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkyOUFFMjEyRDIxQUI5RUVCMDA4NjkyODMgLyogQVhJc29sYXRlZFRy
ZWUuaCBpbiBIZWFkZXJzICovLAotCQkJCUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlz
U2Nyb2xsU25hcE9mZnNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjM4MEZCQjlDMUQw
MDUxMDI5MyAvKiBBWE9iamVjdENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MUM5RjJGOTFB
RTNCRUIwMDA5NUI2MUMgLyogQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0NzdFNzc3MEJGNDEzNEEwMDE1Mjg3MiAvKiBCYWNrRm9yd2FyZENhY2hlLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBkNjdiNDQwMDBhNGU5
Y2M5MjFjZmRkOTBlOTA2NDU2YjM4MzJiMTVhLi5mY2QzMGFiMDcyNjhkMzBhMDg4NzI0MTBiOTll
NzdmMzdiZjBmODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xMTcsMTAgKzEx
Nyw2IEBACiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKICNlbmRpZgogCi0jaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCIK
LSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgogI2luY2x1ZGUgIkxlZ2FjeVRpbGVDYWNoZS5oIgpAQCAtOTQ5LDcgKzk0NSw3IEBA
IHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVTbmFwT2Zmc2V0cygpCiAgICAgTGF5b3V0UmVjdCB2aWV3
cG9ydCA9IExheW91dFJlY3QoSW50UG9pbnQoKSwgYmFzZUxheW91dFZpZXdwb3J0U2l6ZSgpKTsK
ICAgICB2aWV3cG9ydC5tb3ZlKC1yb290UmVuZGVyZXItPm1hcmdpbkxlZnQoKSwgLXJvb3RSZW5k
ZXJlci0+bWFyZ2luVG9wKCkpOwogCi0gICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxl
QXJlYSgqdGhpcywgKnJvb3RSZW5kZXJlciwgKnN0eWxlVG9Vc2UsIHZpZXdwb3J0KTsKKyAgICB1
cGRhdGVTbmFwT2Zmc2V0c0ZvckVsZW1lbnQoKnJvb3RSZW5kZXJlciwgKnN0eWxlVG9Vc2UsIHZp
ZXdwb3J0KTsKIH0KIAogYm9vbCBGcmFtZVZpZXc6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9s
bFNuYXBPZmZzZXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3Jv
bGxTbmFwT2Zmc2V0cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MjM5ODk4
Yjk4MTMwYmQxMzJkY2VjZWRkOGZkYzdiOGU0Y2NkMTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQXhpc1Njcm9s
bFNuYXBPZmZzZXRzLmgiCi0KLSNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiTGVuZ3RoLmgiCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
LSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgotI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBv
aW50cy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgot
Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1l
bnVtIGNsYXNzIEluc2V0T3JPdXRzZXQgewotICAgIEluc2V0LAotICAgIE91dHNldAotfTsKLQot
c3RhdGljIExheW91dFJlY3QgY29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdChjb25zdCBM
YXlvdXRSZWN0JiByZWN0LCBjb25zdCBMZW5ndGhCb3gmIGluc2V0T3JPdXRzZXRCb3gsIEluc2V0
T3JPdXRzZXQgaW5zZXRPck91dHNldCkKLXsKLSAgICBMYXlvdXRCb3hFeHRlbnQgZXh0ZW50cyh2
YWx1ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LnRvcCgpLCByZWN0LmhlaWdodCgpKSwgdmFs
dWVGb3JMZW5ndGgoaW5zZXRPck91dHNldEJveC5yaWdodCgpLCByZWN0LndpZHRoKCkpLCB2YWx1
ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LmJvdHRvbSgpLCByZWN0LmhlaWdodCgpKSwgdmFs
dWVGb3JMZW5ndGgoaW5zZXRPck91dHNldEJveC5sZWZ0KCksIHJlY3Qud2lkdGgoKSkpOwotICAg
IGF1dG8gc25hcFBvcnRPckFyZWEocmVjdCk7Ci0gICAgaWYgKGluc2V0T3JPdXRzZXQgPT0gSW5z
ZXRPck91dHNldDo6SW5zZXQpCi0gICAgICAgIHNuYXBQb3J0T3JBcmVhLmNvbnRyYWN0KGV4dGVu
dHMpOwotICAgIGVsc2UKLSAgICAgICAgc25hcFBvcnRPckFyZWEuZXhwYW5kKGV4dGVudHMpOwot
ICAgIHJldHVybiBzbmFwUG9ydE9yQXJlYTsKLX0KLQotc3RhdGljIExheW91dFVuaXQgY29tcHV0
ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChMYXlvdXRVbml0IG1pbkxvY2F0aW9uLCBMYXlvdXRVbml0
IG1heExvY2F0aW9uLCBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZSBhbGlnbm1lbnQsIGJvb2wgYXhp
c0lzRmxpcHBlZCkKLXsKLSAgICBzd2l0Y2ggKGFsaWdubWVudCkgewotICAgIGNhc2UgU2Nyb2xs
U25hcEF4aXNBbGlnblR5cGU6OlN0YXJ0OgotICAgICAgICByZXR1cm4gYXhpc0lzRmxpcHBlZCA/
IG1heExvY2F0aW9uIDogbWluTG9jYXRpb247Ci0gICAgY2FzZSBTY3JvbGxTbmFwQXhpc0FsaWdu
VHlwZTo6Q2VudGVyOgotICAgICAgICByZXR1cm4gKG1pbkxvY2F0aW9uICsgbWF4TG9jYXRpb24p
IC8gMjsKLSAgICBjYXNlIFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpFbmQ6Ci0gICAgICAgIHJl
dHVybiBheGlzSXNGbGlwcGVkID8gbWluTG9jYXRpb24gOiBtYXhMb2NhdGlvbjsKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsT2Zmc2V0UmFuZ2U8VD4mIHJhbmdlKQotewotICAg
IHRzIDw8ICJzdGFydDogIiA8PCByYW5nZS5zdGFydCA8PCAiIGVuZDogIiA8PCByYW5nZS5lbmQ7
Ci0gICAgcmV0dXJuIHRzOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KLXN0
YXRpYyB2b2lkIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKExheW91dFR5cGUgb2Zm
c2V0LCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+JiBzbmFwT2Zm
c2V0UmFuZ2VzLCB1bnNpZ25lZCYgbG93ZXJJbmRleCwgdW5zaWduZWQmIHVwcGVySW5kZXgpCi17
Ci0gICAgaWYgKHNuYXBPZmZzZXRSYW5nZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGxvd2VySW5k
ZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OwotICAgICAgICB1cHBlckluZGV4ID0gaW52YWxp
ZFNuYXBPZmZzZXRJbmRleDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBsb3dl
ckluZGV4QXNJbnQgPSAtMTsKLSAgICBpbnQgdXBwZXJJbmRleEFzSW50ID0gc25hcE9mZnNldFJh
bmdlcy5zaXplKCk7Ci0gICAgZG8gewotICAgICAgICBpbnQgbWlkZGxlSW5kZXggPSAobG93ZXJJ
bmRleEFzSW50ICsgdXBwZXJJbmRleEFzSW50KSAvIDI7Ci0gICAgICAgIGF1dG8mIHJhbmdlID0g
c25hcE9mZnNldFJhbmdlc1ttaWRkbGVJbmRleF07Ci0gICAgICAgIGlmIChyYW5nZS5zdGFydCA8
IG9mZnNldCAmJiBvZmZzZXQgPCByYW5nZS5lbmQpIHsKLSAgICAgICAgICAgIGxvd2VySW5kZXhB
c0ludCA9IG1pZGRsZUluZGV4OwotICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxl
SW5kZXg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvZmZz
ZXQgPiByYW5nZS5lbmQpCi0gICAgICAgICAgICBsb3dlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRl
eDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5k
ZXg7Ci0gICAgfSB3aGlsZSAobG93ZXJJbmRleEFzSW50IDwgdXBwZXJJbmRleEFzSW50IC0gMSk7
Ci0KLSAgICBpZiAob2Zmc2V0IDw9IHNuYXBPZmZzZXRSYW5nZXMuZmlyc3QoKS5zdGFydCkKLSAg
ICAgICAgbG93ZXJJbmRleCA9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7Ci0gICAgZWxzZQotICAg
ICAgICBsb3dlckluZGV4ID0gbG93ZXJJbmRleEFzSW50OwotCi0gICAgaWYgKG9mZnNldCA+PSBz
bmFwT2Zmc2V0UmFuZ2VzLmxhc3QoKS5lbmQpCi0gICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlk
U25hcE9mZnNldEluZGV4OwotICAgIGVsc2UKLSAgICAgICAgdXBwZXJJbmRleCA9IHVwcGVySW5k
ZXhBc0ludDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+Ci1zdGF0aWMgdm9p
ZCBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHMoTGF5b3V0VHlwZSBvZmZzZXQsIGNvbnN0IFZl
Y3RvcjxMYXlvdXRUeXBlPiYgc25hcE9mZnNldHMsIHVuc2lnbmVkJiBsb3dlckluZGV4LCB1bnNp
Z25lZCYgdXBwZXJJbmRleCkKLXsKLSAgICBsb3dlckluZGV4ID0gMDsKLSAgICB1cHBlckluZGV4
ID0gc25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKLSAgICB3aGlsZSAobG93ZXJJbmRleCA8IHVwcGVy
SW5kZXggLSAxKSB7Ci0gICAgICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4ICsgdXBw
ZXJJbmRleCkgLyAyOwotICAgICAgICBhdXRvIG1pZGRsZU9mZnNldCA9IHNuYXBPZmZzZXRzW21p
ZGRsZUluZGV4XTsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBtaWRkbGVPZmZzZXQpIHsKLSAgICAg
ICAgICAgIHVwcGVySW5kZXggPSBtaWRkbGVJbmRleDsKLSAgICAgICAgICAgIGxvd2VySW5kZXgg
PSBtaWRkbGVJbmRleDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG9mZnNldCA+IG1pZGRsZU9mZnNldCkKLSAgICAgICAgICAgIGxvd2VySW5kZXggPSBtaWRk
bGVJbmRleDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUlu
ZGV4OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29tcHV0ZUF4aXNQcm94aW1pdHlTbmFwT2Zm
c2V0UmFuZ2VzKGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIFZlY3RvcjxT
Y3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIG9mZnNldFJhbmdlcywgTGF5b3V0VW5pdCBz
Y3JvbGxQb3J0QXhpc0xlbmd0aCkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGFyYml0cmFyeSBjaG9p
Y2UgZm9yIHdoYXQgaXQgbWVhbnMgdG8gYmUgImluIHByb3hpbWl0eSIgb2YgYSBzbmFwIG9mZnNl
dC4gV2Ugc2hvdWxkIHBsYXkgYXJvdW5kIHdpdGgKLSAgICAvLyB0aGlzIGFuZCBzZWUgd2hhdCBm
ZWVscyBiZXN0LgotICAgIHN0YXRpYyBjb25zdCBmbG9hdCByYXRpb09mU2Nyb2xsUG9ydEF4aXNM
ZW5ndGhUb0JlQ29uc2lkZXJlZEZvclByb3hpbWl0eSA9IDAuMzsKLSAgICBpZiAoc25hcE9mZnNl
dHMuc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGV4dHJhIHJ1bGUg
YWNjb3VudGluZyBmb3Igc2Nyb2xsIG9mZnNldCByYW5nZXMgaW4gYmV0d2VlbiB0aGUgc2Nyb2xs
IGRlc3RpbmF0aW9uIGFuZCBhIHBvdGVudGlhbCBzbmFwIG9mZnNldAotICAgIC8vIGhhbmRsZXMg
dGhlIGNvcm5lciBjYXNlIHdoZXJlIHRoZSB1c2VyIHNjcm9sbHMgd2l0aCBtb21lbnR1bSB2ZXJ5
IGxpZ2h0bHkgYXdheSBmcm9tIGEgc25hcCBvZmZzZXQsIHN1Y2ggdGhhdCB0aGUKLSAgICAvLyBw
cmVkaWN0ZWQgc2Nyb2xsIGRlc3RpbmF0aW9uIGlzIHN0aWxsIHdpdGhpbiBwcm94aW1pdHkgb2Yg
dGhlIHNuYXAgb2Zmc2V0LiBJbiB0aGlzIGNhc2UsIHRoZSByZWd1bGFyIChtYW5kYXRvcnkKLSAg
ICAvLyBzY3JvbGwgc25hcHBpbmcpIGJlaGF2aW9yIHdvdWxkIGJlIHRvIHNuYXAgdG8gdGhlIG5l
eHQgb2Zmc2V0IGluIHRoZSBkaXJlY3Rpb24gb2YgbW9tZW50dW0gc2Nyb2xsaW5nLCBidXQKLSAg
ICAvLyBpbnN0ZWFkLCBpdCBpcyBtb3JlIGludHVpdGl2ZSB0byBlaXRoZXIgcmV0dXJuIHRvIHRo
ZSBvcmlnaW5hbCBzbmFwIHBvc2l0aW9uICh3aGljaCB3ZSBhcmJpdHJhcmlseSBjaG9vc2UgaGVy
ZSkKLSAgICAvLyBvciBzY3JvbGwganVzdCBvdXRzaWRlIG9mIHRoZSBzbmFwIG9mZnNldCByYW5n
ZS4gVGhpcyBpcyBhbm90aGVyIG1pbm9yIGJlaGF2aW9yIHR3ZWFrIHRoYXQgd2Ugc2hvdWxkIHBs
YXkgYXJvdW5kCi0gICAgLy8gd2l0aCB0byBzZWUgd2hhdCBmZWVscyBiZXN0LgotICAgIExheW91
dFVuaXQgcHJveGltaXR5RGlzdGFuY2UgeyByYXRpb09mU2Nyb2xsUG9ydEF4aXNMZW5ndGhUb0Jl
Q29uc2lkZXJlZEZvclByb3hpbWl0eSAqIHNjcm9sbFBvcnRBeGlzTGVuZ3RoIH07Ci0gICAgZm9y
IChzaXplX3QgaW5kZXggPSAxOyBpbmRleCA8IHNuYXBPZmZzZXRzLnNpemUoKTsgKytpbmRleCkg
ewotICAgICAgICBhdXRvIHN0YXJ0T2Zmc2V0ID0gc25hcE9mZnNldHNbaW5kZXggLSAxXSArIHBy
b3hpbWl0eURpc3RhbmNlOwotICAgICAgICBhdXRvIGVuZE9mZnNldCA9IHNuYXBPZmZzZXRzW2lu
ZGV4XSAtIHByb3hpbWl0eURpc3RhbmNlOwotICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPCBlbmRP
ZmZzZXQpCi0gICAgICAgICAgICBvZmZzZXRSYW5nZXMuYXBwZW5kKHsgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCB9KTsKLSAgICB9Ci19Ci0KLXZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxh
YmxlQXJlYShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlbmRlckJveCYg
c2Nyb2xsaW5nRWxlbWVudEJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRT
dHlsZSwgTGF5b3V0UmVjdCB2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzKQotewot
ICAgIGF1dG8gc2Nyb2xsU25hcFR5cGUgPSBzY3JvbGxpbmdFbGVtZW50U3R5bGUuc2Nyb2xsU25h
cFR5cGUoKTsKLSAgICBjb25zdCBhdXRvJiBib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zID0g
c2Nyb2xsaW5nRWxlbWVudEJveC52aWV3KCkuYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucygp
OwotICAgIGlmIChzY3JvbGxTbmFwVHlwZS5zdHJpY3RuZXNzID09IFNjcm9sbFNuYXBTdHJpY3Ru
ZXNzOjpOb25lIHx8IGJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIHNjcm9sbGFibGVBcmVhLmNsZWFyU25hcE9mZnNldHMoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFZlY3RvcjxMYXlvdXRVbml0PiB2ZXJ0aWNhbFNuYXBPZmZzZXRzOwot
ICAgIFZlY3RvcjxMYXlvdXRVbml0PiBob3Jpem9udGFsU25hcE9mZnNldHM7Ci0gICAgVmVjdG9y
PFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7
Ci0gICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiBob3Jpem9udGFsU25h
cE9mZnNldFJhbmdlczsKLSAgICBIYXNoU2V0PGZsb2F0PiBzZWVuVmVydGljYWxTbmFwT2Zmc2V0
czsKLSAgICBIYXNoU2V0PGZsb2F0PiBzZWVuSG9yaXpvbnRhbFNuYXBPZmZzZXRzOwotICAgIGJv
b2wgaGFzSG9yaXpvbnRhbFNuYXBPZmZzZXRzID0gc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3Jv
bGxTbmFwQXhpczo6Qm90aCB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlz
OjpYQXhpcyB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpJbmxpbmU7
Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNuYXBPZmZzZXRzID0gc2Nyb2xsU25hcFR5cGUuYXhpcyA9
PSBTY3JvbGxTbmFwQXhpczo6Qm90aCB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNu
YXBBeGlzOjpZQXhpcyB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpC
bG9jazsKLQotICAgIGF1dG8gbWF4U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUFyZWEubWF4aW11
bVNjcm9sbE9mZnNldCgpOwotICAgIGF1dG8gc2Nyb2xsUG9zaXRpb24gPSBMYXlvdXRQb2ludCB7
IHNjcm9sbGFibGVBcmVhLnNjcm9sbFBvc2l0aW9uKCkgfTsKLSAgICBib29sIHNjcm9sbGVySXNS
VEwgPSAhc2Nyb2xsaW5nRWxlbWVudEJveC5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KTsKLQotICAgIC8vIFRoZSBib3VuZHMgb2YgdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBzbmFw
IHBvcnQsIHdoZXJlIHRoZSB0b3AgbGVmdCBvZiB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lcidzIGJv
cmRlciBib3ggaXMgdGhlIG9yaWdpbi4KLSAgICBhdXRvIHNjcm9sbFNuYXBQb3J0ID0gY29tcHV0
ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdCh2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5h
dGVzLCBzY3JvbGxpbmdFbGVtZW50U3R5bGUuc2Nyb2xsUGFkZGluZygpLCBJbnNldE9yT3V0c2V0
OjpJbnNldCk7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiQ29t
cHV0aW5nIHNjcm9sbCBzbmFwIG9mZnNldHMgZm9yICIgPDwgc2Nyb2xsYWJsZUFyZWEgPDwgIiBp
biBzbmFwIHBvcnQgIiA8PCBzY3JvbGxTbmFwUG9ydCk7Ci0gICAgZm9yIChhdXRvKiBjaGlsZCA6
IGJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5lbmNs
b3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyRm9yU25hcHBpbmcoKSAhPSAmc2Nyb2xsaW5nRWxlbWVu
dEJveCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFRoZSBib3VuZHMgb2Yg
dGhlIGNoaWxkIGVsZW1lbnQncyBzbmFwIGFyZWEsIHdoZXJlIHRoZSB0b3AgbGVmdCBvZiB0aGUg
c2Nyb2xsaW5nIGNvbnRhaW5lcidzIGJvcmRlciBib3ggaXMgdGhlIG9yaWdpbi4KLSAgICAgICAg
Ly8gVGhlIHNuYXAgYXJlYSBpcyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBjaGlsZCBlbGVtZW50
J3MgYm9yZGVyIGJveCwgYWZ0ZXIgYXBwbHlpbmcgdHJhbnNmb3JtYXRpb25zLgotICAgICAgICAv
LyBGSVhNRTogRm9yIG5vdywganVzdCBjb25zaWRlciB3aGV0aGVyIHRoZSBzY3JvbGxlciBpcyBS
VEwuIFRoZSBiZWhhdmlvciBvZiBMVFIgYm94ZXMgaW5zaWRlIGEgUlRMIHNjcm9sbGVyIGlzIHBv
b3JseSBkZWZpbmVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMv
NTM2MS4KLSAgICAgICAgYXV0byBzY3JvbGxTbmFwQXJlYSA9IExheW91dFJlY3QoY2hpbGQtPmxv
Y2FsVG9Db250YWluZXJRdWFkKEZsb2F0UXVhZChjaGlsZC0+Ym9yZGVyQm91bmRpbmdCb3goKSks
ICZzY3JvbGxpbmdFbGVtZW50Qm94KS5ib3VuZGluZ0JveCgpKTsKLQotICAgICAgICAvLyBsb2Nh
bFRvQ29udGFpbmVyUXVhZCB3aWxsIHRyYW5zZm9ybSB0aGUgc2Nyb2xsIHNuYXAgYXJlYSBieSB0
aGUgc2Nyb2xsIHBvc2l0aW9uLCBleGNlcHQgaW4gdGhlIGNhc2UgdGhhdCB0aGlzIHBvc2l0aW9u
IGlzCi0gICAgICAgIC8vIGNvbWluZyBmcm9tIGEgU2Nyb2xsVmlldy4gV2Ugd2FudCB0aGUgdHJh
bnNmb3JtZWQgYXJlYSwgYnV0IHdpdGhvdXQgc2Nyb2xsIHBvc2l0aW9uIHRha2VuIGludG8gYWNj
b3VudC4KLSAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYS5pc1Njcm9sbFZpZXcoKSkKLSAgICAg
ICAgICAgIHNjcm9sbFNuYXBBcmVhLm1vdmVCeShzY3JvbGxQb3NpdGlvbik7Ci0KLSAgICAgICAg
c2Nyb2xsU25hcEFyZWEgPSBjb21wdXRlU2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0KHNjcm9sbFNu
YXBBcmVhLCBjaGlsZC0+c3R5bGUoKS5zY3JvbGxNYXJnaW4oKSwgSW5zZXRPck91dHNldDo6T3V0
c2V0KTsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiICAg
IENvbnNpZGVyaW5nIHNjcm9sbCBzbmFwIHRhcmdldCBhcmVhICIgPDwgc2Nyb2xsU25hcEFyZWEp
OwotICAgICAgICBhdXRvIGFsaWdubWVudCA9IGNoaWxkLT5zdHlsZSgpLnNjcm9sbFNuYXBBbGln
bigpOwotICAgICAgICBpZiAoaGFzSG9yaXpvbnRhbFNuYXBPZmZzZXRzICYmIGFsaWdubWVudC54
ICE9IFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpOb25lKSB7Ci0gICAgICAgICAgICBhdXRvIGFi
c29sdXRlU2Nyb2xsWFBvc2l0aW9uID0gY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3Jv
bGxTbmFwQXJlYS54KCksIHNjcm9sbFNuYXBBcmVhLm1heFgoKSwgYWxpZ25tZW50LngsIHNjcm9s
bGVySXNSVEwpIC0gY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwUG9ydC54
KCksIHNjcm9sbFNuYXBQb3J0Lm1heFgoKSwgYWxpZ25tZW50LngsIHNjcm9sbGVySXNSVEwpOwot
ICAgICAgICAgICAgYXV0byBhYnNvbHV0ZVNjcm9sbE9mZnNldCA9IGNsYW1wVG88aW50PihzY3Jv
bGxhYmxlQXJlYS5zY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oeyByb3VuZFRvSW50KGFic29sdXRl
U2Nyb2xsWFBvc2l0aW9uKSwgMCB9KS54KCksIDAsIG1heFNjcm9sbE9mZnNldC54KCkpOwotICAg
ICAgICAgICAgaWYgKCFzZWVuSG9yaXpvbnRhbFNuYXBPZmZzZXRzLmNvbnRhaW5zKGFic29sdXRl
U2Nyb2xsT2Zmc2V0KSkgewotICAgICAgICAgICAgICAgIHNlZW5Ib3Jpem9udGFsU25hcE9mZnNl
dHMuYWRkKGFic29sdXRlU2Nyb2xsT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBob3Jpem9udGFs
U25hcE9mZnNldHMuYXBwZW5kKGFic29sdXRlU2Nyb2xsT2Zmc2V0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpZiAoaGFzVmVydGljYWxTbmFwT2Zmc2V0cyAmJiBhbGlnbm1l
bnQueSAhPSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Tm9uZSkgewotICAgICAgICAgICAgYXV0
byBhYnNvbHV0ZVNjcm9sbFlQb3NpdGlvbiA9IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQo
c2Nyb2xsU25hcEFyZWEueSgpLCBzY3JvbGxTbmFwQXJlYS5tYXhZKCksIGFsaWdubWVudC55LCBm
YWxzZSkgLSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNuYXBQb3J0LnkoKSwg
c2Nyb2xsU25hcFBvcnQubWF4WSgpLCBhbGlnbm1lbnQueSwgZmFsc2UpOwotICAgICAgICAgICAg
YXV0byBhYnNvbHV0ZVNjcm9sbE9mZnNldCA9IGNsYW1wVG88aW50PihzY3JvbGxhYmxlQXJlYS5z
Y3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oeyAwLCByb3VuZFRvSW50KGFic29sdXRlU2Nyb2xsWVBv
c2l0aW9uKSB9KS55KCksIDAsIG1heFNjcm9sbE9mZnNldC55KCkpOwotICAgICAgICAgICAgaWYg
KCFzZWVuVmVydGljYWxTbmFwT2Zmc2V0cy5jb250YWlucyhhYnNvbHV0ZVNjcm9sbE9mZnNldCkp
IHsKLSAgICAgICAgICAgICAgICBzZWVuVmVydGljYWxTbmFwT2Zmc2V0cy5hZGQoYWJzb2x1dGVT
Y3JvbGxPZmZzZXQpOwotICAgICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNldHMuYXBwZW5k
KGFic29sdXRlU2Nyb2xsT2Zmc2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmICghaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAgICBz
dGQ6OnNvcnQoaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmJlZ2luKCksIGhvcml6b250YWxTbmFwT2Zm
c2V0cy5lbmQoKSk7Ci0gICAgICAgIGlmIChzY3JvbGxTbmFwVHlwZS5zdHJpY3RuZXNzID09IFNj
cm9sbFNuYXBTdHJpY3RuZXNzOjpQcm94aW1pdHkpCi0gICAgICAgICAgICBjb21wdXRlQXhpc1By
b3hpbWl0eVNuYXBPZmZzZXRSYW5nZXMoaG9yaXpvbnRhbFNuYXBPZmZzZXRzLCBob3Jpem9udGFs
U25hcE9mZnNldFJhbmdlcywgc2Nyb2xsU25hcFBvcnQud2lkdGgoKSk7Ci0KLSAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIGhvcml6b250
YWwgc2Nyb2xsIHNuYXAgb2Zmc2V0czogIiA8PCBob3Jpem9udGFsU25hcE9mZnNldHMpOwotICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQg
aG9yaXpvbnRhbCBzY3JvbGwgc25hcCBvZmZzZXQgcmFuZ2VzOiAiIDw8IGhvcml6b250YWxTbmFw
T2Zmc2V0UmFuZ2VzKTsKLQotICAgICAgICBzY3JvbGxhYmxlQXJlYS5zZXRIb3Jpem9udGFsU25h
cE9mZnNldHMoaG9yaXpvbnRhbFNuYXBPZmZzZXRzKTsKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEu
c2V0SG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMp
OwotICAgIH0gZWxzZQotICAgICAgICBzY3JvbGxhYmxlQXJlYS5jbGVhckhvcml6b250YWxTbmFw
T2Zmc2V0cygpOwotCi0gICAgaWYgKCF2ZXJ0aWNhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewot
ICAgICAgICBzdGQ6OnNvcnQodmVydGljYWxTbmFwT2Zmc2V0cy5iZWdpbigpLCB2ZXJ0aWNhbFNu
YXBPZmZzZXRzLmVuZCgpKTsKLSAgICAgICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0cmljdG5lc3Mg
PT0gU2Nyb2xsU25hcFN0cmljdG5lc3M6OlByb3hpbWl0eSkKLSAgICAgICAgICAgIGNvbXB1dGVB
eGlzUHJveGltaXR5U25hcE9mZnNldFJhbmdlcyh2ZXJ0aWNhbFNuYXBPZmZzZXRzLCB2ZXJ0aWNh
bFNuYXBPZmZzZXRSYW5nZXMsIHNjcm9sbFNuYXBQb3J0LmhlaWdodCgpKTsKLQotICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgdmVydGlj
YWwgc2Nyb2xsIHNuYXAgb2Zmc2V0czogIiA8PCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKTsKLSAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIHZl
cnRpY2FsIHNjcm9sbCBzbmFwIG9mZnNldCByYW5nZXM6ICIgPDwgdmVydGljYWxTbmFwT2Zmc2V0
UmFuZ2VzKTsKLQotICAgICAgICBzY3JvbGxhYmxlQXJlYS5zZXRWZXJ0aWNhbFNuYXBPZmZzZXRz
KHZlcnRpY2FsU25hcE9mZnNldHMpOwotICAgICAgICBzY3JvbGxhYmxlQXJlYS5zZXRWZXJ0aWNh
bFNuYXBPZmZzZXRSYW5nZXModmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgc2Nyb2xsYWJsZUFyZWEuY2xlYXJWZXJ0aWNhbFNuYXBPZmZzZXRzKCk7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgotTGF5b3V0VHlwZSBjbG9zZXN0U25hcE9m
ZnNldChjb25zdCBWZWN0b3I8TGF5b3V0VHlwZT4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8
U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCBMYXlvdXRU
eXBlIHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNu
YXBJbmRleCkKLXsKLSAgICBBU1NFUlQoc25hcE9mZnNldHMuc2l6ZSgpKTsKLSAgICBhY3RpdmVT
bmFwSW5kZXggPSAwOwotCi0gICAgdW5zaWduZWQgbG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleDsK
LSAgICB1bnNpZ25lZCB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4OwotICAgIGluZGljZXNPZk5l
YXJlc3RTbmFwT2Zmc2V0UmFuZ2VzPExheW91dFR5cGU+KHNjcm9sbERlc3RpbmF0aW9uLCBzbmFw
T2Zmc2V0UmFuZ2VzLCBsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4LCB1cHBlclNuYXBPZmZzZXRS
YW5nZUluZGV4KTsKLSAgICBpZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCA9PSB1cHBlclNu
YXBPZmZzZXRSYW5nZUluZGV4ICYmIHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXggIT0gaW52YWxp
ZFNuYXBPZmZzZXRJbmRleCkgewotICAgICAgICBhY3RpdmVTbmFwSW5kZXggPSBpbnZhbGlkU25h
cE9mZnNldEluZGV4OwotICAgICAgICByZXR1cm4gc2Nyb2xsRGVzdGluYXRpb247Ci0gICAgfQot
Ci0gICAgaWYgKHNjcm9sbERlc3RpbmF0aW9uIDw9IHNuYXBPZmZzZXRzLmZpcnN0KCkpCi0gICAg
ICAgIHJldHVybiBzbmFwT2Zmc2V0cy5maXJzdCgpOwotCi0gICAgYWN0aXZlU25hcEluZGV4ID0g
c25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKLSAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPj0gc25h
cE9mZnNldHMubGFzdCgpKQotICAgICAgICByZXR1cm4gc25hcE9mZnNldHMubGFzdCgpOwotCi0g
ICAgdW5zaWduZWQgbG93ZXJJbmRleDsKLSAgICB1bnNpZ25lZCB1cHBlckluZGV4OwotICAgIGlu
ZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0czxMYXlvdXRUeXBlPihzY3JvbGxEZXN0aW5hdGlvbiwg
c25hcE9mZnNldHMsIGxvd2VySW5kZXgsIHVwcGVySW5kZXgpOwotICAgIExheW91dFR5cGUgbG93
ZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1tsb3dlckluZGV4XTsKLSAgICBMYXlvdXRUeXBl
IHVwcGVyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbdXBwZXJJbmRleF07Ci0gICAgaWYgKCFz
dGQ6OmFicyh2ZWxvY2l0eSkpIHsKLSAgICAgICAgYm9vbCBpc0Nsb3NlclRvTG93ZXJTbmFwUG9z
aXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbiAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVwcGVyU25h
cFBvc2l0aW9uIC0gc2Nyb2xsRGVzdGluYXRpb247Ci0gICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9
IGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA/IGxvd2VySW5kZXggOiB1cHBlckluZGV4Owot
ICAgICAgICByZXR1cm4gaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93ZXJTbmFwUG9z
aXRpb24gOiB1cHBlclNuYXBQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICAvLyBOb24temVybyB2ZWxv
Y2l0eSBpbmRpY2F0ZXMgYSBmbGljayBnZXN0dXJlLiBFdmVuIGlmIGFub3RoZXIgc25hcCBwb2lu
dCBpcyBjbG9zZXIsIHdlIHNob3VsZCBjaG9vc2UgdGhlIG9uZSBpbiB0aGUgZGlyZWN0aW9uIG9m
IHRoZSBmbGljayBnZXN0dXJlCi0gICAgLy8gYXMgbG9uZyBhcyBhIHNjcm9sbCBzbmFwIG9mZnNl
dCByYW5nZSBkb2VzIG5vdCBsaWUgYmV0d2VlbiB0aGUgc2Nyb2xsIGRlc3RpbmF0aW9uIGFuZCB0
aGUgdGFyZ2V0ZWQgc25hcCBvZmZzZXQuCi0gICAgaWYgKHZlbG9jaXR5IDwgMCkgewotICAgICAg
ICBpZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4
ICYmIGxvd2VyU25hcFBvc2l0aW9uIDwgc25hcE9mZnNldFJhbmdlc1tsb3dlclNuYXBPZmZzZXRS
YW5nZUluZGV4XS5lbmQpIHsKLSAgICAgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IHVwcGVySW5k
ZXg7Ci0gICAgICAgICAgICByZXR1cm4gdXBwZXJTbmFwUG9zaXRpb247Ci0gICAgICAgIH0KLSAg
ICAgICAgYWN0aXZlU25hcEluZGV4ID0gbG93ZXJJbmRleDsKLSAgICAgICAgcmV0dXJuIGxvd2Vy
U25hcFBvc2l0aW9uOwotICAgIH0KLQotICAgIGlmICh1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4
ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXggJiYgc25hcE9mZnNldFJhbmdlc1t1cHBlclNuYXBP
ZmZzZXRSYW5nZUluZGV4XS5zdGFydCA8IHVwcGVyU25hcFBvc2l0aW9uKSB7Ci0gICAgICAgIGFj
dGl2ZVNuYXBJbmRleCA9IGxvd2VySW5kZXg7Ci0gICAgICAgIHJldHVybiBsb3dlclNuYXBQb3Np
dGlvbjsKLSAgICB9Ci0gICAgYWN0aXZlU25hcEluZGV4ID0gdXBwZXJJbmRleDsKLSAgICByZXR1
cm4gdXBwZXJTbmFwUG9zaXRpb247Ci19Ci0KLUxheW91dFVuaXQgY2xvc2VzdFNuYXBPZmZzZXQo
Y29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9yPFNjcm9s
bE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcE9mZnNldFJhbmdlcywgTGF5b3V0VW5pdCBz
Y3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5k
ZXgpCi17Ci0gICAgcmV0dXJuIGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVuaXQ+KHNuYXBPZmZz
ZXRzLCBzbmFwT2Zmc2V0UmFuZ2VzLCBzY3JvbGxEZXN0aW5hdGlvbiwgdmVsb2NpdHksIGFjdGl2
ZVNuYXBJbmRleCk7Ci19Ci0KLWZsb2F0IGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8ZmxvYXQ+
PiYgc25hcE9mZnNldFJhbmdlcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9j
aXR5LCB1bnNpZ25lZCYgYWN0aXZlU25hcEluZGV4KQotewotICAgIHJldHVybiBjbG9zZXN0U25h
cE9mZnNldDxmbG9hdD4oc25hcE9mZnNldHMsIHNuYXBPZmZzZXRSYW5nZXMsIHNjcm9sbERlc3Rp
bmF0aW9uLCB2ZWxvY2l0eSwgYWN0aXZlU25hcEluZGV4KTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gQ1NTX1NDUk9MTF9TTkFQCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiZGI2OGFlYmQ0MDI3YTEyZTE4ZWE1ZDc5NDA3OWY3YTliMDgy
NjRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotCi0jaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgot
I2luY2x1ZGUgIkxheW91dFVuaXQuaCIKLSNpbmNsdWRlICJTY3JvbGxTbmFwT2Zmc2V0c0luZm8u
aCIKLSNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSFRNTEVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJC
b3g7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLWNsYXNzIFNjcm9sbGFibGVBcmVhOwotCi0vLyBVcGRh
dGUgdGhlIHNuYXAgb2Zmc2V0cyBmb3IgdGhpcyBzY3JvbGxhYmxlIGFyZWEsIGdpdmVuIHRoZSBS
ZW5kZXJCb3ggb2YgdGhlIHNjcm9sbCBjb250YWluZXIsIHRoZSBSZW5kZXJTdHlsZQotLy8gd2hp
Y2ggZGVmaW5lcyB0aGUgc2Nyb2xsLXNuYXAgcHJvcGVydGllcywgYW5kIHRoZSB2aWV3cG9ydCBy
ZWN0YW5nbGUgd2l0aCB0aGUgb3JpZ2luIGF0IHRoZSB0b3AgbGVmdCBvZgotLy8gdGhlIHNjcm9s
bGluZyBjb250YWluZXIncyBib3JkZXIgYm94Lgotdm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNj
cm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJiwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdF
bGVtZW50Qm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLCBMYXlv
dXRSZWN0IHZpZXdwb3J0UmVjdEluQm9yZGVyQm94Q29vcmRpbmF0ZXMpOwotCi1jb25zdCB1bnNp
Z25lZCBpbnZhbGlkU25hcE9mZnNldEluZGV4ID0gVUlOVF9NQVg7Ci1XRUJDT1JFX0VYUE9SVCBM
YXlvdXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25h
cE9mZnNldHMsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNu
YXBPZmZzZXRSYW5nZXMsIExheW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9j
aXR5LCB1bnNpZ25lZCYgYWN0aXZlU25hcEluZGV4KTsKLVdFQkNPUkVfRVhQT1JUIGZsb2F0IGNs
b3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzLCBjb25zdCBW
ZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8ZmxvYXQ+PiYgc25hcE9mZnNldFJhbmdlcywgZmxvYXQg
c2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0aXZlU25hcElu
ZGV4KTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbFNuYXBPZmZzZXRzSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlNjNkYWQ0MTVhYzhkZDM5YWEx
NDY1YzZkYzhmZjA5Y2M4ZGY4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCkBAIC0wLDAgKzEsMjI4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCIKKwor
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+Citz
dGF0aWMgdm9pZCBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldFJhbmdlcyhMYXlvdXRUeXBlIG9m
ZnNldCwgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFR5cGU+PiYgc25hcE9m
ZnNldFJhbmdlcywgdW5zaWduZWQmIGxvd2VySW5kZXgsIHVuc2lnbmVkJiB1cHBlckluZGV4KQor
eworICAgIGlmIChzbmFwT2Zmc2V0UmFuZ2VzLmlzRW1wdHkoKSkgeworICAgICAgICBsb3dlcklu
ZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKKyAgICAgICAgdXBwZXJJbmRleCA9IGludmFs
aWRTbmFwT2Zmc2V0SW5kZXg7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgbG93
ZXJJbmRleEFzSW50ID0gLTE7CisgICAgaW50IHVwcGVySW5kZXhBc0ludCA9IHNuYXBPZmZzZXRS
YW5nZXMuc2l6ZSgpOworICAgIGRvIHsKKyAgICAgICAgaW50IG1pZGRsZUluZGV4ID0gKGxvd2Vy
SW5kZXhBc0ludCArIHVwcGVySW5kZXhBc0ludCkgLyAyOworICAgICAgICBhdXRvJiByYW5nZSA9
IHNuYXBPZmZzZXRSYW5nZXNbbWlkZGxlSW5kZXhdOworICAgICAgICBpZiAocmFuZ2Uuc3RhcnQg
PCBvZmZzZXQgJiYgb2Zmc2V0IDwgcmFuZ2UuZW5kKSB7CisgICAgICAgICAgICBsb3dlckluZGV4
QXNJbnQgPSBtaWRkbGVJbmRleDsKKyAgICAgICAgICAgIHVwcGVySW5kZXhBc0ludCA9IG1pZGRs
ZUluZGV4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAob2Zm
c2V0ID4gcmFuZ2UuZW5kKQorICAgICAgICAgICAgbG93ZXJJbmRleEFzSW50ID0gbWlkZGxlSW5k
ZXg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVwcGVySW5kZXhBc0ludCA9IG1pZGRsZUlu
ZGV4OworICAgIH0gd2hpbGUgKGxvd2VySW5kZXhBc0ludCA8IHVwcGVySW5kZXhBc0ludCAtIDEp
OworCisgICAgaWYgKG9mZnNldCA8PSBzbmFwT2Zmc2V0UmFuZ2VzLmZpcnN0KCkuc3RhcnQpCisg
ICAgICAgIGxvd2VySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OworICAgIGVsc2UKKyAg
ICAgICAgbG93ZXJJbmRleCA9IGxvd2VySW5kZXhBc0ludDsKKworICAgIGlmIChvZmZzZXQgPj0g
c25hcE9mZnNldFJhbmdlcy5sYXN0KCkuZW5kKQorICAgICAgICB1cHBlckluZGV4ID0gaW52YWxp
ZFNuYXBPZmZzZXRJbmRleDsKKyAgICBlbHNlCisgICAgICAgIHVwcGVySW5kZXggPSB1cHBlcklu
ZGV4QXNJbnQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgorc3RhdGljIHZv
aWQgaW5kaWNlc09mTmVhcmVzdFNuYXBPZmZzZXRzKExheW91dFR5cGUgb2Zmc2V0LCBjb25zdCBW
ZWN0b3I8TGF5b3V0VHlwZT4mIHNuYXBPZmZzZXRzLCB1bnNpZ25lZCYgbG93ZXJJbmRleCwgdW5z
aWduZWQmIHVwcGVySW5kZXgpCit7CisgICAgbG93ZXJJbmRleCA9IDA7CisgICAgdXBwZXJJbmRl
eCA9IHNuYXBPZmZzZXRzLnNpemUoKSAtIDE7CisgICAgd2hpbGUgKGxvd2VySW5kZXggPCB1cHBl
ckluZGV4IC0gMSkgeworICAgICAgICBpbnQgbWlkZGxlSW5kZXggPSAobG93ZXJJbmRleCArIHVw
cGVySW5kZXgpIC8gMjsKKyAgICAgICAgYXV0byBtaWRkbGVPZmZzZXQgPSBzbmFwT2Zmc2V0c1tt
aWRkbGVJbmRleF07CisgICAgICAgIGlmIChvZmZzZXQgPT0gbWlkZGxlT2Zmc2V0KSB7CisgICAg
ICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5kZXg7CisgICAgICAgICAgICBsb3dlckluZGV4
ID0gbWlkZGxlSW5kZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChvZmZzZXQgPiBtaWRkbGVPZmZzZXQpCisgICAgICAgICAgICBsb3dlckluZGV4ID0gbWlk
ZGxlSW5kZXg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVwcGVySW5kZXggPSBtaWRkbGVJ
bmRleDsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgorc3RhdGlj
IExheW91dFR5cGUgY2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91
dFR5cGU+IG9mZnNldHNJbmZvLCBTY3JvbGxFdmVudEF4aXMgYXhpcywgTGF5b3V0VHlwZSBzY3Jv
bGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgp
Cit7CisgICAgY29uc3QgVmVjdG9yPExheW91dFR5cGU+JiBzbmFwT2Zmc2V0cyA9IG9mZnNldHNJ
bmZvLm9mZnNldHNGb3JBeGlzKGF4aXMpOworICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRS
YW5nZTxMYXlvdXRUeXBlPj4mIHNuYXBPZmZzZXRSYW5nZXMgPSBvZmZzZXRzSW5mby5vZmZzZXRS
YW5nZXNGb3JBeGlzKGF4aXMpOworCisgICAgQVNTRVJUKHNuYXBPZmZzZXRzLnNpemUoKSk7Cisg
ICAgYWN0aXZlU25hcEluZGV4ID0gMDsKKworICAgIHVuc2lnbmVkIGxvd2VyU25hcE9mZnNldFJh
bmdlSW5kZXg7CisgICAgdW5zaWduZWQgdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleDsKKyAgICBp
bmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldFJhbmdlczxMYXlvdXRUeXBlPihzY3JvbGxEZXN0aW5h
dGlvbiwgc25hcE9mZnNldFJhbmdlcywgbG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCwgdXBwZXJT
bmFwT2Zmc2V0UmFuZ2VJbmRleCk7CisgICAgaWYgKGxvd2VyU25hcE9mZnNldFJhbmdlSW5kZXgg
PT0gdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCAmJiB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4
ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpIHsKKyAgICAgICAgYWN0aXZlU25hcEluZGV4ID0g
aW52YWxpZFNuYXBPZmZzZXRJbmRleDsKKyAgICAgICAgcmV0dXJuIHNjcm9sbERlc3RpbmF0aW9u
OworICAgIH0KKworICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA8PSBzbmFwT2Zmc2V0cy5maXJz
dCgpKQorICAgICAgICByZXR1cm4gc25hcE9mZnNldHMuZmlyc3QoKTsKKworICAgIGFjdGl2ZVNu
YXBJbmRleCA9IHNuYXBPZmZzZXRzLnNpemUoKSAtIDE7CisgICAgaWYgKHNjcm9sbERlc3RpbmF0
aW9uID49IHNuYXBPZmZzZXRzLmxhc3QoKSkKKyAgICAgICAgcmV0dXJuIHNuYXBPZmZzZXRzLmxh
c3QoKTsKKworICAgIHVuc2lnbmVkIGxvd2VySW5kZXg7CisgICAgdW5zaWduZWQgdXBwZXJJbmRl
eDsKKyAgICBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHM8TGF5b3V0VHlwZT4oc2Nyb2xsRGVz
dGluYXRpb24sIHNuYXBPZmZzZXRzLCBsb3dlckluZGV4LCB1cHBlckluZGV4KTsKKyAgICBMYXlv
dXRUeXBlIGxvd2VyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbbG93ZXJJbmRleF07CisgICAg
TGF5b3V0VHlwZSB1cHBlclNuYXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW3VwcGVySW5kZXhdOwor
ICAgIGlmICghc3RkOjphYnModmVsb2NpdHkpKSB7CisgICAgICAgIGJvb2wgaXNDbG9zZXJUb0xv
d2VyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb24gLSBsb3dlclNuYXBQb3NpdGlvbiA8
PSB1cHBlclNuYXBQb3NpdGlvbiAtIHNjcm9sbERlc3RpbmF0aW9uOworICAgICAgICBhY3RpdmVT
bmFwSW5kZXggPSBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPyBsb3dlckluZGV4IDogdXBw
ZXJJbmRleDsKKyAgICAgICAgcmV0dXJuIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA/IGxv
d2VyU25hcFBvc2l0aW9uIDogdXBwZXJTbmFwUG9zaXRpb247CisgICAgfQorCisgICAgLy8gTm9u
LXplcm8gdmVsb2NpdHkgaW5kaWNhdGVzIGEgZmxpY2sgZ2VzdHVyZS4gRXZlbiBpZiBhbm90aGVy
IHNuYXAgcG9pbnQgaXMgY2xvc2VyLCB3ZSBzaG91bGQgY2hvb3NlIHRoZSBvbmUgaW4gdGhlIGRp
cmVjdGlvbiBvZiB0aGUgZmxpY2sgZ2VzdHVyZQorICAgIC8vIGFzIGxvbmcgYXMgYSBzY3JvbGwg
c25hcCBvZmZzZXQgcmFuZ2UgZG9lcyBub3QgbGllIGJldHdlZW4gdGhlIHNjcm9sbCBkZXN0aW5h
dGlvbiBhbmQgdGhlIHRhcmdldGVkIHNuYXAgb2Zmc2V0LgorICAgIGlmICh2ZWxvY2l0eSA8IDAp
IHsKKyAgICAgICAgaWYgKGxvd2VyU25hcE9mZnNldFJhbmdlSW5kZXggIT0gaW52YWxpZFNuYXBP
ZmZzZXRJbmRleCAmJiBsb3dlclNuYXBQb3NpdGlvbiA8IHNuYXBPZmZzZXRSYW5nZXNbbG93ZXJT
bmFwT2Zmc2V0UmFuZ2VJbmRleF0uZW5kKSB7CisgICAgICAgICAgICBhY3RpdmVTbmFwSW5kZXgg
PSB1cHBlckluZGV4OworICAgICAgICAgICAgcmV0dXJuIHVwcGVyU25hcFBvc2l0aW9uOworICAg
ICAgICB9CisgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IGxvd2VySW5kZXg7CisgICAgICAgIHJl
dHVybiBsb3dlclNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAodXBwZXJTbmFwT2Zmc2V0
UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4ICYmIHNuYXBPZmZzZXRSYW5nZXNb
dXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleF0uc3RhcnQgPCB1cHBlclNuYXBQb3NpdGlvbikgewor
ICAgICAgICBhY3RpdmVTbmFwSW5kZXggPSBsb3dlckluZGV4OworICAgICAgICByZXR1cm4gbG93
ZXJTbmFwUG9zaXRpb247CisgICAgfQorICAgIGFjdGl2ZVNuYXBJbmRleCA9IHVwcGVySW5kZXg7
CisgICAgcmV0dXJuIHVwcGVyU25hcFBvc2l0aW9uOworfQorCitmbG9hdCBjbG9zZXN0U25hcE9m
ZnNldChTY3JvbGxTbmFwT2Zmc2V0c0luZm88ZmxvYXQ+IG9mZnNldHNJbmZvLCBTY3JvbGxFdmVu
dEF4aXMgYXhpcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNp
Z25lZCYgYWN0aXZlU25hcEluZGV4KQoreworICAgIHJldHVybiBXZWJDb3JlOjpjbG9zZXN0U25h
cE9mZnNldDxmbG9hdD4ob2Zmc2V0c0luZm8sIGF4aXMsIHNjcm9sbERlc3RpbmF0aW9uLCB2ZWxv
Y2l0eSwgYWN0aXZlU25hcEluZGV4KTsKK30KKworTGF5b3V0VW5pdCBjbG9zZXN0U25hcE9mZnNl
dChTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4gb2Zmc2V0c0luZm8sIFNjcm9sbEV2
ZW50QXhpcyBheGlzLCBMYXlvdXRVbml0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0
eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y2xv
c2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdD4ob2Zmc2V0c0luZm8sIGF4aXMsIHNjcm9sbERlc3Rp
bmF0aW9uLCB2ZWxvY2l0eSwgYWN0aXZlU25hcEluZGV4KTsKK30KKworc3RhdGljIHZvaWQgY29t
cHV0ZUF4aXNQcm94aW1pdHlTbmFwT2Zmc2V0UmFuZ2VzKGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0
PiYgc25hcE9mZnNldHMsIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIG9m
ZnNldFJhbmdlcywgTGF5b3V0VW5pdCBzY3JvbGxQb3J0QXhpc0xlbmd0aCkKK3sKKyAgICAvLyBU
aGlzIGlzIGFuIGFyYml0cmFyeSBjaG9pY2UgZm9yIHdoYXQgaXQgbWVhbnMgdG8gYmUgImluIHBy
b3hpbWl0eSIgb2YgYSBzbmFwIG9mZnNldC4gV2Ugc2hvdWxkIHBsYXkgYXJvdW5kIHdpdGgKKyAg
ICAvLyB0aGlzIGFuZCBzZWUgd2hhdCBmZWVscyBiZXN0LgorICAgIHN0YXRpYyBjb25zdCBmbG9h
dCByYXRpb09mU2Nyb2xsUG9ydEF4aXNMZW5ndGhUb0JlQ29uc2lkZXJlZEZvclByb3hpbWl0eSA9
IDAuMzsKKyAgICBpZiAoc25hcE9mZnNldHMuc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gVGhlIGV4dHJhIHJ1bGUgYWNjb3VudGluZyBmb3Igc2Nyb2xsIG9mZnNldCByYW5n
ZXMgaW4gYmV0d2VlbiB0aGUgc2Nyb2xsIGRlc3RpbmF0aW9uIGFuZCBhIHBvdGVudGlhbCBzbmFw
IG9mZnNldAorICAgIC8vIGhhbmRsZXMgdGhlIGNvcm5lciBjYXNlIHdoZXJlIHRoZSB1c2VyIHNj
cm9sbHMgd2l0aCBtb21lbnR1bSB2ZXJ5IGxpZ2h0bHkgYXdheSBmcm9tIGEgc25hcCBvZmZzZXQs
IHN1Y2ggdGhhdCB0aGUKKyAgICAvLyBwcmVkaWN0ZWQgc2Nyb2xsIGRlc3RpbmF0aW9uIGlzIHN0
aWxsIHdpdGhpbiBwcm94aW1pdHkgb2YgdGhlIHNuYXAgb2Zmc2V0LiBJbiB0aGlzIGNhc2UsIHRo
ZSByZWd1bGFyIChtYW5kYXRvcnkKKyAgICAvLyBzY3JvbGwgc25hcHBpbmcpIGJlaGF2aW9yIHdv
dWxkIGJlIHRvIHNuYXAgdG8gdGhlIG5leHQgb2Zmc2V0IGluIHRoZSBkaXJlY3Rpb24gb2YgbW9t
ZW50dW0gc2Nyb2xsaW5nLCBidXQKKyAgICAvLyBpbnN0ZWFkLCBpdCBpcyBtb3JlIGludHVpdGl2
ZSB0byBlaXRoZXIgcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBzbmFwIHBvc2l0aW9uICh3aGljaCB3
ZSBhcmJpdHJhcmlseSBjaG9vc2UgaGVyZSkKKyAgICAvLyBvciBzY3JvbGwganVzdCBvdXRzaWRl
IG9mIHRoZSBzbmFwIG9mZnNldCByYW5nZS4gVGhpcyBpcyBhbm90aGVyIG1pbm9yIGJlaGF2aW9y
IHR3ZWFrIHRoYXQgd2Ugc2hvdWxkIHBsYXkgYXJvdW5kCisgICAgLy8gd2l0aCB0byBzZWUgd2hh
dCBmZWVscyBiZXN0LgorICAgIExheW91dFVuaXQgcHJveGltaXR5RGlzdGFuY2UgeyByYXRpb09m
U2Nyb2xsUG9ydEF4aXNMZW5ndGhUb0JlQ29uc2lkZXJlZEZvclByb3hpbWl0eSAqIHNjcm9sbFBv
cnRBeGlzTGVuZ3RoIH07CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAxOyBpbmRleCA8IHNuYXBP
ZmZzZXRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBhdXRvIHN0YXJ0T2Zmc2V0ID0gc25h
cE9mZnNldHNbaW5kZXggLSAxXSArIHByb3hpbWl0eURpc3RhbmNlOworICAgICAgICBhdXRvIGVu
ZE9mZnNldCA9IHNuYXBPZmZzZXRzW2luZGV4XSAtIHByb3hpbWl0eURpc3RhbmNlOworICAgICAg
ICBpZiAoc3RhcnRPZmZzZXQgPCBlbmRPZmZzZXQpCisgICAgICAgICAgICBvZmZzZXRSYW5nZXMu
YXBwZW5kKHsgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9KTsKKyAgICB9Cit9CisKK1Njcm9sbFNu
YXBPZmZzZXRzSW5mb0J1aWxkZXI6OlNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIoU2Nyb2xs
U25hcFN0cmljdG5lc3Mgc3RyaWN0bmVzcykKKyAgICA6IG1fc3RyaWN0bmVzcyhzdHJpY3RuZXNz
KSB7IH0KKwordm9pZCBTY3JvbGxTbmFwT2Zmc2V0c0luZm9CdWlsZGVyOjphZGRWZXJ0aWNhbE9m
ZnNldChMYXlvdXRVbml0IG9mZnNldCkKK3sKKyAgICBpZiAoIW1fc2VlblZlcnRpY2FsU25hcE9m
ZnNldHMuY29udGFpbnMob2Zmc2V0KSkgeworICAgICAgICBtX3NlZW5WZXJ0aWNhbFNuYXBPZmZz
ZXRzLmFkZChvZmZzZXQpOworICAgICAgICBtX3ZlcnRpY2FsU25hcE9mZnNldHMuYXBwZW5kKG9m
ZnNldCk7CisgICAgfQorfQorCit2b2lkIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXI6OmFk
ZEhvcml6b250YWxPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQpCit7CisgICAgaWYgKCFtX3NlZW5I
b3Jpem9udGFsU25hcE9mZnNldHMuY29udGFpbnMob2Zmc2V0KSkgeworICAgICAgICBtX3NlZW5I
b3Jpem9udGFsU25hcE9mZnNldHMuYWRkKG9mZnNldCk7CisgICAgICAgIG1faG9yaXpvbnRhbFNu
YXBPZmZzZXRzLmFwcGVuZChvZmZzZXQpOworICAgIH0KK30KKworc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0Pj4gU2Nyb2xsU25hcE9mZnNldHNJbmZvQnVp
bGRlcjo6YnVpbGQoY29uc3QgTGF5b3V0UmVjdCYgc2Nyb2xsU25hcFBvcnQpCit7CisgICAgYXV0
byBvZmZzZXRzSW5mbyA9IG1ha2VVbmlxdWU8U2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVu
aXQ+PigpOworICAgIG9mZnNldHNJbmZvLT5ob3Jpem9udGFsU25hcE9mZnNldHMgPSBXVEZNb3Zl
KG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzKTsKKyAgICBvZmZzZXRzSW5mby0+dmVydGljYWxTbmFw
T2Zmc2V0cyA9IFdURk1vdmUobV92ZXJ0aWNhbFNuYXBPZmZzZXRzKTsKKworICAgIGlmICghb2Zm
c2V0c0luZm8tPmhvcml6b250YWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0
byYgaG9yaXpvbnRhbFNuYXBPZmZzZXRzID0gb2Zmc2V0c0luZm8tPmhvcml6b250YWxTbmFwT2Zm
c2V0czsKKyAgICAgICAgYXV0byYgaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMgPSBvZmZzZXRz
SW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXM7CisgICAgICAgIHN0ZDo6c29ydChob3Jp
em9udGFsU25hcE9mZnNldHMuYmVnaW4oKSwgaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmVuZCgpKTsK
KyAgICAgICAgaWYgKG1fc3RyaWN0bmVzcyA9PSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6UHJveGlt
aXR5KQorICAgICAgICAgICAgY29tcHV0ZUF4aXNQcm94aW1pdHlTbmFwT2Zmc2V0UmFuZ2VzKGhv
cml6b250YWxTbmFwT2Zmc2V0cywgaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMsIHNjcm9sbFNu
YXBQb3J0LndpZHRoKCkpOworICAgIH0KKworICAgIGlmICghb2Zmc2V0c0luZm8tPnZlcnRpY2Fs
U25hcE9mZnNldHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8mIHZlcnRpY2FsU25hcE9mZnNl
dHMgPSBvZmZzZXRzSW5mby0+dmVydGljYWxTbmFwT2Zmc2V0czsKKyAgICAgICAgYXV0byYgdmVy
dGljYWxTbmFwT2Zmc2V0UmFuZ2VzID0gb2Zmc2V0c0luZm8tPnZlcnRpY2FsU25hcE9mZnNldFJh
bmdlczsKKyAgICAgICAgc3RkOjpzb3J0KHZlcnRpY2FsU25hcE9mZnNldHMuYmVnaW4oKSwgdmVy
dGljYWxTbmFwT2Zmc2V0cy5lbmQoKSk7CisgICAgICAgIGlmIChtX3N0cmljdG5lc3MgPT0gU2Ny
b2xsU25hcFN0cmljdG5lc3M6OlByb3hpbWl0eSkKKyAgICAgICAgICAgIGNvbXB1dGVBeGlzUHJv
eGltaXR5U25hcE9mZnNldFJhbmdlcyh2ZXJ0aWNhbFNuYXBPZmZzZXRzLCB2ZXJ0aWNhbFNuYXBP
ZmZzZXRSYW5nZXMsIHNjcm9sbFNuYXBQb3J0LmhlaWdodCgpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gb2Zmc2V0c0luZm87Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFw
T2Zmc2V0c0luZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBP
ZmZzZXRzSW5mby5oCmluZGV4IDNhYjY0MDY4MjY0YzUwNDA4YmFiNGVlMzhkMmNjZDRhNjQxYzc4
NjcuLmVmM2NjNmVlMjRiMGYyODA2NWY5YzAwOTIxNzk5OGYzNjE5YTM5MzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5o
CkBAIC0yNSwxNiArMjUsMjUgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQorCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgIlNjcm9sbFR5
cGVzLmgiCisjaW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIExheW91dFJlY3Q7CisK
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IFNjcm9sbE9mZnNldFJhbmdlIHsKICAgICBU
IHN0YXJ0OwogICAgIFQgZW5kOwogfTsKIAorY29uc3QgdW5zaWduZWQgaW52YWxpZFNuYXBPZmZz
ZXRJbmRleCA9IFVJTlRfTUFYOworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHN0cnVjdCBTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsK
QEAgLTQ3LDYgKzU2LDUxIEBAIHN0cnVjdCBTY3JvbGxTbmFwT2Zmc2V0c0luZm8gewogICAgIC8v
IHdoZXJlIHRoZSBzbmFwIHBvcnQgZml0cyB3aXRoaW4gdGhlIHNuYXAgYXJlYSBhcmUgY29uc2lk
ZXJlZCB0byBiZSB2YWxpZCBzbmFwIHBvc2l0aW9ucy4KICAgICBWZWN0b3I8U2Nyb2xsT2Zmc2V0
UmFuZ2U8VD4+IGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzOwogICAgIFZlY3RvcjxTY3JvbGxP
ZmZzZXRSYW5nZTxUPj4gdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOworCisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBob3Jpem9udGFsU25hcE9mZnNldHMu
aXNFbXB0eSgpICYmIHZlcnRpY2FsU25hcE9mZnNldHMuaXNFbXB0eSgpICYmIGhvcml6b250YWxT
bmFwT2Zmc2V0UmFuZ2VzLmlzRW1wdHkoKSAmJiB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMuaXNF
bXB0eSgpOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxUPiYgb2Zmc2V0c0ZvckF4aXMoU2Ny
b2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXhpcyA9PSBT
Y3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBob3Jpem9udGFsU25hcE9mZnNldHMgOiB2ZXJ0
aWNhbFNuYXBPZmZzZXRzOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRS
YW5nZTxUPj4mIG9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwgPyBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyA6IHZlcnRpY2FsU25hcE9mZnNldFJhbmdl
czsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2Nyb2xsU25hcE9mZnNldHNJ
bmZvPFQ+JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB2ZXJ0aWNhbFNuYXBP
ZmZzZXRzID09IG90aGVyLnZlcnRpY2FsU25hcE9mZnNldHMKKyAgICAgICAgICAgICYmIGhvcml6
b250YWxTbmFwT2Zmc2V0cyA9PSBvdGhlci5ob3Jpem9udGFsU25hcE9mZnNldHMKKyAgICAgICAg
ICAgICYmIHZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyA9PSBvdGhlci52ZXJ0aWNhbFNuYXBPZmZz
ZXRSYW5nZXMKKyAgICAgICAgICAgICYmIGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzID09IG90
aGVyLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzOworICAgIH0KIH07CiAKK2NsYXNzIFNjcm9s
bFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIgeworcHVibGljOgorICAgIFNjcm9sbFNuYXBPZmZzZXRz
SW5mb0J1aWxkZXIoU2Nyb2xsU25hcFN0cmljdG5lc3MpOworCisgICAgdm9pZCBhZGRWZXJ0aWNh
bE9mZnNldChMYXlvdXRVbml0IG9mZnNldCk7CisgICAgdm9pZCBhZGRIb3Jpem9udGFsT2Zmc2V0
KExheW91dFVuaXQgb2Zmc2V0KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxTbmFwT2Zm
c2V0c0luZm88TGF5b3V0VW5pdD4+IGJ1aWxkKGNvbnN0IExheW91dFJlY3QmIHNjcm9sbFNuYXBQ
b3J0KTsKKworcHJpdmF0ZToKKyAgICBTY3JvbGxTbmFwU3RyaWN0bmVzcyBtX3N0cmljdG5lc3M7
CisgICAgSGFzaFNldDxmbG9hdD4gbV9zZWVuVmVydGljYWxTbmFwT2Zmc2V0czsKKyAgICBIYXNo
U2V0PGZsb2F0PiBtX3NlZW5Ib3Jpem9udGFsU25hcE9mZnNldHM7CisgICAgVmVjdG9yPExheW91
dFVuaXQ+IG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzOworICAgIFZlY3RvcjxMYXlvdXRVbml0PiBt
X3ZlcnRpY2FsU25hcE9mZnNldHM7Cit9OworCitXRUJDT1JFX0VYUE9SVCBmbG9hdCBjbG9zZXN0
U25hcE9mZnNldChTY3JvbGxTbmFwT2Zmc2V0c0luZm88ZmxvYXQ+LCBTY3JvbGxFdmVudEF4aXMs
IGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2
ZVNuYXBJbmRleCk7CitXRUJDT1JFX0VYUE9SVCBMYXlvdXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0
KFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiwgU2Nyb2xsRXZlbnRBeGlzLCBMYXlv
dXRVbml0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2
ZVNuYXBJbmRleCk7CisKIH07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKaW5kZXggN2I3NGY4YTkwNTFlMzU5OWM0ZGJmNDJi
YWZjMDg5ZTFiZTQ4ZjRkMS4uMWUxMzA1YTJmOTljYmNiOGYzOTc0Y2RhNGYyN2JhMjVmM2VmZjhi
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5oCkBAIC00MiwxMCArNDIsNiBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KICNlbmRpZgogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSNpbmNsdWRlICJBeGlz
U2Nyb2xsU25hcE9mZnNldHMuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFRl
eHRTdHJlYW07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5oCmluZGV4IDIxYzMxMWNkODliNzk0MDg0
YTg0OTBkNWZjOWJhNTVhOTNiOWFlYmQuLjczZTkyYTY0ZDIzMjVjNWUxZWE1NjhjNDRkMmQ2Zjhk
ZGZhNmE3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ01vbWVudHVtQ2FsY3VsYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5oCkBAIC0yNyw3ICsyNyw2IEBACiAKICNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogCi0jaW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZz
ZXRzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xs
VHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgK
aW5kZXggNDA5YWU5ZDlhZTY3OTAzZWY2YmFhMjlmNWJkMjc0ZTRjM2RiMTQ1ZS4uNDc4OTdhYTVh
Mzc1NTZkMzlmZTY2MzlmZjZmZmNjN2RkOTFjZTEyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgK
QEAgLTcxLDYgKzcxLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Ny
b2xsT3JpZ2luKGNvbnN0IEludFBvaW50Jik7CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorICAgIGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxmbG9hdD4mIHNuYXBPZmZzZXRzSW5m
bygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJbmZvOyB9CisKICAgICBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiBob3Jpem9udGFsU25hcE9mZnNldHMoKSBjb25zdCB7IHJldHVybiBtX3NuYXBP
ZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHM7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldEhvcml6b250YWxTbmFwT2Zmc2V0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZS5oCmluZGV4IDEzYWZkM2NjMDBlMjE5YTI3ODIyMTAzYTM3NzEzNTlhNTNi
ZDgwMzEuLjkxNmQzYThhMzk2Y2Q1NjZkMmZkM2U1NTkwMDAwOThiZjdhZjFhZDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGUuaApAQCAtOTcsMTAgKzk3LDcgQEAgcHVibGljOgogICAgIGJvb2wgY2FuSGF2
ZVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVycy5o
b3Jpem9udGFsU2Nyb2xsYmFyTW9kZSAhPSBTY3JvbGxiYXJBbHdheXNPZmYgfHwgbV9zY3JvbGxh
YmxlQXJlYVBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxiYXJNb2RlICE9IFNjcm9sbGJhckFsd2F5
c09mZjsgfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiBob3Jpem9udGFsU25hcE9mZnNldHMoKSBjb25zdCB7IHJldHVybiBtX3NuYXBPZmZz
ZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHM7IH0KLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+
JiB2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwT2Zmc2V0c0luZm8u
dmVydGljYWxTbmFwT2Zmc2V0czsgfQotICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5n
ZTxmbG9hdD4+JiBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1f
c25hcE9mZnNldHNJbmZvLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPGZsb2F0Pj4mIHZlcnRpY2FsU25hcE9mZnNldFJhbmdl
cygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJbmZvLnZlcnRpY2FsU25hcE9mZnNldFJh
bmdlczsgfQorICAgIGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxmbG9hdD4mIHNuYXBPZmZz
ZXRzSW5mbygpIGNvbnN0OwogICAgIHVuc2lnbmVkIGN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXg7
IH0KICAgICB1bnNpZ25lZCBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXg7IH0KICAgICB2b2lkIHNldEN1
cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgodW5zaWduZWQgaW5kZXgpIHsgbV9jdXJyZW50
SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4ID0gaW5kZXg7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oCmluZGV4IDdhMGU3M2ExZWI2YTRhOWVlNzZiMmJj
Y2QzYWRlYTVhN2IxZDJmY2UuLjhiNmE2NzAxNTJlMzRkNmQyYWQ5MTcyZWExYWNmYzRhNDk1YjVi
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaApA
QCAtNTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjdXJyZW50U2Nyb2xsUG9zaXRpb25D
aGFuZ2VkKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4aXMsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0
PiYsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mKTsKICAgICB2
b2lkIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzLCB1bnNp
Z25lZCk7CiAgICAgYm9vbCBhY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKSBjb25zdDsK
ICAgICB1bnNpZ25lZCBhY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhp
cykgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFj
Lm1tCmluZGV4IDU2ZmU5YzMyNGFjZTIzMDYxNWVjYWE4ZDk5OWUzZjJiMjM4YjhkMWYuLmYzMGVl
NjA5NmM0OTMxMzQ1NDk1ZTc4ZDI0Y2JiMDNjMTUxZDk2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tCkBAIC03NSw2ICs3NSwxNiBAQCBzdGF0
aWMgaW5saW5lIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4gY29udmVydFRv
TGF5b3V0VW5pdHMoY29uc3QgVgogCiAgICAgcmV0dXJuIHNuYXBPZmZzZXRSYW5nZXM7CiB9CisK
K3N0YXRpYyBpbmxpbmUgU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+IGNvbnZlcnRU
b0xheW91dFVuaXRzKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxmbG9hdD4mIHNuYXBPZmZz
ZXRzSW5mb0FzRmxvYXQpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY29udmVydFRvTGF5b3V0
VW5pdHMoc25hcE9mZnNldHNJbmZvQXNGbG9hdC52ZXJ0aWNhbFNuYXBPZmZzZXRzKSwKKyAgICAg
ICAgY29udmVydFRvTGF5b3V0VW5pdHMoc25hcE9mZnNldHNJbmZvQXNGbG9hdC5ob3Jpem9udGFs
U25hcE9mZnNldHMpLAorICAgICAgICBjb252ZXJ0VG9MYXlvdXRVbml0cyhzbmFwT2Zmc2V0c0lu
Zm9Bc0Zsb2F0LnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyksCisgICAgICAgIGNvbnZlcnRUb0xh
eW91dFVuaXRzKHNuYXBPZmZzZXRzSW5mb0FzRmxvYXQuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5n
ZXMpCisgICAgfTsKK30KICNlbmRpZgogCiB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVNYWM6OnVwZGF0ZUZyb21TdGF0ZU5vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlJiBzY3JvbGxpbmdTdGF0ZU5vZGUpCkBAIC04NiwxMSArOTYsMTAgQEAgdm9pZCBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjp1cGRhdGVGcm9tU3RhdGVOb2Rl
KGNvbnN0IFNjcm9sbGluZ1MKICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
ICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlTm9kZTo6UHJvcGVydHk6Okhvcml6b250YWxTbmFwT2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlByb3BlcnR5OjpI
b3Jpem9udGFsU25hcE9mZnNldFJhbmdlcykpCi0gICAgICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2lu
dHMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3Jv
bGxpbmdTdGF0ZU5vZGUuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpLCBjb252ZXJ0VG9MYXlvdXRV
bml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSkpOwot
Ci0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVOb2RlOjpQcm9wZXJ0eTo6VmVydGljYWxTbmFwT2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlByb3BlcnR5OjpW
ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMpKQotICAgICAgICB1cGRhdGVTY3JvbGxTbmFwUG9pbnRz
KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIGNvbnZlcnRUb0xheW91dFVuaXRzKHNjcm9sbGlu
Z1N0YXRlTm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhz
Y3JvbGxpbmdTdGF0ZU5vZGUudmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCkpKTsKKyAgICBpZiAo
c2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6
OlByb3BlcnR5OjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6OlZlcnRpY2FsU25h
cE9mZnNldFJhbmdlcykKKyAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlByb3BlcnR5OjpIb3Jpem9udGFsU25hcE9mZnNl
dHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3Rh
dGVOb2RlOjpQcm9wZXJ0eTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMpKSB7CisgICAgICAg
IG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnZlcnRUb0xheW91
dFVuaXRzKHNjcm9sbGluZ1N0YXRlTm9kZS5zbmFwT2Zmc2V0c0luZm8oKSkpOworICAgIH0KIAog
ICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlTm9kZTo6UHJvcGVydHk6OkN1cnJlbnRIb3Jpem9udGFsU25hcE9mZnNldEluZGV4KSkKICAg
ICAgICAgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludElu
ZGV4KCkpOwpAQCAtMTAwLDExICsxMDksNiBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVNYWM6OnVwZGF0ZUZyb21TdGF0ZU5vZGUoY29uc3QgU2Nyb2xsaW5nUwogI2Vu
ZGlmCiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6dXBk
YXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3QgVmVjdG9yPExh
eW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExh
eW91dFVuaXQ+PiYgc25hcFJhbmdlcykKLXsKLSAgICBtX3Njcm9sbENvbnRyb2xsZXIudXBkYXRl
U2Nyb2xsU25hcFBvaW50cyhheGlzLCBzbmFwT2Zmc2V0cywgc25hcFJhbmdlcyk7Ci19Ci0KIHZv
aWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c2V0QWN0aXZlU2Nyb2xs
U25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywgdW5zaWduZWQgaW5kZXgpCiB7
CiAgICAgbV9zY3JvbGxDb250cm9sbGVyLnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMo
YXhpcywgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3Bw
CmluZGV4IGRhZTI3ZGYzZDI4ODdhZmZhOGNhMDJiMmMxMDgwMzMzNzQ4NmIyZGQuLjFkODBiMTZm
NGU4ZjAxYTY0YzlhYmVjOGY5NGRmYTU4NGZjYzQ4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIFNjcm9sbEFu
aW1hdG9yOjpub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKICNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogdm9pZCBTY3JvbGxBbmltYXRvcjo6dXBkYXRlU2Ny
b2xsU25hcFN0YXRlKCkKIHsKLSAgICBtX3Njcm9sbENvbnRyb2xsZXIudXBkYXRlU2Nyb2xsU25h
cFN0YXRlKG1fc2Nyb2xsYWJsZUFyZWEpOworICAgIG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVT
Y3JvbGxTbmFwUG9pbnRzKG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsU25hcE9mZnNldEluZm8oKSk7
CiB9CiAKIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbE9mZnNldCgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKaW5kZXggYTg4ZDc0NjMw
NGNjOGU2YzFhYWMzZDM5NDk1MGE4YzJhMDhhZWFmYi4uZmQ3NDVhNGUxODI5YzM1ZjU3ZjE2MmI0
ZDk4MTEwYjllZmNiMWQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmNwcApAQCAtMzIsMTkgKzMyLDY2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsYWJsZUFyZWEuaCIKIAorI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCisjaW5j
bHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlclN0
eWxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9y
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNb2NrLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFy
VGhlbWUuaCIKKyNpbmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCitlbnVtIGNsYXNzIEluc2V0T3JPdXRzZXQgeworICAgIEluc2V0LAorICAgIE91
dHNldAorfTsKKworc3RhdGljIExheW91dFJlY3QgY29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVh
UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBMZW5ndGhCb3gmIGluc2V0T3JPdXRz
ZXRCb3gsIEluc2V0T3JPdXRzZXQgaW5zZXRPck91dHNldCkKK3sKKyAgICBMYXlvdXRCb3hFeHRl
bnQgZXh0ZW50cyh2YWx1ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LnRvcCgpLCByZWN0Lmhl
aWdodCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRPck91dHNldEJveC5yaWdodCgpLCByZWN0Lndp
ZHRoKCkpLCB2YWx1ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LmJvdHRvbSgpLCByZWN0Lmhl
aWdodCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRPck91dHNldEJveC5sZWZ0KCksIHJlY3Qud2lk
dGgoKSkpOworICAgIGF1dG8gc25hcFBvcnRPckFyZWEocmVjdCk7CisgICAgaWYgKGluc2V0T3JP
dXRzZXQgPT0gSW5zZXRPck91dHNldDo6SW5zZXQpCisgICAgICAgIHNuYXBQb3J0T3JBcmVhLmNv
bnRyYWN0KGV4dGVudHMpOworICAgIGVsc2UKKyAgICAgICAgc25hcFBvcnRPckFyZWEuZXhwYW5k
KGV4dGVudHMpOworICAgIHJldHVybiBzbmFwUG9ydE9yQXJlYTsKK30KKworc3RhdGljIExheW91
dFVuaXQgY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChMYXlvdXRVbml0IG1pbkxvY2F0aW9u
LCBMYXlvdXRVbml0IG1heExvY2F0aW9uLCBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZSBhbGlnbm1l
bnQsIGJvb2wgYXhpc0lzRmxpcHBlZCkKK3sKKyAgICBzd2l0Y2ggKGFsaWdubWVudCkgeworICAg
IGNhc2UgU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6OlN0YXJ0OgorICAgICAgICByZXR1cm4gYXhp
c0lzRmxpcHBlZCA/IG1heExvY2F0aW9uIDogbWluTG9jYXRpb247CisgICAgY2FzZSBTY3JvbGxT
bmFwQXhpc0FsaWduVHlwZTo6Q2VudGVyOgorICAgICAgICByZXR1cm4gKG1pbkxvY2F0aW9uICsg
bWF4TG9jYXRpb24pIC8gMjsKKyAgICBjYXNlIFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpFbmQ6
CisgICAgICAgIHJldHVybiBheGlzSXNGbGlwcGVkID8gbWluTG9jYXRpb24gOiBtYXhMb2NhdGlv
bjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsT2Zmc2V0UmFuZ2U8VD4mIHJh
bmdlKQoreworICAgIHRzIDw8ICJzdGFydDogIiA8PCByYW5nZS5zdGFydCA8PCAiIGVuZDogIiA8
PCByYW5nZS5lbmQ7CisgICAgcmV0dXJuIHRzOworfQorI2VuZGlmCisKIHN0cnVjdCBTYW1lU2l6
ZUFzU2Nyb2xsYWJsZUFyZWEgewogICAgIHZpcnR1YWwgflNhbWVTaXplQXNTY3JvbGxhYmxlQXJl
YSgpOwogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC01MDIsNTggKzU0OSwxMSBAQCBjb25zdCBWZWN0
b3I8TGF5b3V0VW5pdD4qIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkgY29u
c3QKICAgICByZXR1cm4gJm1fc25hcE9mZnNldHNJbmZvLT52ZXJ0aWNhbFNuYXBPZmZzZXRzOwog
fQogCi12b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU25hcE9mZnNldHMoY29uc3Qg
VmVjdG9yPExheW91dFVuaXQ+JiBob3Jpem9udGFsU25hcE9mZnNldHMpCi17Ci0gICAgLy8gQ29u
c2lkZXIgaGF2aW5nIGEgbm9uLWVtcHR5IHNldCBvZiBzbmFwIG9mZnNldHMgYXMgYSBjdWUgdG8g
aW5pdGlhbGl6ZSB0aGUgU2Nyb2xsQW5pbWF0b3IuCi0gICAgaWYgKGhvcml6b250YWxTbmFwT2Zm
c2V0cy5zaXplKCkpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCk7Ci0KLSAgICBlbnN1cmVTbmFw
T2Zmc2V0c0luZm8oKS5ob3Jpem9udGFsU25hcE9mZnNldHMgPSBob3Jpem9udGFsU25hcE9mZnNl
dHM7Ci19Ci0KLXZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU25hcE9mZnNldHMoY29u
c3QgVmVjdG9yPExheW91dFVuaXQ+JiB2ZXJ0aWNhbFNuYXBPZmZzZXRzKQotewotICAgIC8vIENv
bnNpZGVyIGhhdmluZyBhIG5vbi1lbXB0eSBzZXQgb2Ygc25hcCBvZmZzZXRzIGFzIGEgY3VlIHRv
IGluaXRpYWxpemUgdGhlIFNjcm9sbEFuaW1hdG9yLgotICAgIGlmICh2ZXJ0aWNhbFNuYXBPZmZz
ZXRzLnNpemUoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKTsKLQotICAgIGVuc3VyZVNuYXBP
ZmZzZXRzSW5mbygpLnZlcnRpY2FsU25hcE9mZnNldHMgPSB2ZXJ0aWNhbFNuYXBPZmZzZXRzOwot
fQotCi12b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyhj
b25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBob3Jpem9udGFsUmFu
Z2VzKQotewotICAgIGVuc3VyZVNuYXBPZmZzZXRzSW5mbygpLmhvcml6b250YWxTbmFwT2Zmc2V0
UmFuZ2VzID0gaG9yaXpvbnRhbFJhbmdlczsKLX0KLQotdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2V0
VmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxM
YXlvdXRVbml0Pj4mIHZlcnRpY2FsUmFuZ2VzKQotewotICAgIGVuc3VyZVNuYXBPZmZzZXRzSW5m
bygpLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyA9IHZlcnRpY2FsUmFuZ2VzOwotfQotCiB2b2lk
IFNjcm9sbGFibGVBcmVhOjpjbGVhclNuYXBPZmZzZXRzKCkKIHsKLSAgICBjbGVhckhvcml6b250
YWxTbmFwT2Zmc2V0cygpOwotICAgIGNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cygpOwotfQotCi12
b2lkIFNjcm9sbGFibGVBcmVhOjpjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cygpCi17Ci0gICAg
aWYgKCFtX3NuYXBPZmZzZXRzSW5mbykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zbmFwT2Zm
c2V0c0luZm8tPmhvcml6b250YWxTbmFwT2Zmc2V0cyA9IHsgfTsKLSAgICBtX3NuYXBPZmZzZXRz
SW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMgPSB7IH07Ci0gICAgbV9jdXJyZW50SG9y
aXpvbnRhbFNuYXBQb2ludEluZGV4ID0gMDsKLX0KLQotdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y2xl
YXJWZXJ0aWNhbFNuYXBPZmZzZXRzKCkKLXsKLSAgICBpZiAoIW1fc25hcE9mZnNldHNJbmZvKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NuYXBPZmZzZXRzSW5mby0+dmVydGljYWxTbmFwT2Zm
c2V0cyA9IHsgfTsKLSAgICBtX3NuYXBPZmZzZXRzSW5mby0+dmVydGljYWxTbmFwT2Zmc2V0UmFu
Z2VzID0geyB9OworICAgIG1fc25hcE9mZnNldHNJbmZvID0gbnVsbHB0cjsKICAgICBtX2N1cnJl
bnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4ID0gMDsKKyAgICBtX2N1cnJlbnRIb3Jpem9udGFsU25h
cFBvaW50SW5kZXggPSAwOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVhOjp1c2VzU2Nyb2xsU25h
cCgpIGNvbnN0CkBAIC01NjMsMjkgKzU2MywyNCBAQCBib29sIFNjcm9sbGFibGVBcmVhOjp1c2Vz
U2Nyb2xsU25hcCgpIGNvbnN0CiAKIEludFBvaW50IFNjcm9sbGFibGVBcmVhOjpuZWFyZXN0QWN0
aXZlU25hcFBvaW50KGNvbnN0IEludFBvaW50JiBjdXJyZW50UG9zaXRpb24pCiB7Ci0gICAgaWYg
KCFob3Jpem9udGFsU25hcE9mZnNldHMoKSAmJiAhdmVydGljYWxTbmFwT2Zmc2V0cygpKQorICAg
IGF1dG8qIG9mZnNldHNJbmZvID0gc2Nyb2xsU25hcE9mZnNldEluZm8oKTsKKyAgICBpZiAoIW9m
ZnNldHNJbmZvIHx8IG9mZnNldHNJbmZvLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBjdXJy
ZW50UG9zaXRpb247CiAgICAgCiAgICAgaWYgKCFleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCiAg
ICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CiAgICAgCiAgICAgSW50UG9pbnQgY29ycmVj
dGVkUG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247Ci0gICAgCi0gICAgaWYgKGhvcml6b250YWxT
bmFwT2Zmc2V0cygpKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGhvcml6b250YWwgPSAqaG9yaXpv
bnRhbFNuYXBPZmZzZXRzKCk7Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgYWN0aXZlSW5kZXgg
PSBjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7Ci0gICAgICAgIGlmIChhY3RpdmVJ
bmRleCA8IGhvcml6b250YWwuc2l6ZSgpKQotICAgICAgICAgICAgY29ycmVjdGVkUG9zaXRpb24u
c2V0WChob3Jpem9udGFsW2FjdGl2ZUluZGV4XS50b0ludCgpKTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKHZlcnRpY2FsU25hcE9mZnNldHMoKSkgewotICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0aWNh
bCA9ICp2ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgYWN0
aXZlSW5kZXggPSBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOwotICAgICAgICBpZiAo
YWN0aXZlSW5kZXggPCB2ZXJ0aWNhbC5zaXplKCkpCi0gICAgICAgICAgICBjb3JyZWN0ZWRQb3Np
dGlvbi5zZXRZKHZlcnRpY2FsW2FjdGl2ZUluZGV4XS50b0ludCgpKTsKLSAgICB9CisKKyAgICBj
b25zdCBhdXRvJiBob3Jpem9udGFsID0gb2Zmc2V0c0luZm8tPmhvcml6b250YWxTbmFwT2Zmc2V0
czsKKyAgICBzaXplX3QgYWN0aXZlSG9yaXpvbnRhbEluZGV4ID0gY3VycmVudEhvcml6b250YWxT
bmFwUG9pbnRJbmRleCgpOworICAgIGlmIChhY3RpdmVIb3Jpem9udGFsSW5kZXggPCBob3Jpem9u
dGFsLnNpemUoKSkKKyAgICAgICAgY29ycmVjdGVkUG9zaXRpb24uc2V0WChob3Jpem9udGFsW2Fj
dGl2ZUhvcml6b250YWxJbmRleF0udG9JbnQoKSk7CisKKyAgICBjb25zdCBhdXRvJiB2ZXJ0aWNh
bCA9IG9mZnNldHNJbmZvLT52ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgIHNpemVfdCBhY3RpdmVW
ZXJ0aWNhbEluZGV4ID0gY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKKyAgICBpZiAo
YWN0aXZlVmVydGljYWxJbmRleCA8IHZlcnRpY2FsLnNpemUoKSkKKyAgICAgICAgY29ycmVjdGVk
UG9zaXRpb24uc2V0WSh2ZXJ0aWNhbFthY3RpdmVWZXJ0aWNhbEluZGV4XS50b0ludCgpKTsKIAog
ICAgIHJldHVybiBjb3JyZWN0ZWRQb3NpdGlvbjsKIH0KQEAgLTYxMSw2ICs2MDYsODAgQEAgdm9p
ZCBTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkKICAgICAgICAgc2Nyb2xs
VG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvcnJlY3RlZFBvc2l0aW9uKTsKICAgICB9CiB9CisK
K1Njcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiogU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFNuYXBPZmZzZXRJbmZvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zbmFwT2Zmc2V0c0luZm8u
Z2V0KCk7Cit9CisKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNuYXBPZmZzZXRzRm9yRWxl
bWVudChjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRlclN0
eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmlld3BvcnRSZWN0SW5Cb3Jk
ZXJCb3hDb29yZGluYXRlcykKK3sKKyAgICBhdXRvIHNjcm9sbFNuYXBUeXBlID0gc2Nyb2xsaW5n
RWxlbWVudFN0eWxlLnNjcm9sbFNuYXBUeXBlKCk7CisgICAgY29uc3QgYXV0byYgYm94ZXNXaXRo
U2Nyb2xsU25hcFBvc2l0aW9ucyA9IHNjcm9sbGluZ0VsZW1lbnRCb3gudmlldygpLmJveGVzV2l0
aFNjcm9sbFNuYXBQb3NpdGlvbnMoKTsKKyAgICBpZiAoc2Nyb2xsU25hcFR5cGUuc3RyaWN0bmVz
cyA9PSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6Tm9uZSB8fCBib3hlc1dpdGhTY3JvbGxTbmFwUG9z
aXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBjbGVhclNuYXBPZmZzZXRzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGhhc0hvcml6b250YWxTbmFwT2Zmc2V0cyA9IHNj
cm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OkJvdGggfHwgc2Nyb2xsU25hcFR5
cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6WEF4aXMgfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9
PSBTY3JvbGxTbmFwQXhpczo6SW5saW5lOworICAgIGJvb2wgaGFzVmVydGljYWxTbmFwT2Zmc2V0
cyA9IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OkJvdGggfHwgc2Nyb2xs
U25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6WUF4aXMgfHwgc2Nyb2xsU25hcFR5cGUu
YXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6QmxvY2s7CisKKyAgICBhdXRvIG1heFNjcm9sbE9mZnNl
dCA9IG1heGltdW1TY3JvbGxPZmZzZXQoKTsKKyAgICBhdXRvIHNjcm9sbFBvc2l0aW9uID0gTGF5
b3V0UG9pbnQgeyB0aGlzLT5zY3JvbGxQb3NpdGlvbigpIH07CisgICAgYm9vbCBzY3JvbGxlcklz
UlRMID0gIXNjcm9sbGluZ0VsZW1lbnRCb3guc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCk7CisKKyAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBzY3JvbGxpbmcgY29udGFpbmVyJ3Mgc25h
cCBwb3J0LCB3aGVyZSB0aGUgdG9wIGxlZnQgb2YgdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBi
b3JkZXIgYm94IGlzIHRoZSBvcmlnaW4uCisgICAgYXV0byBzY3JvbGxTbmFwUG9ydCA9IGNvbXB1
dGVTY3JvbGxTbmFwUG9ydE9yQXJlYVJlY3Qodmlld3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGlu
YXRlcywgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNjcm9sbFBhZGRpbmcoKSwgSW5zZXRPck91dHNl
dDo6SW5zZXQpOworICAgIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIgYnVpbGRlcihzY3Jv
bGxTbmFwVHlwZS5zdHJpY3RuZXNzKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwg
c3RyZWFtIDw8ICJDb21wdXRpbmcgc2Nyb2xsIHNuYXAgb2Zmc2V0cyBmb3IgIiA8PCB0aGlzIDw8
ICIgaW4gc25hcCBwb3J0ICIgPDwgc2Nyb2xsU25hcFBvcnQpOworICAgIGZvciAoYXV0byogY2hp
bGQgOiBib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zKSB7CisgICAgICAgIGlmIChjaGlsZC0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lckZvclNuYXBwaW5nKCkgIT0gJnNjcm9sbGluZ0Vs
ZW1lbnRCb3gpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBUaGUgYm91bmRz
IG9mIHRoZSBjaGlsZCBlbGVtZW50J3Mgc25hcCBhcmVhLCB3aGVyZSB0aGUgdG9wIGxlZnQgb2Yg
dGhlIHNjcm9sbGluZyBjb250YWluZXIncyBib3JkZXIgYm94IGlzIHRoZSBvcmlnaW4uCisgICAg
ICAgIC8vIFRoZSBzbmFwIGFyZWEgaXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgY2hpbGQgZWxl
bWVudCdzIGJvcmRlciBib3gsIGFmdGVyIGFwcGx5aW5nIHRyYW5zZm9ybWF0aW9ucy4KKyAgICAg
ICAgLy8gRklYTUU6IEZvciBub3csIGp1c3QgY29uc2lkZXIgd2hldGhlciB0aGUgc2Nyb2xsZXIg
aXMgUlRMLiBUaGUgYmVoYXZpb3Igb2YgTFRSIGJveGVzIGluc2lkZSBhIFJUTCBzY3JvbGxlciBp
cyBwb29ybHkgZGVmaW5lZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNz
dWVzLzUzNjEuCisgICAgICAgIGF1dG8gc2Nyb2xsU25hcEFyZWEgPSBMYXlvdXRSZWN0KGNoaWxk
LT5sb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFF1YWQoY2hpbGQtPmJvcmRlckJvdW5kaW5nQm94
KCkpLCAmc2Nyb2xsaW5nRWxlbWVudEJveCkuYm91bmRpbmdCb3goKSk7CisKKyAgICAgICAgLy8g
bG9jYWxUb0NvbnRhaW5lclF1YWQgd2lsbCB0cmFuc2Zvcm0gdGhlIHNjcm9sbCBzbmFwIGFyZWEg
YnkgdGhlIHNjcm9sbCBwb3NpdGlvbiwgZXhjZXB0IGluIHRoZSBjYXNlIHRoYXQgdGhpcyBwb3Np
dGlvbiBpcworICAgICAgICAvLyBjb21pbmcgZnJvbSBhIFNjcm9sbFZpZXcuIFdlIHdhbnQgdGhl
IHRyYW5zZm9ybWVkIGFyZWEsIGJ1dCB3aXRob3V0IHNjcm9sbCBwb3NpdGlvbiB0YWtlbiBpbnRv
IGFjY291bnQuCisgICAgICAgIGlmICghaXNTY3JvbGxWaWV3KCkpCisgICAgICAgICAgICBzY3Jv
bGxTbmFwQXJlYS5tb3ZlQnkoc2Nyb2xsUG9zaXRpb24pOworCisgICAgICAgIHNjcm9sbFNuYXBB
cmVhID0gY29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdChzY3JvbGxTbmFwQXJlYSwgY2hp
bGQtPnN0eWxlKCkuc2Nyb2xsTWFyZ2luKCksIEluc2V0T3JPdXRzZXQ6Ok91dHNldCk7CisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiAgICBDb25zaWRlcmlu
ZyBzY3JvbGwgc25hcCB0YXJnZXQgYXJlYSAiIDw8IHNjcm9sbFNuYXBBcmVhKTsKKyAgICAgICAg
YXV0byBhbGlnbm1lbnQgPSBjaGlsZC0+c3R5bGUoKS5zY3JvbGxTbmFwQWxpZ24oKTsKKyAgICAg
ICAgaWYgKGhhc0hvcml6b250YWxTbmFwT2Zmc2V0cyAmJiBhbGlnbm1lbnQueCAhPSBTY3JvbGxT
bmFwQXhpc0FsaWduVHlwZTo6Tm9uZSkgeworICAgICAgICAgICAgYXV0byBhYnNvbHV0ZVNjcm9s
bFhQb3NpdGlvbiA9IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25hcEFyZWEu
eCgpLCBzY3JvbGxTbmFwQXJlYS5tYXhYKCksIGFsaWdubWVudC54LCBzY3JvbGxlcklzUlRMKSAt
IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25hcFBvcnQueCgpLCBzY3JvbGxT
bmFwUG9ydC5tYXhYKCksIGFsaWdubWVudC54LCBzY3JvbGxlcklzUlRMKTsKKyAgICAgICAgICAg
IGF1dG8gYWJzb2x1dGVTY3JvbGxPZmZzZXQgPSBjbGFtcFRvPGludD4oc2Nyb2xsT2Zmc2V0RnJv
bVBvc2l0aW9uKHsgcm91bmRUb0ludChhYnNvbHV0ZVNjcm9sbFhQb3NpdGlvbiksIDAgfSkueCgp
LCAwLCBtYXhTY3JvbGxPZmZzZXQueCgpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYWRkSG9yaXpv
bnRhbE9mZnNldChhYnNvbHV0ZVNjcm9sbE9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGhhc1ZlcnRpY2FsU25hcE9mZnNldHMgJiYgYWxpZ25tZW50LnkgIT0gU2Nyb2xsU25hcEF4aXNB
bGlnblR5cGU6Ok5vbmUpIHsKKyAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxZUG9zaXRp
b24gPSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNuYXBBcmVhLnkoKSwgc2Ny
b2xsU25hcEFyZWEubWF4WSgpLCBhbGlnbm1lbnQueSwgZmFsc2UpIC0gY29tcHV0ZVNjcm9sbFNu
YXBBbGlnbk9mZnNldChzY3JvbGxTbmFwUG9ydC55KCksIHNjcm9sbFNuYXBQb3J0Lm1heFkoKSwg
YWxpZ25tZW50LnksIGZhbHNlKTsKKyAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxPZmZz
ZXQgPSBjbGFtcFRvPGludD4oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHsgMCwgcm91bmRUb0lu
dChhYnNvbHV0ZVNjcm9sbFlQb3NpdGlvbikgfSkueSgpLCAwLCBtYXhTY3JvbGxPZmZzZXQueSgp
KTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYWRkVmVydGljYWxPZmZzZXQoYWJzb2x1dGVTY3JvbGxP
ZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9zbmFwT2Zmc2V0c0luZm8gPSBidWls
ZGVyLmJ1aWxkKHNjcm9sbFNuYXBQb3J0KTsKKyAgICBBU1NFUlQobV9zbmFwT2Zmc2V0c0luZm8p
OworCisgICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlz
RW1wdHkoKSkgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8
ICIgPT4gQ29tcHV0ZWQgaG9yaXpvbnRhbCBzY3JvbGwgc25hcCBvZmZzZXRzOiAiIDw8IGhvcml6
b250YWxTbmFwT2Zmc2V0cyk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBz
dHJlYW0gPDwgIiA9PiBDb21wdXRlZCBob3Jpem9udGFsIHNjcm9sbCBzbmFwIG9mZnNldCByYW5n
ZXM6ICIgPDwgaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMpOworICAgIH0gZWxzZQorICAgICAg
ICBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPSAwOworCisgICAgaWYgKCFtX3Nu
YXBPZmZzZXRzSW5mby0+dmVydGljYWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIHZlcnRp
Y2FsIHNjcm9sbCBzbmFwIG9mZnNldHM6ICIgPDwgdmVydGljYWxTbmFwT2Zmc2V0cyk7CisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21wdXRlZCB2
ZXJ0aWNhbCBzY3JvbGwgc25hcCBvZmZzZXQgcmFuZ2VzOiAiIDw8IHZlcnRpY2FsU25hcE9mZnNl
dFJhbmdlcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50
SW5kZXggPSAwOworCisgICAgLy8gQ29uc2lkZXIgaGF2aW5nIGEgbm9uLWVtcHR5IHNldCBvZiBz
bmFwIG9mZnNldHMgYXMgYSBjdWUgdG8gaW5pdGlhbGl6ZSB0aGUgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mby0+aXNFbXB0eSgpKQorICAgICAgICBzY3JvbGxBbmlt
YXRvcigpOworfQogI2Vsc2UKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbFNuYXBT
dGF0ZSgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRleCA4
NTFhMDJmY2JiM2U5NzY5MWJmMDFkOWIyMTA5NzFkOWFlNmQ3OTQ5Li4zZGE0ZGU2NmYzYTQ2NzFl
MDMwMTg1MTEzNTRmYzg3OGY1NGQ4OWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGFibGVBcmVhLmgKQEAgLTQ0LDYgKzQ0LDggQEAgY2xhc3MgTGF5b3V0UG9pbnQ7CiBjbGFzcyBM
YXlvdXRTaXplOwogY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVl
bEV2ZW50OworY2xhc3MgUmVuZGVyQm94OworY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTY3Jv
bGxBbmltYXRvcjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBUaWxlZEJhY2tpbmc7CkBA
IC05MSwxNCArOTMsMTYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFZlY3Rv
cjxMYXlvdXRVbml0PiogdmVydGljYWxTbmFwT2Zmc2V0cygpIGNvbnN0OwogICAgIFdFQkNPUkVf
RVhQT1JUIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4qIGhvcml6
b250YWxTbmFwT2Zmc2V0UmFuZ2VzKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
VmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiogdmVydGljYWxTbmFwT2Zmc2V0
UmFuZ2VzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsU25hcE9mZnNldHNJbmZv
PExheW91dFVuaXQ+KiBzY3JvbGxTbmFwT2Zmc2V0SW5mbygpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIHsgfTsKLSAgICB2b2lkIHNldEhvcml6b250YWxTbmFw
T2Zmc2V0cyhjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mKTsKLSAgICB2b2lkIHNldFZlcnRpY2Fs
U25hcE9mZnNldHMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+Jik7Ci0gICAgdm9pZCBzZXRIb3Jp
em9udGFsU25hcE9mZnNldFJhbmdlcyhjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5
b3V0VW5pdD4+Jik7Ci0gICAgdm9pZCBzZXRWZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoY29uc3Qg
VmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYpOworCisgICAgLy8gVXBkYXRl
IHRoZSBzbmFwIG9mZnNldHMgZm9yIHRoaXMgc2Nyb2xsYWJsZSBhcmVhLCBnaXZlbiB0aGUgUmVu
ZGVyQm94IG9mIHRoZSBzY3JvbGwgY29udGFpbmVyLCB0aGUgUmVuZGVyU3R5bGUKKyAgICAvLyB3
aGljaCBkZWZpbmVzIHRoZSBzY3JvbGwtc25hcCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHZpZXdwb3J0
IHJlY3RhbmdsZSB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0IG9mCisgICAgLy8gdGhl
IHNjcm9sbGluZyBjb250YWluZXIncyBib3JkZXIgYm94LgorICAgIHZvaWQgdXBkYXRlU25hcE9m
ZnNldHNGb3JFbGVtZW50KGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJveCwgY29u
c3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5b3V0UmVjdCB2aWV3cG9y
dFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzKTsKKwogICAgIHZvaWQgY2xlYXJTbmFwT2Zmc2V0
cygpOwotICAgIHZvaWQgY2xlYXJIb3Jpem9udGFsU25hcE9mZnNldHMoKTsKLSAgICB2b2lkIGNs
ZWFyVmVydGljYWxTbmFwT2Zmc2V0cygpOworCiAgICAgdW5zaWduZWQgY3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleDsgfQogICAgIHZvaWQgc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRl
eCh1bnNpZ25lZCBpbmRleCkgeyBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPSBp
bmRleDsgfQogICAgIHVuc2lnbmVkIGN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleDsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCmluZGV4IGZiMmFh
ODYzN2NmOGM3MzBlZWMxZTQzM2ZkNmFiMDEwOGZkOWIxMTIuLmY5ODk3ZDk3ZTUyYjczZGYxMGVl
Zjk3MWZmNjNjYzU0YTFlZDMzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9TY3JvbGxDb250cm9sbGVyLmgKQEAgLTE2MCwxMyArMTYwLDEzIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpOwogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzLCBj
b25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8
TGF5b3V0VW5pdD4+Jik7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbFNu
YXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiopOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFBv
aW50cyhjb25zdCBTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4mKTsKICAgICB2b2lk
IHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzLCB1bnNpZ25l
ZCk7CiAgICAgdm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlc0Zvck9mZnNldChTY3JvbGxP
ZmZzZXQpOwogICAgIGJvb2wgYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkgY29uc3Qg
eyByZXR1cm4gbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2U7IH0KICAgICB2b2lkIHNl
dFNjcm9sbFNuYXBJbmRleERpZENoYW5nZShib29sIHN0YXRlKSB7IG1fYWN0aXZlU2Nyb2xsU25h
cEluZGV4RGlkQ2hhbmdlID0gc3RhdGU7IH0KICAgICB1bnNpZ25lZCBhY3RpdmVTY3JvbGxTbmFw
SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVTY3Jv
bGxTbmFwU3RhdGUoY29uc3QgU2Nyb2xsYWJsZUFyZWEmKTsKIAogICAgIHZvaWQgdXBkYXRlR2Vz
dHVyZUluUHJvZ3Jlc3NTdGF0ZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0KaW5kZXgg
N2JmMDA1MTBlZDk5YjJlZGFlYmE2MjM5ZTJmMzk5YTEzMzc0N2M5MS4uNmRkZmEzOGRjMDhhOTQ0
N2QzZGYzYzIyZmM0NDY3YzRlOWQ4YjM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tCkBAIC04MSwxMSArODEsNiBAQCBzdGF0aWMg
ZmxvYXQgc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCkKIH0KICNlbmRpZgogCi1zdGF0aWMgU2Nyb2xs
RXZlbnRBeGlzIG90aGVyU2Nyb2xsRXZlbnRBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKQotewot
ICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IFNjcm9sbEV2
ZW50QXhpczo6VmVydGljYWwgOiBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWw7Ci19Ci0KIFNj
cm9sbENvbnRyb2xsZXI6OlNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCYg
Y2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQogewpAQCAtNzIwLDcgKzcxNSw3IEBAIGJv
b2wgU2Nyb2xsQ29udHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYKICAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX3Njcm9sbFNuYXBTdGF0ZS0+c25hcE9mZnNldHNG
b3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkuaXNFbXB0eSgpICYmIG1fc2Nyb2xs
U25hcFN0YXRlLT5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCku
aXNFbXB0eSgpKQorICAgIGlmIChtX3Njcm9sbFNuYXBTdGF0ZS0+c25hcE9mZnNldHNJbmZvKCku
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIHN0YXR1cyA9IHRv
V2hlZWxFdmVudFN0YXR1cyh3aGVlbEV2ZW50LnBoYXNlKCksIHdoZWVsRXZlbnQubW9tZW50dW1Q
aGFzZSgpKTsKQEAgLTgyMCw0NiArODE1LDMxIEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2Ny
b2xsU25hcFRpbWVyRmlyZWQoKQogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAotdm9pZCBT
Y3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUoY29uc3QgU2Nyb2xsYWJsZUFy
ZWEmIHNjcm9sbGFibGVBcmVhKQordm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxT
bmFwUG9pbnRzKFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0Piogc25hcE9mZnNldHNJ
bmZvKQogewotICAgIGlmIChhdXRvKiBzbmFwT2Zmc2V0cyA9IHNjcm9sbGFibGVBcmVhLmhvcml6
b250YWxTbmFwT2Zmc2V0cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzbmFwT2Zmc2V0UmFuZ2Vz
ID0gc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSkKLSAgICAgICAg
ICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCAq
c25hcE9mZnNldHMsICpzbmFwT2Zmc2V0UmFuZ2VzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsICpz
bmFwT2Zmc2V0cywgeyB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgdXBkYXRlU2Nyb2xsU25hcFBv
aW50cyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHsgfSwgeyB9KTsKLQotICAgIGlmIChh
dXRvKiBzbmFwT2Zmc2V0cyA9IHNjcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogc25hcE9mZnNldFJhbmdlcyA9IHNjcm9sbGFibGVBcmVhLnZl
cnRpY2FsU25hcE9mZnNldFJhbmdlcygpKQotICAgICAgICAgICAgdXBkYXRlU2Nyb2xsU25hcFBv
aW50cyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCAqc25hcE9mZnNldHMsICpzbmFwT2Zmc2V0
UmFuZ2VzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXBkYXRlU2Nyb2xsU25hcFBvaW50
cyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCAqc25hcE9mZnNldHMsIHsgfSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0
aWNhbCwgeyB9LCB7IH0pOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVh
bSA8PCAiU2Nyb2xsQ29udHJvbGxlciAiIDw8IHRoaXMgPDwgIiB1cGRhdGVTY3JvbGxTbmFwU3Rh
dGUgZm9yICIgPDwgc2Nyb2xsYWJsZUFyZWEgPDwgIiBuZXcgc3RhdGUgIiA8PCBWYWx1ZU9yTnVs
bChtX3Njcm9sbFNuYXBTdGF0ZS5nZXQoKSkpOworICAgIGlmICghc25hcE9mZnNldHNJbmZvKSB7
CisgICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKCpzbmFwT2Zmc2V0c0luZm8pOwogfQog
Ci12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZl
bnRBeGlzIGF4aXMsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcFBvaW50cywgY29uc3Qg
VmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcFJhbmdlcykKK3ZvaWQg
U2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcFBvaW50cyhjb25zdCBTY3JvbGxTbmFw
T2Zmc2V0c0luZm88TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzSW5mbykKIHsKLSAgICBib29sIHNo
b3VsZENvbXB1dGVDdXJyZW50U25hcEluZGljZXMgPSBmYWxzZTsKLSAgICBpZiAoIW1fc2Nyb2xs
U25hcFN0YXRlKSB7Ci0gICAgICAgIGlmIChzbmFwUG9pbnRzLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoc25hcE9mZnNldHNJbmZvLmlzRW1wdHkoKSkgeworICAgICAg
ICBtX3Njcm9sbFNuYXBTdGF0ZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
KyAgICBib29sIHNob3VsZENvbXB1dGVDdXJyZW50U25hcEluZGljZXMgPSAhbV9zY3JvbGxTbmFw
U3RhdGU7CisgICAgaWYgKCFtX3Njcm9sbFNuYXBTdGF0ZSkKICAgICAgICAgbV9zY3JvbGxTbmFw
U3RhdGUgPSBtYWtlVW5pcXVlPFNjcm9sbFNuYXBBbmltYXRvclN0YXRlPigpOwotICAgICAgICBz
aG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzID0gdHJ1ZTsKLSAgICB9CiAKLSAgICBpZiAo
c25hcFBvaW50cy5pc0VtcHR5KCkgJiYgbV9zY3JvbGxTbmFwU3RhdGUtPnNuYXBPZmZzZXRzRm9y
QXhpcyhvdGhlclNjcm9sbEV2ZW50QXhpcyhheGlzKSkuaXNFbXB0eSgpKQotICAgICAgICBtX3Nj
cm9sbFNuYXBTdGF0ZSA9IG51bGxwdHI7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fc2Nyb2xsU25h
cFN0YXRlLT5zZXRTbmFwT2Zmc2V0c0FuZFBvc2l0aW9uUmFuZ2VzRm9yQXhpcyhheGlzLCBzbmFw
UG9pbnRzLCBzbmFwUmFuZ2VzKTsKLSAgICAgICAgaWYgKHNob3VsZENvbXB1dGVDdXJyZW50U25h
cEluZGljZXMpIHsKLSAgICAgICAgICAgIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2VzRm9yT2Zm
c2V0KHJvdW5kZWRJbnRQb2ludChtX2NsaWVudC5zY3JvbGxPZmZzZXQoKSkpOwotICAgICAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxl
cjo6dXBkYXRlU2Nyb2xsU25hcFBvaW50cyAtIGNvbXB1dGVkIGluaXRpYWwgc25hcCBpbmRpY2Vz
OiB4ICIgPDwgbV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xs
RXZlbnRBeGlzOjpIb3Jpem9udGFsKSA8PCAiLCB5ICIgPDwgbV9zY3JvbGxTbmFwU3RhdGUtPmFj
dGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOwotICAgICAg
ICB9CisgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnNldFNuYXBPZmZzZXRJbmZvKHNuYXBPZmZzZXRz
SW5mbyk7CisKKyAgICBpZiAoc2hvdWxkQ29tcHV0ZUN1cnJlbnRTbmFwSW5kaWNlcykgeworICAg
ICAgICBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlc0Zvck9mZnNldChyb3VuZGVkSW50UG9pbnQo
bV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9s
bFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcFBvaW50
cyAtIGNvbXB1dGVkIGluaXRpYWwgc25hcCBpbmRpY2VzOiB4ICIgPDwgbV9zY3JvbGxTbmFwU3Rh
dGUtPmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSA8
PCAiLCB5ICIgPDwgbV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOwogICAgIH0KIH0KIApAQCAtODg3LDE0ICs4NjcsMTQg
QEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhp
c0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMKICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IG1fY2xp
ZW50LnBhZ2VTY2FsZUZhY3RvcigpOwogICAgIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFw
U3RhdGUgPSAqbV9zY3JvbGxTbmFwU3RhdGU7CiAKLSAgICBhdXRvIHNuYXBPZmZzZXRzID0gc25h
cFN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhheGlzKTsKKyAgICBhdXRvIHNuYXBPZmZzZXRzID0g
c25hcFN0YXRlLnNuYXBPZmZzZXRzSW5mbygpLm9mZnNldHNGb3JBeGlzKGF4aXMpOwogICAgIGlm
ICghc25hcE9mZnNldHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRVbml0
IGNsYW1wZWRPZmZzZXQgPSBzdGQ6Om1pbihzdGQ6Om1heChMYXlvdXRVbml0KG9mZnNldCAvIHNj
YWxlRmFjdG9yKSwgc25hcE9mZnNldHMuZmlyc3QoKSksIHNuYXBPZmZzZXRzLmxhc3QoKSk7CiAK
ICAgICB1bnNpZ25lZCBhY3RpdmVJbmRleCA9IDA7Ci0gICAgY2xvc2VzdFNuYXBPZmZzZXQoc25h
cFN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhheGlzKSwgc25hcFN0YXRlLnNuYXBPZmZzZXRSYW5n
ZXNGb3JBeGlzKGF4aXMpLCBjbGFtcGVkT2Zmc2V0LCAwLCBhY3RpdmVJbmRleCk7CisgICAgY2xv
c2VzdFNuYXBPZmZzZXQoc25hcFN0YXRlLnNuYXBPZmZzZXRzSW5mbygpLCBheGlzLCBjbGFtcGVk
T2Zmc2V0LCAwLCBhY3RpdmVJbmRleCk7CiAKICAgICBpZiAoYWN0aXZlSW5kZXggPT0gYWN0aXZl
U2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhheGlzKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRl
LmgKaW5kZXggMGJjZTZiOGM0N2FjZmIzMWVkNzY1YmI5ODYwOTEwYWNkZTJhYWQzMC4uZWUwN2Vj
YTYyOTA3NGE1ZGFmYzhkYzAxMDY2ZTY0ODg2NzBlNTk4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCkBAIC0y
Nyw3ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogCi0jaW5jbHVkZSAi
QXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1
ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIkxheW91dFBvaW50LmgiCkBAIC01MywyNyArNTIs
OCBAQCBlbnVtIGNsYXNzIFNjcm9sbFNuYXBTdGF0ZSB7CiBjbGFzcyBTY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgY29u
c3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
IGF4aXMpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4
aXM6Okhvcml6b250YWwgPyBtX3NuYXBPZmZzZXRzWCA6IG1fc25hcE9mZnNldHNZOwotICAgIH0K
LQotICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBP
ZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gbV9zbmFw
T2Zmc2V0UmFuZ2VzWCA6IG1fc25hcE9mZnNldFJhbmdlc1k7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRTbmFwT2Zmc2V0c0FuZFBvc2l0aW9uUmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhp
cywgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9yPFNj
cm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcE9mZnNldFJhbmdlcykKLSAgICB7Ci0g
ICAgICAgIGlmIChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkgewotICAgICAg
ICAgICAgbV9zbmFwT2Zmc2V0c1ggPSBzbmFwT2Zmc2V0czsKLSAgICAgICAgICAgIG1fc25hcE9m
ZnNldFJhbmdlc1ggPSBzbmFwT2Zmc2V0UmFuZ2VzOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgbV9zbmFwT2Zmc2V0c1kgPSBzbmFwT2Zmc2V0czsKLSAgICAgICAgICAgIG1fc25hcE9m
ZnNldFJhbmdlc1kgPSBzbmFwT2Zmc2V0UmFuZ2VzOwotICAgICAgICB9Ci0gICAgfQotCisgICAg
Y29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0c0luZm8o
KSBjb25zdCB7IHJldHVybiBtX3NuYXBPZmZzZXRzSW5mbzsgfQorICAgIHZvaWQgc2V0U25hcE9m
ZnNldEluZm8oY29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+JiBzbmFwT2Zm
c2V0c0luZm8pIHsgbV9zbmFwT2Zmc2V0c0luZm8gPSBzbmFwT2Zmc2V0c0luZm87IH0KICAgICBT
Y3JvbGxTbmFwU3RhdGUgY3VycmVudFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50U3Rh
dGU7IH0KIAogICAgIHVuc2lnbmVkIGFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRB
eGlzIGF4aXMpIGNvbnN0CkBAIC05OCwxNyArNzgsMTQgQEAgcHVibGljOgogICAgIHZvaWQgdHJh
bnNpdGlvblRvRGVzdGluYXRpb25SZWFjaGVkU3RhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBmbG9h
dCB0YXJnZXRPZmZzZXRGb3JTdGFydE9mZnNldChjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNu
YXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBz
bmFwT2Zmc2V0UmFuZ2VzLCBmbG9hdCBtYXhTY3JvbGxPZmZzZXQsIGZsb2F0IHN0YXJ0T2Zmc2V0
LCBmbG9hdCBwcmVkaWN0ZWRPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgZGVsdGEsIHVu
c2lnbmVkJiBvdXRBY3RpdmVTbmFwSW5kZXgpIGNvbnN0OworICAgIGZsb2F0IHRhcmdldE9mZnNl
dEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBm
bG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUs
IGZsb2F0IGRlbHRhLCB1bnNpZ25lZCYgb3V0QWN0aXZlU25hcEluZGV4KSBjb25zdDsKICAgICB2
b2lkIHRlYXJkb3duQW5pbWF0aW9uRm9yU3RhdGUoU2Nyb2xsU25hcFN0YXRlKTsKICAgICB2b2lk
IHNldHVwQW5pbWF0aW9uRm9yU3RhdGUoU2Nyb2xsU25hcFN0YXRlLCBjb25zdCBGbG9hdFNpemUm
IGNvbnRlbnRTaXplLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgcGFnZVNj
YWxlLCBjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsT2Zmc2V0LCBjb25zdCBGbG9hdFNpemUmIGlu
aXRpYWxWZWxvY2l0eSwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsRGVsdGEpOwogCiAgICAgU2Ny
b2xsU25hcFN0YXRlIG1fY3VycmVudFN0YXRlIHsgU2Nyb2xsU25hcFN0YXRlOjpVc2VySW50ZXJh
Y3Rpb24gfTsKIAotICAgIFZlY3RvcjxMYXlvdXRVbml0PiBtX3NuYXBPZmZzZXRzWDsKLSAgICBW
ZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+IG1fc25hcE9mZnNldFJhbmdlc1g7
CisgICAgU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+IG1fc25hcE9mZnNldHNJbmZv
OwogICAgIHVuc2lnbmVkIG1fYWN0aXZlU25hcEluZGV4WCB7IDAgfTsKLSAgICBWZWN0b3I8TGF5
b3V0VW5pdD4gbV9zbmFwT2Zmc2V0c1k7Ci0gICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExh
eW91dFVuaXQ+PiBtX3NuYXBPZmZzZXRSYW5nZXNZOwogICAgIHVuc2lnbmVkIG1fYWN0aXZlU25h
cEluZGV4WSB7IDAgfTsKIAogICAgIE1vbm90b25pY1RpbWUgbV9zdGFydFRpbWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0
YXRlLm1tCmluZGV4IDk0NTA2MDM2NTlmY2ExOGJkMmViNzgyMDIzZmFjMTNkM2E2MDFlOTQuLjM1
NmY5ZWI2OGQ1ZWI0ODRkZjJjYzk0OTFmYWViMDEyMTkyY2I5NmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1t
CkBAIC01MSw4ICs1MSw4IEBAIHZvaWQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnNldHVwQW5p
bWF0aW9uRm9yU3RhdGUoU2Nyb2xsU25hcFN0YXRlIHN0YXRlLCBjb25zCiAKICAgICBtX21vbWVu
dHVtQ2FsY3VsYXRvciA9IFNjcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvcjo6Y3JlYXRlKHZpZXdw
b3J0U2l6ZSwgY29udGVudFNpemUsIGluaXRpYWxPZmZzZXQsIGluaXRpYWxEZWx0YSwgaW5pdGlh
bFZlbG9jaXR5KTsKICAgICBhdXRvIHByZWRpY3RlZFNjcm9sbFRhcmdldCA9IG1fbW9tZW50dW1D
YWxjdWxhdG9yLT5wcmVkaWN0ZWREZXN0aW5hdGlvbk9mZnNldCgpOwotICAgIGZsb2F0IHRhcmdl
dE9mZnNldFggPSB0YXJnZXRPZmZzZXRGb3JTdGFydE9mZnNldChtX3NuYXBPZmZzZXRzWCwgbV9z
bmFwT2Zmc2V0UmFuZ2VzWCwgY29udGVudFNpemUud2lkdGgoKSAtIHZpZXdwb3J0U2l6ZS53aWR0
aCgpLCBpbml0aWFsT2Zmc2V0LngoKSwgcHJlZGljdGVkU2Nyb2xsVGFyZ2V0LndpZHRoKCksIHBh
Z2VTY2FsZSwgaW5pdGlhbERlbHRhLndpZHRoKCksIG1fYWN0aXZlU25hcEluZGV4WCk7Ci0gICAg
ZmxvYXQgdGFyZ2V0T2Zmc2V0WSA9IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KG1fc25hcE9m
ZnNldHNZLCBtX3NuYXBPZmZzZXRSYW5nZXNZLCBjb250ZW50U2l6ZS5oZWlnaHQoKSAtIHZpZXdw
b3J0U2l6ZS5oZWlnaHQoKSwgaW5pdGlhbE9mZnNldC55KCksIHByZWRpY3RlZFNjcm9sbFRhcmdl
dC5oZWlnaHQoKSwgcGFnZVNjYWxlLCBpbml0aWFsRGVsdGEuaGVpZ2h0KCksIG1fYWN0aXZlU25h
cEluZGV4WSk7CisgICAgZmxvYXQgdGFyZ2V0T2Zmc2V0WCA9IHRhcmdldE9mZnNldEZvclN0YXJ0
T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgY29udGVudFNpemUud2lkdGgoKSAt
IHZpZXdwb3J0U2l6ZS53aWR0aCgpLCBpbml0aWFsT2Zmc2V0LngoKSwgcHJlZGljdGVkU2Nyb2xs
VGFyZ2V0LndpZHRoKCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRhLndpZHRoKCksIG1fYWN0aXZl
U25hcEluZGV4WCk7CisgICAgZmxvYXQgdGFyZ2V0T2Zmc2V0WSA9IHRhcmdldE9mZnNldEZvclN0
YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIGNvbnRlbnRTaXplLmhlaWdodCgp
IC0gdmlld3BvcnRTaXplLmhlaWdodCgpLCBpbml0aWFsT2Zmc2V0LnkoKSwgcHJlZGljdGVkU2Ny
b2xsVGFyZ2V0LmhlaWdodCgpLCBwYWdlU2NhbGUsIGluaXRpYWxEZWx0YS5oZWlnaHQoKSwgbV9h
Y3RpdmVTbmFwSW5kZXhZKTsKICAgICBtX21vbWVudHVtQ2FsY3VsYXRvci0+c2V0UmV0YXJnZXRl
ZFNjcm9sbE9mZnNldCh7IHRhcmdldE9mZnNldFgsIHRhcmdldE9mZnNldFkgfSk7CiAgICAgbV9z
dGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICBtX2N1cnJlbnRTdGF0ZSA9IHN0
YXRlOwpAQCAtOTEsMTQgKzkxLDE1IEBAIEZsb2F0UG9pbnQgU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGU6OmN1cnJlbnRBbmltYXRlZFNjcm9sbE9mZnNldChib29sJiBpc0FuaW1hdGlvCiAgICAgcmV0
dXJuIG1fbW9tZW50dW1DYWxjdWxhdG9yLT5zY3JvbGxPZmZzZXRBZnRlckVsYXBzZWRUaW1lKGVs
YXBzZWRUaW1lKTsKIH0KIAotZmxvYXQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRhcmdldE9m
ZnNldEZvclN0YXJ0T2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMs
IGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRS
YW5nZXMsIGZsb2F0IG1heFNjcm9sbE9mZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHBy
ZWRpY3RlZE9mZnNldCwgZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBpbml0aWFsRGVsdGEsIHVuc2ln
bmVkJiBvdXRBY3RpdmVTbmFwSW5kZXgpIGNvbnN0CitmbG9hdCBTY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZTo6dGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZs
b2F0IG1heFNjcm9sbE9mZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHByZWRpY3RlZE9m
ZnNldCwgZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBpbml0aWFsRGVsdGEsIHVuc2lnbmVkJiBvdXRB
Y3RpdmVTbmFwSW5kZXgpIGNvbnN0CiB7CisgICAgY29uc3QgYXV0byYgc25hcE9mZnNldHMgPSBt
X3NuYXBPZmZzZXRzSW5mby5vZmZzZXRzRm9yQXhpcyhheGlzKTsKICAgICBpZiAoc25hcE9mZnNl
dHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG91dEFjdGl2ZVNuYXBJbmRleCA9IGludmFsaWRTbmFw
T2Zmc2V0SW5kZXg7CiAgICAgICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PihzdGFydE9mZnNldCwg
MCwgbWF4U2Nyb2xsT2Zmc2V0KTsKICAgICB9CiAKLSAgICBmbG9hdCB0YXJnZXRPZmZzZXQgPSBj
bG9zZXN0U25hcE9mZnNldChzbmFwT2Zmc2V0cywgc25hcE9mZnNldFJhbmdlcywgTGF5b3V0VW5p
dChwcmVkaWN0ZWRPZmZzZXQgLyBwYWdlU2NhbGUpLCBpbml0aWFsRGVsdGEsIG91dEFjdGl2ZVNu
YXBJbmRleCk7CisgICAgZmxvYXQgdGFyZ2V0T2Zmc2V0ID0gY2xvc2VzdFNuYXBPZmZzZXQobV9z
bmFwT2Zmc2V0c0luZm8sIGF4aXMsIExheW91dFVuaXQocHJlZGljdGVkT2Zmc2V0IC8gcGFnZVNj
YWxlKSwgaW5pdGlhbERlbHRhLCBvdXRBY3RpdmVTbmFwSW5kZXgpOwogICAgIGZsb2F0IG1pbmlt
dW1UYXJnZXRPZmZzZXQgPSBzdGQ6Om1heDxmbG9hdD4oMCwgc25hcE9mZnNldHMuZmlyc3QoKSk7
CiAgICAgZmxvYXQgbWF4aW11bVRhcmdldE9mZnNldCA9IHN0ZDo6bWluPGZsb2F0PihtYXhTY3Jv
bGxPZmZzZXQsIHNuYXBPZmZzZXRzLmxhc3QoKSk7CiAgICAgdGFyZ2V0T2Zmc2V0ID0gY2xhbXBU
bzxmbG9hdD4odGFyZ2V0T2Zmc2V0LCBtaW5pbXVtVGFyZ2V0T2Zmc2V0LCBtYXhpbXVtVGFyZ2V0
T2Zmc2V0KTsKQEAgLTExNSwxMiArMTE2LDEyIEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFNjcm9sbE9mZnNldFJhbmdlPFQ+JiByYW5nZSkKIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjcm9sbFNuYXBBbmltYXRvclN0
YXRlJiBzdGF0ZSkKIHsKICAgICB0cyA8PCAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUiOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHgiLCBzdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJz
bmFwIG9mZnNldHMgeSIsIHN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6
OlZlcnRpY2FsKSk7Ci0gICAgaWYgKCFzdGF0ZS5zbmFwT2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwpLmlzRW1wdHkoKSkKLSAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzbmFwIG9mZnNldHMgcmFuZ2VzIHgiLCBzdGF0ZS5zbmFwT2Zmc2V0UmFuZ2VzRm9yQXhp
cyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKLSAgICBpZiAoIXN0YXRlLnNuYXBPZmZz
ZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpLmlzRW1wdHkoKSkKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNldHMgcmFuZ2VzIHkiLCBzdGF0ZS5zbmFw
T2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNldHMgeCIsIHN0YXRlLnNuYXBPZmZzZXRzSW5mbygpLm9m
ZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkpOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic25hcCBvZmZzZXRzIHkiLCBzdGF0ZS5zbmFwT2Zmc2V0c0luZm8oKS5vZmZzZXRz
Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CisgICAgaWYgKCFzdGF0ZS5zbmFw
T2Zmc2V0c0luZm8oKS5vZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCkuaXNFbXB0eSgpKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyBy
YW5nZXMgeCIsIHN0YXRlLnNuYXBPZmZzZXRzSW5mbygpLm9mZnNldFJhbmdlc0ZvckF4aXMoU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7CisgICAgaWYgKCFzdGF0ZS5zbmFwT2Zmc2V0c0lu
Zm8oKS5vZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpLmlzRW1w
dHkoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNldHMgcmFuZ2VzIHkiLCBz
dGF0ZS5zbmFwT2Zmc2V0c0luZm8oKS5vZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhp
czo6VmVydGljYWwpKTsKIAogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWN0aXZlIHNuYXAgaW5kZXgg
eCIsIHN0YXRlLmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9u
dGFsKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJhY3RpdmUgc25hcCBpbmRleCB5Iiwgc3RhdGUu
YWN0aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAzMjZlMjhlNjBjNDc4YjNh
YWQ3NjlhNmMxNDVkM2U0NGExMDA1OWQyLi41MTkyNWJhZjc3OGVlZWRiZmNmY2NjYTRhNTNlOTll
N2FhMzJmZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAg
LTEzNSwxMCArMTM1LDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
LSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCIKLSNlbmRpZgotCiAjZGVmaW5lIE1J
Tl9JTlRFUlNFQ1RfRk9SX1JFVkVBTCAzMgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNjE2
LDcgKzM2MTIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFJlbmRlckJveCogYm94ID0gZW5jbG9zaW5nRWxlbWVudCgpLT5y
ZW5kZXJCb3goKTsKLSAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKCp0aGlz
LCAqYm94LCBib3gtPnN0eWxlKCksIGJveC0+cGFkZGluZ0JveFJlY3QoKSk7CisgICAgdXBkYXRl
U25hcE9mZnNldHNGb3JFbGVtZW50KCpib3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94
UmVjdCgpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHlJT1MubW0KaW5kZXggNjJhZDk4NTA2OWUyMTIzYWRjMzZiYzc4MWM3NmY1OTc2MWI3
ODQ2My4uZDgxODlmZGM4OTI3NGYwOWM4ZWIyNjRhOGM1ZGE1ZjQ1ODVkNWNkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5t
bQpAQCAtNDEsNyArNDEsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZVRyZWUu
aD4KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0jaW1wb3J0IDxXZWJDb3JlL0F4aXNT
Y3JvbGxTbmFwT2Zmc2V0cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsVHlwZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCmluZGV4IDRj
Mjg4ZTRiYWMxYjVlNDU5ZGVjNzRmYjNlM2I1YzhiNWJkY2Q4ZjcuLjU2NWZkMzY1OWJmYjRjNjZh
NWI4YTI3MTNkMDg1NDI4ZTgzMWJhY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9z
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KQEAgLTQ1LDcgKzQ1LDYg
QEAKICNpbXBvcnQgPHd0Zi9TZXRGb3JTY29wZS5oPgogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKLSNpbXBvcnQgPFdlYkNvcmUvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oPgogI2VuZGlmCiAKQEAgLTEwOSw3ICsx
MDgsNyBAQCAtICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAq
KXNjcm9sbFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaQogCiAgICAgaWYgKCFfc2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLmlz
RW1wdHkoKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleDsKLSAgICAgICAgZmxvYXQgcG90ZW50
aWFsU25hcFBvc2l0aW9uID0gV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSwg
X3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25h
cE9mZnNldFJhbmdlcygpLCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54LCBpbmRleCk7Cisg
ICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IFdlYkNvcmU6OmNsb3Nlc3RTbmFw
T2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc25hcE9m
ZnN0c0luZm8oKSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBob3Jpem9udGFsVGFyZ2V0
LCB2ZWxvY2l0eS54LCBpbmRleCk7CiAgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRl
LT5zY3JvbGxpbmdOb2RlKCkuc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChpbmRl
eCk7CiAgICAgICAgIGlmIChob3Jpem9udGFsVGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdl
dCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLndpZHRoKQogICAgICAgICAgICAgdGFyZ2V0Q29u
dGVudE9mZnNldC0+eCA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKQEAgLTExNyw3ICsxMTYsNyBA
QCAtICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9s
bFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaQogCiAgICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkp
IHsKICAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQ
b3NpdGlvbiA9IFdlYkNvcmU6OmNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZURl
bGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5n
VHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldFJhbmdl
cygpLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgpOworICAgICAgICBmbG9hdCBw
b3RlbnRpYWxTbmFwUG9zaXRpb24gPSBXZWJDb3JlOjpjbG9zZXN0U25hcE9mZnNldChfc2Nyb2xs
aW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNuYXBPZmZzdHNJbmZvKCksIFNj
cm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHZlcnRpY2FsVGFyZ2V0LCB2ZWxvY2l0eS55LCBpbmRl
eCk7CiAgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCku
c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoaW5kZXgpOwogICAgICAgICBpZiAodmVy
dGljYWxUYXJnZXQgPj0gMCAmJiB2ZXJ0aWNhbFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRT
aXplLmhlaWdodCkKICAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBwb3RlbnRp
YWxTbmFwUG9zaXRpb247Cg==
</data>
<flag name="commit-queue"
          id="431897"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414905</attachid>
            <date>2020-11-26 08:03:04 -0800</date>
            <delta_ts>2020-11-26 08:43:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219273-20201126170302.patch</filename>
            <type>text/plain</type>
            <size>90308</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU4OTczNDk1NDJmNTQx
NTk1NGNkN2Q2MDgyNmQxYzg0YWVjYWZlMy4uZTgwYTRiMDRlNmIxZDBiNWFjNjhjYWIwMzA1OTI3
NGQyMzJlMDRhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDIwLTExLTI2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBVc2UgU2Nyb2xs
U25hcE9mZnNldHNJbmZvIGluIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlIGFuZCBhYnN0cmFjdCBh
d2F5IHNvbWUgb2YgdGhlIGludGVybmFscyBvZiBTbmFwT2Zmc2V0c0luZm8gaW4gU2Nyb2xsYWJs
ZUFyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
IG9yZGVyIHRvIHN1cHBvcnQgbWFzb25yeSBsYXlvdXQgZm9yIENTUyBzY3JvbGwgc25hcCwgU2Ny
b2xsIG9mZnNldHMgd2lsbCBzb29uIG5vIGxvbmdlciBiZSBhIHNlcGFyYXRlIHNldCBvZiBvbmUg
ZGltZW5zaW9uYWwKKyAgICAgICAgdmVydGljYWwgYW5kIGhvcml6b250YWwgb2Zmc2V0cywgYnV0
IG9mZnNldCBwb2ludHMgaW4gdHdvIGRpbWVuc2lvbnMuIEFsbW9zdCBhbGwgb2YgdGhlIGV4aXN0
aW5nIHN1cHBvcnQgY29kZSBmb3Igc2Nyb2xsIHNuYXAKKyAgICAgICAgaXMgd3JpdHRlbiB3aXRo
IHRoZSBvbmUgZGltZW5zaW9uYWwgb2Zmc2V0cyBpbiBtaW5kLgorCisgICAgICAgIFRoaXMgcmVm
YWN0b3IgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGFic3RyYWN0aW5nIGF3YXkgdGhlIGRldGFp
bHMgb2Ygc2Nyb2xsIG9mZnNldHMgYnkgdXNpbmcgU2Nyb2xsU25hcE9mZnNldHNJbmZvIGluIG1v
cmUgcGxhY2VzCisgICAgICAgIHdoZXJlIHRoZSBvbmUgZGltZW5zaW9uYWwgc2V0IG9mIG9mZnNl
dHMgd2VyZSB1c2VkIGJlZm9yZS4gVGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZSBoZXJlIGlzIHRv
IHN0YXJ0IHVzaW5nIFNjcm9sbFNuYXBPZmZzZXRzSW5mbworICAgICAgICBpbiBTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZSBhbmQgaW4gU2Nyb2xsYWJsZUFyZWEuCisKKyAgICAgICAgVGhpcyBhbHNv
IGVsaW1pbmF0ZXMgQXhpc1Njcm9sbFNuYXBPZmZzZXRzIHdoaWNoIGhhcyBhbiBpbnRlcmZhY2Ug
dXNpbmcgb25lIGRpbWVuc2lvbmFsIHNjcm9sbCBvZmZzZXRzIGFuZCBtb3ZlcyB0aGUgY29kZQor
ICAgICAgICBpbnRvIFNjcm9sbFNuYXBPZmZzdHNJbmZvIGFuZCBTY3JvbGxhYmxlQXJlYS4gRmlu
YWxseSwgdGhpcyBjaGFuZ2UgYWRkcyBTY3JvbGxTbmFwT2Zmc2V0c0luZm9CdWlsZGVyIHRvIGhl
bHAgY29udmVydCBsYXlvdXQKKyAgICAgICAgcHJvcGVydGllcyBpbnRvIHNjcm9sbCBvZmZzZXRz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhlc2UgY2hhbmdlcyBzaG91bGQgbm90IG1vZGlm
eSBiZWhhdmlvci4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6IFJlbW92ZSBBeGlzU2Nyb2xs
U25hcE9mZnNldHMuaC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDogUmVtb3ZlIEF4aXNTY3JvbGxT
bmFwT2Zmc2V0cy5jcHAgYW5kIGFkZCBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVT
bmFwT2Zmc2V0cyk6IENoYW5nZXMgdG8gcmVmbGVjdCBuZXcgbWV0aG9kIG5hbWUuCisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKTog
TW92ZWQgZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuCisgICAgICAgIChXZWJDb3JlOjppbmRp
Y2VzT2ZOZWFyZXN0U25hcE9mZnNldHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNsb3Nl
c3RTbmFwT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXhpc1Byb3hp
bWl0eVNuYXBPZmZzZXRSYW5nZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNu
YXBPZmZzZXRzSW5mb0J1aWxkZXI6OlNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIpOiBBZGRl
ZCB0aGlzIGZhY3RvcnkgY2xhc3MsIHdoaWNoIGFic3RyYWN0cyBhd2F5IGNvbnN0cnVjdGlvbiBv
ZiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwT2Zm
c2V0c0luZm9CdWlsZGVyOjphZGRWZXJ0aWNhbE9mZnNldCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6YWRkSG9yaXpvbnRhbE9mZnNldCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6
YnVpbGQpOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0
c0luZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6aXNFbXB0
eSBjb25zdCk6IEFkZGVkIGhlbHBlciBmb3IgZGV0ZWN0aW5nIGVtcHR5IHNldHMgb2Ygb2Zmc2V0
cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6b2Zmc2V0c0ZvckF4
aXMgY29uc3QpOiBBZGRlZCBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwT2Zm
c2V0c0luZm86Om9mZnNldFJhbmdlc0ZvckF4aXMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oOiBSZW1vdmVkIHVubmVjZXNzYXJ5
IGhlYWRlciBpbmNsdWRlLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01vbWVu
dHVtQ2FsY3VsYXRvci5oOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6c25hcE9mZnNldHNJbmZvIGNvbnN0KTogQWRkZWQuCisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaDogUmVtb3ZlZCBhY2Nl
c3MgdG8gaG9yaXpvbnRhbAorICAgICAgICBhbmQgdmVydGljYWwgb2Zmc2V0cy4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yy5oOiBSZW1vdmVkIG1ldGhvZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnZlcnRUb0xheW91dFVuaXRzKTogQWRkZWQgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGZvciBTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjOjp1cGRhdGVGcm9tU3RhdGVOb2RlKTogQWx3YXlzIHRoZSBlbnRp
cmUgU2Nyb2xsU25hcE9mZnNldHNJbmZvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6dXBkYXRlU2Nyb2xsU25hcFBvaW50cyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSk6IFVwZGF0ZSB0byBy
ZWZsZWN0IG5ldyBhcmd1bWVudHMgdG8gU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25h
cFBvaW50cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlU2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0KTogTW92ZWQgaGVyZSBm
cm9tIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTY3Jv
bGxTbmFwQWxpZ25PZmZzZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjbGVhclNuYXBPZmZz
ZXRzKTogU2Nyb2xsYWJsZUFyZWEgaGFzIGEgU2Nyb2xsU25hcE9mZnNldHNJbmZvIGluc3RlYWQg
b2Ygc2VwYXJhdGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgb2Zmc2V0cy4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGFibGVBcmVhOjpuZWFyZXN0QWN0aXZlU25hcFBvaW50KTogVXBkYXRlIHRv
IHJlZmxlY3QgdGhpcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxT
bmFwT2Zmc2V0SW5mbyBjb25zdCk6IEFkZGVkIGdldHRlci4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjp1cGRhdGVTbmFwT2Zmc2V0c0ZvckVsZW1lbnQpOiBBZGRlZCB0aGlzIG1l
dGhvZCB3aGljaCBtYWlubHkgY29tZXMgZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMgYW5kIHVz
ZXMgdGhlIG5ldyBTY3JvbGxTbmFwT2Zmc2V0c0luZm9CdWlsZGVyLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTbmFwT2Zmc2V0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTbmFwT2Zmc2V0cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRh
bFNuYXBPZmZzZXRSYW5nZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWE6OnNldFZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y2xlYXJIb3Jpem9udGFsU25hcE9mZnNldHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNsZWFyVmVydGljYWxTbmFw
T2Zmc2V0cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDog
VXBkYXRlIHRvIHJlZmxlY3QgbmV3IGFuZCByZW1vdmVkIG1ldGhvZHMuCisgICAgICAgICogcGxh
dGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oOiBNb2RpZnkgYXJndW1lbnRzIHBhc3NlZCB0
byBtZXRob2RzLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW06
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZv
clNjcm9sbFNuYXApOiBVc2UgbmV3IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6aXNFbXB0eSBoZWxw
ZXIuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFw
UG9pbnRzKTogTm93IHNldCB0aGUgZW50aXJlIFNjcm9sbFNuYXBPZmZzZXRzSW5mbyBhdCBvbmNl
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c2V0TmVhcmVzdFNjcm9sbFNu
YXBJbmRleEZvckF4aXNBbmRPZmZzZXQpOiBBY2Nlc3MgdGhlIFNjcm9sbFNuYXBPZmZzZXRzSW5m
byBub3cgaW5zdGVhZCBvZiB0aGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgb2Zmc2V0cy4KKyAg
ICAgICAgKFdlYkNvcmU6Om90aGVyU2Nyb2xsRXZlbnRBeGlzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaDog
U3RvcmUgU25hcE9mZnNldHNJbmZvIGluc3RlYWQgb2YgdmVydGljYWwgYW5kIGhvcml6b250YWwg
b2Zmc2V0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpzbmFw
T2Zmc2V0c0luZm8gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBB
bmltYXRvclN0YXRlOjpzZXRTbmFwT2Zmc2V0SW5mbyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnNuYXBPZmZzZXRzRm9yQXhpcyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6c25hcE9m
ZnNldFJhbmdlc0ZvckF4aXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsU25hcEFuaW1hdG9yU3RhdGU6OnNldFNuYXBPZmZzZXRzQW5kUG9zaXRpb25SYW5nZXNGb3JB
eGlzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpz
ZXR1cEFuaW1hdGlvbkZvclN0YXRlKTogTW9kaWZpZWQgdG8gcGFzcyBTY3JvbGxTbmFwT2Zmc2V0
c0luZm8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6dGFyZ2V0
T2Zmc2V0Rm9yU3RhcnRPZmZzZXQgY29uc3QpOiBBY2NlcHRzIFNjcm9sbFNuYXBPZmZzdHNJbmZv
LgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IFVzZSBTY3JvbGxTbmFwT2Zmc3RzSW5m
byBmcm9tIHN0YXRlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMpOiBVcGRhdGUgdG8g
cmVmbGVjdCBuZXcgbWV0aG9kLgorCiAyMDIwLTExLTE2ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8
c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxleF0gSW1hZ2VzIGFzIGZsZXgg
aXRlbXMgc2hvdWxkIHVzZSB0aGUgb3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQgd2hlbiBkZWZpbmVk
IHRvIGNvbXB1dGUgdGhlIGxvZ2ljYWwgd2lkdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggN2ExMDliOGZmMWUwMTFm
N2I5ODFlM2IxNDE4MzZkZGJiNDIxNTQ5ZS4uMGE4Y2VhNjUwODZkOGMzNjcyNTdkYWYwNjFkYjQw
YzM0MmYzNDNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0xMS0yNiAgTWFydGlu
IFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgbWFp
bmZyYW1lIHRlc3RzIHRpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nL3Njcm9sbC1zbmFwCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3NTcKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzcxMzIyMTU0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbTogUmVtb3ZlIHVudXNlZCBpbmNsdWRlLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJT1MubW06IERpdHRvLgorCiAyMDIwLTExLTE5ICBXZW5zb24gSHNp
ZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTkx
NTEpOiBUaGUgIkNvbnZlcnQgVGV4dCB0byBUcmFkaXRpb25hbCBDaGluZXNlIiBzZXJ2aWNlcyBt
ZW51IGFjdGlvbiBpcyBicm9rZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDAyM2UxNTNkYTNjNjdk
ZTE3YTI1MmJlZjFjYWIyNjg3ZDQzOTMwNmQuLjRlYWI5YWIzMTgzMDNhODJiY2ZiMjQyNzNjZWY5
MWI2YTVhNDc0MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtOTM2LDcgKzkzNiw2IEBAIHNldChX
ZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuaAogCiAgICAgcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5oCi0gICAgcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmgKICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaAogICAg
IHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmgKICAgICBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb29yZGluYXRvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGFmY2Y0NWFhY2I0NzQ3
NDM2NDEzZjhhZTU5OWYzZGFlNGJlZGNkY2YuLjlmMzk4NzJmNGQxOTY4NjJlZmU3MWMwOTI4OTY4
OTYwODczYzhkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNzQzLDcgKzE3NDMsNyBAQCBwYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0LmNwcAogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdERpcmVjdGl2ZS5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwCi1wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwCitwYWdl
L3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJh
aW50cy5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhi
MjUxNGZkMmIyYjY1MzQwMjJiYjRkYWIyZDA2OGEwYmQwNTIwZmYuLjA4MmVjZmEzYjk2MjJkYTgx
YmZmZGY4OGJjM2U4YTg5MDU3NzU2YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyMjQsNyArNTIyNCw2IEBACiAJCUY0NEE1
RjU5MUZFRDM4RjIwMDdGNTk0NCAvKiBMZWdhY3lOU1Bhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0QTVGNTcxRkVEMzgzMDAw
N0Y1OTQ0IC8qIExlZ2FjeU5TUGFzdGVib2FyZFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ0RUJCRDkxREI1RDIxNDAwMjc3MzM0IC8q
IFN0YXRpY1JhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNDRFQkJEODFEQjVEMjE0MDAyNzczMzQgLyogU3RhdGljUmFuZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDU3NzVDRTI0MTQzN0Q1
MDAyREYxQTAgLyogSW5saW5lUGF0aERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0NTc3NUNEMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRo
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NUMyMzFDMTk5NUI3
M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDY3MjkyODFFMERFNjg1MDBBQ0MzRDgg
LyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9m
ZnNldHNJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRjQ2QzQ0N0UyMzQ2NTQ1NDAwMzlBNzlEIC8qIENsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0NkM0NDdDMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291
cmNlLmggKi87IH07CiAJCUY0Nzg3NTU0MTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzNzUs
NiArOTM3NCw3IEBACiAJCTVCMzA2OTVBMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZm
ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdMRHJhd0J1
ZmZlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjMwNjk1QjE4QjNEMzQ1
MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVCMzA2OTVDMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJzLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUI3QUI5RjYyNTY3REI3RTAwNjU5MkQwIC8qIFNjcm9sbFNuYXBPZmZzZXRz
SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxTbmFw
T2Zmc2V0c0luZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzAwMTUyMTI1
MDAxMTAwMDA5NEFBOTMgLyogVGV4dENvZGVjU2luZ2xlQnl0ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q29kZWNTaW5nbGVCeXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMwMDE1MjMyNTAwMTEwMTAwOTRBQTkzIC8qIFRleHRDb2Rl
Y1NpbmdsZUJ5dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvZGVj
U2luZ2xlQnl0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzM5MzA1RDFBQTBG
NkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gREZBQnl0ZWNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NDY4
LDggKzE2NDY4LDYgQEAKIAkJRjQ0RUJCRDgxREI1RDIxNDAwMjc3MzM0IC8qIFN0YXRpY1Jhbmdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY1JhbmdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NEVCQkRBMURCNUREOUQwMDI3NzMzNCAvKiBTdGF0
aWNSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0aWNS
YW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NTc3NUNEMjQxNDM3RDUw
MDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVQYXRoRGF0
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNDVDMjMxQjE5OTVCNzNCMDBBNkUy
RTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9m
ZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NjI4QTlFMjM0RDNCQkYw
MEJDODg0QyAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtUGFzdGVib2FyZENvY29hLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDYyRTc5RjI0MkFEQTNDMDAyMDREREQgLyogRHJhZ0Rh
dGFDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdE
YXRhQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NjJFN0EwMjQyQURB
M0QwMDIwNERERCAvKiBEcmFnSW1hZ2VDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERyYWdJbWFnZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTg0MjIsOCArMTg0MjAsNiBAQAogCQkJCTFBRjYyRUUyMTREQTIyQTcwMDQxNTU2
QyAvKiBtYWMgKi8sCiAJCQkJMEZGRDRENUUxODY1MUZBMzAwNTEyRjZFIC8qIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwICovLAogCQkJCTBGRkQ0RDVGMTg2NTFGQTMwMDUxMkY2RSAvKiBB
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggKi8sCi0JCQkJRjQ1QzIzMUIxOTk1QjczQjAwQTZF
MkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAgKi8sCi0JCQkJRjQ1QzIzMUMxOTk1Qjcz
QjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oICovLAogCQkJCTBGNjA1QUVBMTVG
OTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJMEY2MDVB
RUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8sCiAJCQkJMUFG
NjJFRTQxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKQEAg
LTE4NDczLDYgKzE4NDY5LDcgQEAKIAkJCQlBNkQ1QTk5QjE2MjlENzAwMDAyOTczMzAgLyogU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oICovLAogCQkJCTBGOTUxMEYyMjRGNDc2
OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwICovLAogCQkJCTBGOTUx
MEYwMjRGNDc2OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCAqLywKKwkJ
CQk1QjdBQjlGNjI1NjdEQjdFMDA2NTkyRDAgLyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCAq
LywKIAkJCQlGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9mZnNldHNJbmZv
LmggKi8sCiAJCQkJMEY2MzgzREIxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5n
VHJlZS5jcHAgKi8sCiAJCQkJMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Ny
b2xsaW5nVHJlZS5oICovLApAQCAtMzEwODQsNyArMzEwODEsNiBAQAogCQkJCTA3MDM2M0U2MTgx
QTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjlBRTIxMzUyMUFCQTQ4QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI5QUUyMTJEMjFBQjlFRUIwMDg2OTI4MyAvKiBBWElzb2xhdGVkVHJlZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJRjQ1QzIzMUUxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3Jv
bGxTbmFwT2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyMzgwRkJCOUMxRDAwNTEw
MjkzIC8qIEFYT2JqZWN0Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkxQzlGMkY5MUFFM0JF
QjAwMDk1QjYxQyAvKiBBWFRleHRTdGF0ZUNoYW5nZUludGVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3N0U3NzcwQkY0MTM0QTAwMTUyODcyIC8qIEJhY2tGb3J3YXJkQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGQ2N2I0NDAwMGE0ZTljYzky
MWNmZGQ5MGU5MDY0NTZiMzgzMmIxNWEuLmZjZDMwYWIwNzI2OGQzMGEwODg3MjQxMGI5OWU3N2Yz
N2JmMGY4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTExNywxMCArMTE3LDYg
QEAKICNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQotI2luY2x1ZGUgIkF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIgotI2Vu
ZGlmCi0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCiAjaW5jbHVkZSAiTGVnYWN5VGlsZUNhY2hlLmgiCkBAIC05NDksNyArOTQ1LDcgQEAgdm9p
ZCBGcmFtZVZpZXc6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKICAgICBMYXlvdXRSZWN0IHZpZXdwb3J0
ID0gTGF5b3V0UmVjdChJbnRQb2ludCgpLCBiYXNlTGF5b3V0Vmlld3BvcnRTaXplKCkpOwogICAg
IHZpZXdwb3J0Lm1vdmUoLXJvb3RSZW5kZXJlci0+bWFyZ2luTGVmdCgpLCAtcm9vdFJlbmRlcmVy
LT5tYXJnaW5Ub3AoKSk7CiAKLSAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVh
KCp0aGlzLCAqcm9vdFJlbmRlcmVyLCAqc3R5bGVUb1VzZSwgdmlld3BvcnQpOworICAgIHVwZGF0
ZVNuYXBPZmZzZXRzRm9yRWxlbWVudCgqcm9vdFJlbmRlcmVyLCAqc3R5bGVUb1VzZSwgdmlld3Bv
cnQpOwogfQogCiBib29sIEZyYW1lVmlldzo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25h
cE9mZnNldHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNu
YXBPZmZzZXRzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMzk4OThiOTgx
MzBiZDEzMmRjZWNlZGQ4ZmRjN2I4ZTRjY2QxMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Ny
b2xsU25hcE9mZnNldHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25h
cE9mZnNldHMuaCIKLQotI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJMZW5ndGguaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2lu
Y2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCi0jaW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFwUG9pbnRz
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLSNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0g
Y2xhc3MgSW5zZXRPck91dHNldCB7Ci0gICAgSW5zZXQsCi0gICAgT3V0c2V0Ci19OwotCi1zdGF0
aWMgTGF5b3V0UmVjdCBjb21wdXRlU2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0KGNvbnN0IExheW91
dFJlY3QmIHJlY3QsIGNvbnN0IExlbmd0aEJveCYgaW5zZXRPck91dHNldEJveCwgSW5zZXRPck91
dHNldCBpbnNldE9yT3V0c2V0KQotewotICAgIExheW91dEJveEV4dGVudCBleHRlbnRzKHZhbHVl
Rm9yTGVuZ3RoKGluc2V0T3JPdXRzZXRCb3gudG9wKCksIHJlY3QuaGVpZ2h0KCkpLCB2YWx1ZUZv
ckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LnJpZ2h0KCksIHJlY3Qud2lkdGgoKSksIHZhbHVlRm9y
TGVuZ3RoKGluc2V0T3JPdXRzZXRCb3guYm90dG9tKCksIHJlY3QuaGVpZ2h0KCkpLCB2YWx1ZUZv
ckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LmxlZnQoKSwgcmVjdC53aWR0aCgpKSk7Ci0gICAgYXV0
byBzbmFwUG9ydE9yQXJlYShyZWN0KTsKLSAgICBpZiAoaW5zZXRPck91dHNldCA9PSBJbnNldE9y
T3V0c2V0OjpJbnNldCkKLSAgICAgICAgc25hcFBvcnRPckFyZWEuY29udHJhY3QoZXh0ZW50cyk7
Ci0gICAgZWxzZQotICAgICAgICBzbmFwUG9ydE9yQXJlYS5leHBhbmQoZXh0ZW50cyk7Ci0gICAg
cmV0dXJuIHNuYXBQb3J0T3JBcmVhOwotfQotCi1zdGF0aWMgTGF5b3V0VW5pdCBjb21wdXRlU2Ny
b2xsU25hcEFsaWduT2Zmc2V0KExheW91dFVuaXQgbWluTG9jYXRpb24sIExheW91dFVuaXQgbWF4
TG9jYXRpb24sIFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlIGFsaWdubWVudCwgYm9vbCBheGlzSXNG
bGlwcGVkKQotewotICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7Ci0gICAgY2FzZSBTY3JvbGxTbmFw
QXhpc0FsaWduVHlwZTo6U3RhcnQ6Ci0gICAgICAgIHJldHVybiBheGlzSXNGbGlwcGVkID8gbWF4
TG9jYXRpb24gOiBtaW5Mb2NhdGlvbjsKLSAgICBjYXNlIFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBl
OjpDZW50ZXI6Ci0gICAgICAgIHJldHVybiAobWluTG9jYXRpb24gKyBtYXhMb2NhdGlvbikgLyAy
OwotICAgIGNhc2UgU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6OkVuZDoKLSAgICAgICAgcmV0dXJu
IGF4aXNJc0ZsaXBwZWQgPyBtaW5Mb2NhdGlvbiA6IG1heExvY2F0aW9uOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBTY3JvbGxPZmZzZXRSYW5nZTxUPiYgcmFuZ2UpCi17Ci0gICAgdHMg
PDwgInN0YXJ0OiAiIDw8IHJhbmdlLnN0YXJ0IDw8ICIgZW5kOiAiIDw8IHJhbmdlLmVuZDsKLSAg
ICByZXR1cm4gdHM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgotc3RhdGlj
IHZvaWQgaW5kaWNlc09mTmVhcmVzdFNuYXBPZmZzZXRSYW5nZXMoTGF5b3V0VHlwZSBvZmZzZXQs
IGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRUeXBlPj4mIHNuYXBPZmZzZXRS
YW5nZXMsIHVuc2lnbmVkJiBsb3dlckluZGV4LCB1bnNpZ25lZCYgdXBwZXJJbmRleCkKLXsKLSAg
ICBpZiAoc25hcE9mZnNldFJhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbG93ZXJJbmRleCA9
IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7Ci0gICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlkU25h
cE9mZnNldEluZGV4OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGxvd2VySW5k
ZXhBc0ludCA9IC0xOwotICAgIGludCB1cHBlckluZGV4QXNJbnQgPSBzbmFwT2Zmc2V0UmFuZ2Vz
LnNpemUoKTsKLSAgICBkbyB7Ci0gICAgICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4
QXNJbnQgKyB1cHBlckluZGV4QXNJbnQpIC8gMjsKLSAgICAgICAgYXV0byYgcmFuZ2UgPSBzbmFw
T2Zmc2V0UmFuZ2VzW21pZGRsZUluZGV4XTsKLSAgICAgICAgaWYgKHJhbmdlLnN0YXJ0IDwgb2Zm
c2V0ICYmIG9mZnNldCA8IHJhbmdlLmVuZCkgewotICAgICAgICAgICAgbG93ZXJJbmRleEFzSW50
ID0gbWlkZGxlSW5kZXg7Ci0gICAgICAgICAgICB1cHBlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRl
eDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9mZnNldCA+
IHJhbmdlLmVuZCkKLSAgICAgICAgICAgIGxvd2VySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4Owot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cHBlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRleDsK
LSAgICB9IHdoaWxlIChsb3dlckluZGV4QXNJbnQgPCB1cHBlckluZGV4QXNJbnQgLSAxKTsKLQot
ICAgIGlmIChvZmZzZXQgPD0gc25hcE9mZnNldFJhbmdlcy5maXJzdCgpLnN0YXJ0KQotICAgICAg
ICBsb3dlckluZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKLSAgICBlbHNlCi0gICAgICAg
IGxvd2VySW5kZXggPSBsb3dlckluZGV4QXNJbnQ7Ci0KLSAgICBpZiAob2Zmc2V0ID49IHNuYXBP
ZmZzZXRSYW5nZXMubGFzdCgpLmVuZCkKLSAgICAgICAgdXBwZXJJbmRleCA9IGludmFsaWRTbmFw
T2Zmc2V0SW5kZXg7Ci0gICAgZWxzZQotICAgICAgICB1cHBlckluZGV4ID0gdXBwZXJJbmRleEFz
SW50OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KLXN0YXRpYyB2b2lkIGlu
ZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0cyhMYXlvdXRUeXBlIG9mZnNldCwgY29uc3QgVmVjdG9y
PExheW91dFR5cGU+JiBzbmFwT2Zmc2V0cywgdW5zaWduZWQmIGxvd2VySW5kZXgsIHVuc2lnbmVk
JiB1cHBlckluZGV4KQotewotICAgIGxvd2VySW5kZXggPSAwOwotICAgIHVwcGVySW5kZXggPSBz
bmFwT2Zmc2V0cy5zaXplKCkgLSAxOwotICAgIHdoaWxlIChsb3dlckluZGV4IDwgdXBwZXJJbmRl
eCAtIDEpIHsKLSAgICAgICAgaW50IG1pZGRsZUluZGV4ID0gKGxvd2VySW5kZXggKyB1cHBlcklu
ZGV4KSAvIDI7Ci0gICAgICAgIGF1dG8gbWlkZGxlT2Zmc2V0ID0gc25hcE9mZnNldHNbbWlkZGxl
SW5kZXhdOwotICAgICAgICBpZiAob2Zmc2V0ID09IG1pZGRsZU9mZnNldCkgewotICAgICAgICAg
ICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4OwotICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1p
ZGRsZUluZGV4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
b2Zmc2V0ID4gbWlkZGxlT2Zmc2V0KQotICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRsZUlu
ZGV4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5kZXg7
Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb21wdXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRS
YW5nZXMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgVmVjdG9yPFNjcm9s
bE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgb2Zmc2V0UmFuZ2VzLCBMYXlvdXRVbml0IHNjcm9s
bFBvcnRBeGlzTGVuZ3RoKQotewotICAgIC8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IGNob2ljZSBm
b3Igd2hhdCBpdCBtZWFucyB0byBiZSAiaW4gcHJveGltaXR5IiBvZiBhIHNuYXAgb2Zmc2V0LiBX
ZSBzaG91bGQgcGxheSBhcm91bmQgd2l0aAotICAgIC8vIHRoaXMgYW5kIHNlZSB3aGF0IGZlZWxz
IGJlc3QuCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHJhdGlvT2ZTY3JvbGxQb3J0QXhpc0xlbmd0
aFRvQmVDb25zaWRlcmVkRm9yUHJveGltaXR5ID0gMC4zOwotICAgIGlmIChzbmFwT2Zmc2V0cy5z
aXplKCkgPCAyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgZXh0cmEgcnVsZSBhY2Nv
dW50aW5nIGZvciBzY3JvbGwgb2Zmc2V0IHJhbmdlcyBpbiBiZXR3ZWVuIHRoZSBzY3JvbGwgZGVz
dGluYXRpb24gYW5kIGEgcG90ZW50aWFsIHNuYXAgb2Zmc2V0Ci0gICAgLy8gaGFuZGxlcyB0aGUg
Y29ybmVyIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc2Nyb2xscyB3aXRoIG1vbWVudHVtIHZlcnkgbGln
aHRseSBhd2F5IGZyb20gYSBzbmFwIG9mZnNldCwgc3VjaCB0aGF0IHRoZQotICAgIC8vIHByZWRp
Y3RlZCBzY3JvbGwgZGVzdGluYXRpb24gaXMgc3RpbGwgd2l0aGluIHByb3hpbWl0eSBvZiB0aGUg
c25hcCBvZmZzZXQuIEluIHRoaXMgY2FzZSwgdGhlIHJlZ3VsYXIgKG1hbmRhdG9yeQotICAgIC8v
IHNjcm9sbCBzbmFwcGluZykgYmVoYXZpb3Igd291bGQgYmUgdG8gc25hcCB0byB0aGUgbmV4dCBv
ZmZzZXQgaW4gdGhlIGRpcmVjdGlvbiBvZiBtb21lbnR1bSBzY3JvbGxpbmcsIGJ1dAotICAgIC8v
IGluc3RlYWQsIGl0IGlzIG1vcmUgaW50dWl0aXZlIHRvIGVpdGhlciByZXR1cm4gdG8gdGhlIG9y
aWdpbmFsIHNuYXAgcG9zaXRpb24gKHdoaWNoIHdlIGFyYml0cmFyaWx5IGNob29zZSBoZXJlKQot
ICAgIC8vIG9yIHNjcm9sbCBqdXN0IG91dHNpZGUgb2YgdGhlIHNuYXAgb2Zmc2V0IHJhbmdlLiBU
aGlzIGlzIGFub3RoZXIgbWlub3IgYmVoYXZpb3IgdHdlYWsgdGhhdCB3ZSBzaG91bGQgcGxheSBh
cm91bmQKLSAgICAvLyB3aXRoIHRvIHNlZSB3aGF0IGZlZWxzIGJlc3QuCi0gICAgTGF5b3V0VW5p
dCBwcm94aW1pdHlEaXN0YW5jZSB7IHJhdGlvT2ZTY3JvbGxQb3J0QXhpc0xlbmd0aFRvQmVDb25z
aWRlcmVkRm9yUHJveGltaXR5ICogc2Nyb2xsUG9ydEF4aXNMZW5ndGggfTsKLSAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDE7IGluZGV4IDwgc25hcE9mZnNldHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0g
ICAgICAgIGF1dG8gc3RhcnRPZmZzZXQgPSBzbmFwT2Zmc2V0c1tpbmRleCAtIDFdICsgcHJveGlt
aXR5RGlzdGFuY2U7Ci0gICAgICAgIGF1dG8gZW5kT2Zmc2V0ID0gc25hcE9mZnNldHNbaW5kZXhd
IC0gcHJveGltaXR5RGlzdGFuY2U7Ci0gICAgICAgIGlmIChzdGFydE9mZnNldCA8IGVuZE9mZnNl
dCkKLSAgICAgICAgICAgIG9mZnNldFJhbmdlcy5hcHBlbmQoeyBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0IH0pOwotICAgIH0KLX0KLQotdm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVB
cmVhKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgY29uc3QgUmVuZGVyQm94JiBzY3Jv
bGxpbmdFbGVtZW50Qm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxl
LCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdEluQm9yZGVyQm94Q29vcmRpbmF0ZXMpCi17Ci0gICAg
YXV0byBzY3JvbGxTbmFwVHlwZSA9IHNjcm9sbGluZ0VsZW1lbnRTdHlsZS5zY3JvbGxTbmFwVHlw
ZSgpOwotICAgIGNvbnN0IGF1dG8mIGJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMgPSBzY3Jv
bGxpbmdFbGVtZW50Qm94LnZpZXcoKS5ib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zKCk7Ci0g
ICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0cmljdG5lc3MgPT0gU2Nyb2xsU25hcFN0cmljdG5lc3M6
Ok5vbmUgfHwgYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEuY2xlYXJTbmFwT2Zmc2V0cygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgVmVjdG9yPExheW91dFVuaXQ+IHZlcnRpY2FsU25hcE9mZnNldHM7Ci0gICAg
VmVjdG9yPExheW91dFVuaXQ+IGhvcml6b250YWxTbmFwT2Zmc2V0czsKLSAgICBWZWN0b3I8U2Ny
b2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+IHZlcnRpY2FsU25hcE9mZnNldFJhbmdlczsKLSAg
ICBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+IGhvcml6b250YWxTbmFwT2Zm
c2V0UmFuZ2VzOwotICAgIEhhc2hTZXQ8ZmxvYXQ+IHNlZW5WZXJ0aWNhbFNuYXBPZmZzZXRzOwot
ICAgIEhhc2hTZXQ8ZmxvYXQ+IHNlZW5Ib3Jpem9udGFsU25hcE9mZnNldHM7Ci0gICAgYm9vbCBo
YXNIb3Jpem9udGFsU25hcE9mZnNldHMgPSBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNu
YXBBeGlzOjpCb3RoIHx8IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OlhB
eGlzIHx8IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OklubGluZTsKLSAg
ICBib29sIGhhc1ZlcnRpY2FsU25hcE9mZnNldHMgPSBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNj
cm9sbFNuYXBBeGlzOjpCb3RoIHx8IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4
aXM6OllBeGlzIHx8IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OkJsb2Nr
OwotCi0gICAgYXV0byBtYXhTY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Ny
b2xsT2Zmc2V0KCk7Ci0gICAgYXV0byBzY3JvbGxQb3NpdGlvbiA9IExheW91dFBvaW50IHsgc2Ny
b2xsYWJsZUFyZWEuc2Nyb2xsUG9zaXRpb24oKSB9OwotICAgIGJvb2wgc2Nyb2xsZXJJc1JUTCA9
ICFzY3JvbGxpbmdFbGVtZW50Qm94LnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwot
Ci0gICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lcidzIHNuYXAgcG9y
dCwgd2hlcmUgdGhlIHRvcCBsZWZ0IG9mIHRoZSBzY3JvbGxpbmcgY29udGFpbmVyJ3MgYm9yZGVy
IGJveCBpcyB0aGUgb3JpZ2luLgotICAgIGF1dG8gc2Nyb2xsU25hcFBvcnQgPSBjb21wdXRlU2Ny
b2xsU25hcFBvcnRPckFyZWFSZWN0KHZpZXdwb3J0UmVjdEluQm9yZGVyQm94Q29vcmRpbmF0ZXMs
IHNjcm9sbGluZ0VsZW1lbnRTdHlsZS5zY3JvbGxQYWRkaW5nKCksIEluc2V0T3JPdXRzZXQ6Oklu
c2V0KTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJDb21wdXRp
bmcgc2Nyb2xsIHNuYXAgb2Zmc2V0cyBmb3IgIiA8PCBzY3JvbGxhYmxlQXJlYSA8PCAiIGluIHNu
YXAgcG9ydCAiIDw8IHNjcm9sbFNuYXBQb3J0KTsKLSAgICBmb3IgKGF1dG8qIGNoaWxkIDogYm94
ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucykgewotICAgICAgICBpZiAoY2hpbGQtPmVuY2xvc2lu
Z1Njcm9sbGFibGVDb250YWluZXJGb3JTbmFwcGluZygpICE9ICZzY3JvbGxpbmdFbGVtZW50Qm94
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUg
Y2hpbGQgZWxlbWVudCdzIHNuYXAgYXJlYSwgd2hlcmUgdGhlIHRvcCBsZWZ0IG9mIHRoZSBzY3Jv
bGxpbmcgY29udGFpbmVyJ3MgYm9yZGVyIGJveCBpcyB0aGUgb3JpZ2luLgotICAgICAgICAvLyBU
aGUgc25hcCBhcmVhIGlzIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIGNoaWxkIGVsZW1lbnQncyBi
b3JkZXIgYm94LCBhZnRlciBhcHBseWluZyB0cmFuc2Zvcm1hdGlvbnMuCi0gICAgICAgIC8vIEZJ
WE1FOiBGb3Igbm93LCBqdXN0IGNvbnNpZGVyIHdoZXRoZXIgdGhlIHNjcm9sbGVyIGlzIFJUTC4g
VGhlIGJlaGF2aW9yIG9mIExUUiBib3hlcyBpbnNpZGUgYSBSVEwgc2Nyb2xsZXIgaXMgcG9vcmx5
IGRlZmluZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy81MzYx
LgotICAgICAgICBhdXRvIHNjcm9sbFNuYXBBcmVhID0gTGF5b3V0UmVjdChjaGlsZC0+bG9jYWxU
b0NvbnRhaW5lclF1YWQoRmxvYXRRdWFkKGNoaWxkLT5ib3JkZXJCb3VuZGluZ0JveCgpKSwgJnNj
cm9sbGluZ0VsZW1lbnRCb3gpLmJvdW5kaW5nQm94KCkpOwotCi0gICAgICAgIC8vIGxvY2FsVG9D
b250YWluZXJRdWFkIHdpbGwgdHJhbnNmb3JtIHRoZSBzY3JvbGwgc25hcCBhcmVhIGJ5IHRoZSBz
Y3JvbGwgcG9zaXRpb24sIGV4Y2VwdCBpbiB0aGUgY2FzZSB0aGF0IHRoaXMgcG9zaXRpb24gaXMK
LSAgICAgICAgLy8gY29taW5nIGZyb20gYSBTY3JvbGxWaWV3LiBXZSB3YW50IHRoZSB0cmFuc2Zv
cm1lZCBhcmVhLCBidXQgd2l0aG91dCBzY3JvbGwgcG9zaXRpb24gdGFrZW4gaW50byBhY2NvdW50
LgotICAgICAgICBpZiAoIXNjcm9sbGFibGVBcmVhLmlzU2Nyb2xsVmlldygpKQotICAgICAgICAg
ICAgc2Nyb2xsU25hcEFyZWEubW92ZUJ5KHNjcm9sbFBvc2l0aW9uKTsKLQotICAgICAgICBzY3Jv
bGxTbmFwQXJlYSA9IGNvbXB1dGVTY3JvbGxTbmFwUG9ydE9yQXJlYVJlY3Qoc2Nyb2xsU25hcEFy
ZWEsIGNoaWxkLT5zdHlsZSgpLnNjcm9sbE1hcmdpbigpLCBJbnNldE9yT3V0c2V0OjpPdXRzZXQp
OwotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgICAgQ29u
c2lkZXJpbmcgc2Nyb2xsIHNuYXAgdGFyZ2V0IGFyZWEgIiA8PCBzY3JvbGxTbmFwQXJlYSk7Ci0g
ICAgICAgIGF1dG8gYWxpZ25tZW50ID0gY2hpbGQtPnN0eWxlKCkuc2Nyb2xsU25hcEFsaWduKCk7
Ci0gICAgICAgIGlmIChoYXNIb3Jpem9udGFsU25hcE9mZnNldHMgJiYgYWxpZ25tZW50LnggIT0g
U2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6Ok5vbmUpIHsKLSAgICAgICAgICAgIGF1dG8gYWJzb2x1
dGVTY3JvbGxYUG9zaXRpb24gPSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNu
YXBBcmVhLngoKSwgc2Nyb2xsU25hcEFyZWEubWF4WCgpLCBhbGlnbm1lbnQueCwgc2Nyb2xsZXJJ
c1JUTCkgLSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNuYXBQb3J0LngoKSwg
c2Nyb2xsU25hcFBvcnQubWF4WCgpLCBhbGlnbm1lbnQueCwgc2Nyb2xsZXJJc1JUTCk7Ci0gICAg
ICAgICAgICBhdXRvIGFic29sdXRlU2Nyb2xsT2Zmc2V0ID0gY2xhbXBUbzxpbnQ+KHNjcm9sbGFi
bGVBcmVhLnNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbih7IHJvdW5kVG9JbnQoYWJzb2x1dGVTY3Jv
bGxYUG9zaXRpb24pLCAwIH0pLngoKSwgMCwgbWF4U2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgICAg
ICAgICBpZiAoIXNlZW5Ib3Jpem9udGFsU25hcE9mZnNldHMuY29udGFpbnMoYWJzb2x1dGVTY3Jv
bGxPZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgc2Vlbkhvcml6b250YWxTbmFwT2Zmc2V0cy5h
ZGQoYWJzb2x1dGVTY3JvbGxPZmZzZXQpOwotICAgICAgICAgICAgICAgIGhvcml6b250YWxTbmFw
T2Zmc2V0cy5hcHBlbmQoYWJzb2x1dGVTY3JvbGxPZmZzZXQpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGlmIChoYXNWZXJ0aWNhbFNuYXBPZmZzZXRzICYmIGFsaWdubWVudC55
ICE9IFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpOb25lKSB7Ci0gICAgICAgICAgICBhdXRvIGFi
c29sdXRlU2Nyb2xsWVBvc2l0aW9uID0gY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3Jv
bGxTbmFwQXJlYS55KCksIHNjcm9sbFNuYXBBcmVhLm1heFkoKSwgYWxpZ25tZW50LnksIGZhbHNl
KSAtIGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25hcFBvcnQueSgpLCBzY3Jv
bGxTbmFwUG9ydC5tYXhZKCksIGFsaWdubWVudC55LCBmYWxzZSk7Ci0gICAgICAgICAgICBhdXRv
IGFic29sdXRlU2Nyb2xsT2Zmc2V0ID0gY2xhbXBUbzxpbnQ+KHNjcm9sbGFibGVBcmVhLnNjcm9s
bE9mZnNldEZyb21Qb3NpdGlvbih7IDAsIHJvdW5kVG9JbnQoYWJzb2x1dGVTY3JvbGxZUG9zaXRp
b24pIH0pLnkoKSwgMCwgbWF4U2Nyb2xsT2Zmc2V0LnkoKSk7Ci0gICAgICAgICAgICBpZiAoIXNl
ZW5WZXJ0aWNhbFNuYXBPZmZzZXRzLmNvbnRhaW5zKGFic29sdXRlU2Nyb2xsT2Zmc2V0KSkgewot
ICAgICAgICAgICAgICAgIHNlZW5WZXJ0aWNhbFNuYXBPZmZzZXRzLmFkZChhYnNvbHV0ZVNjcm9s
bE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgdmVydGljYWxTbmFwT2Zmc2V0cy5hcHBlbmQoYWJz
b2x1dGVTY3JvbGxPZmZzZXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKCFob3Jpem9udGFsU25hcE9mZnNldHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6
c29ydChob3Jpem9udGFsU25hcE9mZnNldHMuYmVnaW4oKSwgaG9yaXpvbnRhbFNuYXBPZmZzZXRz
LmVuZCgpKTsKLSAgICAgICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0cmljdG5lc3MgPT0gU2Nyb2xs
U25hcFN0cmljdG5lc3M6OlByb3hpbWl0eSkKLSAgICAgICAgICAgIGNvbXB1dGVBeGlzUHJveGlt
aXR5U25hcE9mZnNldFJhbmdlcyhob3Jpem9udGFsU25hcE9mZnNldHMsIGhvcml6b250YWxTbmFw
T2Zmc2V0UmFuZ2VzLCBzY3JvbGxTbmFwUG9ydC53aWR0aCgpKTsKLQotICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgaG9yaXpvbnRhbCBz
Y3JvbGwgc25hcCBvZmZzZXRzOiAiIDw8IGhvcml6b250YWxTbmFwT2Zmc2V0cyk7Ci0gICAgICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21wdXRlZCBob3Jp
em9udGFsIHNjcm9sbCBzbmFwIG9mZnNldCByYW5nZXM6ICIgPDwgaG9yaXpvbnRhbFNuYXBPZmZz
ZXRSYW5nZXMpOwotCi0gICAgICAgIHNjcm9sbGFibGVBcmVhLnNldEhvcml6b250YWxTbmFwT2Zm
c2V0cyhob3Jpem9udGFsU25hcE9mZnNldHMpOwotICAgICAgICBzY3JvbGxhYmxlQXJlYS5zZXRI
b3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyhob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHNjcm9sbGFibGVBcmVhLmNsZWFySG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCk7Ci0KLSAgICBpZiAoIXZlcnRpY2FsU25hcE9mZnNldHMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIHN0ZDo6c29ydCh2ZXJ0aWNhbFNuYXBPZmZzZXRzLmJlZ2luKCksIHZlcnRpY2FsU25hcE9m
ZnNldHMuZW5kKCkpOwotICAgICAgICBpZiAoc2Nyb2xsU25hcFR5cGUuc3RyaWN0bmVzcyA9PSBT
Y3JvbGxTbmFwU3RyaWN0bmVzczo6UHJveGltaXR5KQotICAgICAgICAgICAgY29tcHV0ZUF4aXNQ
cm94aW1pdHlTbmFwT2Zmc2V0UmFuZ2VzKHZlcnRpY2FsU25hcE9mZnNldHMsIHZlcnRpY2FsU25h
cE9mZnNldFJhbmdlcywgc2Nyb2xsU25hcFBvcnQuaGVpZ2h0KCkpOwotCi0gICAgICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21wdXRlZCB2ZXJ0aWNhbCBz
Y3JvbGwgc25hcCBvZmZzZXRzOiAiIDw8IHZlcnRpY2FsU25hcE9mZnNldHMpOwotICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgdmVydGlj
YWwgc2Nyb2xsIHNuYXAgb2Zmc2V0IHJhbmdlczogIiA8PCB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5n
ZXMpOwotCi0gICAgICAgIHNjcm9sbGFibGVBcmVhLnNldFZlcnRpY2FsU25hcE9mZnNldHModmVy
dGljYWxTbmFwT2Zmc2V0cyk7Ci0gICAgICAgIHNjcm9sbGFibGVBcmVhLnNldFZlcnRpY2FsU25h
cE9mZnNldFJhbmdlcyh2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMpOwotICAgIH0gZWxzZQotICAg
ICAgICBzY3JvbGxhYmxlQXJlYS5jbGVhclZlcnRpY2FsU25hcE9mZnNldHMoKTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+Ci1MYXlvdXRUeXBlIGNsb3Nlc3RTbmFwT2Zmc2V0
KGNvbnN0IFZlY3RvcjxMYXlvdXRUeXBlPiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3RvcjxTY3Jv
bGxPZmZzZXRSYW5nZTxMYXlvdXRUeXBlPj4mIHNuYXBPZmZzZXRSYW5nZXMsIExheW91dFR5cGUg
c2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0aXZlU25hcElu
ZGV4KQotewotICAgIEFTU0VSVChzbmFwT2Zmc2V0cy5zaXplKCkpOwotICAgIGFjdGl2ZVNuYXBJ
bmRleCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4OwotICAg
IHVuc2lnbmVkIHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXg7Ci0gICAgaW5kaWNlc09mTmVhcmVz
dFNuYXBPZmZzZXRSYW5nZXM8TGF5b3V0VHlwZT4oc2Nyb2xsRGVzdGluYXRpb24sIHNuYXBPZmZz
ZXRSYW5nZXMsIGxvd2VyU25hcE9mZnNldFJhbmdlSW5kZXgsIHVwcGVyU25hcE9mZnNldFJhbmdl
SW5kZXgpOwotICAgIGlmIChsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4ID09IHVwcGVyU25hcE9m
ZnNldFJhbmdlSW5kZXggJiYgdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25h
cE9mZnNldEluZGV4KSB7Ci0gICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IGludmFsaWRTbmFwT2Zm
c2V0SW5kZXg7Ci0gICAgICAgIHJldHVybiBzY3JvbGxEZXN0aW5hdGlvbjsKLSAgICB9Ci0KLSAg
ICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPD0gc25hcE9mZnNldHMuZmlyc3QoKSkKLSAgICAgICAg
cmV0dXJuIHNuYXBPZmZzZXRzLmZpcnN0KCk7Ci0KLSAgICBhY3RpdmVTbmFwSW5kZXggPSBzbmFw
T2Zmc2V0cy5zaXplKCkgLSAxOwotICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA+PSBzbmFwT2Zm
c2V0cy5sYXN0KCkpCi0gICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5sYXN0KCk7Ci0KLSAgICB1
bnNpZ25lZCBsb3dlckluZGV4OwotICAgIHVuc2lnbmVkIHVwcGVySW5kZXg7Ci0gICAgaW5kaWNl
c09mTmVhcmVzdFNuYXBPZmZzZXRzPExheW91dFR5cGU+KHNjcm9sbERlc3RpbmF0aW9uLCBzbmFw
T2Zmc2V0cywgbG93ZXJJbmRleCwgdXBwZXJJbmRleCk7Ci0gICAgTGF5b3V0VHlwZSBsb3dlclNu
YXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW2xvd2VySW5kZXhdOwotICAgIExheW91dFR5cGUgdXBw
ZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1t1cHBlckluZGV4XTsKLSAgICBpZiAoIXN0ZDo6
YWJzKHZlbG9jaXR5KSkgewotICAgICAgICBib29sIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlv
biA9IHNjcm9sbERlc3RpbmF0aW9uIC0gbG93ZXJTbmFwUG9zaXRpb24gPD0gdXBwZXJTbmFwUG9z
aXRpb24gLSBzY3JvbGxEZXN0aW5hdGlvbjsKLSAgICAgICAgYWN0aXZlU25hcEluZGV4ID0gaXND
bG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93ZXJJbmRleCA6IHVwcGVySW5kZXg7Ci0gICAg
ICAgIHJldHVybiBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPyBsb3dlclNuYXBQb3NpdGlv
biA6IHVwcGVyU25hcFBvc2l0aW9uOwotICAgIH0KLQotICAgIC8vIE5vbi16ZXJvIHZlbG9jaXR5
IGluZGljYXRlcyBhIGZsaWNrIGdlc3R1cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFwIHBvaW50IGlz
IGNsb3Nlciwgd2Ugc2hvdWxkIGNob29zZSB0aGUgb25lIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhl
IGZsaWNrIGdlc3R1cmUKLSAgICAvLyBhcyBsb25nIGFzIGEgc2Nyb2xsIHNuYXAgb2Zmc2V0IHJh
bmdlIGRvZXMgbm90IGxpZSBiZXR3ZWVuIHRoZSBzY3JvbGwgZGVzdGluYXRpb24gYW5kIHRoZSB0
YXJnZXRlZCBzbmFwIG9mZnNldC4KLSAgICBpZiAodmVsb2NpdHkgPCAwKSB7Ci0gICAgICAgIGlm
IChsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXggJiYg
bG93ZXJTbmFwUG9zaXRpb24gPCBzbmFwT2Zmc2V0UmFuZ2VzW2xvd2VyU25hcE9mZnNldFJhbmdl
SW5kZXhdLmVuZCkgewotICAgICAgICAgICAgYWN0aXZlU25hcEluZGV4ID0gdXBwZXJJbmRleDsK
LSAgICAgICAgICAgIHJldHVybiB1cHBlclNuYXBQb3NpdGlvbjsKLSAgICAgICAgfQotICAgICAg
ICBhY3RpdmVTbmFwSW5kZXggPSBsb3dlckluZGV4OwotICAgICAgICByZXR1cm4gbG93ZXJTbmFw
UG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXggIT0g
aW52YWxpZFNuYXBPZmZzZXRJbmRleCAmJiBzbmFwT2Zmc2V0UmFuZ2VzW3VwcGVyU25hcE9mZnNl
dFJhbmdlSW5kZXhdLnN0YXJ0IDwgdXBwZXJTbmFwUG9zaXRpb24pIHsKLSAgICAgICAgYWN0aXZl
U25hcEluZGV4ID0gbG93ZXJJbmRleDsKLSAgICAgICAgcmV0dXJuIGxvd2VyU25hcFBvc2l0aW9u
OwotICAgIH0KLSAgICBhY3RpdmVTbmFwSW5kZXggPSB1cHBlckluZGV4OwotICAgIHJldHVybiB1
cHBlclNuYXBQb3NpdGlvbjsKLX0KLQotTGF5b3V0VW5pdCBjbG9zZXN0U25hcE9mZnNldChjb25z
dCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zm
c2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCBMYXlvdXRVbml0IHNjcm9s
bERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCkK
LXsKLSAgICByZXR1cm4gY2xvc2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdD4oc25hcE9mZnNldHMs
IHNuYXBPZmZzZXRSYW5nZXMsIHNjcm9sbERlc3RpbmF0aW9uLCB2ZWxvY2l0eSwgYWN0aXZlU25h
cEluZGV4KTsKLX0KLQotZmxvYXQgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPGZsb2F0
PiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+JiBz
bmFwT2Zmc2V0UmFuZ2VzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHks
IHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgpCi17Ci0gICAgcmV0dXJuIGNsb3Nlc3RTbmFwT2Zm
c2V0PGZsb2F0PihzbmFwT2Zmc2V0cywgc25hcE9mZnNldFJhbmdlcywgc2Nyb2xsRGVzdGluYXRp
b24sIHZlbG9jaXR5LCBhY3RpdmVTbmFwSW5kZXgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBDU1NfU0NST0xMX1NOQVAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGJkYjY4YWViZDQwMjdhMTJlMThlYTVkNzk0MDc5ZjdhOWIwODI2NGMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0KLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5j
bHVkZSAiTGF5b3V0VW5pdC5oIgotI2luY2x1ZGUgIlNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIgot
I2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBIVE1MRWxlbWVudDsKLWNsYXNzIFJlbmRlckJveDsK
LWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgU2Nyb2xsYWJsZUFyZWE7Ci0KLS8vIFVwZGF0ZSB0
aGUgc25hcCBvZmZzZXRzIGZvciB0aGlzIHNjcm9sbGFibGUgYXJlYSwgZ2l2ZW4gdGhlIFJlbmRl
ckJveCBvZiB0aGUgc2Nyb2xsIGNvbnRhaW5lciwgdGhlIFJlbmRlclN0eWxlCi0vLyB3aGljaCBk
ZWZpbmVzIHRoZSBzY3JvbGwtc25hcCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHZpZXdwb3J0IHJlY3Rh
bmdsZSB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0IG9mCi0vLyB0aGUgc2Nyb2xsaW5n
IGNvbnRhaW5lcidzIGJvcmRlciBib3guCi12b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xs
YWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmLCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1l
bnRCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJl
Y3Qgdmlld3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRlcyk7Ci0KLWNvbnN0IHVuc2lnbmVk
IGludmFsaWRTbmFwT2Zmc2V0SW5kZXggPSBVSU5UX01BWDsKLVdFQkNPUkVfRVhQT1JUIExheW91
dFVuaXQgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zm
c2V0cywgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcE9m
ZnNldFJhbmdlcywgTGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHks
IHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgpOwotV0VCQ09SRV9FWFBPUlQgZmxvYXQgY2xvc2Vz
dFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPGZsb2F0PiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3Rv
cjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCBmbG9hdCBzY3Jv
bGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgp
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
U25hcE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bFNuYXBPZmZzZXRzSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmU2M2RhZDQxNWFjOGRkMzlhYTE0NjVj
NmRjOGZmMDljYzhkZjhlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKQEAgLTAsMCArMSwyMjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIgorCisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKKworI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KK3N0YXRp
YyB2b2lkIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKExheW91dFR5cGUgb2Zmc2V0
LCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0
UmFuZ2VzLCB1bnNpZ25lZCYgbG93ZXJJbmRleCwgdW5zaWduZWQmIHVwcGVySW5kZXgpCit7Cisg
ICAgaWYgKHNuYXBPZmZzZXRSYW5nZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGxvd2VySW5kZXgg
PSBpbnZhbGlkU25hcE9mZnNldEluZGV4OworICAgICAgICB1cHBlckluZGV4ID0gaW52YWxpZFNu
YXBPZmZzZXRJbmRleDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBsb3dlcklu
ZGV4QXNJbnQgPSAtMTsKKyAgICBpbnQgdXBwZXJJbmRleEFzSW50ID0gc25hcE9mZnNldFJhbmdl
cy5zaXplKCk7CisgICAgZG8geworICAgICAgICBpbnQgbWlkZGxlSW5kZXggPSAobG93ZXJJbmRl
eEFzSW50ICsgdXBwZXJJbmRleEFzSW50KSAvIDI7CisgICAgICAgIGF1dG8mIHJhbmdlID0gc25h
cE9mZnNldFJhbmdlc1ttaWRkbGVJbmRleF07CisgICAgICAgIGlmIChyYW5nZS5zdGFydCA8IG9m
ZnNldCAmJiBvZmZzZXQgPCByYW5nZS5lbmQpIHsKKyAgICAgICAgICAgIGxvd2VySW5kZXhBc0lu
dCA9IG1pZGRsZUluZGV4OworICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5k
ZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvZmZzZXQg
PiByYW5nZS5lbmQpCisgICAgICAgICAgICBsb3dlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRleDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5kZXg7
CisgICAgfSB3aGlsZSAobG93ZXJJbmRleEFzSW50IDwgdXBwZXJJbmRleEFzSW50IC0gMSk7CisK
KyAgICBpZiAob2Zmc2V0IDw9IHNuYXBPZmZzZXRSYW5nZXMuZmlyc3QoKS5zdGFydCkKKyAgICAg
ICAgbG93ZXJJbmRleCA9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7CisgICAgZWxzZQorICAgICAg
ICBsb3dlckluZGV4ID0gbG93ZXJJbmRleEFzSW50OworCisgICAgaWYgKG9mZnNldCA+PSBzbmFw
T2Zmc2V0UmFuZ2VzLmxhc3QoKS5lbmQpCisgICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlkU25h
cE9mZnNldEluZGV4OworICAgIGVsc2UKKyAgICAgICAgdXBwZXJJbmRleCA9IHVwcGVySW5kZXhB
c0ludDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+CitzdGF0aWMgdm9pZCBp
bmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHMoTGF5b3V0VHlwZSBvZmZzZXQsIGNvbnN0IFZlY3Rv
cjxMYXlvdXRUeXBlPiYgc25hcE9mZnNldHMsIHVuc2lnbmVkJiBsb3dlckluZGV4LCB1bnNpZ25l
ZCYgdXBwZXJJbmRleCkKK3sKKyAgICBsb3dlckluZGV4ID0gMDsKKyAgICB1cHBlckluZGV4ID0g
c25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKKyAgICB3aGlsZSAobG93ZXJJbmRleCA8IHVwcGVySW5k
ZXggLSAxKSB7CisgICAgICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4ICsgdXBwZXJJ
bmRleCkgLyAyOworICAgICAgICBhdXRvIG1pZGRsZU9mZnNldCA9IHNuYXBPZmZzZXRzW21pZGRs
ZUluZGV4XTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBtaWRkbGVPZmZzZXQpIHsKKyAgICAgICAg
ICAgIHVwcGVySW5kZXggPSBtaWRkbGVJbmRleDsKKyAgICAgICAgICAgIGxvd2VySW5kZXggPSBt
aWRkbGVJbmRleDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG9mZnNldCA+IG1pZGRsZU9mZnNldCkKKyAgICAgICAgICAgIGxvd2VySW5kZXggPSBtaWRkbGVJ
bmRleDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4
OworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+CitzdGF0aWMgTGF5
b3V0VHlwZSBjbG9zZXN0U25hcE9mZnNldChTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VHlw
ZT4gb2Zmc2V0c0luZm8sIFNjcm9sbEV2ZW50QXhpcyBheGlzLCBMYXlvdXRUeXBlIHNjcm9sbERl
c3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCkKK3sK
KyAgICBjb25zdCBWZWN0b3I8TGF5b3V0VHlwZT4mIHNuYXBPZmZzZXRzID0gb2Zmc2V0c0luZm8u
b2Zmc2V0c0ZvckF4aXMoYXhpcyk7CisgICAgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdl
PExheW91dFR5cGU+PiYgc25hcE9mZnNldFJhbmdlcyA9IG9mZnNldHNJbmZvLm9mZnNldFJhbmdl
c0ZvckF4aXMoYXhpcyk7CisKKyAgICBBU1NFUlQoc25hcE9mZnNldHMuc2l6ZSgpKTsKKyAgICBh
Y3RpdmVTbmFwSW5kZXggPSAwOworCisgICAgdW5zaWduZWQgbG93ZXJTbmFwT2Zmc2V0UmFuZ2VJ
bmRleDsKKyAgICB1bnNpZ25lZCB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4OworICAgIGluZGlj
ZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzPExheW91dFR5cGU+KHNjcm9sbERlc3RpbmF0aW9u
LCBzbmFwT2Zmc2V0UmFuZ2VzLCBsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4LCB1cHBlclNuYXBP
ZmZzZXRSYW5nZUluZGV4KTsKKyAgICBpZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCA9PSB1
cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4ICYmIHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXggIT0g
aW52YWxpZFNuYXBPZmZzZXRJbmRleCkgeworICAgICAgICBhY3RpdmVTbmFwSW5kZXggPSBpbnZh
bGlkU25hcE9mZnNldEluZGV4OworICAgICAgICByZXR1cm4gc2Nyb2xsRGVzdGluYXRpb247Cisg
ICAgfQorCisgICAgaWYgKHNjcm9sbERlc3RpbmF0aW9uIDw9IHNuYXBPZmZzZXRzLmZpcnN0KCkp
CisgICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5maXJzdCgpOworCisgICAgYWN0aXZlU25hcElu
ZGV4ID0gc25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKKyAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24g
Pj0gc25hcE9mZnNldHMubGFzdCgpKQorICAgICAgICByZXR1cm4gc25hcE9mZnNldHMubGFzdCgp
OworCisgICAgdW5zaWduZWQgbG93ZXJJbmRleDsKKyAgICB1bnNpZ25lZCB1cHBlckluZGV4Owor
ICAgIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0czxMYXlvdXRUeXBlPihzY3JvbGxEZXN0aW5h
dGlvbiwgc25hcE9mZnNldHMsIGxvd2VySW5kZXgsIHVwcGVySW5kZXgpOworICAgIExheW91dFR5
cGUgbG93ZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1tsb3dlckluZGV4XTsKKyAgICBMYXlv
dXRUeXBlIHVwcGVyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbdXBwZXJJbmRleF07CisgICAg
aWYgKCFzdGQ6OmFicyh2ZWxvY2l0eSkpIHsKKyAgICAgICAgYm9vbCBpc0Nsb3NlclRvTG93ZXJT
bmFwUG9zaXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbiAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVw
cGVyU25hcFBvc2l0aW9uIC0gc2Nyb2xsRGVzdGluYXRpb247CisgICAgICAgIGFjdGl2ZVNuYXBJ
bmRleCA9IGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA/IGxvd2VySW5kZXggOiB1cHBlcklu
ZGV4OworICAgICAgICByZXR1cm4gaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93ZXJT
bmFwUG9zaXRpb24gOiB1cHBlclNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICAvLyBOb24temVy
byB2ZWxvY2l0eSBpbmRpY2F0ZXMgYSBmbGljayBnZXN0dXJlLiBFdmVuIGlmIGFub3RoZXIgc25h
cCBwb2ludCBpcyBjbG9zZXIsIHdlIHNob3VsZCBjaG9vc2UgdGhlIG9uZSBpbiB0aGUgZGlyZWN0
aW9uIG9mIHRoZSBmbGljayBnZXN0dXJlCisgICAgLy8gYXMgbG9uZyBhcyBhIHNjcm9sbCBzbmFw
IG9mZnNldCByYW5nZSBkb2VzIG5vdCBsaWUgYmV0d2VlbiB0aGUgc2Nyb2xsIGRlc3RpbmF0aW9u
IGFuZCB0aGUgdGFyZ2V0ZWQgc25hcCBvZmZzZXQuCisgICAgaWYgKHZlbG9jaXR5IDwgMCkgewor
ICAgICAgICBpZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNl
dEluZGV4ICYmIGxvd2VyU25hcFBvc2l0aW9uIDwgc25hcE9mZnNldFJhbmdlc1tsb3dlclNuYXBP
ZmZzZXRSYW5nZUluZGV4XS5lbmQpIHsKKyAgICAgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IHVw
cGVySW5kZXg7CisgICAgICAgICAgICByZXR1cm4gdXBwZXJTbmFwUG9zaXRpb247CisgICAgICAg
IH0KKyAgICAgICAgYWN0aXZlU25hcEluZGV4ID0gbG93ZXJJbmRleDsKKyAgICAgICAgcmV0dXJu
IGxvd2VyU25hcFBvc2l0aW9uOworICAgIH0KKworICAgIGlmICh1cHBlclNuYXBPZmZzZXRSYW5n
ZUluZGV4ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXggJiYgc25hcE9mZnNldFJhbmdlc1t1cHBl
clNuYXBPZmZzZXRSYW5nZUluZGV4XS5zdGFydCA8IHVwcGVyU25hcFBvc2l0aW9uKSB7CisgICAg
ICAgIGFjdGl2ZVNuYXBJbmRleCA9IGxvd2VySW5kZXg7CisgICAgICAgIHJldHVybiBsb3dlclNu
YXBQb3NpdGlvbjsKKyAgICB9CisgICAgYWN0aXZlU25hcEluZGV4ID0gdXBwZXJJbmRleDsKKyAg
ICByZXR1cm4gdXBwZXJTbmFwUG9zaXRpb247Cit9CisKK2Zsb2F0IGNsb3Nlc3RTbmFwT2Zmc2V0
KFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxmbG9hdD4gb2Zmc2V0c0luZm8sIFNjcm9sbEV2ZW50QXhp
cyBheGlzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVk
JiBhY3RpdmVTbmFwSW5kZXgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmNsb3Nlc3RTbmFwT2Zm
c2V0PGZsb2F0PihvZmZzZXRzSW5mbywgYXhpcywgc2Nyb2xsRGVzdGluYXRpb24sIHZlbG9jaXR5
LCBhY3RpdmVTbmFwSW5kZXgpOworfQorCitMYXlvdXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0KFNj
cm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiBvZmZzZXRzSW5mbywgU2Nyb2xsRXZlbnRB
eGlzIGF4aXMsIExheW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1
bnNpZ25lZCYgYWN0aXZlU25hcEluZGV4KQoreworICAgIHJldHVybiBXZWJDb3JlOjpjbG9zZXN0
U25hcE9mZnNldDxMYXlvdXRVbml0PihvZmZzZXRzSW5mbywgYXhpcywgc2Nyb2xsRGVzdGluYXRp
b24sIHZlbG9jaXR5LCBhY3RpdmVTbmFwSW5kZXgpOworfQorCitzdGF0aWMgdm9pZCBjb21wdXRl
QXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRSYW5nZXMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBz
bmFwT2Zmc2V0cywgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgb2Zmc2V0
UmFuZ2VzLCBMYXlvdXRVbml0IHNjcm9sbFBvcnRBeGlzTGVuZ3RoKQoreworICAgIC8vIFRoaXMg
aXMgYW4gYXJiaXRyYXJ5IGNob2ljZSBmb3Igd2hhdCBpdCBtZWFucyB0byBiZSAiaW4gcHJveGlt
aXR5IiBvZiBhIHNuYXAgb2Zmc2V0LiBXZSBzaG91bGQgcGxheSBhcm91bmQgd2l0aAorICAgIC8v
IHRoaXMgYW5kIHNlZSB3aGF0IGZlZWxzIGJlc3QuCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHJh
dGlvT2ZTY3JvbGxQb3J0QXhpc0xlbmd0aFRvQmVDb25zaWRlcmVkRm9yUHJveGltaXR5ID0gMC4z
OworICAgIGlmIChzbmFwT2Zmc2V0cy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBUaGUgZXh0cmEgcnVsZSBhY2NvdW50aW5nIGZvciBzY3JvbGwgb2Zmc2V0IHJhbmdlcyBp
biBiZXR3ZWVuIHRoZSBzY3JvbGwgZGVzdGluYXRpb24gYW5kIGEgcG90ZW50aWFsIHNuYXAgb2Zm
c2V0CisgICAgLy8gaGFuZGxlcyB0aGUgY29ybmVyIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc2Nyb2xs
cyB3aXRoIG1vbWVudHVtIHZlcnkgbGlnaHRseSBhd2F5IGZyb20gYSBzbmFwIG9mZnNldCwgc3Vj
aCB0aGF0IHRoZQorICAgIC8vIHByZWRpY3RlZCBzY3JvbGwgZGVzdGluYXRpb24gaXMgc3RpbGwg
d2l0aGluIHByb3hpbWl0eSBvZiB0aGUgc25hcCBvZmZzZXQuIEluIHRoaXMgY2FzZSwgdGhlIHJl
Z3VsYXIgKG1hbmRhdG9yeQorICAgIC8vIHNjcm9sbCBzbmFwcGluZykgYmVoYXZpb3Igd291bGQg
YmUgdG8gc25hcCB0byB0aGUgbmV4dCBvZmZzZXQgaW4gdGhlIGRpcmVjdGlvbiBvZiBtb21lbnR1
bSBzY3JvbGxpbmcsIGJ1dAorICAgIC8vIGluc3RlYWQsIGl0IGlzIG1vcmUgaW50dWl0aXZlIHRv
IGVpdGhlciByZXR1cm4gdG8gdGhlIG9yaWdpbmFsIHNuYXAgcG9zaXRpb24gKHdoaWNoIHdlIGFy
Yml0cmFyaWx5IGNob29zZSBoZXJlKQorICAgIC8vIG9yIHNjcm9sbCBqdXN0IG91dHNpZGUgb2Yg
dGhlIHNuYXAgb2Zmc2V0IHJhbmdlLiBUaGlzIGlzIGFub3RoZXIgbWlub3IgYmVoYXZpb3IgdHdl
YWsgdGhhdCB3ZSBzaG91bGQgcGxheSBhcm91bmQKKyAgICAvLyB3aXRoIHRvIHNlZSB3aGF0IGZl
ZWxzIGJlc3QuCisgICAgTGF5b3V0VW5pdCBwcm94aW1pdHlEaXN0YW5jZSB7IHJhdGlvT2ZTY3Jv
bGxQb3J0QXhpc0xlbmd0aFRvQmVDb25zaWRlcmVkRm9yUHJveGltaXR5ICogc2Nyb2xsUG9ydEF4
aXNMZW5ndGggfTsKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDE7IGluZGV4IDwgc25hcE9mZnNl
dHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RhcnRPZmZzZXQgPSBzbmFwT2Zm
c2V0c1tpbmRleCAtIDFdICsgcHJveGltaXR5RGlzdGFuY2U7CisgICAgICAgIGF1dG8gZW5kT2Zm
c2V0ID0gc25hcE9mZnNldHNbaW5kZXhdIC0gcHJveGltaXR5RGlzdGFuY2U7CisgICAgICAgIGlm
IChzdGFydE9mZnNldCA8IGVuZE9mZnNldCkKKyAgICAgICAgICAgIG9mZnNldFJhbmdlcy5hcHBl
bmQoeyBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IH0pOworICAgIH0KK30KKworU2Nyb2xsU25hcE9m
ZnNldHNJbmZvQnVpbGRlcjo6U2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcihTY3JvbGxTbmFw
U3RyaWN0bmVzcyBzdHJpY3RuZXNzKQorICAgIDogbV9zdHJpY3RuZXNzKHN0cmljdG5lc3MpIHsg
fQorCit2b2lkIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXI6OmFkZFZlcnRpY2FsT2Zmc2V0
KExheW91dFVuaXQgb2Zmc2V0KQoreworICAgIGlmICghbV9zZWVuVmVydGljYWxTbmFwT2Zmc2V0
cy5jb250YWlucyhvZmZzZXQpKSB7CisgICAgICAgIG1fc2VlblZlcnRpY2FsU25hcE9mZnNldHMu
YWRkKG9mZnNldCk7CisgICAgICAgIG1fdmVydGljYWxTbmFwT2Zmc2V0cy5hcHBlbmQob2Zmc2V0
KTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6YWRkSG9y
aXpvbnRhbE9mZnNldChMYXlvdXRVbml0IG9mZnNldCkKK3sKKyAgICBpZiAoIW1fc2Vlbkhvcml6
b250YWxTbmFwT2Zmc2V0cy5jb250YWlucyhvZmZzZXQpKSB7CisgICAgICAgIG1fc2Vlbkhvcml6
b250YWxTbmFwT2Zmc2V0cy5hZGQob2Zmc2V0KTsKKyAgICAgICAgbV9ob3Jpem9udGFsU25hcE9m
ZnNldHMuYXBwZW5kKG9mZnNldCk7CisgICAgfQorfQorCitzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xs
U25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+PiBTY3JvbGxTbmFwT2Zmc2V0c0luZm9CdWlsZGVy
OjpidWlsZChjb25zdCBMYXlvdXRSZWN0JiBzY3JvbGxTbmFwUG9ydCkKK3sKKyAgICBhdXRvIG9m
ZnNldHNJbmZvID0gbWFrZVVuaXF1ZTxTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4+
KCk7CisgICAgb2Zmc2V0c0luZm8tPmhvcml6b250YWxTbmFwT2Zmc2V0cyA9IFdURk1vdmUobV9o
b3Jpem9udGFsU25hcE9mZnNldHMpOworICAgIG9mZnNldHNJbmZvLT52ZXJ0aWNhbFNuYXBPZmZz
ZXRzID0gV1RGTW92ZShtX3ZlcnRpY2FsU25hcE9mZnNldHMpOworCisgICAgaWYgKCFvZmZzZXRz
SW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvJiBo
b3Jpem9udGFsU25hcE9mZnNldHMgPSBvZmZzZXRzSW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRz
OworICAgICAgICBhdXRvJiBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyA9IG9mZnNldHNJbmZv
LT5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlczsKKyAgICAgICAgc3RkOjpzb3J0KGhvcml6b250
YWxTbmFwT2Zmc2V0cy5iZWdpbigpLCBob3Jpem9udGFsU25hcE9mZnNldHMuZW5kKCkpOworICAg
ICAgICBpZiAobV9zdHJpY3RuZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpQcm94aW1pdHkp
CisgICAgICAgICAgICBjb21wdXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRSYW5nZXMoaG9yaXpv
bnRhbFNuYXBPZmZzZXRzLCBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcywgc2Nyb2xsU25hcFBv
cnQud2lkdGgoKSk7CisgICAgfQorCisgICAgaWYgKCFvZmZzZXRzSW5mby0+dmVydGljYWxTbmFw
T2Zmc2V0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byYgdmVydGljYWxTbmFwT2Zmc2V0cyA9
IG9mZnNldHNJbmZvLT52ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgICAgICBhdXRvJiB2ZXJ0aWNh
bFNuYXBPZmZzZXRSYW5nZXMgPSBvZmZzZXRzSW5mby0+dmVydGljYWxTbmFwT2Zmc2V0UmFuZ2Vz
OworICAgICAgICBzdGQ6OnNvcnQodmVydGljYWxTbmFwT2Zmc2V0cy5iZWdpbigpLCB2ZXJ0aWNh
bFNuYXBPZmZzZXRzLmVuZCgpKTsKKyAgICAgICAgaWYgKG1fc3RyaWN0bmVzcyA9PSBTY3JvbGxT
bmFwU3RyaWN0bmVzczo6UHJveGltaXR5KQorICAgICAgICAgICAgY29tcHV0ZUF4aXNQcm94aW1p
dHlTbmFwT2Zmc2V0UmFuZ2VzKHZlcnRpY2FsU25hcE9mZnNldHMsIHZlcnRpY2FsU25hcE9mZnNl
dFJhbmdlcywgc2Nyb2xsU25hcFBvcnQuaGVpZ2h0KCkpOworICAgIH0KKworICAgIHJldHVybiBv
ZmZzZXRzSW5mbzsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmgKaW5kZXggM2FiNjQwNjgyNjRjNTA0MDhiYWI0ZWUzOGQyY2NkNGE2NDFjNzg2Ny4u
YTc1NmNiMWJmODU3YTFlYzlhMDUyMzZkYjY2YmNkOGJlYmY4NjUwYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgKQEAg
LTI1LDE2ICsyNSwyNSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCisKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMu
aCIKKyNpbmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgTGF5b3V0UmVjdDsKKwogdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgU2Nyb2xsT2Zmc2V0UmFuZ2UgewogICAgIFQgc3Rh
cnQ7CiAgICAgVCBlbmQ7CiB9OwogCitjb25zdCB1bnNpZ25lZCBpbnZhbGlkU25hcE9mZnNldElu
ZGV4ID0gVUlOVF9NQVg7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IFNjcm9sbFNu
YXBPZmZzZXRzSW5mbyB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwpAQCAt
NDcsNiArNTYsNDMgQEAgc3RydWN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbyB7CiAgICAgLy8gd2hl
cmUgdGhlIHNuYXAgcG9ydCBmaXRzIHdpdGhpbiB0aGUgc25hcCBhcmVhIGFyZSBjb25zaWRlcmVk
IHRvIGJlIHZhbGlkIHNuYXAgcG9zaXRpb25zLgogICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5n
ZTxUPj4gaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXM7CiAgICAgVmVjdG9yPFNjcm9sbE9mZnNl
dFJhbmdlPFQ+PiB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7CisKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGhvcml6b250YWxTbmFwT2Zmc2V0cy5pc0Vt
cHR5KCkgJiYgdmVydGljYWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkgJiYgaG9yaXpvbnRhbFNuYXBP
ZmZzZXRSYW5nZXMuaXNFbXB0eSgpICYmIHZlcnRpY2FsU25hcE9mZnNldFJhbmdlcy5pc0VtcHR5
KCk7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFQ+JiBvZmZzZXRzRm9yQXhpcyhTY3JvbGxF
dmVudEF4aXMgYXhpcykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBheGlzID09IFNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IGhvcml6b250YWxTbmFwT2Zmc2V0cyA6IHZlcnRpY2Fs
U25hcE9mZnNldHM7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdl
PFQ+PiYgb2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/
IGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzIDogdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOwor
ICAgIH0KIH07CiAKK2NsYXNzIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIgeworcHVibGlj
OgorICAgIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIoU2Nyb2xsU25hcFN0cmljdG5lc3Mp
OworCisgICAgdm9pZCBhZGRWZXJ0aWNhbE9mZnNldChMYXlvdXRVbml0IG9mZnNldCk7CisgICAg
dm9pZCBhZGRIb3Jpem9udGFsT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4+IGJ1aWxkKGNvbnN0
IExheW91dFJlY3QmIHNjcm9sbFNuYXBQb3J0KTsKKworcHJpdmF0ZToKKyAgICBTY3JvbGxTbmFw
U3RyaWN0bmVzcyBtX3N0cmljdG5lc3M7CisgICAgSGFzaFNldDxmbG9hdD4gbV9zZWVuVmVydGlj
YWxTbmFwT2Zmc2V0czsKKyAgICBIYXNoU2V0PGZsb2F0PiBtX3NlZW5Ib3Jpem9udGFsU25hcE9m
ZnNldHM7CisgICAgVmVjdG9yPExheW91dFVuaXQ+IG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzOwor
ICAgIFZlY3RvcjxMYXlvdXRVbml0PiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7Cit9OworCitXRUJD
T1JFX0VYUE9SVCBmbG9hdCBjbG9zZXN0U25hcE9mZnNldChTY3JvbGxTbmFwT2Zmc2V0c0luZm88
ZmxvYXQ+LCBTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2
ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCk7CitXRUJDT1JFX0VYUE9SVCBMYXlv
dXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0
PiwgU2Nyb2xsRXZlbnRBeGlzLCBMYXlvdXRVbml0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2
ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCk7CisKIH07IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKaW5kZXgg
N2I3NGY4YTkwNTFlMzU5OWM0ZGJmNDJiYWZjMDg5ZTFiZTQ4ZjRkMS4uMWUxMzA1YTJmOTljYmNi
OGYzOTc0Y2RhNGYyN2JhMjVmM2VmZjhiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCkBAIC00MiwxMCArNDIsNiBAQAog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNlbmRpZgogCi0jaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCIKLSNlbmRpZgotCiBu
YW1lc3BhY2UgV1RGIHsKIGNsYXNzIFRleHRTdHJlYW07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5o
CmluZGV4IDIxYzMxMWNkODliNzk0MDg0YTg0OTBkNWZjOWJhNTVhOTNiOWFlYmQuLjczZTkyYTY0
ZDIzMjVjNWUxZWE1NjhjNDRkMmQ2ZjhkZGZhNmE3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5o
CkBAIC0yNyw3ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogCi0jaW5j
bHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2
ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgKaW5kZXggNDA5YWU5ZDlhZTY3OTAzZWY2YmFhMjlmNWJk
Mjc0ZTRjM2RiMTQ1ZS4uNDc4OTdhYTVhMzc1NTZkMzlmZTY2MzlmZjZmZmNjN2RkOTFjZTEyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgKQEAgLTcxLDYgKzcxLDggQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50Jik7CiAKICNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5m
bzxmbG9hdD4mIHNuYXBPZmZzZXRzSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJ
bmZvOyB9CisKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsU25hcE9mZnNldHMo
KSBjb25zdCB7IHJldHVybiBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHM7
IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhvcml6b250YWxTbmFwT2Zmc2V0cyhjb25z
dCBWZWN0b3I8ZmxvYXQ+Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oCmluZGV4IDEzYWZkM2NjMDBl
MjE5YTI3ODIyMTAzYTM3NzEzNTlhNTNiZDgwMzEuLjkxNmQzYThhMzk2Y2Q1NjZkMmZkM2U1NTkw
MDAwOThiZjdhZjFhZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaApAQCAtOTcsMTAgKzk3LDcgQEAg
cHVibGljOgogICAgIGJvb2wgY2FuSGF2ZVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX3Nj
cm9sbGFibGVBcmVhUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSAhPSBTY3JvbGxi
YXJBbHdheXNPZmYgfHwgbV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxi
YXJNb2RlICE9IFNjcm9sbGJhckFsd2F5c09mZjsgfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsU25hcE9mZnNldHMoKSBj
b25zdCB7IHJldHVybiBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHM7IH0K
LSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zbmFwT2Zmc2V0c0luZm8udmVydGljYWxTbmFwT2Zmc2V0czsgfQotICAgIGNvbnN0
IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+JiBob3Jpem9udGFsU25hcE9mZnNldFJh
bmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJbmZvLmhvcml6b250YWxTbmFwT2Zm
c2V0UmFuZ2VzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPGZsb2F0Pj4m
IHZlcnRpY2FsU25hcE9mZnNldFJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJ
bmZvLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlczsgfQorICAgIGNvbnN0IFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbzxmbG9hdD4mIHNuYXBPZmZzZXRzSW5mbygpIGNvbnN0OwogICAgIHVuc2lnbmVkIGN1
cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRI
b3Jpem9udGFsU25hcFBvaW50SW5kZXg7IH0KICAgICB1bnNpZ25lZCBjdXJyZW50VmVydGljYWxT
bmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50
SW5kZXg7IH0KICAgICB2b2lkIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgodW5z
aWduZWQgaW5kZXgpIHsgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4ID0gaW5kZXg7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oCmluZGV4
IDdhMGU3M2ExZWI2YTRhOWVlNzZiMmJjY2QzYWRlYTVhN2IxZDJmY2UuLjhiNmE2NzAxNTJlMzRk
NmQyYWQ5MTcyZWExYWNmYzRhNDk1YjViZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVNYWMuaApAQCAtNTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjdXJyZW50U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4aXMs
IGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5n
ZTxMYXlvdXRVbml0Pj4mKTsKICAgICB2b2lkIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzLCB1bnNpZ25lZCk7CiAgICAgYm9vbCBhY3RpdmVTY3JvbGxTbmFw
SW5kZXhEaWRDaGFuZ2UoKSBjb25zdDsKICAgICB1bnNpZ25lZCBhY3RpdmVTY3JvbGxTbmFwSW5k
ZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tCmluZGV4IDU2ZmU5YzMyNGFjZTIzMDYxNWVjYWE4
ZDk5OWUzZjJiMjM4YjhkMWYuLmYzMGVlNjA5NmM0OTMxMzQ1NDk1ZTc4ZDI0Y2JiMDNjMTUxZDk2
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1t
CkBAIC03NSw2ICs3NSwxNiBAQCBzdGF0aWMgaW5saW5lIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5n
ZTxMYXlvdXRVbml0Pj4gY29udmVydFRvTGF5b3V0VW5pdHMoY29uc3QgVgogCiAgICAgcmV0dXJu
IHNuYXBPZmZzZXRSYW5nZXM7CiB9CisKK3N0YXRpYyBpbmxpbmUgU2Nyb2xsU25hcE9mZnNldHNJ
bmZvPExheW91dFVuaXQ+IGNvbnZlcnRUb0xheW91dFVuaXRzKGNvbnN0IFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbzxmbG9hdD4mIHNuYXBPZmZzZXRzSW5mb0FzRmxvYXQpCit7CisgICAgcmV0dXJuIHsK
KyAgICAgICAgY29udmVydFRvTGF5b3V0VW5pdHMoc25hcE9mZnNldHNJbmZvQXNGbG9hdC52ZXJ0
aWNhbFNuYXBPZmZzZXRzKSwKKyAgICAgICAgY29udmVydFRvTGF5b3V0VW5pdHMoc25hcE9mZnNl
dHNJbmZvQXNGbG9hdC5ob3Jpem9udGFsU25hcE9mZnNldHMpLAorICAgICAgICBjb252ZXJ0VG9M
YXlvdXRVbml0cyhzbmFwT2Zmc2V0c0luZm9Bc0Zsb2F0LnZlcnRpY2FsU25hcE9mZnNldFJhbmdl
cyksCisgICAgICAgIGNvbnZlcnRUb0xheW91dFVuaXRzKHNuYXBPZmZzZXRzSW5mb0FzRmxvYXQu
aG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMpCisgICAgfTsKK30KICNlbmRpZgogCiB2b2lkIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0ZUZyb21TdGF0ZU5vZGUo
Y29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdTdGF0ZU5vZGUpCkBA
IC04NiwxMSArOTYsMTAgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
TWFjOjp1cGRhdGVGcm9tU3RhdGVOb2RlKGNvbnN0IFNjcm9sbGluZ1MKICAgICB9CiAKICNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6Okhvcml6b250YWxTbmFw
T2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZU5vZGU6OlByb3BlcnR5OjpIb3Jpem9udGFsU25hcE9mZnNldFJhbmdlcykpCi0gICAg
ICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBj
b252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUuaG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCkpLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUuaG9yaXpvbnRh
bFNuYXBPZmZzZXRSYW5nZXMoKSkpOwotCi0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9wZXJ0eTo6VmVydGljYWxTbmFw
T2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZU5vZGU6OlByb3BlcnR5OjpWZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMpKQotICAgICAg
ICB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIGNvbnZl
cnRUb0xheW91dFVuaXRzKHNjcm9sbGluZ1N0YXRlTm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkp
LCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUudmVydGljYWxTbmFwT2Zm
c2V0UmFuZ2VzKCkpKTsKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlByb3BlcnR5OjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSB8
fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9k
ZTo6UHJvcGVydHk6OlZlcnRpY2FsU25hcE9mZnNldFJhbmdlcykKKyAgICAgICAgfHwgc2Nyb2xs
aW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlByb3Bl
cnR5OjpIb3Jpem9udGFsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9wZXJ0eTo6SG9yaXpvbnRhbFNuYXBP
ZmZzZXRSYW5nZXMpKSB7CisgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxT
bmFwUG9pbnRzKGNvbnZlcnRUb0xheW91dFVuaXRzKHNjcm9sbGluZ1N0YXRlTm9kZS5zbmFwT2Zm
c2V0c0luZm8oKSkpOworICAgIH0KIAogICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6OkN1cnJlbnRIb3Jpem9u
dGFsU25hcE9mZnNldEluZGV4KSkKICAgICAgICAgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9y
QXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJy
ZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkpOwpAQCAtMTAwLDExICsxMDksNiBAQCB2b2lk
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0ZUZyb21TdGF0ZU5v
ZGUoY29uc3QgU2Nyb2xsaW5nUwogI2VuZGlmCiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZU1hYzo6dXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4
aXMgYXhpcywgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVj
dG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcFJhbmdlcykKLXsKLSAgICBt
X3Njcm9sbENvbnRyb2xsZXIudXBkYXRlU2Nyb2xsU25hcFBvaW50cyhheGlzLCBzbmFwT2Zmc2V0
cywgc25hcFJhbmdlcyk7Ci19Ci0KIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZU1hYzo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMg
YXhpcywgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgbV9zY3JvbGxDb250cm9sbGVyLnNldEFjdGl2
ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcywgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmluZGV4IGRhZTI3ZGYzZDI4ODdhZmZhOGNhMDJiMmMx
MDgwMzMzNzQ4NmIyZGQuLjFkODBiMTZmNGU4ZjAxYTY0YzlhYmVjOGY5NGRmYTU4NGZjYzQ4NmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTI0Miw3
ICsyNDIsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjpub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29u
c3QgRmxvYXRTaXplJiBkZWx0YSkKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogdm9pZCBT
Y3JvbGxBbmltYXRvcjo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkKIHsKLSAgICBtX3Njcm9sbENv
bnRyb2xsZXIudXBkYXRlU2Nyb2xsU25hcFN0YXRlKG1fc2Nyb2xsYWJsZUFyZWEpOworICAgIG1f
c2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxTbmFwUG9pbnRzKG1fc2Nyb2xsYWJsZUFyZWEu
c2Nyb2xsU25hcE9mZnNldEluZm8oKSk7CiB9CiAKIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6
OnNjcm9sbE9mZnNldCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5jcHAKaW5kZXggYTg4ZDc0NjMwNGNjOGU2YzFhYWMzZDM5NDk1MGE4YzJhMDhhZWFmYi4u
ZDc0NGNiZmZkOTgyMjhiMzYxN2NmZmIxMmMwODZkMjY2MDVmNTZmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApAQCAtMzIsMTkgKzMyLDY2IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKIAorI2luY2x1ZGUg
IkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlckJv
eC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgog
I2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNb2Nr
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTdHlsZVNjcm9sbFNu
YXBQb2ludHMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitlbnVtIGNsYXNzIEluc2V0T3JPdXRz
ZXQgeworICAgIEluc2V0LAorICAgIE91dHNldAorfTsKKworc3RhdGljIExheW91dFJlY3QgY29t
cHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25z
dCBMZW5ndGhCb3gmIGluc2V0T3JPdXRzZXRCb3gsIEluc2V0T3JPdXRzZXQgaW5zZXRPck91dHNl
dCkKK3sKKyAgICBMYXlvdXRCb3hFeHRlbnQgZXh0ZW50cyh2YWx1ZUZvckxlbmd0aChpbnNldE9y
T3V0c2V0Qm94LnRvcCgpLCByZWN0LmhlaWdodCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRPck91
dHNldEJveC5yaWdodCgpLCByZWN0LndpZHRoKCkpLCB2YWx1ZUZvckxlbmd0aChpbnNldE9yT3V0
c2V0Qm94LmJvdHRvbSgpLCByZWN0LmhlaWdodCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRPck91
dHNldEJveC5sZWZ0KCksIHJlY3Qud2lkdGgoKSkpOworICAgIGF1dG8gc25hcFBvcnRPckFyZWEo
cmVjdCk7CisgICAgaWYgKGluc2V0T3JPdXRzZXQgPT0gSW5zZXRPck91dHNldDo6SW5zZXQpCisg
ICAgICAgIHNuYXBQb3J0T3JBcmVhLmNvbnRyYWN0KGV4dGVudHMpOworICAgIGVsc2UKKyAgICAg
ICAgc25hcFBvcnRPckFyZWEuZXhwYW5kKGV4dGVudHMpOworICAgIHJldHVybiBzbmFwUG9ydE9y
QXJlYTsKK30KKworc3RhdGljIExheW91dFVuaXQgY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNl
dChMYXlvdXRVbml0IG1pbkxvY2F0aW9uLCBMYXlvdXRVbml0IG1heExvY2F0aW9uLCBTY3JvbGxT
bmFwQXhpc0FsaWduVHlwZSBhbGlnbm1lbnQsIGJvb2wgYXhpc0lzRmxpcHBlZCkKK3sKKyAgICBz
d2l0Y2ggKGFsaWdubWVudCkgeworICAgIGNhc2UgU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6OlN0
YXJ0OgorICAgICAgICByZXR1cm4gYXhpc0lzRmxpcHBlZCA/IG1heExvY2F0aW9uIDogbWluTG9j
YXRpb247CisgICAgY2FzZSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Q2VudGVyOgorICAgICAg
ICByZXR1cm4gKG1pbkxvY2F0aW9uICsgbWF4TG9jYXRpb24pIC8gMjsKKyAgICBjYXNlIFNjcm9s
bFNuYXBBeGlzQWxpZ25UeXBlOjpFbmQ6CisgICAgICAgIHJldHVybiBheGlzSXNGbGlwcGVkID8g
bWluTG9jYXRpb24gOiBtYXhMb2NhdGlvbjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
U2Nyb2xsT2Zmc2V0UmFuZ2U8VD4mIHJhbmdlKQoreworICAgIHRzIDw8ICJzdGFydDogIiA8PCBy
YW5nZS5zdGFydCA8PCAiIGVuZDogIiA8PCByYW5nZS5lbmQ7CisgICAgcmV0dXJuIHRzOworfQor
I2VuZGlmCisKIHN0cnVjdCBTYW1lU2l6ZUFzU2Nyb2xsYWJsZUFyZWEgewogICAgIHZpcnR1YWwg
flNhbWVTaXplQXNTY3JvbGxhYmxlQXJlYSgpOwogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC00NjMs
MTMgKzUxMCw2IEBAIFN0cmluZyBTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJTdGF0
ZUZvclRlc3RpbmcoKSBjb25zdAogfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLVNj
cm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYgU2Nyb2xsYWJsZUFyZWE6OmVuc3VyZVNu
YXBPZmZzZXRzSW5mbygpCi17Ci0gICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mbykKLSAgICAgICAg
bV9zbmFwT2Zmc2V0c0luZm8gPSBtYWtlVW5pcXVlPFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlv
dXRVbml0Pj4oKTsKLSAgICByZXR1cm4gKm1fc25hcE9mZnNldHNJbmZvOwotfQotCiBjb25zdCBW
ZWN0b3I8TGF5b3V0VW5pdD4qIFNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU25hcE9mZnNldHMo
KSBjb25zdAogewogICAgIGlmICghbV9zbmFwT2Zmc2V0c0luZm8pCkBAIC01MDIsNTggKzU0Miwx
MSBAQCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4qIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNu
YXBPZmZzZXRzKCkgY29uc3QKICAgICByZXR1cm4gJm1fc25hcE9mZnNldHNJbmZvLT52ZXJ0aWNh
bFNuYXBPZmZzZXRzOwogfQogCi12b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU25h
cE9mZnNldHMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBob3Jpem9udGFsU25hcE9mZnNldHMp
Ci17Ci0gICAgLy8gQ29uc2lkZXIgaGF2aW5nIGEgbm9uLWVtcHR5IHNldCBvZiBzbmFwIG9mZnNl
dHMgYXMgYSBjdWUgdG8gaW5pdGlhbGl6ZSB0aGUgU2Nyb2xsQW5pbWF0b3IuCi0gICAgaWYgKGhv
cml6b250YWxTbmFwT2Zmc2V0cy5zaXplKCkpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCk7Ci0K
LSAgICBlbnN1cmVTbmFwT2Zmc2V0c0luZm8oKS5ob3Jpem9udGFsU25hcE9mZnNldHMgPSBob3Jp
em9udGFsU25hcE9mZnNldHM7Ci19Ci0KLXZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2Fs
U25hcE9mZnNldHMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiB2ZXJ0aWNhbFNuYXBPZmZzZXRz
KQotewotICAgIC8vIENvbnNpZGVyIGhhdmluZyBhIG5vbi1lbXB0eSBzZXQgb2Ygc25hcCBvZmZz
ZXRzIGFzIGEgY3VlIHRvIGluaXRpYWxpemUgdGhlIFNjcm9sbEFuaW1hdG9yLgotICAgIGlmICh2
ZXJ0aWNhbFNuYXBPZmZzZXRzLnNpemUoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKTsKLQot
ICAgIGVuc3VyZVNuYXBPZmZzZXRzSW5mbygpLnZlcnRpY2FsU25hcE9mZnNldHMgPSB2ZXJ0aWNh
bFNuYXBPZmZzZXRzOwotfQotCi12b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU25h
cE9mZnNldFJhbmdlcyhjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+
JiBob3Jpem9udGFsUmFuZ2VzKQotewotICAgIGVuc3VyZVNuYXBPZmZzZXRzSW5mbygpLmhvcml6
b250YWxTbmFwT2Zmc2V0UmFuZ2VzID0gaG9yaXpvbnRhbFJhbmdlczsKLX0KLQotdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6c2V0VmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKGNvbnN0IFZlY3RvcjxTY3Jv
bGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHZlcnRpY2FsUmFuZ2VzKQotewotICAgIGVuc3Vy
ZVNuYXBPZmZzZXRzSW5mbygpLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyA9IHZlcnRpY2FsUmFu
Z2VzOwotfQotCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjbGVhclNuYXBPZmZzZXRzKCkKIHsKLSAg
ICBjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cygpOwotICAgIGNsZWFyVmVydGljYWxTbmFwT2Zm
c2V0cygpOwotfQotCi12b2lkIFNjcm9sbGFibGVBcmVhOjpjbGVhckhvcml6b250YWxTbmFwT2Zm
c2V0cygpCi17Ci0gICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mbykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zbmFwT2Zmc2V0c0luZm8tPmhvcml6b250YWxTbmFwT2Zmc2V0cyA9IHsgfTsKLSAg
ICBtX3NuYXBPZmZzZXRzSW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMgPSB7IH07Ci0g
ICAgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4ID0gMDsKLX0KLQotdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6Y2xlYXJWZXJ0aWNhbFNuYXBPZmZzZXRzKCkKLXsKLSAgICBpZiAoIW1fc25h
cE9mZnNldHNJbmZvKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NuYXBPZmZzZXRzSW5mby0+
dmVydGljYWxTbmFwT2Zmc2V0cyA9IHsgfTsKLSAgICBtX3NuYXBPZmZzZXRzSW5mby0+dmVydGlj
YWxTbmFwT2Zmc2V0UmFuZ2VzID0geyB9OworICAgIG1fc25hcE9mZnNldHNJbmZvID0gbnVsbHB0
cjsKICAgICBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4ID0gMDsKKyAgICBtX2N1cnJl
bnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPSAwOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVh
Ojp1c2VzU2Nyb2xsU25hcCgpIGNvbnN0CkBAIC01NjMsMjkgKzU1NiwyNCBAQCBib29sIFNjcm9s
bGFibGVBcmVhOjp1c2VzU2Nyb2xsU25hcCgpIGNvbnN0CiAKIEludFBvaW50IFNjcm9sbGFibGVB
cmVhOjpuZWFyZXN0QWN0aXZlU25hcFBvaW50KGNvbnN0IEludFBvaW50JiBjdXJyZW50UG9zaXRp
b24pCiB7Ci0gICAgaWYgKCFob3Jpem9udGFsU25hcE9mZnNldHMoKSAmJiAhdmVydGljYWxTbmFw
T2Zmc2V0cygpKQorICAgIGF1dG8qIG9mZnNldHNJbmZvID0gc2Nyb2xsU25hcE9mZnNldEluZm8o
KTsKKyAgICBpZiAoIW9mZnNldHNJbmZvIHx8IG9mZnNldHNJbmZvLT5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CiAgICAgCiAgICAgaWYgKCFleGlzdGluZ1Njcm9s
bEFuaW1hdG9yKCkpCiAgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CiAgICAgCiAgICAg
SW50UG9pbnQgY29ycmVjdGVkUG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247Ci0gICAgCi0gICAg
aWYgKGhvcml6b250YWxTbmFwT2Zmc2V0cygpKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGhvcml6
b250YWwgPSAqaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCk7Ci0gICAgICAgIAotICAgICAgICBzaXpl
X3QgYWN0aXZlSW5kZXggPSBjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7Ci0gICAg
ICAgIGlmIChhY3RpdmVJbmRleCA8IGhvcml6b250YWwuc2l6ZSgpKQotICAgICAgICAgICAgY29y
cmVjdGVkUG9zaXRpb24uc2V0WChob3Jpem9udGFsW2FjdGl2ZUluZGV4XS50b0ludCgpKTsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKHZlcnRpY2FsU25hcE9mZnNldHMoKSkgewotICAgICAgICBjb25z
dCBhdXRvJiB2ZXJ0aWNhbCA9ICp2ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7Ci0gICAgICAgIAotICAg
ICAgICBzaXplX3QgYWN0aXZlSW5kZXggPSBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgp
OwotICAgICAgICBpZiAoYWN0aXZlSW5kZXggPCB2ZXJ0aWNhbC5zaXplKCkpCi0gICAgICAgICAg
ICBjb3JyZWN0ZWRQb3NpdGlvbi5zZXRZKHZlcnRpY2FsW2FjdGl2ZUluZGV4XS50b0ludCgpKTsK
LSAgICB9CisKKyAgICBjb25zdCBhdXRvJiBob3Jpem9udGFsID0gb2Zmc2V0c0luZm8tPmhvcml6
b250YWxTbmFwT2Zmc2V0czsKKyAgICBzaXplX3QgYWN0aXZlSG9yaXpvbnRhbEluZGV4ID0gY3Vy
cmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpOworICAgIGlmIChhY3RpdmVIb3Jpem9udGFs
SW5kZXggPCBob3Jpem9udGFsLnNpemUoKSkKKyAgICAgICAgY29ycmVjdGVkUG9zaXRpb24uc2V0
WChob3Jpem9udGFsW2FjdGl2ZUhvcml6b250YWxJbmRleF0udG9JbnQoKSk7CisKKyAgICBjb25z
dCBhdXRvJiB2ZXJ0aWNhbCA9IG9mZnNldHNJbmZvLT52ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAg
IHNpemVfdCBhY3RpdmVWZXJ0aWNhbEluZGV4ID0gY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5k
ZXgoKTsKKyAgICBpZiAoYWN0aXZlVmVydGljYWxJbmRleCA8IHZlcnRpY2FsLnNpemUoKSkKKyAg
ICAgICAgY29ycmVjdGVkUG9zaXRpb24uc2V0WSh2ZXJ0aWNhbFthY3RpdmVWZXJ0aWNhbEluZGV4
XS50b0ludCgpKTsKIAogICAgIHJldHVybiBjb3JyZWN0ZWRQb3NpdGlvbjsKIH0KQEAgLTYxMSw2
ICs1OTksODAgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkK
ICAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvcnJlY3RlZFBvc2l0aW9u
KTsKICAgICB9CiB9CisKK1Njcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiogU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbFNuYXBPZmZzZXRJbmZvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
bmFwT2Zmc2V0c0luZm8uZ2V0KCk7Cit9CisKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNu
YXBPZmZzZXRzRm9yRWxlbWVudChjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gs
IGNvbnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmll
d3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRlcykKK3sKKyAgICBhdXRvIHNjcm9sbFNuYXBU
eXBlID0gc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNjcm9sbFNuYXBUeXBlKCk7CisgICAgY29uc3Qg
YXV0byYgYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucyA9IHNjcm9sbGluZ0VsZW1lbnRCb3gu
dmlldygpLmJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMoKTsKKyAgICBpZiAoc2Nyb2xsU25h
cFR5cGUuc3RyaWN0bmVzcyA9PSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6Tm9uZSB8fCBib3hlc1dp
dGhTY3JvbGxTbmFwUG9zaXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBjbGVhclNuYXBPZmZz
ZXRzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGhhc0hvcml6b250YWxT
bmFwT2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OkJvdGgg
fHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6WEF4aXMgfHwgc2Nyb2xs
U25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6SW5saW5lOworICAgIGJvb2wgaGFzVmVy
dGljYWxTbmFwT2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6
OkJvdGggfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6WUF4aXMgfHwg
c2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6QmxvY2s7CisKKyAgICBhdXRv
IG1heFNjcm9sbE9mZnNldCA9IG1heGltdW1TY3JvbGxPZmZzZXQoKTsKKyAgICBhdXRvIHNjcm9s
bFBvc2l0aW9uID0gTGF5b3V0UG9pbnQgeyB0aGlzLT5zY3JvbGxQb3NpdGlvbigpIH07CisgICAg
Ym9vbCBzY3JvbGxlcklzUlRMID0gIXNjcm9sbGluZ0VsZW1lbnRCb3guc3R5bGUoKS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCk7CisKKyAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBzY3JvbGxpbmcg
Y29udGFpbmVyJ3Mgc25hcCBwb3J0LCB3aGVyZSB0aGUgdG9wIGxlZnQgb2YgdGhlIHNjcm9sbGlu
ZyBjb250YWluZXIncyBib3JkZXIgYm94IGlzIHRoZSBvcmlnaW4uCisgICAgYXV0byBzY3JvbGxT
bmFwUG9ydCA9IGNvbXB1dGVTY3JvbGxTbmFwUG9ydE9yQXJlYVJlY3Qodmlld3BvcnRSZWN0SW5C
b3JkZXJCb3hDb29yZGluYXRlcywgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNjcm9sbFBhZGRpbmco
KSwgSW5zZXRPck91dHNldDo6SW5zZXQpOworICAgIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxk
ZXIgYnVpbGRlcihzY3JvbGxTbmFwVHlwZS5zdHJpY3RuZXNzKTsKKyAgICBMT0dfV0lUSF9TVFJF
QU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJDb21wdXRpbmcgc2Nyb2xsIHNuYXAgb2Zmc2V0cyBm
b3IgIiA8PCB0aGlzIDw8ICIgaW4gc25hcCBwb3J0ICIgPDwgc2Nyb2xsU25hcFBvcnQpOworICAg
IGZvciAoYXV0byogY2hpbGQgOiBib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zKSB7CisgICAg
ICAgIGlmIChjaGlsZC0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lckZvclNuYXBwaW5nKCkg
IT0gJnNjcm9sbGluZ0VsZW1lbnRCb3gpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAvLyBUaGUgYm91bmRzIG9mIHRoZSBjaGlsZCBlbGVtZW50J3Mgc25hcCBhcmVhLCB3aGVyZSB0
aGUgdG9wIGxlZnQgb2YgdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBib3JkZXIgYm94IGlzIHRo
ZSBvcmlnaW4uCisgICAgICAgIC8vIFRoZSBzbmFwIGFyZWEgaXMgdGhlIGJvdW5kaW5nIGJveCBv
ZiB0aGUgY2hpbGQgZWxlbWVudCdzIGJvcmRlciBib3gsIGFmdGVyIGFwcGx5aW5nIHRyYW5zZm9y
bWF0aW9ucy4KKyAgICAgICAgLy8gRklYTUU6IEZvciBub3csIGp1c3QgY29uc2lkZXIgd2hldGhl
ciB0aGUgc2Nyb2xsZXIgaXMgUlRMLiBUaGUgYmVoYXZpb3Igb2YgTFRSIGJveGVzIGluc2lkZSBh
IFJUTCBzY3JvbGxlciBpcyBwb29ybHkgZGVmaW5lZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9j
c3N3Zy1kcmFmdHMvaXNzdWVzLzUzNjEuCisgICAgICAgIGF1dG8gc2Nyb2xsU25hcEFyZWEgPSBM
YXlvdXRSZWN0KGNoaWxkLT5sb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFF1YWQoY2hpbGQtPmJv
cmRlckJvdW5kaW5nQm94KCkpLCAmc2Nyb2xsaW5nRWxlbWVudEJveCkuYm91bmRpbmdCb3goKSk7
CisKKyAgICAgICAgLy8gbG9jYWxUb0NvbnRhaW5lclF1YWQgd2lsbCB0cmFuc2Zvcm0gdGhlIHNj
cm9sbCBzbmFwIGFyZWEgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbiwgZXhjZXB0IGluIHRoZSBjYXNl
IHRoYXQgdGhpcyBwb3NpdGlvbiBpcworICAgICAgICAvLyBjb21pbmcgZnJvbSBhIFNjcm9sbFZp
ZXcuIFdlIHdhbnQgdGhlIHRyYW5zZm9ybWVkIGFyZWEsIGJ1dCB3aXRob3V0IHNjcm9sbCBwb3Np
dGlvbiB0YWtlbiBpbnRvIGFjY291bnQuCisgICAgICAgIGlmICghaXNTY3JvbGxWaWV3KCkpCisg
ICAgICAgICAgICBzY3JvbGxTbmFwQXJlYS5tb3ZlQnkoc2Nyb2xsUG9zaXRpb24pOworCisgICAg
ICAgIHNjcm9sbFNuYXBBcmVhID0gY29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdChzY3Jv
bGxTbmFwQXJlYSwgY2hpbGQtPnN0eWxlKCkuc2Nyb2xsTWFyZ2luKCksIEluc2V0T3JPdXRzZXQ6
Ok91dHNldCk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwg
IiAgICBDb25zaWRlcmluZyBzY3JvbGwgc25hcCB0YXJnZXQgYXJlYSAiIDw8IHNjcm9sbFNuYXBB
cmVhKTsKKyAgICAgICAgYXV0byBhbGlnbm1lbnQgPSBjaGlsZC0+c3R5bGUoKS5zY3JvbGxTbmFw
QWxpZ24oKTsKKyAgICAgICAgaWYgKGhhc0hvcml6b250YWxTbmFwT2Zmc2V0cyAmJiBhbGlnbm1l
bnQueCAhPSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Tm9uZSkgeworICAgICAgICAgICAgYXV0
byBhYnNvbHV0ZVNjcm9sbFhQb3NpdGlvbiA9IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQo
c2Nyb2xsU25hcEFyZWEueCgpLCBzY3JvbGxTbmFwQXJlYS5tYXhYKCksIGFsaWdubWVudC54LCBz
Y3JvbGxlcklzUlRMKSAtIGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25hcFBv
cnQueCgpLCBzY3JvbGxTbmFwUG9ydC5tYXhYKCksIGFsaWdubWVudC54LCBzY3JvbGxlcklzUlRM
KTsKKyAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxPZmZzZXQgPSBjbGFtcFRvPGludD4o
c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHsgcm91bmRUb0ludChhYnNvbHV0ZVNjcm9sbFhQb3Np
dGlvbiksIDAgfSkueCgpLCAwLCBtYXhTY3JvbGxPZmZzZXQueCgpKTsKKyAgICAgICAgICAgIGJ1
aWxkZXIuYWRkSG9yaXpvbnRhbE9mZnNldChhYnNvbHV0ZVNjcm9sbE9mZnNldCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGhhc1ZlcnRpY2FsU25hcE9mZnNldHMgJiYgYWxpZ25tZW50LnkgIT0g
U2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6Ok5vbmUpIHsKKyAgICAgICAgICAgIGF1dG8gYWJzb2x1
dGVTY3JvbGxZUG9zaXRpb24gPSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNu
YXBBcmVhLnkoKSwgc2Nyb2xsU25hcEFyZWEubWF4WSgpLCBhbGlnbm1lbnQueSwgZmFsc2UpIC0g
Y29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwUG9ydC55KCksIHNjcm9sbFNu
YXBQb3J0Lm1heFkoKSwgYWxpZ25tZW50LnksIGZhbHNlKTsKKyAgICAgICAgICAgIGF1dG8gYWJz
b2x1dGVTY3JvbGxPZmZzZXQgPSBjbGFtcFRvPGludD4oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9u
KHsgMCwgcm91bmRUb0ludChhYnNvbHV0ZVNjcm9sbFlQb3NpdGlvbikgfSkueSgpLCAwLCBtYXhT
Y3JvbGxPZmZzZXQueSgpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYWRkVmVydGljYWxPZmZzZXQo
YWJzb2x1dGVTY3JvbGxPZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9zbmFwT2Zm
c2V0c0luZm8gPSBidWlsZGVyLmJ1aWxkKHNjcm9sbFNuYXBQb3J0KTsKKyAgICBBU1NFUlQobV9z
bmFwT2Zmc2V0c0luZm8pOworCisgICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mby0+aG9yaXpvbnRh
bFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xs
U25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgaG9yaXpvbnRhbCBzY3JvbGwgc25hcCBvZmZz
ZXRzOiAiIDw8IGhvcml6b250YWxTbmFwT2Zmc2V0cyk7CisgICAgICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21wdXRlZCBob3Jpem9udGFsIHNjcm9sbCBz
bmFwIG9mZnNldCByYW5nZXM6ICIgPDwgaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMpOworICAg
IH0gZWxzZQorICAgICAgICBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPSAwOwor
CisgICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mby0+dmVydGljYWxTbmFwT2Zmc2V0cy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+
IENvbXB1dGVkIHZlcnRpY2FsIHNjcm9sbCBzbmFwIG9mZnNldHM6ICIgPDwgdmVydGljYWxTbmFw
T2Zmc2V0cyk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwg
IiA9PiBDb21wdXRlZCB2ZXJ0aWNhbCBzY3JvbGwgc25hcCBvZmZzZXQgcmFuZ2VzOiAiIDw8IHZl
cnRpY2FsU25hcE9mZnNldFJhbmdlcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY3VycmVudFZl
cnRpY2FsU25hcFBvaW50SW5kZXggPSAwOworCisgICAgLy8gQ29uc2lkZXIgaGF2aW5nIGEgbm9u
LWVtcHR5IHNldCBvZiBzbmFwIG9mZnNldHMgYXMgYSBjdWUgdG8gaW5pdGlhbGl6ZSB0aGUgU2Ny
b2xsQW5pbWF0b3IuCisgICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mby0+aXNFbXB0eSgpKQorICAg
ICAgICBzY3JvbGxBbmltYXRvcigpOworfQogI2Vsc2UKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVw
ZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuaAppbmRleCA4NTFhMDJmY2JiM2U5NzY5MWJmMDFkOWIyMTA5NzFkOWFlNmQ3OTQ5Li4z
YzY2ZGMzMjUzZmE3OWVjZmNiNjg5NjY1NjE1ZjBjOWU0NGU1MzgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKQEAgLTQ0LDYgKzQ0LDggQEAgY2xhc3MgTGF5b3V0
UG9pbnQ7CiBjbGFzcyBMYXlvdXRTaXplOwogY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwogY2xh
c3MgUGxhdGZvcm1XaGVlbEV2ZW50OworY2xhc3MgUmVuZGVyQm94OworY2xhc3MgUmVuZGVyU3R5
bGU7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBU
aWxlZEJhY2tpbmc7CkBAIC05MSwxNCArOTMsMTYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiogdmVydGljYWxTbmFwT2Zmc2V0cygpIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlv
dXRVbml0Pj4qIGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiogdmVy
dGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xs
U25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+KiBzY3JvbGxTbmFwT2Zmc2V0SW5mbygpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIHsgfTsKLSAgICB2b2lkIHNl
dEhvcml6b250YWxTbmFwT2Zmc2V0cyhjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mKTsKLSAgICB2
b2lkIHNldFZlcnRpY2FsU25hcE9mZnNldHMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+Jik7Ci0g
ICAgdm9pZCBzZXRIb3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyhjb25zdCBWZWN0b3I8U2Nyb2xs
T2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+Jik7Ci0gICAgdm9pZCBzZXRWZXJ0aWNhbFNuYXBPZmZz
ZXRSYW5nZXMoY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYpOwor
CisgICAgLy8gVXBkYXRlIHRoZSBzbmFwIG9mZnNldHMgZm9yIHRoaXMgc2Nyb2xsYWJsZSBhcmVh
LCBnaXZlbiB0aGUgUmVuZGVyQm94IG9mIHRoZSBzY3JvbGwgY29udGFpbmVyLCB0aGUgUmVuZGVy
U3R5bGUKKyAgICAvLyB3aGljaCBkZWZpbmVzIHRoZSBzY3JvbGwtc25hcCBwcm9wZXJ0aWVzLCBh
bmQgdGhlIHZpZXdwb3J0IHJlY3RhbmdsZSB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0
IG9mCisgICAgLy8gdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBib3JkZXIgYm94LgorICAgIHZv
aWQgdXBkYXRlU25hcE9mZnNldHNGb3JFbGVtZW50KGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5n
RWxlbWVudEJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5
b3V0UmVjdCB2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzKTsKKwogICAgIHZvaWQg
Y2xlYXJTbmFwT2Zmc2V0cygpOwotICAgIHZvaWQgY2xlYXJIb3Jpem9udGFsU25hcE9mZnNldHMo
KTsKLSAgICB2b2lkIGNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cygpOworCiAgICAgdW5zaWduZWQg
Y3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dEhvcml6b250YWxTbmFwUG9pbnRJbmRleDsgfQogICAgIHZvaWQgc2V0Q3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleCh1bnNpZ25lZCBpbmRleCkgeyBtX2N1cnJlbnRIb3Jpem9udGFsU25h
cFBvaW50SW5kZXggPSBpbmRleDsgfQogICAgIHVuc2lnbmVkIGN1cnJlbnRWZXJ0aWNhbFNuYXBQ
b2ludEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRl
eDsgfQpAQCAtMzgzLDcgKzM4Nyw2IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBz
aG91bGQgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIHBlcmZvcm0gdGhlIGFjdHVhbAog
ICAgIC8vIHNjcm9sbCBvZiB0aGUgY29udGVudC4KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
T2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpID0gMDsKLSAgICBTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm88TGF5b3V0VW5pdD4mIGVuc3VyZVNuYXBPZmZzZXRzSW5mbygpOwogCiAgICAgbXV0YWJsZSBz
dGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IG1fc2Nyb2xsQW5pbWF0b3I7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAppbmRleCBm
YjJhYTg2MzdjZjhjNzMwZWVjMWU0MzNmZDZhYjAxMDhmZDliMTEyLi5mOTg5N2Q5N2U1MmI3M2Rm
MTBlZWY5NzFmZjYzY2M1NGExZWQzMzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCkBAIC0xNjAsMTMgKzE2MCwxMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKIAogI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhp
cywgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiwgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJh
bmdlPExheW91dFVuaXQ+PiYpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3Jv
bGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4qKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbFNu
YXBQb2ludHMoY29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+Jik7CiAgICAg
dm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcywgdW5z
aWduZWQpOwogICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQoU2Ny
b2xsT2Zmc2V0KTsKICAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlOyB9CiAgICAgdm9p
ZCBzZXRTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoYm9vbCBzdGF0ZSkgeyBtX2FjdGl2ZVNjcm9s
bFNuYXBJbmRleERpZENoYW5nZSA9IHN0YXRlOyB9CiAgICAgdW5zaWduZWQgYWN0aXZlU2Nyb2xs
U25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsU25hcFN0YXRlKGNvbnN0IFNjcm9sbGFibGVBcmVhJik7CiAKICAgICB2b2lkIHVwZGF0
ZUdlc3R1cmVJblByb2dyZXNzU3RhdGUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tCmlu
ZGV4IDdiZjAwNTEwZWQ5OWIyZWRhZWJhNjIzOWUyZjM5OWExMzM3NDdjOTEuLjZkZGZhMzhkYzA4
YTk0NDdkM2RmM2MyMmZjNDQ2N2M0ZTlkOGIzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQpAQCAtODEsMTEgKzgxLDYgQEAgc3Rh
dGljIGZsb2F0IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpCiB9CiAjZW5kaWYKIAotc3RhdGljIFNj
cm9sbEV2ZW50QXhpcyBvdGhlclNjcm9sbEV2ZW50QXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykK
LXsKLSAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBTY3Jv
bGxFdmVudEF4aXM6OlZlcnRpY2FsIDogU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsOwotfQot
CiBTY3JvbGxDb250cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKFNjcm9sbENvbnRyb2xsZXJDbGll
bnQmIGNsaWVudCkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKIHsKQEAgLTcyMCw3ICs3MTUsNyBA
QCBib29sIFNjcm9sbENvbnRyb2xsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmCiAgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9zY3JvbGxTbmFwU3RhdGUtPnNuYXBPZmZz
ZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpLmlzRW1wdHkoKSAmJiBtX3Nj
cm9sbFNuYXBTdGF0ZS0+c25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGlj
YWwpLmlzRW1wdHkoKSkKKyAgICBpZiAobV9zY3JvbGxTbmFwU3RhdGUtPnNuYXBPZmZzZXRzSW5m
bygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBzdGF0dXMg
PSB0b1doZWVsRXZlbnRTdGF0dXMod2hlZWxFdmVudC5waGFzZSgpLCB3aGVlbEV2ZW50Lm1vbWVu
dHVtUGhhc2UoKSk7CkBAIC04MjAsNDYgKzgxNSwzMSBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnNjcm9sbFNuYXBUaW1lckZpcmVkKCkKIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKLXZv
aWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKGNvbnN0IFNjcm9sbGFi
bGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Ny
b2xsU25hcFBvaW50cyhTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4qIHNuYXBPZmZz
ZXRzSW5mbykKIHsKLSAgICBpZiAoYXV0byogc25hcE9mZnNldHMgPSBzY3JvbGxhYmxlQXJlYS5o
b3Jpem9udGFsU25hcE9mZnNldHMoKSkgewotICAgICAgICBpZiAoYXV0byogc25hcE9mZnNldFJh
bmdlcyA9IHNjcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKCkpCi0gICAg
ICAgICAgICB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCwgKnNuYXBPZmZzZXRzLCAqc25hcE9mZnNldFJhbmdlcyk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
LCAqc25hcE9mZnNldHMsIHsgfSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHVwZGF0ZVNjcm9sbFNu
YXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCB7IH0sIHsgfSk7Ci0KLSAgICBp
ZiAoYXV0byogc25hcE9mZnNldHMgPSBzY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNuYXBPZmZzZXRz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHNuYXBPZmZzZXRSYW5nZXMgPSBzY3JvbGxhYmxlQXJl
YS52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoKSkKLSAgICAgICAgICAgIHVwZGF0ZVNjcm9sbFNu
YXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgKnNuYXBPZmZzZXRzLCAqc25hcE9m
ZnNldFJhbmdlcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVwZGF0ZVNjcm9sbFNuYXBQ
b2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgKnNuYXBPZmZzZXRzLCB7IH0pOwotICAg
IH0gZWxzZQotICAgICAgICB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpczo6
VmVydGljYWwsIHsgfSwgeyB9KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBz
dHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgdXBkYXRlU2Nyb2xsU25h
cFN0YXRlIGZvciAiIDw8IHNjcm9sbGFibGVBcmVhIDw8ICIgbmV3IHN0YXRlICIgPDwgVmFsdWVP
ck51bGwobV9zY3JvbGxTbmFwU3RhdGUuZ2V0KCkpKTsKKyAgICBpZiAoIXNuYXBPZmZzZXRzSW5m
bykgeworICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgdXBkYXRlU2Nyb2xsU25hcFBvaW50cygqc25hcE9mZnNldHNJbmZvKTsK
IH0KIAotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9s
bEV2ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBQb2ludHMsIGNv
bnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBSYW5nZXMpCit2
b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoY29uc3QgU2Nyb2xs
U25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0c0luZm8pCiB7Ci0gICAgYm9v
bCBzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzID0gZmFsc2U7Ci0gICAgaWYgKCFtX3Nj
cm9sbFNuYXBTdGF0ZSkgewotICAgICAgICBpZiAoc25hcFBvaW50cy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgaWYgKHNuYXBPZmZzZXRzSW5mby5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAg
fQogCisgICAgYm9vbCBzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzID0gIW1fc2Nyb2xs
U25hcFN0YXRlOworICAgIGlmICghbV9zY3JvbGxTbmFwU3RhdGUpCiAgICAgICAgIG1fc2Nyb2xs
U25hcFN0YXRlID0gbWFrZVVuaXF1ZTxTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZT4oKTsKLSAgICAg
ICAgc2hvdWxkQ29tcHV0ZUN1cnJlbnRTbmFwSW5kaWNlcyA9IHRydWU7Ci0gICAgfQogCi0gICAg
aWYgKHNuYXBQb2ludHMuaXNFbXB0eSgpICYmIG1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0
c0ZvckF4aXMob3RoZXJTY3JvbGxFdmVudEF4aXMoYXhpcykpLmlzRW1wdHkoKSkKLSAgICAgICAg
bV9zY3JvbGxTbmFwU3RhdGUgPSBudWxscHRyOwotICAgIGVsc2UgewotICAgICAgICBtX3Njcm9s
bFNuYXBTdGF0ZS0+c2V0U25hcE9mZnNldHNBbmRQb3NpdGlvblJhbmdlc0ZvckF4aXMoYXhpcywg
c25hcFBvaW50cywgc25hcFJhbmdlcyk7Ci0gICAgICAgIGlmIChzaG91bGRDb21wdXRlQ3VycmVu
dFNuYXBJbmRpY2VzKSB7Ci0gICAgICAgICAgICBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlc0Zv
ck9mZnNldChyb3VuZGVkSW50UG9pbnQobV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkpKTsKLSAgICAg
ICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRy
b2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMgLSBjb21wdXRlZCBpbml0aWFsIHNuYXAgaW5k
aWNlczogeCAiIDw8IG1fc2Nyb2xsU25hcFN0YXRlLT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkgPDwgIiwgeSAiIDw8IG1fc2Nyb2xsU25hcFN0YXRl
LT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKLSAg
ICAgICAgfQorICAgIG1fc2Nyb2xsU25hcFN0YXRlLT5zZXRTbmFwT2Zmc2V0SW5mbyhzbmFwT2Zm
c2V0c0luZm8pOworCisgICAgaWYgKHNob3VsZENvbXB1dGVDdXJyZW50U25hcEluZGljZXMpIHsK
KyAgICAgICAgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQocm91bmRlZEludFBv
aW50KG1fY2xpZW50LnNjcm9sbE9mZnNldCgpKSk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQ
b2ludHMgLSBjb21wdXRlZCBpbml0aWFsIHNuYXAgaW5kaWNlczogeCAiIDw8IG1fc2Nyb2xsU25h
cFN0YXRlLT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCkgPDwgIiwgeSAiIDw8IG1fc2Nyb2xsU25hcFN0YXRlLT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlz
KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKICAgICB9CiB9CiAKQEAgLTg4NywxNCArODY3
LDE0IEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZv
ckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzCiAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBt
X2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKTsKICAgICBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYg
c25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOwogCi0gICAgYXV0byBzbmFwT2Zmc2V0cyA9
IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoYXhpcyk7CisgICAgYXV0byBzbmFwT2Zmc2V0
cyA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0luZm8oKS5vZmZzZXRzRm9yQXhpcyhheGlzKTsKICAg
ICBpZiAoIXNuYXBPZmZzZXRzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTGF5b3V0
VW5pdCBjbGFtcGVkT2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgoTGF5b3V0VW5pdChvZmZzZXQg
LyBzY2FsZUZhY3RvciksIHNuYXBPZmZzZXRzLmZpcnN0KCkpLCBzbmFwT2Zmc2V0cy5sYXN0KCkp
OwogCiAgICAgdW5zaWduZWQgYWN0aXZlSW5kZXggPSAwOwotICAgIGNsb3Nlc3RTbmFwT2Zmc2V0
KHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoYXhpcyksIHNuYXBTdGF0ZS5zbmFwT2Zmc2V0
UmFuZ2VzRm9yQXhpcyhheGlzKSwgY2xhbXBlZE9mZnNldCwgMCwgYWN0aXZlSW5kZXgpOworICAg
IGNsb3Nlc3RTbmFwT2Zmc2V0KHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0luZm8oKSwgYXhpcywgY2xh
bXBlZE9mZnNldCwgMCwgYWN0aXZlSW5kZXgpOwogCiAgICAgaWYgKGFjdGl2ZUluZGV4ID09IGFj
dGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcykpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZS5oCmluZGV4IDBiY2U2YjhjNDdhY2ZiMzFlZDc2NWJiOTg2MDkxMGFjZGUyYWFkMzAuLmVl
MDdlY2E2MjkwNzRhNWRhZmM4ZGMwMTA2NmU2NDg4NjcwZTU5ODIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaApA
QCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKIAotI2luY2x1
ZGUgIkF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNp
bmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgpAQCAtNTMsMjcg
KzUyLDggQEAgZW51bSBjbGFzcyBTY3JvbGxTbmFwU3RhdGUgewogY2xhc3MgU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50
QXhpcyBheGlzKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsID8gbV9zbmFwT2Zmc2V0c1ggOiBtX3NuYXBPZmZzZXRzWTsKLSAg
ICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBz
bmFwT2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IG1f
c25hcE9mZnNldFJhbmdlc1ggOiBtX3NuYXBPZmZzZXRSYW5nZXNZOwotICAgIH0KLQotICAgIHZv
aWQgc2V0U25hcE9mZnNldHNBbmRQb3NpdGlvblJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
IGF4aXMsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3Rv
cjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRSYW5nZXMpCi0gICAg
ewotICAgICAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpIHsKLSAg
ICAgICAgICAgIG1fc25hcE9mZnNldHNYID0gc25hcE9mZnNldHM7Ci0gICAgICAgICAgICBtX3Nu
YXBPZmZzZXRSYW5nZXNYID0gc25hcE9mZnNldFJhbmdlczsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIG1fc25hcE9mZnNldHNZID0gc25hcE9mZnNldHM7Ci0gICAgICAgICAgICBtX3Nu
YXBPZmZzZXRSYW5nZXNZID0gc25hcE9mZnNldFJhbmdlczsKLSAgICAgICAgfQotICAgIH0KLQor
ICAgIGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYgc25hcE9mZnNldHNJ
bmZvKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwT2Zmc2V0c0luZm87IH0KKyAgICB2b2lkIHNldFNu
YXBPZmZzZXRJbmZvKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYgc25h
cE9mZnNldHNJbmZvKSB7IG1fc25hcE9mZnNldHNJbmZvID0gc25hcE9mZnNldHNJbmZvOyB9CiAg
ICAgU2Nyb2xsU25hcFN0YXRlIGN1cnJlbnRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dFN0YXRlOyB9CiAKICAgICB1bnNpZ25lZCBhY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpcyBheGlzKSBjb25zdApAQCAtOTgsMTcgKzc4LDE0IEBAIHB1YmxpYzoKICAgICB2b2lk
IHRyYW5zaXRpb25Ub0Rlc3RpbmF0aW9uUmVhY2hlZFN0YXRlKCk7CiAKIHByaXZhdGU6Ci0gICAg
ZmxvYXQgdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+
JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+
PiYgc25hcE9mZnNldFJhbmdlcywgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFydE9m
ZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IGRlbHRh
LCB1bnNpZ25lZCYgb3V0QWN0aXZlU25hcEluZGV4KSBjb25zdDsKKyAgICBmbG9hdCB0YXJnZXRP
ZmZzZXRGb3JTdGFydE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGZsb2F0IG1heFNjcm9sbE9mZnNl
dCwgZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHByZWRpY3RlZE9mZnNldCwgZmxvYXQgcGFnZVNj
YWxlLCBmbG9hdCBkZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkgY29uc3Q7CiAg
ICAgdm9pZCB0ZWFyZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSk7CiAgICAg
dm9pZCBzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSwgY29uc3QgRmxvYXRT
aXplJiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHBh
Z2VTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNldCwgY29uc3QgRmxvYXRTaXpl
JiBpbml0aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbERlbHRhKTsKIAogICAg
IFNjcm9sbFNuYXBTdGF0ZSBtX2N1cnJlbnRTdGF0ZSB7IFNjcm9sbFNuYXBTdGF0ZTo6VXNlcklu
dGVyYWN0aW9uIH07CiAKLSAgICBWZWN0b3I8TGF5b3V0VW5pdD4gbV9zbmFwT2Zmc2V0c1g7Ci0g
ICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiBtX3NuYXBPZmZzZXRSYW5n
ZXNYOworICAgIFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiBtX3NuYXBPZmZzZXRz
SW5mbzsKICAgICB1bnNpZ25lZCBtX2FjdGl2ZVNuYXBJbmRleFggeyAwIH07Ci0gICAgVmVjdG9y
PExheW91dFVuaXQ+IG1fc25hcE9mZnNldHNZOwotICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5n
ZTxMYXlvdXRVbml0Pj4gbV9zbmFwT2Zmc2V0UmFuZ2VzWTsKICAgICB1bnNpZ25lZCBtX2FjdGl2
ZVNuYXBJbmRleFkgeyAwIH07CiAKICAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9y
U3RhdGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5tbQppbmRleCA5NDUwNjAzNjU5ZmNhMThiZDJlYjc4MjAyM2ZhYzEzZDNhNjAxZTk0
Li4zNTZmOWViNjhkNWViNDg0ZGYyY2M5NDkxZmFlYjAxMjE5MmNiOTZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZS5tbQpAQCAtNTEsOCArNTEsOCBAQCB2b2lkIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpzZXR1
cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSBzdGF0ZSwgY29ucwogCiAgICAgbV9t
b21lbnR1bUNhbGN1bGF0b3IgPSBTY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3I6OmNyZWF0ZSh2
aWV3cG9ydFNpemUsIGNvbnRlbnRTaXplLCBpbml0aWFsT2Zmc2V0LCBpbml0aWFsRGVsdGEsIGlu
aXRpYWxWZWxvY2l0eSk7CiAgICAgYXV0byBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQgPSBtX21vbWVu
dHVtQ2FsY3VsYXRvci0+cHJlZGljdGVkRGVzdGluYXRpb25PZmZzZXQoKTsKLSAgICBmbG9hdCB0
YXJnZXRPZmZzZXRYID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQobV9zbmFwT2Zmc2V0c1gs
IG1fc25hcE9mZnNldFJhbmdlc1gsIGNvbnRlbnRTaXplLndpZHRoKCkgLSB2aWV3cG9ydFNpemUu
d2lkdGgoKSwgaW5pdGlhbE9mZnNldC54KCksIHByZWRpY3RlZFNjcm9sbFRhcmdldC53aWR0aCgp
LCBwYWdlU2NhbGUsIGluaXRpYWxEZWx0YS53aWR0aCgpLCBtX2FjdGl2ZVNuYXBJbmRleFgpOwot
ICAgIGZsb2F0IHRhcmdldE9mZnNldFkgPSB0YXJnZXRPZmZzZXRGb3JTdGFydE9mZnNldChtX3Nu
YXBPZmZzZXRzWSwgbV9zbmFwT2Zmc2V0UmFuZ2VzWSwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2
aWV3cG9ydFNpemUuaGVpZ2h0KCksIGluaXRpYWxPZmZzZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxU
YXJnZXQuaGVpZ2h0KCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRhLmhlaWdodCgpLCBtX2FjdGl2
ZVNuYXBJbmRleFkpOworICAgIGZsb2F0IHRhcmdldE9mZnNldFggPSB0YXJnZXRPZmZzZXRGb3JT
dGFydE9mZnNldChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIGNvbnRlbnRTaXplLndpZHRo
KCkgLSB2aWV3cG9ydFNpemUud2lkdGgoKSwgaW5pdGlhbE9mZnNldC54KCksIHByZWRpY3RlZFNj
cm9sbFRhcmdldC53aWR0aCgpLCBwYWdlU2NhbGUsIGluaXRpYWxEZWx0YS53aWR0aCgpLCBtX2Fj
dGl2ZVNuYXBJbmRleFgpOworICAgIGZsb2F0IHRhcmdldE9mZnNldFkgPSB0YXJnZXRPZmZzZXRG
b3JTdGFydE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBjb250ZW50U2l6ZS5oZWln
aHQoKSAtIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSwgaW5pdGlhbE9mZnNldC55KCksIHByZWRpY3Rl
ZFNjcm9sbFRhcmdldC5oZWlnaHQoKSwgcGFnZVNjYWxlLCBpbml0aWFsRGVsdGEuaGVpZ2h0KCks
IG1fYWN0aXZlU25hcEluZGV4WSk7CiAgICAgbV9tb21lbnR1bUNhbGN1bGF0b3ItPnNldFJldGFy
Z2V0ZWRTY3JvbGxPZmZzZXQoeyB0YXJnZXRPZmZzZXRYLCB0YXJnZXRPZmZzZXRZIH0pOwogICAg
IG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgbV9jdXJyZW50U3RhdGUg
PSBzdGF0ZTsKQEAgLTkxLDE0ICs5MSwxNSBAQCBGbG9hdFBvaW50IFNjcm9sbFNuYXBBbmltYXRv
clN0YXRlOjpjdXJyZW50QW5pbWF0ZWRTY3JvbGxPZmZzZXQoYm9vbCYgaXNBbmltYXRpbwogICAg
IHJldHVybiBtX21vbWVudHVtQ2FsY3VsYXRvci0+c2Nyb2xsT2Zmc2V0QWZ0ZXJFbGFwc2VkVGlt
ZShlbGFwc2VkVGltZSk7CiB9CiAKLWZsb2F0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjp0YXJn
ZXRPZmZzZXRGb3JTdGFydE9mZnNldChjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZz
ZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBzbmFwT2Zm
c2V0UmFuZ2VzLCBmbG9hdCBtYXhTY3JvbGxPZmZzZXQsIGZsb2F0IHN0YXJ0T2Zmc2V0LCBmbG9h
dCBwcmVkaWN0ZWRPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgaW5pdGlhbERlbHRhLCB1
bnNpZ25lZCYgb3V0QWN0aXZlU25hcEluZGV4KSBjb25zdAorZmxvYXQgU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGU6OnRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlz
LCBmbG9hdCBtYXhTY3JvbGxPZmZzZXQsIGZsb2F0IHN0YXJ0T2Zmc2V0LCBmbG9hdCBwcmVkaWN0
ZWRPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgaW5pdGlhbERlbHRhLCB1bnNpZ25lZCYg
b3V0QWN0aXZlU25hcEluZGV4KSBjb25zdAogeworICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRz
ID0gbV9zbmFwT2Zmc2V0c0luZm8ub2Zmc2V0c0ZvckF4aXMoYXhpcyk7CiAgICAgaWYgKHNuYXBP
ZmZzZXRzLmlzRW1wdHkoKSkgewogICAgICAgICBvdXRBY3RpdmVTbmFwSW5kZXggPSBpbnZhbGlk
U25hcE9mZnNldEluZGV4OwogICAgICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oc3RhcnRPZmZz
ZXQsIDAsIG1heFNjcm9sbE9mZnNldCk7CiAgICAgfQogCi0gICAgZmxvYXQgdGFyZ2V0T2Zmc2V0
ID0gY2xvc2VzdFNuYXBPZmZzZXQoc25hcE9mZnNldHMsIHNuYXBPZmZzZXRSYW5nZXMsIExheW91
dFVuaXQocHJlZGljdGVkT2Zmc2V0IC8gcGFnZVNjYWxlKSwgaW5pdGlhbERlbHRhLCBvdXRBY3Rp
dmVTbmFwSW5kZXgpOworICAgIGZsb2F0IHRhcmdldE9mZnNldCA9IGNsb3Nlc3RTbmFwT2Zmc2V0
KG1fc25hcE9mZnNldHNJbmZvLCBheGlzLCBMYXlvdXRVbml0KHByZWRpY3RlZE9mZnNldCAvIHBh
Z2VTY2FsZSksIGluaXRpYWxEZWx0YSwgb3V0QWN0aXZlU25hcEluZGV4KTsKICAgICBmbG9hdCBt
aW5pbXVtVGFyZ2V0T2Zmc2V0ID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHNuYXBPZmZzZXRzLmZpcnN0
KCkpOwogICAgIGZsb2F0IG1heGltdW1UYXJnZXRPZmZzZXQgPSBzdGQ6Om1pbjxmbG9hdD4obWF4
U2Nyb2xsT2Zmc2V0LCBzbmFwT2Zmc2V0cy5sYXN0KCkpOwogICAgIHRhcmdldE9mZnNldCA9IGNs
YW1wVG88ZmxvYXQ+KHRhcmdldE9mZnNldCwgbWluaW11bVRhcmdldE9mZnNldCwgbWF4aW11bVRh
cmdldE9mZnNldCk7CkBAIC0xMTUsMTIgKzExNiwxMiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxPZmZzZXRSYW5nZTxUPiYgcmFuZ2UpCiBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZSYgc3RhdGUpCiB7CiAgICAgdHMgPDwgIlNjcm9sbFNuYXBBbmltYXRvclN0YXRlIjsK
LSAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyB4Iiwgc3RhdGUuc25hcE9mZnNldHNG
b3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgic25hcCBvZmZzZXRzIHkiLCBzdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbCkpOwotICAgIGlmICghc3RhdGUuc25hcE9mZnNldFJhbmdlc0ZvckF4aXMo
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKS5pc0VtcHR5KCkpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic25hcCBvZmZzZXRzIHJhbmdlcyB4Iiwgc3RhdGUuc25hcE9mZnNldFJhbmdlc0Zv
ckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7Ci0gICAgaWYgKCFzdGF0ZS5zbmFw
T2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKS5pc0VtcHR5KCkp
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHJhbmdlcyB5Iiwgc3RhdGUu
c25hcE9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHgiLCBzdGF0ZS5zbmFwT2Zmc2V0c0luZm8o
KS5vZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyB5Iiwgc3RhdGUuc25hcE9mZnNldHNJbmZvKCkub2Zm
c2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOworICAgIGlmICghc3RhdGUu
c25hcE9mZnNldHNJbmZvKCkub2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwpLmlzRW1wdHkoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNl
dHMgcmFuZ2VzIHgiLCBzdGF0ZS5zbmFwT2Zmc2V0c0luZm8oKS5vZmZzZXRSYW5nZXNGb3JBeGlz
KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkpOworICAgIGlmICghc3RhdGUuc25hcE9mZnNl
dHNJbmZvKCkub2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKS5p
c0VtcHR5KCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHJhbmdlcyB5
Iiwgc3RhdGUuc25hcE9mZnNldHNJbmZvKCkub2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXM6OlZlcnRpY2FsKSk7CiAKICAgICB0cy5kdW1wUHJvcGVydHkoImFjdGl2ZSBzbmFwIGlu
ZGV4IHgiLCBzdGF0ZS5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9y
aXpvbnRhbCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWN0aXZlIHNuYXAgaW5kZXggeSIsIHN0
YXRlLmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMzI2ZTI4ZTYwYzQ3
OGIzYWFkNzY5YTZjMTQ1ZDNlNDRhMTAwNTlkMi4uNTE5MjViYWY3NzhlZWVkYmZjZmNjY2E0YTUz
ZTk5ZTdhYTMyZmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CkBAIC0xMzUsMTAgKzEzNSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCi0jaW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCi0jZW5kaWYKLQogI2RlZmlu
ZSBNSU5fSU5URVJTRUNUX0ZPUl9SRVZFQUwgMzIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzYxNiw3ICszNjEyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMoKQog
ICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQo
KS0+cmVuZGVyQm94KCk7Ci0gICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgq
dGhpcywgKmJveCwgYm94LT5zdHlsZSgpLCBib3gtPnBhZGRpbmdCb3hSZWN0KCkpOworICAgIHVw
ZGF0ZVNuYXBPZmZzZXRzRm9yRWxlbWVudCgqYm94LCBib3gtPnN0eWxlKCksIGJveC0+cGFkZGlu
Z0JveFJlY3QoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jl
c3MoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5
ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5SU9TLm1tCmluZGV4IDYyYWQ5ODUwNjllMjEyM2FkYzM2YmM3ODFjNzZmNTk3
NjFiNzg0NjMuLmQ4MTg5ZmRjODkyNzRmMDljOGViMjY0YThjNWRhNWY0NTg1ZDVjZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJ
T1MubW0KQEAgLTQxLDcgKzQxLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVU
cmVlLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotI2ltcG9ydCA8V2ViQ29yZS9B
eGlzU2Nyb2xsU25hcE9mZnNldHMuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFR5cGVzLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQppbmRl
eCA0YzI4OGU0YmFjMWI1ZTQ1OWRlYzc0ZmIzZTNiNWM4YjViZGNkOGY3Li41NjVmZDM2NTliZmI0
YzY2YTViOGEyNzEzZDA4NTQyOGU4MzFiYWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVl
L2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCkBAIC00NSw3ICs0
NSw2IEBACiAjaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KIAogI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCi0jaW1wb3J0IDxXZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaD4KICNlbmRpZgogCkBAIC0xMDks
NyArMTA4LDcgQEAgLSAodm9pZClzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZp
ZXcgKilzY3JvbGxWaWV3IHdpdGhWZWxvY2l0eTooQ0dQb2kKIAogICAgIGlmICghX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9mZnNldHMo
KS5pc0VtcHR5KCkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0IHBv
dGVudGlhbFNuYXBQb3NpdGlvbiA9IFdlYkNvcmU6OmNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxp
bmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRz
KCksIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRh
bFNuYXBPZmZzZXRSYW5nZXMoKSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCwgaW5kZXgp
OworICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBXZWJDb3JlOjpjbG9zZXN0
U25hcE9mZnNldChfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNu
YXBPZmZzdHNJbmZvKCksIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgaG9yaXpvbnRhbFRh
cmdldCwgdmVsb2NpdHkueCwgaW5kZXgpOwogICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxl
Z2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgo
aW5kZXgpOwogICAgICAgICBpZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250YWxU
YXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS53aWR0aCkKICAgICAgICAgICAgIHRhcmdl
dENvbnRlbnRPZmZzZXQtPnggPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247CkBAIC0xMTcsNyArMTE2
LDcgQEAgLSAodm9pZClzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilz
Y3JvbGxWaWV3IHdpdGhWZWxvY2l0eTooQ0dQb2kKIAogICAgIGlmICghX3Njcm9sbGluZ1RyZWVO
b2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuaXNFbXB0
eSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4OwotICAgICAgICBmbG9hdCBwb3RlbnRpYWxT
bmFwUG9zaXRpb24gPSBXZWJDb3JlOjpjbG9zZXN0U25hcE9mZnNldChfc2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldHMoKSwgX3Njcm9s
bGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS52ZXJ0aWNhbFNuYXBPZmZzZXRS
YW5nZXMoKSwgdmVydGljYWxUYXJnZXQsIHZlbG9jaXR5LnksIGluZGV4KTsKKyAgICAgICAgZmxv
YXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXQoX3Nj
cm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zbmFwT2Zmc3RzSW5mbygp
LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwg
aW5kZXgpOwogICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9k
ZSgpLnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KGluZGV4KTsKICAgICAgICAgaWYg
KHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGljYWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250
ZW50U2l6ZS5oZWlnaHQpCiAgICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gcG90
ZW50aWFsU25hcFBvc2l0aW9uOwo=
</data>
<flag name="commit-queue"
          id="431900"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414906</attachid>
            <date>2020-11-26 08:32:21 -0800</date>
            <delta_ts>2020-11-27 06:27:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219273-20201126173218.patch</filename>
            <type>text/plain</type>
            <size>90731</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU4OTczNDk1NDJmNTQx
NTk1NGNkN2Q2MDgyNmQxYzg0YWVjYWZlMy4uZTgwYTRiMDRlNmIxZDBiNWFjNjhjYWIwMzA1OTI3
NGQyMzJlMDRhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDIwLTExLTI2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBVc2UgU2Nyb2xs
U25hcE9mZnNldHNJbmZvIGluIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlIGFuZCBhYnN0cmFjdCBh
d2F5IHNvbWUgb2YgdGhlIGludGVybmFscyBvZiBTbmFwT2Zmc2V0c0luZm8gaW4gU2Nyb2xsYWJs
ZUFyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
IG9yZGVyIHRvIHN1cHBvcnQgbWFzb25yeSBsYXlvdXQgZm9yIENTUyBzY3JvbGwgc25hcCwgU2Ny
b2xsIG9mZnNldHMgd2lsbCBzb29uIG5vIGxvbmdlciBiZSBhIHNlcGFyYXRlIHNldCBvZiBvbmUg
ZGltZW5zaW9uYWwKKyAgICAgICAgdmVydGljYWwgYW5kIGhvcml6b250YWwgb2Zmc2V0cywgYnV0
IG9mZnNldCBwb2ludHMgaW4gdHdvIGRpbWVuc2lvbnMuIEFsbW9zdCBhbGwgb2YgdGhlIGV4aXN0
aW5nIHN1cHBvcnQgY29kZSBmb3Igc2Nyb2xsIHNuYXAKKyAgICAgICAgaXMgd3JpdHRlbiB3aXRo
IHRoZSBvbmUgZGltZW5zaW9uYWwgb2Zmc2V0cyBpbiBtaW5kLgorCisgICAgICAgIFRoaXMgcmVm
YWN0b3IgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGFic3RyYWN0aW5nIGF3YXkgdGhlIGRldGFp
bHMgb2Ygc2Nyb2xsIG9mZnNldHMgYnkgdXNpbmcgU2Nyb2xsU25hcE9mZnNldHNJbmZvIGluIG1v
cmUgcGxhY2VzCisgICAgICAgIHdoZXJlIHRoZSBvbmUgZGltZW5zaW9uYWwgc2V0IG9mIG9mZnNl
dHMgd2VyZSB1c2VkIGJlZm9yZS4gVGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZSBoZXJlIGlzIHRv
IHN0YXJ0IHVzaW5nIFNjcm9sbFNuYXBPZmZzZXRzSW5mbworICAgICAgICBpbiBTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZSBhbmQgaW4gU2Nyb2xsYWJsZUFyZWEuCisKKyAgICAgICAgVGhpcyBhbHNv
IGVsaW1pbmF0ZXMgQXhpc1Njcm9sbFNuYXBPZmZzZXRzIHdoaWNoIGhhcyBhbiBpbnRlcmZhY2Ug
dXNpbmcgb25lIGRpbWVuc2lvbmFsIHNjcm9sbCBvZmZzZXRzIGFuZCBtb3ZlcyB0aGUgY29kZQor
ICAgICAgICBpbnRvIFNjcm9sbFNuYXBPZmZzdHNJbmZvIGFuZCBTY3JvbGxhYmxlQXJlYS4gRmlu
YWxseSwgdGhpcyBjaGFuZ2UgYWRkcyBTY3JvbGxTbmFwT2Zmc2V0c0luZm9CdWlsZGVyIHRvIGhl
bHAgY29udmVydCBsYXlvdXQKKyAgICAgICAgcHJvcGVydGllcyBpbnRvIHNjcm9sbCBvZmZzZXRz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhlc2UgY2hhbmdlcyBzaG91bGQgbm90IG1vZGlm
eSBiZWhhdmlvci4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6IFJlbW92ZSBBeGlzU2Nyb2xs
U25hcE9mZnNldHMuaC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDogUmVtb3ZlIEF4aXNTY3JvbGxT
bmFwT2Zmc2V0cy5jcHAgYW5kIGFkZCBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVT
bmFwT2Zmc2V0cyk6IENoYW5nZXMgdG8gcmVmbGVjdCBuZXcgbWV0aG9kIG5hbWUuCisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKTog
TW92ZWQgZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuCisgICAgICAgIChXZWJDb3JlOjppbmRp
Y2VzT2ZOZWFyZXN0U25hcE9mZnNldHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNsb3Nl
c3RTbmFwT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXhpc1Byb3hp
bWl0eVNuYXBPZmZzZXRSYW5nZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNu
YXBPZmZzZXRzSW5mb0J1aWxkZXI6OlNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIpOiBBZGRl
ZCB0aGlzIGZhY3RvcnkgY2xhc3MsIHdoaWNoIGFic3RyYWN0cyBhd2F5IGNvbnN0cnVjdGlvbiBv
ZiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwT2Zm
c2V0c0luZm9CdWlsZGVyOjphZGRWZXJ0aWNhbE9mZnNldCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6YWRkSG9yaXpvbnRhbE9mZnNldCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6
YnVpbGQpOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0
c0luZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6aXNFbXB0
eSBjb25zdCk6IEFkZGVkIGhlbHBlciBmb3IgZGV0ZWN0aW5nIGVtcHR5IHNldHMgb2Ygb2Zmc2V0
cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6b2Zmc2V0c0ZvckF4
aXMgY29uc3QpOiBBZGRlZCBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwT2Zm
c2V0c0luZm86Om9mZnNldFJhbmdlc0ZvckF4aXMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oOiBSZW1vdmVkIHVubmVjZXNzYXJ5
IGhlYWRlciBpbmNsdWRlLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01vbWVu
dHVtQ2FsY3VsYXRvci5oOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6c25hcE9mZnNldHNJbmZvIGNvbnN0KTogQWRkZWQuCisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaDogUmVtb3ZlZCBhY2Nl
c3MgdG8gaG9yaXpvbnRhbAorICAgICAgICBhbmQgdmVydGljYWwgb2Zmc2V0cy4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yy5oOiBSZW1vdmVkIG1ldGhvZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnZlcnRUb0xheW91dFVuaXRzKTogQWRkZWQgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGZvciBTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjOjp1cGRhdGVGcm9tU3RhdGVOb2RlKTogQWx3YXlzIHRoZSBlbnRp
cmUgU2Nyb2xsU25hcE9mZnNldHNJbmZvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6dXBkYXRlU2Nyb2xsU25hcFBvaW50cyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSk6IFVwZGF0ZSB0byBy
ZWZsZWN0IG5ldyBhcmd1bWVudHMgdG8gU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25h
cFBvaW50cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlU2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0KTogTW92ZWQgaGVyZSBm
cm9tIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTY3Jv
bGxTbmFwQWxpZ25PZmZzZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjbGVhclNuYXBPZmZz
ZXRzKTogU2Nyb2xsYWJsZUFyZWEgaGFzIGEgU2Nyb2xsU25hcE9mZnNldHNJbmZvIGluc3RlYWQg
b2Ygc2VwYXJhdGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgb2Zmc2V0cy4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGFibGVBcmVhOjpuZWFyZXN0QWN0aXZlU25hcFBvaW50KTogVXBkYXRlIHRv
IHJlZmxlY3QgdGhpcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxT
bmFwT2Zmc2V0SW5mbyBjb25zdCk6IEFkZGVkIGdldHRlci4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjp1cGRhdGVTbmFwT2Zmc2V0c0ZvckVsZW1lbnQpOiBBZGRlZCB0aGlzIG1l
dGhvZCB3aGljaCBtYWlubHkgY29tZXMgZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMgYW5kIHVz
ZXMgdGhlIG5ldyBTY3JvbGxTbmFwT2Zmc2V0c0luZm9CdWlsZGVyLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTbmFwT2Zmc2V0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTbmFwT2Zmc2V0cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRh
bFNuYXBPZmZzZXRSYW5nZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWE6OnNldFZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y2xlYXJIb3Jpem9udGFsU25hcE9mZnNldHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNsZWFyVmVydGljYWxTbmFw
T2Zmc2V0cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDog
VXBkYXRlIHRvIHJlZmxlY3QgbmV3IGFuZCByZW1vdmVkIG1ldGhvZHMuCisgICAgICAgICogcGxh
dGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oOiBNb2RpZnkgYXJndW1lbnRzIHBhc3NlZCB0
byBtZXRob2RzLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW06
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZv
clNjcm9sbFNuYXApOiBVc2UgbmV3IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6aXNFbXB0eSBoZWxw
ZXIuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFw
UG9pbnRzKTogTm93IHNldCB0aGUgZW50aXJlIFNjcm9sbFNuYXBPZmZzZXRzSW5mbyBhdCBvbmNl
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c2V0TmVhcmVzdFNjcm9sbFNu
YXBJbmRleEZvckF4aXNBbmRPZmZzZXQpOiBBY2Nlc3MgdGhlIFNjcm9sbFNuYXBPZmZzZXRzSW5m
byBub3cgaW5zdGVhZCBvZiB0aGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgb2Zmc2V0cy4KKyAg
ICAgICAgKFdlYkNvcmU6Om90aGVyU2Nyb2xsRXZlbnRBeGlzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaDog
U3RvcmUgU25hcE9mZnNldHNJbmZvIGluc3RlYWQgb2YgdmVydGljYWwgYW5kIGhvcml6b250YWwg
b2Zmc2V0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpzbmFw
T2Zmc2V0c0luZm8gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBB
bmltYXRvclN0YXRlOjpzZXRTbmFwT2Zmc2V0SW5mbyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnNuYXBPZmZzZXRzRm9yQXhpcyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6c25hcE9m
ZnNldFJhbmdlc0ZvckF4aXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsU25hcEFuaW1hdG9yU3RhdGU6OnNldFNuYXBPZmZzZXRzQW5kUG9zaXRpb25SYW5nZXNGb3JB
eGlzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpz
ZXR1cEFuaW1hdGlvbkZvclN0YXRlKTogTW9kaWZpZWQgdG8gcGFzcyBTY3JvbGxTbmFwT2Zmc2V0
c0luZm8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6dGFyZ2V0
T2Zmc2V0Rm9yU3RhcnRPZmZzZXQgY29uc3QpOiBBY2NlcHRzIFNjcm9sbFNuYXBPZmZzdHNJbmZv
LgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IFVzZSBTY3JvbGxTbmFwT2Zmc3RzSW5m
byBmcm9tIHN0YXRlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMpOiBVcGRhdGUgdG8g
cmVmbGVjdCBuZXcgbWV0aG9kLgorCiAyMDIwLTExLTE2ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8
c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxleF0gSW1hZ2VzIGFzIGZsZXgg
aXRlbXMgc2hvdWxkIHVzZSB0aGUgb3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQgd2hlbiBkZWZpbmVk
IHRvIGNvbXB1dGUgdGhlIGxvZ2ljYWwgd2lkdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggN2ExMDliOGZmMWUwMTFm
N2I5ODFlM2IxNDE4MzZkZGJiNDIxNTQ5ZS4uMGE4Y2VhNjUwODZkOGMzNjcyNTdkYWYwNjFkYjQw
YzM0MmYzNDNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0xMS0yNiAgTWFydGlu
IFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgbWFp
bmZyYW1lIHRlc3RzIHRpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nL3Njcm9sbC1zbmFwCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3NTcKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzcxMzIyMTU0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbTogUmVtb3ZlIHVudXNlZCBpbmNsdWRlLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJT1MubW06IERpdHRvLgorCiAyMDIwLTExLTE5ICBXZW5zb24gSHNp
ZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTkx
NTEpOiBUaGUgIkNvbnZlcnQgVGV4dCB0byBUcmFkaXRpb25hbCBDaGluZXNlIiBzZXJ2aWNlcyBt
ZW51IGFjdGlvbiBpcyBicm9rZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDAyM2UxNTNkYTNjNjdk
ZTE3YTI1MmJlZjFjYWIyNjg3ZDQzOTMwNmQuLjRlYWI5YWIzMTgzMDNhODJiY2ZiMjQyNzNjZWY5
MWI2YTVhNDc0MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtOTM2LDcgKzkzNiw2IEBAIHNldChX
ZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuaAogCiAgICAgcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5oCi0gICAgcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmgKICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaAogICAg
IHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmgKICAgICBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb29yZGluYXRvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGFmY2Y0NWFhY2I0NzQ3
NDM2NDEzZjhhZTU5OWYzZGFlNGJlZGNkY2YuLjlmMzk4NzJmNGQxOTY4NjJlZmU3MWMwOTI4OTY4
OTYwODczYzhkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNzQzLDcgKzE3NDMsNyBAQCBwYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0LmNwcAogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdERpcmVjdGl2ZS5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwCi1wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwCitwYWdl
L3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJh
aW50cy5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhi
MjUxNGZkMmIyYjY1MzQwMjJiYjRkYWIyZDA2OGEwYmQwNTIwZmYuLjA4MmVjZmEzYjk2MjJkYTgx
YmZmZGY4OGJjM2U4YTg5MDU3NzU2YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyMjQsNyArNTIyNCw2IEBACiAJCUY0NEE1
RjU5MUZFRDM4RjIwMDdGNTk0NCAvKiBMZWdhY3lOU1Bhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0QTVGNTcxRkVEMzgzMDAw
N0Y1OTQ0IC8qIExlZ2FjeU5TUGFzdGVib2FyZFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ0RUJCRDkxREI1RDIxNDAwMjc3MzM0IC8q
IFN0YXRpY1JhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNDRFQkJEODFEQjVEMjE0MDAyNzczMzQgLyogU3RhdGljUmFuZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDU3NzVDRTI0MTQzN0Q1
MDAyREYxQTAgLyogSW5saW5lUGF0aERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0NTc3NUNEMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRo
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NUMyMzFDMTk5NUI3
M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDY3MjkyODFFMERFNjg1MDBBQ0MzRDgg
LyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9m
ZnNldHNJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRjQ2QzQ0N0UyMzQ2NTQ1NDAwMzlBNzlEIC8qIENsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0NkM0NDdDMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291
cmNlLmggKi87IH07CiAJCUY0Nzg3NTU0MTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzNzUs
NiArOTM3NCw3IEBACiAJCTVCMzA2OTVBMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZm
ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdMRHJhd0J1
ZmZlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjMwNjk1QjE4QjNEMzQ1
MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVCMzA2OTVDMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJzLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUI3QUI5RjYyNTY3REI3RTAwNjU5MkQwIC8qIFNjcm9sbFNuYXBPZmZzZXRz
SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxTbmFw
T2Zmc2V0c0luZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzAwMTUyMTI1
MDAxMTAwMDA5NEFBOTMgLyogVGV4dENvZGVjU2luZ2xlQnl0ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q29kZWNTaW5nbGVCeXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMwMDE1MjMyNTAwMTEwMTAwOTRBQTkzIC8qIFRleHRDb2Rl
Y1NpbmdsZUJ5dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvZGVj
U2luZ2xlQnl0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzM5MzA1RDFBQTBG
NkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gREZBQnl0ZWNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NDY4
LDggKzE2NDY4LDYgQEAKIAkJRjQ0RUJCRDgxREI1RDIxNDAwMjc3MzM0IC8qIFN0YXRpY1Jhbmdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY1JhbmdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NEVCQkRBMURCNUREOUQwMDI3NzMzNCAvKiBTdGF0
aWNSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0aWNS
YW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NTc3NUNEMjQxNDM3RDUw
MDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVQYXRoRGF0
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNDVDMjMxQjE5OTVCNzNCMDBBNkUy
RTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9m
ZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NjI4QTlFMjM0RDNCQkYw
MEJDODg0QyAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtUGFzdGVib2FyZENvY29hLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDYyRTc5RjI0MkFEQTNDMDAyMDREREQgLyogRHJhZ0Rh
dGFDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdE
YXRhQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NjJFN0EwMjQyQURB
M0QwMDIwNERERCAvKiBEcmFnSW1hZ2VDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERyYWdJbWFnZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTg0MjIsOCArMTg0MjAsNiBAQAogCQkJCTFBRjYyRUUyMTREQTIyQTcwMDQxNTU2
QyAvKiBtYWMgKi8sCiAJCQkJMEZGRDRENUUxODY1MUZBMzAwNTEyRjZFIC8qIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwICovLAogCQkJCTBGRkQ0RDVGMTg2NTFGQTMwMDUxMkY2RSAvKiBB
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggKi8sCi0JCQkJRjQ1QzIzMUIxOTk1QjczQjAwQTZF
MkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAgKi8sCi0JCQkJRjQ1QzIzMUMxOTk1Qjcz
QjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oICovLAogCQkJCTBGNjA1QUVBMTVG
OTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJMEY2MDVB
RUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8sCiAJCQkJMUFG
NjJFRTQxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKQEAg
LTE4NDczLDYgKzE4NDY5LDcgQEAKIAkJCQlBNkQ1QTk5QjE2MjlENzAwMDAyOTczMzAgLyogU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oICovLAogCQkJCTBGOTUxMEYyMjRGNDc2
OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwICovLAogCQkJCTBGOTUx
MEYwMjRGNDc2OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCAqLywKKwkJ
CQk1QjdBQjlGNjI1NjdEQjdFMDA2NTkyRDAgLyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCAq
LywKIAkJCQlGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9mZnNldHNJbmZv
LmggKi8sCiAJCQkJMEY2MzgzREIxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5n
VHJlZS5jcHAgKi8sCiAJCQkJMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Ny
b2xsaW5nVHJlZS5oICovLApAQCAtMzEwODQsNyArMzEwODEsNiBAQAogCQkJCTA3MDM2M0U2MTgx
QTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjlBRTIxMzUyMUFCQTQ4QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI5QUUyMTJEMjFBQjlFRUIwMDg2OTI4MyAvKiBBWElzb2xhdGVkVHJlZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJRjQ1QzIzMUUxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3Jv
bGxTbmFwT2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyMzgwRkJCOUMxRDAwNTEw
MjkzIC8qIEFYT2JqZWN0Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkxQzlGMkY5MUFFM0JF
QjAwMDk1QjYxQyAvKiBBWFRleHRTdGF0ZUNoYW5nZUludGVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3N0U3NzcwQkY0MTM0QTAwMTUyODcyIC8qIEJhY2tGb3J3YXJkQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGQ2N2I0NDAwMGE0ZTljYzky
MWNmZGQ5MGU5MDY0NTZiMzgzMmIxNWEuLmZjZDMwYWIwNzI2OGQzMGEwODg3MjQxMGI5OWU3N2Yz
N2JmMGY4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTExNywxMCArMTE3LDYg
QEAKICNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQotI2luY2x1ZGUgIkF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIgotI2Vu
ZGlmCi0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCiAjaW5jbHVkZSAiTGVnYWN5VGlsZUNhY2hlLmgiCkBAIC05NDksNyArOTQ1LDcgQEAgdm9p
ZCBGcmFtZVZpZXc6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKICAgICBMYXlvdXRSZWN0IHZpZXdwb3J0
ID0gTGF5b3V0UmVjdChJbnRQb2ludCgpLCBiYXNlTGF5b3V0Vmlld3BvcnRTaXplKCkpOwogICAg
IHZpZXdwb3J0Lm1vdmUoLXJvb3RSZW5kZXJlci0+bWFyZ2luTGVmdCgpLCAtcm9vdFJlbmRlcmVy
LT5tYXJnaW5Ub3AoKSk7CiAKLSAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVh
KCp0aGlzLCAqcm9vdFJlbmRlcmVyLCAqc3R5bGVUb1VzZSwgdmlld3BvcnQpOworICAgIHVwZGF0
ZVNuYXBPZmZzZXRzRm9yRWxlbWVudCgqcm9vdFJlbmRlcmVyLCAqc3R5bGVUb1VzZSwgdmlld3Bv
cnQpOwogfQogCiBib29sIEZyYW1lVmlldzo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25h
cE9mZnNldHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNu
YXBPZmZzZXRzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMzk4OThiOTgx
MzBiZDEzMmRjZWNlZGQ4ZmRjN2I4ZTRjY2QxMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Ny
b2xsU25hcE9mZnNldHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25h
cE9mZnNldHMuaCIKLQotI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJMZW5ndGguaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2lu
Y2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCi0jaW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFwUG9pbnRz
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLSNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0g
Y2xhc3MgSW5zZXRPck91dHNldCB7Ci0gICAgSW5zZXQsCi0gICAgT3V0c2V0Ci19OwotCi1zdGF0
aWMgTGF5b3V0UmVjdCBjb21wdXRlU2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0KGNvbnN0IExheW91
dFJlY3QmIHJlY3QsIGNvbnN0IExlbmd0aEJveCYgaW5zZXRPck91dHNldEJveCwgSW5zZXRPck91
dHNldCBpbnNldE9yT3V0c2V0KQotewotICAgIExheW91dEJveEV4dGVudCBleHRlbnRzKHZhbHVl
Rm9yTGVuZ3RoKGluc2V0T3JPdXRzZXRCb3gudG9wKCksIHJlY3QuaGVpZ2h0KCkpLCB2YWx1ZUZv
ckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LnJpZ2h0KCksIHJlY3Qud2lkdGgoKSksIHZhbHVlRm9y
TGVuZ3RoKGluc2V0T3JPdXRzZXRCb3guYm90dG9tKCksIHJlY3QuaGVpZ2h0KCkpLCB2YWx1ZUZv
ckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LmxlZnQoKSwgcmVjdC53aWR0aCgpKSk7Ci0gICAgYXV0
byBzbmFwUG9ydE9yQXJlYShyZWN0KTsKLSAgICBpZiAoaW5zZXRPck91dHNldCA9PSBJbnNldE9y
T3V0c2V0OjpJbnNldCkKLSAgICAgICAgc25hcFBvcnRPckFyZWEuY29udHJhY3QoZXh0ZW50cyk7
Ci0gICAgZWxzZQotICAgICAgICBzbmFwUG9ydE9yQXJlYS5leHBhbmQoZXh0ZW50cyk7Ci0gICAg
cmV0dXJuIHNuYXBQb3J0T3JBcmVhOwotfQotCi1zdGF0aWMgTGF5b3V0VW5pdCBjb21wdXRlU2Ny
b2xsU25hcEFsaWduT2Zmc2V0KExheW91dFVuaXQgbWluTG9jYXRpb24sIExheW91dFVuaXQgbWF4
TG9jYXRpb24sIFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlIGFsaWdubWVudCwgYm9vbCBheGlzSXNG
bGlwcGVkKQotewotICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7Ci0gICAgY2FzZSBTY3JvbGxTbmFw
QXhpc0FsaWduVHlwZTo6U3RhcnQ6Ci0gICAgICAgIHJldHVybiBheGlzSXNGbGlwcGVkID8gbWF4
TG9jYXRpb24gOiBtaW5Mb2NhdGlvbjsKLSAgICBjYXNlIFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBl
OjpDZW50ZXI6Ci0gICAgICAgIHJldHVybiAobWluTG9jYXRpb24gKyBtYXhMb2NhdGlvbikgLyAy
OwotICAgIGNhc2UgU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6OkVuZDoKLSAgICAgICAgcmV0dXJu
IGF4aXNJc0ZsaXBwZWQgPyBtaW5Mb2NhdGlvbiA6IG1heExvY2F0aW9uOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBTY3JvbGxPZmZzZXRSYW5nZTxUPiYgcmFuZ2UpCi17Ci0gICAgdHMg
PDwgInN0YXJ0OiAiIDw8IHJhbmdlLnN0YXJ0IDw8ICIgZW5kOiAiIDw8IHJhbmdlLmVuZDsKLSAg
ICByZXR1cm4gdHM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgotc3RhdGlj
IHZvaWQgaW5kaWNlc09mTmVhcmVzdFNuYXBPZmZzZXRSYW5nZXMoTGF5b3V0VHlwZSBvZmZzZXQs
IGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRUeXBlPj4mIHNuYXBPZmZzZXRS
YW5nZXMsIHVuc2lnbmVkJiBsb3dlckluZGV4LCB1bnNpZ25lZCYgdXBwZXJJbmRleCkKLXsKLSAg
ICBpZiAoc25hcE9mZnNldFJhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbG93ZXJJbmRleCA9
IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7Ci0gICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlkU25h
cE9mZnNldEluZGV4OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGxvd2VySW5k
ZXhBc0ludCA9IC0xOwotICAgIGludCB1cHBlckluZGV4QXNJbnQgPSBzbmFwT2Zmc2V0UmFuZ2Vz
LnNpemUoKTsKLSAgICBkbyB7Ci0gICAgICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4
QXNJbnQgKyB1cHBlckluZGV4QXNJbnQpIC8gMjsKLSAgICAgICAgYXV0byYgcmFuZ2UgPSBzbmFw
T2Zmc2V0UmFuZ2VzW21pZGRsZUluZGV4XTsKLSAgICAgICAgaWYgKHJhbmdlLnN0YXJ0IDwgb2Zm
c2V0ICYmIG9mZnNldCA8IHJhbmdlLmVuZCkgewotICAgICAgICAgICAgbG93ZXJJbmRleEFzSW50
ID0gbWlkZGxlSW5kZXg7Ci0gICAgICAgICAgICB1cHBlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRl
eDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9mZnNldCA+
IHJhbmdlLmVuZCkKLSAgICAgICAgICAgIGxvd2VySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4Owot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cHBlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRleDsK
LSAgICB9IHdoaWxlIChsb3dlckluZGV4QXNJbnQgPCB1cHBlckluZGV4QXNJbnQgLSAxKTsKLQot
ICAgIGlmIChvZmZzZXQgPD0gc25hcE9mZnNldFJhbmdlcy5maXJzdCgpLnN0YXJ0KQotICAgICAg
ICBsb3dlckluZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKLSAgICBlbHNlCi0gICAgICAg
IGxvd2VySW5kZXggPSBsb3dlckluZGV4QXNJbnQ7Ci0KLSAgICBpZiAob2Zmc2V0ID49IHNuYXBP
ZmZzZXRSYW5nZXMubGFzdCgpLmVuZCkKLSAgICAgICAgdXBwZXJJbmRleCA9IGludmFsaWRTbmFw
T2Zmc2V0SW5kZXg7Ci0gICAgZWxzZQotICAgICAgICB1cHBlckluZGV4ID0gdXBwZXJJbmRleEFz
SW50OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KLXN0YXRpYyB2b2lkIGlu
ZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0cyhMYXlvdXRUeXBlIG9mZnNldCwgY29uc3QgVmVjdG9y
PExheW91dFR5cGU+JiBzbmFwT2Zmc2V0cywgdW5zaWduZWQmIGxvd2VySW5kZXgsIHVuc2lnbmVk
JiB1cHBlckluZGV4KQotewotICAgIGxvd2VySW5kZXggPSAwOwotICAgIHVwcGVySW5kZXggPSBz
bmFwT2Zmc2V0cy5zaXplKCkgLSAxOwotICAgIHdoaWxlIChsb3dlckluZGV4IDwgdXBwZXJJbmRl
eCAtIDEpIHsKLSAgICAgICAgaW50IG1pZGRsZUluZGV4ID0gKGxvd2VySW5kZXggKyB1cHBlcklu
ZGV4KSAvIDI7Ci0gICAgICAgIGF1dG8gbWlkZGxlT2Zmc2V0ID0gc25hcE9mZnNldHNbbWlkZGxl
SW5kZXhdOwotICAgICAgICBpZiAob2Zmc2V0ID09IG1pZGRsZU9mZnNldCkgewotICAgICAgICAg
ICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4OwotICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1p
ZGRsZUluZGV4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
b2Zmc2V0ID4gbWlkZGxlT2Zmc2V0KQotICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRsZUlu
ZGV4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5kZXg7
Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb21wdXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRS
YW5nZXMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgVmVjdG9yPFNjcm9s
bE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgb2Zmc2V0UmFuZ2VzLCBMYXlvdXRVbml0IHNjcm9s
bFBvcnRBeGlzTGVuZ3RoKQotewotICAgIC8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IGNob2ljZSBm
b3Igd2hhdCBpdCBtZWFucyB0byBiZSAiaW4gcHJveGltaXR5IiBvZiBhIHNuYXAgb2Zmc2V0LiBX
ZSBzaG91bGQgcGxheSBhcm91bmQgd2l0aAotICAgIC8vIHRoaXMgYW5kIHNlZSB3aGF0IGZlZWxz
IGJlc3QuCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHJhdGlvT2ZTY3JvbGxQb3J0QXhpc0xlbmd0
aFRvQmVDb25zaWRlcmVkRm9yUHJveGltaXR5ID0gMC4zOwotICAgIGlmIChzbmFwT2Zmc2V0cy5z
aXplKCkgPCAyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgZXh0cmEgcnVsZSBhY2Nv
dW50aW5nIGZvciBzY3JvbGwgb2Zmc2V0IHJhbmdlcyBpbiBiZXR3ZWVuIHRoZSBzY3JvbGwgZGVz
dGluYXRpb24gYW5kIGEgcG90ZW50aWFsIHNuYXAgb2Zmc2V0Ci0gICAgLy8gaGFuZGxlcyB0aGUg
Y29ybmVyIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc2Nyb2xscyB3aXRoIG1vbWVudHVtIHZlcnkgbGln
aHRseSBhd2F5IGZyb20gYSBzbmFwIG9mZnNldCwgc3VjaCB0aGF0IHRoZQotICAgIC8vIHByZWRp
Y3RlZCBzY3JvbGwgZGVzdGluYXRpb24gaXMgc3RpbGwgd2l0aGluIHByb3hpbWl0eSBvZiB0aGUg
c25hcCBvZmZzZXQuIEluIHRoaXMgY2FzZSwgdGhlIHJlZ3VsYXIgKG1hbmRhdG9yeQotICAgIC8v
IHNjcm9sbCBzbmFwcGluZykgYmVoYXZpb3Igd291bGQgYmUgdG8gc25hcCB0byB0aGUgbmV4dCBv
ZmZzZXQgaW4gdGhlIGRpcmVjdGlvbiBvZiBtb21lbnR1bSBzY3JvbGxpbmcsIGJ1dAotICAgIC8v
IGluc3RlYWQsIGl0IGlzIG1vcmUgaW50dWl0aXZlIHRvIGVpdGhlciByZXR1cm4gdG8gdGhlIG9y
aWdpbmFsIHNuYXAgcG9zaXRpb24gKHdoaWNoIHdlIGFyYml0cmFyaWx5IGNob29zZSBoZXJlKQot
ICAgIC8vIG9yIHNjcm9sbCBqdXN0IG91dHNpZGUgb2YgdGhlIHNuYXAgb2Zmc2V0IHJhbmdlLiBU
aGlzIGlzIGFub3RoZXIgbWlub3IgYmVoYXZpb3IgdHdlYWsgdGhhdCB3ZSBzaG91bGQgcGxheSBh
cm91bmQKLSAgICAvLyB3aXRoIHRvIHNlZSB3aGF0IGZlZWxzIGJlc3QuCi0gICAgTGF5b3V0VW5p
dCBwcm94aW1pdHlEaXN0YW5jZSB7IHJhdGlvT2ZTY3JvbGxQb3J0QXhpc0xlbmd0aFRvQmVDb25z
aWRlcmVkRm9yUHJveGltaXR5ICogc2Nyb2xsUG9ydEF4aXNMZW5ndGggfTsKLSAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDE7IGluZGV4IDwgc25hcE9mZnNldHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0g
ICAgICAgIGF1dG8gc3RhcnRPZmZzZXQgPSBzbmFwT2Zmc2V0c1tpbmRleCAtIDFdICsgcHJveGlt
aXR5RGlzdGFuY2U7Ci0gICAgICAgIGF1dG8gZW5kT2Zmc2V0ID0gc25hcE9mZnNldHNbaW5kZXhd
IC0gcHJveGltaXR5RGlzdGFuY2U7Ci0gICAgICAgIGlmIChzdGFydE9mZnNldCA8IGVuZE9mZnNl
dCkKLSAgICAgICAgICAgIG9mZnNldFJhbmdlcy5hcHBlbmQoeyBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0IH0pOwotICAgIH0KLX0KLQotdm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVB
cmVhKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgY29uc3QgUmVuZGVyQm94JiBzY3Jv
bGxpbmdFbGVtZW50Qm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxl
LCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdEluQm9yZGVyQm94Q29vcmRpbmF0ZXMpCi17Ci0gICAg
YXV0byBzY3JvbGxTbmFwVHlwZSA9IHNjcm9sbGluZ0VsZW1lbnRTdHlsZS5zY3JvbGxTbmFwVHlw
ZSgpOwotICAgIGNvbnN0IGF1dG8mIGJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMgPSBzY3Jv
bGxpbmdFbGVtZW50Qm94LnZpZXcoKS5ib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zKCk7Ci0g
ICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0cmljdG5lc3MgPT0gU2Nyb2xsU25hcFN0cmljdG5lc3M6
Ok5vbmUgfHwgYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEuY2xlYXJTbmFwT2Zmc2V0cygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgVmVjdG9yPExheW91dFVuaXQ+IHZlcnRpY2FsU25hcE9mZnNldHM7Ci0gICAg
VmVjdG9yPExheW91dFVuaXQ+IGhvcml6b250YWxTbmFwT2Zmc2V0czsKLSAgICBWZWN0b3I8U2Ny
b2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+IHZlcnRpY2FsU25hcE9mZnNldFJhbmdlczsKLSAg
ICBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+IGhvcml6b250YWxTbmFwT2Zm
c2V0UmFuZ2VzOwotICAgIEhhc2hTZXQ8ZmxvYXQ+IHNlZW5WZXJ0aWNhbFNuYXBPZmZzZXRzOwot
ICAgIEhhc2hTZXQ8ZmxvYXQ+IHNlZW5Ib3Jpem9udGFsU25hcE9mZnNldHM7Ci0gICAgYm9vbCBo
YXNIb3Jpem9udGFsU25hcE9mZnNldHMgPSBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNu
YXBBeGlzOjpCb3RoIHx8IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OlhB
eGlzIHx8IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OklubGluZTsKLSAg
ICBib29sIGhhc1ZlcnRpY2FsU25hcE9mZnNldHMgPSBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNj
cm9sbFNuYXBBeGlzOjpCb3RoIHx8IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4
aXM6OllBeGlzIHx8IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OkJsb2Nr
OwotCi0gICAgYXV0byBtYXhTY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Ny
b2xsT2Zmc2V0KCk7Ci0gICAgYXV0byBzY3JvbGxQb3NpdGlvbiA9IExheW91dFBvaW50IHsgc2Ny
b2xsYWJsZUFyZWEuc2Nyb2xsUG9zaXRpb24oKSB9OwotICAgIGJvb2wgc2Nyb2xsZXJJc1JUTCA9
ICFzY3JvbGxpbmdFbGVtZW50Qm94LnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwot
Ci0gICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lcidzIHNuYXAgcG9y
dCwgd2hlcmUgdGhlIHRvcCBsZWZ0IG9mIHRoZSBzY3JvbGxpbmcgY29udGFpbmVyJ3MgYm9yZGVy
IGJveCBpcyB0aGUgb3JpZ2luLgotICAgIGF1dG8gc2Nyb2xsU25hcFBvcnQgPSBjb21wdXRlU2Ny
b2xsU25hcFBvcnRPckFyZWFSZWN0KHZpZXdwb3J0UmVjdEluQm9yZGVyQm94Q29vcmRpbmF0ZXMs
IHNjcm9sbGluZ0VsZW1lbnRTdHlsZS5zY3JvbGxQYWRkaW5nKCksIEluc2V0T3JPdXRzZXQ6Oklu
c2V0KTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJDb21wdXRp
bmcgc2Nyb2xsIHNuYXAgb2Zmc2V0cyBmb3IgIiA8PCBzY3JvbGxhYmxlQXJlYSA8PCAiIGluIHNu
YXAgcG9ydCAiIDw8IHNjcm9sbFNuYXBQb3J0KTsKLSAgICBmb3IgKGF1dG8qIGNoaWxkIDogYm94
ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucykgewotICAgICAgICBpZiAoY2hpbGQtPmVuY2xvc2lu
Z1Njcm9sbGFibGVDb250YWluZXJGb3JTbmFwcGluZygpICE9ICZzY3JvbGxpbmdFbGVtZW50Qm94
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUg
Y2hpbGQgZWxlbWVudCdzIHNuYXAgYXJlYSwgd2hlcmUgdGhlIHRvcCBsZWZ0IG9mIHRoZSBzY3Jv
bGxpbmcgY29udGFpbmVyJ3MgYm9yZGVyIGJveCBpcyB0aGUgb3JpZ2luLgotICAgICAgICAvLyBU
aGUgc25hcCBhcmVhIGlzIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIGNoaWxkIGVsZW1lbnQncyBi
b3JkZXIgYm94LCBhZnRlciBhcHBseWluZyB0cmFuc2Zvcm1hdGlvbnMuCi0gICAgICAgIC8vIEZJ
WE1FOiBGb3Igbm93LCBqdXN0IGNvbnNpZGVyIHdoZXRoZXIgdGhlIHNjcm9sbGVyIGlzIFJUTC4g
VGhlIGJlaGF2aW9yIG9mIExUUiBib3hlcyBpbnNpZGUgYSBSVEwgc2Nyb2xsZXIgaXMgcG9vcmx5
IGRlZmluZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy81MzYx
LgotICAgICAgICBhdXRvIHNjcm9sbFNuYXBBcmVhID0gTGF5b3V0UmVjdChjaGlsZC0+bG9jYWxU
b0NvbnRhaW5lclF1YWQoRmxvYXRRdWFkKGNoaWxkLT5ib3JkZXJCb3VuZGluZ0JveCgpKSwgJnNj
cm9sbGluZ0VsZW1lbnRCb3gpLmJvdW5kaW5nQm94KCkpOwotCi0gICAgICAgIC8vIGxvY2FsVG9D
b250YWluZXJRdWFkIHdpbGwgdHJhbnNmb3JtIHRoZSBzY3JvbGwgc25hcCBhcmVhIGJ5IHRoZSBz
Y3JvbGwgcG9zaXRpb24sIGV4Y2VwdCBpbiB0aGUgY2FzZSB0aGF0IHRoaXMgcG9zaXRpb24gaXMK
LSAgICAgICAgLy8gY29taW5nIGZyb20gYSBTY3JvbGxWaWV3LiBXZSB3YW50IHRoZSB0cmFuc2Zv
cm1lZCBhcmVhLCBidXQgd2l0aG91dCBzY3JvbGwgcG9zaXRpb24gdGFrZW4gaW50byBhY2NvdW50
LgotICAgICAgICBpZiAoIXNjcm9sbGFibGVBcmVhLmlzU2Nyb2xsVmlldygpKQotICAgICAgICAg
ICAgc2Nyb2xsU25hcEFyZWEubW92ZUJ5KHNjcm9sbFBvc2l0aW9uKTsKLQotICAgICAgICBzY3Jv
bGxTbmFwQXJlYSA9IGNvbXB1dGVTY3JvbGxTbmFwUG9ydE9yQXJlYVJlY3Qoc2Nyb2xsU25hcEFy
ZWEsIGNoaWxkLT5zdHlsZSgpLnNjcm9sbE1hcmdpbigpLCBJbnNldE9yT3V0c2V0OjpPdXRzZXQp
OwotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgICAgQ29u
c2lkZXJpbmcgc2Nyb2xsIHNuYXAgdGFyZ2V0IGFyZWEgIiA8PCBzY3JvbGxTbmFwQXJlYSk7Ci0g
ICAgICAgIGF1dG8gYWxpZ25tZW50ID0gY2hpbGQtPnN0eWxlKCkuc2Nyb2xsU25hcEFsaWduKCk7
Ci0gICAgICAgIGlmIChoYXNIb3Jpem9udGFsU25hcE9mZnNldHMgJiYgYWxpZ25tZW50LnggIT0g
U2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6Ok5vbmUpIHsKLSAgICAgICAgICAgIGF1dG8gYWJzb2x1
dGVTY3JvbGxYUG9zaXRpb24gPSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNu
YXBBcmVhLngoKSwgc2Nyb2xsU25hcEFyZWEubWF4WCgpLCBhbGlnbm1lbnQueCwgc2Nyb2xsZXJJ
c1JUTCkgLSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNuYXBQb3J0LngoKSwg
c2Nyb2xsU25hcFBvcnQubWF4WCgpLCBhbGlnbm1lbnQueCwgc2Nyb2xsZXJJc1JUTCk7Ci0gICAg
ICAgICAgICBhdXRvIGFic29sdXRlU2Nyb2xsT2Zmc2V0ID0gY2xhbXBUbzxpbnQ+KHNjcm9sbGFi
bGVBcmVhLnNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbih7IHJvdW5kVG9JbnQoYWJzb2x1dGVTY3Jv
bGxYUG9zaXRpb24pLCAwIH0pLngoKSwgMCwgbWF4U2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgICAg
ICAgICBpZiAoIXNlZW5Ib3Jpem9udGFsU25hcE9mZnNldHMuY29udGFpbnMoYWJzb2x1dGVTY3Jv
bGxPZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgc2Vlbkhvcml6b250YWxTbmFwT2Zmc2V0cy5h
ZGQoYWJzb2x1dGVTY3JvbGxPZmZzZXQpOwotICAgICAgICAgICAgICAgIGhvcml6b250YWxTbmFw
T2Zmc2V0cy5hcHBlbmQoYWJzb2x1dGVTY3JvbGxPZmZzZXQpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGlmIChoYXNWZXJ0aWNhbFNuYXBPZmZzZXRzICYmIGFsaWdubWVudC55
ICE9IFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpOb25lKSB7Ci0gICAgICAgICAgICBhdXRvIGFi
c29sdXRlU2Nyb2xsWVBvc2l0aW9uID0gY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3Jv
bGxTbmFwQXJlYS55KCksIHNjcm9sbFNuYXBBcmVhLm1heFkoKSwgYWxpZ25tZW50LnksIGZhbHNl
KSAtIGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25hcFBvcnQueSgpLCBzY3Jv
bGxTbmFwUG9ydC5tYXhZKCksIGFsaWdubWVudC55LCBmYWxzZSk7Ci0gICAgICAgICAgICBhdXRv
IGFic29sdXRlU2Nyb2xsT2Zmc2V0ID0gY2xhbXBUbzxpbnQ+KHNjcm9sbGFibGVBcmVhLnNjcm9s
bE9mZnNldEZyb21Qb3NpdGlvbih7IDAsIHJvdW5kVG9JbnQoYWJzb2x1dGVTY3JvbGxZUG9zaXRp
b24pIH0pLnkoKSwgMCwgbWF4U2Nyb2xsT2Zmc2V0LnkoKSk7Ci0gICAgICAgICAgICBpZiAoIXNl
ZW5WZXJ0aWNhbFNuYXBPZmZzZXRzLmNvbnRhaW5zKGFic29sdXRlU2Nyb2xsT2Zmc2V0KSkgewot
ICAgICAgICAgICAgICAgIHNlZW5WZXJ0aWNhbFNuYXBPZmZzZXRzLmFkZChhYnNvbHV0ZVNjcm9s
bE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgdmVydGljYWxTbmFwT2Zmc2V0cy5hcHBlbmQoYWJz
b2x1dGVTY3JvbGxPZmZzZXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKCFob3Jpem9udGFsU25hcE9mZnNldHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6
c29ydChob3Jpem9udGFsU25hcE9mZnNldHMuYmVnaW4oKSwgaG9yaXpvbnRhbFNuYXBPZmZzZXRz
LmVuZCgpKTsKLSAgICAgICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0cmljdG5lc3MgPT0gU2Nyb2xs
U25hcFN0cmljdG5lc3M6OlByb3hpbWl0eSkKLSAgICAgICAgICAgIGNvbXB1dGVBeGlzUHJveGlt
aXR5U25hcE9mZnNldFJhbmdlcyhob3Jpem9udGFsU25hcE9mZnNldHMsIGhvcml6b250YWxTbmFw
T2Zmc2V0UmFuZ2VzLCBzY3JvbGxTbmFwUG9ydC53aWR0aCgpKTsKLQotICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgaG9yaXpvbnRhbCBz
Y3JvbGwgc25hcCBvZmZzZXRzOiAiIDw8IGhvcml6b250YWxTbmFwT2Zmc2V0cyk7Ci0gICAgICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21wdXRlZCBob3Jp
em9udGFsIHNjcm9sbCBzbmFwIG9mZnNldCByYW5nZXM6ICIgPDwgaG9yaXpvbnRhbFNuYXBPZmZz
ZXRSYW5nZXMpOwotCi0gICAgICAgIHNjcm9sbGFibGVBcmVhLnNldEhvcml6b250YWxTbmFwT2Zm
c2V0cyhob3Jpem9udGFsU25hcE9mZnNldHMpOwotICAgICAgICBzY3JvbGxhYmxlQXJlYS5zZXRI
b3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyhob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHNjcm9sbGFibGVBcmVhLmNsZWFySG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCk7Ci0KLSAgICBpZiAoIXZlcnRpY2FsU25hcE9mZnNldHMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIHN0ZDo6c29ydCh2ZXJ0aWNhbFNuYXBPZmZzZXRzLmJlZ2luKCksIHZlcnRpY2FsU25hcE9m
ZnNldHMuZW5kKCkpOwotICAgICAgICBpZiAoc2Nyb2xsU25hcFR5cGUuc3RyaWN0bmVzcyA9PSBT
Y3JvbGxTbmFwU3RyaWN0bmVzczo6UHJveGltaXR5KQotICAgICAgICAgICAgY29tcHV0ZUF4aXNQ
cm94aW1pdHlTbmFwT2Zmc2V0UmFuZ2VzKHZlcnRpY2FsU25hcE9mZnNldHMsIHZlcnRpY2FsU25h
cE9mZnNldFJhbmdlcywgc2Nyb2xsU25hcFBvcnQuaGVpZ2h0KCkpOwotCi0gICAgICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21wdXRlZCB2ZXJ0aWNhbCBz
Y3JvbGwgc25hcCBvZmZzZXRzOiAiIDw8IHZlcnRpY2FsU25hcE9mZnNldHMpOwotICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgdmVydGlj
YWwgc2Nyb2xsIHNuYXAgb2Zmc2V0IHJhbmdlczogIiA8PCB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5n
ZXMpOwotCi0gICAgICAgIHNjcm9sbGFibGVBcmVhLnNldFZlcnRpY2FsU25hcE9mZnNldHModmVy
dGljYWxTbmFwT2Zmc2V0cyk7Ci0gICAgICAgIHNjcm9sbGFibGVBcmVhLnNldFZlcnRpY2FsU25h
cE9mZnNldFJhbmdlcyh2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMpOwotICAgIH0gZWxzZQotICAg
ICAgICBzY3JvbGxhYmxlQXJlYS5jbGVhclZlcnRpY2FsU25hcE9mZnNldHMoKTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+Ci1MYXlvdXRUeXBlIGNsb3Nlc3RTbmFwT2Zmc2V0
KGNvbnN0IFZlY3RvcjxMYXlvdXRUeXBlPiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3RvcjxTY3Jv
bGxPZmZzZXRSYW5nZTxMYXlvdXRUeXBlPj4mIHNuYXBPZmZzZXRSYW5nZXMsIExheW91dFR5cGUg
c2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0aXZlU25hcElu
ZGV4KQotewotICAgIEFTU0VSVChzbmFwT2Zmc2V0cy5zaXplKCkpOwotICAgIGFjdGl2ZVNuYXBJ
bmRleCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4OwotICAg
IHVuc2lnbmVkIHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXg7Ci0gICAgaW5kaWNlc09mTmVhcmVz
dFNuYXBPZmZzZXRSYW5nZXM8TGF5b3V0VHlwZT4oc2Nyb2xsRGVzdGluYXRpb24sIHNuYXBPZmZz
ZXRSYW5nZXMsIGxvd2VyU25hcE9mZnNldFJhbmdlSW5kZXgsIHVwcGVyU25hcE9mZnNldFJhbmdl
SW5kZXgpOwotICAgIGlmIChsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4ID09IHVwcGVyU25hcE9m
ZnNldFJhbmdlSW5kZXggJiYgdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25h
cE9mZnNldEluZGV4KSB7Ci0gICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IGludmFsaWRTbmFwT2Zm
c2V0SW5kZXg7Ci0gICAgICAgIHJldHVybiBzY3JvbGxEZXN0aW5hdGlvbjsKLSAgICB9Ci0KLSAg
ICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPD0gc25hcE9mZnNldHMuZmlyc3QoKSkKLSAgICAgICAg
cmV0dXJuIHNuYXBPZmZzZXRzLmZpcnN0KCk7Ci0KLSAgICBhY3RpdmVTbmFwSW5kZXggPSBzbmFw
T2Zmc2V0cy5zaXplKCkgLSAxOwotICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA+PSBzbmFwT2Zm
c2V0cy5sYXN0KCkpCi0gICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5sYXN0KCk7Ci0KLSAgICB1
bnNpZ25lZCBsb3dlckluZGV4OwotICAgIHVuc2lnbmVkIHVwcGVySW5kZXg7Ci0gICAgaW5kaWNl
c09mTmVhcmVzdFNuYXBPZmZzZXRzPExheW91dFR5cGU+KHNjcm9sbERlc3RpbmF0aW9uLCBzbmFw
T2Zmc2V0cywgbG93ZXJJbmRleCwgdXBwZXJJbmRleCk7Ci0gICAgTGF5b3V0VHlwZSBsb3dlclNu
YXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW2xvd2VySW5kZXhdOwotICAgIExheW91dFR5cGUgdXBw
ZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1t1cHBlckluZGV4XTsKLSAgICBpZiAoIXN0ZDo6
YWJzKHZlbG9jaXR5KSkgewotICAgICAgICBib29sIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlv
biA9IHNjcm9sbERlc3RpbmF0aW9uIC0gbG93ZXJTbmFwUG9zaXRpb24gPD0gdXBwZXJTbmFwUG9z
aXRpb24gLSBzY3JvbGxEZXN0aW5hdGlvbjsKLSAgICAgICAgYWN0aXZlU25hcEluZGV4ID0gaXND
bG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93ZXJJbmRleCA6IHVwcGVySW5kZXg7Ci0gICAg
ICAgIHJldHVybiBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPyBsb3dlclNuYXBQb3NpdGlv
biA6IHVwcGVyU25hcFBvc2l0aW9uOwotICAgIH0KLQotICAgIC8vIE5vbi16ZXJvIHZlbG9jaXR5
IGluZGljYXRlcyBhIGZsaWNrIGdlc3R1cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFwIHBvaW50IGlz
IGNsb3Nlciwgd2Ugc2hvdWxkIGNob29zZSB0aGUgb25lIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhl
IGZsaWNrIGdlc3R1cmUKLSAgICAvLyBhcyBsb25nIGFzIGEgc2Nyb2xsIHNuYXAgb2Zmc2V0IHJh
bmdlIGRvZXMgbm90IGxpZSBiZXR3ZWVuIHRoZSBzY3JvbGwgZGVzdGluYXRpb24gYW5kIHRoZSB0
YXJnZXRlZCBzbmFwIG9mZnNldC4KLSAgICBpZiAodmVsb2NpdHkgPCAwKSB7Ci0gICAgICAgIGlm
IChsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXggJiYg
bG93ZXJTbmFwUG9zaXRpb24gPCBzbmFwT2Zmc2V0UmFuZ2VzW2xvd2VyU25hcE9mZnNldFJhbmdl
SW5kZXhdLmVuZCkgewotICAgICAgICAgICAgYWN0aXZlU25hcEluZGV4ID0gdXBwZXJJbmRleDsK
LSAgICAgICAgICAgIHJldHVybiB1cHBlclNuYXBQb3NpdGlvbjsKLSAgICAgICAgfQotICAgICAg
ICBhY3RpdmVTbmFwSW5kZXggPSBsb3dlckluZGV4OwotICAgICAgICByZXR1cm4gbG93ZXJTbmFw
UG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXggIT0g
aW52YWxpZFNuYXBPZmZzZXRJbmRleCAmJiBzbmFwT2Zmc2V0UmFuZ2VzW3VwcGVyU25hcE9mZnNl
dFJhbmdlSW5kZXhdLnN0YXJ0IDwgdXBwZXJTbmFwUG9zaXRpb24pIHsKLSAgICAgICAgYWN0aXZl
U25hcEluZGV4ID0gbG93ZXJJbmRleDsKLSAgICAgICAgcmV0dXJuIGxvd2VyU25hcFBvc2l0aW9u
OwotICAgIH0KLSAgICBhY3RpdmVTbmFwSW5kZXggPSB1cHBlckluZGV4OwotICAgIHJldHVybiB1
cHBlclNuYXBQb3NpdGlvbjsKLX0KLQotTGF5b3V0VW5pdCBjbG9zZXN0U25hcE9mZnNldChjb25z
dCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zm
c2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCBMYXlvdXRVbml0IHNjcm9s
bERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCkK
LXsKLSAgICByZXR1cm4gY2xvc2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdD4oc25hcE9mZnNldHMs
IHNuYXBPZmZzZXRSYW5nZXMsIHNjcm9sbERlc3RpbmF0aW9uLCB2ZWxvY2l0eSwgYWN0aXZlU25h
cEluZGV4KTsKLX0KLQotZmxvYXQgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPGZsb2F0
PiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+JiBz
bmFwT2Zmc2V0UmFuZ2VzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHks
IHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgpCi17Ci0gICAgcmV0dXJuIGNsb3Nlc3RTbmFwT2Zm
c2V0PGZsb2F0PihzbmFwT2Zmc2V0cywgc25hcE9mZnNldFJhbmdlcywgc2Nyb2xsRGVzdGluYXRp
b24sIHZlbG9jaXR5LCBhY3RpdmVTbmFwSW5kZXgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBDU1NfU0NST0xMX1NOQVAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGJkYjY4YWViZDQwMjdhMTJlMThlYTVkNzk0MDc5ZjdhOWIwODI2NGMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0KLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5j
bHVkZSAiTGF5b3V0VW5pdC5oIgotI2luY2x1ZGUgIlNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIgot
I2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBIVE1MRWxlbWVudDsKLWNsYXNzIFJlbmRlckJveDsK
LWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgU2Nyb2xsYWJsZUFyZWE7Ci0KLS8vIFVwZGF0ZSB0
aGUgc25hcCBvZmZzZXRzIGZvciB0aGlzIHNjcm9sbGFibGUgYXJlYSwgZ2l2ZW4gdGhlIFJlbmRl
ckJveCBvZiB0aGUgc2Nyb2xsIGNvbnRhaW5lciwgdGhlIFJlbmRlclN0eWxlCi0vLyB3aGljaCBk
ZWZpbmVzIHRoZSBzY3JvbGwtc25hcCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHZpZXdwb3J0IHJlY3Rh
bmdsZSB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0IG9mCi0vLyB0aGUgc2Nyb2xsaW5n
IGNvbnRhaW5lcidzIGJvcmRlciBib3guCi12b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xs
YWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmLCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1l
bnRCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJl
Y3Qgdmlld3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRlcyk7Ci0KLWNvbnN0IHVuc2lnbmVk
IGludmFsaWRTbmFwT2Zmc2V0SW5kZXggPSBVSU5UX01BWDsKLVdFQkNPUkVfRVhQT1JUIExheW91
dFVuaXQgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zm
c2V0cywgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcE9m
ZnNldFJhbmdlcywgTGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHks
IHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgpOwotV0VCQ09SRV9FWFBPUlQgZmxvYXQgY2xvc2Vz
dFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPGZsb2F0PiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3Rv
cjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCBmbG9hdCBzY3Jv
bGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgp
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
U25hcE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bFNuYXBPZmZzZXRzSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmU2M2RhZDQxNWFjOGRkMzlhYTE0NjVj
NmRjOGZmMDljYzhkZjhlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKQEAgLTAsMCArMSwyMjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIgorCisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKKworI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KK3N0YXRp
YyB2b2lkIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKExheW91dFR5cGUgb2Zmc2V0
LCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0
UmFuZ2VzLCB1bnNpZ25lZCYgbG93ZXJJbmRleCwgdW5zaWduZWQmIHVwcGVySW5kZXgpCit7Cisg
ICAgaWYgKHNuYXBPZmZzZXRSYW5nZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGxvd2VySW5kZXgg
PSBpbnZhbGlkU25hcE9mZnNldEluZGV4OworICAgICAgICB1cHBlckluZGV4ID0gaW52YWxpZFNu
YXBPZmZzZXRJbmRleDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBsb3dlcklu
ZGV4QXNJbnQgPSAtMTsKKyAgICBpbnQgdXBwZXJJbmRleEFzSW50ID0gc25hcE9mZnNldFJhbmdl
cy5zaXplKCk7CisgICAgZG8geworICAgICAgICBpbnQgbWlkZGxlSW5kZXggPSAobG93ZXJJbmRl
eEFzSW50ICsgdXBwZXJJbmRleEFzSW50KSAvIDI7CisgICAgICAgIGF1dG8mIHJhbmdlID0gc25h
cE9mZnNldFJhbmdlc1ttaWRkbGVJbmRleF07CisgICAgICAgIGlmIChyYW5nZS5zdGFydCA8IG9m
ZnNldCAmJiBvZmZzZXQgPCByYW5nZS5lbmQpIHsKKyAgICAgICAgICAgIGxvd2VySW5kZXhBc0lu
dCA9IG1pZGRsZUluZGV4OworICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5k
ZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvZmZzZXQg
PiByYW5nZS5lbmQpCisgICAgICAgICAgICBsb3dlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRleDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5kZXg7
CisgICAgfSB3aGlsZSAobG93ZXJJbmRleEFzSW50IDwgdXBwZXJJbmRleEFzSW50IC0gMSk7CisK
KyAgICBpZiAob2Zmc2V0IDw9IHNuYXBPZmZzZXRSYW5nZXMuZmlyc3QoKS5zdGFydCkKKyAgICAg
ICAgbG93ZXJJbmRleCA9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7CisgICAgZWxzZQorICAgICAg
ICBsb3dlckluZGV4ID0gbG93ZXJJbmRleEFzSW50OworCisgICAgaWYgKG9mZnNldCA+PSBzbmFw
T2Zmc2V0UmFuZ2VzLmxhc3QoKS5lbmQpCisgICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlkU25h
cE9mZnNldEluZGV4OworICAgIGVsc2UKKyAgICAgICAgdXBwZXJJbmRleCA9IHVwcGVySW5kZXhB
c0ludDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+CitzdGF0aWMgdm9pZCBp
bmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHMoTGF5b3V0VHlwZSBvZmZzZXQsIGNvbnN0IFZlY3Rv
cjxMYXlvdXRUeXBlPiYgc25hcE9mZnNldHMsIHVuc2lnbmVkJiBsb3dlckluZGV4LCB1bnNpZ25l
ZCYgdXBwZXJJbmRleCkKK3sKKyAgICBsb3dlckluZGV4ID0gMDsKKyAgICB1cHBlckluZGV4ID0g
c25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKKyAgICB3aGlsZSAobG93ZXJJbmRleCA8IHVwcGVySW5k
ZXggLSAxKSB7CisgICAgICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4ICsgdXBwZXJJ
bmRleCkgLyAyOworICAgICAgICBhdXRvIG1pZGRsZU9mZnNldCA9IHNuYXBPZmZzZXRzW21pZGRs
ZUluZGV4XTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBtaWRkbGVPZmZzZXQpIHsKKyAgICAgICAg
ICAgIHVwcGVySW5kZXggPSBtaWRkbGVJbmRleDsKKyAgICAgICAgICAgIGxvd2VySW5kZXggPSBt
aWRkbGVJbmRleDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG9mZnNldCA+IG1pZGRsZU9mZnNldCkKKyAgICAgICAgICAgIGxvd2VySW5kZXggPSBtaWRkbGVJ
bmRleDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4
OworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+CitzdGF0aWMgTGF5
b3V0VHlwZSBjbG9zZXN0U25hcE9mZnNldChTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VHlw
ZT4gb2Zmc2V0c0luZm8sIFNjcm9sbEV2ZW50QXhpcyBheGlzLCBMYXlvdXRUeXBlIHNjcm9sbERl
c3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCkKK3sK
KyAgICBjb25zdCBWZWN0b3I8TGF5b3V0VHlwZT4mIHNuYXBPZmZzZXRzID0gb2Zmc2V0c0luZm8u
b2Zmc2V0c0ZvckF4aXMoYXhpcyk7CisgICAgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdl
PExheW91dFR5cGU+PiYgc25hcE9mZnNldFJhbmdlcyA9IG9mZnNldHNJbmZvLm9mZnNldFJhbmdl
c0ZvckF4aXMoYXhpcyk7CisKKyAgICBBU1NFUlQoc25hcE9mZnNldHMuc2l6ZSgpKTsKKyAgICBh
Y3RpdmVTbmFwSW5kZXggPSAwOworCisgICAgdW5zaWduZWQgbG93ZXJTbmFwT2Zmc2V0UmFuZ2VJ
bmRleDsKKyAgICB1bnNpZ25lZCB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4OworICAgIGluZGlj
ZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzPExheW91dFR5cGU+KHNjcm9sbERlc3RpbmF0aW9u
LCBzbmFwT2Zmc2V0UmFuZ2VzLCBsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4LCB1cHBlclNuYXBP
ZmZzZXRSYW5nZUluZGV4KTsKKyAgICBpZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCA9PSB1
cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4ICYmIHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXggIT0g
aW52YWxpZFNuYXBPZmZzZXRJbmRleCkgeworICAgICAgICBhY3RpdmVTbmFwSW5kZXggPSBpbnZh
bGlkU25hcE9mZnNldEluZGV4OworICAgICAgICByZXR1cm4gc2Nyb2xsRGVzdGluYXRpb247Cisg
ICAgfQorCisgICAgaWYgKHNjcm9sbERlc3RpbmF0aW9uIDw9IHNuYXBPZmZzZXRzLmZpcnN0KCkp
CisgICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5maXJzdCgpOworCisgICAgYWN0aXZlU25hcElu
ZGV4ID0gc25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKKyAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24g
Pj0gc25hcE9mZnNldHMubGFzdCgpKQorICAgICAgICByZXR1cm4gc25hcE9mZnNldHMubGFzdCgp
OworCisgICAgdW5zaWduZWQgbG93ZXJJbmRleDsKKyAgICB1bnNpZ25lZCB1cHBlckluZGV4Owor
ICAgIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0czxMYXlvdXRUeXBlPihzY3JvbGxEZXN0aW5h
dGlvbiwgc25hcE9mZnNldHMsIGxvd2VySW5kZXgsIHVwcGVySW5kZXgpOworICAgIExheW91dFR5
cGUgbG93ZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1tsb3dlckluZGV4XTsKKyAgICBMYXlv
dXRUeXBlIHVwcGVyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbdXBwZXJJbmRleF07CisgICAg
aWYgKCFzdGQ6OmFicyh2ZWxvY2l0eSkpIHsKKyAgICAgICAgYm9vbCBpc0Nsb3NlclRvTG93ZXJT
bmFwUG9zaXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbiAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVw
cGVyU25hcFBvc2l0aW9uIC0gc2Nyb2xsRGVzdGluYXRpb247CisgICAgICAgIGFjdGl2ZVNuYXBJ
bmRleCA9IGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA/IGxvd2VySW5kZXggOiB1cHBlcklu
ZGV4OworICAgICAgICByZXR1cm4gaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93ZXJT
bmFwUG9zaXRpb24gOiB1cHBlclNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICAvLyBOb24temVy
byB2ZWxvY2l0eSBpbmRpY2F0ZXMgYSBmbGljayBnZXN0dXJlLiBFdmVuIGlmIGFub3RoZXIgc25h
cCBwb2ludCBpcyBjbG9zZXIsIHdlIHNob3VsZCBjaG9vc2UgdGhlIG9uZSBpbiB0aGUgZGlyZWN0
aW9uIG9mIHRoZSBmbGljayBnZXN0dXJlCisgICAgLy8gYXMgbG9uZyBhcyBhIHNjcm9sbCBzbmFw
IG9mZnNldCByYW5nZSBkb2VzIG5vdCBsaWUgYmV0d2VlbiB0aGUgc2Nyb2xsIGRlc3RpbmF0aW9u
IGFuZCB0aGUgdGFyZ2V0ZWQgc25hcCBvZmZzZXQuCisgICAgaWYgKHZlbG9jaXR5IDwgMCkgewor
ICAgICAgICBpZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNl
dEluZGV4ICYmIGxvd2VyU25hcFBvc2l0aW9uIDwgc25hcE9mZnNldFJhbmdlc1tsb3dlclNuYXBP
ZmZzZXRSYW5nZUluZGV4XS5lbmQpIHsKKyAgICAgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IHVw
cGVySW5kZXg7CisgICAgICAgICAgICByZXR1cm4gdXBwZXJTbmFwUG9zaXRpb247CisgICAgICAg
IH0KKyAgICAgICAgYWN0aXZlU25hcEluZGV4ID0gbG93ZXJJbmRleDsKKyAgICAgICAgcmV0dXJu
IGxvd2VyU25hcFBvc2l0aW9uOworICAgIH0KKworICAgIGlmICh1cHBlclNuYXBPZmZzZXRSYW5n
ZUluZGV4ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXggJiYgc25hcE9mZnNldFJhbmdlc1t1cHBl
clNuYXBPZmZzZXRSYW5nZUluZGV4XS5zdGFydCA8IHVwcGVyU25hcFBvc2l0aW9uKSB7CisgICAg
ICAgIGFjdGl2ZVNuYXBJbmRleCA9IGxvd2VySW5kZXg7CisgICAgICAgIHJldHVybiBsb3dlclNu
YXBQb3NpdGlvbjsKKyAgICB9CisgICAgYWN0aXZlU25hcEluZGV4ID0gdXBwZXJJbmRleDsKKyAg
ICByZXR1cm4gdXBwZXJTbmFwUG9zaXRpb247Cit9CisKK2Zsb2F0IGNsb3Nlc3RTbmFwT2Zmc2V0
KFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxmbG9hdD4gb2Zmc2V0c0luZm8sIFNjcm9sbEV2ZW50QXhp
cyBheGlzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVk
JiBhY3RpdmVTbmFwSW5kZXgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmNsb3Nlc3RTbmFwT2Zm
c2V0PGZsb2F0PihvZmZzZXRzSW5mbywgYXhpcywgc2Nyb2xsRGVzdGluYXRpb24sIHZlbG9jaXR5
LCBhY3RpdmVTbmFwSW5kZXgpOworfQorCitMYXlvdXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0KFNj
cm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiBvZmZzZXRzSW5mbywgU2Nyb2xsRXZlbnRB
eGlzIGF4aXMsIExheW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1
bnNpZ25lZCYgYWN0aXZlU25hcEluZGV4KQoreworICAgIHJldHVybiBXZWJDb3JlOjpjbG9zZXN0
U25hcE9mZnNldDxMYXlvdXRVbml0PihvZmZzZXRzSW5mbywgYXhpcywgc2Nyb2xsRGVzdGluYXRp
b24sIHZlbG9jaXR5LCBhY3RpdmVTbmFwSW5kZXgpOworfQorCitzdGF0aWMgdm9pZCBjb21wdXRl
QXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRSYW5nZXMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBz
bmFwT2Zmc2V0cywgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgb2Zmc2V0
UmFuZ2VzLCBMYXlvdXRVbml0IHNjcm9sbFBvcnRBeGlzTGVuZ3RoKQoreworICAgIC8vIFRoaXMg
aXMgYW4gYXJiaXRyYXJ5IGNob2ljZSBmb3Igd2hhdCBpdCBtZWFucyB0byBiZSAiaW4gcHJveGlt
aXR5IiBvZiBhIHNuYXAgb2Zmc2V0LiBXZSBzaG91bGQgcGxheSBhcm91bmQgd2l0aAorICAgIC8v
IHRoaXMgYW5kIHNlZSB3aGF0IGZlZWxzIGJlc3QuCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHJh
dGlvT2ZTY3JvbGxQb3J0QXhpc0xlbmd0aFRvQmVDb25zaWRlcmVkRm9yUHJveGltaXR5ID0gMC4z
OworICAgIGlmIChzbmFwT2Zmc2V0cy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBUaGUgZXh0cmEgcnVsZSBhY2NvdW50aW5nIGZvciBzY3JvbGwgb2Zmc2V0IHJhbmdlcyBp
biBiZXR3ZWVuIHRoZSBzY3JvbGwgZGVzdGluYXRpb24gYW5kIGEgcG90ZW50aWFsIHNuYXAgb2Zm
c2V0CisgICAgLy8gaGFuZGxlcyB0aGUgY29ybmVyIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc2Nyb2xs
cyB3aXRoIG1vbWVudHVtIHZlcnkgbGlnaHRseSBhd2F5IGZyb20gYSBzbmFwIG9mZnNldCwgc3Vj
aCB0aGF0IHRoZQorICAgIC8vIHByZWRpY3RlZCBzY3JvbGwgZGVzdGluYXRpb24gaXMgc3RpbGwg
d2l0aGluIHByb3hpbWl0eSBvZiB0aGUgc25hcCBvZmZzZXQuIEluIHRoaXMgY2FzZSwgdGhlIHJl
Z3VsYXIgKG1hbmRhdG9yeQorICAgIC8vIHNjcm9sbCBzbmFwcGluZykgYmVoYXZpb3Igd291bGQg
YmUgdG8gc25hcCB0byB0aGUgbmV4dCBvZmZzZXQgaW4gdGhlIGRpcmVjdGlvbiBvZiBtb21lbnR1
bSBzY3JvbGxpbmcsIGJ1dAorICAgIC8vIGluc3RlYWQsIGl0IGlzIG1vcmUgaW50dWl0aXZlIHRv
IGVpdGhlciByZXR1cm4gdG8gdGhlIG9yaWdpbmFsIHNuYXAgcG9zaXRpb24gKHdoaWNoIHdlIGFy
Yml0cmFyaWx5IGNob29zZSBoZXJlKQorICAgIC8vIG9yIHNjcm9sbCBqdXN0IG91dHNpZGUgb2Yg
dGhlIHNuYXAgb2Zmc2V0IHJhbmdlLiBUaGlzIGlzIGFub3RoZXIgbWlub3IgYmVoYXZpb3IgdHdl
YWsgdGhhdCB3ZSBzaG91bGQgcGxheSBhcm91bmQKKyAgICAvLyB3aXRoIHRvIHNlZSB3aGF0IGZl
ZWxzIGJlc3QuCisgICAgTGF5b3V0VW5pdCBwcm94aW1pdHlEaXN0YW5jZSB7IHJhdGlvT2ZTY3Jv
bGxQb3J0QXhpc0xlbmd0aFRvQmVDb25zaWRlcmVkRm9yUHJveGltaXR5ICogc2Nyb2xsUG9ydEF4
aXNMZW5ndGggfTsKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDE7IGluZGV4IDwgc25hcE9mZnNl
dHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RhcnRPZmZzZXQgPSBzbmFwT2Zm
c2V0c1tpbmRleCAtIDFdICsgcHJveGltaXR5RGlzdGFuY2U7CisgICAgICAgIGF1dG8gZW5kT2Zm
c2V0ID0gc25hcE9mZnNldHNbaW5kZXhdIC0gcHJveGltaXR5RGlzdGFuY2U7CisgICAgICAgIGlm
IChzdGFydE9mZnNldCA8IGVuZE9mZnNldCkKKyAgICAgICAgICAgIG9mZnNldFJhbmdlcy5hcHBl
bmQoeyBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IH0pOworICAgIH0KK30KKworU2Nyb2xsU25hcE9m
ZnNldHNJbmZvQnVpbGRlcjo6U2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcihTY3JvbGxTbmFw
U3RyaWN0bmVzcyBzdHJpY3RuZXNzKQorICAgIDogbV9zdHJpY3RuZXNzKHN0cmljdG5lc3MpIHsg
fQorCit2b2lkIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXI6OmFkZFZlcnRpY2FsT2Zmc2V0
KExheW91dFVuaXQgb2Zmc2V0KQoreworICAgIGlmICghbV9zZWVuVmVydGljYWxTbmFwT2Zmc2V0
cy5jb250YWlucyhvZmZzZXQpKSB7CisgICAgICAgIG1fc2VlblZlcnRpY2FsU25hcE9mZnNldHMu
YWRkKG9mZnNldCk7CisgICAgICAgIG1fdmVydGljYWxTbmFwT2Zmc2V0cy5hcHBlbmQob2Zmc2V0
KTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsU25hcE9mZnNldHNJbmZvQnVpbGRlcjo6YWRkSG9y
aXpvbnRhbE9mZnNldChMYXlvdXRVbml0IG9mZnNldCkKK3sKKyAgICBpZiAoIW1fc2Vlbkhvcml6
b250YWxTbmFwT2Zmc2V0cy5jb250YWlucyhvZmZzZXQpKSB7CisgICAgICAgIG1fc2Vlbkhvcml6
b250YWxTbmFwT2Zmc2V0cy5hZGQob2Zmc2V0KTsKKyAgICAgICAgbV9ob3Jpem9udGFsU25hcE9m
ZnNldHMuYXBwZW5kKG9mZnNldCk7CisgICAgfQorfQorCitzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xs
U25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+PiBTY3JvbGxTbmFwT2Zmc2V0c0luZm9CdWlsZGVy
OjpidWlsZChjb25zdCBMYXlvdXRSZWN0JiBzY3JvbGxTbmFwUG9ydCkKK3sKKyAgICBhdXRvIG9m
ZnNldHNJbmZvID0gbWFrZVVuaXF1ZTxTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4+
KCk7CisgICAgb2Zmc2V0c0luZm8tPmhvcml6b250YWxTbmFwT2Zmc2V0cyA9IFdURk1vdmUobV9o
b3Jpem9udGFsU25hcE9mZnNldHMpOworICAgIG9mZnNldHNJbmZvLT52ZXJ0aWNhbFNuYXBPZmZz
ZXRzID0gV1RGTW92ZShtX3ZlcnRpY2FsU25hcE9mZnNldHMpOworCisgICAgaWYgKCFvZmZzZXRz
SW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvJiBo
b3Jpem9udGFsU25hcE9mZnNldHMgPSBvZmZzZXRzSW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRz
OworICAgICAgICBhdXRvJiBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyA9IG9mZnNldHNJbmZv
LT5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlczsKKyAgICAgICAgc3RkOjpzb3J0KGhvcml6b250
YWxTbmFwT2Zmc2V0cy5iZWdpbigpLCBob3Jpem9udGFsU25hcE9mZnNldHMuZW5kKCkpOworICAg
ICAgICBpZiAobV9zdHJpY3RuZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpQcm94aW1pdHkp
CisgICAgICAgICAgICBjb21wdXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRSYW5nZXMoaG9yaXpv
bnRhbFNuYXBPZmZzZXRzLCBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcywgc2Nyb2xsU25hcFBv
cnQud2lkdGgoKSk7CisgICAgfQorCisgICAgaWYgKCFvZmZzZXRzSW5mby0+dmVydGljYWxTbmFw
T2Zmc2V0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byYgdmVydGljYWxTbmFwT2Zmc2V0cyA9
IG9mZnNldHNJbmZvLT52ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgICAgICBhdXRvJiB2ZXJ0aWNh
bFNuYXBPZmZzZXRSYW5nZXMgPSBvZmZzZXRzSW5mby0+dmVydGljYWxTbmFwT2Zmc2V0UmFuZ2Vz
OworICAgICAgICBzdGQ6OnNvcnQodmVydGljYWxTbmFwT2Zmc2V0cy5iZWdpbigpLCB2ZXJ0aWNh
bFNuYXBPZmZzZXRzLmVuZCgpKTsKKyAgICAgICAgaWYgKG1fc3RyaWN0bmVzcyA9PSBTY3JvbGxT
bmFwU3RyaWN0bmVzczo6UHJveGltaXR5KQorICAgICAgICAgICAgY29tcHV0ZUF4aXNQcm94aW1p
dHlTbmFwT2Zmc2V0UmFuZ2VzKHZlcnRpY2FsU25hcE9mZnNldHMsIHZlcnRpY2FsU25hcE9mZnNl
dFJhbmdlcywgc2Nyb2xsU25hcFBvcnQuaGVpZ2h0KCkpOworICAgIH0KKworICAgIHJldHVybiBv
ZmZzZXRzSW5mbzsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmgKaW5kZXggM2FiNjQwNjgyNjRjNTA0MDhiYWI0ZWUzOGQyY2NkNGE2NDFjNzg2Ny4u
YTc1NmNiMWJmODU3YTFlYzlhMDUyMzZkYjY2YmNkOGJlYmY4NjUwYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgKQEAg
LTI1LDE2ICsyNSwyNSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCisKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMu
aCIKKyNpbmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgTGF5b3V0UmVjdDsKKwogdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgU2Nyb2xsT2Zmc2V0UmFuZ2UgewogICAgIFQgc3Rh
cnQ7CiAgICAgVCBlbmQ7CiB9OwogCitjb25zdCB1bnNpZ25lZCBpbnZhbGlkU25hcE9mZnNldElu
ZGV4ID0gVUlOVF9NQVg7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IFNjcm9sbFNu
YXBPZmZzZXRzSW5mbyB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwpAQCAt
NDcsNiArNTYsNDMgQEAgc3RydWN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbyB7CiAgICAgLy8gd2hl
cmUgdGhlIHNuYXAgcG9ydCBmaXRzIHdpdGhpbiB0aGUgc25hcCBhcmVhIGFyZSBjb25zaWRlcmVk
IHRvIGJlIHZhbGlkIHNuYXAgcG9zaXRpb25zLgogICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5n
ZTxUPj4gaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXM7CiAgICAgVmVjdG9yPFNjcm9sbE9mZnNl
dFJhbmdlPFQ+PiB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7CisKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGhvcml6b250YWxTbmFwT2Zmc2V0cy5pc0Vt
cHR5KCkgJiYgdmVydGljYWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkgJiYgaG9yaXpvbnRhbFNuYXBP
ZmZzZXRSYW5nZXMuaXNFbXB0eSgpICYmIHZlcnRpY2FsU25hcE9mZnNldFJhbmdlcy5pc0VtcHR5
KCk7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFQ+JiBvZmZzZXRzRm9yQXhpcyhTY3JvbGxF
dmVudEF4aXMgYXhpcykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBheGlzID09IFNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IGhvcml6b250YWxTbmFwT2Zmc2V0cyA6IHZlcnRpY2Fs
U25hcE9mZnNldHM7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdl
PFQ+PiYgb2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/
IGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzIDogdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOwor
ICAgIH0KIH07CiAKK2NsYXNzIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIgeworcHVibGlj
OgorICAgIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxkZXIoU2Nyb2xsU25hcFN0cmljdG5lc3Mp
OworCisgICAgdm9pZCBhZGRWZXJ0aWNhbE9mZnNldChMYXlvdXRVbml0IG9mZnNldCk7CisgICAg
dm9pZCBhZGRIb3Jpem9udGFsT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4+IGJ1aWxkKGNvbnN0
IExheW91dFJlY3QmIHNjcm9sbFNuYXBQb3J0KTsKKworcHJpdmF0ZToKKyAgICBTY3JvbGxTbmFw
U3RyaWN0bmVzcyBtX3N0cmljdG5lc3M7CisgICAgSGFzaFNldDxmbG9hdD4gbV9zZWVuVmVydGlj
YWxTbmFwT2Zmc2V0czsKKyAgICBIYXNoU2V0PGZsb2F0PiBtX3NlZW5Ib3Jpem9udGFsU25hcE9m
ZnNldHM7CisgICAgVmVjdG9yPExheW91dFVuaXQ+IG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzOwor
ICAgIFZlY3RvcjxMYXlvdXRVbml0PiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7Cit9OworCitXRUJD
T1JFX0VYUE9SVCBmbG9hdCBjbG9zZXN0U25hcE9mZnNldChTY3JvbGxTbmFwT2Zmc2V0c0luZm88
ZmxvYXQ+LCBTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2
ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCk7CitXRUJDT1JFX0VYUE9SVCBMYXlv
dXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0
PiwgU2Nyb2xsRXZlbnRBeGlzLCBMYXlvdXRVbml0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2
ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCk7CisKIH07IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKaW5kZXgg
N2I3NGY4YTkwNTFlMzU5OWM0ZGJmNDJiYWZjMDg5ZTFiZTQ4ZjRkMS4uMWUxMzA1YTJmOTljYmNi
OGYzOTc0Y2RhNGYyN2JhMjVmM2VmZjhiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCkBAIC00MiwxMCArNDIsNiBAQAog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNlbmRpZgogCi0jaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCIKLSNlbmRpZgotCiBu
YW1lc3BhY2UgV1RGIHsKIGNsYXNzIFRleHRTdHJlYW07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5o
CmluZGV4IDIxYzMxMWNkODliNzk0MDg0YTg0OTBkNWZjOWJhNTVhOTNiOWFlYmQuLjczZTkyYTY0
ZDIzMjVjNWUxZWE1NjhjNDRkMmQ2ZjhkZGZhNmE3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5o
CkBAIC0yNyw3ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogCi0jaW5j
bHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2
ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgKaW5kZXggNDA5YWU5ZDlhZTY3OTAzZWY2YmFhMjlmNWJk
Mjc0ZTRjM2RiMTQ1ZS4uNDc4OTdhYTVhMzc1NTZkMzlmZTY2MzlmZjZmZmNjN2RkOTFjZTEyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgKQEAgLTcxLDYgKzcxLDggQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50Jik7CiAKICNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5m
bzxmbG9hdD4mIHNuYXBPZmZzZXRzSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJ
bmZvOyB9CisKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsU25hcE9mZnNldHMo
KSBjb25zdCB7IHJldHVybiBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHM7
IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhvcml6b250YWxTbmFwT2Zmc2V0cyhjb25z
dCBWZWN0b3I8ZmxvYXQ+Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oCmluZGV4IDEzYWZkM2NjMDBl
MjE5YTI3ODIyMTAzYTM3NzEzNTlhNTNiZDgwMzEuLjkxNmQzYThhMzk2Y2Q1NjZkMmZkM2U1NTkw
MDAwOThiZjdhZjFhZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaApAQCAtOTcsMTAgKzk3LDcgQEAg
cHVibGljOgogICAgIGJvb2wgY2FuSGF2ZVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX3Nj
cm9sbGFibGVBcmVhUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSAhPSBTY3JvbGxi
YXJBbHdheXNPZmYgfHwgbV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxi
YXJNb2RlICE9IFNjcm9sbGJhckFsd2F5c09mZjsgfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsU25hcE9mZnNldHMoKSBj
b25zdCB7IHJldHVybiBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHM7IH0K
LSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zbmFwT2Zmc2V0c0luZm8udmVydGljYWxTbmFwT2Zmc2V0czsgfQotICAgIGNvbnN0
IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+JiBob3Jpem9udGFsU25hcE9mZnNldFJh
bmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJbmZvLmhvcml6b250YWxTbmFwT2Zm
c2V0UmFuZ2VzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPGZsb2F0Pj4m
IHZlcnRpY2FsU25hcE9mZnNldFJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJ
bmZvLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlczsgfQorICAgIGNvbnN0IFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbzxmbG9hdD4mIHNuYXBPZmZzZXRzSW5mbygpIGNvbnN0OwogICAgIHVuc2lnbmVkIGN1
cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRI
b3Jpem9udGFsU25hcFBvaW50SW5kZXg7IH0KICAgICB1bnNpZ25lZCBjdXJyZW50VmVydGljYWxT
bmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50
SW5kZXg7IH0KICAgICB2b2lkIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgodW5z
aWduZWQgaW5kZXgpIHsgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4ID0gaW5kZXg7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oCmluZGV4
IDdhMGU3M2ExZWI2YTRhOWVlNzZiMmJjY2QzYWRlYTVhN2IxZDJmY2UuLjhiNmE2NzAxNTJlMzRk
NmQyYWQ5MTcyZWExYWNmYzRhNDk1YjViZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVNYWMuaApAQCAtNTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjdXJyZW50U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4aXMs
IGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5n
ZTxMYXlvdXRVbml0Pj4mKTsKICAgICB2b2lkIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzLCB1bnNpZ25lZCk7CiAgICAgYm9vbCBhY3RpdmVTY3JvbGxTbmFw
SW5kZXhEaWRDaGFuZ2UoKSBjb25zdDsKICAgICB1bnNpZ25lZCBhY3RpdmVTY3JvbGxTbmFwSW5k
ZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tCmluZGV4IDU2ZmU5YzMyNGFjZTIzMDYxNWVjYWE4
ZDk5OWUzZjJiMjM4YjhkMWYuLmYzMGVlNjA5NmM0OTMxMzQ1NDk1ZTc4ZDI0Y2JiMDNjMTUxZDk2
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1t
CkBAIC03NSw2ICs3NSwxNiBAQCBzdGF0aWMgaW5saW5lIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5n
ZTxMYXlvdXRVbml0Pj4gY29udmVydFRvTGF5b3V0VW5pdHMoY29uc3QgVgogCiAgICAgcmV0dXJu
IHNuYXBPZmZzZXRSYW5nZXM7CiB9CisKK3N0YXRpYyBpbmxpbmUgU2Nyb2xsU25hcE9mZnNldHNJ
bmZvPExheW91dFVuaXQ+IGNvbnZlcnRUb0xheW91dFVuaXRzKGNvbnN0IFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbzxmbG9hdD4mIHNuYXBPZmZzZXRzSW5mb0FzRmxvYXQpCit7CisgICAgcmV0dXJuIHsK
KyAgICAgICAgY29udmVydFRvTGF5b3V0VW5pdHMoc25hcE9mZnNldHNJbmZvQXNGbG9hdC52ZXJ0
aWNhbFNuYXBPZmZzZXRzKSwKKyAgICAgICAgY29udmVydFRvTGF5b3V0VW5pdHMoc25hcE9mZnNl
dHNJbmZvQXNGbG9hdC5ob3Jpem9udGFsU25hcE9mZnNldHMpLAorICAgICAgICBjb252ZXJ0VG9M
YXlvdXRVbml0cyhzbmFwT2Zmc2V0c0luZm9Bc0Zsb2F0LnZlcnRpY2FsU25hcE9mZnNldFJhbmdl
cyksCisgICAgICAgIGNvbnZlcnRUb0xheW91dFVuaXRzKHNuYXBPZmZzZXRzSW5mb0FzRmxvYXQu
aG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMpCisgICAgfTsKK30KICNlbmRpZgogCiB2b2lkIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0ZUZyb21TdGF0ZU5vZGUo
Y29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdTdGF0ZU5vZGUpCkBA
IC04NiwxMSArOTYsMTAgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
TWFjOjp1cGRhdGVGcm9tU3RhdGVOb2RlKGNvbnN0IFNjcm9sbGluZ1MKICAgICB9CiAKICNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6Okhvcml6b250YWxTbmFw
T2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZU5vZGU6OlByb3BlcnR5OjpIb3Jpem9udGFsU25hcE9mZnNldFJhbmdlcykpCi0gICAg
ICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBj
b252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUuaG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCkpLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUuaG9yaXpvbnRh
bFNuYXBPZmZzZXRSYW5nZXMoKSkpOwotCi0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9wZXJ0eTo6VmVydGljYWxTbmFw
T2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZU5vZGU6OlByb3BlcnR5OjpWZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMpKQotICAgICAg
ICB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIGNvbnZl
cnRUb0xheW91dFVuaXRzKHNjcm9sbGluZ1N0YXRlTm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkp
LCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUudmVydGljYWxTbmFwT2Zm
c2V0UmFuZ2VzKCkpKTsKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlByb3BlcnR5OjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSB8
fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9k
ZTo6UHJvcGVydHk6OlZlcnRpY2FsU25hcE9mZnNldFJhbmdlcykKKyAgICAgICAgfHwgc2Nyb2xs
aW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlByb3Bl
cnR5OjpIb3Jpem9udGFsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9wZXJ0eTo6SG9yaXpvbnRhbFNuYXBP
ZmZzZXRSYW5nZXMpKSB7CisgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxT
bmFwUG9pbnRzKGNvbnZlcnRUb0xheW91dFVuaXRzKHNjcm9sbGluZ1N0YXRlTm9kZS5zbmFwT2Zm
c2V0c0luZm8oKSkpOworICAgIH0KIAogICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6OkN1cnJlbnRIb3Jpem9u
dGFsU25hcE9mZnNldEluZGV4KSkKICAgICAgICAgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9y
QXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJy
ZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkpOwpAQCAtMTAwLDExICsxMDksNiBAQCB2b2lk
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0ZUZyb21TdGF0ZU5v
ZGUoY29uc3QgU2Nyb2xsaW5nUwogI2VuZGlmCiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZU1hYzo6dXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4
aXMgYXhpcywgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVj
dG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcFJhbmdlcykKLXsKLSAgICBt
X3Njcm9sbENvbnRyb2xsZXIudXBkYXRlU2Nyb2xsU25hcFBvaW50cyhheGlzLCBzbmFwT2Zmc2V0
cywgc25hcFJhbmdlcyk7Ci19Ci0KIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZU1hYzo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMg
YXhpcywgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgbV9zY3JvbGxDb250cm9sbGVyLnNldEFjdGl2
ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcywgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmluZGV4IGRhZTI3ZGYzZDI4ODdhZmZhOGNhMDJiMmMx
MDgwMzMzNzQ4NmIyZGQuLjFkODBiMTZmNGU4ZjAxYTY0YzlhYmVjOGY5NGRmYTU4NGZjYzQ4NmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTI0Miw3
ICsyNDIsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjpub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29u
c3QgRmxvYXRTaXplJiBkZWx0YSkKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogdm9pZCBT
Y3JvbGxBbmltYXRvcjo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkKIHsKLSAgICBtX3Njcm9sbENv
bnRyb2xsZXIudXBkYXRlU2Nyb2xsU25hcFN0YXRlKG1fc2Nyb2xsYWJsZUFyZWEpOworICAgIG1f
c2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxTbmFwUG9pbnRzKG1fc2Nyb2xsYWJsZUFyZWEu
c2Nyb2xsU25hcE9mZnNldEluZm8oKSk7CiB9CiAKIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6
OnNjcm9sbE9mZnNldCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5jcHAKaW5kZXggYTg4ZDc0NjMwNGNjOGU2YzFhYWMzZDM5NDk1MGE4YzJhMDhhZWFmYi4u
ZDc0NGNiZmZkOTgyMjhiMzYxN2NmZmIxMmMwODZkMjY2MDVmNTZmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApAQCAtMzIsMTkgKzMyLDY2IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKIAorI2luY2x1ZGUg
IkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlckJv
eC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgog
I2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNb2Nr
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTdHlsZVNjcm9sbFNu
YXBQb2ludHMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitlbnVtIGNsYXNzIEluc2V0T3JPdXRz
ZXQgeworICAgIEluc2V0LAorICAgIE91dHNldAorfTsKKworc3RhdGljIExheW91dFJlY3QgY29t
cHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25z
dCBMZW5ndGhCb3gmIGluc2V0T3JPdXRzZXRCb3gsIEluc2V0T3JPdXRzZXQgaW5zZXRPck91dHNl
dCkKK3sKKyAgICBMYXlvdXRCb3hFeHRlbnQgZXh0ZW50cyh2YWx1ZUZvckxlbmd0aChpbnNldE9y
T3V0c2V0Qm94LnRvcCgpLCByZWN0LmhlaWdodCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRPck91
dHNldEJveC5yaWdodCgpLCByZWN0LndpZHRoKCkpLCB2YWx1ZUZvckxlbmd0aChpbnNldE9yT3V0
c2V0Qm94LmJvdHRvbSgpLCByZWN0LmhlaWdodCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRPck91
dHNldEJveC5sZWZ0KCksIHJlY3Qud2lkdGgoKSkpOworICAgIGF1dG8gc25hcFBvcnRPckFyZWEo
cmVjdCk7CisgICAgaWYgKGluc2V0T3JPdXRzZXQgPT0gSW5zZXRPck91dHNldDo6SW5zZXQpCisg
ICAgICAgIHNuYXBQb3J0T3JBcmVhLmNvbnRyYWN0KGV4dGVudHMpOworICAgIGVsc2UKKyAgICAg
ICAgc25hcFBvcnRPckFyZWEuZXhwYW5kKGV4dGVudHMpOworICAgIHJldHVybiBzbmFwUG9ydE9y
QXJlYTsKK30KKworc3RhdGljIExheW91dFVuaXQgY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNl
dChMYXlvdXRVbml0IG1pbkxvY2F0aW9uLCBMYXlvdXRVbml0IG1heExvY2F0aW9uLCBTY3JvbGxT
bmFwQXhpc0FsaWduVHlwZSBhbGlnbm1lbnQsIGJvb2wgYXhpc0lzRmxpcHBlZCkKK3sKKyAgICBz
d2l0Y2ggKGFsaWdubWVudCkgeworICAgIGNhc2UgU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6OlN0
YXJ0OgorICAgICAgICByZXR1cm4gYXhpc0lzRmxpcHBlZCA/IG1heExvY2F0aW9uIDogbWluTG9j
YXRpb247CisgICAgY2FzZSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Q2VudGVyOgorICAgICAg
ICByZXR1cm4gKG1pbkxvY2F0aW9uICsgbWF4TG9jYXRpb24pIC8gMjsKKyAgICBjYXNlIFNjcm9s
bFNuYXBBeGlzQWxpZ25UeXBlOjpFbmQ6CisgICAgICAgIHJldHVybiBheGlzSXNGbGlwcGVkID8g
bWluTG9jYXRpb24gOiBtYXhMb2NhdGlvbjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
U2Nyb2xsT2Zmc2V0UmFuZ2U8VD4mIHJhbmdlKQoreworICAgIHRzIDw8ICJzdGFydDogIiA8PCBy
YW5nZS5zdGFydCA8PCAiIGVuZDogIiA8PCByYW5nZS5lbmQ7CisgICAgcmV0dXJuIHRzOworfQor
I2VuZGlmCisKIHN0cnVjdCBTYW1lU2l6ZUFzU2Nyb2xsYWJsZUFyZWEgewogICAgIHZpcnR1YWwg
flNhbWVTaXplQXNTY3JvbGxhYmxlQXJlYSgpOwogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC00NjMs
MTMgKzUxMCw2IEBAIFN0cmluZyBTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJTdGF0
ZUZvclRlc3RpbmcoKSBjb25zdAogfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLVNj
cm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYgU2Nyb2xsYWJsZUFyZWE6OmVuc3VyZVNu
YXBPZmZzZXRzSW5mbygpCi17Ci0gICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mbykKLSAgICAgICAg
bV9zbmFwT2Zmc2V0c0luZm8gPSBtYWtlVW5pcXVlPFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlv
dXRVbml0Pj4oKTsKLSAgICByZXR1cm4gKm1fc25hcE9mZnNldHNJbmZvOwotfQotCiBjb25zdCBW
ZWN0b3I8TGF5b3V0VW5pdD4qIFNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU25hcE9mZnNldHMo
KSBjb25zdAogewogICAgIGlmICghbV9zbmFwT2Zmc2V0c0luZm8pCkBAIC01MDIsNTggKzU0Miwx
MSBAQCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4qIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNu
YXBPZmZzZXRzKCkgY29uc3QKICAgICByZXR1cm4gJm1fc25hcE9mZnNldHNJbmZvLT52ZXJ0aWNh
bFNuYXBPZmZzZXRzOwogfQogCi12b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU25h
cE9mZnNldHMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBob3Jpem9udGFsU25hcE9mZnNldHMp
Ci17Ci0gICAgLy8gQ29uc2lkZXIgaGF2aW5nIGEgbm9uLWVtcHR5IHNldCBvZiBzbmFwIG9mZnNl
dHMgYXMgYSBjdWUgdG8gaW5pdGlhbGl6ZSB0aGUgU2Nyb2xsQW5pbWF0b3IuCi0gICAgaWYgKGhv
cml6b250YWxTbmFwT2Zmc2V0cy5zaXplKCkpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCk7Ci0K
LSAgICBlbnN1cmVTbmFwT2Zmc2V0c0luZm8oKS5ob3Jpem9udGFsU25hcE9mZnNldHMgPSBob3Jp
em9udGFsU25hcE9mZnNldHM7Ci19Ci0KLXZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2Fs
U25hcE9mZnNldHMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiB2ZXJ0aWNhbFNuYXBPZmZzZXRz
KQotewotICAgIC8vIENvbnNpZGVyIGhhdmluZyBhIG5vbi1lbXB0eSBzZXQgb2Ygc25hcCBvZmZz
ZXRzIGFzIGEgY3VlIHRvIGluaXRpYWxpemUgdGhlIFNjcm9sbEFuaW1hdG9yLgotICAgIGlmICh2
ZXJ0aWNhbFNuYXBPZmZzZXRzLnNpemUoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKTsKLQot
ICAgIGVuc3VyZVNuYXBPZmZzZXRzSW5mbygpLnZlcnRpY2FsU25hcE9mZnNldHMgPSB2ZXJ0aWNh
bFNuYXBPZmZzZXRzOwotfQotCi12b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU25h
cE9mZnNldFJhbmdlcyhjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+
JiBob3Jpem9udGFsUmFuZ2VzKQotewotICAgIGVuc3VyZVNuYXBPZmZzZXRzSW5mbygpLmhvcml6
b250YWxTbmFwT2Zmc2V0UmFuZ2VzID0gaG9yaXpvbnRhbFJhbmdlczsKLX0KLQotdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6c2V0VmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKGNvbnN0IFZlY3RvcjxTY3Jv
bGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHZlcnRpY2FsUmFuZ2VzKQotewotICAgIGVuc3Vy
ZVNuYXBPZmZzZXRzSW5mbygpLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyA9IHZlcnRpY2FsUmFu
Z2VzOwotfQotCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjbGVhclNuYXBPZmZzZXRzKCkKIHsKLSAg
ICBjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cygpOwotICAgIGNsZWFyVmVydGljYWxTbmFwT2Zm
c2V0cygpOwotfQotCi12b2lkIFNjcm9sbGFibGVBcmVhOjpjbGVhckhvcml6b250YWxTbmFwT2Zm
c2V0cygpCi17Ci0gICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mbykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zbmFwT2Zmc2V0c0luZm8tPmhvcml6b250YWxTbmFwT2Zmc2V0cyA9IHsgfTsKLSAg
ICBtX3NuYXBPZmZzZXRzSW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMgPSB7IH07Ci0g
ICAgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4ID0gMDsKLX0KLQotdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6Y2xlYXJWZXJ0aWNhbFNuYXBPZmZzZXRzKCkKLXsKLSAgICBpZiAoIW1fc25h
cE9mZnNldHNJbmZvKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NuYXBPZmZzZXRzSW5mby0+
dmVydGljYWxTbmFwT2Zmc2V0cyA9IHsgfTsKLSAgICBtX3NuYXBPZmZzZXRzSW5mby0+dmVydGlj
YWxTbmFwT2Zmc2V0UmFuZ2VzID0geyB9OworICAgIG1fc25hcE9mZnNldHNJbmZvID0gbnVsbHB0
cjsKICAgICBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4ID0gMDsKKyAgICBtX2N1cnJl
bnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPSAwOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVh
Ojp1c2VzU2Nyb2xsU25hcCgpIGNvbnN0CkBAIC01NjMsMjkgKzU1NiwyNCBAQCBib29sIFNjcm9s
bGFibGVBcmVhOjp1c2VzU2Nyb2xsU25hcCgpIGNvbnN0CiAKIEludFBvaW50IFNjcm9sbGFibGVB
cmVhOjpuZWFyZXN0QWN0aXZlU25hcFBvaW50KGNvbnN0IEludFBvaW50JiBjdXJyZW50UG9zaXRp
b24pCiB7Ci0gICAgaWYgKCFob3Jpem9udGFsU25hcE9mZnNldHMoKSAmJiAhdmVydGljYWxTbmFw
T2Zmc2V0cygpKQorICAgIGF1dG8qIG9mZnNldHNJbmZvID0gc2Nyb2xsU25hcE9mZnNldEluZm8o
KTsKKyAgICBpZiAoIW9mZnNldHNJbmZvIHx8IG9mZnNldHNJbmZvLT5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CiAgICAgCiAgICAgaWYgKCFleGlzdGluZ1Njcm9s
bEFuaW1hdG9yKCkpCiAgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CiAgICAgCiAgICAg
SW50UG9pbnQgY29ycmVjdGVkUG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247Ci0gICAgCi0gICAg
aWYgKGhvcml6b250YWxTbmFwT2Zmc2V0cygpKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGhvcml6
b250YWwgPSAqaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCk7Ci0gICAgICAgIAotICAgICAgICBzaXpl
X3QgYWN0aXZlSW5kZXggPSBjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7Ci0gICAg
ICAgIGlmIChhY3RpdmVJbmRleCA8IGhvcml6b250YWwuc2l6ZSgpKQotICAgICAgICAgICAgY29y
cmVjdGVkUG9zaXRpb24uc2V0WChob3Jpem9udGFsW2FjdGl2ZUluZGV4XS50b0ludCgpKTsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKHZlcnRpY2FsU25hcE9mZnNldHMoKSkgewotICAgICAgICBjb25z
dCBhdXRvJiB2ZXJ0aWNhbCA9ICp2ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7Ci0gICAgICAgIAotICAg
ICAgICBzaXplX3QgYWN0aXZlSW5kZXggPSBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgp
OwotICAgICAgICBpZiAoYWN0aXZlSW5kZXggPCB2ZXJ0aWNhbC5zaXplKCkpCi0gICAgICAgICAg
ICBjb3JyZWN0ZWRQb3NpdGlvbi5zZXRZKHZlcnRpY2FsW2FjdGl2ZUluZGV4XS50b0ludCgpKTsK
LSAgICB9CisKKyAgICBjb25zdCBhdXRvJiBob3Jpem9udGFsID0gb2Zmc2V0c0luZm8tPmhvcml6
b250YWxTbmFwT2Zmc2V0czsKKyAgICBzaXplX3QgYWN0aXZlSG9yaXpvbnRhbEluZGV4ID0gY3Vy
cmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpOworICAgIGlmIChhY3RpdmVIb3Jpem9udGFs
SW5kZXggPCBob3Jpem9udGFsLnNpemUoKSkKKyAgICAgICAgY29ycmVjdGVkUG9zaXRpb24uc2V0
WChob3Jpem9udGFsW2FjdGl2ZUhvcml6b250YWxJbmRleF0udG9JbnQoKSk7CisKKyAgICBjb25z
dCBhdXRvJiB2ZXJ0aWNhbCA9IG9mZnNldHNJbmZvLT52ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAg
IHNpemVfdCBhY3RpdmVWZXJ0aWNhbEluZGV4ID0gY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5k
ZXgoKTsKKyAgICBpZiAoYWN0aXZlVmVydGljYWxJbmRleCA8IHZlcnRpY2FsLnNpemUoKSkKKyAg
ICAgICAgY29ycmVjdGVkUG9zaXRpb24uc2V0WSh2ZXJ0aWNhbFthY3RpdmVWZXJ0aWNhbEluZGV4
XS50b0ludCgpKTsKIAogICAgIHJldHVybiBjb3JyZWN0ZWRQb3NpdGlvbjsKIH0KQEAgLTYxMSw2
ICs1OTksODAgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkK
ICAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvcnJlY3RlZFBvc2l0aW9u
KTsKICAgICB9CiB9CisKK1Njcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiogU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbFNuYXBPZmZzZXRJbmZvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
bmFwT2Zmc2V0c0luZm8uZ2V0KCk7Cit9CisKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNu
YXBPZmZzZXRzRm9yRWxlbWVudChjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gs
IGNvbnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmll
d3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRlcykKK3sKKyAgICBhdXRvIHNjcm9sbFNuYXBU
eXBlID0gc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNjcm9sbFNuYXBUeXBlKCk7CisgICAgY29uc3Qg
YXV0byYgYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucyA9IHNjcm9sbGluZ0VsZW1lbnRCb3gu
dmlldygpLmJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMoKTsKKyAgICBpZiAoc2Nyb2xsU25h
cFR5cGUuc3RyaWN0bmVzcyA9PSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6Tm9uZSB8fCBib3hlc1dp
dGhTY3JvbGxTbmFwUG9zaXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBjbGVhclNuYXBPZmZz
ZXRzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGhhc0hvcml6b250YWxT
bmFwT2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OkJvdGgg
fHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6WEF4aXMgfHwgc2Nyb2xs
U25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6SW5saW5lOworICAgIGJvb2wgaGFzVmVy
dGljYWxTbmFwT2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6
OkJvdGggfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6WUF4aXMgfHwg
c2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6QmxvY2s7CisKKyAgICBhdXRv
IG1heFNjcm9sbE9mZnNldCA9IG1heGltdW1TY3JvbGxPZmZzZXQoKTsKKyAgICBhdXRvIHNjcm9s
bFBvc2l0aW9uID0gTGF5b3V0UG9pbnQgeyB0aGlzLT5zY3JvbGxQb3NpdGlvbigpIH07CisgICAg
Ym9vbCBzY3JvbGxlcklzUlRMID0gIXNjcm9sbGluZ0VsZW1lbnRCb3guc3R5bGUoKS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCk7CisKKyAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBzY3JvbGxpbmcg
Y29udGFpbmVyJ3Mgc25hcCBwb3J0LCB3aGVyZSB0aGUgdG9wIGxlZnQgb2YgdGhlIHNjcm9sbGlu
ZyBjb250YWluZXIncyBib3JkZXIgYm94IGlzIHRoZSBvcmlnaW4uCisgICAgYXV0byBzY3JvbGxT
bmFwUG9ydCA9IGNvbXB1dGVTY3JvbGxTbmFwUG9ydE9yQXJlYVJlY3Qodmlld3BvcnRSZWN0SW5C
b3JkZXJCb3hDb29yZGluYXRlcywgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNjcm9sbFBhZGRpbmco
KSwgSW5zZXRPck91dHNldDo6SW5zZXQpOworICAgIFNjcm9sbFNuYXBPZmZzZXRzSW5mb0J1aWxk
ZXIgYnVpbGRlcihzY3JvbGxTbmFwVHlwZS5zdHJpY3RuZXNzKTsKKyAgICBMT0dfV0lUSF9TVFJF
QU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJDb21wdXRpbmcgc2Nyb2xsIHNuYXAgb2Zmc2V0cyBm
b3IgIiA8PCB0aGlzIDw8ICIgaW4gc25hcCBwb3J0ICIgPDwgc2Nyb2xsU25hcFBvcnQpOworICAg
IGZvciAoYXV0byogY2hpbGQgOiBib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zKSB7CisgICAg
ICAgIGlmIChjaGlsZC0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lckZvclNuYXBwaW5nKCkg
IT0gJnNjcm9sbGluZ0VsZW1lbnRCb3gpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAvLyBUaGUgYm91bmRzIG9mIHRoZSBjaGlsZCBlbGVtZW50J3Mgc25hcCBhcmVhLCB3aGVyZSB0
aGUgdG9wIGxlZnQgb2YgdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBib3JkZXIgYm94IGlzIHRo
ZSBvcmlnaW4uCisgICAgICAgIC8vIFRoZSBzbmFwIGFyZWEgaXMgdGhlIGJvdW5kaW5nIGJveCBv
ZiB0aGUgY2hpbGQgZWxlbWVudCdzIGJvcmRlciBib3gsIGFmdGVyIGFwcGx5aW5nIHRyYW5zZm9y
bWF0aW9ucy4KKyAgICAgICAgLy8gRklYTUU6IEZvciBub3csIGp1c3QgY29uc2lkZXIgd2hldGhl
ciB0aGUgc2Nyb2xsZXIgaXMgUlRMLiBUaGUgYmVoYXZpb3Igb2YgTFRSIGJveGVzIGluc2lkZSBh
IFJUTCBzY3JvbGxlciBpcyBwb29ybHkgZGVmaW5lZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9j
c3N3Zy1kcmFmdHMvaXNzdWVzLzUzNjEuCisgICAgICAgIGF1dG8gc2Nyb2xsU25hcEFyZWEgPSBM
YXlvdXRSZWN0KGNoaWxkLT5sb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFF1YWQoY2hpbGQtPmJv
cmRlckJvdW5kaW5nQm94KCkpLCAmc2Nyb2xsaW5nRWxlbWVudEJveCkuYm91bmRpbmdCb3goKSk7
CisKKyAgICAgICAgLy8gbG9jYWxUb0NvbnRhaW5lclF1YWQgd2lsbCB0cmFuc2Zvcm0gdGhlIHNj
cm9sbCBzbmFwIGFyZWEgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbiwgZXhjZXB0IGluIHRoZSBjYXNl
IHRoYXQgdGhpcyBwb3NpdGlvbiBpcworICAgICAgICAvLyBjb21pbmcgZnJvbSBhIFNjcm9sbFZp
ZXcuIFdlIHdhbnQgdGhlIHRyYW5zZm9ybWVkIGFyZWEsIGJ1dCB3aXRob3V0IHNjcm9sbCBwb3Np
dGlvbiB0YWtlbiBpbnRvIGFjY291bnQuCisgICAgICAgIGlmICghaXNTY3JvbGxWaWV3KCkpCisg
ICAgICAgICAgICBzY3JvbGxTbmFwQXJlYS5tb3ZlQnkoc2Nyb2xsUG9zaXRpb24pOworCisgICAg
ICAgIHNjcm9sbFNuYXBBcmVhID0gY29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdChzY3Jv
bGxTbmFwQXJlYSwgY2hpbGQtPnN0eWxlKCkuc2Nyb2xsTWFyZ2luKCksIEluc2V0T3JPdXRzZXQ6
Ok91dHNldCk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwg
IiAgICBDb25zaWRlcmluZyBzY3JvbGwgc25hcCB0YXJnZXQgYXJlYSAiIDw8IHNjcm9sbFNuYXBB
cmVhKTsKKyAgICAgICAgYXV0byBhbGlnbm1lbnQgPSBjaGlsZC0+c3R5bGUoKS5zY3JvbGxTbmFw
QWxpZ24oKTsKKyAgICAgICAgaWYgKGhhc0hvcml6b250YWxTbmFwT2Zmc2V0cyAmJiBhbGlnbm1l
bnQueCAhPSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Tm9uZSkgeworICAgICAgICAgICAgYXV0
byBhYnNvbHV0ZVNjcm9sbFhQb3NpdGlvbiA9IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQo
c2Nyb2xsU25hcEFyZWEueCgpLCBzY3JvbGxTbmFwQXJlYS5tYXhYKCksIGFsaWdubWVudC54LCBz
Y3JvbGxlcklzUlRMKSAtIGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25hcFBv
cnQueCgpLCBzY3JvbGxTbmFwUG9ydC5tYXhYKCksIGFsaWdubWVudC54LCBzY3JvbGxlcklzUlRM
KTsKKyAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxPZmZzZXQgPSBjbGFtcFRvPGludD4o
c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHsgcm91bmRUb0ludChhYnNvbHV0ZVNjcm9sbFhQb3Np
dGlvbiksIDAgfSkueCgpLCAwLCBtYXhTY3JvbGxPZmZzZXQueCgpKTsKKyAgICAgICAgICAgIGJ1
aWxkZXIuYWRkSG9yaXpvbnRhbE9mZnNldChhYnNvbHV0ZVNjcm9sbE9mZnNldCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGhhc1ZlcnRpY2FsU25hcE9mZnNldHMgJiYgYWxpZ25tZW50LnkgIT0g
U2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6Ok5vbmUpIHsKKyAgICAgICAgICAgIGF1dG8gYWJzb2x1
dGVTY3JvbGxZUG9zaXRpb24gPSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNu
YXBBcmVhLnkoKSwgc2Nyb2xsU25hcEFyZWEubWF4WSgpLCBhbGlnbm1lbnQueSwgZmFsc2UpIC0g
Y29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwUG9ydC55KCksIHNjcm9sbFNu
YXBQb3J0Lm1heFkoKSwgYWxpZ25tZW50LnksIGZhbHNlKTsKKyAgICAgICAgICAgIGF1dG8gYWJz
b2x1dGVTY3JvbGxPZmZzZXQgPSBjbGFtcFRvPGludD4oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9u
KHsgMCwgcm91bmRUb0ludChhYnNvbHV0ZVNjcm9sbFlQb3NpdGlvbikgfSkueSgpLCAwLCBtYXhT
Y3JvbGxPZmZzZXQueSgpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYWRkVmVydGljYWxPZmZzZXQo
YWJzb2x1dGVTY3JvbGxPZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9zbmFwT2Zm
c2V0c0luZm8gPSBidWlsZGVyLmJ1aWxkKHNjcm9sbFNuYXBQb3J0KTsKKyAgICBBU1NFUlQobV9z
bmFwT2Zmc2V0c0luZm8pOworCisgICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mby0+aG9yaXpvbnRh
bFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xs
U25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgaG9yaXpvbnRhbCBzY3JvbGwgc25hcCBvZmZz
ZXRzOiAiIDw8IGhvcml6b250YWxTbmFwT2Zmc2V0cyk7CisgICAgICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21wdXRlZCBob3Jpem9udGFsIHNjcm9sbCBz
bmFwIG9mZnNldCByYW5nZXM6ICIgPDwgaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMpOworICAg
IH0gZWxzZQorICAgICAgICBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPSAwOwor
CisgICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mby0+dmVydGljYWxTbmFwT2Zmc2V0cy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+
IENvbXB1dGVkIHZlcnRpY2FsIHNjcm9sbCBzbmFwIG9mZnNldHM6ICIgPDwgdmVydGljYWxTbmFw
T2Zmc2V0cyk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwg
IiA9PiBDb21wdXRlZCB2ZXJ0aWNhbCBzY3JvbGwgc25hcCBvZmZzZXQgcmFuZ2VzOiAiIDw8IHZl
cnRpY2FsU25hcE9mZnNldFJhbmdlcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY3VycmVudFZl
cnRpY2FsU25hcFBvaW50SW5kZXggPSAwOworCisgICAgLy8gQ29uc2lkZXIgaGF2aW5nIGEgbm9u
LWVtcHR5IHNldCBvZiBzbmFwIG9mZnNldHMgYXMgYSBjdWUgdG8gaW5pdGlhbGl6ZSB0aGUgU2Ny
b2xsQW5pbWF0b3IuCisgICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mby0+aXNFbXB0eSgpKQorICAg
ICAgICBzY3JvbGxBbmltYXRvcigpOworfQogI2Vsc2UKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVw
ZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuaAppbmRleCA4NTFhMDJmY2JiM2U5NzY5MWJmMDFkOWIyMTA5NzFkOWFlNmQ3OTQ5Li4z
YzY2ZGMzMjUzZmE3OWVjZmNiNjg5NjY1NjE1ZjBjOWU0NGU1MzgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKQEAgLTQ0LDYgKzQ0LDggQEAgY2xhc3MgTGF5b3V0
UG9pbnQ7CiBjbGFzcyBMYXlvdXRTaXplOwogY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwogY2xh
c3MgUGxhdGZvcm1XaGVlbEV2ZW50OworY2xhc3MgUmVuZGVyQm94OworY2xhc3MgUmVuZGVyU3R5
bGU7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBU
aWxlZEJhY2tpbmc7CkBAIC05MSwxNCArOTMsMTYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiogdmVydGljYWxTbmFwT2Zmc2V0cygpIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlv
dXRVbml0Pj4qIGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiogdmVy
dGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xs
U25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+KiBzY3JvbGxTbmFwT2Zmc2V0SW5mbygpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIHsgfTsKLSAgICB2b2lkIHNl
dEhvcml6b250YWxTbmFwT2Zmc2V0cyhjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mKTsKLSAgICB2
b2lkIHNldFZlcnRpY2FsU25hcE9mZnNldHMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+Jik7Ci0g
ICAgdm9pZCBzZXRIb3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyhjb25zdCBWZWN0b3I8U2Nyb2xs
T2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+Jik7Ci0gICAgdm9pZCBzZXRWZXJ0aWNhbFNuYXBPZmZz
ZXRSYW5nZXMoY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYpOwor
CisgICAgLy8gVXBkYXRlIHRoZSBzbmFwIG9mZnNldHMgZm9yIHRoaXMgc2Nyb2xsYWJsZSBhcmVh
LCBnaXZlbiB0aGUgUmVuZGVyQm94IG9mIHRoZSBzY3JvbGwgY29udGFpbmVyLCB0aGUgUmVuZGVy
U3R5bGUKKyAgICAvLyB3aGljaCBkZWZpbmVzIHRoZSBzY3JvbGwtc25hcCBwcm9wZXJ0aWVzLCBh
bmQgdGhlIHZpZXdwb3J0IHJlY3RhbmdsZSB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0
IG9mCisgICAgLy8gdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBib3JkZXIgYm94LgorICAgIHZv
aWQgdXBkYXRlU25hcE9mZnNldHNGb3JFbGVtZW50KGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5n
RWxlbWVudEJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5
b3V0UmVjdCB2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzKTsKKwogICAgIHZvaWQg
Y2xlYXJTbmFwT2Zmc2V0cygpOwotICAgIHZvaWQgY2xlYXJIb3Jpem9udGFsU25hcE9mZnNldHMo
KTsKLSAgICB2b2lkIGNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cygpOworCiAgICAgdW5zaWduZWQg
Y3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dEhvcml6b250YWxTbmFwUG9pbnRJbmRleDsgfQogICAgIHZvaWQgc2V0Q3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleCh1bnNpZ25lZCBpbmRleCkgeyBtX2N1cnJlbnRIb3Jpem9udGFsU25h
cFBvaW50SW5kZXggPSBpbmRleDsgfQogICAgIHVuc2lnbmVkIGN1cnJlbnRWZXJ0aWNhbFNuYXBQ
b2ludEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRl
eDsgfQpAQCAtMzgzLDcgKzM4Nyw2IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBz
aG91bGQgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIHBlcmZvcm0gdGhlIGFjdHVhbAog
ICAgIC8vIHNjcm9sbCBvZiB0aGUgY29udGVudC4KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
T2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpID0gMDsKLSAgICBTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm88TGF5b3V0VW5pdD4mIGVuc3VyZVNuYXBPZmZzZXRzSW5mbygpOwogCiAgICAgbXV0YWJsZSBz
dGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IG1fc2Nyb2xsQW5pbWF0b3I7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAppbmRleCBm
YjJhYTg2MzdjZjhjNzMwZWVjMWU0MzNmZDZhYjAxMDhmZDliMTEyLi5mOTg5N2Q5N2U1MmI3M2Rm
MTBlZWY5NzFmZjYzY2M1NGExZWQzMzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCkBAIC0xNjAsMTMgKzE2MCwxMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKIAogI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhp
cywgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiwgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJh
bmdlPExheW91dFVuaXQ+PiYpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3Jv
bGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4qKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbFNu
YXBQb2ludHMoY29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+Jik7CiAgICAg
dm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcywgdW5z
aWduZWQpOwogICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQoU2Ny
b2xsT2Zmc2V0KTsKICAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlOyB9CiAgICAgdm9p
ZCBzZXRTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoYm9vbCBzdGF0ZSkgeyBtX2FjdGl2ZVNjcm9s
bFNuYXBJbmRleERpZENoYW5nZSA9IHN0YXRlOyB9CiAgICAgdW5zaWduZWQgYWN0aXZlU2Nyb2xs
U25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsU25hcFN0YXRlKGNvbnN0IFNjcm9sbGFibGVBcmVhJik7CiAKICAgICB2b2lkIHVwZGF0
ZUdlc3R1cmVJblByb2dyZXNzU3RhdGUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tCmlu
ZGV4IDdiZjAwNTEwZWQ5OWIyZWRhZWJhNjIzOWUyZjM5OWExMzM3NDdjOTEuLjZkZGZhMzhkYzA4
YTk0NDdkM2RmM2MyMmZjNDQ2N2M0ZTlkOGIzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQpAQCAtODEsMTEgKzgxLDYgQEAgc3Rh
dGljIGZsb2F0IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpCiB9CiAjZW5kaWYKIAotc3RhdGljIFNj
cm9sbEV2ZW50QXhpcyBvdGhlclNjcm9sbEV2ZW50QXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykK
LXsKLSAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBTY3Jv
bGxFdmVudEF4aXM6OlZlcnRpY2FsIDogU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsOwotfQot
CiBTY3JvbGxDb250cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKFNjcm9sbENvbnRyb2xsZXJDbGll
bnQmIGNsaWVudCkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKIHsKQEAgLTcyMCw3ICs3MTUsNyBA
QCBib29sIFNjcm9sbENvbnRyb2xsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmCiAgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9zY3JvbGxTbmFwU3RhdGUtPnNuYXBPZmZz
ZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpLmlzRW1wdHkoKSAmJiBtX3Nj
cm9sbFNuYXBTdGF0ZS0+c25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGlj
YWwpLmlzRW1wdHkoKSkKKyAgICBpZiAobV9zY3JvbGxTbmFwU3RhdGUtPnNuYXBPZmZzZXRzSW5m
bygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBzdGF0dXMg
PSB0b1doZWVsRXZlbnRTdGF0dXMod2hlZWxFdmVudC5waGFzZSgpLCB3aGVlbEV2ZW50Lm1vbWVu
dHVtUGhhc2UoKSk7CkBAIC04MjAsNDYgKzgxNSwzMSBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnNjcm9sbFNuYXBUaW1lckZpcmVkKCkKIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKLXZv
aWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKGNvbnN0IFNjcm9sbGFi
bGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Ny
b2xsU25hcFBvaW50cyhTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4qIHNuYXBPZmZz
ZXRzSW5mbykKIHsKLSAgICBpZiAoYXV0byogc25hcE9mZnNldHMgPSBzY3JvbGxhYmxlQXJlYS5o
b3Jpem9udGFsU25hcE9mZnNldHMoKSkgewotICAgICAgICBpZiAoYXV0byogc25hcE9mZnNldFJh
bmdlcyA9IHNjcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKCkpCi0gICAg
ICAgICAgICB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCwgKnNuYXBPZmZzZXRzLCAqc25hcE9mZnNldFJhbmdlcyk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
LCAqc25hcE9mZnNldHMsIHsgfSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHVwZGF0ZVNjcm9sbFNu
YXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCB7IH0sIHsgfSk7Ci0KLSAgICBp
ZiAoYXV0byogc25hcE9mZnNldHMgPSBzY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNuYXBPZmZzZXRz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHNuYXBPZmZzZXRSYW5nZXMgPSBzY3JvbGxhYmxlQXJl
YS52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoKSkKLSAgICAgICAgICAgIHVwZGF0ZVNjcm9sbFNu
YXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgKnNuYXBPZmZzZXRzLCAqc25hcE9m
ZnNldFJhbmdlcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVwZGF0ZVNjcm9sbFNuYXBQ
b2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgKnNuYXBPZmZzZXRzLCB7IH0pOwotICAg
IH0gZWxzZQotICAgICAgICB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpczo6
VmVydGljYWwsIHsgfSwgeyB9KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBz
dHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgdXBkYXRlU2Nyb2xsU25h
cFN0YXRlIGZvciAiIDw8IHNjcm9sbGFibGVBcmVhIDw8ICIgbmV3IHN0YXRlICIgPDwgVmFsdWVP
ck51bGwobV9zY3JvbGxTbmFwU3RhdGUuZ2V0KCkpKTsKKyAgICBpZiAoIXNuYXBPZmZzZXRzSW5m
bykgeworICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgdXBkYXRlU2Nyb2xsU25hcFBvaW50cygqc25hcE9mZnNldHNJbmZvKTsK
IH0KIAotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9s
bEV2ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBQb2ludHMsIGNv
bnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBSYW5nZXMpCit2
b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoY29uc3QgU2Nyb2xs
U25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0c0luZm8pCiB7Ci0gICAgYm9v
bCBzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzID0gZmFsc2U7Ci0gICAgaWYgKCFtX3Nj
cm9sbFNuYXBTdGF0ZSkgewotICAgICAgICBpZiAoc25hcFBvaW50cy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgaWYgKHNuYXBPZmZzZXRzSW5mby5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAg
fQogCisgICAgYm9vbCBzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzID0gIW1fc2Nyb2xs
U25hcFN0YXRlOworICAgIGlmICghbV9zY3JvbGxTbmFwU3RhdGUpCiAgICAgICAgIG1fc2Nyb2xs
U25hcFN0YXRlID0gbWFrZVVuaXF1ZTxTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZT4oKTsKLSAgICAg
ICAgc2hvdWxkQ29tcHV0ZUN1cnJlbnRTbmFwSW5kaWNlcyA9IHRydWU7Ci0gICAgfQogCi0gICAg
aWYgKHNuYXBQb2ludHMuaXNFbXB0eSgpICYmIG1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0
c0ZvckF4aXMob3RoZXJTY3JvbGxFdmVudEF4aXMoYXhpcykpLmlzRW1wdHkoKSkKLSAgICAgICAg
bV9zY3JvbGxTbmFwU3RhdGUgPSBudWxscHRyOwotICAgIGVsc2UgewotICAgICAgICBtX3Njcm9s
bFNuYXBTdGF0ZS0+c2V0U25hcE9mZnNldHNBbmRQb3NpdGlvblJhbmdlc0ZvckF4aXMoYXhpcywg
c25hcFBvaW50cywgc25hcFJhbmdlcyk7Ci0gICAgICAgIGlmIChzaG91bGRDb21wdXRlQ3VycmVu
dFNuYXBJbmRpY2VzKSB7Ci0gICAgICAgICAgICBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlc0Zv
ck9mZnNldChyb3VuZGVkSW50UG9pbnQobV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkpKTsKLSAgICAg
ICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRy
b2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMgLSBjb21wdXRlZCBpbml0aWFsIHNuYXAgaW5k
aWNlczogeCAiIDw8IG1fc2Nyb2xsU25hcFN0YXRlLT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkgPDwgIiwgeSAiIDw8IG1fc2Nyb2xsU25hcFN0YXRl
LT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKLSAg
ICAgICAgfQorICAgIG1fc2Nyb2xsU25hcFN0YXRlLT5zZXRTbmFwT2Zmc2V0SW5mbyhzbmFwT2Zm
c2V0c0luZm8pOworCisgICAgaWYgKHNob3VsZENvbXB1dGVDdXJyZW50U25hcEluZGljZXMpIHsK
KyAgICAgICAgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQocm91bmRlZEludFBv
aW50KG1fY2xpZW50LnNjcm9sbE9mZnNldCgpKSk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQ
b2ludHMgLSBjb21wdXRlZCBpbml0aWFsIHNuYXAgaW5kaWNlczogeCAiIDw8IG1fc2Nyb2xsU25h
cFN0YXRlLT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCkgPDwgIiwgeSAiIDw8IG1fc2Nyb2xsU25hcFN0YXRlLT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlz
KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKICAgICB9CiB9CiAKQEAgLTg4NywxNCArODY3
LDE0IEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZv
ckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzCiAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBt
X2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKTsKICAgICBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYg
c25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOwogCi0gICAgYXV0byBzbmFwT2Zmc2V0cyA9
IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoYXhpcyk7CisgICAgYXV0byBzbmFwT2Zmc2V0
cyA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0luZm8oKS5vZmZzZXRzRm9yQXhpcyhheGlzKTsKICAg
ICBpZiAoIXNuYXBPZmZzZXRzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTGF5b3V0
VW5pdCBjbGFtcGVkT2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgoTGF5b3V0VW5pdChvZmZzZXQg
LyBzY2FsZUZhY3RvciksIHNuYXBPZmZzZXRzLmZpcnN0KCkpLCBzbmFwT2Zmc2V0cy5sYXN0KCkp
OwogCiAgICAgdW5zaWduZWQgYWN0aXZlSW5kZXggPSAwOwotICAgIGNsb3Nlc3RTbmFwT2Zmc2V0
KHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoYXhpcyksIHNuYXBTdGF0ZS5zbmFwT2Zmc2V0
UmFuZ2VzRm9yQXhpcyhheGlzKSwgY2xhbXBlZE9mZnNldCwgMCwgYWN0aXZlSW5kZXgpOworICAg
IGNsb3Nlc3RTbmFwT2Zmc2V0KHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0luZm8oKSwgYXhpcywgY2xh
bXBlZE9mZnNldCwgMCwgYWN0aXZlSW5kZXgpOwogCiAgICAgaWYgKGFjdGl2ZUluZGV4ID09IGFj
dGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcykpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZS5oCmluZGV4IDBiY2U2YjhjNDdhY2ZiMzFlZDc2NWJiOTg2MDkxMGFjZGUyYWFkMzAuLmVl
MDdlY2E2MjkwNzRhNWRhZmM4ZGMwMTA2NmU2NDg4NjcwZTU5ODIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaApA
QCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKIAotI2luY2x1
ZGUgIkF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNp
bmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgpAQCAtNTMsMjcg
KzUyLDggQEAgZW51bSBjbGFzcyBTY3JvbGxTbmFwU3RhdGUgewogY2xhc3MgU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50
QXhpcyBheGlzKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsID8gbV9zbmFwT2Zmc2V0c1ggOiBtX3NuYXBPZmZzZXRzWTsKLSAg
ICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBz
bmFwT2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IG1f
c25hcE9mZnNldFJhbmdlc1ggOiBtX3NuYXBPZmZzZXRSYW5nZXNZOwotICAgIH0KLQotICAgIHZv
aWQgc2V0U25hcE9mZnNldHNBbmRQb3NpdGlvblJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
IGF4aXMsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3Rv
cjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRSYW5nZXMpCi0gICAg
ewotICAgICAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpIHsKLSAg
ICAgICAgICAgIG1fc25hcE9mZnNldHNYID0gc25hcE9mZnNldHM7Ci0gICAgICAgICAgICBtX3Nu
YXBPZmZzZXRSYW5nZXNYID0gc25hcE9mZnNldFJhbmdlczsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIG1fc25hcE9mZnNldHNZID0gc25hcE9mZnNldHM7Ci0gICAgICAgICAgICBtX3Nu
YXBPZmZzZXRSYW5nZXNZID0gc25hcE9mZnNldFJhbmdlczsKLSAgICAgICAgfQotICAgIH0KLQor
ICAgIGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYgc25hcE9mZnNldHNJ
bmZvKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwT2Zmc2V0c0luZm87IH0KKyAgICB2b2lkIHNldFNu
YXBPZmZzZXRJbmZvKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYgc25h
cE9mZnNldHNJbmZvKSB7IG1fc25hcE9mZnNldHNJbmZvID0gc25hcE9mZnNldHNJbmZvOyB9CiAg
ICAgU2Nyb2xsU25hcFN0YXRlIGN1cnJlbnRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dFN0YXRlOyB9CiAKICAgICB1bnNpZ25lZCBhY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpcyBheGlzKSBjb25zdApAQCAtOTgsMTcgKzc4LDE0IEBAIHB1YmxpYzoKICAgICB2b2lk
IHRyYW5zaXRpb25Ub0Rlc3RpbmF0aW9uUmVhY2hlZFN0YXRlKCk7CiAKIHByaXZhdGU6Ci0gICAg
ZmxvYXQgdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+
JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+
PiYgc25hcE9mZnNldFJhbmdlcywgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFydE9m
ZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IGRlbHRh
LCB1bnNpZ25lZCYgb3V0QWN0aXZlU25hcEluZGV4KSBjb25zdDsKKyAgICBmbG9hdCB0YXJnZXRP
ZmZzZXRGb3JTdGFydE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGZsb2F0IG1heFNjcm9sbE9mZnNl
dCwgZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHByZWRpY3RlZE9mZnNldCwgZmxvYXQgcGFnZVNj
YWxlLCBmbG9hdCBkZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkgY29uc3Q7CiAg
ICAgdm9pZCB0ZWFyZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSk7CiAgICAg
dm9pZCBzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSwgY29uc3QgRmxvYXRT
aXplJiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHBh
Z2VTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNldCwgY29uc3QgRmxvYXRTaXpl
JiBpbml0aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbERlbHRhKTsKIAogICAg
IFNjcm9sbFNuYXBTdGF0ZSBtX2N1cnJlbnRTdGF0ZSB7IFNjcm9sbFNuYXBTdGF0ZTo6VXNlcklu
dGVyYWN0aW9uIH07CiAKLSAgICBWZWN0b3I8TGF5b3V0VW5pdD4gbV9zbmFwT2Zmc2V0c1g7Ci0g
ICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiBtX3NuYXBPZmZzZXRSYW5n
ZXNYOworICAgIFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiBtX3NuYXBPZmZzZXRz
SW5mbzsKICAgICB1bnNpZ25lZCBtX2FjdGl2ZVNuYXBJbmRleFggeyAwIH07Ci0gICAgVmVjdG9y
PExheW91dFVuaXQ+IG1fc25hcE9mZnNldHNZOwotICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5n
ZTxMYXlvdXRVbml0Pj4gbV9zbmFwT2Zmc2V0UmFuZ2VzWTsKICAgICB1bnNpZ25lZCBtX2FjdGl2
ZVNuYXBJbmRleFkgeyAwIH07CiAKICAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9y
U3RhdGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5tbQppbmRleCA5NDUwNjAzNjU5ZmNhMThiZDJlYjc4MjAyM2ZhYzEzZDNhNjAxZTk0
Li4zNTZmOWViNjhkNWViNDg0ZGYyY2M5NDkxZmFlYjAxMjE5MmNiOTZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZS5tbQpAQCAtNTEsOCArNTEsOCBAQCB2b2lkIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpzZXR1
cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSBzdGF0ZSwgY29ucwogCiAgICAgbV9t
b21lbnR1bUNhbGN1bGF0b3IgPSBTY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3I6OmNyZWF0ZSh2
aWV3cG9ydFNpemUsIGNvbnRlbnRTaXplLCBpbml0aWFsT2Zmc2V0LCBpbml0aWFsRGVsdGEsIGlu
aXRpYWxWZWxvY2l0eSk7CiAgICAgYXV0byBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQgPSBtX21vbWVu
dHVtQ2FsY3VsYXRvci0+cHJlZGljdGVkRGVzdGluYXRpb25PZmZzZXQoKTsKLSAgICBmbG9hdCB0
YXJnZXRPZmZzZXRYID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQobV9zbmFwT2Zmc2V0c1gs
IG1fc25hcE9mZnNldFJhbmdlc1gsIGNvbnRlbnRTaXplLndpZHRoKCkgLSB2aWV3cG9ydFNpemUu
d2lkdGgoKSwgaW5pdGlhbE9mZnNldC54KCksIHByZWRpY3RlZFNjcm9sbFRhcmdldC53aWR0aCgp
LCBwYWdlU2NhbGUsIGluaXRpYWxEZWx0YS53aWR0aCgpLCBtX2FjdGl2ZVNuYXBJbmRleFgpOwot
ICAgIGZsb2F0IHRhcmdldE9mZnNldFkgPSB0YXJnZXRPZmZzZXRGb3JTdGFydE9mZnNldChtX3Nu
YXBPZmZzZXRzWSwgbV9zbmFwT2Zmc2V0UmFuZ2VzWSwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2
aWV3cG9ydFNpemUuaGVpZ2h0KCksIGluaXRpYWxPZmZzZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxU
YXJnZXQuaGVpZ2h0KCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRhLmhlaWdodCgpLCBtX2FjdGl2
ZVNuYXBJbmRleFkpOworICAgIGZsb2F0IHRhcmdldE9mZnNldFggPSB0YXJnZXRPZmZzZXRGb3JT
dGFydE9mZnNldChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIGNvbnRlbnRTaXplLndpZHRo
KCkgLSB2aWV3cG9ydFNpemUud2lkdGgoKSwgaW5pdGlhbE9mZnNldC54KCksIHByZWRpY3RlZFNj
cm9sbFRhcmdldC53aWR0aCgpLCBwYWdlU2NhbGUsIGluaXRpYWxEZWx0YS53aWR0aCgpLCBtX2Fj
dGl2ZVNuYXBJbmRleFgpOworICAgIGZsb2F0IHRhcmdldE9mZnNldFkgPSB0YXJnZXRPZmZzZXRG
b3JTdGFydE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBjb250ZW50U2l6ZS5oZWln
aHQoKSAtIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSwgaW5pdGlhbE9mZnNldC55KCksIHByZWRpY3Rl
ZFNjcm9sbFRhcmdldC5oZWlnaHQoKSwgcGFnZVNjYWxlLCBpbml0aWFsRGVsdGEuaGVpZ2h0KCks
IG1fYWN0aXZlU25hcEluZGV4WSk7CiAgICAgbV9tb21lbnR1bUNhbGN1bGF0b3ItPnNldFJldGFy
Z2V0ZWRTY3JvbGxPZmZzZXQoeyB0YXJnZXRPZmZzZXRYLCB0YXJnZXRPZmZzZXRZIH0pOwogICAg
IG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgbV9jdXJyZW50U3RhdGUg
PSBzdGF0ZTsKQEAgLTkxLDE0ICs5MSwxNSBAQCBGbG9hdFBvaW50IFNjcm9sbFNuYXBBbmltYXRv
clN0YXRlOjpjdXJyZW50QW5pbWF0ZWRTY3JvbGxPZmZzZXQoYm9vbCYgaXNBbmltYXRpbwogICAg
IHJldHVybiBtX21vbWVudHVtQ2FsY3VsYXRvci0+c2Nyb2xsT2Zmc2V0QWZ0ZXJFbGFwc2VkVGlt
ZShlbGFwc2VkVGltZSk7CiB9CiAKLWZsb2F0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjp0YXJn
ZXRPZmZzZXRGb3JTdGFydE9mZnNldChjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZz
ZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBzbmFwT2Zm
c2V0UmFuZ2VzLCBmbG9hdCBtYXhTY3JvbGxPZmZzZXQsIGZsb2F0IHN0YXJ0T2Zmc2V0LCBmbG9h
dCBwcmVkaWN0ZWRPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgaW5pdGlhbERlbHRhLCB1
bnNpZ25lZCYgb3V0QWN0aXZlU25hcEluZGV4KSBjb25zdAorZmxvYXQgU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGU6OnRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlz
LCBmbG9hdCBtYXhTY3JvbGxPZmZzZXQsIGZsb2F0IHN0YXJ0T2Zmc2V0LCBmbG9hdCBwcmVkaWN0
ZWRPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgaW5pdGlhbERlbHRhLCB1bnNpZ25lZCYg
b3V0QWN0aXZlU25hcEluZGV4KSBjb25zdAogeworICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRz
ID0gbV9zbmFwT2Zmc2V0c0luZm8ub2Zmc2V0c0ZvckF4aXMoYXhpcyk7CiAgICAgaWYgKHNuYXBP
ZmZzZXRzLmlzRW1wdHkoKSkgewogICAgICAgICBvdXRBY3RpdmVTbmFwSW5kZXggPSBpbnZhbGlk
U25hcE9mZnNldEluZGV4OwogICAgICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oc3RhcnRPZmZz
ZXQsIDAsIG1heFNjcm9sbE9mZnNldCk7CiAgICAgfQogCi0gICAgZmxvYXQgdGFyZ2V0T2Zmc2V0
ID0gY2xvc2VzdFNuYXBPZmZzZXQoc25hcE9mZnNldHMsIHNuYXBPZmZzZXRSYW5nZXMsIExheW91
dFVuaXQocHJlZGljdGVkT2Zmc2V0IC8gcGFnZVNjYWxlKSwgaW5pdGlhbERlbHRhLCBvdXRBY3Rp
dmVTbmFwSW5kZXgpOworICAgIGZsb2F0IHRhcmdldE9mZnNldCA9IGNsb3Nlc3RTbmFwT2Zmc2V0
KG1fc25hcE9mZnNldHNJbmZvLCBheGlzLCBMYXlvdXRVbml0KHByZWRpY3RlZE9mZnNldCAvIHBh
Z2VTY2FsZSksIGluaXRpYWxEZWx0YSwgb3V0QWN0aXZlU25hcEluZGV4KTsKICAgICBmbG9hdCBt
aW5pbXVtVGFyZ2V0T2Zmc2V0ID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHNuYXBPZmZzZXRzLmZpcnN0
KCkpOwogICAgIGZsb2F0IG1heGltdW1UYXJnZXRPZmZzZXQgPSBzdGQ6Om1pbjxmbG9hdD4obWF4
U2Nyb2xsT2Zmc2V0LCBzbmFwT2Zmc2V0cy5sYXN0KCkpOwogICAgIHRhcmdldE9mZnNldCA9IGNs
YW1wVG88ZmxvYXQ+KHRhcmdldE9mZnNldCwgbWluaW11bVRhcmdldE9mZnNldCwgbWF4aW11bVRh
cmdldE9mZnNldCk7CkBAIC0xMTUsMTIgKzExNiwxMiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxPZmZzZXRSYW5nZTxUPiYgcmFuZ2UpCiBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZSYgc3RhdGUpCiB7CiAgICAgdHMgPDwgIlNjcm9sbFNuYXBBbmltYXRvclN0YXRlIjsK
LSAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyB4Iiwgc3RhdGUuc25hcE9mZnNldHNG
b3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgic25hcCBvZmZzZXRzIHkiLCBzdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbCkpOwotICAgIGlmICghc3RhdGUuc25hcE9mZnNldFJhbmdlc0ZvckF4aXMo
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKS5pc0VtcHR5KCkpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic25hcCBvZmZzZXRzIHJhbmdlcyB4Iiwgc3RhdGUuc25hcE9mZnNldFJhbmdlc0Zv
ckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7Ci0gICAgaWYgKCFzdGF0ZS5zbmFw
T2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKS5pc0VtcHR5KCkp
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHJhbmdlcyB5Iiwgc3RhdGUu
c25hcE9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHgiLCBzdGF0ZS5zbmFwT2Zmc2V0c0luZm8o
KS5vZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyB5Iiwgc3RhdGUuc25hcE9mZnNldHNJbmZvKCkub2Zm
c2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOworICAgIGlmICghc3RhdGUu
c25hcE9mZnNldHNJbmZvKCkub2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwpLmlzRW1wdHkoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNl
dHMgcmFuZ2VzIHgiLCBzdGF0ZS5zbmFwT2Zmc2V0c0luZm8oKS5vZmZzZXRSYW5nZXNGb3JBeGlz
KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkpOworICAgIGlmICghc3RhdGUuc25hcE9mZnNl
dHNJbmZvKCkub2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKS5p
c0VtcHR5KCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHJhbmdlcyB5
Iiwgc3RhdGUuc25hcE9mZnNldHNJbmZvKCkub2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXM6OlZlcnRpY2FsKSk7CiAKICAgICB0cy5kdW1wUHJvcGVydHkoImFjdGl2ZSBzbmFwIGlu
ZGV4IHgiLCBzdGF0ZS5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9y
aXpvbnRhbCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWN0aXZlIHNuYXAgaW5kZXggeSIsIHN0
YXRlLmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMzI2ZTI4ZTYwYzQ3
OGIzYWFkNzY5YTZjMTQ1ZDNlNDRhMTAwNTlkMi4uNTE5MjViYWY3NzhlZWVkYmZjZmNjY2E0YTUz
ZTk5ZTdhYTMyZmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CkBAIC0xMzUsMTAgKzEzNSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCi0jaW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCi0jZW5kaWYKLQogI2RlZmlu
ZSBNSU5fSU5URVJTRUNUX0ZPUl9SRVZFQUwgMzIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzYxNiw3ICszNjEyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMoKQog
ICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQo
KS0+cmVuZGVyQm94KCk7Ci0gICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgq
dGhpcywgKmJveCwgYm94LT5zdHlsZSgpLCBib3gtPnBhZGRpbmdCb3hSZWN0KCkpOworICAgIHVw
ZGF0ZVNuYXBPZmZzZXRzRm9yRWxlbWVudCgqYm94LCBib3gtPnN0eWxlKCksIGJveC0+cGFkZGlu
Z0JveFJlY3QoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jl
c3MoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5
ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5SU9TLm1tCmluZGV4IDYyYWQ5ODUwNjllMjEyM2FkYzM2YmM3ODFjNzZmNTk3
NjFiNzg0NjMuLmQ4MTg5ZmRjODkyNzRmMDljOGViMjY0YThjNWRhNWY0NTg1ZDVjZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJ
T1MubW0KQEAgLTQxLDcgKzQxLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVU
cmVlLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotI2ltcG9ydCA8V2ViQ29yZS9B
eGlzU2Nyb2xsU25hcE9mZnNldHMuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFR5cGVzLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQppbmRl
eCA0YzI4OGU0YmFjMWI1ZTQ1OWRlYzc0ZmIzZTNiNWM4YjViZGNkOGY3Li5iZTJkZWNhNDU1N2Jk
NTI4ZTg2MzNjMzViZDI5MDA1YWQ1NTA4NDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVl
L2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCkBAIC00NSw4ICs0
NSw4IEBACiAjaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KIAogI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCi0jaW1wb3J0IDxXZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaD4KKyNpbXBvcnQgPFdlYkNvcmUv
U2Nyb2xsVHlwZXMuaD4KICNlbmRpZgogCiAKQEAgLTEwNywxNyArMTA3LDE3IEBAIC0gKHZvaWQp
c2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aXRo
VmVsb2NpdHk6KENHUG9pCiAgICAgdW5zaWduZWQgb3JpZ2luYWxIb3Jpem9udGFsU25hcFBvc2l0
aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50
SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7CiAgICAgdW5zaWduZWQgb3JpZ2luYWxWZXJ0aWNh
bFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2Rl
KCkuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKIAotICAgIGlmICghX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9mZnNldHMo
KS5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIV9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3Jv
bGxpbmdOb2RlKCkuc25hcE9mZnNldHNJbmZvKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1w
dHkoKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleDsKLSAgICAgICAgZmxvYXQgcG90ZW50aWFs
U25hcFBvc2l0aW9uID0gV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9sbGluZ1RyZWVO
b2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSwgX3Nj
cm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9m
ZnNldFJhbmdlcygpLCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54LCBpbmRleCk7CisgICAg
ICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IFdlYkNvcmU6OmNsb3Nlc3RTbmFwT2Zm
c2V0KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc25hcE9mZnNl
dHNJbmZvKCksIFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgaG9yaXpvbnRh
bFRhcmdldCwgdmVsb2NpdHkueCwgaW5kZXgpOwogICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5k
ZXgoaW5kZXgpOwogICAgICAgICBpZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250
YWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS53aWR0aCkKICAgICAgICAgICAgIHRh
cmdldENvbnRlbnRPZmZzZXQtPnggPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247CiAgICAgfQogCi0g
ICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRp
Y2FsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIV9zY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc25hcE9mZnNldHNJbmZvKCkudmVydGljYWxTbmFw
T2Zmc2V0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZs
b2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IFdlYkNvcmU6OmNsb3Nlc3RTbmFwT2Zmc2V0KF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zm
c2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRp
Y2FsU25hcE9mZnNldFJhbmdlcygpLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgp
OworICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBXZWJDb3JlOjpjbG9zZXN0
U25hcE9mZnNldChfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNu
YXBPZmZzZXRzSW5mbygpLCBXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCB2ZXJ0
aWNhbFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgpOwogICAgICAgICBfc2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludElu
ZGV4KGluZGV4KTsKICAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGljYWxU
YXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCiAgICAgICAgICAgICB0YXJn
ZXRDb250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>