<?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>201602</bug_id>
          
          <creation_ts>2019-09-09 05:37:17 -0700</creation_ts>
          <short_desc>[GTK] Cannot build WebKitGTK 2.26.0 with MSE in Debian stable</short_desc>
          <delta_ts>2022-02-10 16:53:54 -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>WebKitGTK</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=201824</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alberto Garcia">berto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboya</cc>
    
    <cc>annulen</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1569120</commentid>
    <comment_count>0</comment_count>
    <who name="Alberto Garcia">berto</who>
    <bug_when>2019-09-09 05:37:17 -0700</bug_when>
    <thetext>Commit r249205 bumped the GStreamer dependency from 1.14 to 1.16 for ENABLE_MEDIA_SOURCE

Debian stable (buster) ships GStreamer 1.14.4, and because of this it is not possible to build WebKitGTK with Media Source Extensions enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569122</commentid>
    <comment_count>1</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-09-09 06:19:27 -0700</bug_when>
    <thetext>Can you revert this patch in 2.26 please? I thought we had agreed to finally not ship this with so little time for testing before the 2.26.0 release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569125</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-09-09 06:52:37 -0700</bug_when>
    <thetext>I didn&apos;t know anything. Which patch exactly should I revert?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569126</commentid>
    <comment_count>3</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-09-09 07:00:28 -0700</bug_when>
    <thetext>r249257</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569471</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-09-10 01:12:39 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #3)
&gt; r249257

Oh, I explicitly asked whether I had to merge that one. It&apos;s supposed to fix things, no? I&apos;m afraid I also merged other fixes on top that I would need to revert too. Isn&apos;t it possible to make current code work with 1.14? We&apos;ll have to do it in any case in trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569499</commentid>
    <comment_count>5</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2019-09-10 04:13:09 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #4)
