<?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>69515</bug_id>
          
          <creation_ts>2011-10-06 04:09:18 -0700</creation_ts>
          <short_desc>[Qt] Parallel imagedecoders</short_desc>
          <delta_ts>2012-06-14 02:45:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>71555</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zoltan Horvath">zoltan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hausmann</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kevin.simons</cc>
    
    <cc>kling</cc>
    
    <cc>loki</cc>
    
    <cc>skyul</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>479055</commentid>
    <comment_count>0</comment_count>
      <attachid>109942</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2011-10-06 04:09:18 -0700</bug_when>
    <thetext>Created attachment 109942
approach #1

Hey!

I made some investigations on how we can do imagedecoding on dedicated thread. I tried to use WebCore imagedecoders instead of current QImageDecoder implementation, because apparently it is the only way to a generic solution. 

I upload the patch for discussion and not for review, so please don&apos;t comment style issues and other violations. :)

About my current implementation:

* 1st I had to change to WebCore&apos;s imagedecoders, it was simple. QtWebKit is working well with WebCore&apos;s imagedecoders since both approach are using the same system libraries on my system.
* 2nd I had to change QPixmaps to QImages since unfortunately, QPixmap doesn&apos;t tolerate manipulating images from thread. (Unfortunately, this brings some performance loss, see below.)
* 3rd I added a dedicated worker thread with a queue for image decoding.
 * We&apos;re doing the imagedecoding in the mainthread until we have determined the size (w,h) of the image then we choose to work either in the mainthread or in the workerthread.
 * I tried to avoid copying the raw image data to the thread, but in this case I had to use locks (I didn&apos;t remove ReadWrite lock implementation from this patch, but it isn&apos;t used currently.) and it didn&apos;t show satisfying performance results. (e.g. mainthread had to wait for imgdecoding completion at a point)
 * In this patch I&apos;m copying the raw data to the thread (memory consumption :( ), so I can avoid locks, which leads to performance gain in some cases.
 * We can render images (what has been decoded by worker thread) only when the whole image is decoded, so WK with this patch won&apos;t show the part of the image until decoding is fully finished. (This is a limitation of decoderlibs e.g. JPEG, we can&apos;t access decoded data during decoding.)

* Note: the patch doesn&apos;t work for cases that trigger decoding from main thread in case of big images (width||height &gt; 2000px) e.g. drag and drop image with mouse
* Note: I chose 2000px for size limit, because I didn&apos;t measure performance gain for usual size (500px-100px) images.
* Note: I commented out GIF imagedecoding for the present.
* Note: WebCore.pri contains paths to my local png1.5.4 library because I had problems with png1.2 in threaded case.

Some numbers:

* Test case (goal to measure performance gain): 3 big (decoding on workerthread) and 3 small image (decoding on mainthread)
 * http://zoltan.sed.hu/WebKit/methanol_imgdecoder/sample/images.htm
 * Reference: avg 2770 ms +/-0.3% 
 * ThreadedImageDecoding: avg 1432 ms +/-4.4%
 * The results looks pretty cool!

* Test case (goal to measure overhead of the patch): simple Methanol run with 24 locally mirrored popular sites from Alexa top 100 (server: apache)
 * http://zoltan.sed.hu/WebKit/methanol_imgdecoder/fire.html?iter=1
 * Reference: avg 9180ms +/-3.3% 
 * Threaded: avg 12465ms +/-7.5%
 * In this case threaded version didn&apos;t run since Methanol doesn&apos;t contain big enough images.
 * The results looks woeful.
  * QPixmap -&gt; QImage change
  * Conversions 
  * Data copying
  * Other?

I just want to talk about my approach... What could we do to decrease the overhead of the patch? Does it make sense to use QImage? etc...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480970</commentid>
    <comment_count>1</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-10-10 08:35:49 -0700</bug_when>
    <thetext>Some thoughts and questions after a brief overview:
  - It is a serious limitation that we can only paint the image when it has been fully downloaded. We should discuss whether it is acceptable in a user experience point of view.
  - This approach needs to be generalized across ports. I guess every port has a thread-safe image format so it should be possible.
  - Do you think Qt5 has a way to make using QImage not so slow?
  - Do you think it would be possible to still use QPixmap for smaller images that are decoded on the main thread and QImage for the big ones?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481497</commentid>
    <comment_count>2</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2011-10-11 01:03:57 -0700</bug_when>
    <thetext>I measured the overhead of the patch with starting the testbrowser with &quot;-graphicssystem raster&quot; parameter, in this way the overhead is decreased to a negligible level, so the considerable overhead is coming from the QPixmap -&gt; QImage modification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481499</commentid>
    <comment_count>3</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2011-10-11 01:09:37 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt;   - Do you think it would be possible to still use QPixmap for smaller images that are decoded on the main thread and QImage for the big ones?

It&apos;s possible, we need to turn some functions to template functions or duplicate code. I wonder whether it is worth powder and shot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495367</commentid>
    <comment_count>4</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2011-11-03 05:11:01 -0700</bug_when>
    <thetext>Simon, what is your opinion about get rid of using QImageDecoder.* things and switch to WebCore&apos;s imagedecoders? Both use the same system libraries, and produce the same results on benchmarks. 

Is there any blocker (api, compatibility, etc...) to switch to the WebCore&apos;s imagedecoder implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512694</commentid>
    <comment_count>5</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2011-12-01 04:45:45 -0800</bug_when>
    <thetext>I have a bug for WebCore vs. QtImageDecoder comparison: bug #71555

I made some measurements with libjpeg-turbo, it&apos;s related a bit to this topic, so I share my results with you.
About libjpeg-turbo: http://libjpeg-turbo.virtualgl.org/
&quot;libjpeg-turbo is a derivative of libjpeg that uses SIMD instructions (MMX, SSE2, NEON) to accelerate baseline JPEG compression and decompression on x86, x86-64, and ARM systems. On such systems, libjpeg-turbo is generally 2-4x as fast as the unmodified version of libjpeg, all else being equal.&quot;

Sounds delicious :) Let&apos;s see the numbers:

PC: Intel(R) Core(TM)2 Duo CPUE6550@2.33GHz (2 cores)
Slackware 13.1 - 32bit, Qt4.8, r91038,

http://zoltan.sed.hu/WebKit/methanol_imgdecoder/fire.html?iter=1 
libjpeg-turbo (1.1.0): avg 14 339 ms (+/-4.8%) min: 13 195 ms max: 14 897 ms 
libjpeg (v8a): avg 22 423 ms (+/-7.1%) min: 20 926 ms max: 25 140 ms

libjpeg-turbo is 36.1% faster than libjpeg on my imgdecoder-specific benchmark.

Slackware 13.1 - 32bit, Qt4.8, r91038 
http://zoltan.sed.hu/WebKit/methanolx/fire.html?iter=1 
libjpeg-turbo (1.1.0): avg 8 055 ms (+/-15.5%) min: 6 572 ms max: 9 768 ms 
libjpeg (v8a): avg 8 946 ms (+/-11.7%) min: 7 455 ms max: 9 824 ms 

libjpeg-turbo is 10% faster than libjpeg on Methanol benchmark.

It may performs better with more than 2 cores. Impressive gain even on small pictures! What is your opinion guys?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560711</commentid>
    <comment_count>6</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-02-21 00:19:57 -0800</bug_when>
    <thetext>The current design delays decoding until painting, but your patch seems to decode an image as soon as all data is received. It means the new parallel image decoder eagerly decodes all the images even though many of them end up not being drawn to screen. Is this an acceptable change considering the performance gain?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560729</commentid>
    <comment_count>7</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-02-21 00:56:13 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; The current design delays decoding until painting, but your patch seems to decode an image as soon as all data is received. It means the new parallel image decoder eagerly decodes all the images even though many of them end up not being drawn to screen. Is this an acceptable change considering the performance gain?

I think this is not a blocker problem. The main problem is that with this approach we can&apos;t achieve satisfying performance gain. For big images this works perfectly, but for the usually used relatively small images it&apos;s too slow (you can&apos;t make decision about which image should be decoded first.), furthermore in case of user events (drag&amp;drop) you need a lots of extra copying. Monil Parmar was trying to implement this on gtk side, but he finished his examinations with the same result.

We can improve on the a library side I think. E.g. as I know chromium changed to libJPEG turbo last week. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560744</commentid>
    <comment_count>8</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-02-21 01:28:19 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I think this is not a blocker problem. The main problem is that with this approach we can&apos;t achieve satisfying performance gain. For big images this works perfectly, but for the usually used relatively small images it&apos;s too slow (you can&apos;t make decision about which image should be decoded first.), furthermore in case of user events (drag&amp;drop) you need a lots of extra copying. Monil Parmar was trying to implement this on gtk side, but he finished his examinations with the same result.

Yes, I agree. Hyung Song did the same experiment last November on WebKit SDL port and got the exact same result.

http://dev.dorothybrowser.com/?p=276

&gt; We can improve on the a library side I think. E.g. as I know chromium changed to libJPEG turbo last week. :)