&gt; (In reply to Philippe Normand from comment #3)
&gt; &gt; r249257
&gt; 
&gt; Oh, I explicitly asked whether I had to merge that one. It&apos;s supposed to fix
&gt; things, no? I&apos;m afraid I also merged other fixes on top that I would need to
&gt; revert too. Isn&apos;t it possible to make current code work with 1.14? We&apos;ll
&gt; have to do it in any case in trunk.

It fixes things (mostly seek bugs) but it also depends on playbin3 working well with it... Investigating if something could be done to have it work with 1.14 (and still use playbin3) is a non-trivial effort but could be done if it&apos;s important enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569503</commentid>
    <comment_count>6</comment_count>
    <who name="Alberto Garcia">berto</who>
    <bug_when>2019-09-10 04:21:35 -0700</bug_when>
    <thetext>The problem in a nutshell is that I cannot provide security updates (nor backports) of WebKitGTK 2.26 for Debian stable unless I disable the Media Source Extensions.

This arguably breaks the dependencies policy:

https://trac.webkit.org/wiki/WebKitGTK/DependenciesPolicy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569505</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-09-10 04:42:07 -0700</bug_when>
    <thetext>(In reply to Alicia Boya García from comment #5)
&gt; (In reply to Carlos Garcia Campos from comment #4)
&gt; &gt; (In reply to Philippe Normand from comment #3)
&gt; &gt; &gt; r249257
&gt; &gt; 
&gt; &gt; Oh, I explicitly asked whether I had to merge that one. It&apos;s supposed to fix
&gt; &gt; things, no? I&apos;m afraid I also merged other fixes on top that I would need to
&gt; &gt; revert too. Isn&apos;t it possible to make current code work with 1.14? We&apos;ll
&gt; &gt; have to do it in any case in trunk.
&gt; 
&gt; It fixes things (mostly seek bugs) but it also depends on playbin3 working
&gt; well with it... Investigating if something could be done to have it work
&gt; with 1.14 (and still use playbin3) is a non-trivial effort but could be done
&gt; if it&apos;s important enough.

Again, we have to do this in trunk in any case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569506</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-09-10 04:47:31 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #7)
&gt; (In reply to Alicia Boya García from comment #5)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #4)
&gt; &gt; &gt; (In reply to Philippe Normand from comment #3)
&gt; &gt; &gt; &gt; r249257
&gt; &gt; &gt; 
&gt; &gt; &gt; Oh, I explicitly asked whether I had to merge that one. It&apos;s supposed to fix
&gt; &gt; &gt; things, no? I&apos;m afraid I also merged other fixes on top that I would need to
&gt; &gt; &gt; revert too. Isn&apos;t it possible to make current code work with 1.14? We&apos;ll
&gt; &gt; &gt; have to do it in any case in trunk.
&gt; &gt; 
&gt; &gt; It fixes things (mostly seek bugs) but it also depends on playbin3 working
&gt; &gt; well with it... Investigating if something could be done to have it work
&gt; &gt; with 1.14 (and still use playbin3) is a non-trivial effort but could be done
&gt; &gt; if it&apos;s important enough.
&gt; 
&gt; Again, we have to do this in trunk in any case.

I don&apos;t mean using playbin3 with 1.14, it could simply have a fallback impl when gst &lt; 1.16. I don&apos;t mind the solution as long as we can still build with &lt; 1.16 and no regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570240</commentid>
    <comment_count>9</comment_count>
      <attachid>378643</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-09-12 06:27:01 -0700</bug_when>
    <thetext>Created attachment 378643
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571152</commentid>
    <comment_count>10</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2019-09-16 10:02:36 -0700</bug_when>
    <thetext>Splitting the MSE player in two is a *huge* burden for future maintenance and forward work in MSE. I don&apos;t want that to happen.

Please check this alternative solution to make 1.14 work with the new playbin3-based MSE player, which does not have that pitfall. https://bugs.webkit.org/show_bug.cgi?id=201824</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583261</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-10-24 00:56:36 -0700</bug_when>
    <thetext>This is no longer an issue</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378643</attachid>
            <date>2019-09-12 06:27:01 -0700</date>
            <delta_ts>2022-02-10 16:53:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-mse-gst-1.14.diff</filename>
            <type>text/plain</type>
            <size>120373</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2NmY1NGE0Mjg1Zi4uZTEw
MjRiMWNlYjAgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAxOS0wOS0xMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gQ2Fubm90IGJ1aWxkIFdlYktpdEdUSyAyLjI2LjAgd2l0
aCBNU0UgaW4gRGViaWFuIHN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjAxNjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVtb3ZlIHRoZSBjaGVjayBmb3IgR1NUIDEuMTYgdG8gZW5hYmxlIE1T
RS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2U6CisKIDIw
MTktMDktMDkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQuIEJ1bXAgR1RLIHZlcnNpb24gbnVtYmVycwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGZkYjExNTI2Mzg3Li4zNjFmODVjMjA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAor
MjAxOS0wOS0xMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dUS10gQ2Fubm90IGJ1aWxkIFdlYktpdEdUSyAyLjI2LjAgd2l0aCBNU0UgaW4g
RGViaWFuIHN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAxNjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnJpbmcgYmFjayB0aGUgb2xkIE1TRSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXNuJ3Qg
cmVxdWlyZSBwbGF5YmluMyB3aGVuIGJ1aWxkaW5nIHdpdGggR1NUIDwgMS4xNi4KKworICAgICAg
ICAqIHBsYXRmb3JtL0dTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9TaW5rQ2Fwc0NoYW5nZWRD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5vdGlmeVBsYXllck9mVmlkZW9DYXBzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb25maWd1cmVQbGF5U2lu
ayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6On5NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OmNvbmZpZ3VyZVBsYXlTaW5rKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y2hhbmdlUGlwZWxpbmVTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om5vdGlmeVNlZWtOZWVk
c0RhdGFGb3JUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6ZG9TZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlUGxheWJhY2tSYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vla2luZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldFJlYWR5
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojp3YWl0Rm9yU2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0U6OnNlZWtDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzb3VyY2VTZXR1cCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmFzeW5jU3RhdGVD
aGFuZ2VEb25lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6bWVkaWFTb3VyY2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjp1bmJsb2NrRHVyYXRpb25DaGFuZ2VzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25DaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dHJhY2tE
ZXRlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6Om1hcmtFbmRPZlN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OmN1cnJlbnRNZWRpYVRpbWUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJj
ZUNsaWVudEdTdHJlYW1lck1TRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUNs
aWVudEdTdHJlYW1lck1TRTo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOjptYXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U6OnJlbW92ZWRGcm9tTWVkaWFT
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U6
OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNF
OjplbnF1ZXVlU2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlQ2xpZW50R1N0
cmVhbWVyTVNFOjphbGxTYW1wbGVzSW5UcmFja0VucXVldWVkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZUdT
dHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bWFy
a0VuZE9mU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0cmVhbWVyOjp3
YWl0Rm9yU2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6c2Vla0NvbXBsZXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRTdHJlYW1C
eVRyYWNrSWQpOgorICAgICAgICAoZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKToKKyAg
ICAgICAgKHB1c2hTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6
c2V0V2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6
d2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6YWRk
U291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxpbmU6OnJlbW92
ZVNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVsaW5lOjphdHRh
Y2hUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVsaW5lOjpyZWF0dGFjaFRy
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxpbmU6Om5vdGlmeUR1cmF0aW9u
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVsaW5lOjptYXJrRW5kT2ZT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6Zmx1c2gpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF5YmFja1BpcGVsaW5lOjphbGxTYW1wbGVzSW5UcmFja0VucXVldWVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxpbmU6OnBpcGVsaW5lKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXI6OmVucXVldWVTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnNldFJlYWR5Rm9yTW9yZVNh
bXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6
bm90aWZ5UmVhZHlGb3JNb3JlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQbGF5YmluMi5j
cHA6IEFkZGVkLgorICAgICAgICAoZGlzYWJsZWRBcHBzcmNOZWVkRGF0YSk6CisgICAgICAgIChk
aXNhYmxlZEFwcHNyY0Vub3VnaERhdGEpOgorICAgICAgICAoZGlzYWJsZWRBcHBzcmNTZWVrRGF0
YSk6CisgICAgICAgIChlbmFibGVkQXBwc3JjRW5vdWdoRGF0YSk6CisgICAgICAgIChlbmFibGVk
QXBwc3JjU2Vla0RhdGEpOgorICAgICAgICAoZ2V0U3RyZWFtQnlBcHBzcmMpOgorICAgICAgICAo
d2Via2l0TWVkaWFTcmNDaGFpbik6CisgICAgICAgICh3ZWJraXRfbWVkaWFfc3JjX2luaXQpOgor
ICAgICAgICAod2ViS2l0TWVkaWFTcmNGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNy
Y1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjR2V0UHJvcGVydHkpOgorICAg
ICAgICAod2ViS2l0TWVkaWFTcmNEb0FzeW5jU3RhcnQpOgorICAgICAgICAod2ViS2l0TWVkaWFT
cmNEb0FzeW5jRG9uZSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlKToKKyAg
ICAgICAgKHdlYktpdE1lZGlhU3JjR2V0U2l6ZSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1F1
ZXJ5V2l0aFBhcmVudCk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1VwZGF0ZVByZXNlbnRhdGlv
blNpemUpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNMaW5rU3RyZWFtVG9TcmNQYWQpOgorICAg
ICAgICAod2ViS2l0TWVkaWFTcmNMaW5rU291cmNlUGFkKToKKyAgICAgICAgKHdlYktpdE1lZGlh
U3JjRnJlZVN0cmVhbSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0NoZWNrQWxsVHJhY2tzQ29u
ZmlndXJlZCk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1VyaUdldFR5cGUpOgorICAgICAgICAo
d2ViS2l0TWVkaWFTcmNHZXRQcm90b2NvbHMpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNHZXRV
cmkpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNTZXRVcmkpOgorICAgICAgICAod2ViS2l0TWVk
aWFTcmNVcmlIYW5kbGVySW5pdCk6CisgICAgICAgIChzZWVrTmVlZHNEYXRhTWFpblRocmVhZCk6
CisgICAgICAgIChub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVzTWFpblRocmVhZCk6CisgICAgICAg
ICh3ZWJLaXRNZWRpYVNyY1NldE1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgICh3ZWJLaXRN
ZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1ByZXBh
cmVTZWVrKToKKyAgICAgICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAgICAgKFdURjo6cmVmR1B0
cjxXZWJLaXRNZWRpYVNyYz4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8V2ViS2l0TWVkaWFT
cmM+KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1l
ZGlhU291cmNlR1N0cmVhbWVyUGxheWJpbjIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1l
ci5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVk
aWFTb3VyY2VHU3RyZWFtZXJQbGF5YmluMlByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lclBs
YXliaW4zLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFt
ZXJQbGF5YmluMy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmguCisKIDIwMTktMDkt
MTIgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBXZWJQ
cm9jZXNzIHByb2Nlc3NJZGVudGlmaWVyIHRvIGlkZW50aWZ5IFNlcnZpY2UgV29ya2VyIGNvbm5l
Y3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggZjkzY2U2
YjAxZTMuLmUwNzQyZWNiZDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
U3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNt
YWtlCkBAIC0zMiw4ICszMiwxMCBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVE
SU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9X
ZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lclBsYXliaW4yLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0
cmVhbWVyUGxheWJpbjMuY3BwCiAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2Vi
cnRjL0dTdHJlYW1lclZpZGVvRGVjb2RlckZhY3RvcnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDA1YzI0N2ZkMmRk
Li4yN2JmZWMzMTY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAKQEAgLTkxOCw2ICs5MTgsMjEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8oKQogICAgIG1fcGxheWVyLT5jbGllbnQoKS5t
ZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwogfQogCisjaWYgIUdTVF9DSEVDS19W
RVJTSU9OKDEsIDE2LCAwKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVv
U2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5
ZXIpCit7CisgICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNh
dGlvbjo6VmlkZW9DYXBzQ2hhbmdlZCwgW3BsYXllcl0geworICAgICAgICBwbGF5ZXItPm5vdGlm
eVBsYXllck9mVmlkZW9DYXBzKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpCit7CisgICAgbV92aWRlb1Np
emUgPSBJbnRTaXplKCk7CisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5l
VXBkYXRlZChtX3BsYXllcik7Cit9CisjZW5kaWYKKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmF1ZGlvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ciogcGxheWVyKQogewogICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWRO
b3RpZmljYXRpb246OkF1ZGlvQ2hhbmdlZCwgW3BsYXllcl0gewpAQCAtMjM4MywxMiArMjM5OCwx
NSBAQCBBdWRpb1NvdXJjZVByb3ZpZGVyKiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1
ZGlvU291cmNlUHJvdmlkZXIoKQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y3JlYXRlR1NUUGxheUJpbihjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwaXBlbGluZU5h
bWUpCiB7Ci0gICAgY29uc3QgZ2NoYXIqIHBsYXliaW5OYW1lID0gInBsYXliaW4iOwotCi0gICAg
Ly8gTVNFIGFuZCBNZWRpYXN0cmVhbSByZXF1aXJlIHBsYXliaW4zLiBSZWd1bGFyIHBsYXliYWNr
IGNhbiB1c2UgcGxheWJpbjMgb24tZGVtYW5kIHdpdGggdGhlCisgICAgLy8gTVNFIGFuZCBNZWRp
YXN0cmVhbSByZXF1aXJlIHBsYXliaW4zIHdpdGggR1N0cmVhbWVyID49IDEuMTYuIFJlZ3VsYXIg
cGxheWJhY2sgY2FuIHVzZSBwbGF5YmluMyBvbi1kZW1hbmQgd2l0aCB0aGUKICAgICAvLyBXRUJL
SVRfR1NUX1VTRV9QTEFZQklOMyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLSAgICBpZiAoKGlzTWVk
aWFTb3VyY2UoKSB8fCB1cmwucHJvdG9jb2xJcygibWVkaWFzdHJlYW0iKSB8fCBnX2dldGVudigi
V0VCS0lUX0dTVF9VU0VfUExBWUJJTjMiKSkpCi0gICAgICAgIHBsYXliaW5OYW1lID0gInBsYXli
aW4zIjsKKyAgICBib29sIGNhblVzZVBsYXliaW4zOworI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEs
IDE2LCAwKQorICAgIGNhblVzZVBsYXliaW4zID0gaXNNZWRpYVNvdXJjZSgpIHx8IHVybC5wcm90
b2NvbElzKCJtZWRpYXN0cmVhbSIpIHx8IGdfZ2V0ZW52KCJXRUJLSVRfR1NUX1VTRV9QTEFZQklO
MyIpOworI2Vsc2UKKyAgICBjYW5Vc2VQbGF5YmluMyA9ICghaXNNZWRpYVNvdXJjZSgpICYmIGdf
Z2V0ZW52KCJXRUJLSVRfR1NUX1VTRV9QTEFZQklOMyIpKSB8fCB1cmwucHJvdG9jb2xJcygibWVk
aWFzdHJlYW0iKTsKKyNlbmRpZgorICAgIGNvbnN0IGdjaGFyKiBwbGF5YmluTmFtZSA9IGNhblVz
ZVBsYXliaW4zID8gInBsYXliaW4zIiA6ICJwbGF5YmluIjsKIAogICAgIGlmIChtX3BpcGVsaW5l
KSB7CiAgICAgICAgIGlmICghZ19zdHJjbXAwKEdTVF9PQkpFQ1RfTkFNRShnc3RfZWxlbWVudF9n
ZXRfZmFjdG9yeShtX3BpcGVsaW5lLmdldCgpKSksIHBsYXliaW5OYW1lKSkgewpAQCAtMjQ3MCw2
ICsyNDg4LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQ
bGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAKICAgICBnX29iamVjdF9zZXQo
bV9waXBlbGluZS5nZXQoKSwgInZpZGVvLXNpbmsiLCBjcmVhdGVWaWRlb1NpbmsoKSwgImF1ZGlv
LXNpbmsiLCBjcmVhdGVBdWRpb1NpbmsoKSwgbnVsbHB0cik7CiAKKyNpZiAhR1NUX0NIRUNLX1ZF
UlNJT04oMSwgMTYsIDApCisgICAgY29uZmlndXJlUGxheVNpbmsoKTsKKyNlbmRpZgorCiAgICAg
aWYgKG1fcHJlc2VydmVzUGl0Y2gpIHsKICAgICAgICAgR3N0RWxlbWVudCogc2NhbGUgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoInNjYWxldGVtcG8iLCBudWxscHRyKTsKIApAQCAtMjQ4OSw2
ICsyNTExLDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQ
bGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgR1NUX1dBUk5JTkcoIlRoZSB2aWRlb2ZsaXAgZWxlbWVudCBpcyBtaXNzaW5nLCB2
aWRlbyByb3RhdGlvbiBzdXBwb3J0IGlzIG5vdyBkaXNhYmxlZC4gUGxlYXNlIGNoZWNrIHlvdXIg
Z3N0LXBsdWdpbnMtZ29vZCBpbnN0YWxsYXRpb24uIik7CiAgICAgfQorCisjaWYgIUdTVF9DSEVD
S19WRVJTSU9OKDEsIDE2LCAwKQorICAgIEdSZWZQdHI8R3N0UGFkPiB2aWRlb1NpbmtQYWQgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV92aWRlb1NpbmsuZ2V0KCksICJz
aW5rIikpOworICAgIGlmICh2aWRlb1NpbmtQYWQpCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZCh2aWRlb1NpbmtQYWQuZ2V0KCksICJub3RpZnk6OmNhcHMiLCBHX0NBTExCQUNLKHZp
ZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyNlbmRpZgogfQogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2ltdWxhdGVBdWRpb0ludGVycnVwdGlvbigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggZTA0MTIz
NTM3Y2MuLmM1NjJkZTA4MmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5oCkBAIC0xMjEsNiArMTIxLDEwIEBAIHB1YmxpYzoKIAogICAgIEdzdEVsZW1l
bnQqIGF1ZGlvU2luaygpIGNvbnN0IG92ZXJyaWRlOwogCisjaWYgIUdTVF9DSEVDS19WRVJTSU9O
KDEsIDE2LCAwKQorICAgIHZpcnR1YWwgdm9pZCBjb25maWd1cmVQbGF5U2luaygpIHsgfQorI2Vu
ZGlmCisKICAgICB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKSBvdmVycmlkZTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlKTsKQEAgLTIxMyw2
ICsyMTcsOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIG5vdGlmeVBsYXllck9mVmlkZW8oKTsK
ICAgICB2b2lkIG5vdGlmeVBsYXllck9mQXVkaW8oKTsKKyNpZiAhR1NUX0NIRUNLX1ZFUlNJT04o
MSwgMTYsIDApCisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpOworI2VuZGlmCiAK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlRleHQoKTsK
QEAgLTIzMCw2ICsyMzcsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgc291cmNlU2V0
dXBDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqLCBHc3RFbGVtZW50Kik7CiAg
ICAgc3RhdGljIHZvaWQgdmlkZW9DaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKik7CiAgICAgc3RhdGljIHZvaWQgYXVkaW9DaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyKik7CisjaWYgIUdTVF9DSEVDS19WRVJTSU9OKDEsIDE2LCAwKQor
ICAgIHN0YXRpYyB2b2lkIHZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKik7CisjZW5kaWYKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAg
c3RhdGljIHZvaWQgdGV4dENoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIqKTsKICAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdUZXh0U2FtcGxlQ2FsbGJhY2soTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaAppbmRleCAzMTJjNzA1YTE4NS4uMjBkMDY5YTcyYzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uu
aApAQCAtMjUwLDYgKzI1MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIGVudW0gTWFpblRocmVhZE5v
dGlmaWNhdGlvbiB7CiAgICAgICAgIFZpZGVvQ2hhbmdlZCA9IDEgPDwgMCwKKyAgICAgICAgVmlk
ZW9DYXBzQ2hhbmdlZCA9IDEgPDwgMSwKICAgICAgICAgQXVkaW9DaGFuZ2VkID0gMSA8PCAyLAog
ICAgICAgICBWb2x1bWVDaGFuZ2VkID0gMSA8PCAzLAogICAgICAgICBNdXRlQ2hhbmdlZCA9IDEg
PDwgNCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmNwcAppbmRleCBhYzAxMjJmNzYwZS4uMTRmMmE4MGNmZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAK
QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJNZWRpYURlc2NyaXB0aW9uLmgiCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlBsYXliYWNrUGlwZWxpbmUuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgiCkBAIC05OSw2ICsxMDAsMTYgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKCkKICNlbmRpZgogICAg
IG1fYXBwZW5kUGlwZWxpbmVzTWFwLmNsZWFyKCk7CiAKKyNpZiAhR1NUX0NIRUNLX1ZFUlNJT04o
MSwgMTYsIDApCisgICAgaWYgKG1fc291cmNlKSB7CisgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0
TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCBudWxs
cHRyKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fc291
cmNlLmdldCgpLCB0aGlzKTsKKyAgICB9CisKKyAgICBpZiAobV9wbGF5YmFja1BpcGVsaW5lKQor
ICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPnNldFdlYktpdE1lZGlhU3JjKG51bGxwdHIpOwor
I2VuZGlmCisKICAgICBtX3NvdXJjZS5jbGVhcigpOwogfQogCkBAIC0xMTEsNiArMTIyLDExIEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpsb2FkKGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKQogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgIUdTVF9DSEVDS19WRVJT
SU9OKDEsIDE2LCAwKQorICAgIGlmICghbV9wbGF5YmFja1BpcGVsaW5lKQorICAgICAgICBtX3Bs
YXliYWNrUGlwZWxpbmUgPSBQbGF5YmFja1BpcGVsaW5lOjpjcmVhdGUoKTsKKyNlbmRpZgorCiAg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKHVybFN0cmluZyk7CiB9CiAKQEAg
LTEyMywxNSArMTM5LDIzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjps
b2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRpYVNvdXJjZVByaXZhdGVDCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cGxheSgpCiB7CiAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiUGxheSByZXF1ZXN0ZWQiKTsKKyNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAx
NiwgMCkKICAgICBtX3BhdXNlZCA9IGZhbHNlOwogICAgIHVwZGF0ZVN0YXRlcygpOworI2Vsc2UK
KyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXkoKTsKKyNlbmRpZgogfQogCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cGF1c2UoKQogewogICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBhdXNlIHJlcXVlc3RlZCIpOwogICAgIG1fcGF1c2Vk
ID0gdHJ1ZTsKKyNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkKICAgICB1cGRhdGVTdGF0
ZXMoKTsKKyNlbHNlCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZSgpOwor
I2VuZGlmCiB9CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1
cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKQEAgLTE0NCw2ICsxNjgsNyBAQCBNZWRpYVRpbWUgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0CiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGNvbnN0IE1lZGlhVGlt
ZSYgdGltZSkKIHsKKyNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkKICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZWVraW5nIHRvICVzIiwgdGltZS50b1N0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwogICAgIG1fc2Vla1RpbWUgPSB0aW1lOwogICAgIG1fc2Vla2luZyA9IHRy
dWU7CkBAIC0xNTYsMjEgKzE4MSwyODAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OnNlZWsoY29uc3QgTWVkaWFUaW1lJiB0aW1lKQogCiAgICAgLy8gTm90aWZ5IE1lZGlh
U291cmNlIGFuZCBoYXZlIG5ldyBmcmFtZXMgZW5xdWV1ZWQgKHdoZW4gdGhleSdyZSBhdmFpbGFi
bGUpLgogICAgIG1fbWVkaWFTb3VyY2UtPnNlZWtUb1RpbWUodGltZSk7CisjZWxzZQorICAgIGlm
IChVTkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdTVF9JTkZPKCJbU2Vla10gc2VlayBhdHRlbXB0IHRvICVzIHNlY3MiLCB0b1N0
cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKKworICAgIC8vIEF2b2lkIHVzZWxlc3Mgc2Vla2lu
Zy4KKyAgICBNZWRpYVRpbWUgY3VycmVudCA9IGN1cnJlbnRNZWRpYVRpbWUoKTsKKyAgICBpZiAo
dGltZSA9PSBjdXJyZW50KSB7CisgICAgICAgIGlmICghbV9zZWVraW5nKQorICAgICAgICAgICAg
dGltZUNoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0xpdmVT
dHJlYW0oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2Vla2luZyAmJiBtX3NlZWtJ
c1BlbmRpbmcpIHsKKyAgICAgICAgbV9zZWVrVGltZSA9IHRpbWU7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBHU1RfREVCVUcoIlNlZWtpbmcgZnJvbSAlcyB0byAlcyBzZWNvbmRzIiwg
dG9TdHJpbmcoY3VycmVudCkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcodGltZSkudXRmOCgpLmRh
dGEoKSk7CisKKyAgICBNZWRpYVRpbWUgcHJldmlvdXNTZWVrVGltZSA9IG1fc2Vla1RpbWU7Cisg
ICAgbV9zZWVrVGltZSA9IHRpbWU7CisKKyAgICBpZiAoIWRvU2VlaygpKSB7CisgICAgICAgIG1f
c2Vla1RpbWUgPSBwcmV2aW91c1NlZWtUaW1lOworICAgICAgICBHU1RfV0FSTklORygiU2Vla2lu
ZyB0byAlcyBmYWlsZWQiLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1faXNFbmRSZWFjaGVkID0gZmFsc2U7CisgICAgR1NUX0RF
QlVHKCJtX3NlZWtpbmc9JXMsIG1fc2Vla1RpbWU9JXMiLCBib29sRm9yUHJpbnRpbmcobV9zZWVr
aW5nKSwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKK30KKwor
I2lmICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjpjb25maWd1cmVQbGF5U2luaygpCit7CisgICAgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpjb25maWd1cmVQbGF5U2luaygpOworCisgICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiBwbGF5c2luayA9IGFkb3B0R1JlZihnc3RfYmluX2dldF9ieV9uYW1lKEdTVF9CSU4obV9w
aXBlbGluZS5nZXQoKSksICJwbGF5c2luayIpKTsKKyAgICBpZiAocGxheXNpbmspIHsKKyAgICAg
ICAgLy8gVGhlIGRlZmF1bHQgdmFsdWUgKDApIG1lYW5zICJzZW5kIGV2ZW50cyB0byBhbGwgdGhl
IHNpbmtzIiwgaW5zdGVhZAorICAgICAgICAvLyBvZiAib25seSB0byB0aGUgZmlyc3QgdGhhdCBy
ZXR1cm5zIHRydWUiLiBUaGlzIGlzIG5lZWRlZCBmb3IgTVNFIHNlZWsuCisgICAgICAgIGdfb2Jq
ZWN0X3NldChHX09CSkVDVChwbGF5c2luay5nZXQoKSksICJzZW5kLWV2ZW50LW1vZGUiLCAwLCBu
dWxscHRyKTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
OjpjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlIG5ld1N0YXRlKQoreworICAgIGlmIChzZWVr
aW5nKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJSZWplY3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMg
d2hpbGUgc2Vla2luZyIsCisgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShu
ZXdTdGF0ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjaGFuZ2VQaXBlbGluZVN0YXRlKG5ld1N0YXRlKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om5vdGlmeVNlZWtOZWVk
c0RhdGFGb3JUaW1lKGNvbnN0IE1lZGlhVGltZSYgc2Vla1RpbWUpCit7CisgICAgLy8gUmVlbnF1
ZXVlIHNhbXBsZXMgbmVlZGVkIHRvIHJlc3VtZSBwbGF5YmFjayBpbiB0aGUgbmV3IHBvc2l0aW9u
LgorICAgIG1fbWVkaWFTb3VyY2UtPnNlZWtUb1RpbWUoc2Vla1RpbWUpOworCisgICAgR1NUX0RF
QlVHKCJNU0Ugc2VlayB0byAlcyBmaW5pc2hlZCIsIHRvU3RyaW5nKHNlZWtUaW1lKS51dGY4KCku
ZGF0YSgpKTsKKworICAgIGlmICghbV9nc3RTZWVrQ29tcGxldGVkKSB7CisgICAgICAgIG1fZ3N0
U2Vla0NvbXBsZXRlZCA9IHRydWU7CisgICAgICAgIG1heWJlRmluaXNoU2VlaygpOworICAgIH0K
K30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmRvU2Vlayhjb25zdCBN
ZWRpYVRpbWUmLCBmbG9hdCwgR3N0U2Vla0ZsYWdzKQoreworICAgIC8vIFVzZSBkb1NlZWsoKSBp
bnN0ZWFkLiBJZiBhbnlib2R5IGlzIGNhbGxpbmcgdGhpcyB2ZXJzaW9uIG9mIGRvU2VlaygpLCBz
b21ldGhpbmcgaXMgd3JvbmcuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVr
KCkKK3sKKyAgICBNZWRpYVRpbWUgc2Vla1RpbWUgPSBtX3NlZWtUaW1lOworICAgIGRvdWJsZSBy
YXRlID0gbV9wbGF5ZXItPnJhdGUoKTsKKyAgICBHc3RTZWVrRmxhZ3Mgc2Vla1R5cGUgPSBzdGF0
aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFH
X0FDQ1VSQVRFKTsKKworICAgIC8vIEFsd2F5cyBtb3ZlIHRvIHNlZWtpbmcgc3RhdGUgdG8gcmVw
b3J0IGNvcnJlY3QgJ2N1cnJlbnRUaW1lJyB3aGlsZSBwZW5kaW5nIGZvciBhY3R1YWwgc2VlayB0
byBjb21wbGV0ZS4KKyAgICBtX3NlZWtpbmcgPSB0cnVlOworCisgICAgLy8gQ2hlY2sgaWYgcGxh
eWJhY2sgcGlwZWxpbmUgaXMgcmVhZHkgZm9yIHNlZWsuCisgICAgR3N0U3RhdGUgc3RhdGUsIG5l
d1N0YXRlOworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJm5ld1N0YXRlLCAwKTsK
KyAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFIHx8IGdl
dFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCkgeworICAgICAgICBH
U1RfREVCVUcoIltTZWVrXSBjYW5ub3Qgc2VlaywgY3VycmVudCBzdGF0ZSBjaGFuZ2UgaXMgJXMi
LCBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lKGdldFN0YXRlUmVzdWx0
KSk7CisgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJ
QV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsKKyAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKChnZXRTdGF0ZVJlc3VsdCA9
PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DCisgICAgICAgICYmICEoc3RhdGUgPT0gR1NUX1NUQVRF
X1BMQVlJTkcgJiYgbmV3U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkpCisgICAgICAgIHx8IHN0
YXRlIDwgR1NUX1NUQVRFX1BBVVNFRAorICAgICAgICB8fCBtX2lzRW5kUmVhY2hlZAorICAgICAg
ICB8fCAhbV9nc3RTZWVrQ29tcGxldGVkKSB7CisgICAgICAgIENTdHJpbmcgcmVhc29uID0gIlVu
a25vd24gcmVhc29uIjsKKyAgICAgICAgaWYgKGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9D
SEFOR0VfQVNZTkMpIHsKKyAgICAgICAgICAgIHJlYXNvbiA9IG1ha2VTdHJpbmcoIkluIGFzeW5j
IGNoYW5nZSAiLAorICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0
YXRlKSwgIiAtLT4gIiwKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFt
ZShuZXdTdGF0ZSkpLnV0ZjgoKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA8IEdTVF9TVEFU
RV9QQVVTRUQpCisgICAgICAgICAgICByZWFzb24gPSAiU3RhdGUgbGVzcyB0aGFuIFBBVVNFRCI7
CisgICAgICAgIGVsc2UgaWYgKG1faXNFbmRSZWFjaGVkKQorICAgICAgICAgICAgcmVhc29uID0g
IkVuZCByZWFjaGVkIjsKKyAgICAgICAgZWxzZSBpZiAoIW1fZ3N0U2Vla0NvbXBsZXRlZCkKKyAg
ICAgICAgICAgIHJlYXNvbiA9ICJQcmV2aW91cyBzZWVrIGlzIG5vdCBmaW5pc2hlZCB5ZXQiOwor
CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIERlbGF5aW5nIHRoZSBzZWVrOiAlcyIsIHJlYXNv
bi5kYXRhKCkpOworCisgICAgICAgIG1fc2Vla0lzUGVuZGluZyA9IHRydWU7CisKKyAgICAgICAg
aWYgKG1faXNFbmRSZWFjaGVkKSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIltTZWVrXSByZXNl
dCBwaXBlbGluZSIpOworICAgICAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gdHJ1ZTsKKyAgICAg
ICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICAgICAgaWYgKCFjaGFuZ2VQaXBlbGlu
ZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpKQorICAgICAgICAgICAgICAgIGxvYWRpbmdGYWlsZWQo
TWVkaWFQbGF5ZXI6OkVtcHR5KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3NlZWtpbmcgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1fc2Vla2luZzsK
KyAgICB9CisKKyAgICAvLyBTdG9wIGFjY2VwdGluZyBuZXcgc2FtcGxlcyB1bnRpbCBhY3R1YWwg
c2VlayBpcyBmaW5pc2hlZC4KKyAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhX
RUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgZmFsc2UpOworCisgICAgLy8gQ29ycmVj
dCBzZWVrIHRpbWUgaWYgaXQgaGVscHMgdG8gZml4IGEgc21hbGwgZ2FwLgorICAgIGlmICghaXNU
aW1lQnVmZmVyZWQoc2Vla1RpbWUpKSB7CisgICAgICAgIC8vIExvb2sgaWYgYSBuZWFyIGZ1dHVy
ZSB0aW1lICg8MC4xIHNlYy4pIGlzIGJ1ZmZlcmVkIGFuZCBjaGFuZ2UgdGhlIHNlZWsgdGFyZ2V0
IHRpbWUuCisgICAgICAgIGlmIChtX21lZGlhU291cmNlKSB7CisgICAgICAgICAgICBjb25zdCBN
ZWRpYVRpbWUgbWluaUdhcCA9IE1lZGlhVGltZSgxLCAxMCk7CisgICAgICAgICAgICBNZWRpYVRp
bWUgbmVhcmVzdCA9IG1fbWVkaWFTb3VyY2UtPmJ1ZmZlcmVkKCktPm5lYXJlc3Qoc2Vla1RpbWUp
OworICAgICAgICAgICAgaWYgKG5lYXJlc3QuaXNWYWxpZCgpICYmIG5lYXJlc3QgPiBzZWVrVGlt
ZSAmJiAobmVhcmVzdCAtIHNlZWtUaW1lKSA8PSBtaW5pR2FwICYmIGlzVGltZUJ1ZmZlcmVkKG5l
YXJlc3QgKyBtaW5pR2FwKSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIENo
YW5nZWQgdGhlIHNlZWsgdGFyZ2V0IHRpbWUgZnJvbSAlcyB0byAlcywgYSBuZWFyIHBvaW50IGlu
IHRoZSBmdXR1cmUiLCB0b1N0cmluZyhzZWVrVGltZSkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmco
bmVhcmVzdCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgc2Vla1RpbWUgPSBuZWFy
ZXN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYg
TVNFIGhhcyBzYW1wbGVzIGZvciByZXF1ZXN0ZWQgdGltZSBhbmQgZGVmZXIgYWN0dWFsIHNlZWsg
aWYgbmVlZGVkLgorICAgIGlmICghaXNUaW1lQnVmZmVyZWQoc2Vla1RpbWUpKSB7CisgICAgICAg
IEdTVF9ERUJVRygiW1NlZWtdIERlbGF5aW5nIHRoZSBzZWVrOiBNU0UgaXMgbm90IHJlYWR5Iik7
CisgICAgICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHNldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1l
bnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QQVVTRUQpOworICAgICAg
ICBpZiAoc2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7CisgICAg
ICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBDYW5ub3Qgc2VlaywgZmFpbGVkIHRvIHBhdXNlIHBs
YXliYWNrIHBpcGVsaW5lLiIpOworICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZv
clNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRydWUpOworICAgICAg
ICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTsK
KyAgICAgICAgbm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoc2Vla1RpbWUpOworICAgICAgICBB
U1NFUlQoIW1fbXNlU2Vla0NvbXBsZXRlZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIC8vIENvbXBsZXRlIHByZXZpb3VzIE1TRSBzZWVrIGlmIG5lZWRlZC4KKyAgICBpZiAo
IW1fbXNlU2Vla0NvbXBsZXRlZCkgeworICAgICAgICBtX21lZGlhU291cmNlLT5tb25pdG9yU291
cmNlQnVmZmVycygpOworICAgICAgICBBU1NFUlQobV9tc2VTZWVrQ29tcGxldGVkKTsKKyAgICAg
ICAgLy8gTm90ZTogc2Vla0NvbXBsZXRlZCB3aWxsIHJlY3Vyc2l2ZWx5IGNhbGwgdXMuCisgICAg
ICAgIHJldHVybiBtX3NlZWtpbmc7CisgICAgfQorCisgICAgR1NUX0RFQlVHKCJXZSBjYW4gc2Vl
ayBub3ciKTsKKworICAgIE1lZGlhVGltZSBzdGFydFRpbWUgPSBzZWVrVGltZSwgZW5kVGltZSA9
IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIGlmIChyYXRlIDwgMCkgeworICAgICAg
ICBzdGFydFRpbWUgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CisgICAgICAgIGVuZFRpbWUgPSBz
ZWVrVGltZTsKKyAgICB9CisKKyAgICBpZiAoIXJhdGUpCisgICAgICAgIHJhdGUgPSAxOworCisg
ICAgR1NUX0RFQlVHKCJBY3R1YWwgc2VlayB0byAlcywgZW5kIHRpbWU6ICAlcywgcmF0ZTogJWYi
LCB0b1N0cmluZyhzdGFydFRpbWUpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKGVuZFRpbWUpLnV0
ZjgoKS5kYXRhKCksIHJhdGUpOworCisgICAgLy8gVGhpcyB3aWxsIGNhbGwgbm90aWZ5U2Vla05l
ZWRzRGF0YSgpIGFmdGVyIHNvbWUgdGltZSB0byB0ZWxsIHRoYXQgdGhlIHBpcGVsaW5lIGlzIHJl
YWR5IGZvciBzYW1wbGUgZW5xdWV1aW5nLgorICAgIHdlYktpdE1lZGlhU3JjUHJlcGFyZVNlZWso
V0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHNlZWtUaW1lKTsKKworICAgIG1fZ3N0
U2Vla0NvbXBsZXRlZCA9IGZhbHNlOworICAgIGlmICghZ3N0X2VsZW1lbnRfc2VlayhtX3BpcGVs
aW5lLmdldCgpLCByYXRlLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtUeXBlLCBHU1RfU0VFS19UWVBF
X1NFVCwgdG9Hc3RDbG9ja1RpbWUoc3RhcnRUaW1lKSwgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0
Q2xvY2tUaW1lKGVuZFRpbWUpKSkgeworICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9y
U2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7CisgICAgICAg
IG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICBtX2dzdFNlZWtDb21wbGV0ZWQgPSB0cnVlOwor
ICAgICAgICBHU1RfREVCVUcoImRvU2VlaygpOiBnc3RfZWxlbWVudF9zZWVrKCkgZmFpbGVkLCBy
ZXR1cm5pbmcgZmFsc2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
IFRoZSBzYW1wbGVzIHdpbGwgYmUgZW5xdWV1ZWQgaW4gbm90aWZ5U2Vla05lZWRzRGF0YSgpLgor
ICAgIEdTVF9ERUJVRygiZG9TZWVrKCk6IGdzdF9lbGVtZW50X3NlZWsoKSBzdWNjZWVkZWQsIHJl
dHVybmluZyB0cnVlIik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWsoKQoreworICAgIGlmICghbV9zZWVr
aW5nIHx8ICFtX21zZVNlZWtDb21wbGV0ZWQgfHwgIW1fZ3N0U2Vla0NvbXBsZXRlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR3N0U3RhdGUgc3RhdGUsIG5ld1N0YXRlOworICAgIEdzdFN0YXRl
Q2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlw
ZWxpbmUuZ2V0KCksICZzdGF0ZSwgJm5ld1N0YXRlLCAwKTsKKworICAgIGlmIChnZXRTdGF0ZVJl
c3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DCisgICAgICAgICYmICEoc3RhdGUgPT0gR1NU
X1NUQVRFX1BMQVlJTkcgJiYgbmV3U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkpIHsKKyAgICAg
ICAgR1NUX0RFQlVHKCJbU2Vla10gRGVsYXlpbmcgc2VlayBmaW5pc2giKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpIHsKKyAgICAgICAgR1NUX0RF
QlVHKCJbU2Vla10gQ29tbWl0dGluZyBwZW5kaW5nIHNlZWsgdG8gJXMiLCB0b1N0cmluZyhtX3Nl
ZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9zZWVrSXNQZW5kaW5nID0gZmFsc2U7
CisgICAgICAgIGlmICghZG9TZWVrKCkpIHsKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJbU2Vl
a10gU2Vla2luZyB0byAlcyBmYWlsZWQiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRU
aW1lKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdTVF9ERUJV
RygiW1NlZWtdIFNlZWtlZCB0byAlcyIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRh
KCkpOworCisgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElB
X1NSQyhtX3NvdXJjZS5nZXQoKSksIHRydWUpOworICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAg
IG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisgICAgLy8gVGhl
IHBpcGVsaW5lIGNhbiBzdGlsbCBoYXZlIGEgcGVuZGluZyBzdGF0ZS4gSW4gdGhpcyBjYXNlIGEg
cG9zaXRpb24gcXVlcnkgd2lsbCBmYWlsLgorICAgIC8vIFJpZ2h0IG5vdyB3ZSBjYW4gdXNlIG1f
c2Vla1RpbWUgYXMgYSBmYWxsYmFjay4KKyAgICBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRT
ZWVrUG9zaXRpb24gPSB0cnVlOworICAgIHRpbWVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVQbGF5YmFja1JhdGUoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
OjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWVraW5nOworfQorI2Vsc2UKIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpyZXBvcnRTZWVrQ29tcGxldGVkKCkK
IHsKICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsK
IH0KKyNlbmRpZgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVh
ZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQogewogICAgIGlmIChy
ZWFkeVN0YXRlID09IG1fcmVhZHlTdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgIUdTVF9D
SEVDS19WRVJTSU9OKDEsIDE2LCAwKQorICAgIGlmIChzZWVraW5nKCkpIHsKKyAgICAgICAgR1NU
X0RFQlVHKCJTa2lwIHJlYWR5IHN0YXRlIGNoYW5nZSglcyAtPiAlcykgZHVlIHRvIHNlZWtcbiIs
IGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSksIGR1bXBSZWFkeVN0YXRlKHJlYWR5U3RhdGUp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRl
IG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisjZW5kaWYKKwogICAgIEdTVF9ERUJVRygi
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZXRSZWFkeVN0YXRlKCVwKTogJXMgLT4g
JXMiLCB0aGlzLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpLCBkdW1wUmVhZHlTdGF0ZShy
ZWFkeVN0YXRlKSk7CiAgICAgbV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsKKyNpZiBHU1RfQ0hF
Q0tfVkVSU0lPTigxLCAxNiwgMCkKICAgICB1cGRhdGVTdGF0ZXMoKTsKIAogICAgIC8vIEJvdGgg
cmVhZHlTdGF0ZUNoYW5nZWQoKSBhbmQgdGltZUNoYW5nZWQoKSBjaGVjayBmb3IgInNlZWtlZCIg
Y29uZGl0aW9uLCB3aGljaCByZXF1aXJlcyBhbGwgdGhlIGZvbGxvd2luZyB0aHJlZSB0aGluZ3M6
CkBAIC0xODgsNyArNDcyLDUyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
OjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5CiAgICAgLy8gVGhl
IHJlYWR5U3RhdGUgY2hhbmdlIG1heSBiZSBhIHJlc3VsdCBvZiBtb25pdG9yU291cmNlQnVmZmVy
cygpIGZpbmRpbmcgdGhhdCBjdXJyZW50VGltZSA9PSBkdXJhdGlvbiwgd2hpY2gKICAgICAvLyBz
aG91bGQgY2F1c2UgdGhlIHZpZGVvIHRvIGJlIG1hcmtlZCBhcyBlbmRlZC4gTGV0J3MgaGF2ZSB0
aGUgcGxheWVyIGNoZWNrIHRoYXQuCiAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisjZWxz
ZQorICAgIGlmIChvbGRSZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YSAm
JiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YSkgeworICAgICAg
ICBHU1RfREVCVUcoIltTZWVrXSBSZXBvcnRpbmcgbG9hZCBzdGF0ZSBjaGFuZ2VkIHRvIHRyaWdn
ZXIgc2VlayBjb250aW51YXRpb24iKTsKKyAgICAgICAgbG9hZFN0YXRlQ2hhbmdlZCgpOworICAg
IH0KKyAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworICAgIEdzdFN0YXRlIHBp
cGVsaW5lU3RhdGU7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnBpcGVsaW5lU3RhdGUsIG51
bGxwdHIsIDI1MCAqIEdTVF9OU0VDT05EKTsKKyAgICBib29sIGlzUGxheWluZyA9IChnZXRTdGF0
ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgcGlwZWxpbmVTdGF0ZSA9PSBH
U1RfU1RBVEVfUExBWUlORyk7CisKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IE1lZGlhUGxheWVy
OjpIYXZlTWV0YWRhdGEgJiYgb2xkUmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRh
dGEgJiYgaXNQbGF5aW5nKSB7CisgICAgICAgIEdTVF9UUkFDRSgiQ2hhbmdpbmcgcGlwZWxpbmUg
dG8gUEFVU0VELi4uIik7CisgICAgICAgIGJvb2wgb2sgPSBjaGFuZ2VQaXBlbGluZVN0YXRlKEdT
VF9TVEFURV9QQVVTRUQpOworICAgICAgICBHU1RfVFJBQ0UoIkNoYW5nZWQgcGlwZWxpbmUgdG8g
UEFVU0VEOiAlcyIsIG9rID8gIlN1Y2Nlc3MiIDogIkVycm9yIik7CisgICAgfQorI2VuZGlmCit9
CisKKyNpZiAhR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTYsIDApCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6d2FpdEZvclNlZWtDb21wbGV0ZWQoKQoreworICAgIGlmICghbV9z
ZWVraW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoIldhaXRpbmcgZm9yIE1T
RSBzZWVrIGNvbXBsZXRlZCIpOworICAgIG1fbXNlU2Vla0NvbXBsZXRlZCA9IGZhbHNlOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vla0NvbXBsZXRlZCgpCit7
CisgICAgaWYgKG1fbXNlU2Vla0NvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NU
X0RFQlVHKCJNU0Ugc2VlayBjb21wbGV0ZWQiKTsKKyAgICBtX21zZVNlZWtDb21wbGV0ZWQgPSB0
cnVlOworCisgICAgZG9TZWVrKCk7CisKKyAgICBpZiAoIXNlZWtpbmcoKSAmJiBtX3JlYWR5U3Rh
dGUgPj0gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhKQorICAgICAgICBjaGFuZ2VQaXBlbGlu
ZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKKworICAgIGlmICghc2Vla2luZygpKQorICAgICAg
ICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKIH0KKyNlbmRpZgogCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmF0ZShmbG9hdCkKIHsKQEAgLTIwNCwxMSArNTMzLDIy
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzb3VyY2VTZXR1cChHc3RF
bGVtZW50KiBzb3VyY2VFbGVtZW50KQogewogICAgIG1fc291cmNlID0gc291cmNlRWxlbWVudDsK
ICAgICBBU1NFUlQoV0VCS0lUX0lTX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSkpOworCisjaWYg
R1NUX0NIRUNLX1ZFUlNJT04oMSwgMTYsIDApCisgICAgTWVkaWFTb3VyY2VHU3RyZWFtZXI6Om9w
ZW4oKm1fbWVkaWFTb3VyY2UuZ2V0KCksICp0aGlzKTsKKyNlbHNlCisgICAgbV9wbGF5YmFja1Bp
cGVsaW5lLT5zZXRXZWJLaXRNZWRpYVNyYyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgp
KSk7CiAgICAgTWVkaWFTb3VyY2VHU3RyZWFtZXI6Om9wZW4oKm1fbWVkaWFTb3VyY2UuZ2V0KCks
ICp0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9zb3VyY2UuZ2V0KCksICJ2
aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFDSyh2aWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3NvdXJjZS5nZXQoKSwgImF1ZGlvLWNoYW5n
ZWQiLCBHX0NBTExCQUNLKGF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKG1fc291cmNlLmdldCgpLCAidGV4dC1jaGFuZ2VkIiwgR19DQUxM
QkFDSyh0ZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgd2ViS2l0TWVkaWFTcmNTZXRN
ZWRpYVBsYXllclByaXZhdGUoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRoaXMp
OworI2VuZGlmCiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRh
dGVTdGF0ZXMoKQogeworI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDE2LCAwKQogICAgIGJvb2wg
c2hvdWxkQmVQbGF5aW5nID0gIW1fcGF1c2VkICYmIHJlYWR5U3RhdGUoKSA+PSBNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZTo6SGF2ZUZ1dHVyZURhdGE7CiAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAic2hvdWxkQmVQbGF5aW5nID0gJWQsIG1faXNQaXBlbGluZVBsYXlpbmcgPSAlZCIs
IHN0YXRpY19jYXN0PGludD4oc2hvdWxkQmVQbGF5aW5nKSwgc3RhdGljX2Nhc3Q8aW50PihtX2lz
UGlwZWxpbmVQbGF5aW5nKSk7CiAgICAgaWYgKHNob3VsZEJlUGxheWluZyAmJiAhbV9pc1BpcGVs
aW5lUGxheWluZykgewpAQCAtMjIwLDggKzU2MCwxNDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcygpCiAgICAgICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHBpcGVsaW5lKCksICJTZXR0aW5nIHRoZSBwaXBlbGluZSB0byBQQVVTRUQgZmFpbGVkIik7
CiAgICAgICAgIG1faXNQaXBlbGluZVBsYXlpbmcgPSBmYWxzZTsKICAgICB9CisjZWxzZQorICAg
IGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0g
bV9uZXR3b3JrU3RhdGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0
ZSA9IG1fcmVhZHlTdGF0ZTsKKyAgICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsKKworICAgIEdz
dFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRl
KG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJnBlbmRpbmcsIDI1MCAqIEdTVF9OU0VDT05EKTsK
KworICAgIGJvb2wgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IGZhbHNlOworICAgIHN3aXRj
aCAoZ2V0U3RhdGVSZXN1bHQpIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzog
eworICAgICAgICBHU1RfREVCVUcoIlN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVu
dF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRp
bmcpKTsKKworICAgICAgICAvLyBEbyBub3RoaW5nIGlmIG9uIEVPUyBhbmQgc3RhdGUgY2hhbmdl
ZCB0byBSRUFEWSB0byBhdm9pZCByZWNyZWF0aW5nIHRoZSBwbGF5ZXIKKyAgICAgICAgLy8gb24g
SFRNTE1lZGlhRWxlbWVudCBhbmQgcHJvcGVybHkgZ2VuZXJhdGUgdGhlIHZpZGVvICdlbmRlZCcg
ZXZlbnQuCisgICAgICAgIGlmIChtX2lzRW5kUmVhY2hlZCAmJiBzdGF0ZSA9PSBHU1RfU1RBVEVf
UkVBRFkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBtX3Jlc2V0UGlwZWxpbmUgPSAo
c3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZKTsKKyAgICAgICAgaWYgKG1fcmVzZXRQaXBlbGluZSkK
KyAgICAgICAgICAgIG1fbWVkaWFUaW1lRHVyYXRpb24gPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7
CisKKyAgICAgICAgLy8gVXBkYXRlIHJlYWR5IGFuZCBuZXR3b3JrIHN0YXRlcy4KKyAgICAgICAg
c3dpdGNoIChzdGF0ZSkgeworICAgICAgICBjYXNlIEdTVF9TVEFURV9OVUxMOgorICAgICAgICAg
ICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICAgICAg
R1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUp
KTsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVtcHR5OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX1JFQURZOgorICAgICAgICAg
ICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTsKKyAgICAgICAgICAg
IEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRl
KSk7CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpFbXB0eTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdTVF9TVEFURV9QQVVTRUQ6CisgICAgICAg
IGNhc2UgR1NUX1NUQVRFX1BMQVlJTkc6CisgICAgICAgICAgICBpZiAoc2Vla2luZygpKSB7Cisg
ICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIG1hbmFnZSBOZXR3b3JrU3RhdGUg
dG9vPworICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJl
YWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEpCisg
ICAgICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJl
RGF0YTsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBS
ZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRl
ID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChtX2Vvc01hcmtlZCAmJiBzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykKKyAgICAgICAgICAg
ICAgICBtX2Vvc1BlbmRpbmcgPSB0cnVlOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBTeW5jIHN0YXRlcyB3aGVyZSBuZWVkZWQu
CisgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CisgICAgICAgICAgICBp
ZiAoIW1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgbm90aWZ5
UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKKyAgICAgICAgICAgICAgICBub3RpZnlQbGF5ZXJPZk11
dGUoKTsKKyAgICAgICAgICAgICAgICBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCA9IHRydWU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc2Vla2luZygpICYmICFtX3BhdXNl
ZCAmJiBtX3BsYXliYWNrUmF0ZSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVRygiW0J1ZmZl
cmluZ10gUmVzdGFydGluZyBwbGF5YmFjay4iKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VQaXBl
bGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgeworICAgICAgICAgICAgbV9wYXVz
ZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgaWYgKCFtX3BsYXliYWNrUmF0ZSkgeworICAgICAg
ICAgICAgICAgIEdTVF9ERUJVRygiW0J1ZmZlcmluZ10gUGF1c2luZyBzdHJlYW0gZm9yIGJ1ZmZl
cmluZy4iKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9Q
QVVTRUQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fcGF1
c2VkID0gdHJ1ZTsKKworICAgICAgICBpZiAobV9yZXF1ZXN0ZWRTdGF0ZSA9PSBHU1RfU1RBVEVf
UEFVU0VEICYmIHN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKKyAgICAgICAgICAgIHNob3Vs
ZFVwZGF0ZVBsYXliYWNrU3RhdGUgPSB0cnVlOworICAgICAgICAgICAgR1NUX0RFQlVHKCJSZXF1
ZXN0ZWQgc3RhdGUgY2hhbmdlIHRvICVzIHdhcyBjb21wbGV0ZWQiLCBnc3RfZWxlbWVudF9zdGF0
ZV9nZXRfbmFtZShzdGF0ZSkpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzoKKyAgICAgICAgR1NUX0RFQlVHKCJBc3lu
YzogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0
YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworICAgICAgICAvLyBD
aGFuZ2UgaW4gcHJvZ3Jlc3MuCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NI
QU5HRV9GQUlMVVJFOgorICAgICAgICBHU1RfV0FSTklORygiRmFpbHVyZTogU3RhdGU6ICVzLCBw
ZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1l
bnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworICAgICAgICAvLyBDaGFuZ2UgZmFpbGVkLgor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw6Cisg
ICAgICAgIEdTVF9ERUJVRygiTm8gcHJlcm9sbDogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUocGVuZGluZykpOworCisgICAgICAgIC8vIExpdmUgcGlwZWxpbmVzIGdvIGluIFBBVVNFRCB3
aXRob3V0IHByZXJvbGxpbmcuCisgICAgICAgIG1faXNTdHJlYW1pbmcgPSB0cnVlOworCisgICAg
ICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpIHsKKyAgICAgICAgICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgICAgIEdTVF9ERUJVRygi
bV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CisgICAgICAg
IH0gZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAgbV9y
ZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAgR1NU
X0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsK
KyAgICAgICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9
PSBHU1RfU1RBVEVfUExBWUlORykKKyAgICAgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7CisKKyAg
ICAgICAgaWYgKCFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkKKyAgICAgICAgICAgIGNoYW5n
ZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworCisgICAgICAgIG1fbmV0d29ya1N0
YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEdTVF9ERUJVRygiRWxzZSA6ICVkIiwgZ2V0U3RhdGVSZXN1bHQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBtX3JlcXVlc3RlZFN0YXRlID0gR1NUX1NUQVRFX1ZPSURf
UEVORElORzsKKworICAgIGlmIChzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlKQorICAgICAgICBt
X3BsYXllci0+cGxheWJhY2tTdGF0ZUNoYW5nZWQoKTsKKworICAgIGlmIChtX25ldHdvcmtTdGF0
ZSAhPSBvbGROZXR3b3JrU3RhdGUpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJOZXR3b3JrIFN0YXRl
IENoYW5nZWQgZnJvbSAldSB0byAldSIsIG9sZE5ldHdvcmtTdGF0ZSwgbV9uZXR3b3JrU3RhdGUp
OworICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIH0KKyAgICBp
ZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3RhdGUpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJS
ZWFkeSBTdGF0ZSBDaGFuZ2VkIGZyb20gJXUgdG8gJXUiLCBvbGRSZWFkeVN0YXRlLCBtX3JlYWR5
U3RhdGUpOworICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisK
KyAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTICYmIHN0
YXRlID49IEdTVF9TVEFURV9QQVVTRUQpIHsKKyAgICAgICAgdXBkYXRlUGxheWJhY2tSYXRlKCk7
CisgICAgICAgIG1heWJlRmluaXNoU2VlaygpOworICAgIH0KKyNlbmRpZgogfQogCisjaWYgR1NU
X0NIRUNLX1ZFUlNJT04oMSwgMTYsIDApCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6ZGlkRW5kKCkKIHsKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJFT1Mg
cmVjZWl2ZWQsIGN1cnJlbnRUaW1lPSVzIGR1cmF0aW9uPSVzIiwgY3VycmVudE1lZGlhVGltZSgp
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZHVyYXRpb25NZWRpYVRpbWUoKS50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwpAQCAtMjMxLDYgKzcxMiwyMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6ZGlkRW5kKCkKICAgICBBU1NFUlQoY3VycmVudE1lZGlhVGltZSgp
ID09IGR1cmF0aW9uTWVkaWFUaW1lKCkpOwogICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwog
fQorI2Vsc2UKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3luY1N0YXRl
Q2hhbmdlRG9uZSgpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JP
Y2N1cmVkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2Vla2luZykKKyAgICAgICAg
bWF5YmVGaW5pc2hTZWVrKCk7CisgICAgZWxzZQorICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKK30K
KworUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPiBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6Om1lZGlhU291cmNlQ2xpZW50KCkKK3sKKyAgICByZXR1cm4gbV9tZWRp
YVNvdXJjZUNsaWVudDsKK30KKyNlbmRpZgogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6aXNUaW1lQnVmZmVyZWQoY29uc3QgTWVkaWFUaW1lICZ0aW1lKSBjb25zdAogewpA
QCAtMjU2LDYgKzc1NCw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1
bmJsb2NrRHVyYXRpb25DaGFuZ2VzKCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IGlmIChtX3Nob3VsZFJlcG9ydER1cmF0aW9uV2hlblVuYmxvY2tpbmcpIHsKICAgICAgICAgbV9w
bGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOworI2lmICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwg
MCkKKyAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lLT5ub3RpZnlEdXJhdGlvbkNoYW5nZWQoKTsK
KyNlbmRpZgogICAgICAgICBtX3Nob3VsZFJlcG9ydER1cmF0aW9uV2hlblVuYmxvY2tpbmcgPSBm
YWxzZTsKICAgICB9CiAKQEAgLTI3OCw5ICs3NzksMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OmR1cmF0aW9uQ2hhbmdlZCgpCiAgICAgLy8gQXZvaWQgZW1pdGluZyBk
dXJhdGlvbmNoYW5nZWQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHByZXZpb3VzIGR1cmF0aW9uIHdh
cyAwIGJlY2F1c2UgdGhhdCBjYXNlIGlzIGFscmVhZHkgaGFuZGxlZAogICAgIC8vIGJ5IHRoZSBI
VE1MTWVkaWFFbGVtZW50LgogICAgIGlmIChtX21lZGlhVGltZUR1cmF0aW9uICE9IHByZXZpb3Vz
RHVyYXRpb24gJiYgbV9tZWRpYVRpbWVEdXJhdGlvbi5pc1ZhbGlkKCkgJiYgcHJldmlvdXNEdXJh
dGlvbi5pc1ZhbGlkKCkpIHsKLSAgICAgICAgaWYgKCFtX2FyZUR1cmF0aW9uQ2hhbmdlc0Jsb2Nr
ZWQpCisgICAgICAgIGlmICghbV9hcmVEdXJhdGlvbkNoYW5nZXNCbG9ja2VkKSB7CiAgICAgICAg
ICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7Ci0gICAgICAgIGVsc2UKKyNpZiAhR1NU
X0NIRUNLX1ZFUlNJT04oMSwgMTYsIDApCisgICAgICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUt
Pm5vdGlmeUR1cmF0aW9uQ2hhbmdlZCgpOworI2VuZGlmCisgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgbV9zaG91bGRSZXBvcnREdXJhdGlvbldoZW5VbmJsb2NraW5nID0gdHJ1ZTsKICAgICAg
ICAgbV9tZWRpYVNvdXJjZS0+ZHVyYXRpb25DaGFuZ2VkKG1fbWVkaWFUaW1lRHVyYXRpb24pOwog
ICAgIH0KQEAgLTMwMCw4ICs4MDQsMTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OnRyYWNrRGV0ZWN0ZWQoUmVmUHRyPEFwcGVuZFBpcGVsaW5lPiBhcHBlbmQKICAgICAg
ICAgICAgIG1fdmlkZW9TaXplID0gc2l6ZS52YWx1ZSgpOwogICAgIH0KIAorI2lmIEdTVF9DSEVD
S19WRVJTSU9OKDEsIDE2LCAwKQogICAgIGlmIChmaXJzdFRyYWNrRGV0ZWN0ZWQpCiAgICAgICAg
IHdlYktpdE1lZGlhU3JjQWRkU3RyZWFtKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkp
LCBuZXdUcmFjay0+aWQoKSwgYXBwZW5kUGlwZWxpbmUtPnN0cmVhbVR5cGUoKSwgV1RGTW92ZShj
YXBzKSk7CisjZWxzZQorICAgIGlmIChmaXJzdFRyYWNrRGV0ZWN0ZWQpCisgICAgICAgIG1fcGxh
eWJhY2tQaXBlbGluZS0+YXR0YWNoVHJhY2soYXBwZW5kUGlwZWxpbmUtPnNvdXJjZUJ1ZmZlclBy
aXZhdGUoKSwgbmV3VHJhY2ssIGNhcHMuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9wbGF5
YmFja1BpcGVsaW5lLT5yZWF0dGFjaFRyYWNrKGFwcGVuZFBpcGVsaW5lLT5zb3VyY2VCdWZmZXJQ
cml2YXRlKCksIG5ld1RyYWNrLCBjYXBzLmdldCgpKTsKKyNlbmRpZgogfQogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJp
bmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQpAQCAtMzU1LDYgKzg2NiwzNiBA
QCBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXhNZWRpYVRpbWVT
ZWVrYWJsZSgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmICFHU1RfQ0hFQ0tf
VkVSU0lPTigxLCAxNiwgMCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpt
YXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyBzdGF0
dXMpCit7CisgICAgaWYgKHN0YXR1cyAhPSBNZWRpYVNvdXJjZVByaXZhdGU6OkVvc05vRXJyb3Ip
CisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVRygiTWFya2luZyBlbmQgb2Ygc3RyZWFt
Iik7CisgICAgbV9lb3NNYXJrZWQgPSB0cnVlOworICAgIHVwZGF0ZVN0YXRlcygpOworfQorCitN
ZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjdXJyZW50TWVkaWFUaW1l
KCkgY29uc3QKK3sKKyAgICBNZWRpYVRpbWUgcG9zaXRpb24gPSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmN1cnJlbnRNZWRpYVRpbWUoKTsKKworICAgIGlmIChtX2Vvc1BlbmRpbmcgJiYg
cG9zaXRpb24gPj0gZHVyYXRpb25NZWRpYVRpbWUoKSkgeworICAgICAgICBpZiAobV9uZXR3b3Jr
U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkxvYWRlZCkgeworICAgICAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtT
dGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fZW9zUGVuZGluZyA9IGZhbHNl
OworICAgICAgICBtX2lzRW5kUmVhY2hlZCA9IHRydWU7CisgICAgICAgIG1fY2FjaGVkUG9zaXRp
b24gPSBtX21lZGlhVGltZUR1cmF0aW9uOworICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQo
KTsKKyAgICB9CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUuCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKaW5kZXggZmU2MTc5
ZjgwMTIuLjliYjFiNTc3NzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKQEAgLTU5LDcgKzU5LDkgQEAgcHVibGljOgogICAg
IHZvaWQgcGxheSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKICAgICB2
b2lkIHNlZWsoY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7CisjaWYgR1NUX0NIRUNLX1ZFUlNJ
T04oMSwgMTYsIDApCiAgICAgdm9pZCByZXBvcnRTZWVrQ29tcGxldGVkKCk7CisjZW5kaWYKICAg
ICB2b2lkIHVwZGF0ZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUpOwogCiAgICAgdm9pZCBkdXJhdGlv
bkNoYW5nZWQoKSBvdmVycmlkZTsKQEAgLTc5LDExICs4MSwyMiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBibG9ja0R1cmF0aW9uQ2hhbmdlcygpOwogICAgIHZvaWQgdW5ibG9ja0R1cmF0aW9uQ2hhbmdl
cygpOwogCisjaWYgIUdTVF9DSEVDS19WRVJTSU9OKDEsIDE2LCAwKQorICAgIE1lZGlhVGltZSBj
dXJyZW50TWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBzZWVraW5nKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBjb25maWd1cmVQbGF5U2luaygpIG92ZXJyaWRlOworICAg
IGJvb2wgY2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB3
YWl0Rm9yU2Vla0NvbXBsZXRlZCgpOworICAgIHZvaWQgc2Vla0NvbXBsZXRlZCgpOworICAgIHZv
aWQgbWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMp
OworICAgIHZvaWQgbm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoY29uc3QgTWVkaWFUaW1lJik7
CisjZWxzZQorCiAgICAgdm9pZCBhc3luY1N0YXRlQ2hhbmdlRG9uZSgpIG92ZXJyaWRlIHsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkaWRFbmQoKSBvdmVycmlkZTsKLQorI2VuZGlmCiBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CiAgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMm
KTsKQEAgLTk3LDEzICsxMTAsMzAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0TWVkaWFTb3Vy
Y2VDbGllbnQoUmVmPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPik7CiAKKyNpZiAhR1NU
X0NIRUNLX1ZFUlNJT04oMSwgMTYsIDApCisgICAgYm9vbCBkb1NlZWsoY29uc3QgTWVkaWFUaW1l
JiwgZmxvYXQsIEdzdFNlZWtGbGFncykgb3ZlcnJpZGU7CisgICAgYm9vbCBkb1NlZWsoKTsKKyAg
ICB2b2lkIG1heWJlRmluaXNoU2VlaygpOworICAgIHZvaWQgdXBkYXRlUGxheWJhY2tSYXRlKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBhc3luY1N0YXRlQ2hhbmdlRG9uZSgpIG92ZXJyaWRlOworICAg
IFJlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4gbWVkaWFTb3VyY2VDbGllbnQo
KTsKKyNlbmRpZgorCiAgICAgSGFzaE1hcDxSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lcj4sIFJlZlB0cjxBcHBlbmRQaXBlbGluZT4+IG1fYXBwZW5kUGlwZWxpbmVzTWFwOwogICAg
IFJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQ+IG1fbWVkaWFTb3VyY2U7CiAgICAgUmVm
UHRyPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPiBtX21lZGlhU291cmNlQ2xpZW50Owog
ICAgIE1lZGlhVGltZSBtX21lZGlhVGltZUR1cmF0aW9uOwogICAgIGJvb2wgbV9hcmVEdXJhdGlv
bkNoYW5nZXNCbG9ja2VkID0gZmFsc2U7CiAgICAgYm9vbCBtX3Nob3VsZFJlcG9ydER1cmF0aW9u
V2hlblVuYmxvY2tpbmcgPSBmYWxzZTsKKyNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkK
ICAgICBib29sIG1faXNQaXBlbGluZVBsYXlpbmcgPSB0cnVlOworI2Vsc2UKKyAgICBib29sIG1f
ZW9zTWFya2VkID0gZmFsc2U7CisgICAgbXV0YWJsZSBib29sIG1fZW9zUGVuZGluZyA9IGZhbHNl
OworICAgIGJvb2wgbV9nc3RTZWVrQ29tcGxldGVkID0gdHJ1ZTsKKyAgICBib29sIG1fbXNlU2Vl
a0NvbXBsZXRlZCA9IHRydWU7CisgICAgUmVmUHRyPFBsYXliYWNrUGlwZWxpbmU+IG1fcGxheWJh
Y2tQaXBlbGluZTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRp
YVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmNwcApp
bmRleCBlOGQ5ZDAxNzA3NS4uYTZlMzczNGI5MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFt
ZXJNU0UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuY3BwCkBAIC0yMyw2ICsyMyw3IEBA
CiAKICNpbmNsdWRlICJBcHBlbmRQaXBlbGluZS5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRS5oIgorI2luY2x1ZGUgIlBsYXliYWNrUGlwZWxpbmUuaCIKICNpbmNs
dWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgPGdzdC9nc3QuaD4K
IApAQCAtNjAsMTIgKzYxLDE5IEBAIE1lZGlhU291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIE1lZGlh
U291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOjphZGRTb3VyY2VCdWZmZXIoUmVmCiAgICAgQVNTRVJU
KFdURjo6aXNNYWluVGhyZWFkKCkpOwogCiAgICAgQVNTRVJUKHNvdXJjZUJ1ZmZlclByaXZhdGUp
OworI2lmICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkKKyAgICBBU1NFUlQobV9wbGF5ZXJQ
cml2YXRlLm1fcGxheWJhY2tQaXBlbGluZSk7CisjZW5kaWYKIAogICAgIFJlZlB0cjxBcHBlbmRQ
aXBlbGluZT4gYXBwZW5kUGlwZWxpbmUgPSBhZG9wdFJlZihuZXcgQXBwZW5kUGlwZWxpbmUoKnRo
aXMsICpzb3VyY2VCdWZmZXJQcml2YXRlLCBtX3BsYXllclByaXZhdGUpKTsKICAgICBHU1RfVFJB
Q0UoIkFkZGluZyBTb3VyY2VCdWZmZXIgdG8gQXBwZW5kUGlwZWxpbmU6IHRoaXM9JXAgc291cmNl
QnVmZmVyPSVwIGFwcGVuZFBpcGVsaW5lPSVwIiwgdGhpcywgc291cmNlQnVmZmVyUHJpdmF0ZS5n
ZXQoKSwgYXBwZW5kUGlwZWxpbmUuZ2V0KCkpOwogICAgIG1fcGxheWVyUHJpdmF0ZS5tX2FwcGVu
ZFBpcGVsaW5lc01hcC5hZGQoc291cmNlQnVmZmVyUHJpdmF0ZSwgYXBwZW5kUGlwZWxpbmUpOwog
CisjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTYsIDApCiAgICAgcmV0dXJuIE1lZGlhU291cmNl
UHJpdmF0ZTo6T2s7CisjZWxzZQorICAgIHJldHVybiBtX3BsYXllclByaXZhdGUubV9wbGF5YmFj
a1BpcGVsaW5lLT5hZGRTb3VyY2VCdWZmZXIoc291cmNlQnVmZmVyUHJpdmF0ZSk7CisjZW5kaWYK
IH0KIAogY29uc3QgTWVkaWFUaW1lJiBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRTo6ZHVy
YXRpb24oKQpAQCAtMTM1LDE3ICsxNDMsMzQgQEAgdm9pZCBNZWRpYVNvdXJjZUNsaWVudEdTdHJl
YW1lck1TRTo6YXBwZW5kKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPgogICAg
IGFwcGVuZFBpcGVsaW5lLT5wdXNoTmV3QnVmZmVyKFdURk1vdmUoYnVmZmVyKSk7CiB9CiAKKyNp
ZiAhR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTYsIDApCit2b2lkIE1lZGlhU291cmNlQ2xpZW50R1N0
cmVhbWVyTVNFOjptYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVh
bVN0YXR1cyBzdGF0dXMpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisg
ICAgbV9wbGF5ZXJQcml2YXRlLm1hcmtFbmRPZlN0cmVhbShzdGF0dXMpOworfQorI2VuZGlmCisK
IHZvaWQgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U6OnJlbW92ZWRGcm9tTWVkaWFTb3Vy
Y2UoUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZlclByaXZh
dGUpCiB7CiAgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwogCisjaWYgIUdTVF9DSEVD
S19WRVJTSU9OKDEsIDE2LCAwKQorICAgIEFTU0VSVChtX3BsYXllclByaXZhdGUubV9wbGF5YmFj
a1BpcGVsaW5lKTsKKyNlbmRpZgorCiAgICAgLy8gUmVtb3ZlIHRoZSBBcHBlbmRQaXBlbGluZSBm
cm9tIHRoZSBtYXAuIFRoaXMgc2hvdWxkIGNhdXNlIGl0cyBkZXN0cnVjdGlvbiBzaW5jZSB0aGVy
ZSBzaG91bGQgYmUgbm8gYWxpdmUKICAgICAvLyByZWZlcmVuY2VzIGF0IHRoaXMgcG9pbnQuCiAg
ICAgQVNTRVJUKG1fcGxheWVyUHJpdmF0ZS5tX2FwcGVuZFBpcGVsaW5lc01hcC5nZXQoc291cmNl
QnVmZmVyUHJpdmF0ZSktPmhhc09uZVJlZigpKTsKICAgICBtX3BsYXllclByaXZhdGUubV9hcHBl
bmRQaXBlbGluZXNNYXAucmVtb3ZlKHNvdXJjZUJ1ZmZlclByaXZhdGUpOwogCisjaWYgR1NUX0NI
RUNLX1ZFUlNJT04oMSwgMTYsIDApCiAgICAgaWYgKCFzb3VyY2VCdWZmZXJQcml2YXRlLT50cmFj
a0lkKCkuaXNOdWxsKCkpCiAgICAgICAgIHdlYktpdE1lZGlhU3JjUmVtb3ZlU3RyZWFtKFdFQktJ
VF9NRURJQV9TUkMobV9wbGF5ZXJQcml2YXRlLm1fc291cmNlLmdldCgpKSwgc291cmNlQnVmZmVy
UHJpdmF0ZS0+dHJhY2tJZCgpKTsKKyNlbHNlCisgICAgbV9wbGF5ZXJQcml2YXRlLm1fcGxheWJh
Y2tQaXBlbGluZS0+cmVtb3ZlU291cmNlQnVmZmVyKHNvdXJjZUJ1ZmZlclByaXZhdGUpOworI2Vu
ZGlmCiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U6OmZsdXNoKEF0b21T
dHJpbmcgdHJhY2tJZCkKQEAgLTE1MywxNCArMTc4LDIwIEBAIHZvaWQgTWVkaWFTb3VyY2VDbGll
bnRHU3RyZWFtZXJNU0U6OmZsdXNoKEF0b21TdHJpbmcgdHJhY2tJZCkKICAgICBBU1NFUlQoV1RG
Ojppc01haW5UaHJlYWQoKSk7CiAKICAgICAvLyBUaGlzIGlzIG9ubHkgZm9yIG9uLXRoZS1mbHkg
cmVlbnF1ZXVlcyBhZnRlciBhcHBlbmRzLiBXaGVuIHNlZWtpbmcsIHRoZSBzZWVrIHdpbGwgZG8g
aXRzIG93biBmbHVzaC4KLSAgICBpZiAoIW1fcGxheWVyUHJpdmF0ZS5tX3NlZWtpbmcpCisgICAg
aWYgKCFtX3BsYXllclByaXZhdGUubV9zZWVraW5nKSB7CisjaWYgR1NUX0NIRUNLX1ZFUlNJT04o
MSwgMTYsIDApCiAgICAgICAgIHdlYktpdE1lZGlhU3JjRmx1c2goV0VCS0lUX01FRElBX1NSQyht
X3BsYXllclByaXZhdGUubV9zb3VyY2UuZ2V0KCkpLCB0cmFja0lkKTsKKyNlbHNlCisgICAgICAg
IG1fcGxheWVyUHJpdmF0ZS5tX3BsYXliYWNrUGlwZWxpbmUtPmZsdXNoKHRyYWNrSWQpOworI2Vu
ZGlmCisgICAgfQogfQogCiB2b2lkIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOjplbnF1
ZXVlU2FtcGxlKFJlZjxNZWRpYVNhbXBsZT4mJiBzYW1wbGUsIEF0b21TdHJpbmcgdHJhY2tJZCkK
IHsKICAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CiAKKyNpZiBHU1RfQ0hFQ0tfVkVS
U0lPTigxLCAxNiwgMCkKICAgICBHU1RfVFJBQ0UoImVucXVlaW5nIHNhbXBsZSB0cmFja0lkPSVz
IFBUUz0lZiBwcmVzZW50YXRpb25TaXplPSUuMGZ4JS4wZiBhdCAlIiBHU1RfVElNRV9GT1JNQVQg
IiBkdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULAogICAgICAgICB0cmFja0lkLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIHNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRmxvYXQoKSwKICAg
ICAgICAgc2FtcGxlLT5wcmVzZW50YXRpb25TaXplKCkud2lkdGgoKSwgc2FtcGxlLT5wcmVzZW50
YXRpb25TaXplKCkuaGVpZ2h0KCksCkBAIC0xNzIsOCArMjAzLDEzIEBAIHZvaWQgTWVkaWFTb3Vy
Y2VDbGllbnRHU3RyZWFtZXJNU0U6OmVucXVldWVTYW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmIHNh
bXBsZSwgQXRvCiAgICAgQVNTRVJUKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihnc3RTYW1wbGUuZ2V0
KCkpKTsKIAogICAgIHdlYktpdE1lZGlhU3JjRW5xdWV1ZVNhbXBsZShXRUJLSVRfTUVESUFfU1JD
KG1fcGxheWVyUHJpdmF0ZS5tX3NvdXJjZS5nZXQoKSksIHRyYWNrSWQsIFdURk1vdmUoZ3N0U2Ft
cGxlKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0cmFja0lkKTsKKyAgICBtX3BsYXllclBy
aXZhdGUubV9wbGF5YmFja1BpcGVsaW5lLT5lbnF1ZXVlU2FtcGxlKFdURk1vdmUoc2FtcGxlKSk7
CisjZW5kaWYKIH0KIAorI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDE2LCAwKQogYm9vbCBNZWRp
YVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRTo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKGNvbnN0IEF0
b21TdHJpbmcmIHRyYWNrSWQpCiB7CiAgICAgcmV0dXJuIHdlYktpdE1lZGlhU3JjSXNSZWFkeUZv
ck1vcmVTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9wbGF5ZXJQcml2YXRlLm1fc291cmNlLmdl
dCgpKSwgdHJhY2tJZCk7CkBAIC0xODMsMTIgKzIxOSwxNyBAQCB2b2lkIE1lZGlhU291cmNlQ2xp
ZW50R1N0cmVhbWVyTVNFOjpub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhjb25z
dCBBdAogewogICAgIHdlYktpdE1lZGlhU3JjTm90aWZ5V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMo
V0VCS0lUX01FRElBX1NSQyhtX3BsYXllclByaXZhdGUubV9zb3VyY2UuZ2V0KCkpLCB0cmFja0lk
LCBzb3VyY2VCdWZmZXIpOwogfQorI2VuZGlmCiAKIHZvaWQgTWVkaWFTb3VyY2VDbGllbnRHU3Ry
ZWFtZXJNU0U6OmFsbFNhbXBsZXNJblRyYWNrRW5xdWV1ZWQoY29uc3QgQXRvbVN0cmluZyYgdHJh
Y2tJZCkKIHsKICAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CiAKKyNpZiBHU1RfQ0hF
Q0tfVkVSU0lPTigxLCAxNiwgMCkKICAgICB3ZWJLaXRNZWRpYVNyY0VuZE9mU3RyZWFtKFdFQktJ
VF9NRURJQV9TUkMobV9wbGF5ZXJQcml2YXRlLm1fc291cmNlLmdldCgpKSwgdHJhY2tJZCk7Cisj
ZWxzZQorICAgIG1fcGxheWVyUHJpdmF0ZS5tX3BsYXliYWNrUGlwZWxpbmUtPmFsbFNhbXBsZXNJ
blRyYWNrRW5xdWV1ZWQodHJhY2tJZCk7CisjZW5kaWYKIH0KIAogR1JlZlB0cjxXZWJLaXRNZWRp
YVNyYz4gTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U6OndlYktpdE1lZGlhU3JjKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuaApp
bmRleCA4ZTUyZjk0YTBmMi4uNDU2OGU0MGE0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFt
ZXJNU0UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL01lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmgKQEAgLTUzLDggKzUzLDEyIEBAIHB1
YmxpYzoKICAgICB2b2lkIGVucXVldWVTYW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmLCBBdG9tU3Ry
aW5nIHRyYWNrSWQpOwogICAgIHZvaWQgYWxsU2FtcGxlc0luVHJhY2tFbnF1ZXVlZChjb25zdCBB
dG9tU3RyaW5nJik7CiAKKyNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkKICAgICBib29s
IGlzUmVhZHlGb3JNb3JlU2FtcGxlcyhjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgdm9pZCBub3Rp
ZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhjb25zdCBBdG9tU3RyaW5nJiwgU291cmNl
QnVmZmVyUHJpdmF0ZUNsaWVudCopOworI2Vsc2UKKyAgICB2b2lkIG1hcmtFbmRPZlN0cmVhbShN
ZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzKTsKKyNlbmRpZgogCiAgICAgY29u
c3QgTWVkaWFUaW1lJiBkdXJhdGlvbigpOwogICAgIEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IHdl
YktpdE1lZGlhU3JjKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VHU3RyZWFtZXIu
Y3BwCmluZGV4IDUxYWRmODI4NWYxLi5kYzkwNjFmNTc5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZUdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9NZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTkyLDE0ICs5MiwxOSBAQCB2b2lkIE1lZGlh
U291cmNlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQoKQogICAgIG1fY2xpZW50LT5kdXJhdGlv
bkNoYW5nZWQobV9tZWRpYVNvdXJjZS0+ZHVyYXRpb24oKSk7CiB9CiAKLXZvaWQgTWVkaWFTb3Vy
Y2VHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykKK3ZvaWQgTWVk
aWFTb3VyY2VHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cyBzdGF0
dXMpCiB7CisjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTYsIDApCiAgICAgLy8gV2UgZG9uJ3Qg
bmVlZCB0byBkbyBhbnl0aGluZyBpbiB0aGUgQXBwZW5kUGlwZWxpbmUgbm9yIHRoZSBwbGF5YmFj
ayBwaXBlbGluZS4gSW5zdGVhZCwgU291cmNlQnVmZmVyIGtub3dzIGJldHRlcgogICAgIC8vIHdo
ZW4gLmVuZE9mU3RyZWFtKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCB0aGVyZSBhcmUgbm8gbW9yZSBz
YW1wbGVzIHRvIGVucXVldWUsIHdoaWNoIGl0IHdpbGwgc2lnbmFsIHdpdGggYSBjYWxsCiAgICAg
Ly8gdG8gU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6YWxsU2FtcGxlc0luVHJhY2tFbnF1
ZXVlZCgpLCB3aGVyZSB3ZSBlbnF1ZXVlIGFuIEVPUyBldmVudCBpbnRvIFdlYktpdE1lZGlhU3Jj
LgogCiAgICAgLy8gQXQgdGhpcyBwb2ludCBpdCB3b3VsZCBiZSBkYW5nZXJvdXNseSBlYXJseSB0
byBkbyB0aGF0ISBUaGVyZSBtYXkgYmUgc2FtcGxlcyB3YWl0aW5nIHRvIHJlYWNoIFdlYktpdE1l
ZGlhU3JjCiAgICAgLy8gKGUuZy4gYmVjYXVzZSBoaWdoIHdhdGVyIGxldmVsIGlzIGhpdCkgdGhh
dCB3aWxsIG5vdCBiZSBzaG93biBpZiB3ZSBlbnF1ZXVlIGFuIEVPUyBub3cuCisgICAgVU5VU0VE
X1BBUkFNKHN0YXR1cyk7CisjZWxzZQorICAgIG1fY2xpZW50LT5tYXJrRW5kT2ZTdHJlYW0oc3Rh
dHVzKTsKKyNlbmRpZgogfQogCiB2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjp1bm1hcmtFbmRP
ZlN0cmVhbSgpCkBAIC0xMTgsMTEgKzEyMywxOCBAQCB2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVy
OjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogCiB2b2lkIE1l
ZGlhU291cmNlR1N0cmVhbWVyOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCiB7CisjaWYgIUdTVF9D
SEVDS19WRVJTSU9OKDEsIDE2LCAwKQorICAgIG1fcGxheWVyUHJpdmF0ZS53YWl0Rm9yU2Vla0Nv
bXBsZXRlZCgpOworI2VuZGlmCiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNlZWtD
b21wbGV0ZWQoKQogeworI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDE2LCAwKQogICAgIG1fcGxh
eWVyUHJpdmF0ZS5yZXBvcnRTZWVrQ29tcGxldGVkKCk7CisjZWxzZQorICAgIG1fcGxheWVyUHJp
dmF0ZS5zZWVrQ29tcGxldGVkKCk7CisjZW5kaWYKIH0KIAogdm9pZCBNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZENoYW5nZUFjdGl2ZVN0YXRlKFNvdXJjZUJ1ZmZl
clByaXZhdGVHU3RyZWFtZXIqIHNvdXJjZUJ1ZmZlclByaXZhdGUsIGJvb2wgaXNBY3RpdmUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L1BsYXliYWNrUGlwZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMzUxZDkyNmU3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUu
Y3BwCkBAIC0wLDAgKzEsMzk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IFNl
YmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBJ
Z2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
aW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXliYWNrUGlwZWxpbmUu
aCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1FRElB
X1NPVVJDRSkgJiYgIUdTVF9DSEVDS19WRVJTSU9OKDEsIDE2LCAwKQorCisjaW5jbHVkZSAiQXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIK
KyNpbmNsdWRlICJNZWRpYVNhbXBsZS5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUg
IlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFw
cHNyYy5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9tU3RyaW5nLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X21zZV9k
ZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbXNlX2RlYnVnCisKK3N0YXRp
YyBTdHJlYW0qIGdldFN0cmVhbUJ5VHJhY2tJZChXZWJLaXRNZWRpYVNyYyosIEF0b21TdHJpbmcp
Oworc3RhdGljIFN0cmVhbSogZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKFdlYktpdE1l
ZGlhU3JjKiwgV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lciopOworCitzdGF0
aWMgU3RyZWFtKiBnZXRTdHJlYW1CeVRyYWNrSWQoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgQXRv
bVN0cmluZyB0cmFja0lkU3RyaW5nKQoreworICAgIC8vIFdlYktpdE1lZGlhU3JjIHNob3VsZCBi
ZSBsb2NrZWQgYXQgdGhpcyBwb2ludC4KKyAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogc291cmNl
LT5wcml2LT5zdHJlYW1zKSB7CisgICAgICAgIGlmIChzdHJlYW0tPnR5cGUgIT0gV2ViQ29yZTo6
SW52YWxpZAorICAgICAgICAgICAgJiYgKChzdHJlYW0tPmF1ZGlvVHJhY2sgJiYgc3RyZWFtLT5h
dWRpb1RyYWNrLT5pZCgpID09IHRyYWNrSWRTdHJpbmcpCisgICAgICAgICAgICAgICAgfHwgKHN0
cmVhbS0+dmlkZW9UcmFjayAmJiBzdHJlYW0tPnZpZGVvVHJhY2stPmlkKCkgPT0gdHJhY2tJZFN0
cmluZykgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJlYW07CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5U291
cmNlQnVmZmVyUHJpdmF0ZShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyKiBzb3VyY2VCdWZmZXJQcml2YXRlKQoreworICAgIGZvciAo
U3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKKyAgICAgICAgaWYgKHN0
cmVhbS0+c291cmNlQnVmZmVyID09IHNvdXJjZUJ1ZmZlclByaXZhdGUpCisgICAgICAgICAgICBy
ZXR1cm4gc3RyZWFtOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLy8gRklYTUU6
IFVzZSBnc3RfYXBwX3NyY19wdXNoX3NhbXBsZSgpIGluc3RlYWQgd2hlbiB3ZSBzd2l0Y2ggdG8g
dGhlIGFwcHJvcHJpYXRlIEdTdHJlYW1lciB2ZXJzaW9uLgorc3RhdGljIEdzdEZsb3dSZXR1cm4g
cHVzaFNhbXBsZShHc3RBcHBTcmMqIGFwcHNyYywgR3N0U2FtcGxlKiBzYW1wbGUpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoR1NUX0lTX1NBTVBMRShzYW1wbGUpLCBHU1RfRkxPV19FUlJP
Uik7CisKKyAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyhzYW1wbGUpOwor
ICAgIGlmIChjYXBzKQorICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2FwcyhhcHBzcmMsIGNhcHMp
OworICAgIGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKGFwcHNyYywgInJlY2VpdmVk
IHNhbXBsZSB3aXRob3V0IGNhcHMiKTsKKworICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X3Nh
bXBsZV9nZXRfYnVmZmVyKHNhbXBsZSk7CisgICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKSB7Cisg
ICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChhcHBzcmMsICJyZWNlaXZlZCBzYW1wbGUgd2l0aG91
dCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKworICAgIC8v
IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKCkgc3RlYWxzIHRoZSByZWZlcmVuY2UsIHdlIG5lZWQg
YW4gYWRkaXRpb25hbCBvbmUuCisgICAgcmV0dXJuIGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKGFw
cHNyYywgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjpzZXRXZWJLaXRNZWRpYVNyYyhXZWJLaXRNZWRpYVNy
Yyogd2ViS2l0TWVkaWFTcmMpCit7CisgICAgR1NUX0RFQlVHKCJ3ZWJLaXRNZWRpYVNyYz0lcCIs
IHdlYktpdE1lZGlhU3JjKTsKKyAgICBtX3dlYktpdE1lZGlhU3JjID0gd2ViS2l0TWVkaWFTcmM7
Cit9CisKK1dlYktpdE1lZGlhU3JjKiBQbGF5YmFja1BpcGVsaW5lOjp3ZWJLaXRNZWRpYVNyYygp
Cit7CisgICAgcmV0dXJuIG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7Cit9CisKK01lZGlhU291cmNl
UHJpdmF0ZTo6QWRkU3RhdHVzIFBsYXliYWNrUGlwZWxpbmU6OmFkZFNvdXJjZUJ1ZmZlcihSZWZQ
dHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSkKK3sK
KyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3dlYktpdE1lZGlhU3JjLT5wcml2
OworCisgICAgaWYgKHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQpIHsKKyAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiQWRkaW5nIG5ldyBzb3VyY2UgYnVm
ZmVycyBhZnRlciBmaXJzdCBkYXRhIG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisgICAgICAgIHJldHVy
biBNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAgICBHU1RfREVC
VUdfT0JKRUNUKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksICJTdGF0ZSAlZCIsIGludChHU1RfU1RB
VEUobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkpKTsKKworICAgIFN0cmVhbSogc3RyZWFtID0gbmV3
IFN0cmVhbSB7IH07CisgICAgc3RyZWFtLT5wYXJlbnQgPSBtX3dlYktpdE1lZGlhU3JjLmdldCgp
OworICAgIHN0cmVhbS0+YXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMi
LCBudWxscHRyKTsKKyAgICBzdHJlYW0tPmFwcHNyY05lZWREYXRhRmxhZyA9IGZhbHNlOworICAg
IHN0cmVhbS0+c291cmNlQnVmZmVyID0gc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQoKTsKKworICAg
IC8vIE5vIHRyYWNrIGhhcyBiZWVuIGF0dGFjaGVkIHlldC4KKyAgICBzdHJlYW0tPnR5cGUgPSBJ
bnZhbGlkOworICAgIHN0cmVhbS0+Y2FwcyA9IG51bGxwdHI7CisgICAgc3RyZWFtLT5hdWRpb1Ry
YWNrID0gbnVsbHB0cjsKKyAgICBzdHJlYW0tPnZpZGVvVHJhY2sgPSBudWxscHRyOworICAgIHN0
cmVhbS0+cHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOworICAgIHN0cmVh
bS0+bGFzdEVucXVldWVkVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIGdz
dF9hcHBfc3JjX3NldF9jYWxsYmFja3MoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCAmZW5h
YmxlZEFwcHNyY0NhbGxiYWNrcywgc3RyZWFtLT5wYXJlbnQsIG51bGxwdHIpOworICAgIGdzdF9h
cHBfc3JjX3NldF9lbWl0X3NpZ25hbHMoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCBGQUxT
RSk7CisgICAgZ3N0X2FwcF9zcmNfc2V0X3N0cmVhbV90eXBlKEdTVF9BUFBfU1JDKHN0cmVhbS0+
YXBwc3JjKSwgR1NUX0FQUF9TVFJFQU1fVFlQRV9TRUVLQUJMRSk7CisKKyAgICBnc3RfYXBwX3Ny
Y19zZXRfbWF4X2J5dGVzKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgMiAqIFdURjo6TUIp
OworICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzdHJlYW0tPmFwcHNyYyksICJibG9jayIsIEZB
TFNFLCAibWluLXBlcmNlbnQiLCAyMCwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgbnVsbHB0
cik7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAg
cHJpdi0+c3RyZWFtcy5hcHBlbmQoc3RyZWFtKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3dl
YktpdE1lZGlhU3JjLmdldCgpKTsKKworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV93ZWJLaXRN
ZWRpYVNyYy5nZXQoKSksIHN0cmVhbS0+YXBwc3JjKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0
YXRlX3dpdGhfcGFyZW50KHN0cmVhbS0+YXBwc3JjKTsKKworICAgIHJldHVybiBNZWRpYVNvdXJj
ZVByaXZhdGU6Ok9rOworfQorCit2b2lkIFBsYXliYWNrUGlwZWxpbmU6OnJlbW92ZVNvdXJjZUJ1
ZmZlcihSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJp
dmF0ZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBHU1RfREVC
VUdfT0JKRUNUKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksICJFbGVtZW50IHJlbW92ZWQgZnJvbSBN
ZWRpYVNvdXJjZSIpOworICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgp
KTsKKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3dlYktpdE1lZGlhU3JjLT5w
cml2OworICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRl
KG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksIHNvdXJjZUJ1ZmZlclByaXZhdGUuZ2V0KCkpOworICAg
IGlmIChzdHJlYW0pCisgICAgICAgIHByaXYtPnN0cmVhbXMucmVtb3ZlRmlyc3Qoc3RyZWFtKTsK
KyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKworICAgIGlm
IChzdHJlYW0pCisgICAgICAgIHdlYktpdE1lZGlhU3JjRnJlZVN0cmVhbShtX3dlYktpdE1lZGlh
U3JjLmdldCgpLCBzdHJlYW0pOworfQorCit2b2lkIFBsYXliYWNrUGlwZWxpbmU6OmF0dGFjaFRy
YWNrKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiBzb3VyY2VCdWZmZXJQcml2
YXRlLCBSZWZQdHI8VHJhY2tQcml2YXRlQmFzZT4gdHJhY2tQcml2YXRlLCBHc3RDYXBzKiBjYXBz
KQoreworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9IG1fd2ViS2l0TWVkaWFT
cmMuZ2V0KCk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOworICAgIFN0
cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKHdlYktpdE1lZGlh
U3JjLCBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyh3
ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBBU1NFUlQoc3RyZWFtKTsKKworICAgIEdTVF9PQkpFQ1Rf
TE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAgdW5zaWduZWQgcGFkSWQgPSBzdHJlYW0tPnBhcmVu
dC0+cHJpdi0+bnVtYmVyT2ZQYWRzOworICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJP
ZlBhZHMrKzsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBj
b25zdCBjaGFyKiBtZWRpYVR5cGUgPSBjYXBzTWVkaWFUeXBlKGNhcHMpOworICAgIEdTVF9ERUJV
R19PQkpFQ1Qod2ViS2l0TWVkaWFTcmMsICJDb25maWd1cmVkIHRyYWNrICVzOiBhcHBzcmM9JXMs
IHBhZElkPSV1LCBtZWRpYVR5cGU9JXMiLCB0cmFja1ByaXZhdGUtPmlkKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgR1NUX0VMRU1FTlRfTkFNRShzdHJlYW0tPmFwcHNyYyksIHBhZElkLCBtZWRp
YVR5cGUpOworCisgICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICBzdHJl
YW0tPnR5cGUgPSBVbmtub3duOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3Jj
KTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiBzb3VyY2VQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRpY19wYWQoc3RyZWFtLT5hcHBzcmMsICJzcmMiKSk7CisgICAgQVNTRVJUKHNv
dXJjZVBhZCk7CisKKyAgICAvLyBGSVhNRTogSXMgcGFkSWQgdGhlIGJlc3Qgd2F5IHRvIGlkZW50
aWZ5IHRoZSBTdHJlYW0/IFdoYXQgYWJvdXQgdHJhY2tJZD8KKyAgICBnX29iamVjdF9zZXRfZGF0
YShHX09CSkVDVChzb3VyY2VQYWQuZ2V0KCkpLCAicGFkSWQiLCBHSU5UX1RPX1BPSU5URVIocGFk
SWQpKTsKKyAgICB3ZWJLaXRNZWRpYVNyY0xpbmtTb3VyY2VQYWQoc291cmNlUGFkLmdldCgpLCBj
YXBzLCBzdHJlYW0pOworCisgICAgQVNTRVJUKHN0cmVhbS0+cGFyZW50LT5wcml2LT5tZWRpYVBs
YXllclByaXZhdGUpOworICAgIGludCBzaWduYWwgPSAtMTsKKworICAgIEdTVF9PQkpFQ1RfTE9D
Syh3ZWJLaXRNZWRpYVNyYyk7CisgICAgaWYgKGRvQ2Fwc0hhdmVUeXBlKGNhcHMsIEdTVF9BVURJ
T19DQVBTX1RZUEVfUFJFRklYKSkgeworICAgICAgICBzdHJlYW0tPnR5cGUgPSBBdWRpbzsKKyAg
ICAgICAgc3RyZWFtLT5wYXJlbnQtPnByaXYtPm51bWJlck9mQXVkaW9TdHJlYW1zKys7CisgICAg
ICAgIHNpZ25hbCA9IFNJR05BTF9BVURJT19DSEFOR0VEOworICAgICAgICBzdHJlYW0tPmF1ZGlv
VHJhY2sgPSBSZWZQdHI8V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+KHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKj4odHJhY2tQcml2YXRl
LmdldCgpKSk7CisgICAgfSBlbHNlIGlmIChkb0NhcHNIYXZlVHlwZShjYXBzLCBHU1RfVklERU9f
Q0FQU19UWVBFX1BSRUZJWCkpIHsKKyAgICAgICAgc3RyZWFtLT50eXBlID0gVmlkZW87CisgICAg
ICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZlZpZGVvU3RyZWFtcysrOworICAgICAg
ICBzaWduYWwgPSBTSUdOQUxfVklERU9fQ0hBTkdFRDsKKyAgICAgICAgc3RyZWFtLT52aWRlb1Ry
YWNrID0gUmVmUHRyPFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPihzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KHRyYWNrUHJpdmF0ZS5n
ZXQoKSkpOworICAgIH0gZWxzZSBpZiAoZG9DYXBzSGF2ZVR5cGUoY2FwcywgR1NUX1RFWFRfQ0FQ
U19UWVBFX1BSRUZJWCkpIHsKKyAgICAgICAgc3RyZWFtLT50eXBlID0gVGV4dDsKKyAgICAgICAg
c3RyZWFtLT5wYXJlbnQtPnByaXYtPm51bWJlck9mVGV4dFN0cmVhbXMrKzsKKyAgICAgICAgc2ln
bmFsID0gU0lHTkFMX1RFWFRfQ0hBTkdFRDsKKworICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCB0
ZXh0IHRyYWNrcy4KKyAgICB9CisgICAgR1NUX09CSkVDVF9VTkxPQ0sod2ViS2l0TWVkaWFTcmMp
OworCisgICAgaWYgKHNpZ25hbCAhPSAtMSkKKyAgICAgICAgZ19zaWduYWxfZW1pdChHX09CSkVD
VChzdHJlYW0tPnBhcmVudCksIHdlYktpdE1lZGlhU3JjU2lnbmFsc1tzaWduYWxdLCAwLCBudWxs
cHRyKTsKK30KKwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjpyZWF0dGFjaFRyYWNrKFJlZlB0cjxT
b3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiBzb3VyY2VCdWZmZXJQcml2YXRlLCBSZWZQdHI8
VHJhY2tQcml2YXRlQmFzZT4gdHJhY2tQcml2YXRlLCBHc3RDYXBzKiBjYXBzKQoreworICAgIEdT
VF9ERUJVRygiUmUtYXR0YWNoaW5nIHRyYWNrIik7CisKKyAgICAvLyBGSVhNRTogTWF5YmUgcmVt
b3ZlIHRoaXMgbWV0aG9kLiBOb3cgdGhlIGNhcHMgY2hhbmdlIGlzIG1hbmFnZWQgYnkgZ3N0X2Fw
cHNyY19wdXNoX3NhbXBsZSgpIGluIGVucXVldWVTYW1wbGUoKQorICAgIC8vIGFuZCBmbHVzaEFu
ZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcygpLgorCisgICAgV2ViS2l0TWVkaWFTcmMqIHdl
YktpdE1lZGlhU3JjID0gbV93ZWJLaXRNZWRpYVNyYy5nZXQoKTsKKworICAgIEdTVF9PQkpFQ1Rf
TE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAgU3RyZWFtKiBzdHJlYW0gPSBnZXRTdHJlYW1CeVNv
dXJjZUJ1ZmZlclByaXZhdGUod2ViS2l0TWVkaWFTcmMsIHNvdXJjZUJ1ZmZlclByaXZhdGUuZ2V0
KCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIEFTU0VS
VChzdHJlYW0gJiYgc3RyZWFtLT50eXBlICE9IEludmFsaWQpOworCisgICAgaW50IHNpZ25hbCA9
IC0xOworCisgICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICBpZiAoZG9D
YXBzSGF2ZVR5cGUoY2FwcywgR1NUX0FVRElPX0NBUFNfVFlQRV9QUkVGSVgpKSB7CisgICAgICAg
IEFTU0VSVChzdHJlYW0tPnR5cGUgPT0gQXVkaW8pOworICAgICAgICBzaWduYWwgPSBTSUdOQUxf
QVVESU9fQ0hBTkdFRDsKKyAgICAgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gUmVmUHRyPFdlYkNv
cmU6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPihzdGF0aWNfY2FzdDxXZWJDb3JlOjpBdWRp
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KHRyYWNrUHJpdmF0ZS5nZXQoKSkpOworICAgIH0gZWxz
ZSBpZiAoZG9DYXBzSGF2ZVR5cGUoY2FwcywgR1NUX1ZJREVPX0NBUFNfVFlQRV9QUkVGSVgpKSB7
CisgICAgICAgIEFTU0VSVChzdHJlYW0tPnR5cGUgPT0gVmlkZW8pOworICAgICAgICBzaWduYWwg
PSBTSUdOQUxfVklERU9fQ0hBTkdFRDsKKyAgICAgICAgc3RyZWFtLT52aWRlb1RyYWNrID0gUmVm
UHRyPFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPihzdGF0aWNfY2FzdDxXZWJD
b3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KHRyYWNrUHJpdmF0ZS5nZXQoKSkpOwor
ICAgIH0gZWxzZSBpZiAoZG9DYXBzSGF2ZVR5cGUoY2FwcywgR1NUX1RFWFRfQ0FQU19UWVBFX1BS
RUZJWCkpIHsKKyAgICAgICAgQVNTRVJUKHN0cmVhbS0+dHlwZSA9PSBUZXh0KTsKKyAgICAgICAg
c2lnbmFsID0gU0lHTkFMX1RFWFRfQ0hBTkdFRDsKKworICAgICAgICAvLyBGSVhNRTogU3VwcG9y
dCB0ZXh0IHRyYWNrcy4KKyAgICB9CisgICAgR1NUX09CSkVDVF9VTkxPQ0sod2ViS2l0TWVkaWFT
cmMpOworCisgICAgaWYgKHNpZ25hbCAhPSAtMSkKKyAgICAgICAgZ19zaWduYWxfZW1pdChHX09C
SkVDVChzdHJlYW0tPnBhcmVudCksIHdlYktpdE1lZGlhU3JjU2lnbmFsc1tzaWduYWxdLCAwLCBu
dWxscHRyKTsKK30KKwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjpub3RpZnlEdXJhdGlvbkNoYW5n
ZWQoKQoreworICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChtX3dlYktp
dE1lZGlhU3JjLmdldCgpKSwgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQoR1NUX09C
SkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpKSkpOworICAgIC8vIFdlYktpdE1lZGlhU3JjIHdp
bGwgYXNrIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSBmb3IgdGhlIG5ldyBkdXJhdGlv
biBsYXRlciwgd2hlbiBzb21lYm9keSBhc2tzIGZvciBpdC4KK30KKwordm9pZCBQbGF5YmFja1Bp
cGVsaW5lOjptYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0
YXR1cykKK3sKKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3dlYktpdE1lZGlh
U3JjLT5wcml2OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgp
LCAiSGF2ZSBFT1MiKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdl
dCgpKTsKKyAgICBib29sIGFsbFRyYWNrc0NvbmZpZ3VyZWQgPSBwcml2LT5hbGxUcmFja3NDb25m
aWd1cmVkOworICAgIGlmICghYWxsVHJhY2tzQ29uZmlndXJlZCkKKyAgICAgICAgcHJpdi0+YWxs
VHJhY2tzQ29uZmlndXJlZCA9IHRydWU7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV93ZWJLaXRN
ZWRpYVNyYy5nZXQoKSk7CisKKyAgICBpZiAoIWFsbFRyYWNrc0NvbmZpZ3VyZWQpIHsKKyAgICAg
ICAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzKEdTVF9FTEVNRU5UKG1fd2ViS2l0TWVkaWFTcmMu
Z2V0KCkpKTsKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5jRG9uZShtX3dlYktpdE1lZGlh
U3JjLmdldCgpKTsKKyAgICB9CisKKyAgICBWZWN0b3I8R3N0QXBwU3JjKj4gYXBwc3JjczsKKwor
ICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKyAgICBmb3IgKFN0
cmVhbSogc3RyZWFtIDogcHJpdi0+c3RyZWFtcykgeworICAgICAgICBpZiAoc3RyZWFtLT5hcHBz
cmMpCisgICAgICAgICAgICBhcHBzcmNzLmFwcGVuZChHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNy
YykpOworICAgIH0KKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgp
KTsKKworICAgIGZvciAoR3N0QXBwU3JjKiBhcHBzcmMgOiBhcHBzcmNzKQorICAgICAgICBnc3Rf
YXBwX3NyY19lbmRfb2Zfc3RyZWFtKGFwcHNyYyk7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGlu
ZTo6Zmx1c2goQXRvbVN0cmluZyB0cmFja0lkKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRo
cmVhZCgpKTsKKworICAgIEdTVF9ERUJVRygiZmx1c2g6IHRyYWNrSWQ9JXMiLCB0cmFja0lkLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgR1NUX09CSkVDVF9MT0NLKG1fd2ViS2l0TWVk
aWFTcmMuZ2V0KCkpOworICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlUcmFja0lkKG1f
d2ViS2l0TWVkaWFTcmMuZ2V0KCksIHRyYWNrSWQpOworCisgICAgaWYgKCFzdHJlYW0pIHsKKyAg
ICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBzdHJlYW0tPmxhc3RFbnF1ZXVlZFRpbWUgPSBNZWRpYVRp
bWU6OmludmFsaWRUaW1lKCk7CisgICAgR3N0RWxlbWVudCogYXBwc3JjID0gc3RyZWFtLT5hcHBz
cmM7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAg
ICBpZiAoIWFwcHNyYykKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2ludDY0IHBvc2l0aW9uID0g
R1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0
R1JlZihnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfVElNRSkpOworICAgIGlmIChn
c3RfZWxlbWVudF9xdWVyeShwaXBlbGluZSgpLCBxdWVyeS5nZXQoKSkpCisgICAgICAgIGdzdF9x
dWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeS5nZXQoKSwgMCwgJnBvc2l0aW9uKTsKKworICAgIEdT
VF9UUkFDRSgiUG9zaXRpb246ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhwb3Np
dGlvbikpOworCisgICAgaWYgKHN0YXRpY19jYXN0PGd1aW50NjQ+KHBvc2l0aW9uKSA9PSBHU1Rf
Q0xPQ0tfVElNRV9OT05FKSB7CisgICAgICAgIEdTVF9ERUJVRygiQ2FuJ3QgZGV0ZXJtaW5lIHBv
c2l0aW9uLCBhdm9pZGluZyBmbHVzaCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFnc3RfZWxlbWVudF9zZW5kX2V2ZW50KEdTVF9FTEVNRU5UKGFwcHNyYyksIGdzdF9ldmVu
dF9uZXdfZmx1c2hfc3RhcnQoKSkpCisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gc2Vu
ZCBmbHVzaC1zdGFydCBldmVudCBmb3IgdHJhY2tJZD0lcyIsIHRyYWNrSWQuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisKKyAgICBpZiAoIWdzdF9lbGVtZW50X3NlbmRfZXZlbnQoR1NUX0VMRU1F
TlQoYXBwc3JjKSwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wKGZhbHNlKSkpCisgICAgICAgIEdT
VF9XQVJOSU5HKCJGYWlsZWQgdG8gc2VuZCBmbHVzaC1zdG9wIGV2ZW50IGZvciB0cmFja0lkPSVz
IiwgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIEdTVF9ERUJVRygidHJh
Y2tJZD0lcyBmbHVzaGVkIiwgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKwor
dm9pZCBQbGF5YmFja1BpcGVsaW5lOjplbnF1ZXVlU2FtcGxlKFJlZjxNZWRpYVNhbXBsZT4mJiBt
ZWRpYVNhbXBsZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBB
dG9tU3RyaW5nIHRyYWNrSWQgPSBtZWRpYVNhbXBsZS0+dHJhY2tJRCgpOworCisgICAgR1NUX1RS
QUNFKCJlbnF1ZWluZyBzYW1wbGUgdHJhY2tJZD0lcyBQVFM9JWYgcHJlc2VudGF0aW9uU2l6ZT0l
LjBmeCUuMGYgYXQgJSIgR1NUX1RJTUVfRk9STUFUICIgZHVyYXRpb246ICUiIEdTVF9USU1FX0ZP
Uk1BVCwKKyAgICAgICAgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtZWRpYVNhbXBs
ZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRmxvYXQoKSwKKyAgICAgICAgbWVkaWFTYW1wbGUtPnBy
ZXNlbnRhdGlvblNpemUoKS53aWR0aCgpLCBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgp
LmhlaWdodCgpLAorICAgICAgICBHU1RfVElNRV9BUkdTKFdlYkNvcmU6OnRvR3N0Q2xvY2tUaW1l
KG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkpKSwKKyAgICAgICAgR1NUX1RJTUVfQVJH
UyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShtZWRpYVNhbXBsZS0+ZHVyYXRpb24oKSkpKTsKKwor
ICAgIC8vIE5vIG5lZWQgdG8gbG9jayB0byBhY2Nlc3MgdGhlIFN0cmVhbSBoZXJlIGJlY2F1c2Ug
dGhlIG9ubHkgY2hhbmNlIG9mIGNvbmZsaWN0IHdpdGggdGhpcyByZWFkIGFuZCB3aXRoIHRoZSB1
c2FnZQorICAgIC8vIG9mIHRoZSBzYW1wbGUgZmllbGRzIGRvbmUgaW4gdGhpcyBtZXRob2Qgd291
bGQgYmUgdGhlIGRlbGV0aW9uIG9mIHRoZSBzdHJlYW0uIEhvd2V2ZXIsIHRoYXQgb3BlcmF0aW9u
IGNhbiBvbmx5CisgICAgLy8gaGFwcGVuIGluIHRoZSBtYWluIHRocmVhZCwgYnV0IHdlJ3JlIGFs
cmVhZHkgdGhlcmUuIFRoZXJlZm9yZSB0aGVyZSdzIG5vIGNvbmZsaWN0IGFuZCBsb2NraW5nIHdv
dWxkIG9ubHkgY2F1c2UKKyAgICAvLyBhIHBlcmZvcm1hbmNlIHBlbmFsdHkgb24gdGhlIHJlYWRl
cnMgd29ya2luZyBpbiBvdGhlciB0aHJlYWRzLgorICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3Ry
ZWFtQnlUcmFja0lkKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksIHRyYWNrSWQpOworCisgICAgaWYg
KCFzdHJlYW0pIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIk5vIHN0cmVhbSEiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RyZWFtLT5zb3VyY2VCdWZmZXItPmlzUmVhZHlG
b3JNb3JlU2FtcGxlcyh0cmFja0lkKSkgeworICAgICAgICBHU1RfREVCVUcoImVucXVldWVTYW1w
bGU6IHNraXAgYWRkaW5nIG5ldyBzYW1wbGUgZm9yIHRyYWNrSWQ9JXMsIFNCIGlzIG5vdCByZWFk
eSB5ZXQiLCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gVGhpcyBmaWVsZCBkb2Vzbid0IGNoYW5nZSBhZnRlciBjcmVhdGlv
biwgbm8gbmVlZCB0byBsb2NrLgorICAgIEdzdEVsZW1lbnQqIGFwcHNyYyA9IHN0cmVhbS0+YXBw
c3JjOworCisgICAgLy8gT25seSBtb2RpZmllZCBieSB0aGUgbWFpbiB0aHJlYWQsIG5vIG5lZWQg
dG8gbG9jay4KKyAgICBNZWRpYVRpbWUgbGFzdEVucXVldWVkVGltZSA9IHN0cmVhbS0+bGFzdEVu
cXVldWVkVGltZTsKKworICAgIEFTU0VSVChtZWRpYVNhbXBsZS0+cGxhdGZvcm1TYW1wbGUoKS50
eXBlID09IFBsYXRmb3JtU2FtcGxlOjpHU3RyZWFtZXJTYW1wbGVUeXBlKTsKKyAgICBHUmVmUHRy
PEdzdFNhbXBsZT4gZ3N0U2FtcGxlID0gbWVkaWFTYW1wbGUtPnBsYXRmb3JtU2FtcGxlKCkuc2Ft
cGxlLmdzdFNhbXBsZTsKKyAgICBpZiAoZ3N0U2FtcGxlICYmIGdzdF9zYW1wbGVfZ2V0X2J1ZmZl
cihnc3RTYW1wbGUuZ2V0KCkpKSB7CisgICAgICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X3Nh
bXBsZV9nZXRfYnVmZmVyKGdzdFNhbXBsZS5nZXQoKSk7CisgICAgICAgIGxhc3RFbnF1ZXVlZFRp
bWUgPSBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpOworCisgICAgICAgIEdTVF9CVUZG
RVJfRkxBR19VTlNFVChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ERUNPREVfT05MWSk7CisgICAg
ICAgIHB1c2hTYW1wbGUoR1NUX0FQUF9TUkMoYXBwc3JjKSwgZ3N0U2FtcGxlLmdldCgpKTsKKyAg
ICAgICAgLy8gZ3N0X2FwcF9zcmNfcHVzaF9zYW1wbGUoKSB1c2VzIHRyYW5zZmVyLW5vbmUgZm9y
IGdzdFNhbXBsZS4KKworICAgICAgICBzdHJlYW0tPmxhc3RFbnF1ZXVlZFRpbWUgPSBsYXN0RW5x
dWV1ZWRUaW1lOworICAgIH0KK30KKwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjphbGxTYW1wbGVz
SW5UcmFja0VucXVldWVkKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCit7CisgICAgU3RyZWFt
KiBzdHJlYW0gPSBnZXRTdHJlYW1CeVRyYWNrSWQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgdHJh
Y2tJZCk7CisgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShHU1RfQVBQX1NSQyhzdHJlYW0t
PmFwcHNyYykpOworfQorCitHc3RFbGVtZW50KiBQbGF5YmFja1BpcGVsaW5lOjpwaXBlbGluZSgp
Cit7CisgICAgaWYgKCFtX3dlYktpdE1lZGlhU3JjIHx8ICFHU1RfRUxFTUVOVF9QQVJFTlQoR1NU
X0VMRU1FTlQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBHU1RfRUxFTUVOVF9QQVJFTlQoR1NUX0VMRU1FTlRfUEFSRU5UKEdT
VF9FTEVNRU5UKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUuCisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYm
IEVOQUJMRShNRURJQV9TT1VSQ0UpICYmICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
UGxheWJhY2tQaXBlbGluZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjU4ZGQ2YzU1M2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmgKQEAg
LTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKyNpZiAhR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTYs
IDApCisvLyBQbGF5YmFja1BpcGVsaW5lIGlzIChzb3J0IG9mKSBhIGZyaWVuZCBjbGFzcyBvZiBX
ZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci4KKworI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyUGxheWJpbjIuaCIKKyNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1l
clBsYXliaW4yUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZTw+IEdS
ZWZQdHI8V2ViS2l0TWVkaWFTcmM+IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyopOwordGVtcGxh
dGU8PiBXZWJLaXRNZWRpYVNyYyogcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0TWVkaWFT
cmMqKTsKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdlYktpdE1l
ZGlhU3JjKik7Cit9OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRlbnRUeXBl
OworY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjsKK2NsYXNzIE1lZGlhU291cmNl
R1N0cmVhbWVyOworCitjbGFzcyBQbGF5YmFja1BpcGVsaW5lOiBwdWJsaWMgUmVmQ291bnRlZDxQ
bGF5YmFja1BpcGVsaW5lPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQbGF5YmFja1BpcGVs
aW5lPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxheWJh
Y2tQaXBlbGluZSgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1BpcGVsaW5lKCkg
PSBkZWZhdWx0OworCisgICAgdm9pZCBzZXRXZWJLaXRNZWRpYVNyYyhXZWJLaXRNZWRpYVNyYyop
OworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYygpOworCisgICAgTWVkaWFTb3Vy
Y2VQcml2YXRlOjpBZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKFJlZlB0cjxTb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyPik7CisgICAgdm9pZCByZW1vdmVTb3VyY2VCdWZmZXIoUmVmUHRyPFNv
dXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+KTsKKyAgICB2b2lkIGF0dGFjaFRyYWNrKFJlZlB0
cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0ZUJhc2U+
LCBHc3RDYXBzKik7CisgICAgdm9pZCByZWF0dGFjaFRyYWNrKFJlZlB0cjxTb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0ZUJhc2U+LCBHc3RDYXBzKik7Cisg
ICAgdm9pZCBub3RpZnlEdXJhdGlvbkNoYW5nZWQoKTsKKworICAgIC8vIEZyb20gTWVkaWFTb3Vy
Y2VHU3RyZWFtZXIuCisgICAgdm9pZCBtYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRl
OjpFbmRPZlN0cmVhbVN0YXR1cyk7CisKKyAgICAvLyBGcm9tIFNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXIuCisgICAgdm9pZCBmbHVzaChBdG9tU3RyaW5nKTsKKyAgICB2b2lkIGVucXVldWVT
YW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmKTsKKyAgICB2b2lkIGFsbFNhbXBsZXNJblRyYWNrRW5x
dWV1ZWQoY29uc3QgQXRvbVN0cmluZyYpOworCisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKTsK
K3ByaXZhdGU6CisgICAgUGxheWJhY2tQaXBlbGluZSgpID0gZGVmYXVsdDsKKyAgICBHUmVmUHRy
PFdlYktpdE1lZGlhU3JjPiBtX3dlYktpdE1lZGlhU3JjOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZS4KKworI2VuZGlmIC8vICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkKKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyLmNwcAppbmRleCA4NzYxY2JhNjBmNC4uYzZiZTY5MGRhNTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMTE0LDYg
KzExNCw5IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmx1c2goY29uc3Qg
QXRvbVN0cmluZyYgdHJhY2tJZCkKIAogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
OjplbnF1ZXVlU2FtcGxlKFJlZjxNZWRpYVNhbXBsZT4mJiBzYW1wbGUsIGNvbnN0IEF0b21TdHJp
bmcmIHRyYWNrSWQpCiB7CisjaWYgIUdTVF9DSEVDS19WRVJTSU9OKDEsIDE2LCAwKQorICAgIG1f
bm90aWZ5V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMgPSBmYWxzZTsKKyNlbmRpZgogICAgIG1fY2xp
ZW50LT5lbnF1ZXVlU2FtcGxlKFdURk1vdmUoc2FtcGxlKSwgdHJhY2tJZCk7CiB9CiAKQEAgLTEy
NCwxMiArMTI3LDMzIEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6YWxsU2Ft
cGxlc0luVHJhY2tFbnF1ZXVlZChjb25zdCBBdG9tU3RyaW5nJiB0CiAKIGJvb2wgU291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKGNvbnN0IEF0b21TdHJp
bmcmIHRyYWNrSWQpCiB7CisjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTYsIDApCiAgICAgQVNT
RVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwogICAgIGJvb2wgaXNSZWFkeUZvck1vcmVTYW1wbGVz
ID0gbV9jbGllbnQtPmlzUmVhZHlGb3JNb3JlU2FtcGxlcyh0cmFja0lkKTsKICAgICBHU1RfREVC
VUcoIlNvdXJjZUJ1ZmZlclByaXZhdGUoJXApIC0gaXNSZWFkeUZvck1vcmVTYW1wbGVzOiAlZCIs
IHRoaXMsIChpbnQpIGlzUmVhZHlGb3JNb3JlU2FtcGxlcyk7CiAgICAgcmV0dXJuIGlzUmVhZHlG
b3JNb3JlU2FtcGxlczsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRyYWNrSWQpOworICAgIHJl
dHVybiBtX2lzUmVhZHlGb3JNb3JlU2FtcGxlczsKKyNlbmRpZgorfQorCisjaWYgIUdTVF9DSEVD
S19WRVJTSU9OKDEsIDE2LCAwKQordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpz
ZXRSZWFkeUZvck1vcmVTYW1wbGVzKGJvb2wgaXNSZWFkeSkKK3sKKyAgICBBU1NFUlQoV1RGOjpp
c01haW5UaHJlYWQoKSk7CisgICAgbV9pc1JlYWR5Rm9yTW9yZVNhbXBsZXMgPSBpc1JlYWR5Owog
fQogCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVJlYWR5Rm9yTW9y
ZVNhbXBsZXMoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBzZXRS
ZWFkeUZvck1vcmVTYW1wbGVzKHRydWUpOworICAgIGlmIChtX25vdGlmeVdoZW5SZWFkeUZvck1v
cmVTYW1wbGVzKQorICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQtPnNvdXJjZUJ1
ZmZlclByaXZhdGVEaWRCZWNvbWVSZWFkeUZvck1vcmVTYW1wbGVzKG1fdHJhY2tJZCk7Cit9Cisj
ZW5kaWYKKwogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRBY3RpdmUoYm9v
bCBpc0FjdGl2ZSkKIHsKICAgICBpZiAobV9tZWRpYVNvdXJjZSkKQEAgLTEzOSw3ICsxNjMsMTIg
QEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRBY3RpdmUoYm9vbCBpc0Fj
dGl2ZSkKIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5Q2xpZW50V2hl
blJlYWR5Rm9yTW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCkKIHsKICAgICBB
U1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTYs
IDApCiAgICAgcmV0dXJuIG1fY2xpZW50LT5ub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2Ft
cGxlcyh0cmFja0lkLCBtX3NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQpOworI2Vsc2UKKyAgICBt
X25vdGlmeVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzID0gdHJ1ZTsKKyAgICBtX3RyYWNrSWQgPSB0
cmFja0lkOworI2VuZGlmCiB9CiAKIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChjb25zdCBTb3VyY2VCdWZmZXJQcml2YXRl
Q2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQmIGluaXRpYWxpemF0aW9uU2VnbWVudCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5k
ZXggMzhjZWE1MDZkN2MuLmEzYTk4NWI0MmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaApAQCAtNzcsNiArNzcsMTEgQEAgcHVibGlj
OgogICAgIENvbnRlbnRUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBB
dG9tU3RyaW5nIHRyYWNrSWQoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrSWQ7IH0KIAorI2lmICFH
U1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkKKyAgICB2b2lkIHNldFJlYWR5Rm9yTW9yZVNhbXBs
ZXMoYm9vbCk7CisgICAgdm9pZCBub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVzKCk7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKE1lZGlhU291cmNl
R1N0cmVhbWVyKiwgUmVmPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPiwgY29uc3QgQ29u
dGVudFR5cGUmKTsKICAgICBmcmllbmQgY2xhc3MgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJN
U0U7CkBAIC04Niw2ICs5MSwxMSBAQCBwcml2YXRlOgogICAgIFJlZjxNZWRpYVNvdXJjZUNsaWVu
dEdTdHJlYW1lck1TRT4gbV9jbGllbnQ7CiAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudCog
bV9zb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50IHsgbnVsbHB0ciB9OwogICAgIEF0b21TdHJpbmcg
bV90cmFja0lkOworCisjaWYgIUdTVF9DSEVDS19WRVJTSU9OKDEsIDE2LCAwKQorICAgIGJvb2wg
bV9pc1JlYWR5Rm9yTW9yZVNhbXBsZXMgPSB0cnVlOworICAgIGJvb2wgbV9ub3RpZnlXaGVuUmVh
ZHlGb3JNb3JlU2FtcGxlcyA9IGZhbHNlOworI2VuZGlmCiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlh
U291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgKaW5kZXggZTBjZjExY2Q5OGUu
LmE1MGY2ZjAxMWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJj
ZUdTdHJlYW1lci5oCkBAIC0xLDEwICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVr
PgotICogIENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgotICogIENvcHlyaWdodCAo
QykgMjAxMyBPcmFuZ2UKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERy
w7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUs
IDIwMTYsIDIwMTgsIDIwMTkgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqICBDb3B5cmlnaHQg
KEMpIDIwMTUsIDIwMTYsIDIwMTgsIDIwMTkgSWdhbGlhLCBTLkwKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTkgSWdhbGlhLCBTLkwKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDY2ICsxNiw5IEBA
CiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShHU1RSRUFNRVIpCi0K
LSNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgot
I2luY2x1ZGUgIk1lZGlhU291cmNlLmgiCi0jaW5jbHVkZSAiTWVkaWFTb3VyY2VQcml2YXRlLmgi
Ci0jaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIlNvdXJjZUJ1ZmZl
clByaXZhdGVDbGllbnQuaCIKICNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOwotCi1lbnVtIE1l
ZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciB7IEludmFsaWQsIFVua25vd24sIEF1ZGlvLCBW
aWRlbywgVGV4dCB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLUdfQkVHSU5fREVDTFMK
LQotI2RlZmluZSBXRUJLSVRfVFlQRV9NRURJQV9TUkMgICAgICAgICAgICAod2Via2l0X21lZGlh
X3NyY19nZXRfdHlwZSAoKSkKLSNkZWZpbmUgV0VCS0lUX01FRElBX1NSQyhvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFf
U1JDLCBXZWJLaXRNZWRpYVNyYykpCi0jZGVmaW5lIFdFQktJVF9NRURJQV9TUkNfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfTUVE
SUFfU1JDLCBXZWJLaXRNZWRpYVNyY0NsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX01FRElBX1NS
QyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lU
X1RZUEVfTUVESUFfU1JDKSkKLSNkZWZpbmUgV0VCS0lUX0lTX01FRElBX1NSQ19DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJQV9T
UkMpKQotCi1zdHJ1Y3QgV2ViS2l0TWVkaWFTcmNQcml2YXRlOwotCi1zdHJ1Y3QgV2ViS2l0TWVk
aWFTcmMgewotICAgIEdzdEVsZW1lbnQgcGFyZW50OwotCi0gICAgV2ViS2l0TWVkaWFTcmNQcml2
YXRlICpwcml2OwotfTsKLQotc3RydWN0IFdlYktpdE1lZGlhU3JjQ2xhc3MgewotICAgIEdzdEVs
ZW1lbnRDbGFzcyBwYXJlbnRDbGFzczsKLX07Ci0KLUdUeXBlIHdlYmtpdF9tZWRpYV9zcmNfZ2V0
X3R5cGUodm9pZCk7Ci0KLXZvaWQgd2ViS2l0TWVkaWFTcmNBZGRTdHJlYW0oV2ViS2l0TWVkaWFT
cmMqLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5
cGVHU3RyZWFtZXIsIEdSZWZQdHI8R3N0Q2Fwcz4mJiBpbml0aWFsQ2Fwcyk7Ci12b2lkIHdlYktp
dE1lZGlhU3JjUmVtb3ZlU3RyZWFtKFdlYktpdE1lZGlhU3JjKiwgY29uc3QgQXRvbVN0cmluZyYg
bmFtZSk7Ci0KLXZvaWQgd2ViS2l0TWVkaWFTcmNFbnF1ZXVlU2FtcGxlKFdlYktpdE1lZGlhU3Jj
KiwgY29uc3QgQXRvbVN0cmluZyYgc3RyZWFtTmFtZSwgR1JlZlB0cjxHc3RTYW1wbGU+JiYpOwot
dm9pZCB3ZWJLaXRNZWRpYVNyY0VuZE9mU3RyZWFtKFdlYktpdE1lZGlhU3JjKiwgY29uc3QgQXRv
bVN0cmluZyYgc3RyZWFtTmFtZSk7Ci0KLWJvb2wgd2ViS2l0TWVkaWFTcmNJc1JlYWR5Rm9yTW9y
ZVNhbXBsZXMoV2ViS2l0TWVkaWFTcmMqLCBjb25zdCBBdG9tU3RyaW5nJiBzdHJlYW1OYW1lKTsK
LXZvaWQgd2ViS2l0TWVkaWFTcmNOb3RpZnlXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhXZWJLaXRN
ZWRpYVNyYyosIGNvbnN0IEF0b21TdHJpbmcmIHN0cmVhbU5hbWUsIFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclByaXZhdGVDbGllbnQqKTsKLQotdm9pZCB3ZWJLaXRNZWRpYVNyY0ZsdXNoKFdlYktpdE1l
ZGlhU3JjKiwgY29uc3QgQXRvbVN0cmluZyYgc3RyZWFtTmFtZSk7Ci12b2lkIHdlYktpdE1lZGlh
U3JjU2VlayhXZWJLaXRNZWRpYVNyYyosIGd1aW50NjQgc3RhcnRUaW1lLCBkb3VibGUgcmF0ZSk7
Ci0KLUdfRU5EX0RFQ0xTCi0KLW5hbWVzcGFjZSBXVEYgewotdGVtcGxhdGU8PiBHUmVmUHRyPFdl
YktpdE1lZGlhU3JjPiBhZG9wdEdSZWYoV2ViS2l0TWVkaWFTcmMqIHB0cik7Ci10ZW1wbGF0ZTw+
IFdlYktpdE1lZGlhU3JjKiByZWZHUHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyog
cHRyKTsKLXRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdlYktpdE1l
ZGlhU3JjKiBwdHIpOwotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSKQorI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDE2LCAwKQorI2luY2x1ZGUgIldlYktpdE1l
ZGlhU291cmNlR1N0cmVhbWVyUGxheWJpbjMuaCIKKyNlbHNlCisjaW5jbHVkZSAiV2ViS2l0TWVk
aWFTb3VyY2VHU3RyZWFtZXJQbGF5YmluMi5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyUGxheWJpbjIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lclBsYXliaW4yLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWQ5NTliN2RkNjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUGxheWJpbjIuY3BwCkBAIC0wLDAgKzEsNzU2IEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJh
c3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgQ29s
bGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgT3JhbmdlCisgKiAgQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5j
b20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IElnYWxpYSwgUy5MCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
TWVkaWFTb3VyY2VHU3RyZWFtZXJQbGF5YmluMi5oIgorCisjaW5jbHVkZSAiUGxheWJhY2tQaXBl
bGluZS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBV
U0UoR1NUUkVBTUVSKSAmJiAhR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTYsIDApCisKKyNpbmNsdWRl
ICJBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1v
bi5oIgorI2luY2x1ZGUgIk1lZGlhRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZS5oIgorI2luY2x1
ZGUgIk1lZGlhU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVGlt
ZVJhbmdlcy5oIgorI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQbGF5YmluMlByaXZhdGUuaCIKKworI2lu
Y2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8u
aD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9zcmNfZGVidWcpOwor
I2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3NyY19kZWJ1ZworCisjZGVmaW5l
IHdlYmtpdF9tZWRpYV9zcmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworI2RlZmluZSBXRUJL
SVRfTUVESUFfU1JDX0NBVEVHT1JZX0lOSVQgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0
X21lZGlhX3NyY19kZWJ1ZywgIndlYmtpdG1lZGlhc3JjIiwgMCwgIndlYnNyYyBlbGVtZW50Iik7
CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNf
UEFEX1RFTVBMQVRFKCJzcmNfJXUiLCBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX1NPTUVUSU1F
UywgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisKK3N0YXRpYyB2b2lkIGVuYWJsZWRBcHBzcmNOZWVk
RGF0YShHc3RBcHBTcmMqLCBndWludCwgZ3BvaW50ZXIpOworc3RhdGljIHZvaWQgZW5hYmxlZEFw
cHNyY0Vub3VnaERhdGEoR3N0QXBwU3JjKiwgZ3BvaW50ZXIpOworc3RhdGljIGdib29sZWFuIGVu
YWJsZWRBcHBzcmNTZWVrRGF0YShHc3RBcHBTcmMqLCBndWludDY0LCBncG9pbnRlcik7CisKK3N0
YXRpYyB2b2lkIGRpc2FibGVkQXBwc3JjTmVlZERhdGEoR3N0QXBwU3JjKiwgZ3VpbnQsIGdwb2lu
dGVyKSB7IH07CitzdGF0aWMgdm9pZCBkaXNhYmxlZEFwcHNyY0Vub3VnaERhdGEoR3N0QXBwU3Jj
KiwgZ3BvaW50ZXIpIHsgfTsKK3N0YXRpYyBnYm9vbGVhbiBkaXNhYmxlZEFwcHNyY1NlZWtEYXRh
KEdzdEFwcFNyYyosIGd1aW50NjQsIGdwb2ludGVyKQoreworICAgIHJldHVybiBGQUxTRTsKK307
CisKK0dzdEFwcFNyY0NhbGxiYWNrcyBlbmFibGVkQXBwc3JjQ2FsbGJhY2tzID0geworICAgIGVu
YWJsZWRBcHBzcmNOZWVkRGF0YSwKKyAgICBlbmFibGVkQXBwc3JjRW5vdWdoRGF0YSwKKyAgICBl
bmFibGVkQXBwc3JjU2Vla0RhdGEsCisgICAgeyAwIH0KK307CisKK0dzdEFwcFNyY0NhbGxiYWNr
cyBkaXNhYmxlZEFwcHNyY0NhbGxiYWNrcyA9IHsKKyAgICBkaXNhYmxlZEFwcHNyY05lZWREYXRh
LAorICAgIGRpc2FibGVkQXBwc3JjRW5vdWdoRGF0YSwKKyAgICBkaXNhYmxlZEFwcHNyY1NlZWtE
YXRhLAorICAgIHsgMCB9Cit9OworCitzdGF0aWMgU3RyZWFtKiBnZXRTdHJlYW1CeUFwcHNyYyhX
ZWJLaXRNZWRpYVNyYyosIEdzdEVsZW1lbnQqKTsKK3N0YXRpYyB2b2lkIHNlZWtOZWVkc0RhdGFN
YWluVGhyZWFkKFdlYktpdE1lZGlhU3JjKik7CitzdGF0aWMgdm9pZCBub3RpZnlSZWFkeUZvck1v
cmVTYW1wbGVzTWFpblRocmVhZChXZWJLaXRNZWRpYVNyYyosIFN0cmVhbSopOworCitzdGF0aWMg
dm9pZCBlbmFibGVkQXBwc3JjTmVlZERhdGEoR3N0QXBwU3JjKiBhcHBzcmMsIGd1aW50LCBncG9p
bnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMgPSBz
dGF0aWNfY2FzdDxXZWJLaXRNZWRpYVNyYyo+KHVzZXJEYXRhKTsKKyAgICBBU1NFUlQoV0VCS0lU
X0lTX01FRElBX1NSQyh3ZWJLaXRNZWRpYVNyYykpOworCisgICAgR1NUX09CSkVDVF9MT0NLKHdl
YktpdE1lZGlhU3JjKTsKKyAgICBPblNlZWtEYXRhQWN0aW9uIGFwcHNyY1NlZWtEYXRhTmV4dEFj
dGlvbiA9IHdlYktpdE1lZGlhU3JjLT5wcml2LT5hcHBzcmNTZWVrRGF0YU5leHRBY3Rpb247Cisg
ICAgU3RyZWFtKiBhcHBzcmNTdHJlYW0gPSBnZXRTdHJlYW1CeUFwcHNyYyh3ZWJLaXRNZWRpYVNy
YywgR1NUX0VMRU1FTlQoYXBwc3JjKSk7CisgICAgYm9vbCBhbGxBcHBzcmNOZWVkRGF0YUFmdGVy
U2VlayA9IGZhbHNlOworCisgICAgaWYgKHdlYktpdE1lZGlhU3JjLT5wcml2LT5hcHBzcmNTZWVr
RGF0YUNvdW50ID4gMCkgeworICAgICAgICBpZiAoYXBwc3JjU3RyZWFtICYmICFhcHBzcmNTdHJl
YW0tPmFwcHNyY05lZWREYXRhRmxhZykgeworICAgICAgICAgICAgKyt3ZWJLaXRNZWRpYVNyYy0+
cHJpdi0+YXBwc3JjTmVlZERhdGFDb3VudDsKKyAgICAgICAgICAgIGFwcHNyY1N0cmVhbS0+YXBw
c3JjTmVlZERhdGFGbGFnID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgbnVtQXBwc3Jj
cyA9IHdlYktpdE1lZGlhU3JjLT5wcml2LT5zdHJlYW1zLnNpemUoKTsKKyAgICAgICAgaWYgKHdl
YktpdE1lZGlhU3JjLT5wcml2LT5hcHBzcmNTZWVrRGF0YUNvdW50ID09IG51bUFwcHNyY3MgJiYg
d2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY05lZWREYXRhQ291bnQgPT0gbnVtQXBwc3Jjcykg
eworICAgICAgICAgICAgR1NUX0RFQlVHKCJBbGwgbmVlZERhdGFzIGNvbXBsZXRlZCIpOworICAg
ICAgICAgICAgYWxsQXBwc3JjTmVlZERhdGFBZnRlclNlZWsgPSB0cnVlOworICAgICAgICAgICAg
d2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291bnQgPSAwOworICAgICAgICAg
ICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY05lZWREYXRhQ291bnQgPSAwOworICAgICAg
ICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY1NlZWtEYXRhTmV4dEFjdGlvbiA9IE5v
dGhpbmc7CisKKyAgICAgICAgICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiB3ZWJLaXRNZWRpYVNy
Yy0+cHJpdi0+c3RyZWFtcykKKyAgICAgICAgICAgICAgICBzdHJlYW0tPmFwcHNyY05lZWREYXRh
RmxhZyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdl
YktpdE1lZGlhU3JjKTsKKworICAgIGlmIChhbGxBcHBzcmNOZWVkRGF0YUFmdGVyU2Vlaykgewor
ICAgICAgICBHU1RfREVCVUcoIkFsbCBleHBlY3RlZCBhcHBzcmNTZWVrRGF0YSgpIGFuZCBhcHBz
cmNOZWVkRGF0YSgpIGNhbGxzIHBlcmZvcm1lZC4gUnVubmluZyBuZXh0IGFjdGlvbiAoJWQpIiwg
c3RhdGljX2Nhc3Q8aW50PihhcHBzcmNTZWVrRGF0YU5leHRBY3Rpb24pKTsKKworICAgICAgICBz
d2l0Y2ggKGFwcHNyY1NlZWtEYXRhTmV4dEFjdGlvbikgeworICAgICAgICBjYXNlIE1lZGlhU291
cmNlU2Vla1RvVGltZToKKyAgICAgICAgICAgIHdlYktpdE1lZGlhU3JjLT5wcml2LT5ub3RpZmll
ci0+bm90aWZ5KFdlYktpdE1lZGlhU3JjTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6U2Vla05lZWRz
RGF0YSwgW3dlYktpdE1lZGlhU3JjXSB7CisgICAgICAgICAgICAgICAgc2Vla05lZWRzRGF0YU1h
aW5UaHJlYWQod2ViS2l0TWVkaWFTcmMpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBOb3RoaW5nOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKGFwcHNyY1NlZWtEYXRhTmV4dEFjdGlvbiA9PSBOb3RoaW5nKSB7
CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHdlYktpdE1lZGlhU3JjLT5wcml2LT5zdHJlYW1M
b2NrKTsKKworICAgICAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOworCisgICAg
ICAgIC8vIFNlYXJjaCBhZ2FpbiBmb3IgdGhlIFN0cmVhbSwganVzdCBpbiBjYXNlIGl0IHdhcyBy
ZW1vdmVkIGJldHdlZW4gdGhlIHByZXZpb3VzIGxvY2sgYW5kIHRoaXMgb25lLgorICAgICAgICBh
cHBzcmNTdHJlYW0gPSBnZXRTdHJlYW1CeUFwcHNyYyh3ZWJLaXRNZWRpYVNyYywgR1NUX0VMRU1F
TlQoYXBwc3JjKSk7CisKKyAgICAgICAgaWYgKGFwcHNyY1N0cmVhbSAmJiBhcHBzcmNTdHJlYW0t
PnR5cGUgIT0gV2ViQ29yZTo6SW52YWxpZCkgeworICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMt
PnByaXYtPm5vdGlmaWVyLT5ub3RpZnkoV2ViS2l0TWVkaWFTcmNNYWluVGhyZWFkTm90aWZpY2F0
aW9uOjpSZWFkeUZvck1vcmVTYW1wbGVzLCBbd2ViS2l0TWVkaWFTcmMsIGFwcHNyY1N0cmVhbV0g
eworICAgICAgICAgICAgICAgIG5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXNNYWluVGhyZWFkKHdl
YktpdE1lZGlhU3JjLCBhcHBzcmNTdHJlYW0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBlbmFibGVkQXBwc3JjRW5vdWdoRGF0YShHc3RBcHBTcmMgKmFwcHNyYywg
Z3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgLy8gTm8gbmVlZCB0byBsb2NrIG9uIHdlYktpdE1l
ZGlhU3JjLCB3ZSdyZSBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIG5vYm9keSBpcyBnb2luZyB0byBy
ZW1vdmUgdGhlIHN0cmVhbSBpbiB0aGUgbWVhbnRpbWUuCisgICAgQVNTRVJUKFdURjo6aXNNYWlu
VGhyZWFkKCkpOworCisgICAgV2ViS2l0TWVkaWFTcmMqIHdlYktpdE1lZGlhU3JjID0gc3RhdGlj
X2Nhc3Q8V2ViS2l0TWVkaWFTcmMqPih1c2VyRGF0YSk7CisgICAgQVNTRVJUKFdFQktJVF9JU19N
RURJQV9TUkMod2ViS2l0TWVkaWFTcmMpKTsKKyAgICBTdHJlYW0qIHN0cmVhbSA9IGdldFN0cmVh
bUJ5QXBwc3JjKHdlYktpdE1lZGlhU3JjLCBHU1RfRUxFTUVOVChhcHBzcmMpKTsKKworICAgIC8v
IFRoaXMgY2FsbGJhY2sgbWlnaHQgaGF2ZSBiZWVuIHNjaGVkdWxlZCBmcm9tIGEgY2hpbGQgdGhy
ZWFkIGJlZm9yZSB0aGUgc3RyZWFtIHdhcyByZW1vdmVkLgorICAgIC8vIFRoZW4sIHRoZSByZW1v
dmFsIGNvZGUgbWlnaHQgaGF2ZSBydW4sIGFuZCBsYXRlciB0aGlzIGNhbGxiYWNrLgorICAgIC8v
IFRoaXMgY2hlY2sgc29sdmVzIHRoZSByYWNlIGNvbmRpdGlvbi4KKyAgICBpZiAoIXN0cmVhbSB8
fCBzdHJlYW0tPnR5cGUgPT0gV2ViQ29yZTo6SW52YWxpZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3RyZWFtLT5zb3VyY2VCdWZmZXItPnNldFJlYWR5Rm9yTW9yZVNhbXBsZXMoZmFsc2UpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gZW5hYmxlZEFwcHNyY1NlZWtEYXRhKEdzdEFwcFNyYyosIGd1
aW50NjQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9IHN0YXRpY19jYXN0
PFdlYktpdE1lZGlhU3JjKj4odXNlckRhdGEpOworCisgICAgQVNTRVJUKFdFQktJVF9JU19NRURJ
QV9TUkMod2ViS2l0TWVkaWFTcmMpKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRp
YVNyYyk7CisgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291bnQrKzsK
KyAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICByZXR1cm4gVFJV
RTsKK30KKworc3RhdGljIFN0cmVhbSogZ2V0U3RyZWFtQnlBcHBzcmMoV2ViS2l0TWVkaWFTcmMq
IHNvdXJjZSwgR3N0RWxlbWVudCogYXBwc3JjKQoreworICAgIGZvciAoU3RyZWFtKiBzdHJlYW0g
OiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKKyAgICAgICAgaWYgKHN0cmVhbS0+YXBwc3JjID09
IGFwcHNyYykKKyAgICAgICAgICAgIHJldHVybiBzdHJlYW07CisgICAgfQorICAgIHJldHVybiBu
dWxscHRyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRNZWRpYVNyYywgd2Vi
a2l0X21lZGlhX3NyYywgR1NUX1RZUEVfQklOLAorICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShH
U1RfVFlQRV9VUklfSEFORExFUiwgd2ViS2l0TWVkaWFTcmNVcmlIYW5kbGVySW5pdCk7CisgICAg
V0VCS0lUX01FRElBX1NSQ19DQVRFR09SWV9JTklUKTsKKworZ3VpbnQgd2ViS2l0TWVkaWFTcmNT
aWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFf
c3JjX2NsYXNzX2luaXQoV2ViS2l0TWVkaWFTcmNDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVj
dENsYXNzKiBva2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgR3N0RWxlbWVudENs
YXNzKiBla2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisKKyAgICBva2xhc3MtPmZp
bmFsaXplID0gd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZTsKKyAgICBva2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYktpdE1lZGlhU3JjU2V0UHJvcGVydHk7CisgICAgb2tsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5OworCisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRk
X3BhZF90ZW1wbGF0ZShla2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc3JjVGVt
cGxhdGUpKTsKKworICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEoZWts
YXNzLCAiV2ViS2l0IE1lZGlhIHNvdXJjZSBlbGVtZW50IiwgIlNvdXJjZSIsICJIYW5kbGVzIEJs
b2IgdXJpcyIsICJTdGVwaGFuZSBKYWRhdWQgPHNqYWRhdWRAc2lpLmZyPiwgU2ViYXN0aWFuIERy
w7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4sIEVucmlxdWUgT2Nhw7FhIEdvbnrDoWxl
eiA8ZW9jYW5oYUBpZ2FsaWEuY29tPiIpOworCisgICAgLy8gQWxsb3dzIHNldHRpbmcgdGhlIHVy
aSB1c2luZyB0aGUgJ2xvY2F0aW9uJyBwcm9wZXJ0eSwgd2hpY2ggaXMgdXNlZCBmb3IgZXhhbXBs
ZSBieSBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKCkuCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShva2xhc3MsCisgICAgICAgIFBST1BfTE9DQVRJT04sCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoImxvY2F0aW9uIiwgImxvY2F0aW9uIiwgIkxvY2F0aW9uIHRvIHJl
YWQgZnJvbSIsIG51bGxwdHIsCisgICAgICAgIEdQYXJhbUZsYWdzKEdfUEFSQU1fUkVBRFdSSVRF
IHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KG9rbGFzcywKKyAgICAgICAgUFJPUF9OX0FVRElPLAorICAgICAgICBnX3BhcmFt
X3NwZWNfaW50KCJuLWF1ZGlvIiwgIk51bWJlciBBdWRpbyIsICJUb3RhbCBudW1iZXIgb2YgYXVk
aW8gc3RyZWFtcyIsCisgICAgICAgIDAsIEdfTUFYSU5ULCAwLCBHUGFyYW1GbGFncyhHX1BBUkFN
X1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KG9rbGFzcywKKyAgICAgICAgUFJPUF9OX1ZJREVPLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfaW50KCJuLXZpZGVvIiwgIk51bWJlciBWaWRlbyIsICJUb3RhbCBudW1i
ZXIgb2YgdmlkZW8gc3RyZWFtcyIsCisgICAgICAgIDAsIEdfTUFYSU5ULCAwLCBHUGFyYW1GbGFn
cyhHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9rbGFzcywKKyAgICAgICAgUFJPUF9OX1RFWFQs
CisgICAgICAgIGdfcGFyYW1fc3BlY19pbnQoIm4tdGV4dCIsICJOdW1iZXIgVGV4dCIsICJUb3Rh
bCBudW1iZXIgb2YgdGV4dCBzdHJlYW1zIiwKKyAgICAgICAgMCwgR19NQVhJTlQsIDAsIEdQYXJh
bUZsYWdzKEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOworCisg
ICAgd2ViS2l0TWVkaWFTcmNTaWduYWxzW1NJR05BTF9WSURFT19DSEFOR0VEXSA9CisgICAgICAg
IGdfc2lnbmFsX25ldygidmlkZW8tY2hhbmdlZCIsIEdfVFlQRV9GUk9NX0NMQVNTKG9rbGFzcyks
CisgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2Vi
S2l0TWVkaWFTcmNDbGFzcywgdmlkZW9DaGFuZ2VkKSwgbnVsbHB0ciwgbnVsbHB0ciwKKyAgICAg
ICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAwLCBHX1RZUEVfTk9O
RSk7CisgICAgd2ViS2l0TWVkaWFTcmNTaWduYWxzW1NJR05BTF9BVURJT19DSEFOR0VEXSA9Cisg
ICAgICAgIGdfc2lnbmFsX25ldygiYXVkaW8tY2hhbmdlZCIsIEdfVFlQRV9GUk9NX0NMQVNTKG9r
bGFzcyksCisgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICBHX1NUUlVDVF9PRkZT
RVQoV2ViS2l0TWVkaWFTcmNDbGFzcywgYXVkaW9DaGFuZ2VkKSwgbnVsbHB0ciwgbnVsbHB0ciwK
KyAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAwLCBHX1RZ
UEVfTk9ORSk7CisgICAgd2ViS2l0TWVkaWFTcmNTaWduYWxzW1NJR05BTF9URVhUX0NIQU5HRURd
ID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJ0ZXh0LWNoYW5nZWQiLCBHX1RZUEVfRlJPTV9DTEFT
Uyhva2xhc3MpLAorICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgR19TVFJVQ1Rf
T0ZGU0VUKFdlYktpdE1lZGlhU3JjQ2xhc3MsIHRleHRDaGFuZ2VkKSwgbnVsbHB0ciwgbnVsbHB0
ciwKKyAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAwLCBH
X1RZUEVfTk9ORSk7CisKKyAgICBla2xhc3MtPmNoYW5nZV9zdGF0ZSA9IHdlYktpdE1lZGlhU3Jj
Q2hhbmdlU3RhdGU7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVv
ZihXZWJLaXRNZWRpYVNyY1ByaXZhdGUpKTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Vi
a2l0TWVkaWFTcmNDaGFpbihHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBwYXJlbnQsIEdzdEJ1ZmZl
ciogYnVmZmVyKQoreworICAgIEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IHNlbGYgPSBhZG9wdEdS
ZWYoV0VCS0lUX01FRElBX1NSQyhnc3Rfb2JqZWN0X2dldF9wYXJlbnQocGFyZW50KSkpOworCisg
ICAgcmV0dXJuIGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvdyhzZWxmLT5wcml2LT5m
bG93Q29tYmluZXIuZ2V0KCksIHBhZCwgZ3N0X3Byb3h5X3BhZF9jaGFpbl9kZWZhdWx0KHBhZCwg
R1NUX09CSkVDVChzZWxmLmdldCgpKSwgYnVmZmVyKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9tZWRpYV9zcmNfaW5pdChXZWJLaXRNZWRpYVNyYyogc291cmNlKQoreworICAgIHNvdXJjZS0+
cHJpdiA9IFdFQktJVF9NRURJQV9TUkNfR0VUX1BSSVZBVEUoc291cmNlKTsKKyAgICBuZXcgKHNv
dXJjZS0+cHJpdikgV2ViS2l0TWVkaWFTcmNQcml2YXRlKCk7CisgICAgc291cmNlLT5wcml2LT5z
ZWVrVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICBzb3VyY2UtPnByaXYtPmFw
cHNyY1NlZWtEYXRhQ291bnQgPSAwOworICAgIHNvdXJjZS0+cHJpdi0+YXBwc3JjTmVlZERhdGFD
b3VudCA9IDA7CisgICAgc291cmNlLT5wcml2LT5hcHBzcmNTZWVrRGF0YU5leHRBY3Rpb24gPSBO
b3RoaW5nOworICAgIHNvdXJjZS0+cHJpdi0+Zmxvd0NvbWJpbmVyID0gR1VuaXF1ZVB0cjxHc3RG
bG93Q29tYmluZXI+KGdzdF9mbG93X2NvbWJpbmVyX25ldygpKTsKKyAgICBzb3VyY2UtPnByaXYt
Pm5vdGlmaWVyID0gV2ViQ29yZTo6TWFpblRocmVhZE5vdGlmaWVyPFdlYktpdE1lZGlhU3JjTWFp
blRocmVhZE5vdGlmaWNhdGlvbj46OmNyZWF0ZSgpOworCisgICAgLy8gTm8gbmVlZCB0byByZXNl
dCBTdHJlYW0uYXBwc3JjTmVlZERhdGFGbGFnIGJlY2F1c2UgdGhlcmUgYXJlIG5vIFN0cmVhbXMg
YXQgdGhpcyBwb2ludCB5ZXQuCit9CisKK3ZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAg
V2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9NRURJQV9TUkMob2JqZWN0KTsKKyAgICBX
ZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzb3VyY2UtPnByaXY7CisKKyAgICBWZWN0b3I8
U3RyZWFtKj4gb2xkU3RyZWFtczsKKyAgICBzb3VyY2UtPnByaXYtPnN0cmVhbXMuc3dhcChvbGRT
dHJlYW1zKTsKKworICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBvbGRTdHJlYW1zKQorICAgICAg
ICB3ZWJLaXRNZWRpYVNyY0ZyZWVTdHJlYW0oc291cmNlLCBzdHJlYW0pOworCisgICAgcHJpdi0+
c2Vla1RpbWUgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisKKyAgICBzb3VyY2UtPnByaXYt
Pm5vdGlmaWVyLT5pbnZhbGlkYXRlKCk7CisKKyAgICBpZiAocHJpdi0+bWVkaWFQbGF5ZXJQcml2
YXRlKQorICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldE1lZGlhUGxheWVyUHJpdmF0ZShzb3VyY2Us
IG51bGxwdHIpOworCisgICAgLy8gV2UgdXNlZCBhIHBsYWNlbWVudCBuZXcgZm9yIGNvbnN0cnVj
dGlvbiwgdGhlIGRlc3RydWN0b3Igd29uJ3QgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkuCisgICAg
cHJpdi0+fl9XZWJLaXRNZWRpYVNyY1ByaXZhdGUoKTsKKworICAgIEdTVF9DQUxMX1BBUkVOVChH
X09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKK30KKwordm9pZCB3ZWJLaXRNZWRp
YVNyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRNZWRpYVNyYyogc291
cmNlID0gV0VCS0lUX01FRElBX1NSQyhvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsK
KyAgICBjYXNlIFBST1BfTE9DQVRJT046CisgICAgICAgIGdzdF91cmlfaGFuZGxlcl9zZXRfdXJp
KHJlaW50ZXJwcmV0X2Nhc3Q8R3N0VVJJSGFuZGxlcio+KHNvdXJjZSksIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHdlYktpdE1lZGlhU3JjR2V0
UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRf
TUVESUFfU1JDKG9iamVjdCk7CisgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc291
cmNlLT5wcml2OworCisgICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7CisgICAgc3dpdGNoIChw
cm9wSWQpIHsKKyAgICBjYXNlIFBST1BfTE9DQVRJT046CisgICAgICAgIGdfdmFsdWVfc2V0X3N0
cmluZyh2YWx1ZSwgcHJpdi0+bG9jYXRpb24uZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTl9BVURJTzoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT5u
dW1iZXJPZkF1ZGlvU3RyZWFtcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OX1ZJ
REVPOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPm51bWJlck9mVmlkZW9T
dHJlYW1zKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05fVEVYVDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT5udW1iZXJPZlRleHRTdHJlYW1zKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOworfQorCit2b2lkIHdlYktpdE1lZGlhU3Jj
RG9Bc3luY1N0YXJ0KFdlYktpdE1lZGlhU3JjKiBzb3VyY2UpCit7CisgICAgc291cmNlLT5wcml2
LT5hc3luY1N0YXJ0ID0gdHJ1ZTsKKyAgICBHU1RfQklOX0NMQVNTKHBhcmVudF9jbGFzcyktPmhh
bmRsZV9tZXNzYWdlKEdTVF9CSU4oc291cmNlKSwKKyAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2Fz
eW5jX3N0YXJ0KEdTVF9PQkpFQ1Qoc291cmNlKSkpOworfQorCit2b2lkIHdlYktpdE1lZGlhU3Jj
RG9Bc3luY0RvbmUoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSkKK3sKKyAgICBXZWJLaXRNZWRpYVNy
Y1ByaXZhdGUqIHByaXYgPSBzb3VyY2UtPnByaXY7CisgICAgaWYgKHByaXYtPmFzeW5jU3RhcnQp
IHsKKyAgICAgICAgR1NUX0JJTl9DTEFTUyhwYXJlbnRfY2xhc3MpLT5oYW5kbGVfbWVzc2FnZShH
U1RfQklOKHNvdXJjZSksCisgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZShH
U1RfT0JKRUNUKHNvdXJjZSksIEdTVF9DTE9DS19USU1FX05PTkUpKTsKKyAgICAgICAgcHJpdi0+
YXN5bmNTdGFydCA9IGZhbHNlOworICAgIH0KK30KKworR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2Vi
S2l0TWVkaWFTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5n
ZSB0cmFuc2l0aW9uKQoreworICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVE
SUFfU1JDKGVsZW1lbnQpOworICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNvdXJj
ZS0+cHJpdjsKKworICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRF
X0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICAgIHByaXYtPmFsbFRyYWNrc0NvbmZpZ3Vy
ZWQgPSBmYWxzZTsKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5jU3RhcnQoc291cmNlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0ID0gR1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50
X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVsZW1lbnQsIHRyYW5zaXRpb24pOworICAgIGlmIChHX1VO
TElLRUxZKHJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpKSB7CisgICAgICAgIEdT
VF9XQVJOSU5HX09CSkVDVChzb3VyY2UsICJTdGF0ZSBjaGFuZ2UgZmFpbGVkIik7CisgICAgICAg
IHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUoc291cmNlKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFU
RV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgorICAgICAgICByZXN1bHQgPSBHU1RfU1RBVEVfQ0hB
TkdFX0FTWU5DOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFV
U0VEX1RPX1JFQURZOgorICAgICAgICB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKHNvdXJjZSk7
CisgICAgICAgIHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZ2ludDY0IHdlYktpdE1lZGlhU3JjR2V0U2l6ZShXZWJLaXRNZWRpYVNyYyog
d2ViS2l0TWVkaWFTcmMpCit7CisgICAgZ2ludDY0IGR1cmF0aW9uID0gMDsKKyAgICBmb3IgKFN0
cmVhbSogc3RyZWFtIDogd2ViS2l0TWVkaWFTcmMtPnByaXYtPnN0cmVhbXMpCisgICAgICAgIGR1
cmF0aW9uID0gc3RkOjptYXg8Z2ludDY0PihkdXJhdGlvbiwgZ3N0X2FwcF9zcmNfZ2V0X3NpemUo
R1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKSk7CisgICAgcmV0dXJuIGR1cmF0aW9uOworfQor
CitnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1F1ZXJ5V2l0aFBhcmVudChHc3RQYWQqIHBhZCwgR3N0
T2JqZWN0KiBwYXJlbnQsIEdzdFF1ZXJ5KiBxdWVyeSkKK3sKKyAgICBXZWJLaXRNZWRpYVNyYyog
c291cmNlID0gV0VCS0lUX01FRElBX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQpKTsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBGQUxTRTsKKworICAgIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUocXVlcnkp
KSB7CisgICAgY2FzZSBHU1RfUVVFUllfRFVSQVRJT046IHsKKyAgICAgICAgR3N0Rm9ybWF0IGZv
cm1hdDsKKyAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKHF1ZXJ5LCAmZm9ybWF0LCBu
dWxscHRyKTsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgImR1cmF0aW9uIHF1
ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0KSk7CisgICAgICAg
IEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2UpOworICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAg
ICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRTogeworICAgICAgICAgICAgaWYgKHNvdXJjZS0+cHJp
diAmJiBzb3VyY2UtPnByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZSkgeworICAgICAgICAgICAgICAg
IE1lZGlhVGltZSBkdXJhdGlvbiA9IHNvdXJjZS0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlLT5k
dXJhdGlvbk1lZGlhVGltZSgpOworICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiA+IE1lZGlh
VGltZTo6emVyb1RpbWUoKSkgeworICAgICAgICAgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1
cmF0aW9uKHF1ZXJ5LCBmb3JtYXQsIFdlYkNvcmU6OnRvR3N0Q2xvY2tUaW1lKGR1cmF0aW9uKSk7
CisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc291cmNlLCAiQW5zd2VyaW5n
OiBkdXJhdGlvbj0lIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MoV2ViQ29yZTo6dG9H
c3RDbG9ja1RpbWUoZHVyYXRpb24pKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRS
VUU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOiB7CisgICAgICAgICAg
ICBpZiAoc291cmNlLT5wcml2KSB7CisgICAgICAgICAgICAgICAgZ2ludDY0IGR1cmF0aW9uID0g
d2ViS2l0TWVkaWFTcmNHZXRTaXplKHNvdXJjZSk7CisgICAgICAgICAgICAgICAgaWYgKGR1cmF0
aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnks
IGZvcm1hdCwgZHVyYXRpb24pOworICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNvdXJjZSwgInNpemU6ICUiIEdfR0lOVDY0X0ZPUk1BVCwgZHVyYXRpb24pOworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNv
dXJjZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9RVUVSWV9VUkk6Cisg
ICAgICAgIGlmIChzb3VyY2UpIHsKKyAgICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2Up
OworICAgICAgICAgICAgaWYgKHNvdXJjZS0+cHJpdikKKyAgICAgICAgICAgICAgICBnc3RfcXVl
cnlfc2V0X3VyaShxdWVyeSwgc291cmNlLT5wcml2LT5sb2NhdGlvbi5nZXQoKSk7CisgICAgICAg
ICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOworICAgICAgICB9CisgICAgICAgIHJlc3Vs
dCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgR1JlZlB0
cjxHc3RQYWQ+IHRhcmdldCA9IGFkb3B0R1JlZihnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQoR1NU
X0dIT1NUX1BBRF9DQVNUKHBhZCkpKTsKKyAgICAgICAgLy8gRm9yd2FyZCB0aGUgcXVlcnkgdG8g
dGhlIHByb3h5IHRhcmdldCBwYWQuCisgICAgICAgIGlmICh0YXJnZXQpCisgICAgICAgICAgICBy
ZXN1bHQgPSBnc3RfcGFkX3F1ZXJ5KHRhcmdldC5nZXQoKSwgcXVlcnkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJLaXRN
ZWRpYVNyY1VwZGF0ZVByZXNlbnRhdGlvblNpemUoR3N0Q2FwcyogY2FwcywgU3RyZWFtKiBzdHJl
YW0pCit7CisgICAgR1NUX09CSkVDVF9MT0NLKHN0cmVhbS0+cGFyZW50KTsKKyAgICBpZiAoV2Vi
Q29yZTo6ZG9DYXBzSGF2ZVR5cGUoY2FwcywgR1NUX1ZJREVPX0NBUFNfVFlQRV9QUkVGSVgpKSB7
CisgICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0U2l6ZT4gc2l6ZSA9IFdlYkNvcmU6Omdl
dFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNhcHMpOworICAgICAgICBpZiAoc2l6ZS5oYXNWYWx1
ZSgpKQorICAgICAgICAgICAgc3RyZWFtLT5wcmVzZW50YXRpb25TaXplID0gc2l6ZS52YWx1ZSgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHJlYW0tPnByZXNlbnRhdGlvblNpemUgPSBX
ZWJDb3JlOjpGbG9hdFNpemUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc3RyZWFtLT5wcmVzZW50
YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKCk7CisKKyAgICBnc3RfY2Fwc19yZWYoY2Fw
cyk7CisgICAgc3RyZWFtLT5jYXBzID0gYWRvcHRHUmVmKGNhcHMpOworICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKHN0cmVhbS0+cGFyZW50KTsKK30KKwordm9pZCB3ZWJLaXRNZWRpYVNyY0xpbmtTdHJl
YW1Ub1NyY1BhZChHc3RQYWQqIHNvdXJjZVBhZCwgU3RyZWFtKiBzdHJlYW0pCit7CisgICAgdW5z
aWduZWQgcGFkSWQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR1BPSU5URVJfVE9fSU5UKGdfb2Jq
ZWN0X2dldF9kYXRhKEdfT0JKRUNUKHNvdXJjZVBhZCksICJwYWRJZCIpKSk7CisgICAgR1NUX0RF
QlVHX09CSkVDVChzdHJlYW0tPnBhcmVudCwgImxpbmtpbmcgc3RyZWFtIHRvIHNyYyBwYWQgKGlk
OiAldSkiLCBwYWRJZCk7CisKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBwYWROYW1lKGdfc3RyZHVw
X3ByaW50Zigic3JjXyV1IiwgcGFkSWQpKTsKKyAgICBHc3RQYWQqIGdob3N0cGFkID0gV2ViQ29y
ZTo6d2Via2l0R3N0R2hvc3RQYWRGcm9tU3RhdGljVGVtcGxhdGUoJnNyY1RlbXBsYXRlLCBwYWRO
YW1lLmdldCgpLCBzb3VyY2VQYWQpOworCisgICAgYXV0byBwcm94eXBhZCA9IGFkb3B0R1JlZihH
U1RfUEFEKGdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsKEdTVF9QUk9YWV9QQUQoZ2hvc3RwYWQp
KSkpOworICAgIGdzdF9mbG93X2NvbWJpbmVyX2FkZF9wYWQoc3RyZWFtLT5wYXJlbnQtPnByaXYt
PmZsb3dDb21iaW5lci5nZXQoKSwgcHJveHlwYWQuZ2V0KCkpOworICAgIGdzdF9wYWRfc2V0X2No
YWluX2Z1bmN0aW9uKHByb3h5cGFkLmdldCgpLCBzdGF0aWNfY2FzdDxHc3RQYWRDaGFpbkZ1bmN0
aW9uPih3ZWJraXRNZWRpYVNyY0NoYWluKSk7CisgICAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rp
b24oZ2hvc3RwYWQsIHdlYktpdE1lZGlhU3JjUXVlcnlXaXRoUGFyZW50KTsKKworICAgIGdzdF9w
YWRfc2V0X2FjdGl2ZShnaG9zdHBhZCwgVFJVRSk7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChH
U1RfRUxFTUVOVChzdHJlYW0tPnBhcmVudCksIGdob3N0cGFkKTsKK30KKwordm9pZCB3ZWJLaXRN
ZWRpYVNyY0xpbmtTb3VyY2VQYWQoR3N0UGFkKiBzb3VyY2VQYWQsIEdzdENhcHMqIGNhcHMsIFN0
cmVhbSogc3RyZWFtKQoreworICAgIEFTU0VSVChjYXBzICYmIHN0cmVhbS0+cGFyZW50KTsKKyAg
ICBpZiAoIWNhcHMgfHwgIXN0cmVhbS0+cGFyZW50KSB7CisgICAgICAgIEdTVF9FUlJPUigiVW5h
YmxlIHRvIGxpbmsgcGFyc2VyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3ZWJL
aXRNZWRpYVNyY1VwZGF0ZVByZXNlbnRhdGlvblNpemUoY2Fwcywgc3RyZWFtKTsKKworICAgIC8v
IEZJWE1FOiBkcm9wIHdlYktpdE1lZGlhU3JjTGlua1N0cmVhbVRvU3JjUGFkKCkgYW5kIG1vdmUg
aXRzIGNvZGUgaGVyZS4KKyAgICBpZiAoIWdzdF9wYWRfaXNfbGlua2VkKHNvdXJjZVBhZCkpIHsK
KyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBhcmVudCwgInBhZCBub3QgbGlua2Vk
IHlldCIpOworICAgICAgICB3ZWJLaXRNZWRpYVNyY0xpbmtTdHJlYW1Ub1NyY1BhZChzb3VyY2VQ
YWQsIHN0cmVhbSk7CisgICAgfQorCisgICAgd2ViS2l0TWVkaWFTcmNDaGVja0FsbFRyYWNrc0Nv
bmZpZ3VyZWQoc3RyZWFtLT5wYXJlbnQpOworfQorCit2b2lkIHdlYktpdE1lZGlhU3JjRnJlZVN0
cmVhbShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICBpZiAo
R1NUX0lTX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKSB7CisgICAgICAgIC8vIERvbid0IHRyaWdn
ZXIgY2FsbGJhY2tzIGZyb20gdGhpcyBhcHBzcmMgdG8gYXZvaWQgdXNpbmcgdGhlIHN0cmVhbSBh
bnltb3JlLgorICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2FsbGJhY2tzKEdTVF9BUFBfU1JDKHN0
cmVhbS0+YXBwc3JjKSwgJmRpc2FibGVkQXBwc3JjQ2FsbGJhY2tzLCBudWxscHRyLCBudWxscHRy
KTsKKyAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShHU1RfQVBQX1NSQyhzdHJlYW0t
PmFwcHNyYykpOworICAgIH0KKworICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2UpOworICAgIHN3
aXRjaCAoc3RyZWFtLT50eXBlKSB7CisgICAgY2FzZSBXZWJDb3JlOjpBdWRpbzoKKyAgICAgICAg
c291cmNlLT5wcml2LT5udW1iZXJPZkF1ZGlvU3RyZWFtcy0tOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdlYkNvcmU6OlZpZGVvOgorICAgICAgICBzb3VyY2UtPnByaXYtPm51bWJlck9mVmlk
ZW9TdHJlYW1zLS07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6VGV4dDoKKyAg
ICAgICAgc291cmNlLT5wcml2LT5udW1iZXJPZlRleHRTdHJlYW1zLS07CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBHU1RfT0JKRUNUX1VO
TE9DSyhzb3VyY2UpOworCisgICAgaWYgKHN0cmVhbS0+dHlwZSAhPSBXZWJDb3JlOjpJbnZhbGlk
KSB7CisgICAgICAgIEdTVF9ERUJVRygiRnJlZWluZyB0cmFjay1yZWxhdGVkIGluZm8gb24gc3Ry
ZWFtICVwIiwgc3RyZWFtKTsKKworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzb3VyY2UtPnBy
aXYtPnN0cmVhbUxvY2spOworCisgICAgICAgIGlmIChzdHJlYW0tPmNhcHMpCisgICAgICAgICAg
ICBzdHJlYW0tPmNhcHMgPSBudWxscHRyOworCisgICAgICAgIGlmIChzdHJlYW0tPmF1ZGlvVHJh
Y2spCisgICAgICAgICAgICBzdHJlYW0tPmF1ZGlvVHJhY2sgPSBudWxscHRyOworICAgICAgICBp
ZiAoc3RyZWFtLT52aWRlb1RyYWNrKQorICAgICAgICAgICAgc3RyZWFtLT52aWRlb1RyYWNrID0g
bnVsbHB0cjsKKworICAgICAgICBpbnQgc2lnbmFsID0gLTE7CisgICAgICAgIHN3aXRjaCAoc3Ry
ZWFtLT50eXBlKSB7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6QXVkaW86CisgICAgICAgICAgICBz
aWduYWwgPSBTSUdOQUxfQVVESU9fQ0hBTkdFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OlZpZGVvOgorICAgICAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVP
X0NIQU5HRUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpUZXh0
OgorICAgICAgICAgICAgc2lnbmFsID0gU0lHTkFMX1RFWFRfQ0hBTkdFRDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgc3RyZWFtLT50eXBlID0gV2ViQ29yZTo6SW52YWxpZDsKKworICAgICAgICBpZiAo
c2lnbmFsICE9IC0xKQorICAgICAgICAgICAgZ19zaWduYWxfZW1pdChHX09CSkVDVChzb3VyY2Up
LCB3ZWJLaXRNZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7CisKKyAgICAgICAg
c291cmNlLT5wcml2LT5zdHJlYW1Db25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgfQorCisgICAg
R1NUX0RFQlVHKCJSZWxlYXNpbmcgc3RyZWFtOiAlcCIsIHN0cmVhbSk7CisgICAgZGVsZXRlIHN0
cmVhbTsKK30KKwordm9pZCB3ZWJLaXRNZWRpYVNyY0NoZWNrQWxsVHJhY2tzQ29uZmlndXJlZChX
ZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMpCit7CisgICAgYm9vbCBhbGxUcmFja3NDb25m
aWd1cmVkID0gZmFsc2U7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOwor
ICAgIGlmICghd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQpIHsKKyAg
ICAgICAgYWxsVHJhY2tzQ29uZmlndXJlZCA9IHRydWU7CisgICAgICAgIGZvciAoU3RyZWFtKiBz
dHJlYW0gOiB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+c3RyZWFtcykgeworICAgICAgICAgICAgaWYg
KHN0cmVhbS0+dHlwZSA9PSBXZWJDb3JlOjpJbnZhbGlkKSB7CisgICAgICAgICAgICAgICAgYWxs
VHJhY2tzQ29uZmlndXJlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChhbGxUcmFja3NDb25maWd1cmVkKQorICAg
ICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVl
OworICAgIH0KKyAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBp
ZiAoYWxsVHJhY2tzQ29uZmlndXJlZCkgeworICAgICAgICBHU1RfREVCVUcoIkFsbCB0cmFja3Mg
YXR0YWNoZWQuIENvbXBsZXRpbmcgYXN5bmMgc3RhdGUgY2hhbmdlIG9wZXJhdGlvbi4iKTsKKyAg
ICAgICAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzKEdTVF9FTEVNRU5UKHdlYktpdE1lZGlhU3Jj
KSk7CisgICAgICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUod2ViS2l0TWVkaWFTcmMpOwor
ICAgIH0KK30KKworLy8gVXJpIGhhbmRsZXIgaW50ZXJmYWNlLgorR3N0VVJJVHlwZSB3ZWJLaXRN
ZWRpYVNyY1VyaUdldFR5cGUoR1R5cGUpCit7CisgICAgcmV0dXJuIEdTVF9VUklfU1JDOworfQor
Citjb25zdCBnY2hhciogY29uc3QqIHdlYktpdE1lZGlhU3JjR2V0UHJvdG9jb2xzKEdUeXBlKQor
eworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcm90b2NvbHNbXSA9IHsibWVkaWFzb3VyY2VibG9i
IiwgbnVsbHB0ciB9OworICAgIHJldHVybiBwcm90b2NvbHM7Cit9CisKK2djaGFyKiB3ZWJLaXRN
ZWRpYVNyY0dldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyKQoreworICAgIFdlYktpdE1lZGlh
U3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKGhhbmRsZXIpOworICAgIGdjaGFyKiByZXN1
bHQ7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKKyAgICByZXN1bHQgPSBnX3N0cmR1
cChzb3VyY2UtPnByaXYtPmxvY2F0aW9uLmdldCgpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
b3VyY2UpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYktpdE1lZGlhU3Jj
U2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcnJvcioq
KQoreworICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKGhhbmRs
ZXIpOworCisgICAgaWYgKEdTVF9TVEFURShzb3VyY2UpID49IEdTVF9TVEFURV9QQVVTRUQpIHsK
KyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzb3VyY2UsICJVUkkgY2FuIG9ubHkgYmUgc2V0IGlu
IHN0YXRlcyA8IFBBVVNFRCIpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAg
R1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7CisgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2
ID0gc291cmNlLT5wcml2OworICAgIHByaXYtPmxvY2F0aW9uID0gbnVsbHB0cjsKKyAgICBpZiAo
IXVyaSkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOworICAgICAgICByZXR1
cm4gVFJVRTsKKyAgICB9CisKKyAgICBVUkwgdXJsKFVSTCgpLCB1cmkpOworCisgICAgcHJpdi0+
bG9jYXRpb24gPSBHVW5pcXVlUHRyPGdjaGFyPihnX3N0cmR1cCh1cmwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7CisgICAgcmV0dXJuIFRS
VUU7Cit9CisKK3ZvaWQgd2ViS2l0TWVkaWFTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciBnSWZh
Y2UsIGdwb2ludGVyKQoreworICAgIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UqIGlmYWNlID0gKEdz
dFVSSUhhbmRsZXJJbnRlcmZhY2UgKikgZ0lmYWNlOworCisgICAgaWZhY2UtPmdldF90eXBlID0g
d2ViS2l0TWVkaWFTcmNVcmlHZXRUeXBlOworICAgIGlmYWNlLT5nZXRfcHJvdG9jb2xzID0gd2Vi
S2l0TWVkaWFTcmNHZXRQcm90b2NvbHM7CisgICAgaWZhY2UtPmdldF91cmkgPSB3ZWJLaXRNZWRp
YVNyY0dldFVyaTsKKyAgICBpZmFjZS0+c2V0X3VyaSA9IHdlYktpdE1lZGlhU3JjU2V0VXJpOwor
fQorCitzdGF0aWMgdm9pZCBzZWVrTmVlZHNEYXRhTWFpblRocmVhZChXZWJLaXRNZWRpYVNyYyog
c291cmNlKQoreworICAgIEdTVF9ERUJVRygiQnVmZmVyaW5nIG5lZWRlZCBiZWZvcmUgc2VlayIp
OworCisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgR1NUX09CSkVDVF9M
T0NLKHNvdXJjZSk7CisgICAgTWVkaWFUaW1lIHNlZWtUaW1lID0gc291cmNlLT5wcml2LT5zZWVr
VGltZTsKKyAgICBXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UqIG1lZGlh
UGxheWVyUHJpdmF0ZSA9IHNvdXJjZS0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlOworCisgICAg
aWYgKCFtZWRpYVBsYXllclByaXZhdGUpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291
cmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoU3RyZWFtKiBzdHJlYW0g
OiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKKyAgICAgICAgaWYgKHN0cmVhbS0+dHlwZSAhPSBX
ZWJDb3JlOjpJbnZhbGlkKQorICAgICAgICAgICAgc3RyZWFtLT5zb3VyY2VCdWZmZXItPnNldFJl
YWR5Rm9yTW9yZVNhbXBsZXModHJ1ZSk7CisgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNv
dXJjZSk7CisgICAgbWVkaWFQbGF5ZXJQcml2YXRlLT5ub3RpZnlTZWVrTmVlZHNEYXRhRm9yVGlt
ZShzZWVrVGltZSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXNN
YWluVGhyZWFkKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIFN0cmVhbSogYXBwc3JjU3RyZWFtKQor
eworICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2UpOworCisgICAgYXV0byBpdCA9IHN0ZDo6Zmlu
ZChzb3VyY2UtPnByaXYtPnN0cmVhbXMuYmVnaW4oKSwgc291cmNlLT5wcml2LT5zdHJlYW1zLmVu
ZCgpLCBhcHBzcmNTdHJlYW0pOworICAgIGlmIChpdCA9PSBzb3VyY2UtPnByaXYtPnN0cmVhbXMu
ZW5kKCkpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RSogbWVkaWFQbGF5ZXJQcml2YXRlID0gc291cmNlLT5wcml2LT5tZWRpYVBsYXllclByaXZhdGU7
CisgICAgaWYgKG1lZGlhUGxheWVyUHJpdmF0ZSAmJiAhbWVkaWFQbGF5ZXJQcml2YXRlLT5zZWVr
aW5nKCkpCisgICAgICAgIGFwcHNyY1N0cmVhbS0+c291cmNlQnVmZmVyLT5ub3RpZnlSZWFkeUZv
ck1vcmVTYW1wbGVzKCk7CisKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOworfQorCit2
b2lkIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdlYktpdE1lZGlhU3JjKiBz
b3VyY2UsIFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogbWVkaWFQbGF5
ZXJQcml2YXRlKQoreworICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2UpOworCisgICAgLy8gU2V0
IHRvIG51bGxwdHIgb24gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIGRlc3RydWN0aW9uLCBu
ZXZlciBhIGRhbmdsaW5nIHBvaW50ZXIuCisgICAgc291cmNlLT5wcml2LT5tZWRpYVBsYXllclBy
aXZhdGUgPSBtZWRpYVBsYXllclByaXZhdGU7CisgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNl
KTsKK30KKwordm9pZCB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXZWJLaXRNZWRp
YVNyYyogc291cmNlLCBib29sIGlzUmVhZHkpCit7CisgICAgaWYgKHNvdXJjZSkgeworICAgICAg
ICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKKyAgICAgICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6
IHNvdXJjZS0+cHJpdi0+c3RyZWFtcykKKyAgICAgICAgICAgIHN0cmVhbS0+c291cmNlQnVmZmVy
LT5zZXRSZWFkeUZvck1vcmVTYW1wbGVzKGlzUmVhZHkpOworICAgICAgICBHU1RfT0JKRUNUX1VO
TE9DSyhzb3VyY2UpOworICAgIH0KK30KKwordm9pZCB3ZWJLaXRNZWRpYVNyY1ByZXBhcmVTZWVr
KFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIGNvbnN0IE1lZGlhVGltZSYgdGltZSkKK3sKKyAgICBH
U1RfT0JKRUNUX0xPQ0soc291cmNlKTsKKyAgICBzb3VyY2UtPnByaXYtPnNlZWtUaW1lID0gdGlt
ZTsKKyAgICBzb3VyY2UtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291bnQgPSAwOworICAgIHNvdXJj
ZS0+cHJpdi0+YXBwc3JjTmVlZERhdGFDb3VudCA9IDA7CisKKyAgICBmb3IgKFN0cmVhbSogc3Ry
ZWFtIDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7CisgICAgICAgIHN0cmVhbS0+YXBwc3JjTmVl
ZERhdGFGbGFnID0gZmFsc2U7CisgICAgICAgIC8vIERvbid0IGFsbG93IHNhbXBsZXMgYXdheSBm
cm9tIHRoZSBzZWVrVGltZSB0byBiZSBlbnF1ZXVlZC4KKyAgICAgICAgc3RyZWFtLT5sYXN0RW5x
dWV1ZWRUaW1lID0gdGltZTsKKyAgICB9CisKKyAgICAvLyBUaGUgcGVuZGluZyBhY3Rpb24gd2ls
bCBiZSBwZXJmb3JtZWQgaW4gZW5hYmxlZEFwcHNyY1NlZWtEYXRhKCkuCisgICAgc291cmNlLT5w
cml2LT5hcHBzcmNTZWVrRGF0YU5leHRBY3Rpb24gPSBNZWRpYVNvdXJjZVNlZWtUb1RpbWU7Cisg
ICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKK30KKworbmFtZXNwYWNlIFdURiB7Cit0ZW1w
bGF0ZSA8PiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPiBhZG9wdEdSZWYoV2ViS2l0TWVkaWFTcmMq
IHB0cikKK3sKKyAgICBBU1NFUlQoIXB0ciB8fCAhZ19vYmplY3RfaXNfZmxvYXRpbmcoR19PQkpF
Q1QocHRyKSkpOworICAgIHJldHVybiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPihwdHIsIEdSZWZQ
dHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IFdlYktpdE1lZGlhU3JjKiByZWZHUHRyPFdlYktp
dE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAg
IGdzdF9vYmplY3RfcmVmX3NpbmsoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7
Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRN
ZWRpYVNyYyogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYo
cHRyKTsKK30KK307CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9T
T1VSQ0UpICYmIFVTRShHU1RSRUFNRVIpICYmICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lclBsYXliaW4yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVh
bWVyUGxheWJpbjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTQ5
NGZhMDkyY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUGxheWJpbjIuaApA
QCAtMCwwICsxLDgyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBTZWJhc3Rp
YW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgT3Jhbmdl
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlh
bkBjZW50cmljdWxhci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiAgQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IElnYWxpYSwgUy5M
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEdTVFJFQU1FUikKKyNp
bmNsdWRlIDxnc3QvZ3N0Lmg+CisKKyNpZiAhR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTYsIDApCisj
aW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNp
bmNsdWRlICJNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGUuaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQ
cml2YXRlQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOworCitlbnVtIE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJl
YW1lciB7IEludmFsaWQsIFVua25vd24sIEF1ZGlvLCBWaWRlbywgVGV4dCB9OworCit9CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9NRURJQV9TUkMgICAgICAgICAgICAo
d2Via2l0X21lZGlhX3NyY19nZXRfdHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX1NSQyhv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lU
X1RZUEVfTUVESUFfU1JDLCBXZWJLaXRNZWRpYVNyYykpCisjZGVmaW5lIFdFQktJVF9NRURJQV9T
UkNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VC
S0lUX1RZUEVfTUVESUFfU1JDLCBXZWJLaXRNZWRpYVNyY0NsYXNzKSkKKyNkZWZpbmUgV0VCS0lU
X0lTX01FRElBX1NSQyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgo
b2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfU1JDKSkKKyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX1NS
Q19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRf
VFlQRV9NRURJQV9TUkMpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFTcmMgICAgICAg
IFdlYktpdE1lZGlhU3JjOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhU3JjQ2xhc3MgICBX
ZWJLaXRNZWRpYVNyY0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhU3JjUHJpdmF0
ZSBXZWJLaXRNZWRpYVNyY1ByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0TWVkaWFTcmMgeworICAg
IEdzdEJpbiBwYXJlbnQ7CisKKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUgKnByaXY7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdE1lZGlhU3JjQ2xhc3MgeworICAgIEdzdEJpbkNsYXNzIHBhcmVudENs
YXNzOworCisgICAgLy8gTm90aWZ5IGFwcCB0aGF0IG51bWJlciBvZiBhdWRpby92aWRlby90ZXh0
IHN0cmVhbXMgY2hhbmdlZC4KKyAgICB2b2lkICgqdmlkZW9DaGFuZ2VkKShXZWJLaXRNZWRpYVNy
YyopOworICAgIHZvaWQgKCphdWRpb0NoYW5nZWQpKFdlYktpdE1lZGlhU3JjKik7CisgICAgdm9p
ZCAoKnRleHRDaGFuZ2VkKShXZWJLaXRNZWRpYVNyYyopOworfTsKKworR1R5cGUgd2Via2l0X21l
ZGlhX3NyY19nZXRfdHlwZSh2b2lkKTsKKwordm9pZCB3ZWJLaXRNZWRpYVNyY1NldE1lZGlhUGxh
eWVyUHJpdmF0ZShXZWJLaXRNZWRpYVNyYyosIFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRSopOworCit2b2lkIHdlYktpdE1lZGlhU3JjUHJlcGFyZVNlZWsoV2ViS2l0TWVk
aWFTcmMqLCBjb25zdCBNZWRpYVRpbWUmKTsKK3ZvaWQgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZv
clNhbXBsZXMoV2ViS2l0TWVkaWFTcmMqLCBib29sKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8vICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8p
ICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlh
U291cmNlR1N0cmVhbWVyUGxheWJpbjJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUGxheWJp
bjJQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc0ZmVh
N2U4OWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lclBsYXliaW4yUHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVE
SUFfU09VUkNFKQorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworI2lmICFHU1RfQ0hFQ0tfVkVSU0lP
TigxLCAxNiwgMCkKKworI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1haW5UaHJlYWROb3Rp
Zmllci5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIldlYktpdE1lZGlh
U291cmNlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTsKKworfTsKKwordm9pZCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KGdwb2ludGVyLCBn
cG9pbnRlcik7CisKKyNkZWZpbmUgV0VCS0lUX01FRElBX1NSQ19HRVRfUFJJVkFURShvYmopIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX1NSQywg
V2ViS2l0TWVkaWFTcmNQcml2YXRlKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1N0cmVhbSBTdHJlYW07
CisKK3N0cnVjdCBfU3RyZWFtIHsKKyAgICAvLyBGaWVsZHMgZmlsbGVkIHdoZW4gdGhlIFN0cmVh
bSBpcyBjcmVhdGVkLgorICAgIFdlYktpdE1lZGlhU3JjKiBwYXJlbnQ7CisKKyAgICAvLyBBcHBT
cmMuIE5ldmVyIG1vZGlmaWVkIGFmdGVyIGZpcnN0IGFzc2lnbm1lbnQuCisgICAgR3N0RWxlbWVu
dCogYXBwc3JjOworCisgICAgLy8gTmV2ZXIgbW9kaWZpZWQgYWZ0ZXIgZmlyc3QgYXNzaWdubWVu
dC4KKyAgICBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKiBzb3VyY2VCdWZm
ZXI7CisKKyAgICAvLyBGaWVsZHMgZmlsbGVkIHdoZW4gdGhlIHRyYWNrIGlzIGF0dGFjaGVkLgor
ICAgIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciB0eXBlOworICAgIEdS
ZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKworICAgIC8vIE9ubHkgYXVkaW8sIHZpZGVvIG9yIG5vdGhp
bmcgYXQgYSBnaXZlbiB0aW1lLgorICAgIFJlZlB0cjxXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcj4gYXVkaW9UcmFjazsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VmlkZW9UcmFja1By
aXZhdGVHU3RyZWFtZXI+IHZpZGVvVHJhY2s7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHByZXNl
bnRhdGlvblNpemU7CisKKyAgICAvLyBUaGlzIGhlbHBzIFdlYktpdE1lZGlhU3JjUHJpdmF0ZS5h
cHBzcmNOZWVkRGF0YUNvdW50LCBlbnN1cmluZyB0aGF0IG5lZWREYXRhcyBhcmUKKyAgICAvLyBj
b3VudGVkIG9ubHkgb25jZSBwZXIgZWFjaCBhcHBzcmMuCisgICAgYm9vbCBhcHBzcmNOZWVkRGF0
YUZsYWc7CisKKyAgICAvLyBVc2VkIHRvIGVuZm9yY2UgY29udGludWl0eSBpbiB0aGUgYXBwZW5k
ZWQgZGF0YSBhbmQgYXZvaWQgYnJlYWtpbmcgdGhlIGRlY29kZXIuCisgICAgLy8gT25seSB1c2Vk
IGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIE1lZGlhVGltZSBsYXN0RW5xdWV1ZWRUaW1lOwor
fTsKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTE9DQVRJT04sCisgICAgUFJPUF9O
X0FVRElPLAorICAgIFBST1BfTl9WSURFTywKKyAgICBQUk9QX05fVEVYVCwKKyAgICBQUk9QX0xB
U1QKK307CisKK2VudW0geworICAgIFNJR05BTF9WSURFT19DSEFOR0VELAorICAgIFNJR05BTF9B
VURJT19DSEFOR0VELAorICAgIFNJR05BTF9URVhUX0NIQU5HRUQsCisgICAgTEFTVF9TSUdOQUwK
K307CisKK2VudW0gT25TZWVrRGF0YUFjdGlvbiB7CisgICAgTm90aGluZywKKyAgICBNZWRpYVNv
dXJjZVNlZWtUb1RpbWUKK307CisKK2VudW0gV2ViS2l0TWVkaWFTcmNNYWluVGhyZWFkTm90aWZp
Y2F0aW9uIHsKKyAgICBSZWFkeUZvck1vcmVTYW1wbGVzID0gMSA8PCAwLAorICAgIFNlZWtOZWVk
c0RhdGEgPSAxIDw8IDEKK307CisKK3N0cnVjdCBfV2ViS2l0TWVkaWFTcmNQcml2YXRlIHsKKyAg
ICAvLyBVc2VkIHRvIGNvb3JkaW5hdGUgdGhlIHJlbGVhc2Ugb2YgU3RyZWFtIHRyYWNrIGluZm8u
CisgICAgTG9jayBzdHJlYW1Mb2NrOworICAgIENvbmRpdGlvbiBzdHJlYW1Db25kaXRpb247CisK
KyAgICAvLyBTdHJlYW1zIGFyZSBvbmx5IGFkZGVkL3JlbW92ZWQgaW4gdGhlIG1haW4gdGhyZWFk
LgorICAgIFZlY3RvcjxTdHJlYW0qPiBzdHJlYW1zOworCisgICAgR1VuaXF1ZVB0cjxnY2hhcj4g
bG9jYXRpb247CisgICAgaW50IG51bWJlck9mQXVkaW9TdHJlYW1zOworICAgIGludCBudW1iZXJP
ZlZpZGVvU3RyZWFtczsKKyAgICBpbnQgbnVtYmVyT2ZUZXh0U3RyZWFtczsKKyAgICBib29sIGFz
eW5jU3RhcnQ7CisgICAgYm9vbCBhbGxUcmFja3NDb25maWd1cmVkOworICAgIHVuc2lnbmVkIG51
bWJlck9mUGFkczsKKworICAgIE1lZGlhVGltZSBzZWVrVGltZTsKKworICAgIC8vIE9uIHNlZWss
IHdlIHdhaXQgZm9yIGFsbCB0aGUgc2Vla0RhdGFzLCB0aGVuIGZvciBhbGwgdGhlIG5lZWREYXRh
cywgYW5kIHRoZW4gcnVuIHRoZSBuZXh0QWN0aW9uLgorICAgIE9uU2Vla0RhdGFBY3Rpb24gYXBw
c3JjU2Vla0RhdGFOZXh0QWN0aW9uOworICAgIGludCBhcHBzcmNTZWVrRGF0YUNvdW50OworICAg
IGludCBhcHBzcmNOZWVkRGF0YUNvdW50OworCisgICAgV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFKiBtZWRpYVBsYXllclByaXZhdGU7CisKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6TWFpblRocmVhZE5vdGlmaWVyPFdlYktpdE1lZGlhU3JjTWFpblRocmVhZE5vdGlmaWNhdGlv
bj4+IG5vdGlmaWVyOworICAgIEdVbmlxdWVQdHI8R3N0Rmxvd0NvbWJpbmVyPiBmbG93Q29tYmlu
ZXI7Cit9OworCitleHRlcm4gZ3VpbnQgd2ViS2l0TWVkaWFTcmNTaWduYWxzW0xBU1RfU0lHTkFM
XTsKK2V4dGVybiBHc3RBcHBTcmNDYWxsYmFja3MgZW5hYmxlZEFwcHNyY0NhbGxiYWNrczsKK2V4
dGVybiBHc3RBcHBTcmNDYWxsYmFja3MgZGlzYWJsZWRBcHBzcmNDYWxsYmFja3M7CisKK3ZvaWQg
d2ViS2l0TWVkaWFTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciBnSWZhY2UsIGdwb2ludGVyIGlm
YWNlRGF0YSk7Cit2b2lkIHdlYktpdE1lZGlhU3JjRmluYWxpemUoR09iamVjdCopOwordm9pZCB3
ZWJLaXRNZWRpYVNyY1NldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wZXJ0eUlkLCBjb25z
dCBHVmFsdWUqLCBHUGFyYW1TcGVjKik7Cit2b2lkIHdlYktpdE1lZGlhU3JjR2V0UHJvcGVydHko
R09iamVjdCosIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKK3ZvaWQg
d2ViS2l0TWVkaWFTcmNEb0FzeW5jU3RhcnQoV2ViS2l0TWVkaWFTcmMqKTsKK3ZvaWQgd2ViS2l0
TWVkaWFTcmNEb0FzeW5jRG9uZShXZWJLaXRNZWRpYVNyYyopOworR3N0U3RhdGVDaGFuZ2VSZXR1
cm4gd2ViS2l0TWVkaWFTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2Up
OworZ2ludDY0IHdlYktpdE1lZGlhU3JjR2V0U2l6ZShXZWJLaXRNZWRpYVNyYyopOworZ2Jvb2xl
YW4gd2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFkKiwgR3N0T2JqZWN0KiwgR3N0
UXVlcnkqKTsKK3ZvaWQgd2ViS2l0TWVkaWFTcmNVcGRhdGVQcmVzZW50YXRpb25TaXplKEdzdENh
cHMqLCBTdHJlYW0qKTsKK3ZvaWQgd2ViS2l0TWVkaWFTcmNMaW5rU3RyZWFtVG9TcmNQYWQoR3N0
UGFkKiwgU3RyZWFtKik7Cit2b2lkIHdlYktpdE1lZGlhU3JjTGlua1NvdXJjZVBhZChHc3RQYWQq
LCBHc3RDYXBzKiwgU3RyZWFtKik7Cit2b2lkIHdlYktpdE1lZGlhU3JjRnJlZVN0cmVhbShXZWJL
aXRNZWRpYVNyYyosIFN0cmVhbSopOwordm9pZCB3ZWJLaXRNZWRpYVNyY0NoZWNrQWxsVHJhY2tz
Q29uZmlndXJlZChXZWJLaXRNZWRpYVNyYyopOworR3N0VVJJVHlwZSB3ZWJLaXRNZWRpYVNyY1Vy
aUdldFR5cGUoR1R5cGUpOworY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRNZWRpYVNyY0dldFBy
b3RvY29scyhHVHlwZSk7CitnY2hhciogd2ViS2l0TWVkaWFTcmNHZXRVcmkoR3N0VVJJSGFuZGxl
ciopOworZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNTZXRVcmkoR3N0VVJJSGFuZGxlciosIGNvbnN0
IGdjaGFyKiwgR0Vycm9yKiopOworCisjZW5kaWYgLy8gIUdTVF9DSEVDS19WRVJTSU9OKDEsIDE2
LCAwKQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxF
KE1FRElBX1NPVVJDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJj
ZUdTdHJlYW1lclBsYXliaW4zLmNwcApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlh
U291cmNlR1N0cmVhbWVyLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lclBsYXliaW4zLmNw
cAppbmRleCA4NjIzMDViZGNkZi4uZTUwMjY1NGM2NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQbGF5YmluMy5jcHAKQEAgLTIyLDkgKzIy
LDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0TWVkaWFT
b3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lclBs
YXliaW4zLmgiCiAKLSNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYm
IFVTRShHU1RSRUFNRVIpCisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU09VUkNF
KSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkKIAogI2lu
Y2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlR1N0
cmVhbWVyLmgiCkBAIC04MjgsNSArODI4LDUgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8
V2ViS2l0TWVkaWFTcmM+KFdlYktpdE1lZGlhU3JjKiBwdHIpCiB9CiB9IC8vIG5hbWVzcGFjZSBX
VEYKIAotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAm
JiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBHU1RfQ0hFQ0tfVkVS
U0lPTigxLCAxNiwgMCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lclBsYXliaW4zLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1l
ZGlhU291cmNlR1N0cmVhbWVyUGxheWJpbjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uOWUwOGU4OGZlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVh
bWVyUGxheWJpbjMuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51
az4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTMgT3JhbmdlCisgKiAgQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IFNlYmFzdGlhbiBE
csO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDE1
LCAyMDE2LCAyMDE4LCAyMDE5IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDE1LCAyMDE2LCAyMDE4LCAyMDE5IElnYWxpYSwgUy5MCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShWSURFTykgJiYgRU5B
QkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+
CisKKyNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNiwgMCkKKyNpbmNsdWRlICJHU3RyZWFtZXJD
b21tb24uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNl
LmgiCisjaW5jbHVkZSAiTWVkaWFTb3VyY2VQcml2YXRlLmgiCisjaW5jbHVkZSAiU291cmNlQnVm
ZmVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U7CisKK2VudW0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIHsgSW52YWxpZCwgVW5r
bm93biwgQXVkaW8sIFZpZGVvLCBUZXh0IH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX01FRElBX1NSQyAgICAgICAgICAg
ICh3ZWJraXRfbWVkaWFfc3JjX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRfTUVESUFfU1JD
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJL
SVRfVFlQRV9NRURJQV9TUkMsIFdlYktpdE1lZGlhU3JjKSkKKyNkZWZpbmUgV0VCS0lUX01FRElB
X1NSQ19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBX
RUJLSVRfVFlQRV9NRURJQV9TUkMsIFdlYktpdE1lZGlhU3JjQ2xhc3MpKQorI2RlZmluZSBXRUJL
SVRfSVNfTUVESUFfU1JDKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUg
KChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9TUkMpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVESUFf
U1JDX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJ
VF9UWVBFX01FRElBX1NSQykpCisKK3N0cnVjdCBXZWJLaXRNZWRpYVNyY1ByaXZhdGU7CisKK3N0
cnVjdCBXZWJLaXRNZWRpYVNyYyB7CisgICAgR3N0RWxlbWVudCBwYXJlbnQ7CisKKyAgICBXZWJL
aXRNZWRpYVNyY1ByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgV2ViS2l0TWVkaWFTcmNDbGFz
cyB7CisgICAgR3N0RWxlbWVudENsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUgd2Via2l0
X21lZGlhX3NyY19nZXRfdHlwZSh2b2lkKTsKKwordm9pZCB3ZWJLaXRNZWRpYVNyY0FkZFN0cmVh
bShXZWJLaXRNZWRpYVNyYyosIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIFdlYkNvcmU6Ok1lZGlh
U291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciwgR1JlZlB0cjxHc3RDYXBzPiYmIGluaXRpYWxDYXBz
KTsKK3ZvaWQgd2ViS2l0TWVkaWFTcmNSZW1vdmVTdHJlYW0oV2ViS2l0TWVkaWFTcmMqLCBjb25z
dCBBdG9tU3RyaW5nJiBuYW1lKTsKKwordm9pZCB3ZWJLaXRNZWRpYVNyY0VucXVldWVTYW1wbGUo
V2ViS2l0TWVkaWFTcmMqLCBjb25zdCBBdG9tU3RyaW5nJiBzdHJlYW1OYW1lLCBHUmVmUHRyPEdz
dFNhbXBsZT4mJik7Cit2b2lkIHdlYktpdE1lZGlhU3JjRW5kT2ZTdHJlYW0oV2ViS2l0TWVkaWFT
cmMqLCBjb25zdCBBdG9tU3RyaW5nJiBzdHJlYW1OYW1lKTsKKworYm9vbCB3ZWJLaXRNZWRpYVNy
Y0lzUmVhZHlGb3JNb3JlU2FtcGxlcyhXZWJLaXRNZWRpYVNyYyosIGNvbnN0IEF0b21TdHJpbmcm
IHN0cmVhbU5hbWUpOwordm9pZCB3ZWJLaXRNZWRpYVNyY05vdGlmeVdoZW5SZWFkeUZvck1vcmVT
YW1wbGVzKFdlYktpdE1lZGlhU3JjKiwgY29uc3QgQXRvbVN0cmluZyYgc3RyZWFtTmFtZSwgV2Vi
Q29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudCopOworCit2b2lkIHdlYktpdE1lZGlhU3Jj
Rmx1c2goV2ViS2l0TWVkaWFTcmMqLCBjb25zdCBBdG9tU3RyaW5nJiBzdHJlYW1OYW1lKTsKK3Zv
aWQgd2ViS2l0TWVkaWFTcmNTZWVrKFdlYktpdE1lZGlhU3JjKiwgZ3VpbnQ2NCBzdGFydFRpbWUs
IGRvdWJsZSByYXRlKTsKKworR19FTkRfREVDTFMKKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0
ZTw+IEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyogcHRy
KTsKK3RlbXBsYXRlPD4gV2ViS2l0TWVkaWFTcmMqIHJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdl
YktpdE1lZGlhU3JjKiBwdHIpOwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxXZWJLaXRNZWRp
YVNyYz4oV2ViS2l0TWVkaWFTcmMqIHB0cik7Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEdTVF9DSEVDS19WRVJTSU9OKDEsIDE2LCAwKQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykg
JiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVy
Q2hlY2tzLmNtYWtlCmluZGV4IDNhN2NlYzc1OGIxLi5iMmE1YTJmZTFjNSAxMDA2NDQKLS0tIGEv
U291cmNlL2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvR1N0
cmVhbWVyQ2hlY2tzLmNtYWtlCkBAIC0zNywxMCArMzcsNiBAQCBpZiAoRU5BQkxFX1ZJREVPIE9S
IEVOQUJMRV9XRUJfQVVESU8pCiAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0dTVFJF
QU1FUiBUUlVFKQogZW5kaWYgKCkKIAotaWYgKEVOQUJMRV9NRURJQV9TT1VSQ0UgQU5EIFBDX0dT
VFJFQU1FUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAiMS4xNiIpCi0gICAgbWVzc2FnZShGQVRBTF9F
UlJPUiAiR1N0cmVhbWVyIDEuMTYgaXMgbmVlZGVkIGZvciBFTkFCTEVfTUVESUFfU09VUkNFLiIp
Ci1lbmRpZiAoKQotCiBpZiAoRU5BQkxFX01FRElBX1NUUkVBTSBPUiBFTkFCTEVfV0VCX1JUQykK
ICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIFRSVUUpCiAgICAgU0VU
X0FORF9FWFBPU0VfVE9fQlVJTEQoV0VCUlRDX1dFQktJVF9CVUlMRCBUUlVFKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDRkN2M3MjA3Y2VmLi4z
OGQwMzJmOGJhMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE5LTA5LTEyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBDYW5ub3QgYnVpbGQgV2ViS2l0
R1RLIDIuMjYuMCB3aXRoIE1TRSBpbiBEZWJpYW4gc3RhYmxlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE2MDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGhlIGZpbGVuYW1lcyBhZnRlciBy
ZW5hbWVzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5Ogor
CiAyMDE5LTA5LTExICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgog
CiAgICAgICAgIFtXaW5dW01pbmlCcm93c2VyXSBTZWxlY3QgYWxsIHRleHQgaW4gdGhlIFVSTCBi
YXIgYnkgY2xpY2tpbmcgaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpp
bmRleCA5NDZjYTJmMGZlMC4uNDNkM2Q5NDhhZTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHkKQEAgLTIxOSw3ICsyMTksOSBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIg
PSBbCiAgICAgICAjIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIGNvbnRhaW5pbmcgdW5kZXJzY29y
ZXMuCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywg
J2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdWaWRlb1NpbmtHU3RyZWFtZXIuY3BwJyksCiAgICAg
ICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNz
JywgJ2dzdHJlYW1lcicsICdXZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwJyksCi0gICAgICBv
cy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywg
J2dzdHJlYW1lcicsICdtc2UnLCAnV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwJyksCisg
ICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBo
aWNzJywgJ2dzdHJlYW1lcicsICdtc2UnLCAnV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQbGF5
YmluMi5jcHAnKSwKKyAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxh
dGZvcm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywgJ21zZScsICdXZWJLaXRNZWRpYVNvdXJj
ZUdTdHJlYW1lclBsYXliaW4yUHJpdmF0ZS5oJyksCisgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJj
ZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdtc2Un
LCAnV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQbGF5YmluMy5jcHAnKSwKICAgICAgIG9zLnBh
dGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnYXVkaW8nLCAnZ3N0cmVh
bWVyJywgJ1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCcpLAogICAgICAgb3MucGF0
aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdtZWRpYXN0cmVhbScsICdn
c3RyZWFtZXInLCAnR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCcpLAogICAgICAgb3MucGF0
aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdtZWRpYXN0cmVhbScsICdn
c3RyZWFtZXInLCAnR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwJyksCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>