It looks promising. Thanks for the information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571643</commentid>
    <comment_count>9</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-03-06 01:41:56 -0800</bug_when>
    <thetext>Based on my and others experiments we couldn&apos;t achieve improvement on common cases, so I close the bug as invalid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649006</commentid>
    <comment_count>10</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-06-14 02:45:51 -0700</bug_when>
    <thetext>*** Bug 40159 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109942</attachid>
            <date>2011-10-06 04:09:18 -0700</date>
            <delta_ts>2011-10-18 05:00:15 -0700</delta_ts>
            <desc>approach #1</desc>
            <filename>imgdecoders_10_06.patch</filename>
            <type>text/plain</type>
            <size>55557</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nUHJpbWl0aXZl
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgKb2xk
IG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA4MzFhOTllLi4zNjZhMmRiCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oCkBAIC01Miw2ICs1
Miw3IEBACiAjaW5jbHVkZSA8cWdsb2JhbC5oPgogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBR
TXV0ZXg7CitjbGFzcyBRUmVhZFdyaXRlTG9jazsKIGNsYXNzIFFXYWl0Q29uZGl0aW9uOwogUVRf
RU5EX05BTUVTUEFDRQogI2VuZGlmCkBAIC03Miw3ICs3Myw3IEBAIHR5cGVkZWYgdm9pZCogUGxh
dGZvcm1SZWFkV3JpdGVMb2NrOyAvLyBGSVhNRTogSW1wbGVtZW50LgogdHlwZWRlZiBHT3duUHRy
PEdDb25kPiBQbGF0Zm9ybUNvbmRpdGlvbjsKICNlbGlmIFBMQVRGT1JNKFFUKQogdHlwZWRlZiBR
VF9QUkVQRU5EX05BTUVTUEFDRShRTXV0ZXgpKiBQbGF0Zm9ybU11dGV4OwotdHlwZWRlZiB2b2lk
KiBQbGF0Zm9ybVJlYWRXcml0ZUxvY2s7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit0eXBlZGVmIFFU
X1BSRVBFTkRfTkFNRVNQQUNFKFFSZWFkV3JpdGVMb2NrKSogUGxhdGZvcm1SZWFkV3JpdGVMb2Nr
OwogdHlwZWRlZiBRVF9QUkVQRU5EX05BTUVTUEFDRShRV2FpdENvbmRpdGlvbikqIFBsYXRmb3Jt
Q29uZGl0aW9uOwogI2VsaWYgT1MoV0lORE9XUykKIHN0cnVjdCBQbGF0Zm9ybU11dGV4IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvcXQvVGhyZWFkaW5nUXQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9xdC9UaHJlYWRpbmdRdC5jcHAKb2xkIG1vZGUgMTAw
NjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA4MDQxZGVhLi45ZmE2ZTlhCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvcXQvVGhyZWFkaW5nUXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvcXQvVGhyZWFkaW5nUXQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVk
ZSA8UUNvcmVBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRTXV0ZXg+CiAjaW5jbHVkZSA8UVRocmVh
ZD4KKyNpbmNsdWRlIDxRUmVhZFdyaXRlTG9jaz4KICNpbmNsdWRlIDxRV2FpdENvbmRpdGlvbj4K
IAogbmFtZXNwYWNlIFdURiB7CkBAIC0yODEsNiArMjgyLDQ1IEBAIHZvaWQgVGhyZWFkQ29uZGl0
aW9uOjpicm9hZGNhc3QoKQogICAgIG1fY29uZGl0aW9uLT53YWtlQWxsKCk7CiB9CiAKKworUmVh
ZFdyaXRlTG9jazo6UmVhZFdyaXRlTG9jaygpCisgICAgOiBtX3JlYWRXcml0ZUxvY2sobmV3IFFS
ZWFkV3JpdGVMb2NrKCkpCit7Cit9CisKK1JlYWRXcml0ZUxvY2s6On5SZWFkV3JpdGVMb2NrKCkK
K3sKKyAgICBkZWxldGUgbV9yZWFkV3JpdGVMb2NrOworfQorCit2b2lkIFJlYWRXcml0ZUxvY2s6
OnJlYWRMb2NrKCkKK3sKKyAgICBtX3JlYWRXcml0ZUxvY2stPmxvY2tGb3JSZWFkKCk7Cit9CisK
K2Jvb2wgUmVhZFdyaXRlTG9jazo6dHJ5UmVhZExvY2soKQoreworICAgIHJldHVybiBtX3JlYWRX
cml0ZUxvY2stPnRyeUxvY2tGb3JSZWFkKCk7Cit9CisKK3ZvaWQgUmVhZFdyaXRlTG9jazo6d3Jp
dGVMb2NrKCkKK3sKKyAgICBtX3JlYWRXcml0ZUxvY2stPmxvY2tGb3JXcml0ZSgpOworfQorCisK
K2Jvb2wgUmVhZFdyaXRlTG9jazo6dHJ5V3JpdGVMb2NrKCkKK3sKKyAgICByZXR1cm4gbV9yZWFk
V3JpdGVMb2NrLT50cnlMb2NrRm9yV3JpdGUoKTsKK30KKworCit2b2lkIFJlYWRXcml0ZUxvY2s6
OnVubG9jaygpCit7CisgICAgbV9yZWFkV3JpdGVMb2NrLT51bmxvY2soKTsKK30KKworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpbmNsdWRlICJUaHJlYWRpbmdRdC5tb2MiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJpCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNzkwMGZjMC4uNGJkYjI5
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnByaQpAQCAtOTUsNiArOTUsMTIgQEAgV0VCQ09SRV9JTkNMVURFUEFUSCA9IFwKICAg
ICAkJFNPVVJDRV9ESVIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAgXAogICAgICQk
U09VUkNFX0RJUi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMgXAogICAgICQk
U09VUkNFX0RJUi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzIFwKKyAgICAkJFNPVVJD
RV9ESVIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAgXAorICAgICQkU09VUkNF
X0RJUi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZiBcCisgICAgJCRTT1VSQ0Vf
RElSL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvIFwKKyAgICAkJFNPVVJDRV9E
SVIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnIFwKKyAgICAkJFNPVVJDRV9E
SVIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcgXAorICAgICQkU09VUkNFX0RJ
Ui9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAgXAogICAgICQkU09VUkNFX0RJ
Ui9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIgXAogICAgICQkU09VUkNFX0RJUi9XZWJDb3JlL3Bs
YXRmb3JtL21vY2sgXAogICAgICQkU09VUkNFX0RJUi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsg
XApAQCAtMjg0LDYgKzI5MCwxMyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkg
ewogICAgIFFUICo9IG9wZW5nbAogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfUVRfSU1B
R0VfREVDT0RFUj0wKSB7CisgIyAgIFBLR0NPTkZJRyArPSBsaWJwbmcxMgorICAgIElOQ0xVREVQ
QVRIICs9IC9ob21lL3pob3J2YXRoL2xpYnBuZy0xLjUuNF9pbnN0YWxsZWQvaW5jbHVkZS8KKyAg
ICBMSUJTICs9IC1MLy9ob21lL3pob3J2YXRoL2xpYnBuZy0xLjUuNF9pbnN0YWxsZWQvbGliLyAt
bHBuZzE1CisgICAgTElCUyArPSAtbGpwZWcKK30KKwogY29udGFpbnMoQ09ORklHLCB0ZXhtYXAp
IHsKICAgICBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVI9MQogICAgICFzeW1iaWFu
OiF3aW4zMi0qOmNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCm9sZCBt
b2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNjZiNDhlNy4uNTExOTFiMgotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
bwpAQCAtODU0LDYgKzg1NCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGxvYWRlci9jYWNoZS9DYWNo
ZWRDU1NTdHlsZVNoZWV0LmNwcCBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwIFwK
ICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwIFwKKyAgICBsb2FkZXIvY2FjaGUvSW1h
Z2VEZWNvZGluZ1RocmVhZC5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlci5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5j
cHAgXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwIFwKQEAgLTk3
NCw3ICs5NzUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9GaWxlU3RyZWFtLmNwcCBc
CiAgICAgcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAgXAogICAgIHBsYXRmb3JtL0dlb2xvY2F0aW9u
U2VydmljZS5jcHAgXAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVR
dC5jcHAgXAorICAgICNwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9JbWFnZUZyYW1lUXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3BwIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhbWlseS5jcHAgXApAQCAtMTgxOSw2ICsxODIwLDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuaCBcCiAgICAgbG9hZGVyL2NhY2hl
L0NhY2hlZEZvbnQuaCBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmggXAorICAgIGxv
YWRlci9jYWNoZS9JbWFnZURlY29kaW5nVGhyZWFkLmggXAogICAgIGxvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuaCBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmggXApAQCAtMTk5
NSw3ICsxOTk3LDYgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVy
bi5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggXAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0
aWxsSW1hZ2VRdC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc3BhcmVuY3lMYXll
ci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oIFwKQEAgLTI1
MzUsNyArMjUzNiw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSWNvblF0LmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAgXAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ludFBvaW50
UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbnRSZWN0UXQuY3BwIFwKQEAgLTI2
MTAsNiArMjYxMCwzNiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU01PT1RIX1NDUk9MTElO
Rz0xKSB7CiAgICAgfQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfUVRfSU1BR0VfREVD
T0RFUj0xKTogeworSEVBREVSUyArPVwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURl
Y29kZXJRdC5oCit9IGVsc2U6IHsKK0hFQURFUlMgKz1cCisgICAgcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmggXAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9C
TVBJbWFnZURlY29kZXIuaCBcCisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlUmVhZGVyLmggXAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURl
Y29kZXIuaCBcCisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmhcCisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oIFwK
KyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaCBcCisg
ICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCit9CisKK2Nv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9RVF9JTUFHRV9ERUNPREVSPTEpOiB7CitTT1VSQ0VTICs9
XAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcAorfSBlbHNlOiB7
CitTT1VSQ0VTICs9XAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5j
cHAgXAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3Bw
IFwKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIFwK
KyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBcCisg
ICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcFwKKyAgICBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcCBcCisgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBcCisgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKK30KKwogd2luMzIt
Knx3aW5jZSogewogICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uaAogICAg
IFNPVVJDRVMgKz0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3Bp
eG1hcHJ1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRp
bWUuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYmUwY2QyOC4uZWIy
NThmYwotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCkBAIC0z
NzAsNyArMzcwLDkgQEAgUVZhcmlhbnQgUXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmpl
Y3QoSlNPYmplY3QqIG9iamVjdCwgUU1ldGFUeXBlOjpUeXBlIGgKICAgICAgICAgaWYgKCFpbWFn
ZSkKICAgICAgICAgICAgIGdvdG8gcmV0dXJuRW1wdHlWYXJpYW50OwogCi0gICAgICAgIFFQaXht
YXAqIHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAg
ICBRUGl4bWFwIHBpeG1hcF9xID0gUVBpeG1hcDo6ZnJvbUltYWdlKCooaW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lX3FpbWFnZSgpKSk7CisgICAgICAgIFFQaXhtYXAqIHBpeG1hcCA9
IG5ldyBRUGl4bWFwKHBpeG1hcF9xKTsKKwogICAgICAgICBpZiAoIXBpeG1hcCkKICAgICAgICAg
ICAgIGdvdG8gcmV0dXJuRW1wdHlWYXJpYW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9mZWF0dXJlcy5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9mZWF0dXJlcy5wcmkKaW5kZXggZjBiZmE2
NS4uYWEyNmY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmVhdHVyZXMucHJpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2ZlYXR1cmVzLnByaQpAQCAtMTMsNiArMTMsOSBAQCBtZWVnb3RvdWNo
IHsKICAgICBERUZJTkVTICs9IFdURl9VU0VfTUVFR09UT1VDSD0xCiB9CiAKK0RFRklORVMgKz0g
RU5BQkxFX1FUX0lNQUdFX0RFQ09ERVI9MAorREVGSU5FUyArPSBXVEZfVVNFX1dFQktJVF9JTUFH
RV9ERUNPREVSUz0xCisKICMjIGxvYWQgbW9iaWxpdHljb25maWcgaWYgbW9iaWxpdHkgaXMgYXZh
aWxhYmxlCiBsb2FkKG1vYmlsaXR5Y29uZmlnLCB0cnVlKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1
CmluZGV4IGJiZGQ2ZjAuLmMwNjJjYzgKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
SW1hZ2UuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXIuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdUaHJlYWQu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgpAQCAtNTksNiArNjAsOSBAQCBDYWNoZWRJbWFn
ZTo6Q2FjaGVkSW1hZ2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCiAg
ICAgLCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UodHJ1ZSkKIHsKICAgICBzZXRTdGF0dXMoVW5r
bm93bik7CisgICAgbV9zaXplQXZhaWxhYmxlX3ggPSBmYWxzZTsKKyAgICBtX2RlY29kZVJlYWR5
ID0gZmFsc2U7CisgICAgbV9kZWNvZGVPblRocmVhZCA9IGZhbHNlOwogfQogCiBDYWNoZWRJbWFn
ZTo6Q2FjaGVkSW1hZ2UoSW1hZ2UqIGltYWdlKQpAQCAtNjksNiArNzMsOSBAQCBDYWNoZWRJbWFn
ZTo6Q2FjaGVkSW1hZ2UoSW1hZ2UqIGltYWdlKQogewogICAgIHNldFN0YXR1cyhDYWNoZWQpOwog
ICAgIHNldExvYWRpbmcoZmFsc2UpOworICAgIG1fc2l6ZUF2YWlsYWJsZV94ID0gZmFsc2U7Cisg
ICAgbV9kZWNvZGVSZWFkeSA9IGZhbHNlOworICAgIG1fZGVjb2RlT25UaHJlYWQgPSBmYWxzZTsK
IH0KIAogQ2FjaGVkSW1hZ2U6On5DYWNoZWRJbWFnZSgpCkBAIC0yMTksNiArMjI2LDE0IEBAIHZv
aWQgQ2FjaGVkSW1hZ2U6Om5vdGlmeU9ic2VydmVycyhjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0
KQogICAgICAgICBjLT5pbWFnZUNoYW5nZWQodGhpcywgY2hhbmdlUmVjdCk7CiB9CiAKK3ZvaWQg
Q2FjaGVkSW1hZ2U6OnNfbm90aWZ5T2JzZXJ2ZXJzKHZvaWQqIGltYWdlKQoreworICAgIENhY2hl
ZEltYWdlKiBjYWNoZWRJbWFnZSA9IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4oaW1hZ2UpOwor
ICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcoY2FjaGVkSW1hZ2UtPm1fY2xpZW50cyk7
CisgICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAg
IGMtPmltYWdlQ2hhbmdlZChjYWNoZWRJbWFnZSwgMCk7Cit9CisKIHZvaWQgQ2FjaGVkSW1hZ2U6
OmNoZWNrU2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9y
ZXF1ZXN0ID8gbV9yZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5mcmFtZSgpIDogMDsK
QEAgLTI3MCwxOCArMjg1LDI2IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmRhdGEoUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogCiAgICAgY3JlYXRlSW1h
Z2UoKTsKIAotICAgIGJvb2wgc2l6ZUF2YWlsYWJsZSA9IGZhbHNlOworICAgIC8vYm9vbCBzaXpl
QXZhaWxhYmxlID0gZmFsc2U7CisgICAgLy9zaXplQXZhaWxhYmxlID0gbV9pbWFnZS0+c2V0RGF0
YV94KG1fZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIAotICAgIC8vIEhhdmUgdGhlIGltYWdlIHVw
ZGF0ZSBpdHMgZGF0YSBmcm9tIGl0cyBpbnRlcm5hbCBidWZmZXIuCi0gICAgLy8gSXQgd2lsbCBu
b3QgZG8gYW55dGhpbmcgbm93LCBidXQgd2lsbCBkZWxheSBkZWNvZGluZyB1bnRpbCAKLSAgICAv
LyBxdWVyaWVkIGZvciBpbmZvIChsaWtlIHNpemUgb3Igc3BlY2lmaWMgaW1hZ2UgZnJhbWVzKS4K
LSAgICBzaXplQXZhaWxhYmxlID0gbV9pbWFnZS0+c2V0RGF0YShtX2RhdGEsIGFsbERhdGFSZWNl
aXZlZCk7CisgICAgaWYgKCFtX2RlY29kZU9uVGhyZWFkKQorICAgICAgICBtX3NpemVBdmFpbGFi
bGVfeCA9IG1faW1hZ2UtPnNldERhdGEobV9kYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIGVs
c2UKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1RocmVhZDo6aW5zdGFuY2UoKS0+cHJvY2Vzc0RlY29k
ZU9uVGhyZWFkKHRoaXMsIG1fZGF0YS0+Y29weSgpLCBhbGxEYXRhUmVjZWl2ZWQpOwogCi0gICAg
Ly8gR28gYWhlYWQgYW5kIHRlbGwgb3VyIG9ic2VydmVycyB0byB0cnkgdG8gZHJhdyBpZiB3ZSBo
YXZlIGVpdGhlcgotICAgIC8vIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSBvciB0aGUgc2l6ZSBpcyBr
bm93bi4gIEVhY2ggY2h1bmsgZnJvbSB0aGUKKyAgICAvLyBUaGVyZSBhcmUgc21hbGwgaW1hZ2Vz
IGFuZCB0aGVyZSBhcmUgYmlnIGltYWdlcworICAgIGlmIChtX3NpemVBdmFpbGFibGVfeCkKKyAg
ICAgICAgaWYgKGltYWdlKCktPnJlY3QoKS53aWR0aCgpID4gMjAwMCB8fCBpbWFnZSgpLT5yZWN0
KCkuaGVpZ2h0KCkgPiAyMDAwKQorICAgICAgICAgICAgbV9kZWNvZGVPblRocmVhZCA9IHRydWU7
CisKKyAgICAvLyBHbyBhaGVhZCBhbmQgdGVsbCBvdXIgb2JzZXJ2ZXJzIHRvIHRyeSB0byBkcmF3
IGlmIHdlIGhhdmUgLyplaXRoZXIqLworICAgIC8vIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSAvKm9y
IHRoZSBzaXplIGlzIGtub3duKi8uICBFYWNoIGNodW5rIGZyb20gdGhlCiAgICAgLy8gbmV0d29y
ayBjYXVzZXMgb2JzZXJ2ZXJzIHRvIHJlcGFpbnQsIHdoaWNoIHdpbGwgZm9yY2UgdGhhdCBjaHVu
awogICAgIC8vIHRvIGRlY29kZS4KLSAgICBpZiAoc2l6ZUF2YWlsYWJsZSB8fCBhbGxEYXRhUmVj
ZWl2ZWQpIHsKKworCisgICAgaWYgKChtX3NpemVBdmFpbGFibGVfeCAmJiAhbV9kZWNvZGVPblRo
cmVhZCkgfHwgYWxsRGF0YVJlY2VpdmVkKSB7CiAgICAgICAgIHNpemVfdCBtYXhEZWNvZGVkSW1h
Z2VTaXplID0gbWF4aW11bURlY29kZWRJbWFnZVNpemUoKTsKICAgICAgICAgSW50U2l6ZSBzID0g
aW1hZ2VTaXplKDEuMGYpOwogICAgICAgICBzaXplX3QgZXN0aW1hdGVkRGVjb2RlZEltYWdlU2l6
ZSA9IHMud2lkdGgoKSAqIHMuaGVpZ2h0KCkgKiA0OyAvLyBubyBvdmVyZmxvdyBjaGVjawpAQCAt
Mjk0LDcgKzMxNywxMSBAQCB2b2lkIENhY2hlZEltYWdlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAgICAgCiAgICAgICAgIC8v
IEl0IHdvdWxkIGJlIG5pY2UgdG8gb25seSByZWRyYXcgdGhlIGRlY29kZWQgYmFuZCBvZiB0aGUg
aW1hZ2UsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IGRlc2lnbgogICAgICAgICAvLyAoZGVjb2Rpbmcg
ZGVsYXllZCB1bnRpbCBwYWludGluZykgdGhhdCBzZWVtcyBoYXJkLgorICAgICAgICBpZiAoIW1f
ZGVjb2RlT25UaHJlYWQpIHsKKyAgICAgICAgICAgIG1fZGVjb2RlUmVhZHkgPSB0cnVlOwogICAg
ICAgICBub3RpZnlPYnNlcnZlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAvL2ltYWdlKCktPmlt
YWdlT2JzZXJ2ZXIoKS0+Y2hhbmdlZEluUmVjdChpbWFnZSgpLCBpbWFnZSgpLT5yZWN0KCkpOwog
CiAgICAgICAgIGlmIChtX2ltYWdlKQogICAgICAgICAgICAgc2V0RW5jb2RlZFNpemUobV9pbWFn
ZS0+ZGF0YSgpID8gbV9pbWFnZS0+ZGF0YSgpLT5zaXplKCkgOiAwKTsKQEAgLTMyMCw4ICszNDcs
MTAgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyBzdGF0
dXMpCiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCiB7CisgICAgaWYg
KG1fZGVjb2RlT25UaHJlYWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdUaHJlYWQ6Omluc3RhbmNl
KCktPm1fZG9Ob3REZWNvZGUuYWRkKHRoaXMpOwogICAgIGJvb2wgY2FuRGVsZXRlSW1hZ2UgPSAh
bV9pbWFnZSB8fCAobV9pbWFnZS0+aGFzT25lUmVmKCkgJiYgbV9pbWFnZS0+aXNCaXRtYXBJbWFn
ZSgpKTsKLSAgICBpZiAoaXNTYWZlVG9NYWtlUHVyZ2VhYmxlKCkgJiYgY2FuRGVsZXRlSW1hZ2Ug
JiYgIWlzTG9hZGluZygpKSB7CisgICAgaWYgKGlzU2FmZVRvTWFrZVB1cmdlYWJsZSgpICYmIGNh
bkRlbGV0ZUltYWdlICYmICFpc0xvYWRpbmcoKSAmJiBtX2RlY29kZVJlYWR5KSB7CiAgICAgICAg
IC8vIEltYWdlIHJlZnMgdGhlIGRhdGEgYnVmZmVyIHNvIHdlIHNob3VsZCBub3QgbWFrZSBpdCBw
dXJnZWFibGUgd2hpbGUgdGhlIGltYWdlIGlzIGFsaXZlLiAKICAgICAgICAgLy8gSW52b2tpbmcg
YWRkQ2xpZW50KCkgd2lsbCByZWNvbnN0cnVjdCB0aGUgaW1hZ2Ugb2JqZWN0LgogICAgICAgICBt
X2ltYWdlID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKb2xk
IG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyOTFjMjRlLi5iNzUxMjU4Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCkBAIC0yNywxNSArMjcsMTggQEAKICNp
bmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkUmVz
b3VyY2VMb2FkZXI7CitjbGFzcyBJbWFnZURlY29kaW5nVGhyZWFkOwogY2xhc3MgTWVtb3J5Q2Fj
aGU7CiAKIGNsYXNzIENhY2hlZEltYWdlIDogcHVibGljIENhY2hlZFJlc291cmNlLCBwdWJsaWMg
SW1hZ2VPYnNlcnZlciB7CiAgICAgZnJpZW5kIGNsYXNzIE1lbW9yeUNhY2hlOworICAgIGZyaWVu
ZCBjbGFzcyBJbWFnZURlY29kaW5nVGhyZWFkOwogCiBwdWJsaWM6CiAgICAgQ2FjaGVkSW1hZ2Uo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CkBAIC04NiwxNiArODksMjIgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRpb25BZHZhbmNlZChjb25zdCBJbWFnZSopOwogICAgIHZpcnR1
YWwgdm9pZCBjaGFuZ2VkSW5SZWN0KGNvbnN0IEltYWdlKiwgY29uc3QgSW50UmVjdCYpOwogCisg
ICBib29sIG1fc2l6ZUF2YWlsYWJsZV94OworICAgYm9vbCBtX2RlY29kZVJlYWR5OworICAgYm9v
bCBtX2RlY29kZU9uVGhyZWFkOworCiBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlSW1hZ2UoKTsK
ICAgICBzaXplX3QgbWF4aW11bURlY29kZWRJbWFnZVNpemUoKTsKICAgICAvLyBJZiBub3QgbnVs
bCwgY2hhbmdlUmVjdCBpcyB0aGUgY2hhbmdlZCBwYXJ0IG9mIHRoZSBpbWFnZS4KICAgICB2b2lk
IG5vdGlmeU9ic2VydmVycyhjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0ID0gMCk7CisgICAgc3Rh
dGljIHZvaWQgc19ub3RpZnlPYnNlcnZlcnModm9pZCopOwogICAgIHZvaWQgZGVjb2RlZERhdGFE
ZWxldGlvblRpbWVyRmlyZWQoVGltZXI8Q2FjaGVkSW1hZ2U+Kik7CiAgICAgdmlydHVhbCBQdXJn
ZVByaW9yaXR5IHB1cmdlUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBQdXJnZUZpcnN0OyB9CiAg
ICAgdm9pZCBjaGVja1Nob3VsZFBhaW50QnJva2VuSW1hZ2UoKTsKLQorcHVibGljOgogICAgIFJl
ZlB0cjxJbWFnZT4gbV9pbWFnZTsKK3ByaXZhdGU6CiAgICAgVGltZXI8Q2FjaGVkSW1hZ2U+IG1f
ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyOwogICAgIGJvb2wgbV9zaG91bGRQYWludEJyb2tlbklt
YWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
Y3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZTZjMGQ3NC4uZjQwZDQ3
YwotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKQEAgLTMz
MCw4ICszMzAsOSBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpyZW1vdmVDbGllbnQoQ2FjaGVkUmVz
b3VyY2VDbGllbnQqIGNsaWVudCkKIAogdm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGVsZXRlSWZQb3Nz
aWJsZSgpCiB7Ci0gICAgaWYgKGNhbkRlbGV0ZSgpICYmICFpbkNhY2hlKCkpCi0gICAgICAgIGRl
bGV0ZSB0aGlzOworLy8gRklYTUU6IHByb2JsZW1zIGluIHRocmVhZGVkIGNhc2UKKy8vICAgIGlm
IChjYW5EZWxldGUoKSAmJiAhaW5DYWNoZSgpKQorLy8gICAgICAgIGRlbGV0ZSB0aGlzOwogfQog
ICAgIAogdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0RGVjb2RlZFNpemUodW5zaWduZWQgc2l6ZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5o
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKb2xkIG1vZGUg
MTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA5OWNmMzAzLi44ZjdkZjI5Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCkBAIC0yNDQsNyArMjQ0LDkgQEAgcHJv
dGVjdGVkOgogICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICBkb3VibGUgbV9y
ZXNwb25zZVRpbWVzdGFtcDsKIAorcHVibGljOgogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1f
ZGF0YTsKK3Byb3RlY3RlZDoKICAgICBPd25QdHI8UHVyZ2VhYmxlQnVmZmVyPiBtX3B1cmdlYWJs
ZURhdGE7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvSW1hZ2VEZWNvZGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
SW1hZ2VEZWNvZGluZ1RocmVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw
MC4uMDE2OTVhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9JbWFnZURlY29kaW5nVGhyZWFkLmNwcApAQCAtMCwwICsxLDg0IEBACisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hl
LmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkSW1hZ2U7CisKK0ltYWdl
RGVjb2RpbmdUaHJlYWQ6OkltYWdlRGVjb2RpbmdUaHJlYWQoKQoreworICAgIHN0YXJ0KCk7Cit9
CisKK0ltYWdlRGVjb2RpbmdUaHJlYWQqIEltYWdlRGVjb2RpbmdUaHJlYWQ6Omluc3RhbmNlKCkK
K3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChJbWFnZURlY29kaW5nVGhyZWFkLCBpbWFnZURlY29kaW5nVGhyZWFkLCAoKSk7CisKKyAg
ICByZXR1cm4gJmltYWdlRGVjb2RpbmdUaHJlYWQ7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1Ro
cmVhZDo6cnVuTG9vcCgpCit7CisgICAgd2hpbGUgKE93blB0cjxEZWNvZGVJbWFnZT4gZGVjb2Rl
SW1hZ2UgPSBtX2RlY29kZUltYWdlcy53YWl0Rm9yTWVzc2FnZSgpKSB7CisKKyAgICAgICAgaWYg
KCFkZWNvZGVJbWFnZS0+Y2FjaGVkSW1hZ2UpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBpZiAoIWRlY29kZUltYWdlLT5jYWNoZWRJbWFnZS0+bV9pbWFnZSkgeworICAgICAgICAg
ICAgZGVjb2RlSW1hZ2UtPmNhY2hlZEltYWdlLT5tX2RlY29kZVJlYWR5ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZG9Ob3REZWNvZGUu
Y29udGFpbnMoZGVjb2RlSW1hZ2UtPmNhY2hlZEltYWdlKSkgeworICAgICAgICAgICAgZGVjb2Rl
SW1hZ2UtPmNhY2hlZEltYWdlLT5tX2RlY29kZVJlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlm
IChkZWNvZGVJbWFnZS0+YWxsRGF0YVJlY2VpdmVkKQorICAgICAgICAgICAgICAgIG1fZG9Ob3RE
ZWNvZGUucmVtb3ZlKGRlY29kZUltYWdlLT5jYWNoZWRJbWFnZSk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZGVjb2RlSW1hZ2UtPmNhY2hlZEltYWdl
LT5tX3NpemVBdmFpbGFibGVfeCkKKyAgICAgICAgICAgIGRlY29kZUltYWdlLT5jYWNoZWRJbWFn
ZS0+bV9zaXplQXZhaWxhYmxlX3ggPSBkZWNvZGVJbWFnZS0+Y2FjaGVkSW1hZ2UtPmltYWdlKCkt
PnNldERhdGFfeChkZWNvZGVJbWFnZS0+ZGF0YSwgZGVjb2RlSW1hZ2UtPmFsbERhdGFSZWNlaXZl
ZCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVjb2RlSW1hZ2UtPmNhY2hlZEltYWdl
LT5tX3NpemVBdmFpbGFibGVfeCA9IGRlY29kZUltYWdlLT5jYWNoZWRJbWFnZS0+aW1hZ2UoKS0+
c2V0RGF0YV94KGRlY29kZUltYWdlLT5kYXRhLCBkZWNvZGVJbWFnZS0+YWxsRGF0YVJlY2VpdmVk
KTsKKyAgICAgICAgICAgIGRlY29kZUltYWdlLT5jYWNoZWRJbWFnZS0+aW1hZ2UoKS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWVfcWltYWdlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ZGVjb2RlSW1hZ2UtPmFsbERhdGFSZWNlaXZlZCkgeworICAgICAgICAgICAgV1RGOjpjYWxsT25N
YWluVGhyZWFkKENhY2hlZEltYWdlOjpzX25vdGlmeU9ic2VydmVycywgZGVjb2RlSW1hZ2UtPmNh
Y2hlZEltYWdlKTsKKyAgICAgICAgICAgIGRlY29kZUltYWdlLT5jYWNoZWRJbWFnZS0+bV9kZWNv
ZGVSZWFkeSA9IHRydWU7CisgICAgICAgICAgICBkZWNvZGVJbWFnZS0+Y2FjaGVkSW1hZ2UtPm1f
ZGF0YSA9IGRlY29kZUltYWdlLT5kYXRhOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkKiBp
bWFnZURlY29kaW5nVGhyZWFkKHZvaWQqIGltYWdlRGVjb2RpbmdUaHJlYWQpCit7CisgICAgSW1h
Z2VEZWNvZGluZ1RocmVhZCogdGhyZWFkID0gc3RhdGljX2Nhc3Q8SW1hZ2VEZWNvZGluZ1RocmVh
ZCo+KGltYWdlRGVjb2RpbmdUaHJlYWQpOworICAgIHRocmVhZC0+cnVuTG9vcCgpOworCisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1RocmVhZDo6c3RhcnQoKQoreworICAg
IFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBj
cmVhdGVUaHJlYWQoaW1hZ2VEZWNvZGluZ1RocmVhZCwgdGhpcywgIldlYkNvcmU6IEltYWdlIERl
Y29kZXIiKTsKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWQsICJjYW5ub3QgY3JlYXRlIGlt
YWdlIGRlY29kZXIgdGhyZWFkIik7CisgICAgaWYgKCFpZCkKKyAgICAgICAgQ1JBU0goKTsKK30K
Kwordm9pZCBJbWFnZURlY29kaW5nVGhyZWFkOjpwcm9jZXNzRGVjb2RlT25UaHJlYWQoQ2FjaGVk
SW1hZ2UqIGksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkLCBib29sIHMpCit7CisgICAgbV9k
ZWNvZGVJbWFnZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWNvZGVJbWFnZShpLCBkLCBzKSkpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvSW1hZ2VEZWNv
ZGluZ1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0ltYWdlRGVjb2RpbmdU
aHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YzRhNTgzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0ltYWdlRGVjb2RpbmdU
aHJlYWQuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIEltYWdlRGVjb2RpbmdUaHJlYWRfaAor
I2RlZmluZSBJbWFnZURlY29kaW5nVGhyZWFkX2gKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5j
bHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdHJ1Y3QgRGVjb2RlSW1hZ2UgeworICAgIERlY29kZUltYWdlKENhY2hlZElt
YWdlKiBpLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZCwgYm9vbCBhKQorICAgICAgICA6IGNh
Y2hlZEltYWdlKGkpCisgICAgICAgICwgZGF0YShkKQorICAgICAgICAsIGFsbERhdGFSZWNlaXZl
ZChhKQorICAgIHt9CisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlOworICAgIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhOworICAgIGJvb2wgYWxsRGF0YVJlY2VpdmVkOworfTsKKwor
Y2xhc3MgSW1hZ2VEZWNvZGluZ1RocmVhZAoreworcHVibGljOgorICAgIEltYWdlRGVjb2RpbmdU
aHJlYWQoKTsKKworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nVGhyZWFkKiBpbnN0YW5jZSgpOwor
ICAgIHZvaWQgcnVuTG9vcCgpOworICAgIHZvaWQgc3RhcnQoKTsKKworICAgIHZvaWQgcHJvY2Vz
c0RlY29kZU9uVGhyZWFkKENhY2hlZEltYWdlKiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNo
YXJlZEJ1ZmZlciwgYm9vbCk7CisKKyAgICBNZXNzYWdlUXVldWU8RGVjb2RlSW1hZ2U+IG1fZGVj
b2RlSW1hZ2VzOworICAgIEhhc2hTZXQ8Q2FjaGVkSW1hZ2UqPiBtX2RvTm90RGVjb2RlOworfTsK
KworfQorCisjZW5kaWYgLy8gSW1hZ2VEZWNvZGluZ1RocmVhZF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCmluZGV4IGFiZGRkMWIuLjlkZmE0YTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCkBAIC0zOSw3
ICszOSwxMSBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgogI2lmIFBMQVRG
T1JNKFFUKQorCisjaWYgRU5BQkxFKFFUX0lNQUdFX0RFQ09ERVIpCiAjaW5jbHVkZSA8cWltYWdl
cmVhZGVyLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHFpbWFnZXdyaXRlci5oPgogI2VuZGlmCiAK
QEAgLTIyOCw3ICsyMzIsNyBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZXMoKQogICAgIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzLT5yZW1vdmUoImFwcGxpY2F0
aW9uL3BkZiIpOwogICAgIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzLT5yZW1vdmUoImFwcGxpY2F0
aW9uL3Bvc3RzY3JpcHQiKTsKIAotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQTEFURk9STShR
VCkgJiYgRU5BQkxFKFFUX0lNQUdFX0RFQ09ERVIpCiAgICAgUUxpc3Q8UUJ5dGVBcnJheT4gZm9y
bWF0cyA9IFFJbWFnZVJlYWRlcjo6c3VwcG9ydGVkSW1hZ2VGb3JtYXRzKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGZvcm1hdHMuc2l6ZSgpKTsgKytp
KSB7CiAjaWYgRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4
IDdjZGI0M2QuLmRhNWI4ZTMKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcApAQCAtNDYsNyArNDYsOCBAQCBzdGF0aWMgaW50IGZyYW1lQnl0ZXMoY29u
c3QgSW50U2l6ZSYgZnJhbWVTaXplKQogQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKEltYWdlT2Jz
ZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCiAgICAgLCBtX2N1cnJlbnRG
cmFtZSgwKQotICAgICwgbV9mcmFtZXMoMCkKKyAgICAvLywgbV9mcmFtZXMoMCkKKyAgICAsIG1f
ZnJhbWVzX3FpbWFnZSgwKQogICAgICwgbV9mcmFtZVRpbWVyKDApCiAgICAgLCBtX3JlcGV0aXRp
b25Db3VudChjQW5pbWF0aW9uTm9uZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzKFVu
a25vd24pCkBAIC03NiwxNyArNzcsMTggQEAgQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCiB2
b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsKQogewog
ICAgIGludCBmcmFtZXNDbGVhcmVkID0gMDsKLSAgICBjb25zdCBzaXplX3QgY2xlYXJCZWZvcmVG
cmFtZSA9IGRlc3Ryb3lBbGwgPyBtX2ZyYW1lcy5zaXplKCkgOiBtX2N1cnJlbnRGcmFtZTsKKyAg
ICBjb25zdCBzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSA9IGRlc3Ryb3lBbGwgPyBtX2ZyYW1lc19x
aW1hZ2Uuc2l6ZSgpIDogbV9jdXJyZW50RnJhbWU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjbGVhckJlZm9yZUZyYW1lOyArK2kpIHsKICAgICAgICAgLy8gVGhlIHVuZGVybHlpbmcgZnJh
bWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3QgdHJ5aW5nIHRvCiAgICAgICAg
IC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVyIGRhdGEpLCBzbyB3ZSBkb24n
dCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0YS4KLSAgICAgICAgaWYgKG1f
ZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKKyAgICAgICAgaWYgKG1fZnJhbWVzX3FpbWFnZVtpXS5j
bGVhcl9xaW1hZ2UoZmFsc2UpKQogICAgICAgICAgICsrZnJhbWVzQ2xlYXJlZDsKICAgICB9CiAK
ICAgICBkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVzQ2xlYXJlZCk7CiAKKyAgICBpZiAo
bV9hbGxEYXRhUmVjZWl2ZWQpIC8vIEZJWE1FOiB3ZSBoYXZlIHRvIGRlc3Ryb3kgaXQgaW4gb3Ro
ZXIgY2FzZXMgYWxzbwogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lBbGwsIGNsZWFyQmVmb3Jl
RnJhbWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwogICAgIHJldHVybjsKIH0KQEAgLTk2
LDcgKzk4LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3Nh
cnkoYm9vbCBkZXN0cm95QWxsKQogICAgIC8vIEFuaW1hdGVkIGltYWdlcyA+NU1CIGFyZSBjb25z
aWRlcmVkIGxhcmdlIGVub3VnaCB0aGF0IHdlJ2xsIG9ubHkgaGFuZyBvbgogICAgIC8vIHRvIG9u
ZSBmcmFtZSBhdCBhIHRpbWUuCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNMYXJnZUFuaW1h
dGlvbkN1dG9mZiA9IDUyNDI4ODA7Ci0gICAgaWYgKG1fZnJhbWVzLnNpemUoKSAqIGZyYW1lQnl0
ZXMobV9zaXplKSA+IGNMYXJnZUFuaW1hdGlvbkN1dG9mZikKKyAgICBpZiAobV9mcmFtZXNfcWlt
YWdlLnNpemUoKSAqIGZyYW1lQnl0ZXMobV9zaXplKSA+IGNMYXJnZUFuaW1hdGlvbkN1dG9mZikK
ICAgICAgICAgZGVzdHJveURlY29kZWREYXRhKGRlc3Ryb3lBbGwpOwogfQogCkBAIC0xMTgsMjYg
KzEyMCw2MSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoaW50
IGZyYW1lc0NsZWFyZWQpCiAKIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGlu
ZGV4KQogewotICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CisgICAgQ1JBU0go
KTsgLy8gRklYTUU6IGp1c3QgdG8gYmUgc3VyZSB3ZSBkb24ndCBjYWxsIHRoaXMKKyAgICAvKnNp
emVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNTRVJUKG1fZGVjb2RlZFNpemUg
PT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKICAgICAKLSAgICBpZiAobV9mcmFtZXMuc2l6ZSgpIDwg
bnVtRnJhbWVzKQotICAgICAgICBtX2ZyYW1lcy5ncm93KG51bUZyYW1lcyk7CisgICAgaWYgKG1f
ZnJhbWVzLT5zaXplKCkgPCBudW1GcmFtZXMpCisgICAgICAgIG1fZnJhbWVzLT5ncm93KG51bUZy
YW1lcyk7CiAKLSAgICBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSA9IG1fc291cmNlLmNyZWF0ZUZy
YW1lQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKG51bUZyYW1lcyA9PSAxICYmIG1fZnJhbWVzW2lu
ZGV4XS5tX2ZyYW1lKQorICAgIG1fZnJhbWVzLT5hdChpbmRleCkubV9mcmFtZSA9IG1fc291cmNl
LmNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCk7CisgICAgaWYgKG51bUZyYW1lcyA9PSAxICYmIG1f
ZnJhbWVzLT5hdChpbmRleCkubV9mcmFtZSkKICAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7
CiAKLSAgICBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4
KGluZGV4KTsKKyAgICBtX2ZyYW1lcy0+YXQoaW5kZXgpLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsK
KyAgICBtX2ZyYW1lcy0+YXQoaW5kZXgpLm1faXNDb21wbGV0ZSA9IG1fc291cmNlLmZyYW1lSXND
b21wbGV0ZUF0SW5kZXgoaW5kZXgpOwogICAgIGlmIChyZXBldGl0aW9uQ291bnQoZmFsc2UpICE9
IGNBbmltYXRpb25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbiA9IG1f
c291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKLSAgICBtX2ZyYW1lc1tpbmRleF0u
bV9oYXNBbHBoYSA9IG1fc291cmNlLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKKyAgICAg
ICAgbV9mcmFtZXMtPmF0KGluZGV4KS5tX2R1cmF0aW9uID0gbV9zb3VyY2UuZnJhbWVEdXJhdGlv
bkF0SW5kZXgoaW5kZXgpOworICAgIG1fZnJhbWVzLT5hdChpbmRleCkubV9oYXNBbHBoYSA9IG1f
c291cmNlLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKIAogICAgIGNvbnN0IEludFNpemUg
ZnJhbWVTaXplKGluZGV4ID8gbV9zb3VyY2UuZnJhbWVTaXplQXRJbmRleChpbmRleCkgOiBtX3Np
emUpOwogICAgIGlmIChmcmFtZVNpemUgIT0gbV9zaXplKQogICAgICAgICBtX2hhc1VuaWZvcm1G
cmFtZVNpemUgPSBmYWxzZTsKLSAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpIHsKKyAg
ICBpZiAobV9mcmFtZXMtPmF0KGluZGV4KS5tX2ZyYW1lKSB7CisgICAgICAgIGludCBkZWx0YUJ5
dGVzID0gZnJhbWVCeXRlcyhmcmFtZVNpemUpOworICAgICAgICBtX2RlY29kZWRTaXplICs9IGRl
bHRhQnl0ZXM7CisgICAgICAgIC8vIFRoZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3Vt
ZSB0aGUgcGFydGlhbGx5IGRlY29kZWQgZGF0YSB1c2VkCisgICAgICAgIC8vIHRvIGRldGVybWlu
ZSBpbWFnZSBwcm9wZXJ0aWVzLgorICAgICAgICBkZWx0YUJ5dGVzIC09IG1fZGVjb2RlZFByb3Bl
cnRpZXNTaXplOworICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7CisgICAgICAg
IGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29k
ZWRTaXplQ2hhbmdlZCh0aGlzLCBkZWx0YUJ5dGVzKTsKKyAgICB9CisqLworfQorCit2b2lkIEJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lX3FpbWFnZShzaXplX3QgaW5kZXgpCit7CisgICAgc2l6ZV90
IG51bUZyYW1lcyA9IGZyYW1lQ291bnQoKTsKKyAgIC8vIEFTU0VSVChtX2RlY29kZWRTaXplID09
IDAgfHwgbnVtRnJhbWVzID4gMSk7CisKKyAgICBpZiAobV9mcmFtZXNfcWltYWdlLnNpemUoKSA8
IG51bUZyYW1lcykKKyAgICAgICAgbV9mcmFtZXNfcWltYWdlLmdyb3cobnVtRnJhbWVzKTsKKwor
ICAgIG1fZnJhbWVzX3FpbWFnZVtpbmRleF0ubV9mcmFtZSA9IG1fc291cmNlLmNyZWF0ZUZyYW1l
QXRJbmRleF9xaW1hZ2UoaW5kZXgpOworICAgIGlmIChudW1GcmFtZXMgPT0gMSAmJiBtX2ZyYW1l
c19xaW1hZ2VbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIGNoZWNrRm9yU29saWRDb2xvcl9xaW1h
Z2UoKTsKKworICAgIG1fZnJhbWVzX3FpbWFnZVtpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVl
OworICAgIG1fZnJhbWVzX3FpbWFnZVtpbmRleF0ubV9pc0NvbXBsZXRlID0gbV9zb3VyY2UuZnJh
bWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCk7CisgICAgaWYgKHJlcGV0aXRpb25Db3VudChmYWxz
ZSkgIT0gY0FuaW1hdGlvbk5vbmUpCisgICAgICAgIG1fZnJhbWVzX3FpbWFnZVtpbmRleF0ubV9k
dXJhdGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBtX2Zy
YW1lc19xaW1hZ2VbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJ
bmRleChpbmRleCk7CisKKyAgICBjb25zdCBJbnRTaXplIGZyYW1lU2l6ZShpbmRleCA/IG1fc291
cmNlLmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpIDogbV9zaXplKTsKKyAgICBpZiAoZnJhbWVTaXpl
ICE9IG1fc2l6ZSkKKyAgICAgICAgbV9oYXNVbmlmb3JtRnJhbWVTaXplID0gZmFsc2U7CisgICAg
aWYgKG1fZnJhbWVzX3FpbWFnZVtpbmRleF0ubV9mcmFtZSkgewogICAgICAgICBpbnQgZGVsdGFC
eXRlcyA9IGZyYW1lQnl0ZXMoZnJhbWVTaXplKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBk
ZWx0YUJ5dGVzOwogICAgICAgICAvLyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1
bWUgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGRhdGEgdXNlZApAQCAtMTk3LDcgKzIzNCwyOCBAQCBi
b29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKICAg
ICAvLyBCZWNhdXNlIHdlJ3JlIG1vZGlmeWluZyB0aGUgY3VycmVudCBmcmFtZSwgY2xlYXIgaXRz
IChub3cgcG9zc2libHkKICAgICAvLyBpbmFjY3VyYXRlKSBtZXRhZGF0YSBhcyB3ZWxsLgotICAg
IGRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeSgoIW1fZnJhbWVzLmlzRW1wdHkoKSAmJiBtX2ZyYW1l
c1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVhcih0cnVlKSkgPyAxIDogMCk7CisgICAgZGVzdHJv
eU1ldGFkYXRhQW5kTm90aWZ5KCghbV9mcmFtZXNfcWltYWdlLmlzRW1wdHkoKSAmJiBtX2ZyYW1l
c19xaW1hZ2UuYXQobV9mcmFtZXNfcWltYWdlLnNpemUoKSAtIDEpLmNsZWFyX3FpbWFnZSh0cnVl
KSkgPyAxIDogMCk7CisgICAgCisgICAgLy8gRmVlZCBhbGwgdGhlIGRhdGEgd2UndmUgc2VlbiBz
byBmYXIgdG8gdGhlIGltYWdlIGRlY29kZXIuCisgICAgbV9hbGxEYXRhUmVjZWl2ZWQgPSBhbGxE
YXRhUmVjZWl2ZWQ7CisgICAgbV9zb3VyY2Uuc2V0RGF0YShkYXRhKCksIGFsbERhdGFSZWNlaXZl
ZCk7CisgICAgCisgICAgLy8gQ2xlYXIgdGhlIGZyYW1lIGNvdW50LgorICAgIG1faGF2ZUZyYW1l
Q291bnQgPSBmYWxzZTsKKworICAgIG1faGFzVW5pZm9ybUZyYW1lU2l6ZSA9IHRydWU7CisKKyAg
ICAvLyBJbWFnZSBwcm9wZXJ0aWVzIHdpbGwgbm90IGJlIGF2YWlsYWJsZSB1bnRpbCB0aGUgZmly
c3QgZnJhbWUgb2YgdGhlIGZpbGUKKyAgICAvLyByZWFjaGVzIGtDR0ltYWdlU3RhdHVzSW5jb21w
bGV0ZS4KKyAgICByZXR1cm4gaXNTaXplQXZhaWxhYmxlKCk7Cit9CisKK2Jvb2wgQml0bWFwSW1h
Z2U6OmRhdGFDaGFuZ2VkX3goYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7ICAKKyAgICAvLyBCZWNh
dXNlIHdlJ3JlIG1vZGlmeWluZyB0aGUgY3VycmVudCBmcmFtZSwgY2xlYXIgaXRzIChub3cgcG9z
c2libHkKKyAgICAvLyBpbmFjY3VyYXRlKSBtZXRhZGF0YSBhcyB3ZWxsLgorICAgIC8vIEZJWE1F
OiB3ZSBkb24ndCBuZWVkIHRoaXMgbm93CisgICAgLy9kZXN0cm95TWV0YWRhdGFBbmROb3RpZnko
KCFtX2ZyYW1lc19xaW1hZ2UuaXNFbXB0eSgpICYmIG1fZnJhbWVzX3FpbWFnZVttX2ZyYW1lc19x
aW1hZ2Uuc2l6ZSgpIC0gMV0uY2xlYXJfcWltYWdlKHRydWUpKSA/IDEgOiAwKTsKICAgICAKICAg
ICAvLyBGZWVkIGFsbCB0aGUgZGF0YSB3ZSd2ZSBzZWVuIHNvIGZhciB0byB0aGUgaW1hZ2UgZGVj
b2Rlci4KICAgICBtX2FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKQEAgLTI0MSwx
MyArMjk5LDI3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWlsYWJsZSgpCiAKIE5hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAg
IGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCisvKiAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3Vu
dCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXpl
KCkgfHwgIW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQorICAgIGlmIChpbmRleCA+PSBtX2ZyYW1l
cy0+c2l6ZSgpIHx8ICFtX2ZyYW1lcy0+YXQoaW5kZXgpLm1fZnJhbWUpCiAgICAgICAgIGNhY2hl
RnJhbWUoaW5kZXgpOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lOworICAg
IHJldHVybiBtX2ZyYW1lcy0+YXQoaW5kZXgpLm1fZnJhbWU7CisqLworICAgIENSQVNIKCk7IC8v
IEZJWE1FOiB3ZSBuZWVkIHFpbWFnZWQgdmVyc2lvbiBub3cKKyAgICByZXR1cm4gbmV3IFFQaXht
YXA7Cit9CisKK1FJbWFnZSogQml0bWFwSW1hZ2U6OmZyYW1lQXRJbmRleF9xaW1hZ2Uoc2l6ZV90
IGluZGV4KQoreworICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzX3FpbWFnZS5zaXplKCkgfHwgIW1fZnJh
bWVzX3FpbWFnZS5hdChpbmRleCkubV9mcmFtZSkKKyAgICAgICAgY2FjaGVGcmFtZV9xaW1hZ2Uo
aW5kZXgpOworCisgICAgcmV0dXJuIG1fZnJhbWVzX3FpbWFnZVtpbmRleF0ubV9mcmFtZTsKIH0K
IAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgp
CkBAIC0yNTUsMTAgKzMyNywxMCBAQCBib29sIEJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVB
dEluZGV4KHNpemVfdCBpbmRleCkKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwg
IW1fZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0YSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRl
eCk7CisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzX3FpbWFnZS5zaXplKCkgfHwgIW1fZnJhbWVz
X3FpbWFnZVtpbmRleF0ubV9oYXZlTWV0YWRhdGEpCisgICAgICAgIGNhY2hlRnJhbWVfcWltYWdl
KGluZGV4KTsKIAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlOworICAg
IHJldHVybiBtX2ZyYW1lc19xaW1hZ2VbaW5kZXhdLm1faXNDb21wbGV0ZTsKIH0KIAogZmxvYXQg
Qml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKQEAgLTI2Niwx
MCArMzM4LDEwIEBAIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXpl
X3QgaW5kZXgpCiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRl
eF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAgIGNhY2hlRnJhbWUoaW5kZXgpOworICAgIGlmIChp
bmRleCA+PSBtX2ZyYW1lc19xaW1hZ2Uuc2l6ZSgpIHx8ICFtX2ZyYW1lc19xaW1hZ2VbaW5kZXhd
Lm1faGF2ZU1ldGFkYXRhKQorICAgICAgICBjYWNoZUZyYW1lX3FpbWFnZShpbmRleCk7CiAKLSAg
ICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb247CisgICAgcmV0dXJuIG1fZnJhbWVz
X3FpbWFnZVtpbmRleF0ubV9kdXJhdGlvbjsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVI
YXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQpAQCAtMjc3LDEwICszNDksMTAgQEAgYm9vbCBC
aXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIGlmIChp
bmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGlu
ZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRh
KQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4KTsKKyAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXNf
cWltYWdlLnNpemUoKSB8fCAhbV9mcmFtZXNfcWltYWdlW2luZGV4XS5tX2hhdmVNZXRhZGF0YSkK
KyAgICAgICAgY2FjaGVGcmFtZV9xaW1hZ2UoaW5kZXgpOwogCi0gICAgcmV0dXJuIG1fZnJhbWVz
W2luZGV4XS5tX2hhc0FscGhhOworICAgIHJldHVybiBtX2ZyYW1lc19xaW1hZ2VbaW5kZXhdLm1f
aGFzQWxwaGE7CiB9CiAKIGludCBCaXRtYXBJbWFnZTo6cmVwZXRpdGlvbkNvdW50KGJvb2wgaW1h
Z2VLbm93blRvQmVDb21wbGV0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNGY2
MTI1MS4uOWU4YjkwZQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmgKQEAgLTk2LDYgKzk2LDM2IEBAIHB1YmxpYzoKICAgICBib29sIG1faGFzQWxwaGE7CiB9
OwogCitzdHJ1Y3QgRnJhbWVEYXRhX3EgeworICAgLy8gV1RGX01BS0VfTk9OQ09QWUFCTEUoRnJh
bWVEYXRhX3EpOworcHVibGljOgorICAgIEZyYW1lRGF0YV9xKCkKKyAgICAgICAgOiBtX2ZyYW1l
KDApCisgICAgICAgICwgbV9oYXZlTWV0YWRhdGEoZmFsc2UpCisgICAgICAgICwgbV9pc0NvbXBs
ZXRlKGZhbHNlKQorICAgICAgICAsIG1fZHVyYXRpb24oMCkKKyAgICAgICAgLCBtX2hhc0FscGhh
KHRydWUpCisgICAgeworICAgIH0KKworICAgIH5GcmFtZURhdGFfcSgpCisgICAgeworICAgICAg
ICBjbGVhcl9xaW1hZ2UodHJ1ZSk7CisgICAgfQorCisgICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBp
bWFnZSBkYXRhIG9uIHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEuCisg
ICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBjbGVh
ci4KKyAgICBib29sIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7CisgICAgYm9vbCBjbGVhcl9x
aW1hZ2UoYm9vbCBjbGVhck1ldGFkYXRhKTsKKworICAgIFFJbWFnZSogbV9mcmFtZTsKKyAgICBi
b29sIG1faGF2ZU1ldGFkYXRhOworICAgIGJvb2wgbV9pc0NvbXBsZXRlOworICAgIGZsb2F0IG1f
ZHVyYXRpb247CisgICAgYm9vbCBtX2hhc0FscGhhOworfTsKKworCiAvLyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBCaXRtYXBJbWFnZSBDbGFz
cwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpA
QCAtMTIzLDYgKzE1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SG90U3BvdChJ
bnRQb2ludCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxs
RGF0YVJlY2VpdmVkKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWRfeChib29sIGFsbERh
dGFSZWNlaXZlZCk7CiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25z
dDsgCiAKICAgICAvLyBJdCBtYXkgbG9vayB1bnVzdWFsIHRoYXQgdGhlcmUgaXMgbm8gc3RhcnQg
YW5pbWF0aW9uIGNhbGwgYXMgcHVibGljIEFQSS4gIFRoaXMgaXMgYmVjYXVzZQpAQCAtMTU3LDYg
KzE4OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEdka1BpeGJ1ZiogZ2V0R2RrUGl4YnVmKCk7
CiAjZW5kaWYKIAorICAgIFFJbWFnZSogbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVfcWltYWdl
KCkgeyByZXR1cm4gZnJhbWVBdEluZGV4X3FpbWFnZShjdXJyZW50RnJhbWUoKSk7IH0KICAgICB2
aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1
cm4gZnJhbWVBdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQogICAgIGJvb2wgZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90KTsgCiAKQEAgLTE5MywxMiArMjI1LDE0IEBAIHByb3RlY3RlZDoKIAog
ICAgIHNpemVfdCBjdXJyZW50RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZTsg
fQogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CisgICAgUUltYWdlKiBmcmFtZUF0SW5kZXhfcWlt
YWdlKHNpemVfdCk7CiAgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCk7CiAg
ICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7CiAgICAgZmxvYXQgZnJhbWVE
dXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKIAogICAgIC8vIERlY29kZXMgYW5kIGNhY2hlcyBhIGZy
YW1lLiBOZXZlciBhY2Nlc3NlZCBleGNlcHQgaW50ZXJuYWxseS4KICAgICB2b2lkIGNhY2hlRnJh
bWUoc2l6ZV90IGluZGV4KTsKKyAgICB2b2lkIGNhY2hlRnJhbWVfcWltYWdlKHNpemVfdCBpbmRl
eCk7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0YS4gIFdoZW4gfGRl
c3Ryb3lBbGx8IGlzIHRydWUsIHdlIHdpcGUgb3V0CiAgICAgLy8gdGhlIGVudGlyZSBmcmFtZSBi
dWZmZXIgY2FjaGUgYW5kIHRlbGwgdGhlIGltYWdlIHNvdXJjZSB0byBkZXN0cm95CkBAIC0yNDYs
MTYgKzI4MCwxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaW1h
Z2UgaXMgYSAxeDEgc29saWQgY29sb3IuICBXZSBvcHRpbWl6ZSB0aGVzZSBpbWFnZXMgYW5kIGp1
c3QgZG8gYSBmaWxsIHJlY3QgaW5zdGVhZC4KICAgICAvLyBUaGlzIGNoZWNrIHNob3VsZCBoYXBw
ZW4gcmVnYXJkbGVzcyB3aGV0aGVyIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgaXMgYWxyZWFkeSBz
ZXQsIGFzIHRoZSBmcmFtZSBtYXkgaGF2ZQogICAgIC8vIGNoYW5nZWQuCi0gICAgdm9pZCBjaGVj
a0ZvclNvbGlkQ29sb3IoKTsKKyAgICAvL3ZvaWQgY2hlY2tGb3JTb2xpZENvbG9yKCk7CisgICAg
dm9pZCBjaGVja0ZvclNvbGlkQ29sb3JfcWltYWdlKCk7CiAgICAgCiAgICAgdmlydHVhbCBib29s
IG1heUZpbGxXaXRoU29saWRDb2xvcigpCiAgICAgewogICAgICAgICBpZiAoIW1fY2hlY2tlZEZv
clNvbGlkQ29sb3IgJiYgZnJhbWVDb3VudCgpID4gMCkgewotICAgICAgICAgICAgY2hlY2tGb3JT
b2xpZENvbG9yKCk7CisgICAgICAgICAgICAvLyBGSVhNRSBjaGVja0ZvclNvbGlkQ29sb3JfcWlt
YWdlKCk7CiAgICAgICAgICAgICAvLyBXSU5DRSBQT1JUOiBjaGVja0ZvclNvbGlkQ29sb3IoKSBk
b2Vzbid0IHNldCBtX2NoZWNrZWRGb3JTb2xpZENvbG9yIHVudGlsCiAgICAgICAgICAgICAvLyBp
dCBnZXRzIGVub3VnaCBpbmZvcm1hdGlvbiB0byBtYWtlIGZpbmFsIGRlY2lzaW9uLgogI2lmICFP
UyhXSU5DRSkKLSAgICAgICAgICAgIEFTU0VSVChtX2NoZWNrZWRGb3JTb2xpZENvbG9yKTsKKyAg
ICAgICAgICAgIC8vQVNTRVJUKG1fY2hlY2tlZEZvclNvbGlkQ29sb3IpOwogI2VuZGlmCiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIG1faXNTb2xpZENvbG9yICYmIG1fY3VycmVudEZyYW1lID09
IDA7CkBAIC0yNjYsNyArMzAxLDggQEAgcHJvdGVjdGVkOgogICAgIG11dGFibGUgSW50U2l6ZSBt
X3NpemU7IC8vIFRoZSBzaXplIHRvIHVzZSBmb3IgdGhlIG92ZXJhbGwgaW1hZ2UgKHdpbGwganVz
dCBiZSB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgaW1hZ2UpLgogICAgIAogICAgIHNpemVfdCBtX2N1
cnJlbnRGcmFtZTsgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlv
bi4KLSAgICBWZWN0b3I8RnJhbWVEYXRhPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNh
Y2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBp
biB0aGVtIGluIHRoZSBjYWNoZS4KKyAgICAvL1ZlY3RvcjxGcmFtZURhdGE+KiBtX2ZyYW1lczsg
Ly8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2
ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KKyAgICBWZWN0b3I8RnJh
bWVEYXRhX3E+IG1fZnJhbWVzX3FpbWFnZTsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFt
ZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGlu
IHRoZSBjYWNoZS4KICAgICAKICAgICBUaW1lcjxCaXRtYXBJbWFnZT4qIG1fZnJhbWVUaW1lcjsK
ICAgICBpbnQgbV9yZXBldGl0aW9uQ291bnQ7IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBs
b29wcyB3ZSBzaG91bGQgZG8uICBUaGlzIHdpbGwgYmUgY0FuaW1hdGlvbk5vbmUgaWYgdGhpcyBp
bWFnZSB0eXBlIGlzIGluY2FwYWJsZSBvZiBhbmltYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpp
bmRleCBhNzEyZTdmLi42OGQ1ZGY0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5jcHAKQEAgLTY2LDYgKzY2LDcgQEAgYm9vbCBJbWFnZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0
cmluZyYgdHlwZSkKIGJvb2wgSW1hZ2U6OnNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewogICAgIG1fZGF0YSA9IGRhdGE7CisgICAg
bV9hbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CiAgICAgaWYgKCFtX2RhdGEuZ2V0
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC03Niw2ICs3NywyMCBAQCBib29sIEltYWdl
OjpzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNl
aXZlZCkKICAgICByZXR1cm4gZGF0YUNoYW5nZWQoYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAorYm9v
bCBJbWFnZTo6c2V0RGF0YV94KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIG1fYWxsRGF0YVJlY2Vp
dmVkID0gYWxsRGF0YVJlY2VpdmVkOworICAgIGlmICghbV9kYXRhLmdldCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGludCBsZW5ndGggPSBtX2RhdGEtPnNpemUoKTsKKyAgICBpZiAo
IWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZGF0YUNoYW5nZWRf
eChhbGxEYXRhUmVjZWl2ZWQpOworfQorCiB2b2lkIEltYWdlOjpmaWxsV2l0aFNvbGlkQ29sb3Io
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQogewogICAgIGlmIChjb2xvci5hbHBoYSgpIDw9IDApCkBAIC0xMTQsNyArMTI5LDcgQEAg
dm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmwKIAogICAgIC8vIFNlZSA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvNTkwNDM+LgogI2lmICFQTEFURk9STShXWCkKLSAgICBBU1NFUlQoIWlzQml0bWFwSW1hZ2Uo
KSB8fCBzdGF0aWNfY2FzdDxCaXRtYXBJbWFnZSo+KHRoaXMpLT5ub3RTb2xpZENvbG9yKCkpOwor
ICAgIC8vQVNTRVJUKCFpc0JpdG1hcEltYWdlKCkgfHwgc3RhdGljX2Nhc3Q8Qml0bWFwSW1hZ2Uq
Pih0aGlzKS0+bm90U29saWRDb2xvcigpKTsKICNlbmRpZgogCiAgICAgRmxvYXRTaXplIGludHJp
bnNpY1RpbGVTaXplID0gc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA0OTQ2NmYyLi5hZGIx
MGYwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMzcsNiArMzcsNyBA
QAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxRSW1hZ2U+CiAKICNpZiBQTEFU
Rk9STShNQUMpCiAjaWZkZWYgX19PQkpDX18KQEAgLTEwOSw3ICsxMTAsMTAgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBnZXRIb3RTcG90KEludFBvaW50JikgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIGJvb2wgc2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIGJvb2wgc2V0RGF0YV94KFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiAgZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCiAgICAgdmlydHVhbCBi
b29sIGRhdGFDaGFuZ2VkKGJvb2wgLyphbGxEYXRhUmVjZWl2ZWQqLykgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWRfeChib29sIC8qYWxsRGF0YVJlY2VpdmVk
Ki8pIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVF
eHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfSAvLyBudWxsIHN0cmluZyBpZiB1
bmtub3duCiAKQEAgLTEyOSw2ICsxMzMsNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFRpbGVSdWxl
IHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgUmVwZWF0VGlsZSB9OwogCisgICAgdmlydHVhbCBR
SW1hZ2UqIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lX3FpbWFnZSgpIHsgcmV0dXJuIDA7IH0K
ICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkg
eyByZXR1cm4gMDsgfQogICAgIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTE1Niw2ICsxNjEsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIAorICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7
CiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2UoSW1hZ2VPYnNlcnZlciogPSAwKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCm9sZCBtb2RlIDEw
MDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZjQ0OTVlZC4uZGRmMTQ1NwotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0yNywxMyArMjcsOCBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgot
Ci0jaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyUXQuaCIKLSNlbHNlCiAj
aW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEzMCw3ICsxMjUsNyBAQCBzaXplX3QgSW1h
Z2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdAogICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2Rl
Y29kZXItPmZyYW1lQ291bnQoKSA6IDA7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNl
OjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQorLypOYXRpdmVJbWFnZVB0ciBJbWFn
ZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoIW1f
ZGVjb2RlcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNDgsNiArMTQzLDI1IEBAIE5hdGl2ZUlt
YWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAg
IC8vIGlzIGFscmVhZHkgaW4gYSBuYXRpdmUgY29udGFpbmVyLCBhbmQgdGhpcyBqdXN0IGluY3Jl
bWVudHMgaXRzIHJlZmNvdW50LgogICAgIHJldHVybiBidWZmZXItPmFzTmV3TmF0aXZlSW1hZ2Uo
KTsKIH0KKyovCitRSW1hZ2UqIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXhfcWltYWdl
KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRl
eChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZy
YW1lOjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFplcm8taGVpZ2h0
IGltYWdlcyBjYW4gY2F1c2UgcHJvYmxlbXMgZm9yIHNvbWUgcG9ydHMuICBJZiB3ZSBoYXZlIGFu
CisgICAgLy8gZW1wdHkgaW1hZ2UgZGltZW5zaW9uLCBqdXN0IGJhaWwuCisgICAgaWYgKHNpemUo
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gUmV0dXJuIHRoZSBidWZm
ZXIgY29udGVudHMgYXMgYSBuYXRpdmUgaW1hZ2UuICBGb3Igc29tZSBwb3J0cywgdGhlIGRhdGEK
KyAgICAvLyBpcyBhbHJlYWR5IGluIGEgbmF0aXZlIGNvbnRhaW5lciwgYW5kIHRoaXMganVzdCBp
bmNyZW1lbnRzIGl0cyByZWZjb3VudC4KKyAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUlt
YWdlX3FpbWFnZSgpOworfQogCiBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5k
ZXgoc2l6ZV90IGluZGV4KQogewpAQCAtMTgyLDcgKzE5Niw3IEBAIGJvb2wgSW1hZ2VTb3VyY2U6
OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKIAogYm9vbCBJbWFnZVNvdXJjZTo6
ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFtX2RlY29k
ZXIpCisgICAgaWYgKCFtX2RlY29kZXIgfHwgIW1fZGVjb2Rlci0+bV9pc0FsbERhdGFSZWNlaXZl
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9k
ZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEw
MDc1NQppbmRleCA5OWU0ZmM0Li45ODRhNTY4Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtMzgsMTEgKzM4LDYgQEAgY2xhc3Mgd3hHcmFwaGljc0Jp
dG1hcDsKIHR5cGVkZWYgc3RydWN0IENHSW1hZ2VTb3VyY2UqIENHSW1hZ2VTb3VyY2VSZWY7CiB0
eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBDR0ltYWdlUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
X19DRkRhdGEqIENGRGF0YVJlZjsKLSNlbGlmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPHFnbG9i
YWwuaD4KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBpeG1hcDsKLVFUX0VORF9OQU1FU1BB
Q0UKICNlbGlmIFVTRShDQUlSTykKIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZTsKIHR5cGVkZWYgc3Ry
dWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKQEAgLTU2LDYgKzUxLDggQEAgY2xh
c3MgQkJpdG1hcDsKICNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKICNlbmRpZgogCisjaW5jbHVk
ZSA8UUltYWdlPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEludFBvaW50OwpAQCAt
NzYsOCArNzMsMTAgQEAgY2xhc3MgVGlsZWRJbWFnZU9wZW5WRzsKIHR5cGVkZWYgSW1hZ2VEZWNv
ZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKIHR5cGVkZWYgVGlsZWRJbWFnZU9wZW5WRyogTmF0
aXZlSW1hZ2VQdHI7CiAjZWxpZiBQTEFURk9STShRVCkKLWNsYXNzIEltYWdlRGVjb2RlclF0Owot
dHlwZWRlZiBJbWFnZURlY29kZXJRdCogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CisvL2NsYXNzIElt
YWdlRGVjb2RlclF0OworLy90eXBlZGVmIEltYWdlRGVjb2RlclF0KiBOYXRpdmVJbWFnZVNvdXJj
ZVB0cjsKK2NsYXNzIEltYWdlRGVjb2RlcjsKK3R5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJ
bWFnZVNvdXJjZVB0cjsKIHR5cGVkZWYgUVBpeG1hcCogTmF0aXZlSW1hZ2VQdHI7CiAjZWxzZQog
Y2xhc3MgSW1hZ2VEZWNvZGVyOwpAQCAtMTc3LDcgKzE3Niw4IEBAIHB1YmxpYzoKIAogICAgIC8v
IENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdpdGgg
YSBoaWdoZXIgaW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUuCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCk7CisvLyAgICBOYXRp
dmVJbWFnZVB0ciBjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90KTsKKyAgICBRSW1hZ2UqIGNyZWF0
ZUZyYW1lQXRJbmRleF9xaW1hZ2Uoc2l6ZV90KTsKIAogICAgIGZsb2F0IGZyYW1lRHVyYXRpb25B
dEluZGV4KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QpOyAv
LyBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgYWN0dWFsbHkgdXNlZCBhbnkgYWxwaGEuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCm9sZCBtb2Rl
IDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNDFmZjhhNi4uYmY4NjFjOQotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcApAQCAtNDUsNyArNDUsNiBA
QAogI2luY2x1ZGUgPFFQaXhtYXA+CiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UUlt
YWdlPgotI2luY2x1ZGUgPFFJbWFnZVJlYWRlcj4KICNpbmNsdWRlIDxRVHJhbnNmb3JtPgogCiAj
aW5jbHVkZSA8UURlYnVnPgpAQCAtOTEsNiArOTAsMTggQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFy
KGJvb2wgY2xlYXJNZXRhZGF0YSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgRnJhbWVE
YXRhX3E6OmNsZWFyX3FpbWFnZShib29sIGNsZWFyTWV0YWRhdGEpCit7CisgICAgaWYgKGNsZWFy
TWV0YWRhdGEpCisgICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7CisKKyAgICBpZiAobV9m
cmFtZSkgeworICAgICAgICBkZWxldGUgbV9mcmFtZTsKKyAgICAgICAgbV9mcmFtZSA9IDA7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIC8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gSW1hZ2Ug
Q2xhc3MKQEAgLTEwNCwyMyArMTE1LDI0IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQogdm9pZCBJbWFnZTo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgUVBpeG1hcCogZnJhbWVQ
aXhtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghZnJhbWVQaXht
YXApIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgorICAg
IFFJbWFnZSogZnJhbWVJbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lX3FpbWFnZSgp
OworICAgIGlmICghZnJhbWVJbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2
ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFF0IGludGVycHJldHMg
MCB3aWR0aC9oZWlnaHQgYXMgZnVsbCB3aWR0aC9oZWlnaHQgc28ganVzdCBzaG9ydCBjaXJjdWl0
LgogICAgIFFSZWN0RiBkciA9IFFSZWN0RihkZXN0UmVjdCkubm9ybWFsaXplZCgpOwogICAgIFFS
ZWN0IHRyID0gUVJlY3RGKHRpbGVSZWN0KS50b1JlY3QoKS5ub3JtYWxpemVkKCk7CisKICAgICBp
ZiAoIWRyLndpZHRoKCkgfHwgIWRyLmhlaWdodCgpIHx8ICF0ci53aWR0aCgpIHx8ICF0ci5oZWln
aHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUVBpeG1hcCBwaXhtYXAgPSAqZnJhbWVQaXht
YXA7Ci0gICAgaWYgKHRyLngoKSB8fCB0ci55KCkgfHwgdHIud2lkdGgoKSAhPSBwaXhtYXAud2lk
dGgoKSB8fCB0ci5oZWlnaHQoKSAhPSBwaXhtYXAuaGVpZ2h0KCkpCi0gICAgICAgIHBpeG1hcCA9
IHBpeG1hcC5jb3B5KHRyKTsKKyAgICBRSW1hZ2UgaW1hZ2UgPSAqZnJhbWVJbWFnZTsKKyAgICBp
ZiAodHIueCgpIHx8IHRyLnkoKSB8fCB0ci53aWR0aCgpICE9IGltYWdlLndpZHRoKCkgfHwgdHIu
aGVpZ2h0KCkgIT0gaW1hZ2UuaGVpZ2h0KCkpCisgICAgICAgIGltYWdlID0gaW1hZ2UuY29weSh0
cik7CiAKICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY3R4dC0+Y29t
cG9zaXRlT3BlcmF0aW9uKCk7CiAKLSAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oIXBp
eG1hcC5oYXNBbHBoYSgpICYmIG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgPyBDb21wb3NpdGVD
b3B5IDogb3ApOworICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbighaW1hZ2UuaGFzQWxw
aGFDaGFubmVsKCkgJiYgb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciA/IENvbXBvc2l0ZUNvcHkg
OiBvcCk7CiAKICAgICBRUGFpbnRlciogcCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAg
IFFUcmFuc2Zvcm0gdHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pOwpAQCAtMTMxLDE3ICsxNDMs
MTcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogCiAgICAgICAgIGJvb2wgdGlsZVdpbGxCZVBh
aW50ZWRPbmx5T25jZSA9IHRpbGVSZWN0SW5UYXJnZXRDb29yZHMuY29udGFpbnMoZHIpOwogICAg
ICAgICBpZiAoIXRpbGVXaWxsQmVQYWludGVkT25seU9uY2UpIHsKLSAgICAgICAgICAgIFFTaXpl
RiBzY2FsZWRTaXplKGZsb2F0KHBpeG1hcC53aWR0aCgpKSAqIHRyYW5zZm9ybS5tMTEoKSwgZmxv
YXQocGl4bWFwLmhlaWdodCgpKSAqIHRyYW5zZm9ybS5tMjIoKSk7Ci0gICAgICAgICAgICBRUGl4
bWFwIHNjYWxlZFBpeG1hcChzY2FsZWRTaXplLnRvU2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChw
aXhtYXAuaGFzQWxwaGEoKSkKLSAgICAgICAgICAgICAgICBzY2FsZWRQaXhtYXAuZmlsbChRdDo6
dHJhbnNwYXJlbnQpOworICAgICAgICAgICAgUVNpemVGIHNjYWxlZFNpemUoZmxvYXQoaW1hZ2Uu
d2lkdGgoKSkgKiB0cmFuc2Zvcm0ubTExKCksIGZsb2F0KGltYWdlLmhlaWdodCgpKSAqIHRyYW5z
Zm9ybS5tMjIoKSk7CisgICAgICAgICAgICBRSW1hZ2Ugc2NhbGVkSW1hZ2Uoc2NhbGVkU2l6ZS50
b1NpemUoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAgICAgICAgICAgIGlmIChpbWFnZS5o
YXNBbHBoYUNoYW5uZWwoKSkKKyAgICAgICAgICAgICAgICBzY2FsZWRJbWFnZS5maWxsKFF0Ojp0
cmFuc3BhcmVudCk7CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUVBhaW50ZXIgcGFp
bnRlcigmc2NhbGVkUGl4bWFwKTsKKyAgICAgICAgICAgICAgICBRUGFpbnRlciBwYWludGVyKCZz
Y2FsZWRJbWFnZSk7CiAgICAgICAgICAgICAgICAgcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUo
UVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOwogICAgICAgICAgICAgICAgIHBhaW50
ZXIuc2V0UmVuZGVySGludHMocC0+cmVuZGVySGludHMoKSk7Ci0gICAgICAgICAgICAgICAgcGFp
bnRlci5kcmF3UGl4bWFwKFFSZWN0KDAsIDAsIHNjYWxlZFBpeG1hcC53aWR0aCgpLCBzY2FsZWRQ
aXhtYXAuaGVpZ2h0KCkpLCBwaXhtYXApOworICAgICAgICAgICAgICAgIHBhaW50ZXIuZHJhd0lt
YWdlKFFSZWN0KDAsIDAsIHNjYWxlZEltYWdlLndpZHRoKCksIHNjYWxlZEltYWdlLmhlaWdodCgp
KSwgaW1hZ2UpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcGl4bWFwID0gc2NhbGVkUGl4
bWFwOworICAgICAgICAgICAgaW1hZ2UgPSBzY2FsZWRJbWFnZTsKICAgICAgICAgICAgIHRyYW5z
Zm9ybSA9IFFUcmFuc2Zvcm06OmZyb21UcmFuc2xhdGUodHJhbnNmb3JtLmR4KCksIHRyYW5zZm9y
bS5keSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE1MCw3ICsxNjIsNyBAQCB2b2lkIEltYWdl
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0CiAgICAgdHJhbnNmb3JtICo9IFFUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGhh
c2UueCgpLCBwaGFzZS55KCkpOwogICAgIHRyYW5zZm9ybS50cmFuc2xhdGUodHIueCgpLCB0ci55
KCkpOwogCi0gICAgUUJydXNoIGIocGl4bWFwKTsKKyAgICBRQnJ1c2ggYihpbWFnZSk7CiAgICAg
Yi5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICBwLT5maWxsUmVjdChkciwgYik7CiAKQEAg
LTE2MCwzOCArMTcyLDYgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgICAgICBpbWFnZU9i
c2VydmVyKCktPmRpZERyYXcodGhpcyk7CiB9CiAKLUJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShR
UGl4bWFwKiBwaXhtYXAsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQotICAgIDogSW1hZ2Uob2Jz
ZXJ2ZXIpCi0gICAgLCBtX2N1cnJlbnRGcmFtZSgwKQotICAgICwgbV9mcmFtZXMoMCkKLSAgICAs
IG1fZnJhbWVUaW1lcigwKQotICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUp
Ci0gICAgLCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhVbmtub3duKQotICAgICwgbV9yZXBldGl0
aW9uc0NvbXBsZXRlKDApCi0gICAgLCBtX2lzU29saWRDb2xvcihmYWxzZSkKLSAgICAsIG1fY2hl
Y2tlZEZvclNvbGlkQ29sb3IoZmFsc2UpCi0gICAgLCBtX2FuaW1hdGlvbkZpbmlzaGVkKHRydWUp
Ci0gICAgLCBtX2FsbERhdGFSZWNlaXZlZCh0cnVlKQotICAgICwgbV9oYXZlU2l6ZSh0cnVlKQot
ICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCi0gICAgLCBtX2RlY29kZWRTaXplKDApCi0gICAg
LCBtX2hhdmVGcmFtZUNvdW50KHRydWUpCi0gICAgLCBtX2ZyYW1lQ291bnQoMSkKLXsKLSAgICBp
bml0UGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBpbnQgd2lkdGggPSBwaXhtYXAtPndpZHRoKCk7Ci0g
ICAgaW50IGhlaWdodCA9IHBpeG1hcC0+aGVpZ2h0KCk7Ci0gICAgbV9kZWNvZGVkU2l6ZSA9IHdp
ZHRoICogaGVpZ2h0ICogNDsKLSAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwot
Ci0gICAgbV9mcmFtZXMuZ3JvdygxKTsKLSAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gcGl4bWFw
OwotICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBwaXhtYXAtPmhhc0FscGhhKCk7Ci0gICAg
bV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIGNoZWNrRm9yU29saWRDb2xv
cigpOwotfQotCiB2b2lkIEJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1EYXRhKCkKIHsKIH0KQEAg
LTIwNCw2ICsxODQsMTAgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0
YSgpCiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYg
c3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7
CisKKyAgICBpZiAoIW1fYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICByZXR1cm47CisKICAgICBR
UmVjdEYgbm9ybWFsaXplZERzdCA9IGRzdC5ub3JtYWxpemVkKCk7CiAgICAgUVJlY3RGIG5vcm1h
bGl6ZWRTcmMgPSBzcmMubm9ybWFsaXplZCgpOwogCkBAIC0yMTIsMzcgKzE5Niw0OCBAQCB2b2lk
IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3QsCiAgICAgaWYgKG5vcm1hbGl6ZWRTcmMuaXNFbXB0eSgpIHx8IG5vcm1hbGl6ZWREc3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBRUGl4bWFwKiBpbWFnZSA9IG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFpbWFnZSkKKyAgICBRSW1hZ2UqIHBy
b2Nlc3NlZEltYWdlOworCisgICAgcHJvY2Vzc2VkSW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZV9xaW1hZ2UoKTsKKyAgICAvL3Byb2Nlc3NlZEltYWdlID0gbmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWVfcGFydHFpbWFnZSgpOworCisgICAgaWYgKCFwcm9jZXNzZWRJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7Ci0gICAg
ICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBub3JtYWxpemVkRHN0LCBzb2xpZENvbG9yKCks
IHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgIFFJbWFnZSogcWltYWdlID0gbmV3IFFJbWFnZShw
cm9jZXNzZWRJbWFnZS0+Y29weShwcm9jZXNzZWRJbWFnZS0+cmVjdCgpKSk7CisKKyAgICBpZiAo
IXFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAvLyAgIEZJWE1FOiBkb24ndCBmaWxs
IGZyb20gbWFpbnRocmVhZCBpZiBpdCdzIHVuZGVyIHByb2Nlc3NpbmcgaW4gd29ya2VydGhyZWFk
CisgLy8gICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKKyAvLyAgICAgICBmaWxsV2l0
aFNvbGlkQ29sb3IoY3R4dCwgbm9ybWFsaXplZERzdCwgc29saWRDb2xvcigpLCBzdHlsZUNvbG9y
U3BhY2UsIG9wKTsKKyAvLyAgICAgICByZXR1cm47CisgLy8gICB9CiAKICAgICBDb21wb3NpdGVP
cGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0g
ICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCFpbWFnZS0+aGFzQWxwaGEoKSAmJiBvcCA9
PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKKyAgICBjdHh0LT5z
ZXRDb21wb3NpdGVPcGVyYXRpb24oIXFpbWFnZS0+aGFzQWxwaGFDaGFubmVsKCkgJiYgb3AgPT0g
Q29tcG9zaXRlU291cmNlT3ZlciA/IENvbXBvc2l0ZUNvcHkgOiBvcCk7CiAKICAgICBpZiAoY3R4
dC0+aGFzU2hhZG93KCkpIHsKICAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gY3R4dC0+c2hh
ZG93Qmx1cigpOwogICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFk
b3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7CiAgICAgICAgIGlmIChz
aGFkb3dDb250ZXh0KSB7CiAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNo
YWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+ZHJhd1BpeG1hcChub3JtYWxpemVkRHN0LCAqaW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOworICAg
ICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd0ltYWdlKG5vcm1hbGl6ZWREc3QsICpxaW1hZ2Us
IG5vcm1hbGl6ZWRTcmMpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHh0
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3
UGl4bWFwKG5vcm1hbGl6ZWREc3QsICppbWFnZSwgbm9ybWFsaXplZFNyYyk7CisgICAgY3R4dC0+
cGxhdGZvcm1Db250ZXh0KCktPmRyYXdJbWFnZShub3JtYWxpemVkRHN0LCAqcWltYWdlLCBub3Jt
YWxpemVkU3JjKTsKIAogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2aW91c09w
ZXJhdG9yKTsKIAogICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCiAgICAgICAgIGltYWdlT2JzZXJ2
ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKKworICAgIGRlbGV0ZSBxaW1hZ2U7CiB9CiAKLXZvaWQgQml0
bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCisvKnZvaWQgQml0bWFwSW1hZ2U6OmNoZWNr
Rm9yU29saWRDb2xvcigpCiB7CiAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKICAgICBtX2No
ZWNrZWRGb3JTb2xpZENvbG9yID0gdHJ1ZTsKQEAgLTI1Niw2ICsyNTEsMjMgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKIAogICAgIG1faXNTb2xpZENvbG9yID0gdHJ1
ZTsKICAgICBtX3NvbGlkQ29sb3IgPSBRQ29sb3I6OmZyb21SZ2JhKGZyYW1lUGl4bWFwLT50b0lt
YWdlKCkucGl4ZWwoMCwgMCkpOworfSovCisKK3ZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29s
aWRDb2xvcl9xaW1hZ2UoKQoreworICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7CisgICAgbV9j
aGVja2VkRm9yU29saWRDb2xvciA9IHRydWU7CisKKyAgICBpZiAoZnJhbWVDb3VudCgpID4gMSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUUltYWdlKiBmcmFtZUltYWdlID0gZnJhbWVBdEluZGV4
X3FpbWFnZSgwKTsKKworICAgIGlmICghZnJhbWVJbWFnZSB8fCBmcmFtZUltYWdlLT53aWR0aCgp
ICE9IDEgfHwgZnJhbWVJbWFnZS0+aGVpZ2h0KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9pc1NvbGlkQ29sb3IgPSB0cnVlOworICAgIG1fc29saWRDb2xvciA9IFFDb2xvcjo6ZnJv
bVJnYmEoZnJhbWVJbWFnZS0+cGl4ZWwoMCwgMCkpOwogfQogCiAjaWYgT1MoV0lORE9XUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCm9s
ZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYWY3YjEyOC4uODk2MjQ2NQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAKQEAgLTMz
LDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBRQnJ1c2ggUGF0dGVybjo6Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0CiB7Ci0gICAgUVBp
eG1hcCogcGl4bWFwID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CisgICAgUUltYWdlKiBwaXhtYXAgPSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWVfcWltYWdlKCk7CiAgICAgaWYgKCFwaXhtYXApCiAgICAgICAgIHJldHVybiBRQnJ1c2go
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBj
YTYzNjllLi43ZmY3NjkxCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMTAyLDkgKzEwMiw5IEBAIEltYWdlRGVjb2Rl
ciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNv
dXJjZTo6QWxwaGFPCiAgICAgaWYgKGxlbmd0aCA8IGxlbmd0aE9mTG9uZ2VzdFNpZ25hdHVyZSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobWF0Y2hlc0dJRlNpZ25hdHVyZShjb250ZW50
cykpCisvKiAgICBpZiAobWF0Y2hlc0dJRlNpZ25hdHVyZShjb250ZW50cykpCiAgICAgICAgIHJl
dHVybiBuZXcgR0lGSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbik7Ci0KKyovCiAgICAgaWYgKG1hdGNoZXNQTkdTaWduYXR1cmUoY29udGVudHMpKQog
ICAgICAgICByZXR1cm4gbmV3IFBOR0ltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pOwogCkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBJbWFnZUZyYW1l
Ojp6ZXJvRmlsbFBpeGVsRGF0YSgpCiAgICAgbV9oYXNBbHBoYSA9IHRydWU7CiB9CiAKLSNpZiAh
VVNFKENHKQorI2lmICFVU0UoQ0cpIHx8ICFQTEFURk9STShRVCkKIAogdm9pZCBJbWFnZUZyYW1l
Ojpjb3B5UmVmZXJlbmNlVG9CaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQogewpA
QCAtMjM0LDYgKzIzNCwzOSBAQCBpbnQgSW1hZ2VGcmFtZTo6aGVpZ2h0KCkgY29uc3QKIAogI2Vu
ZGlmCiAKKyNpZiAhRU5BQkxFKFFUX0lNQUdFX0RFQ09ERVIpCisvKlFQaXhtYXAqIEltYWdlRnJh
bWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAoreworICAgIFFJbWFnZTo6Rm9ybWF0IGZtdDsK
KyAgICBpZiAobV9oYXNBbHBoYSkKKyAgICAgICAgZm10ID0gbV9wcmVtdWx0aXBseUFscGhhID8g
IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkIDogUUltYWdlOjpGb3JtYXRfQVJH
QjMyOworICAgIGVsc2UKKyAgICAgICAgZm10ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7CisKKyAg
ICAvLyBOT1RFOiBUaGlzIGhhcyBubyB3YXkgdG8gY2hlY2sgZm9yIGFsbG9jYXRpb24gZmFpbHVy
ZSBpZiB0aGUgcmVxdWVzdGVkCisgICAgLy8gc2l6ZSB3YXMgdG9vIGJpZy4uLgorICAgIFFJbWFn
ZSBpbWcocmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KG1fYnl0ZXMpLCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpLCBzaXplb2YoUGl4ZWxEYXRhKSAqIG1fc2l6ZS53aWR0aCgpLCBmbXQp
OworCisgICAgcmV0dXJuIG5ldyBRUGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShpbWcpKTsKK30K
KyovCitRSW1hZ2UqIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2VfcWltYWdlKCkgY29uc3QK
K3sKKyAgICBRSW1hZ2U6OkZvcm1hdCBmbXQ7CisgICAgaWYgKG1faGFzQWxwaGEpCisgICAgICAg
IGZtdCA9IG1fcHJlbXVsdGlwbHlBbHBoYSA/ICBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVs
dGlwbGllZCA6IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMjsKKyAgICBlbHNlCisgICAgICAgIGZtdCA9
IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOworCisgICAgLy8gTk9URTogVGhpcyBoYXMgbm8gd2F5IHRv
IGNoZWNrIGZvciBhbGxvY2F0aW9uIGZhaWx1cmUgaWYgdGhlIHJlcXVlc3RlZAorICAgIC8vIHNp
emUgd2FzIHRvbyBiaWcuLi4KKyAgICBRSW1hZ2UgaW1nKHJlaW50ZXJwcmV0X2Nhc3Q8dWNoYXIq
PihtX2J5dGVzKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgc2l6ZW9mKFBpeGVs
RGF0YSkgKiBtX3NpemUud2lkdGgoKSwgZm10KTsKKworICAgIHJldHVybiBuZXcgUUltYWdlKGlt
Zyk7Cit9CisKKyNlbmRpZgorCiBuYW1lc3BhY2UgewogCiBlbnVtIE1hdGNoVHlwZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggY2U4YjI3Yy4uMmJjMzMx
YQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaApAQCAtNjUsNyArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAg
ICBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZy
YW1lYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRl
bnRzCiAgICAgICAgIH07Ci0jaWYgVVNFKFNLSUEpIHx8IFBMQVRGT1JNKFFUKQorI2lmIFVTRShT
S0lBKSB8fCAoUExBVEZPUk0oUVQpICYmIEVOQUJMRShRVF9JTUFHRV9ERUNPREVSKSkKICAgICAg
ICAgdHlwZWRlZiB1aW50MzJfdCBQaXhlbERhdGE7CiAjZWxzZQogICAgICAgICB0eXBlZGVmIHVu
c2lnbmVkIFBpeGVsRGF0YTsKQEAgLTExNSw3ICsxMTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIC8vIFJldHVybnMgYSBjYWxsZXItb3duZWQgcG9pbnRlciB0byB0aGUgdW5kZXJs
eWluZyBuYXRpdmUgaW1hZ2UgZGF0YS4KICAgICAgICAgLy8gKEFjdHVhbCB1c2U6IFRoaXMgcG9p
bnRlciB3aWxsIGJlIG93bmVkIGJ5IEJpdG1hcEltYWdlIGFuZCBmcmVlZCBpbgogICAgICAgICAv
LyBGcmFtZURhdGE6OmNsZWFyKCkpLgotICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2
ZUltYWdlKCkgY29uc3Q7CisgICAgICAgIC8vTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFn
ZSgpIGNvbnN0OworICAgICAgICBRSW1hZ2UqIGFzTmV3TmF0aXZlSW1hZ2VfcWltYWdlKCkgY29u
c3Q7CiAKICAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OwogICAgICAgICBjb25zdCBJbnRS
ZWN0JiBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxGcmFtZVJl
Y3Q7IH0KQEAgLTEzNyw3ICsxMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAg
ICBzZXRSR0JBKGdldEFkZHIoeCwgeSksIHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKLSNpZiBQ
TEFURk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgJiYgRU5BQkxFKFFUX0lNQUdFX0RFQ09ERVIp
CiAgICAgICAgIHZvaWQgc2V0UGl4bWFwKGNvbnN0IFFQaXhtYXAmIHBpeG1hcCk7CiAjZW5kaWYK
IApAQCAtMTU1LDcgKzE1Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogI2lm
IFVTRShTS0lBKQogICAgICAgICAgICAgcmV0dXJuIG1fYml0bWFwLmdldEFkZHIzMih4LCB5KTsK
LSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpICYmIEVOQUJMRShRVF9JTUFH
RV9ERUNPREVSKQogICAgICAgICAgICAgbV9pbWFnZSA9IG1fcGl4bWFwLnRvSW1hZ2UoKTsKICAg
ICAgICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOwogICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPFFSZ2IqPihtX2ltYWdlLnNjYW5MaW5lKHkpKSArIHg7CkBAIC0xODgs
NyArMTg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKFNLSUEpCiAgICAgICAg
IE5hdGl2ZUltYWdlU2tpYSBtX2JpdG1hcDsKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExB
VEZPUk0oUVQpICYmIEVOQUJMRShRVF9JTUFHRV9ERUNPREVSKQogICAgICAgICBtdXRhYmxlIFFQ
aXhtYXAgbV9waXhtYXA7CiAgICAgICAgIG11dGFibGUgUUltYWdlIG1faW1hZ2U7CiAgICAgICAg
IGJvb2wgbV9oYXNBbHBoYTsKQEAgLTIyMCwxMiArMjIxLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VEZWNvZGVyKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICBJbWFnZURlY29kZXIoSW1hZ2VT
b3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCi0gICAgICAgICAgICA6
IG1fc2NhbGVkKGZhbHNlKQorICAgICAgICAgICAgOiBtX2lzQWxsRGF0YVJlY2VpdmVkKGZhbHNl
KQorICAgICAgICAgICAgLCBtX3NjYWxlZChmYWxzZSkKICAgICAgICAgICAgICwgbV9wcmVtdWx0
aXBseUFscGhhKGFscGhhT3B0aW9uID09IEltYWdlU291cmNlOjpBbHBoYVByZW11bHRpcGxpZWQp
CiAgICAgICAgICAgICAsIG1faWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUoZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24gPT0gSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlSWdub3Jl
ZCkKICAgICAgICAgICAgICwgbV9zaXplQXZhaWxhYmxlKGZhbHNlKQogICAgICAgICAgICAgLCBt
X21heE51bVBpeGVscygtMSkKLSAgICAgICAgICAgICwgbV9pc0FsbERhdGFSZWNlaXZlZChmYWxz
ZSkKICAgICAgICAgICAgICwgbV9mYWlsZWQoZmFsc2UpIHsgfQogCiAgICAgICAgIHZpcnR1YWwg
fkltYWdlRGVjb2RlcigpIHsgfQpAQCAtMzE5LDYgKzMyMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBzZXRNYXhOdW1QaXhlbHMoaW50IG0pIHsgbV9tYXhOdW1QaXhlbHMg
PSBtOyB9CiAjZW5kaWYKIAorICAgICAgICBib29sIG1faXNBbGxEYXRhUmVjZWl2ZWQ7CisKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7
CiAgICAgICAgIGludCB1cHBlckJvdW5kU2NhbGVkWChpbnQgb3JpZ1gsIGludCBzZWFyY2hTdGFy
dCA9IDApOwpAQCAtMzQ5LDcgKzM1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
SW50U2l6ZSBtX3NpemU7CiAgICAgICAgIGJvb2wgbV9zaXplQXZhaWxhYmxlOwogICAgICAgICBp
bnQgbV9tYXhOdW1QaXhlbHM7Ci0gICAgICAgIGJvb2wgbV9pc0FsbERhdGFSZWNlaXZlZDsKKwog
ICAgICAgICBib29sIG1fZmFpbGVkOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29k
ZXIuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMmZkNTU2Mi4uMzQ0
MmRhNwotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBp
bml0X3NvdXJjZShqX2RlY29tcHJlc3NfcHRyIGpkKTsKIGJvb2xlYW4gZmlsbF9pbnB1dF9idWZm
ZXIoal9kZWNvbXByZXNzX3B0ciBqZCk7CiB2b2lkIHNraXBfaW5wdXRfZGF0YShqX2RlY29tcHJl
c3NfcHRyIGpkLCBsb25nIG51bV9ieXRlcyk7CiB2b2lkIHRlcm1fc291cmNlKGpfZGVjb21wcmVz
c19wdHIgamQpOwotdm9pZCBlcnJvcl9leGl0KGpfY29tbW9uX3B0ciBjaW5mbyk7Cit2b2lkIGVy
cm9yX2V4aXQoal9jb21tb25fcHRyIGNpbmZvKSBOT19SRVRVUk47CiAKIC8vIEltcGxlbWVudGF0
aW9uIG9mIGEgSlBFRyBzcmMgb2JqZWN0IHRoYXQgdW5kZXJzdGFuZHMgb3VyIHN0YXRlIG1hY2hp
bmUKIHN0cnVjdCBkZWNvZGVyX3NvdXJjZV9tZ3IgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNw
cApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGVhOTM3M2IuLjMyZTY4YjkK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTYwLDYgKzYwLDcgQEAgY29uc3QgZG91YmxlIGNJ
bnZlcnNlR2FtbWEgPSAwLjQ1NDU1OwogY29uc3QgdW5zaWduZWQgbG9uZyBjTWF4UE5HU2l6ZSA9
IDEwMDAwMDBVTDsKIAogLy8gQ2FsbGVkIGlmIHRoZSBkZWNvZGluZyBvZiB0aGUgaW1hZ2UgZmFp
bHMuCitzdGF0aWMgdm9pZCBQTkdBUEkgZGVjb2RpbmdGYWlsZWQocG5nX3N0cnVjdHAgcG5nLCBw
bmdfY29uc3RfY2hhcnApIE5PX1JFVFVSTjsKIHN0YXRpYyB2b2lkIFBOR0FQSSBkZWNvZGluZ0Zh
aWxlZChwbmdfc3RydWN0cCBwbmcsIHBuZ19jb25zdF9jaGFycCkKIHsKICAgICBsb25nam1wKEpN
UEJVRihwbmcpLCAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9xdC9JbWFnZUZyYW1lUXQuY3BwCmluZGV4IGEzY2ZiZjYuLmMzY2VhMDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0lt
YWdlRnJhbWVRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcXQvSW1hZ2VGcmFtZVF0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIGJvb2wgSW1hZ2VGcmFt
ZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLVFQaXhtYXAqIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAorLypR
UGl4bWFwKiBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKIHsKICAgICBpZiAo
bV9waXhtYXAuaXNOdWxsKCkgJiYgIW1faW1hZ2UuaXNOdWxsKCkpIHsKICAgICAgICAgbV9waXht
YXAgPSBRUGl4bWFwOjpmcm9tSW1hZ2UobV9pbWFnZSk7CkBAIC0xMTQsNyArMTE0LDcgQEAgUVBp
eG1hcCogSW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0CiAgICAgfQogICAgIHJl
dHVybiBuZXcgUVBpeG1hcChtX3BpeG1hcCk7CiB9Ci0KKyovCiBib29sIEltYWdlRnJhbWU6Omhh
c0FscGhhKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9oYXNBbHBoYTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQucHJpIGIvU291cmNlL1dlYktpdC5wcmkKaW5kZXggNzBmN2UwZC4uMWIwY2Y2
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC5wcmkKKysrIGIvU291cmNlL1dlYktpdC5wcmkK
QEAgLTE4Nyw0ICsxODcsNiBAQCBDT05GSUcocXRfbWluaW1hbCkgewogICAgIERFRklORVMgKj0g
UVRfTk9fWFJFTkRFUgogfQogCitRTUFLRV9DWFhGTEFHUyArPSAtZworCiBjb250YWlucyhERUZJ
TkVTLCBRVF9OT19VSVRPT0xTKTogQ09ORklHIC09IHVpdG9vbHMK
</data>

          </attachment>
      

    </bug>

</bugzilla>