<?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>51297</bug_id>
          
          <creation_ts>2010-12-18 14:34:35 -0800</creation_ts>
          <short_desc>Clarify ImageBuffer and ImageData relationship</short_desc>
          <delta_ts>2011-01-02 02:39:07 -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>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>21354</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>ariya.hidayat</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>helder</cc>
    
    <cc>kling</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>324144</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-18 14:34:35 -0800</bug_when>
    <thetext>Right now we have platform/graphics/ImageBuffer, and html/ImageData.

ImageBuffer uses ImageData, which is clearly a layering violation.

ImageBuffer doesn&apos;t allow direct pixel access, but ImageBuffer does. However, you can&apos;t get a GraphicsContext from an ImageData.

Do we need both these classes? Would it be possible to merge them into something that both allows direct pixel access, and is able to provide a GraphicsContext?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324196</commentid>
    <comment_count>1</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-19 01:45:09 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; Right now we have platform/graphics/ImageBuffer, and html/ImageData.
&gt; 
&gt; ImageBuffer uses ImageData, which is clearly a layering violation.
This is correct and we also had some discussions about this in the past, but no one investigated on this yet.

&gt; 
&gt; ImageBuffer doesn&apos;t allow direct pixel access, but ImageBuffer does. However, you can&apos;t get a GraphicsContext from an ImageData.
Hm, I guess you mean that ImageBuffer it self doesn&apos;t provide a way for pixel manipulation but ImageData does in your first sentence. Nevertheless, ImageData in ImageBuffer is not the best solution. Talked with Niko about this topic and IIRC, his solutions was to return a byte array instead of ImageData on ImageBuffer and ImageData relies to that byte array in case of HTML Canvas.

To your last point. It is necessary for Filters that ImageBuffer provides a way for direct pixel manipulation but stillreturns an Image afterwards. E.g. feColorMatrix needs direct pixel manipulation, but if you want to composite the result of feColorMatrix you need the Image. But IIRC SVG filters never ask for a GraphicsContext after any direct pixel manipulation.

As conclusion, we shouldn&apos;t _need_ ImageData in ImageBuffer. ImageData is just used by HTML Canvas and should just ask for a byte array and the width and height of the requested image area. SVG on the other side doesn&apos;t even need ImageData. It was just the only way to get a pixel/byte array right now.

Just curious. Why did you assigned the bug to me? :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324210</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-19 10:54:35 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; (In reply to comment #0)
&gt; &gt; Right now we have platform/graphics/ImageBuffer, and html/ImageData.
&gt; &gt; 
&gt; &gt; ImageBuffer uses ImageData, which is clearly a layering violation.
&gt; This is correct and we also had some discussions about this in the past, but no one investigated on this yet.
&gt; 
&gt; &gt; 
&gt; &gt; ImageBuffer doesn&apos;t allow direct pixel access, but ImageBuffer does. However, you can&apos;t get a GraphicsContext from an ImageData.
&gt; Hm, I guess you mean that ImageBuffer it self doesn&apos;t provide a way for pixel manipulation but ImageData does in your first sentence.

Right, sorry.

&gt; Nevertheless, ImageData in ImageBuffer is not the best solution. Talked with Niko about this topic and IIRC, his solutions was to return a byte array instead of ImageData on ImageBuffer and ImageData relies to that byte array in case of HTML Canvas.

ImageData is really just a wrapper around a byte array. The real question is whether this always copies (premultiplied or not), or whether you allow direct pixel access.

I wonder if the lack of direct pixel access on ImageBuffer is because some platforms might not be able to implement this?

&gt; To your last point. It is necessary for Filters that ImageBuffer provides a way for direct pixel manipulation but stillreturns an Image afterwards. E.g. feColorMatrix needs direct pixel manipulation, but if you want to composite the result of feColorMatrix you need the Image. But IIRC SVG filters never ask for a GraphicsContext after any direct pixel manipulation.

I&apos;m looking at this outside of Filters (I want to use something like ContextShadow for CSS shadows, and ImageBuffer is a perfect fit, other than the lack of direct pixel access).

&gt; As conclusion, we shouldn&apos;t _need_ ImageData in ImageBuffer. ImageData is just used by HTML Canvas and should just ask for a byte array and the width and height of the requested image area. SVG on the other side doesn&apos;t even need ImageData. It was just the only way to get a pixel/byte array right now.

Another thing I&apos;d like to consider is why it&apos;s not easier to create an Image that simply wraps an ImageBuffer. GraphicsContext has a lot of method duplication for drawImageBuffer and drawImage, and I don&apos;t really see why we need both.

&gt; Just curious. Why did you assigned the bug to me? :-)

Feel free to assign it to Nobody. I just though you might be able to answer the question :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324299</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-19 23:06:28 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; (In reply to comment #0)
&gt; &gt; &gt; Right now we have platform/graphics/ImageBuffer, and html/ImageData.
&gt; &gt; &gt; 
&gt; &gt; &gt; ImageBuffer uses ImageData, which is clearly a layering violation.
&gt; &gt; This is correct and we also had some discussions about this in the past, but no one investigated on this yet.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; ImageBuffer doesn&apos;t allow direct pixel access, but ImageBuffer does. However, you can&apos;t get a GraphicsContext from an ImageData.
&gt; &gt; Hm, I guess you mean that ImageBuffer it self doesn&apos;t provide a way for pixel manipulation but ImageData does in your first sentence.
&gt; 
&gt; Right, sorry.
&gt; 
&gt; &gt; Nevertheless, ImageData in ImageBuffer is not the best solution. Talked with Niko about this topic and IIRC, his solutions was to return a byte array instead of ImageData on ImageBuffer and ImageData relies to that byte array in case of HTML Canvas.
&gt; 
&gt; ImageData is really just a wrapper around a byte array. The real question is whether this always copies (premultiplied or not), or whether you allow direct pixel access.
Right, but IIRC ImageData is a wrapper for CanvasPixelArray which is a wrapper for byte array :-P

&gt; 
&gt; I wonder if the lack of direct pixel access on ImageBuffer is because some platforms might not be able to implement this?
The most platforms support it (otherwise they won&apos;t be able to use HTML Canvas ImageData anyway).

&gt; 
&gt; &gt; To your last point. It is necessary for Filters that ImageBuffer provides a way for direct pixel manipulation but stillreturns an Image afterwards. E.g. feColorMatrix needs direct pixel manipulation, but if you want to composite the result of feColorMatrix you need the Image. But IIRC SVG filters never ask for a GraphicsContext after any direct pixel manipulation.
&gt; 
&gt; I&apos;m looking at this outside of Filters (I want to use something like ContextShadow for CSS shadows, and ImageBuffer is a perfect fit, other than the lack of direct pixel access).
Sure.

&gt; 
&gt; &gt; As conclusion, we shouldn&apos;t _need_ ImageData in ImageBuffer. ImageData is just used by HTML Canvas and should just ask for a byte array and the width and height of the requested image area. SVG on the other side doesn&apos;t even need ImageData. It was just the only way to get a pixel/byte array right now.
&gt; 
&gt; Another thing I&apos;d like to consider is why it&apos;s not easier to create an Image that simply wraps an ImageBuffer. GraphicsContext has a lot of method duplication for drawImageBuffer and drawImage, and I don&apos;t really see why we need both.
Can you explain it a bit more please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324425</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-20 08:52:50 -0800</bug_when>
    <thetext>&gt; &gt; Another thing I&apos;d like to consider is why it&apos;s not easier to create an Image that simply wraps an ImageBuffer. GraphicsContext has a lot of method duplication for drawImageBuffer and drawImage, and I don&apos;t really see why we need both.
&gt; Can you explain it a bit more please?

Rather than have GraphicsContext::drawImage() and GraphicsContext::drawImageBuffer() methods, why not make it really cheap to say

ImageBuffer* buffer;
buffer = .......

I see no reason why a bitmap image can&apos;t be created by simply wrapping an ImageBuffer.

RefPtr&lt;Image&gt; image = BitmapImage::create(buffer);

and then eliminate all the GraphicsContext::drawImageBuffer() methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328260</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-01 01:02:15 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; &gt; Another thing I&apos;d like to consider is why it&apos;s not easier to create an Image that simply wraps an ImageBuffer. GraphicsContext has a lot of method duplication for drawImageBuffer and drawImage, and I don&apos;t really see why we need both.
&gt; &gt; Can you explain it a bit more please?
&gt; 
&gt; Rather than have GraphicsContext::drawImage() and GraphicsContext::drawImageBuffer() methods, why not make it really cheap to say
&gt; 
&gt; ImageBuffer* buffer;
&gt; buffer = .......
&gt; 
&gt; I see no reason why a bitmap image can&apos;t be created by simply wrapping an ImageBuffer.
&gt; 
&gt; RefPtr&lt;Image&gt; image = BitmapImage::create(buffer);
&gt; 
&gt; and then eliminate all the GraphicsContext::drawImageBuffer() methods.

This is from a mail of dhyatt on webkit-dev - the reason why we have drawImage and drawImageBuffer. (and IIRC this was also a compromise to match the behavior of all platforms, I need to read the whole discussion again, to be sure).

&quot;The changes to ImageBuffer have landed.  Here is what port authors need to know:

Image* image() on ImageBuffer is gone.

It has been replaced with:

PassRefPtr&lt;Image&gt; copyImage()

This function should always simply copy the image.   It is used in any place where you want to get a snapshot of the ImageBuffer and not be broken if the ImageBuffer subsequently changes.

For drawing, callers should now use drawImageBuffer on GraphicsContext instead of drawImage.  drawImageBuffer internally just turns around and calls a draw function on ImageBuffer.  clipToImageBuffer now also turns around and calls clip on the ImageBuffer.&quot;

I also checked PassRefPtr&lt;ImageData&gt; getPre(Un)multipliedImageData(...). The only place where we really need ImageData is:

html/canvas/CanvasRenderingContext2D.cpp:    return buffer-&gt;getUnmultipliedImageData(scaledRect);

All other callers just need the pixel data itself. Shouldn&apos;t be a problem to change this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328265</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-01 04:15:29 -0800</bug_when>
    <thetext>Regarding to ImageData &lt;-&gt; ImageBuffer.
Like we discussed, ImageBuffer shouldn&apos;t use ImageData. ImageData doesn&apos;t need a relation to GraphicsContext, since it is just used as a pixel array with information of width and height of the canvas and is used by HTML Canvas for get/putImageData.
I guess I misunderstand your last comment. You suggest that ImageData directly manipulate the ImageBuffer, so that we don&apos;t need to call putImageData afterwards? I don&apos;t think so, because changes on the pixel array doesn&apos;t affect any ImageBuffer at all until we write the data back. So we definitely need a copy of the pixel information. The same for most of the SVG filters.
I suggest to return a ref counted ByteArray instead of ImageData in ImageBuffer. This way we get a copy and have no violation of the layering. What do you think Simon?

Btw. Shouldn&apos;t we move ImageData.h/cpp/idl from WebCore/html to WebCore/html/canvas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328287</commentid>
    <comment_count>7</comment_count>
      <attachid>77749</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-01 12:04:50 -0800</bug_when>
    <thetext>Created attachment 77749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328291</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-01 12:11:22 -0800</bug_when>
    <thetext>Attachment 77749 did not build on chromium:
Build output: http://queues.webkit.org/results/7238300</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328292</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-01 12:15:52 -0800</bug_when>
    <thetext>Attachment 77749 did not build on gtk:
Build output: http://queues.webkit.org/results/7264321</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328295</commentid>
    <comment_count>10</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-01 12:20:17 -0800</bug_when>
    <thetext>Attachment 77749 did not build on qt:
Build output: http://queues.webkit.org/results/7301309</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328296</commentid>
    <comment_count>11</comment_count>
      <attachid>77752</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-01 12:34:56 -0800</bug_when>
    <thetext>Created attachment 77752
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328298</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-01 12:43:30 -0800</bug_when>
    <thetext>Attachment 77752 did not build on chromium:
Build output: http://queues.webkit.org/results/7245301</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328302</commentid>
    <comment_count>13</comment_count>
      <attachid>77754</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-01 13:24:57 -0800</bug_when>
    <thetext>Created attachment 77754
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328303</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-01 13:33:11 -0800</bug_when>
    <thetext>Attachment 77754 did not build on chromium:
Build output: http://queues.webkit.org/results/7200322</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328304</commentid>
    <comment_count>15</comment_count>
      <attachid>77755</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-01 13:39:28 -0800</bug_when>
    <thetext>Created attachment 77755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328305</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-01 13:46:20 -0800</bug_when>
    <thetext>Attachment 77752 did not build on chromium:
Build output: http://queues.webkit.org/results/7247333</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328383</commentid>
    <comment_count>17</comment_count>
      <attachid>77755</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-02 02:38:54 -0800</bug_when>
    <thetext>Comment on attachment 77755
Patch

Clearing flags on attachment: 77755

Committed r74868: &lt;http://trac.webkit.org/changeset/74868&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328384</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-02 02:39:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77749</attachid>
            <date>2011-01-01 12:04:50 -0800</date>
            <delta_ts>2011-01-01 12:34:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51297-20110101210446.patch</filename>
            <type>text/plain</type>
            <size>67763</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDg0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA5IEBACisyMDExLTAxLTAxICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xh
cmlmeSBJbWFnZUJ1ZmZlciBhbmQgSW1hZ2VEYXRhIHJlbGF0aW9uc2hpcAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEyOTcKKworICAgICAgICBSZW1v
dmUgcmVmZXJlbmNlcyB0byBJbWFnZURhdGEgYW5kIENhbnZhc1BpeGVsQXJyYXkgZnJvbSBJbWFn
ZUJ1ZmZlciBhbmQgU1ZHIGZpbHRlci9tYXNrZXIgY29kZSwKKyAgICAgICAgc2luY2UgdGhpcyB3
YXMgYSBsYXllcmluZyB2aW9sYXRpb24sIGFuZCByZXBsYWNlZCBpdCBieSBCeXRlQXJyYXkuCisK
KyAgICAgICAgTm8gY2hhbmdlIG9mIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0IGFkZGVk
LgorCisgICAgICAgICogaHRtbC9JbWFnZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpJbWFnZURhdGEp
OgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmg6IEFkZGVkIG5ldyBjb25zdHJ1Y3RvciB3aXRo
IEJ5dGVBcnJheSBpbnB1dC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6d2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEYXRhOjpkYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1BpeGVsQXJyYXk6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNQaXhlbEFycmF5OjpDYW52YXNQaXhlbEFycmF5KToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5Lmg6IE5ldyBjb25jdHJ1Y3RvciB3aXRo
IEJ5dGVBcnJheSBpbnB1dCwgdXNlZCBieSBIVE1MIENhbnZhcy4KKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1BpeGVsQXJyYXk6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUGl4ZWxB
cnJheTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1BpeGVsQXJyYXk6OnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNQaXhlbEFycmF5OjpnZXQpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9uUGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjphcHBseSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNVbm11bHRpcGxpZWRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlw
bGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVs
dGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6cHV0SW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmRyYXdDb250ZW50SW50
b01hc2tJbWFnZSk6CisKIDIwMTEtMDEtMDEgIEtvbnN0YW50aW4gVG9rYXJldiAgPGFubnVsZW5A
eWFuZGV4LnJ1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2Vi
Q29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ltYWdl
RGF0YS5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDExIEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJ
bWFnZURhdGE6OmNyZWF0ZSgKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlRGF0YSh3aWR0
aCwgaGVpZ2h0KSk7CiB9CiAKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0
ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4g
Ynl0ZUFycmF5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VEYXRhKHdpZHRoLCBo
ZWlnaHQsIGJ5dGVBcnJheSkpOworfQorCiBJbWFnZURhdGE6OkltYWdlRGF0YSh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogICAgIDogbV93aWR0aCh3aWR0aCkKICAgICAsIG1faGVp
Z2h0KGhlaWdodCkKQEAgLTQzLDUgKzQ4LDEyIEBAIEltYWdlRGF0YTo6SW1hZ2VEYXRhKHVuc2ln
bmVkIHdpZHRoLCB1bnMKIHsKIH0KIAorSW1hZ2VEYXRhOjpJbWFnZURhdGEodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGJ5dGVBcnJheSkKKyAg
ICA6IG1fd2lkdGgod2lkdGgpCisgICAgLCBtX2hlaWdodChoZWlnaHQpCisgICAgLCBtX2RhdGEo
Q2FudmFzUGl4ZWxBcnJheTo6Y3JlYXRlKGJ5dGVBcnJheSkpCit7Cit9CisKIH0KIApJbmRleDog
V2ViQ29yZS9odG1sL0ltYWdlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9JbWFn
ZURhdGEuaAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDI1ICszMCwyOSBAQAogI2RlZmluZSBJbWFnZURhdGFfaAogCiAj
aW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgSW1hZ2VEYXRhIDogcHVibGljIFJlZkNv
dW50ZWQ8SW1hZ2VEYXRhPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IGNyZWF0ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKLQot
ICAgICAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICAg
ICAgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KLSAgICAgICAg
Q2FudmFzUGl4ZWxBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgSW1hZ2VEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpOwotICAgICAgICB1bnNpZ25lZCBtX3dpZHRoOwotICAgICAgICB1bnNpZ25lZCBt
X2hlaWdodDsKLSAgICAgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IG1fZGF0YTsKLSAgICB9
OworY2xhc3MgSW1hZ2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VEYXRhPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGUodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBj
cmVhdGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0cjxCeXRlQXJy
YXk+KTsKKworICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisgICAgQ2Fu
dmFzUGl4ZWxBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorCitw
cml2YXRlOgorICAgIEltYWdlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsK
KyAgICBJbWFnZURhdGEodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+KTsKKworICAgIHVuc2lnbmVkIG1fd2lkdGg7CisgICAgdW5zaWduZWQgbV9o
ZWlnaHQ7CisgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IG1fZGF0YTsKK307CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhl
bEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BpeGVs
QXJyYXkuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UGl4ZWxBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwyNCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBD
YW52YXNQaXhlbEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQaXhlbEFycmF5KGxlbmd0aCkpOwotICAgIH0KLSAg
ICAKLSAgICBDYW52YXNQaXhlbEFycmF5OjpDYW52YXNQaXhlbEFycmF5KHVuc2lnbmVkIGxlbmd0
aCkKLSAgICAgICAgOiBtX2RhdGEoV1RGOjpCeXRlQXJyYXk6OmNyZWF0ZShsZW5ndGgpKQotICAg
IHsKLSAgICB9Ci0gICAgCitQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IENhbnZhc1BpeGVs
QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDYW52YXNQaXhlbEFycmF5KGxlbmd0aCkpOworfQorCitQYXNzUmVmUHRyPENhbnZhc1BpeGVs
QXJyYXk+IENhbnZhc1BpeGVsQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEJ5dGVBcnJheT4gYnl0
ZUFycmF5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzUGl4ZWxBcnJheShieXRl
QXJyYXkpKTsKK30KKworQ2FudmFzUGl4ZWxBcnJheTo6Q2FudmFzUGl4ZWxBcnJheSh1bnNpZ25l
ZCBsZW5ndGgpCisgICAgOiBtX2RhdGEoQnl0ZUFycmF5OjpjcmVhdGUobGVuZ3RoKSkKK3sKK30K
KworQ2FudmFzUGl4ZWxBcnJheTo6Q2FudmFzUGl4ZWxBcnJheShQYXNzUmVmUHRyPEJ5dGVBcnJh
eT4gYnl0ZUFycmF5KQorICAgIDogbV9kYXRhKGJ5dGVBcnJheSkKK3sKK30KKwogfQpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHJldmlzaW9uIDc0NzgxKQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDM4ICszNyw0MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgY2xhc3Mg
Q2FudmFzUGl4ZWxBcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc1BpeGVsQXJyYXk+IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+
IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgV1RGOjpCeXRlQXJy
YXkqIGRhdGEoKSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLSAgICAgICAgY29uc3QgV1RGOjpC
eXRlQXJyYXkqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLSAgICAgICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5sZW5ndGgoKTsgfQotICAg
ICAgICAKLSAgICAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9kYXRhLT5zZXQoaW5kZXgsIHZhbHVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2RhdGEtPnNldChpbmRleCwgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIGdldCh1bnNpZ25lZCBpbmRleCwgdW5zaWdu
ZWQgY2hhciYgcmVzdWx0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9k
YXRhLT5nZXQoaW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBj
aGFyIGdldCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fZGF0YS0+Z2V0KGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgQ2FudmFzUGl4ZWxBcnJheSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBSZWZQdHI8V1RG
OjpCeXRlQXJyYXk+IG1fZGF0YTsKLSAgICB9OworY2xhc3MgQ2FudmFzUGl4ZWxBcnJheSA6IHB1
YmxpYyBSZWZDb3VudGVkPENhbnZhc1BpeGVsQXJyYXk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxC
eXRlQXJyYXk+KTsKKworICAgIEJ5dGVBcnJheSogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5nZXQo
KTsgfQorICAgIGNvbnN0IEJ5dGVBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5n
ZXQoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+bGVu
Z3RoKCk7IH0KKyAgICAKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgbV9kYXRhLT5zZXQoaW5kZXgsIHZhbHVlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgY2hhciB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIG1fZGF0YS0+c2V0KGluZGV4LCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
Z2V0KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBjaGFyJiByZXN1bHQpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9kYXRhLT5nZXQoaW5kZXgsIHJlc3VsdCk7CisgICAgfQorCisgICAg
dW5zaWduZWQgY2hhciBnZXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9kYXRhLT5nZXQoaW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYW52YXNQ
aXhlbEFycmF5KHVuc2lnbmVkIGxlbmd0aCk7CisgICAgQ2FudmFzUGl4ZWxBcnJheShQYXNzUmVm
UHRyPEJ5dGVBcnJheT4pOworCisgICAgUmVmUHRyPEJ5dGVBcnJheT4gbV9kYXRhOworfTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gNzQ3ODEpCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1ODcsNyArMTU4Nyw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBDYW52YXNS
ZW5kZXJpbmdDb24KICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzKCktPmJ1ZmZlcigp
OwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEo
c2NhbGVkUmVjdC5zaXplKCkpOwotICAgIHJldHVybiBidWZmZXItPmdldFVubXVsdGlwbGllZElt
YWdlRGF0YShzY2FsZWRSZWN0KTsKKyAgICByZXR1cm4gSW1hZ2VEYXRhOjpjcmVhdGUoc2NhbGVk
UmVjdC53aWR0aCgpLCBzY2FsZWRSZWN0LmhlaWdodCgpLCBidWZmZXItPmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShzY2FsZWRSZWN0KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHksIEV4
Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTYzNiw3ICsxNjM2LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnB1dEltYWdlRAogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7
CiAgICAgc291cmNlUmVjdC5tb3ZlKC1kZXN0T2Zmc2V0KTsKIAotICAgIGJ1ZmZlci0+cHV0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGRhdGEsIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQp
KTsKKyAgICBidWZmZXItPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShkYXRhLT5kYXRhKCktPmRh
dGEoKSwgSW50U2l6ZShkYXRhLT53aWR0aCgpLCBkYXRhLT5oZWlnaHQoKSksIHNvdXJjZVJlY3Qs
IEludFBvaW50KGRlc3RPZmZzZXQpKTsKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWRE
cmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDc0
NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCisjaW5jbHVkZSA8d3RmL0J5
dGVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC04MywxMSArODQsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGRyYXdzVXNpbmdDb3B5KCkgY29uc3Q7IC8v
IElmIHRoZSBpbWFnZSBidWZmZXIgaGFzIHRvIHJlbmRlciB1c2luZyBhIGNvcGllZCBpbWFnZSwg
aXQgd2lsbCByZXR1cm4gdHJ1ZS4KICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY29weUltYWdl
KCkgY29uc3Q7IC8vIFJldHVybiBhIG5ldyBpbWFnZSB0aGF0IGlzIGEgY29weSBvZiB0aGUgYnVm
ZmVyLgogCi0gICAgICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAg
ICAgIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYpIGNvbnN0OworICAgICAgICBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBw
dXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7Ci0gICAgICAgIHZvaWQgcHV0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50KTsKKyAgICAgICAgdm9pZCBwdXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoQnl0ZUFycmF5KiwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7CisgICAgICAgIHZv
aWQgcHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqLCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50KTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5ID0gMCkgY29uc3Q7CiAjaWYgIVBMQVRG
T1JNKENHKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MSwxMyArMTUxLDEzIEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29s
b3IKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci1QYXNzUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVy
RGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBn
ZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBk
YXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dl
dF90eXBlKGRhdGEubV9zdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOwogCi0g
ICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gcmVzdWx0ID0g
Qnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOwogICAg
IHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGRh
dGEubV9zdXJmYWNlKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRh
KCktPmRhdGEoKS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFEc3QgPSByZXN1bHQt
PmRhdGEoKTsKIAogICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IChyZWN0
LngoKSArIHJlY3Qud2lkdGgoKSkgPiBzaXplLndpZHRoKCkgfHwgKHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKSkgPiBzaXplLmhlaWdodCgpKQogICAgICAgICBtZW1zZXQoZGF0YURzdCwgMCwgcmVz
dWx0LT5kYXRhKCktPmxlbmd0aCgpKTsKQEAgLTE2OCw3ICsxNjgsNyBAQCBQYXNzUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R4ID0gLW9yaWdpbng7CiAg
ICAgICAgIG9yaWdpbnggPSAwOwogICAgIH0KLSAgICBpbnQgZW5keCA9IHJlY3QueCgpICsgcmVj
dC53aWR0aCgpOworICAgIGludCBlbmR4ID0gcmVjdC5yaWdodCgpOwogICAgIGlmIChlbmR4ID4g
c2l6ZS53aWR0aCgpKQogICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBudW1D
b2x1bW5zID0gZW5keCAtIG9yaWdpbng7CkBAIC0xNzksNyArMTc5LDcgQEAgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0eSA9IC1vcmlnaW55Owog
ICAgICAgICBvcmlnaW55ID0gMDsKICAgICB9Ci0gICAgaW50IGVuZHkgPSByZWN0LnkoKSArIHJl
Y3QuaGVpZ2h0KCk7CisgICAgaW50IGVuZHkgPSByZWN0LmJvdHRvbSgpOwogICAgIGlmIChlbmR5
ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7CiAgICAgaW50
IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKQEAgLTIwNiwyMSArMjA2LDIxIEBAIFBhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdFJvd3MgKz0gZGVz
dEJ5dGVzUGVyUm93OwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJl
c3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitQYXNz
UmVmUHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIHJldHVybiBnZXRJbWFnZURhdGE8VW5t
dWx0aXBsaWVkPihyZWN0LCBtX2RhdGEsIG1fc2l6ZSk7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VE
YXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0
JiByZWN0KSBjb25zdAorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGdldEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihyZWN0LCBtX2RhdGEsIG1fc2l6ZSk7CiB9
CiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgotdm9pZCBwdXRJbWFnZURhdGEoSW1h
Z2VEYXRhKiYgc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUp
Cit2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAg
ICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShkYXRhLm1fc3VyZmFjZSkgPT0gQ0FJUk9f
U1VSRkFDRV9UWVBFX0lNQUdFKTsKIApAQCAtMjUyLDEwICsyNTIsMTAgQEAgdm9pZCBwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhKiYgc291cmNlLCBjbwogICAgIEFTU0VSVChlbmR5IDw9IHNpemUuaGVp
Z2h0KCkpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRlc3R5OwogCi0gICAgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlLT53aWR0aCgpOworICAgIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKICAgICBpbnQgc3RyaWRlID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGRhdGEubV9zdXJmYWNlKTsKIAotICAgIHVuc2ln
bmVkIGNoYXIqIHNyY1Jvd3MgPSBzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCkgKyBvcmln
aW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKKyAgICB1bnNpZ25lZCBjaGFyKiBz
cmNSb3dzID0gc291cmNlLT5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmln
aW54ICogNDsKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewogICAgICAg
ICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRhdGFEc3QgKyBz
dHJpZGUgKiAoeSArIGRlc3R5KSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29s
dW1uczsgeCsrKSB7CkBAIC0yNzcsMTQgKzI3NywxNCBAQCB2b2lkIHB1dEltYWdlRGF0YShJbWFn
ZURhdGEqJiBzb3VyY2UsIGNvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtQ29sdW1ucywgbnVtUm93cyk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVs
dGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVu
bXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291
cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCkKIHsKLSAgICBwdXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJl
Y3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUpOworICAgIHB1dEltYWdlRGF0YTxVbm11bHRp
cGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEs
IG1fc2l6ZSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURh
dGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAg
IHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2lu
dCwgbV9kYXRhLCBtX3NpemUpOworICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3Vy
Y2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUpOwog
fQogCiAjaWYgIVBMQVRGT1JNKEdUSykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw3ICszMiw2IEBACiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlIDxBcHBs
aWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgpAQCAtMjUzLDEzICsyNTIsMTMgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChH
cmFwaGljc0NvbnRleHQqIAogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KLVBh
c3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgSW1hZ2VCdWZmZXJEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wg
YWNjZWxlcmF0ZVJlbmRlcmluZykKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBpbWFnZURhdGEsIGNv
bnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKIHsKLSAgICBQYXNz
UmVmUHRyPEltYWdlRGF0YT4gcmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5kYXRh
KCktPmRhdGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHJlc3VsdCA9IEJ5dGVB
cnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsKKyAgICB1bnNp
Z25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAw
IHx8IHJlY3QueSgpIDwgMCB8fCAocmVjdC54KCkgKyByZWN0LndpZHRoKCkpID4gc2l6ZS53aWR0
aCgpIHx8IChyZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAg
ICAgbWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAgaWYgKHJl
Y3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgp
IHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGF0YSwg
MCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAKICAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwogICAg
IGludCBkZXN0eCA9IDA7CkBAIC0yNjcsNyArMjY2LDcgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+
IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAgICBv
cmlnaW54ID0gMDsKICAgICB9Ci0gICAgaW50IGVuZHggPSByZWN0LngoKSArIHJlY3Qud2lkdGgo
KTsKKyAgICBpbnQgZW5keCA9IHJlY3QucmlnaHQoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lk
dGgoKSkKICAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9
IGVuZHggLSBvcmlnaW54OwpAQCAtMjc4LDcgKzI3Nyw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAg
b3JpZ2lueSA9IDA7CiAgICAgfQotICAgIGludCBlbmR5ID0gcmVjdC55KCkgKyByZWN0LmhlaWdo
dCgpOworICAgIGludCBlbmR5ID0gcmVjdC5ib3R0b20oKTsKICAgICBpZiAoZW5keSA+IHNpemUu
aGVpZ2h0KCkpCiAgICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dz
ID0gZW5keSAtIG9yaWdpbnk7CkBAIC0zNDAsMTcgKzMzOSwxNyBAQCBQYXNzUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYgcmVjdCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAg
aWYgKG1fYWNjZWxlcmF0ZVJlbmRlcmluZykKICAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIGdldEltYWdlRGF0YTxVbm11bHRp
cGxpZWQ+KHJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJpbmcpOwogfQog
Ci1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJ
bWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAogewogICAgIGlmIChtX2FjY2VsZXJhdGVSZW5kZXJpbmcpCiAgICAgICAgIENHQ29u
dGV4dEZsdXNoKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwpAQCAtMzU4LDcgKzM1Nyw3
IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHIKIH0KIAogdGVtcGxh
dGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci12b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqJiBz
b3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEltYWdlQnVmZmVyRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBib29s
IGFjY2VsZXJhdGVSZW5kZXJpbmcpCit2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3Vy
Y2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEltYWdlQnVmZmVyRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCiB7CiAgICAgQVNT
RVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwogICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdo
dCgpID4gMCk7CkBAIC0zODYsOCArMzg1LDggQEAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
KiYgc291cmNlLCBjbwogICAgIEFTU0VSVChlbmR5IDw9IHNpemUuaGVpZ2h0KCkpOwogICAgIGlu
dCBudW1Sb3dzID0gZW5keSAtIGRlc3R5OwogCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cg
PSA0ICogc291cmNlLT53aWR0aCgpOwotICAgIHVuc2lnbmVkIGNoYXIqIHNyY1Jvd3MgPSBzb3Vy
Y2UtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBv
cmlnaW54ICogNDsKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXpl
LndpZHRoKCk7CisgICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHNvdXJjZS0+ZGF0YSgpICsg
b3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7CiAgICAgdW5zaWduZWQgZGVz
dEJ5dGVzUGVyUm93OwogICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3dzOwogCkBAIC00NDIsMTgg
KzQ0MSwxOCBAQCB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2UsIGNvCiAgICAg
fQogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VE
YXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoQnl0
ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7CiAgICAgaWYgKG1fYWNj
ZWxlcmF0ZVJlbmRlcmluZykKICAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgcHV0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBz
b3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJp
bmcpOworICAgIHB1dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwg
c291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSwgbV9hY2NlbGVyYXRlUmVuZGVy
aW5nKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJ
bWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURh
dGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7CiAgICAgaWYg
KG1fYWNjZWxlcmF0ZVJlbmRlcmluZykKICAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNv
dXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSwgbV9hY2NlbGVyYXRl
UmVuZGVyaW5nKTsKKyAgICBwdXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3Vy
Y2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJh
dGVSZW5kZXJpbmcpOwogfQogCiBzdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAko
cmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsyNSwxMSBAQAogI2lmIEVOQUJMRShG
SUxURVJTKQogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJy
YXkuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisKKyNpbmNs
dWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciAoKkJsZW5kVHlw
ZSkodW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBj
aGFyIGFscGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIpOwogCkBAIC0xMDAsMTkgKzEwMCwxNSBA
QCB2b2lkIEZFQmxlbmQ6OmFwcGx5KCkKICAgICBpZiAobV9tb2RlIDw9IEZFQkxFTkRfTU9ERV9V
TktOT1dOIHx8IG1fbW9kZSA+IEZFQkxFTkRfTU9ERV9MSUdIVEVOKQogICAgICAgICByZXR1cm47
CiAKLSAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBCeXRlQXJyYXkqIGRzdFBpeGVs
QXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRzdFBp
eGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdS
ZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhQSA9IGluLT5hc1ByZW11
bHRpcGxpZWRJbWFnZShlZmZlY3RBRHJhd2luZ1JlY3QpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4
ZWxBcnJheUEgPSBzcmNJbWFnZURhdGFBLT5kYXRhKCktPmRhdGEoKTsKKyAgICBSZWZQdHI8Qnl0
ZUFycmF5PiBzcmNQaXhlbEFycmF5QSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RB
RHJhd2luZ1JlY3QpOwogCiAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
UmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhQiA9IGluMi0+YXNQcmVtdWx0aXBsaWVkSW1h
Z2UoZWZmZWN0QkRyYXdpbmdSZWN0KTsKLSAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXlCID0g
c3JjSW1hZ2VEYXRhQi0+ZGF0YSgpLT5kYXRhKCk7Ci0KLSAgICBCeXRlQXJyYXkqIGRzdFBpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgUmVmUHRyPEJ5dGVBcnJh
eT4gc3JjUGl4ZWxBcnJheUIgPSBpbjItPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVjdEJEcmF3
aW5nUmVjdCk7CiAKICAgICAvLyBLZWVwIHN5bmNocm9uaXplZCB3aXRoIEJsZW5kTW9kZVR5cGUK
ICAgICBzdGF0aWMgY29uc3QgQmxlbmRUeXBlIGNhbGxFZmZlY3RbXSA9IHt1bmtub3duLCBub3Jt
YWwsIG11bHRpcGx5LCBzY3JlZW4sIGRhcmtlbiwgbGlnaHRlbn07CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZp
c2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogCiAjaW5jbHVkZSAi
RmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAKKyNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTY0LDI4ICsxNjQsMjcgQEAgdm9p
ZCBGRUNvbG9yTWF0cml4OjphcHBseSgpCiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJh
d0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAg
IEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBwaXhlbEFycmF5
ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICBSZWZQdHI8Qnl0ZUFycmF5PiBwaXhl
bEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3Qp
OwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfVU5LTk9XTjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQ
RV9NQVRSSVg+KHBpeGVsQXJyYXksIG1fdmFsdWVzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURTogCi0gICAgICAgICAgICBlZmZl
Y3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJheSwgbV92YWx1ZXMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURToKLSAgICAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJP
VEFURT4ocGl4ZWxBcnJheSwgbV92YWx1ZXMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgICAgICBl
ZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFycmF5
LCBtX3ZhbHVlcyk7Ci0gICAgICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGVm
ZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheS5nZXQoKSwgbV92
YWx1ZXMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRV
UkFURTogCisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFPihw
aXhlbEFycmF5LmdldCgpLCBtX3ZhbHVlcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFU
UklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5LmdldCgpLCBtX3ZhbHVlcyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Cisg
ICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBp
eGVsQXJyYXkuZ2V0KCksIG1fdmFsdWVzKTsKKyAgICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUp
OworICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAg
ICByZXN1bHRJbWFnZS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKHBpeGVsQXJyYXkuZ2V0KCks
IGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgRkVD
b2xvck1hdHJpeDo6ZHVtcCgpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCShyZXZpc2lvbiA3NDc4
MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogCiAjaW5jbHVkZSAiRmls
dGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAKKyNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTU2LDggKzE1Niw4IEBAIHZvaWQgRkVD
b21wb25lbnRUcmFuc2Zlcjo6YXBwbHkoKQogICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBJbWFnZURhdGEqIGltYWdlRGF0YSA9IGNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgQnl0ZUFycmF5KiBw
aXhlbEFycmF5ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIXBp
eGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGNoYXIgclZhbHVlc1sy
NTZdLCBnVmFsdWVzWzI1Nl0sIGJWYWx1ZXNbMjU2XSwgYVZhbHVlc1syNTZdOwpAQCAtMTcxLDgg
KzE3MSw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkoKQogICAgICAgICAoKmNh
bGxFZmZlY3RbdHJhbnNmZXJGdW5jdGlvbltjaGFubmVsXS50eXBlXSkodGFibGVzW2NoYW5uZWxd
LCB0cmFuc2ZlckZ1bmN0aW9uW2NoYW5uZWxdKTsKIAogICAgIEludFJlY3QgZHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZEltYWdlKGltYWdlRGF0YSwgZHJhd2luZ1JlY3Qp
OwotICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7
CisgICAgaW4tPmNvcHlVbm11bHRpcGxpZWRJbWFnZShwaXhlbEFycmF5LCBkcmF3aW5nUmVjdCk7
CiAKICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxB
cnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiA3NDc4MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDggQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorCisjaW5j
bHVkZSA8d3RmL0J5dGVBcnJheS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE5MCwx
NyArMTkxLDE3IEBAIHZvaWQgRkVDb21wb3NpdGU6OmFwcGx5KCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0g
ICAgICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgQnl0ZUFycmF5KiBk
c3RQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAg
IGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBJbnRS
ZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJ
bWFnZURhdGEgPSBpbi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0QURyYXdpbmdSZWN0KTsK
KyAgICAgICAgUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxBcnJheSA9IGluLT5hc1ByZW11bHRp
cGxpZWRJbWFnZShlZmZlY3RBRHJhd2luZ1JlY3QpOwogCiAgICAgICAgIEludFJlY3QgZWZmZWN0
QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVkSW1hZ2UocmVz
dWx0SW1hZ2UsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAgICAgIGluMi0+Y29weVByZW11bHRp
cGxpZWRJbWFnZShkc3RQaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QpOwogCi0gICAgICAg
IGFyaXRobWV0aWMoc3JjSW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgcmVzdWx0SW1hZ2UtPmRh
dGEoKS0+ZGF0YSgpLCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKKyAgICAgICAgYXJpdGhtZXRp
YyhzcmNQaXhlbEFycmF5LmdldCgpLCBkc3RQaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBt
X2s0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkocmV2aXNp
b24gNzQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDkgQEAKICNpZiBFTkFCTEUo
RklMVEVSUykKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCiAKLSNpbmNsdWRlICJDYW52
YXNQaXhlbEFycmF5LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCisKKyNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIg
Y2xhbXAKIH0KIAogdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lO
TElORSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKENhbnZhc1BpeGVsQXJyYXkqIGltYWdlLCBp
bnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBDYW52
YXNQaXhlbEFycmF5KiBzcmMpCitBTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVzdGluYXRpb25QaXhl
bHMoQnl0ZUFycmF5KiBpbWFnZSwgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2
aXNvciwgZmxvYXQgYmlhcywgQnl0ZUFycmF5KiBzcmMpCiB7CiAgICAgdW5zaWduZWQgY2hhciBt
YXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3Rh
bHNbM10gLyBkaXZpc29yICsgYmlhcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kp
CkBAIC0zNzksNyArMzc5LDcgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjphcHBseSgpCiAgICAg
aWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEltYWdlRGF0YSog
cmVzdWx0SW1hZ2U7CisgICAgQnl0ZUFycmF5KiByZXN1bHRJbWFnZTsKICAgICBpZiAobV9wcmVz
ZXJ2ZUFscGhhKQogICAgICAgICByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7CiAgICAgZWxzZQpAQCAtMzg5LDE2ICszODksMTYgQEAgdm9pZCBGRUNvbnZvbHZl
TWF0cml4OjphcHBseSgpCiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAKLSAg
ICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheTsKKyAgICBSZWZQdHI8Qnl0
ZUFycmF5PiBzcmNQaXhlbEFycmF5OwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAg
IHNyY1BpeGVsQXJyYXkgPSBpbi0+YXNVbm11bHRpcGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVj
dCktPmRhdGEoKTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5hc1VubXVsdGlwbGllZElt
YWdlKGVmZmVjdERyYXdpbmdSZWN0KTsKICAgICBlbHNlCi0gICAgICAgIHNyY1BpeGVsQXJyYXkg
PSBpbi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCk7Cisg
ICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJh
d2luZ1JlY3QpOwogCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgp
LnNpemUoKTsKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwogICAgIHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5ID0gc3JjUGl4ZWxBcnJheS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEu
ZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7CisgICAgcGFpbnRpbmdEYXRhLmRz
dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZTsKICAgICBwYWludGluZ0RhdGEud2lkdGggPSBwYWlu
dFNpemUud2lkdGgoKTsKICAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gcGFpbnRTaXplLmhlaWdo
dCgpOwogICAgIHBhaW50aW5nRGF0YS5iaWFzID0gbV9iaWFzICogMjU1OwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
CShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbnZvbHZlTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDggKzg0LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCiAgICAgc3RydWN0IFBhaW50
aW5nRGF0YSB7Ci0gICAgICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAg
ICAgIENhbnZhc1BpeGVsQXJyYXkqIGRzdFBpeGVsQXJyYXk7CisgICAgICAgIEJ5dGVBcnJheSog
c3JjUGl4ZWxBcnJheTsKKyAgICAgICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5OwogICAgICAg
ICBpbnQgd2lkdGg7CiAgICAgICAgIGludCBoZWlnaHQ7CiAgICAgICAgIGZsb2F0IGJpYXM7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsOCBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisKKyNpbmNsdWRlIDx3dGYvQnl0ZUFy
cmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTAsMTkgKzkxLDE1IEBAIHZvaWQg
RkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KCkKICAgICBpZiAobV94Q2hhbm5lbFNlbGVjdG9yID09
IENIQU5ORUxfVU5LTk9XTiB8fCBtX3lDaGFubmVsU2VsZWN0b3IgPT0gQ0hBTk5FTF9VTktOT1dO
KQogICAgICAgICByZXR1cm47CiAKLSAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBC
eXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJl
Y3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VE
YXRhQSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RBRHJhd2luZ1JlY3QpOwotICAg
IEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUEgPSBzcmNJbWFnZURhdGFBLT5kYXRhKCktPmRhdGEo
KTsKKyAgICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5QSA9IGluLT5hc1ByZW11bHRp
cGxpZWRJbWFnZShlZmZlY3RBRHJhd2luZ1JlY3QpOwogCiAgICAgSW50UmVjdCBlZmZlY3RCRHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhQiA9IGluMi0+
YXNVbm11bHRpcGxpZWRJbWFnZShlZmZlY3RCRHJhd2luZ1JlY3QpOwotICAgIEJ5dGVBcnJheSog
c3JjUGl4ZWxBcnJheUIgPSBzcmNJbWFnZURhdGFCLT5kYXRhKCktPmRhdGEoKTsKLQotICAgIEJ5
dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCktPmRhdGEoKTsKKyAg
ICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5QiA9IGluMi0+YXNVbm11bHRpcGxpZWRJ
bWFnZShlZmZlY3RCRHJhd2luZ1JlY3QpOwogCiAgICAgQVNTRVJUKHNyY1BpeGVsQXJyYXlBLT5s
ZW5ndGgoKSA9PSBzcmNQaXhlbEFycmF5Qi0+bGVuZ3RoKCkpOwogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAJKHJl
dmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCiAKKyNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KIAogdXNpbmcgc3RkOjptYXg7CkBAIC0xNzEsMTQgKzE3MSwxNCBAQCB2b2lk
IEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJh
eSogc3JjUGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IGlmICghc3JjUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUlt
YWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkSW1hZ2UocmVzdWx0SW1hZ2UsIGVmZmVjdERy
YXdpbmdSZWN0KTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRJbWFnZShzcmNQaXhlbEFycmF5
LCBlZmZlY3REcmF3aW5nUmVjdCk7CiAKICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQogICAg
ICAgICByZXR1cm47CkBAIC0xODgsOSArMTg4LDggQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBw
bHkoKQogICAgIGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCksIGtlcm5lbFNpemVYLCBrZXJu
ZWxTaXplWSwgbV9zdGRYLCBtX3N0ZFkpOwogCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBy
ZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gdG1wSW1h
Z2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgQnl0ZUFycmF5KiB0bXBQaXhlbEFycmF5ID0gdG1wSW1hZ2VEYXRhLT5k
YXRhKCktPmRhdGEoKTsKKyAgICBSZWZQdHI8Qnl0ZUFycmF5PiB0bXBJbWFnZURhdGEgPSBCeXRl
QXJyYXk6OmNyZWF0ZShwYWludFNpemUud2lkdGgoKSAqIHBhaW50U2l6ZS5oZWlnaHQoKSAqIDQp
OworICAgIEJ5dGVBcnJheSogdG1wUGl4ZWxBcnJheSA9IHRtcEltYWdlRGF0YS5nZXQoKTsKIAog
ICAgIGludCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CiAgICAgaW50IGR4TGVmdCA9
IDA7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksNiBAQAog
I2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUg
IkNhbnZhc1BpeGVsQXJyYXkuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJM
aWdodFNvdXJjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMzgsMTUgKzMzNiwxNCBA
QCB2b2lkIEZFTGlnaHRpbmc6OmFwcGx5KCkKICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBCeXRlQXJy
YXkqIHNyY1BpeGVsQXJyYXkgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IGlmICghc3JjUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUlt
YWdlKGZhbHNlKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+
Y29weVVubXVsdGlwbGllZEltYWdlKHJlc3VsdEltYWdlLCBlZmZlY3REcmF3aW5nUmVjdCk7Ci0g
ICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgp
OworICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkSW1hZ2Uoc3JjUGl4ZWxBcnJheSwgZWZmZWN0RHJh
d2luZ1JlY3QpOwogCiAgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3Ro
ZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKICAgICAvLyBzdGFu
ZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2Ug
RmlyZWZveCkgaGFzIHN0cmFuZ2UKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiRkVNb3JwaG9sb2d5LmgiCiAKICNpbmNs
dWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAorI2luY2x1ZGUgPHd0Zi9C
eXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHVzaW5nIHN0ZDo6bWluOwpA
QCAtOTgsOCArOTgsOCBAQCB2b2lkIEZFTW9ycGhvbG9neTo6YXBwbHkoKQogICAgIGlmICghaW4t
Pmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbWFnZURhdGEqIHJlc3VsdElt
YWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJ
bWFnZSkKKyAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwpAQCAtMTExLDkgKzEx
MSw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjphcHBseSgpCiAgICAgaW50IHJhZGl1c1kgPSBzdGF0
aWNfY2FzdDxpbnQ+KGZsb29yZihmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX3JhZGl1c1kp
KSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdl
RGF0YT4gc3JjSW1hZ2VEYXRhID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVjdERyYXdp
bmdSZWN0KTsKLSAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBzcmNJbWFnZURhdGEtPmRh
dGEoKS0+ZGF0YSgpOwotICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdl
LT5kYXRhKCktPmRhdGEoKTsKKyAgICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5ID0g
aW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVjdERyYXdpbmdSZWN0KTsKIAogICAgIGludCBl
ZmZlY3RXaWR0aCA9IGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiA0OwogICAgIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNpbmNs
dWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgogCisjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMyMiwxNCArMzIyLDEzIEBA
IHZvaWQgRkVUdXJidWxlbmNlOjphcHBseSgpCiB7CiAgICAgaWYgKGhhc1Jlc3VsdCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBCeXRlQXJyYXkq
IHBpeGVsQXJyYXkgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICgh
cGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGFic29sdXRlUGFpbnRSZWN0
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBCeXRlQXJyYXkqIHBpeGVsQXJy
YXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7CiAgICAgUGFpbnRpbmdEYXRhIHBhaW50
aW5nRGF0YShtX3NlZWQsIHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
LnNpemUoKSkpOwogICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOwogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkocmV2
aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsOCBAQAogCiAjaWYgRU5BQkxF
KEZJTFRFUlMpCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCisKKyNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtODIsMzIgKzgzLDMxIEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VC
dWZmZXIKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSwgQ29sb3JTcGFjZUxpbmVhclJHQik7CiAgICAgSW50UmVj
dCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkp
OwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC5nZXQoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC5nZXQoKSwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25S
ZWN0LCBJbnRQb2ludCgpKTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQt
PnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgp
LCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5n
ZXQoKSwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgp
KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAotUGFzc1JlZlB0
cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6YXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRS
ZWN0JiByZWN0KQorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEZpbHRlckVmZmVjdDo6YXNVbm11bHRp
cGxpZWRJbWFnZShjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gaW1hZ2VEYXRhID0gQnl0ZUFycmF5OjpjcmVhdGUo
cmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOwogICAgIGNvcHlVbm11bHRpcGxpZWRJ
bWFnZShpbWFnZURhdGEuZ2V0KCksIHJlY3QpOwogICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFz
ZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gRmlsdGVyRWZmZWN0Ojphc1ByZW11bHRp
cGxpZWRJbWFnZShjb25zdCBJbnRSZWN0JiByZWN0KQorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEZp
bHRlckVmZmVjdDo6YXNQcmVtdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IGltYWdlRGF0
YSA9IEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsK
ICAgICBjb3B5UHJlbXVsdGlwbGllZEltYWdlKGltYWdlRGF0YS5nZXQoKSwgcmVjdCk7CiAgICAg
cmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7CiB9CiAKLWlubGluZSB2b2lkIEZpbHRlckVmZmVj
dDo6Y29weUltYWdlQnl0ZXMoSW1hZ2VEYXRhKiBzb3VyY2UsIEltYWdlRGF0YSogZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmIHJlY3QpCitpbmxpbmUgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlJ
bWFnZUJ5dGVzKEJ5dGVBcnJheSogc291cmNlLCBCeXRlQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewogICAgIC8vIENvcHkgdGhlIG5lY2Vzc2FyeSBsaW5lcy4KLSAg
ICBBU1NFUlQoSW50U2l6ZShkZXN0aW5hdGlvbi0+d2lkdGgoKSwgZGVzdGluYXRpb24tPmhlaWdo
dCgpKSA9PSByZWN0LnNpemUoKSk7CiAgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8
IDAgfHwgcmVjdC5ib3R0b20oKSA+IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSB8fCByZWN0
LmJvdHRvbSgpID4gbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSkKLSAgICAgICAgbWVtc2V0
KGRlc3RpbmF0aW9uLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi0+ZGF0
YSgpLT5sZW5ndGgoKSk7CisgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi0+ZGF0YSgpLCAwLCBk
ZXN0aW5hdGlvbi0+bGVuZ3RoKCkpOwogCiAgICAgaW50IHhPcmlnaW4gPSByZWN0LngoKTsKICAg
ICBpbnQgeERlc3QgPSAwOwpAQCAtMTMyLDggKzEzMiw4IEBAIGlubGluZSB2b2lkIEZpbHRlckVm
ZmVjdDo6Y29weUltYWdlQnl0ZXMKICAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0
OwogICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gcmVjdC53aWR0aCgpICogNDsKICAgICBp
bnQgc291cmNlU2NhbmxpbmUgPSBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiA0OwotICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi0+ZGF0YSgpLT5k
YXRhKCktPmRhdGEoKSArICgoeURlc3QgKiByZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAg
ICB1bnNpZ25lZCBjaGFyICpzb3VyY2VQaXhlbCA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRhKCktPmRh
dGEoKSArICgoeU9yaWdpbiAqIG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSkgKyB4T3JpZ2lu
KSAqIDQ7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9u
LT5kYXRhKCkgKyAoKHlEZXN0ICogcmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7CisgICAgdW5z
aWduZWQgY2hhciAqc291cmNlUGl4ZWwgPSBzb3VyY2UtPmRhdGEoKSArICgoeU9yaWdpbiAqIG1f
YWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CiAKICAgICB3aGlsZSAo
eU9yaWdpbiA8IHlFbmQpIHsKICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJj
ZVBpeGVsLCBzaXplKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBpbmxpbmUgdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlJbWFnZUJ5dGVzCiAgICAgfQogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVVu
bXVsdGlwbGllZEltYWdlKEltYWdlRGF0YSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZEltYWdlKEJ5dGVBcnJheSog
ZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3Vs
dCgpKTsKIApAQCAtMTUyLDkgKzE1Miw5IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0
aXBsaWVkSW1hZ2UKICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgICAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIqIHNvdXJjZUNvbXBvbmVudCA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkt
PmRhdGEoKS0+ZGF0YSgpOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb25D
b21wb25lbnQgPSBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+ZGF0
YSgpOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEJ5dGVBcnJheTo6
Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3Qu
aGVpZ2h0KCkgKiA0KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNvdXJjZUNvbXBvbmVu
dCA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CisgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyKiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmRhdGEoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGVuZCA9IHNvdXJjZUNvbXBv
bmVudCArIChtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0
LmhlaWdodCgpICogNCk7CiAgICAgICAgICAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5k
KSB7CiAgICAgICAgICAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwpAQCAt
MTc2LDcgKzE3Niw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UK
ICAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBkZXN0
aW5hdGlvbiwgcmVjdCk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGll
ZEltYWdlKEltYWdlRGF0YSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lk
IEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRJbWFnZShCeXRlQXJyYXkqIGRlc3RpbmF0
aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAK
QEAgLTE4NSw5ICsxODUsOSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRJ
bWFnCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQogICAgICAgICAgICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBz
b3VyY2VDb21wb25lbnQgPSBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCktPmRhdGEo
KS0+ZGF0YSgpOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb25Db21wb25l
bnQgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsK
KyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVh
dGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWln
aHQoKSAqIDQpOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc291cmNlQ29tcG9uZW50ID0g
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciogZGVzdGluYXRpb25Db21wb25lbnQgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpOwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZW5kID0gc291cmNlQ29tcG9uZW50
ICsgKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVp
Z2h0KCkgKiA0KTsKICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsK
ICAgICAgICAgICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CkBAIC0yMTcs
MjUgKzIxNywyNSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1CiAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKLUltYWdlRGF0YSogRmls
dGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCitCeXRlQXJyYXkqIEZp
bHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogewogICAgIC8vIE9u
bHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7
CiAgICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKICAgICBpZiAobV9hYnNvbHV0ZVBh
aW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRo
KCksIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpOworICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBCeXRlQXJyYXk6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkg
KiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpICogNCk7CiAgICAgcmV0dXJuIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CiB9CiAKLUltYWdlRGF0YSogRmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorQnl0ZUFycmF5KiBGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgLy8gT25seSBvbmUgcmVz
dWx0IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKICAgICBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJz
b2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpOworICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gQnl0ZUFycmF5OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpICogbV9hYnNv
bHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOwogICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5nZXQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0
IHsgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsgfQogICAgIEltYWdlQnVmZmVyKiBhc0lt
YWdlQnVmZmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGFzVW5tdWx0aXBsaWVkSW1h
Z2UoY29uc3QgSW50UmVjdCYpOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBhc1ByZW11bHRp
cGxpZWRJbWFnZShjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkSW1h
Z2UoSW1hZ2VEYXRhKiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29w
eVByZW11bHRpcGxpZWRJbWFnZShJbWFnZURhdGEqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGFzVW5tdWx0aXBsaWVkSW1hZ2UoY29uc3Qg
SW50UmVjdCYpOworICAgIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBhc1ByZW11bHRpcGxpZWRJbWFn
ZShjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkSW1hZ2UoQnl0ZUFy
cmF5KiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgY29weVByZW11bHRp
cGxpZWRJbWFnZShCeXRlQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7CiAKICAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZl
Y3RzOyB9CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7CkBA
IC0xMTAsMTMgKzExMCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgRmlsdGVyRWZmZWN0KEZpbHRlciop
OwogCiAgICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1h
Z2VEYXRhKiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIEltYWdlRGF0YSog
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgQnl0ZUFycmF5KiBjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIEJ5dGVBcnJheSogY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7CiAKIHByaXZhdGU6CiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBt
X2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsK
KyAgICBSZWZQdHI8Qnl0ZUFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKICAgICBG
aWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBib29sIG1fYWxwaGFJbWFn
ZTsKQEAgLTEyOSw3ICsxMjksNyBAQCBwcml2YXRlOgogICAgIEZpbHRlciogbV9maWx0ZXI7CiAK
IHByaXZhdGU6Ci0gICAgaW5saW5lIHZvaWQgY29weUltYWdlQnl0ZXMoSW1hZ2VEYXRhKiBzb3Vy
Y2UsIEltYWdlRGF0YSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKKyAgICBpbmxpbmUg
dm9pZCBjb3B5SW1hZ2VCeXRlcyhCeXRlQXJyYXkqIHNvdXJjZSwgQnl0ZUFycmF5KiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFy
aWFibGVzIGFyZSBTVkcgc3BlY2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS4KICAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NTYxNC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzgsMTIgKzE3OCwxMiBAQCB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
CiB9CiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgotUGFzc1JlZlB0cjxJbWFnZURh
dGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5
PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRh
JiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHJlc3VsdC0+ZGF0YSgpLT5kYXRhKCkt
PmRhdGEoKTsKKyAgICBSZWZQdHI8Qnl0ZUFycmF5PiByZXN1bHQgPSBCeXRlQXJyYXk6OmNyZWF0
ZShyZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpICogNCk7CisgICAgdW5zaWduZWQgY2hhciog
ZGF0YSA9IHJlc3VsdC0+ZGF0YSgpOwogCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0Lnko
KSA8IDAgfHwgKHJlY3QueCgpICsgcmVjdC53aWR0aCgpKSA+IHNpemUud2lkdGgoKSB8fCAocmVj
dC55KCkgKyByZWN0LmhlaWdodCgpKSA+IHNpemUuaGVpZ2h0KCkpCisgICAgaWYgKHJlY3QueCgp
IDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgpIHx8IHJl
Y3QuYm90dG9tKCkgPiBzaXplLmhlaWdodCgpKQogICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVz
dWx0LT5kYXRhKCktPmxlbmd0aCgpKTsKIAogICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7CkBA
IC0xOTIsNyArMTkyLDcgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25z
dAogICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAgICBvcmlnaW54ID0gMDsKICAgICB9
Ci0gICAgaW50IGVuZHggPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKTsKKyAgICBpbnQgZW5keCA9
IHJlY3QucmlnaHQoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5k
eCA9IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwpA
QCAtMjAzLDcgKzIwMyw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29u
c3QKICAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7CiAgICAg
fQotICAgIGludCBlbmR5ID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOworICAgIGludCBlbmR5
ID0gcmVjdC5ib3R0b20oKTsKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAg
IGVuZHkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7
CkBAIC0yNTcsMTUgKzI1NywxNSBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRh
KGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZm
ZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAor
UGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRh
PFVubXVsdGlwbGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUpOwogfQogCi1QYXNzUmVmUHRyPElt
YWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYgcmVjdCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0
UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAg
IHJldHVybiBnZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUp
OwogfQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHByZW11
bHRpcGx5QUIKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci12b2lkIHB1dElt
YWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3ZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY29uc3Qg
SW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgSW1hZ2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBz
aXplKQogewogICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQo
c291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwpAQCAtMzE1LDE0ICszMTUsMTQgQEAgdm9pZCBwdXRJ
bWFnZURhdGEoSW1hZ2VEYXRhKiYgc291cmNlLCBjbwogICAgIEFTU0VSVChlbmR5IDw9IHNpemUu
aGVpZ2h0KCkpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRlc3R5OwogCi0gICAgdW5zaWdu
ZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlLT53aWR0aCgpOworICAgIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKIAogICAgIC8vIE5PVEU6IEZv
ciB1bm11bHRpcGxpZWQgaW5wdXQgZGF0YSwgd2UgZG8gdGhlIHByZW11bHRpcGxpY2F0aW9uIGJl
bG93LgogICAgIFFJbWFnZSBpbWFnZShudW1Db2x1bW5zLCBudW1Sb3dzLCBRSW1hZ2U6OkZvcm1h
dF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CiAgICAgdWNoYXIqIGJpdHMgPSBpbWFnZS5iaXRzKCk7
CiAgICAgY29uc3QgaW50IGJ5dGVzUGVyTGluZSA9IGltYWdlLmJ5dGVzUGVyTGluZSgpOwogCi0g
ICAgY29uc3QgcXVpbnQzMiogc3JjU2NhbkxpbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjb25z
dCBxdWludDMyKj4oc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsgb3JpZ2lueSAqIHNy
Y0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpOworICAgIGNvbnN0IHF1aW50MzIqIHNyY1NjYW5M
aW5lID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgcXVpbnQzMio+KHNvdXJjZS0+ZGF0YSgp
ICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpOwogCiAgICAgaWYgKG11
bHRpcGxpZWQgPT0gVW5tdWx0aXBsaWVkKSB7CiAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bnVtUm93czsgKyt5KSB7CkBAIC0zNjcsMTQgKzM2NywxNCBAQCB2b2lkIHB1dEltYWdlRGF0YShJ
bWFnZURhdGEqJiBzb3VyY2UsIGNvCiAgICAgICAgIGRhdGEubV9wYWludGVyLT5yZXN0b3JlKCk7
CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURh
dGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShCeXRl
QXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBwdXRJbWFnZURh
dGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBt
X3NpemUpOworICAgIHB1dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6
ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit2b2lk
IEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5dGVBcnJheSogc291cmNl
LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBs
aWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUpOworICAg
IHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJl
Y3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUpOwogfQogCiAvLyBXZSBnZXQgYSBtaW1lVHlw
ZSBoZXJlIGJ1dCBRSW1hZ2VXcml0ZXIgZG9lcyBub3Qgc3VwcG9ydCBtaW1ldHlwZXMgYnV0Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDIyICsxNTYsMjMg
QEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvcgogfQogCiB0ZW1wbGF0
ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgCitQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFNr
Qml0bWFwJiBiaXRtYXAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRTaXplJiBzaXplKQogewotICAgIFJlZlB0cjxJbWFnZURhdGE+IHJlc3VsdCA9IEltYWdl
RGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgUmVmUHRyPEJ5
dGVBcnJheT4gcmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5o
ZWlnaHQoKSAqIDQpOwogCiAgICAgaWYgKGJpdG1hcC5jb25maWcoKSA9PSBTa0JpdG1hcDo6a05v
X0NvbmZpZykgewogICAgICAgICAvLyBUaGlzIGlzIGFuIGVtcHR5IFNrQml0bWFwIHRoYXQgY291
bGQgbm90IGJlIGNvbmZpZ3VyZWQuCiAgICAgICAgIEFTU0VSVCghc2l6ZS53aWR0aCgpIHx8ICFz
aXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHJlc3Vs
dC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVz
dWx0LT5kYXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fAot
ICAgICAgICAocmVjdC54KCkgKyByZWN0LndpZHRoKCkpID4gc2l6ZS53aWR0aCgpIHx8Ci0gICAg
ICAgIChyZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpID4gc2l6ZS5oZWlnaHQoKSkKKyAgICBpZiAo
cmVjdC54KCkgPCAwCisgICAgICAgIHx8IHJlY3QueSgpIDwgMAorICAgICAgICB8fCByZWN0LnJp
Z2h0KCkgPiBzaXplLndpZHRoKCkKKyAgICAgICAgfHwgcmVjdC5ib3R0b20oKSA+IHNpemUuaGVp
Z2h0KCkpCiAgICAgICAgIG1lbXNldChkYXRhLCAwLCByZXN1bHQtPmRhdGEoKS0+bGVuZ3RoKCkp
OwogCiAgICAgaW50IG9yaWdpblggPSByZWN0LngoKTsKQEAgLTE4MCwxMyArMTgxLDEzIEBAIFBh
c3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdFggPSAt
b3JpZ2luWDsKICAgICAgICAgb3JpZ2luWCA9IDA7CiAgICAgfQotICAgIGludCBlbmRYID0gcmVj
dC54KCkgKyByZWN0LndpZHRoKCk7CisgICAgaW50IGVuZFggPSByZWN0LnJpZ2h0KCk7CiAgICAg
aWYgKGVuZFggPiBzaXplLndpZHRoKCkpCiAgICAgICAgIGVuZFggPSBzaXplLndpZHRoKCk7CiAg
ICAgaW50IG51bUNvbHVtbnMgPSBlbmRYIC0gb3JpZ2luWDsKIAogICAgIGlmIChudW1Db2x1bW5z
IDw9IDApIAotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKIAogICAgIGludCBvcmlnaW5ZID0gcmVjdC55KCk7CiAgICAgaW50IGRlc3RZID0g
MDsKQEAgLTE5NCwxMyArMTk1LDEzIEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoY29uc3QKICAgICAgICAgZGVzdFkgPSAtb3JpZ2luWTsKICAgICAgICAgb3JpZ2luWSA9IDA7
CiAgICAgfQotICAgIGludCBlbmRZID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOworICAgIGlu
dCBlbmRZID0gcmVjdC5ib3R0b20oKTsKICAgICBpZiAoZW5kWSA+IHNpemUuaGVpZ2h0KCkpCiAg
ICAgICAgIGVuZFkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5kWSAtIG9y
aWdpblk7CiAKICAgICBpZiAobnVtUm93cyA8PSAwKSAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAKICAgICBBU1NFUlQoYml0bWFwLmNv
bmZpZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7CiAgICAgU2tBdXRvTG9ja1Bp
eGVscyBiaXRtYXBMb2NrKGJpdG1hcCk7CkBAIC0yMzEsMjMgKzIzMiwyMyBAQCBQYXNzUmVmUHRy
PEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3RSb3cgKz0gZGVzdEJ5
dGVzUGVyUm93OwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOwogICAgIHJldHVybiBnZXRJbWFnZURhdGE8VW5tdWx0
aXBsaWVkPihyZWN0LCAqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1f
c2l6ZSk7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorUGFzc1JlZlB0cjxC
eXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+
c3luY1NvZnR3YXJlQ2FudmFzKCk7CiAgICAgcmV0dXJuIGdldEltYWdlRGF0YTxQcmVtdWx0aXBs
aWVkPihyZWN0LCAqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6
ZSk7CiB9CiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgotdm9pZCBwdXRJbWFnZURh
dGEoSW1hZ2VEYXRhKiYgc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCAKK3ZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJj
ZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgCiAgICAgICAgICAgICAgICAgICBjb25zdCBTa0Jp
dG1hcCYgYml0bWFwLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VSVChzb3VyY2VS
ZWN0LndpZHRoKCkgPiAwKTsKQEAgLTI3OSw5ICsyODAsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShJ
bWFnZURhdGEqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGJpdG1hcC5jb25maWcoKSA9PSBTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwogICAgIFNrQXV0b0xvY2tQaXhlbHMgYml0bWFwTG9j
ayhiaXRtYXApOwogCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlLT53
aWR0aCgpOworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lk
dGgoKTsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyY1JvdyA9IHNvdXJjZS0+ZGF0YSgp
LT5kYXRhKCktPmRhdGEoKSArIG9yaWdpblkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpblggKiA0
OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyY1JvdyA9IHNvdXJjZS0+ZGF0YSgpICsgb3Jp
Z2luWSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2luWCAqIDQ7CiAKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG51bVJvd3M7ICsreSkgewogICAgICAgICB1aW50MzJfdCogZGVzdFJvdyA9IGJpdG1h
cC5nZXRBZGRyMzIoZGVzdFgsIGRlc3RZICsgeSk7CkBAIC0zMDEsMTUgKzMwMiwxNSBAQCB2b2lk
IHB1dEltYWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2UsIGNvCiAgICAgfQogfQogCi12b2lkIElt
YWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit2b2lk
IEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2Us
IGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7CiAgICAgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOwotICAgIHB1dEltYWdlRGF0YTxVbm11bHRp
cGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCAqY29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6ZSk7CisgICAgcHV0SW1hZ2VEYXRhPFVubXVsdGlw
bGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsICpjb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKSwgbV9zaXplKTsKIH0KIAotdm9pZCBJbWFn
ZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3ZvaWQg
SW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2Us
IGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxp
ZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCAqY29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKS0+Yml0bWFwKCksIG1fc2l6ZSk7CisgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxp
ZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCAqY29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6ZSk7CiB9CiAKIFN0cmluZyBJbWFn
ZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSog
cXVhbGl0eSkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1h
Z2VCdWZmZXJXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjIsMjEgKzEyMiwyMSBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvCiAgICAgaW1hZ2VDb3B5LT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwog
fQogCi10ZW1wbGF0ZSA8Ym9vbCBwcmVtdWx0aXBsaWVkPiBQYXNzUmVmUHRyPEltYWdlRGF0YT4K
K3RlbXBsYXRlIDxib29sIHByZW11bHRpcGxpZWQ+IFBhc3NSZWZQdHI8Qnl0ZUFycmF5Pgogc3Rh
dGljIGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBTaGFyZWRCaXRtYXAq
IGJpdG1hcCkKIHsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VE
YXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOwogCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGJpdG1hcC0+Ynl0ZXMoKSk7CiAgICAgaWYgKCFzcmMpCi0g
ICAgICAgIHJldHVybiBpbWFnZURhdGE7CisgICAgICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFz
ZSgpOwogCiAgICAgSW50UmVjdCBzb3VyY2VSZWN0KDAsIDAsIGJpdG1hcC0+d2lkdGgoKSwgYml0
bWFwLT5oZWlnaHQoKSk7CiAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QocmVjdCk7CiAgICAgaWYg
KHNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgICAg
ICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKIAotICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9
IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBk
c3QgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICBtZW1zZXQoZHN0LCAwLCBpbWFnZURhdGEtPmRh
dGEoKS0+ZGF0YSgpLT5sZW5ndGgoKSk7CiAgICAgc3JjICs9IChzb3VyY2VSZWN0LnkoKSAqIGJp
dG1hcC0+d2lkdGgoKSArIHNvdXJjZVJlY3QueCgpKSAqIDQ7CiAgICAgZHN0ICs9ICgoc291cmNl
UmVjdC55KCkgLSByZWN0LnkoKSkgKiBpbWFnZURhdGEtPndpZHRoKCkgKyBzb3VyY2VSZWN0Lngo
KSAtIHJlY3QueCgpKSAqIDQ7CkBAIC0xNjksMjEgKzE2OSwyMSBAQCBzdGF0aWMgZ2V0SW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmIHJlY3QsCiAgICAgICAgIGRzdCArPSBkc3RTa2lwOwogICAgIH0K
IAotICAgIHJldHVybiBpbWFnZURhdGE7CisgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7
CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitQYXNzUmVmUHRyPEJ5dGVBcnJh
eT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiBy
ZWN0KSBjb25zdAogewogICAgIHJldHVybiBnZXRJbWFnZURhdGE8ZmFsc2U+KHJlY3QsIG1fZGF0
YS5tX2JpdG1hcC5nZXQoKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZl
cjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAor
UGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEltYWdlRGF0
YTx0cnVlPihyZWN0LCBtX2RhdGEubV9iaXRtYXAuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZSA8Ym9v
bCBwcmVtdWx0aXBsaWVkPgotc3RhdGljIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSogc291
cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBTaGFyZWRCaXRtYXAqIGJpdG1hcCkKK3N0YXRpYyB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJy
YXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgU2hhcmVkQml0bWFwKiBiaXRtYXAp
CiB7CiAgICAgdW5zaWduZWQgY2hhciogZHN0ID0gKHVuc2lnbmVkIGNoYXIqKWJpdG1hcC0+Ynl0
ZXMoKTsKICAgICBpZiAoIWRzdCkKQEAgLTE5NSwxMiArMTk1LDEyIEBAIHN0YXRpYyB2b2lkIHB1
dEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXIKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMgPSBzb3VyY2Ut
PmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjID0g
c291cmNlLT5kYXRhKCk7CiAgICAgZHN0ICs9IChkZXN0UmVjdC55KCkgKiBiaXRtYXAtPndpZHRo
KCkgKyBkZXN0UmVjdC54KCkpICogNDsKLSAgICBzcmMgKz0gKHNvdXJjZVJlY3QueSgpICogc291
cmNlLT53aWR0aCgpICsgc291cmNlUmVjdC54KCkpICogNDsKKyAgICBzcmMgKz0gKHNvdXJjZVJl
Y3QueSgpICogc291cmNlU2l6ZS53aWR0aCgpICsgc291cmNlUmVjdC54KCkpICogNDsKICAgICBp
bnQgYnl0ZXNUb0NvcHkgPSBkZXN0UmVjdC53aWR0aCgpICogNDsKICAgICBpbnQgZHN0U2tpcCA9
IChiaXRtYXAtPndpZHRoKCkgLSBkZXN0UmVjdC53aWR0aCgpKSAqIDQ7Ci0gICAgaW50IHNyY1Nr
aXAgPSAoc291cmNlLT53aWR0aCgpIC0gZGVzdFJlY3Qud2lkdGgoKSkgKiA0OworICAgIGludCBz
cmNTa2lwID0gKHNvdXJjZVNpemUud2lkdGgoKSAtIGRlc3RSZWN0LndpZHRoKCkpICogNDsKICAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkc3RFbmQgPSBkc3QgKyBkZXN0UmVjdC5oZWlnaHQoKSAq
IGJpdG1hcC0+d2lkdGgoKSAqIDQ7CiAgICAgd2hpbGUgKGRzdCA8IGRzdEVuZCkgewogICAgICAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkc3RSb3dFbmQgPSBkc3QgKyBieXRlc1RvQ29weTsKQEAg
LTIyNywxNCArMjI3LDE0IEBAIHN0YXRpYyB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqIHNv
dXIKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0
YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdl
RGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBw
dXRJbWFnZURhdGE8ZmFsc2U+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEu
bV9iaXRtYXAuZ2V0KCkpOworICAgIHB1dEltYWdlRGF0YTxmYWxzZT4oc291cmNlLCBzb3VyY2VT
aXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YS5tX2JpdG1hcC5nZXQoKSk7CiB9CiAK
LXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBz
b3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5dGVBcnJh
eSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIHB1dEltYWdlRGF0YTx0
cnVlPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLm1fYml0bWFwLmdldCgp
KTsKKyAgICBwdXRJbWFnZURhdGE8dHJ1ZT4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0
LCBkZXN0UG9pbnQsIG1fZGF0YS5tX2JpdG1hcC5nZXQoKSk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZm
ZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYgbG9va1Vw
VGFibGUpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZm
ZXJXeC5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9JbWFnZUJ1ZmZlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMjQgKzU0LDI0IEBAIEdy
YXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAKICAgICByZXR1cm4gMDsKIH0K
IAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJ
bWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0KIAotUGFz
c1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitQYXNzUmVmUHRyPEJ5dGVBcnJheT4gSW1hZ2VC
dWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29u
c3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkIElt
YWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit2b2lk
IEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2Us
IGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNv
dXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5
KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNCArMjQsMTIgQEAKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkVsZW1lbnQu
aCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQu
aCIKQEAgLTM5LDYgKzM3LDggQEAKICNpbmNsdWRlICJTVkdNYXNrRWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTE2MSw4ICsxNjEsNyBAQCB2b2lkIFJlbmRlclNW
R1Jlc291cmNlTWFza2VyOjpkcmF3Q29udGVuCiAKICAgICAvLyBDcmVhdGUgdGhlIGx1bWluYW5j
ZSBtYXNrLgogICAgIEludFJlY3QgbWFza0ltYWdlUmVjdChJbnRQb2ludCgpLCBtYXNrZXJEYXRh
LT5tYXNrSW1hZ2UtPnNpemUoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0g
bWFza2VyRGF0YS0+bWFza0ltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEobWFza0ltYWdl
UmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCkt
PmRhdGEoKTsKKyAgICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5ID0gbWFza2VyRGF0
YS0+bWFza0ltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEobWFza0ltYWdlUmVjdCk7CiAK
ICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxB
cnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewpAQCAtMTc3LDcgKzE3Niw3IEBAIHZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmRyYXdDb250ZW4KICAgICAgICAgc3JjUGl4ZWxBcnJh
eS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CiAgICAgfQogCi0gICAgbWFza2VyRGF0YS0+
bWFza0ltYWdlLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBtYXNr
SW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UtPnB1dFVu
bXVsdGlwbGllZEltYWdlRGF0YShzcmNQaXhlbEFycmF5LmdldCgpLCBtYXNrSW1hZ2VSZWN0LnNp
emUoKSwgbWFza0ltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXI6OmNhbGN1bGF0ZU1hc2tDb250ZW50UmVwYWludFJlY3QoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77752</attachid>
            <date>2011-01-01 12:34:56 -0800</date>
            <delta_ts>2011-01-01 13:24:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51297-20110101213453.patch</filename>
            <type>text/plain</type>
            <size>68691</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDg0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA5IEBACisyMDExLTAxLTAxICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xh
cmlmeSBJbWFnZUJ1ZmZlciBhbmQgSW1hZ2VEYXRhIHJlbGF0aW9uc2hpcAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEyOTcKKworICAgICAgICBSZW1v
dmUgcmVmZXJlbmNlcyB0byBJbWFnZURhdGEgYW5kIENhbnZhc1BpeGVsQXJyYXkgZnJvbSBJbWFn
ZUJ1ZmZlciBhbmQgU1ZHIGZpbHRlci9tYXNrZXIgY29kZSwKKyAgICAgICAgc2luY2UgdGhpcyB3
YXMgYSBsYXllcmluZyB2aW9sYXRpb24sIGFuZCByZXBsYWNlZCBpdCBieSBCeXRlQXJyYXkuCisK
KyAgICAgICAgTm8gY2hhbmdlIG9mIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0IGFkZGVk
LgorCisgICAgICAgICogaHRtbC9JbWFnZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpJbWFnZURhdGEp
OgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmg6IEFkZGVkIG5ldyBjb25zdHJ1Y3RvciB3aXRo
IEJ5dGVBcnJheSBpbnB1dC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6d2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEYXRhOjpkYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1BpeGVsQXJyYXk6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNQaXhlbEFycmF5OjpDYW52YXNQaXhlbEFycmF5KToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5Lmg6IE5ldyBjb25jdHJ1Y3RvciB3aXRo
IEJ5dGVBcnJheSBpbnB1dCwgdXNlZCBieSBIVE1MIENhbnZhcy4KKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1BpeGVsQXJyYXk6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUGl4ZWxB
cnJheTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1BpeGVsQXJyYXk6OnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNQaXhlbEFycmF5OjpnZXQpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9uUGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjphcHBseSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNVbm11bHRpcGxpZWRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlw
bGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVs
dGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6cHV0SW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmRyYXdDb250ZW50SW50
b01hc2tJbWFnZSk6CisKIDIwMTEtMDEtMDEgIEtvbnN0YW50aW4gVG9rYXJldiAgPGFubnVsZW5A
eWFuZGV4LnJ1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2Vi
Q29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ltYWdl
RGF0YS5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDExIEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJ
bWFnZURhdGE6OmNyZWF0ZSgKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlRGF0YSh3aWR0
aCwgaGVpZ2h0KSk7CiB9CiAKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0
ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4g
Ynl0ZUFycmF5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VEYXRhKHdpZHRoLCBo
ZWlnaHQsIGJ5dGVBcnJheSkpOworfQorCiBJbWFnZURhdGE6OkltYWdlRGF0YSh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogICAgIDogbV93aWR0aCh3aWR0aCkKICAgICAsIG1faGVp
Z2h0KGhlaWdodCkKQEAgLTQzLDUgKzQ4LDEyIEBAIEltYWdlRGF0YTo6SW1hZ2VEYXRhKHVuc2ln
bmVkIHdpZHRoLCB1bnMKIHsKIH0KIAorSW1hZ2VEYXRhOjpJbWFnZURhdGEodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGJ5dGVBcnJheSkKKyAg
ICA6IG1fd2lkdGgod2lkdGgpCisgICAgLCBtX2hlaWdodChoZWlnaHQpCisgICAgLCBtX2RhdGEo
Q2FudmFzUGl4ZWxBcnJheTo6Y3JlYXRlKGJ5dGVBcnJheSkpCit7Cit9CisKIH0KIApJbmRleDog
V2ViQ29yZS9odG1sL0ltYWdlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9JbWFn
ZURhdGEuaAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDI1ICszMCwyOSBAQAogI2RlZmluZSBJbWFnZURhdGFfaAogCiAj
aW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgSW1hZ2VEYXRhIDogcHVibGljIFJlZkNv
dW50ZWQ8SW1hZ2VEYXRhPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IGNyZWF0ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKLQot
ICAgICAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICAg
ICAgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KLSAgICAgICAg
Q2FudmFzUGl4ZWxBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgSW1hZ2VEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpOwotICAgICAgICB1bnNpZ25lZCBtX3dpZHRoOwotICAgICAgICB1bnNpZ25lZCBt
X2hlaWdodDsKLSAgICAgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IG1fZGF0YTsKLSAgICB9
OworY2xhc3MgSW1hZ2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VEYXRhPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGUodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBj
cmVhdGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0cjxCeXRlQXJy
YXk+KTsKKworICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisgICAgQ2Fu
dmFzUGl4ZWxBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorCitw
cml2YXRlOgorICAgIEltYWdlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsK
KyAgICBJbWFnZURhdGEodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+KTsKKworICAgIHVuc2lnbmVkIG1fd2lkdGg7CisgICAgdW5zaWduZWQgbV9o
ZWlnaHQ7CisgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IG1fZGF0YTsKK307CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhl
bEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BpeGVs
QXJyYXkuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UGl4ZWxBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwyNCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBD
YW52YXNQaXhlbEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQaXhlbEFycmF5KGxlbmd0aCkpOwotICAgIH0KLSAg
ICAKLSAgICBDYW52YXNQaXhlbEFycmF5OjpDYW52YXNQaXhlbEFycmF5KHVuc2lnbmVkIGxlbmd0
aCkKLSAgICAgICAgOiBtX2RhdGEoV1RGOjpCeXRlQXJyYXk6OmNyZWF0ZShsZW5ndGgpKQotICAg
IHsKLSAgICB9Ci0gICAgCitQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IENhbnZhc1BpeGVs
QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDYW52YXNQaXhlbEFycmF5KGxlbmd0aCkpOworfQorCitQYXNzUmVmUHRyPENhbnZhc1BpeGVs
QXJyYXk+IENhbnZhc1BpeGVsQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEJ5dGVBcnJheT4gYnl0
ZUFycmF5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzUGl4ZWxBcnJheShieXRl
QXJyYXkpKTsKK30KKworQ2FudmFzUGl4ZWxBcnJheTo6Q2FudmFzUGl4ZWxBcnJheSh1bnNpZ25l
ZCBsZW5ndGgpCisgICAgOiBtX2RhdGEoQnl0ZUFycmF5OjpjcmVhdGUobGVuZ3RoKSkKK3sKK30K
KworQ2FudmFzUGl4ZWxBcnJheTo6Q2FudmFzUGl4ZWxBcnJheShQYXNzUmVmUHRyPEJ5dGVBcnJh
eT4gYnl0ZUFycmF5KQorICAgIDogbV9kYXRhKGJ5dGVBcnJheSkKK3sKK30KKwogfQpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHJldmlzaW9uIDc0NzgxKQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDM4ICszNyw0MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgY2xhc3Mg
Q2FudmFzUGl4ZWxBcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc1BpeGVsQXJyYXk+IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+
IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgV1RGOjpCeXRlQXJy
YXkqIGRhdGEoKSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLSAgICAgICAgY29uc3QgV1RGOjpC
eXRlQXJyYXkqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLSAgICAgICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5sZW5ndGgoKTsgfQotICAg
ICAgICAKLSAgICAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9kYXRhLT5zZXQoaW5kZXgsIHZhbHVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2RhdGEtPnNldChpbmRleCwgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIGdldCh1bnNpZ25lZCBpbmRleCwgdW5zaWdu
ZWQgY2hhciYgcmVzdWx0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9k
YXRhLT5nZXQoaW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBj
aGFyIGdldCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fZGF0YS0+Z2V0KGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgQ2FudmFzUGl4ZWxBcnJheSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBSZWZQdHI8V1RG
OjpCeXRlQXJyYXk+IG1fZGF0YTsKLSAgICB9OworY2xhc3MgQ2FudmFzUGl4ZWxBcnJheSA6IHB1
YmxpYyBSZWZDb3VudGVkPENhbnZhc1BpeGVsQXJyYXk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxC
eXRlQXJyYXk+KTsKKworICAgIEJ5dGVBcnJheSogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5nZXQo
KTsgfQorICAgIGNvbnN0IEJ5dGVBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5n
ZXQoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+bGVu
Z3RoKCk7IH0KKyAgICAKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgbV9kYXRhLT5zZXQoaW5kZXgsIHZhbHVlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgY2hhciB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIG1fZGF0YS0+c2V0KGluZGV4LCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
Z2V0KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBjaGFyJiByZXN1bHQpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9kYXRhLT5nZXQoaW5kZXgsIHJlc3VsdCk7CisgICAgfQorCisgICAg
dW5zaWduZWQgY2hhciBnZXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9kYXRhLT5nZXQoaW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYW52YXNQ
aXhlbEFycmF5KHVuc2lnbmVkIGxlbmd0aCk7CisgICAgQ2FudmFzUGl4ZWxBcnJheShQYXNzUmVm
UHRyPEJ5dGVBcnJheT4pOworCisgICAgUmVmUHRyPEJ5dGVBcnJheT4gbV9kYXRhOworfTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gNzQ3ODEpCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1ODcsNyArMTU4Nyw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBDYW52YXNS
ZW5kZXJpbmdDb24KICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzKCktPmJ1ZmZlcigp
OwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEo
c2NhbGVkUmVjdC5zaXplKCkpOwotICAgIHJldHVybiBidWZmZXItPmdldFVubXVsdGlwbGllZElt
YWdlRGF0YShzY2FsZWRSZWN0KTsKKyAgICByZXR1cm4gSW1hZ2VEYXRhOjpjcmVhdGUoc2NhbGVk
UmVjdC53aWR0aCgpLCBzY2FsZWRSZWN0LmhlaWdodCgpLCBidWZmZXItPmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShzY2FsZWRSZWN0KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHksIEV4
Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTYzNiw3ICsxNjM2LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnB1dEltYWdlRAogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7
CiAgICAgc291cmNlUmVjdC5tb3ZlKC1kZXN0T2Zmc2V0KTsKIAotICAgIGJ1ZmZlci0+cHV0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGRhdGEsIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQp
KTsKKyAgICBidWZmZXItPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShkYXRhLT5kYXRhKCktPmRh
dGEoKSwgSW50U2l6ZShkYXRhLT53aWR0aCgpLCBkYXRhLT5oZWlnaHQoKSksIHNvdXJjZVJlY3Qs
IEludFBvaW50KGRlc3RPZmZzZXQpKTsKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWRE
cmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDc0
NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCisjaW5jbHVkZSA8d3RmL0J5
dGVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC04MywxMSArODQsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGRyYXdzVXNpbmdDb3B5KCkgY29uc3Q7IC8v
IElmIHRoZSBpbWFnZSBidWZmZXIgaGFzIHRvIHJlbmRlciB1c2luZyBhIGNvcGllZCBpbWFnZSwg
aXQgd2lsbCByZXR1cm4gdHJ1ZS4KICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY29weUltYWdl
KCkgY29uc3Q7IC8vIFJldHVybiBhIG5ldyBpbWFnZSB0aGF0IGlzIGEgY29weSBvZiB0aGUgYnVm
ZmVyLgogCi0gICAgICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAg
ICAgIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYpIGNvbnN0OworICAgICAgICBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBw
dXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7Ci0gICAgICAgIHZvaWQgcHV0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50KTsKKyAgICAgICAgdm9pZCBwdXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoQnl0ZUFycmF5KiwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7CisgICAgICAgIHZv
aWQgcHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqLCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50KTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5ID0gMCkgY29uc3Q7CiAjaWYgIVBMQVRG
T1JNKENHKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MSwxNiArMTUxLDE2IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29s
b3IKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci1QYXNzUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVy
RGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBn
ZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBk
YXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dl
dF90eXBlKGRhdGEubV9zdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOwogCi0g
ICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gcmVzdWx0ID0g
Qnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOwogICAg
IHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGRh
dGEubV9zdXJmYWNlKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRh
KCktPmRhdGEoKS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFEc3QgPSByZXN1bHQt
PmRhdGEoKTsKIAogICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IChyZWN0
LngoKSArIHJlY3Qud2lkdGgoKSkgPiBzaXplLndpZHRoKCkgfHwgKHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKSkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGF0YURzdCwgMCwgcmVz
dWx0LT5kYXRhKCktPmxlbmd0aCgpKTsKKyAgICAgICAgbWVtc2V0KGRhdGFEc3QsIDAsIHJlc3Vs
dC0+bGVuZ3RoKCkpOwogCiAgICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKICAgICBpbnQgZGVz
dHggPSAwOwpAQCAtMTY4LDcgKzE2OCw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFn
ZURhdGEoY29uc3QKICAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKICAgICAgICAgb3JpZ2lueCA9
IDA7CiAgICAgfQotICAgIGludCBlbmR4ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCk7CisgICAg
aW50IGVuZHggPSByZWN0LnJpZ2h0KCk7CiAgICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCiAg
ICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0g
b3JpZ2lueDsKQEAgLTE3OSw3ICsxNzksNyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7CiAgICAgICAgIG9yaWdpbnkg
PSAwOwogICAgIH0KLSAgICBpbnQgZW5keSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKTsKKyAg
ICBpbnQgZW5keSA9IHJlY3QuYm90dG9tKCk7CiAgICAgaWYgKGVuZHkgPiBzaXplLmhlaWdodCgp
KQogICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKICAgICBpbnQgbnVtUm93cyA9IGVuZHkg
LSBvcmlnaW55OwpAQCAtMjA2LDIxICsyMDYsMjEgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdl
dEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CiAg
ICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
IH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5
PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHJlY3Qs
IG1fZGF0YSwgbV9zaXplKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVy
OjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitQ
YXNzUmVmUHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRh
PFByZW11bHRpcGxpZWQ+KHJlY3QsIG1fZGF0YSwgbV9zaXplKTsKIH0KIAogdGVtcGxhdGUgPE11
bHRpcGx5IG11bHRpcGxpZWQ+Ci12b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2Us
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIElt
YWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgcHV0SW1hZ2VE
YXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW1hZ2VCdWZm
ZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VSVChjYWlyb19z
dXJmYWNlX2dldF90eXBlKGRhdGEubV9zdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1B
R0UpOwogCkBAIC0yNTIsMTAgKzI1MiwxMCBAQCB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEq
JiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgaW50
IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CiAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9
IDQgKiBzb3VyY2UtPndpZHRoKCk7CisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICog
c291cmNlU2l6ZS53aWR0aCgpOwogICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUoZGF0YS5tX3N1cmZhY2UpOwogCi0gICAgdW5zaWduZWQgY2hhciogc3JjUm93
cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1Bl
clJvdyArIG9yaWdpbnggKiA0OworICAgIHVuc2lnbmVkIGNoYXIqIHNyY1Jvd3MgPSBzb3VyY2Ut
PmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwogICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7CiAgICAgICAgIHVuc2lnbmVkKiByb3cg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGF0YURzdCArIHN0cmlkZSAqICh5ICsgZGVz
dHkpKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKQEAg
LTI3NywxNCArMjc3LDE0IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwg
Y28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1Db2x1bW5zLCBu
dW1Sb3dzKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKEJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIHB1
dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBt
X2RhdGEsIG1fc2l6ZSk7CisgICAgcHV0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBz
b3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplKTsKIH0KIAot
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNv
dXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5
KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhPFBy
ZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6
ZSk7CisgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwg
c291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CiB9CiAKICNpZiAhUExBVEZP
Uk0oR1RLKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0y
NTMsMTMgKzI1MiwxMyBAQCB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCog
CiB9CiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgotUGFzc1JlZlB0cjxJbWFnZURh
dGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVy
aW5nKQorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQogewotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiByZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSByZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRh
KCk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gcmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUocmVj
dC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEg
PSByZXN1bHQtPmRhdGEoKTsKIAotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAw
IHx8IChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSkgPiBzaXplLndpZHRoKCkgfHwgKHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGF0YSwg
MCwgcmVzdWx0LT5kYXRhKCktPmxlbmd0aCgpKTsKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJl
Y3QueSgpIDwgMCB8fCByZWN0LnJpZ2h0KCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5ib3R0b20o
KSA+IHNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkYXRhLCAwLCByZXN1bHQtPmxlbmd0
aCgpKTsKIAogICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7CiAgICAgaW50IGRlc3R4ID0gMDsK
QEAgLTI2Nyw3ICsyNjYsNyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNv
bnN0CiAgICAgICAgIGRlc3R4ID0gLW9yaWdpbng7CiAgICAgICAgIG9yaWdpbnggPSAwOwogICAg
IH0KLSAgICBpbnQgZW5keCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGludCBlbmR4
ID0gcmVjdC5yaWdodCgpOwogICAgIGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBl
bmR4ID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7
CkBAIC0yNzgsNyArMjc3LDcgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShj
b25zdAogICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwogICAgICAgICBvcmlnaW55ID0gMDsKICAg
ICB9Ci0gICAgaW50IGVuZHkgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCk7CisgICAgaW50IGVu
ZHkgPSByZWN0LmJvdHRvbSgpOwogICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAg
ICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lu
eTsKQEAgLTM0MCwxNyArMzM5LDE3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoY29uc3QKICNlbmRpZgogICAgIH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25z
dAorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBpZiAobV9hY2NlbGVyYXRl
UmVuZGVyaW5nKQogICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgbV9k
YXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CiB9CiAKLVBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0KSBjb25zdAorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAg
aWYgKG1fYWNjZWxlcmF0ZVJlbmRlcmluZykKICAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CkBAIC0zNTgsNyArMzU3LDcgQEAgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRQcgogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVs
dGlwbGllZD4KLXZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW1hZ2VCdWZmZXJE
YXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZykKK3ZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6
ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgSW1hZ2VCdWZmZXJEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53
aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTM4
Niw4ICszODUsOCBAQCB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2UsIGNvCiAg
ICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5
IC0gZGVzdHk7CiAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2UtPndp
ZHRoKCk7Ci0gICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRh
KCktPmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OworICAg
IHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBzcmNSb3dzID0gc291cmNlLT5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0
ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7CiAg
ICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3M7CiAKQEAgLTQ0MiwxOCArNDQxLDE4IEBAIHZvaWQg
cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY28KICAgICB9CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3ZvaWQg
SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwg
Y29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKICAgICBpZiAobV9hY2NlbGVyYXRlUmVuZGVyaW5n
KQogICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICBwdXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQ
b2ludCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CisgICAgcHV0SW1h
Z2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0
UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJpbmcpOwogfQogCi12b2lk
IEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQor
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqIHNv
dXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKICAgICBpZiAobV9hY2NlbGVyYXRlUmVu
ZGVyaW5nKQogICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICBwdXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VSZWN0
LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJpbmcpOworICAg
IHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJl
Y3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCShyZXZpc2lvbiA3NDc4MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDExIEBACiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVk
ZSAiRkVCbGVuZC5oIgogCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUgPHd0Zi9CeXRlQXJy
YXkuaD4KIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyICgqQmxlbmRUeXBlKSh1bnNpZ25lZCBjaGFy
IGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNp
Z25lZCBjaGFyIGFscGhhQik7CiAKQEAgLTEwMCwxOSArMTAwLDE1IEBAIHZvaWQgRkVCbGVuZDo6
YXBwbHkoKQogICAgIGlmIChtX21vZGUgPD0gRkVCTEVORF9NT0RFX1VOS05PV04gfHwgbV9tb2Rl
ID4gRkVCTEVORF9NT0RFX0xJR0hURU4pCiAgICAgICAgIHJldHVybjsKIAotICAgIEltYWdlRGF0
YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQ
dHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFBID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVm
ZmVjdEFEcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QSA9IHNyY0lt
YWdlRGF0YUEtPmRhdGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVs
QXJyYXlBID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAK
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJ
bWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBzcmNJbWFnZURhdGFCID0gaW4yLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RCRHJhd2lu
Z1JlY3QpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUIgPSBzcmNJbWFnZURhdGFCLT5k
YXRhKCktPmRhdGEoKTsKLQotICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlLT5kYXRhKCktPmRhdGEoKTsKKyAgICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5
QiA9IGluMi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0QkRyYXdpbmdSZWN0KTsKIAogICAg
IC8vIEtlZXAgc3luY2hyb25pemVkIHdpdGggQmxlbmRNb2RlVHlwZQogICAgIHN0YXRpYyBjb25z
dCBCbGVuZFR5cGUgY2FsbEVmZmVjdFtdID0ge3Vua25vd24sIG5vcm1hbCwgbXVsdGlwbHksIHNj
cmVlbiwgZGFya2VuLCBsaWdodGVufTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAorI2luY2x1
ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0xNjQsMjggKzE2NCwyNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6
OmFwcGx5KCkKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoaW4t
PmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJl
Y3QoSW50UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoaW1hZ2VSZWN0KTsKLSAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRh
dGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHBpeGVsQXJyYXkgPSByZXN1bHRJ
bWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCk7CiAKICAgICBzd2l0Y2gg
KG1fdHlwZSkgewotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoK
LSAgICAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxB
cnJheSwgbV92YWx1ZXMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX1NBVFVSQVRFPihwaXhlbEFycmF5LCBtX3ZhbHVlcyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAg
ICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5
LCBtX3ZhbHVlcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIG1fdmFsdWVzKTsKLSAg
ICAgICAgICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9S
TUFUUklYX1RZUEVfTUFUUklYPihwaXhlbEFycmF5LmdldCgpLCBtX3ZhbHVlcyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKKyAgICAgICAg
ZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXkuZ2V0KCks
IG1fdmFsdWVzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU+KHBpeGVsQXJyYXkuZ2V0KCksIG1fdmFsdWVzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheS5nZXQoKSwg
bV92YWx1ZXMpOworICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CisgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1h
Z2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5w
dXRVbm11bHRpcGxpZWRJbWFnZURhdGEocGl4ZWxBcnJheS5nZXQoKSwgaW1hZ2VSZWN0LnNpemUo
KSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUNvbG9yTWF0cml4OjpkdW1w
KCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAorI2luY2x1ZGUg
PHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0xNTYsOCArMTU2LDggQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVy
OjphcHBseSgpCiAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgY2hhciByVmFsdWVzWzI1Nl0sIGdWYWx1ZXNbMjU2
XSwgYlZhbHVlc1syNTZdLCBhVmFsdWVzWzI1Nl07CkBAIC0xNzEsOCArMTcxLDcgQEAgdm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSgpCiAgICAgICAgICgqY2FsbEVmZmVjdFt0cmFuc2Zl
ckZ1bmN0aW9uW2NoYW5uZWxdLnR5cGVdKSh0YWJsZXNbY2hhbm5lbF0sIHRyYW5zZmVyRnVuY3Rp
b25bY2hhbm5lbF0pOwogCiAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5
VW5tdWx0aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLCBkcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5
KiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICBpbi0+Y29weVVu
bXVsdGlwbGllZEltYWdlKHBpeGVsQXJyYXksIGRyYXdpbmdSZWN0KTsKIAogICAgIHVuc2lnbmVk
IHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2ln
bmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhl
bE9mZnNldCArPSA0KSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsOCBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisKKyNpbmNsdWRlIDx3dGYvQnl0ZUFy
cmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTkwLDE3ICsxOTEsMTcgQEAgdm9p
ZCBGRUNvbXBvc2l0ZTo6YXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV90eXBl
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgSW1hZ2VEYXRh
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgICAg
ICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICAgICAgaWYgKCFkc3RQaXhlbEFy
cmF5KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YSA9IGluLT5h
c1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgICAgICBSZWZQdHI8
Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5ID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVj
dEFEcmF3aW5nUmVjdCk7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRJbWFnZShyZXN1bHRJbWFnZSwgZWZmZWN0
QkRyYXdpbmdSZWN0KTsKKyAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZEltYWdlKGRzdFBp
eGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKLSAgICAgICAgYXJpdGhtZXRpYyhzcmNJ
bWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCksIG1f
azEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAgICBhcml0aG1ldGljKHNyY1BpeGVsQXJyYXku
Z2V0KCksIGRzdFBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAogI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1
ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUg
PHd0Zi9CeXRlQXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMDIsNyArMjAy
LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcAogfQogCiB0ZW1w
bGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVz
dGluYXRpb25QaXhlbHMoQ2FudmFzUGl4ZWxBcnJheSogaW1hZ2UsIGludCYgcGl4ZWwsIGZsb2F0
KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIENhbnZhc1BpeGVsQXJyYXkqIHNy
YykKK0FMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhCeXRlQXJyYXkqIGlt
YWdlLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFz
LCBCeXRlQXJyYXkqIHNyYykKIHsKICAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2Vy
dmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3Ig
KyBiaWFzKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKQEAgLTM3OSw3ICszNzks
NyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KCkKICAgICBpZiAoIWluLT5oYXNSZXN1
bHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZTsKKyAg
ICBCeXRlQXJyYXkqIHJlc3VsdEltYWdlOwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCiAgICAg
ICAgIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBl
bHNlCkBAIC0zODksMTYgKzM4OSwxNiBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KCkK
IAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAotICAgIFJlZlB0cjxDYW52YXNQ
aXhlbEFycmF5PiBzcmNQaXhlbEFycmF5OworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVs
QXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9
IGluLT5hc1VubXVsdGlwbGllZEltYWdlKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOworICAg
ICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPmFzVW5tdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2lu
Z1JlY3QpOwogICAgIGVsc2UKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5hc1ByZW11bHRp
cGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKTsKKyAgICAgICAgc3JjUGl4ZWxB
cnJheSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCk7CiAKICAg
ICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIFBh
aW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkg
PSBzcmNQaXhlbEFycmF5LmdldCgpOwotICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0g
cmVzdWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlOwogICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwog
ICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBwYWludFNpemUuaGVpZ2h0KCk7CiAgICAgcGFpbnRp
bmdEYXRhLmJpYXMgPSBtX2JpYXMgKiAyNTU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgJKHJldmlzaW9uIDc0Nzgx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aAkod29ya2luZyBjb3B5KQpAQCAtODQsOCArODQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Y29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29sLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKICAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAg
ICAgQ2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgQ2FudmFzUGl4ZWxB
cnJheSogZHN0UGl4ZWxBcnJheTsKKyAgICAgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5Owor
ICAgICAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXk7CiAgICAgICAgIGludCB3aWR0aDsKICAg
ICAgICAgaW50IGhlaWdodDsKICAgICAgICAgZmxvYXQgYmlhczsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw4IEBACiAK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC05MCwxOSArOTEsMTUgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1h
cDo6YXBwbHkoKQogICAgIGlmIChtX3hDaGFubmVsU2VsZWN0b3IgPT0gQ0hBTk5FTF9VTktOT1dO
IHx8IG1feUNoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VOS05PV04pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogZHN0UGl4
ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZHN0
UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFBID0gaW4tPmFzUHJl
bXVsdGlwbGllZEltYWdlKGVmZmVjdEFEcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQ
aXhlbEFycmF5QSA9IHNyY0ltYWdlRGF0YUEtPmRhdGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxC
eXRlQXJyYXk+IHNyY1BpeGVsQXJyYXlBID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVj
dEFEcmF3aW5nUmVjdCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFCID0gaW4yLT5hc1VubXVsdGlwbGllZElt
YWdlKGVmZmVjdEJEcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QiA9
IHNyY0ltYWdlRGF0YUItPmRhdGEoKS0+ZGF0YSgpOwotCi0gICAgQnl0ZUFycmF5KiBkc3RQaXhl
bEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxCeXRlQXJy
YXk+IHNyY1BpeGVsQXJyYXlCID0gaW4yLT5hc1VubXVsdGlwbGllZEltYWdlKGVmZmVjdEJEcmF3
aW5nUmVjdCk7CiAKICAgICBBU1NFUlQoc3JjUGl4ZWxBcnJheUEtPmxlbmd0aCgpID09IHNyY1Bp
eGVsQXJyYXlCLT5sZW5ndGgoKSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gNzQ3ODEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAorI2lu
Y2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1
c2luZyBzdGQ6Om1heDsKQEAgLTE3MSwxNCArMTcxLDE0IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6
OmFwcGx5KCkKICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5
ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFzcmNQaXhlbEFy
cmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJ
bWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29w
eVByZW11bHRpcGxpZWRJbWFnZShyZXN1bHRJbWFnZSwgZWZmZWN0RHJhd2luZ1JlY3QpOworICAg
IGluLT5jb3B5UHJlbXVsdGlwbGllZEltYWdlKHNyY1BpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdS
ZWN0KTsKIAogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4OCw5ICsxODgsOCBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiAgICAgY2FsY3Vs
YXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBtX3N0ZFgs
IG1fc3RkWSk7CiAKICAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRh
KCktPmRhdGEoKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiB0bXBJbWFnZURhdGEgPSBJbWFnZURh
dGE6OmNyZWF0ZShwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICBC
eXRlQXJyYXkqIHRtcFBpeGVsQXJyYXkgPSB0bXBJbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwor
ICAgIFJlZlB0cjxCeXRlQXJyYXk+IHRtcEltYWdlRGF0YSA9IEJ5dGVBcnJheTo6Y3JlYXRlKHBh
aW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpICogNCk7CisgICAgQnl0ZUFycmF5
KiB0bXBQaXhlbEFycmF5ID0gdG1wSW1hZ2VEYXRhLmdldCgpOwogCiAgICAgaW50IHN0cmlkZSA9
IDQgKiBwYWludFNpemUud2lkdGgoKTsKICAgICBpbnQgZHhMZWZ0ID0gMDsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlz
aW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAjaWYgRU5BQkxFKEZJTFRF
UlMpCiAjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJh
eS5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzOCwxNSArMzM2LDE0IEBAIHZvaWQgRkVMaWdodGlu
Zzo6YXBwbHkoKQogICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJh
eSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFzcmNQaXhlbEFy
cmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCiAg
ICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFn
ZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVk
SW1hZ2UocmVzdWx0SW1hZ2UsIGVmZmVjdERyYXdpbmdSZWN0KTsKLSAgICBCeXRlQXJyYXkqIHNy
Y1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgaW4tPmNvcHlV
bm11bHRpcGxpZWRJbWFnZShzcmNQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CiAKICAg
ICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBU
aGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0
IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3Ry
YW5nZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3
LDggQEAKICNpbmNsdWRlICJGRU1vcnBob2xvZ3kuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogCisjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgc3RkOjptaW47CkBAIC05OCw4ICs5OCw4IEBA
IHZvaWQgRkVNb3JwaG9sb2d5OjphcHBseSgpCiAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVB
cnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwor
ICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CkBAIC0xMTEsOSArMTExLDcgQEAgdm9pZCBGRU1v
cnBob2xvZ3k6OmFwcGx5KCkKICAgICBpbnQgcmFkaXVzWSA9IHN0YXRpY19jYXN0PGludD4oZmxv
b3JmKGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fcmFkaXVzWSkpKTsKIAogICAgIEludFJl
Y3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURh
dGEgPSBpbi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2luZ1JlY3QpOwotICAgIEJ5
dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHNyY0ltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7Ci0g
ICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgp
OworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVsQXJyYXkgPSBpbi0+YXNQcmVtdWx0aXBs
aWVkSW1hZ2UoZWZmZWN0RHJhd2luZ1JlY3QpOwogCiAgICAgaW50IGVmZmVjdFdpZHRoID0gZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIDQ7CiAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkocmV2aXNpb24gNzQ3
ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIkZFVHVyYnVsZW5j
ZS5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKKyNp
bmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIyLDE0ICszMjIsMTMgQEAgdm9pZCBGRVR1cmJ1bGVu
Y2U6OmFwcGx5KCkKIHsKICAgICBpZiAoaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFwaXhlbEFycmF5KQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdl
LT5kYXRhKCktPmRhdGEoKTsKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwg
cm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKSk7CiAgICAg
aW5pdFBhaW50KHBhaW50aW5nRGF0YSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw4IEBACiAKICNpZiBFTkFCTEUoRklMVEVSUykKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUg
PHd0Zi9CeXRlQXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MiwzMiArODMs
MzEgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6YXNJbWFnZUJ1ZmZlcgogICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpLCBDb2xvclNwYWNlTGluZWFyUkdCKTsKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVj
dChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBk
ZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkp
OwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRlc3RpbmF0aW9uUmVj
dCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFVubXVsdGlw
bGllZEltYWdlRGF0YShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBkZXN0aW5hdGlv
blJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOwogICAgIHJldHVybiBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gRmls
dGVyRWZmZWN0Ojphc1VubXVsdGlwbGllZEltYWdlKGNvbnN0IEludFJlY3QmIHJlY3QpCitQYXNz
UmVmUHRyPEJ5dGVBcnJheT4gRmlsdGVyRWZmZWN0Ojphc1VubXVsdGlwbGllZEltYWdlKGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1h
Z2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBSZWZQdHI8
Qnl0ZUFycmF5PiBpbWFnZURhdGEgPSBCeXRlQXJyYXk6OmNyZWF0ZShyZWN0LndpZHRoKCkgKiBy
ZWN0LmhlaWdodCgpICogNCk7CiAgICAgY29weVVubXVsdGlwbGllZEltYWdlKGltYWdlRGF0YS5n
ZXQoKSwgcmVjdCk7CiAgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdlKGNvbnN0
IEludFJlY3QmIHJlY3QpCitQYXNzUmVmUHRyPEJ5dGVBcnJheT4gRmlsdGVyRWZmZWN0Ojphc1By
ZW11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIFJlZlB0cjxJbWFn
ZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gaW1hZ2VEYXRhID0gQnl0ZUFycmF5Ojpj
cmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOwogICAgIGNvcHlQcmVtdWx0
aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLmdldCgpLCByZWN0KTsKICAgICByZXR1cm4gaW1hZ2VEYXRh
LnJlbGVhc2UoKTsKIH0KIAotaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRl
cyhJbWFnZURhdGEqIHNvdXJjZSwgSW1hZ2VEYXRhKiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2lubGluZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoQnl0ZUFy
cmF5KiBzb3VyY2UsIEJ5dGVBcnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgLy8gQ29weSB0aGUgbmVjZXNzYXJ5IGxpbmVzLgotICAgIEFTU0VSVChJbnRTaXpl
KGRlc3RpbmF0aW9uLT53aWR0aCgpLCBkZXN0aW5hdGlvbi0+aGVpZ2h0KCkpID09IHJlY3Quc2l6
ZSgpKTsKICAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCByZWN0LmJvdHRv
bSgpID4gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpIHx8IHJlY3QuYm90dG9tKCkgPiBtX2Fi
c29sdXRlUGFpbnRSZWN0LmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24tPmRh
dGEoKS0+ZGF0YSgpLT5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLT5kYXRhKCktPmxlbmd0aCgpKTsK
KyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLT5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLT5sZW5n
dGgoKSk7CiAKICAgICBpbnQgeE9yaWdpbiA9IHJlY3QueCgpOwogICAgIGludCB4RGVzdCA9IDA7
CkBAIC0xMzIsOCArMTMyLDggQEAgaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VC
eXRlcwogICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7CiAgICAgaW50IGRlc3Rp
bmF0aW9uU2NhbmxpbmUgPSByZWN0LndpZHRoKCkgKiA0OwogICAgIGludCBzb3VyY2VTY2FubGlu
ZSA9IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgdW5zaWduZWQgY2hhciAq
ZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsg
KCh5RGVzdCAqIHJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OwotICAgIHVuc2lnbmVkIGNoYXIg
KnNvdXJjZVBpeGVsID0gc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsgKCh5T3JpZ2lu
ICogbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKyAgICB1bnNp
Z25lZCBjaGFyICpkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24tPmRhdGEoKSArICgoeURl
c3QgKiByZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKKyAgICB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2VQaXhlbCA9IHNvdXJjZS0+ZGF0YSgpICsgKCh5T3JpZ2luICogbV9hYnNvbHV0ZVBhaW50UmVj
dC53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKIAogICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkg
ewogICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOwpA
QCAtMTQzLDcgKzE0Myw3IEBAIGlubGluZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0
ZXMKICAgICB9CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2Uo
SW1hZ2VEYXRhKiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UoQnl0ZUFycmF5KiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCkBAIC0xNTIs
OSArMTUyLDkgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRJbWFnZQogICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFn
ZURhdGE6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWlu
dFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc291cmNlQ29tcG9u
ZW50ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgICAgICAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUobV9hYnNvbHV0
ZVBhaW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOwor
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc291cmNlQ29tcG9uZW50ID0gbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlc3Rp
bmF0aW9uQ29tcG9uZW50ID0gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwogICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKG1fYWJzb2x1
dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkgKiA0KTsK
ICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKICAgICAgICAgICAg
ICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CkBAIC0xNzYsNyArMTc2LDcgQEAg
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRJbWFnZQogICAgIGNvcHlJbWFnZUJ5
dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRlc3RpbmF0aW9uLCByZWN0KTsK
IH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkSW1hZ2UoSW1hZ2VEYXRh
KiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5UHJlbXVsdGlwbGllZEltYWdlKEJ5dGVBcnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIApAQCAtMTg1LDkgKzE4NSw5
IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZEltYWcKICAgICAgICAgaWYg
KG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50
UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRh
OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNvdXJjZUNvbXBvbmVudCA9
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgICAgICAgICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBCeXRlQXJyYXk6OmNyZWF0ZShtX2Fic29sdXRlUGFp
bnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpICogNCk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyKiBzb3VyY2VDb21wb25lbnQgPSBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlv
bkNvbXBvbmVudCA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyKiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAobV9hYnNvbHV0ZVBh
aW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOwogICAg
ICAgICAgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewogICAgICAgICAgICAgICAg
IGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKQEAgLTIxNywyNSArMjE3LDI1IEBAIElt
YWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnUKICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAotSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0J5dGVBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5
cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKICAgICBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IElt
YWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5oZWlnaHQoKSk7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEJ5dGVB
cnJheTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWlu
dFJlY3QuaGVpZ2h0KCkgKiA0KTsKICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC5nZXQoKTsKIH0KIAotSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpCitCeXRlQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCkKIHsKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxv
d2VkLgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwogICAgIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6
Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5o
ZWlnaHQoKSk7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBCeXRlQXJyYXk6OmNy
ZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0Lmhl
aWdodCgpICogNCk7CiAgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgp
OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTAgKzUyLDEw
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdCB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0OyB9CiAgICAgSW1hZ2VCdWZmZXIqIGFzSW1hZ2VCdWZmZXIoKTsKLSAg
ICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gYXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0
Jik7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGFzUHJlbXVsdGlwbGllZEltYWdlKGNvbnN0
IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRJbWFnZShJbWFnZURhdGEqIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZElt
YWdlKEltYWdlRGF0YSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKKyAgICBQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gYXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0Jik7CisgICAg
UGFzc1JlZlB0cjxCeXRlQXJyYXk+IGFzUHJlbXVsdGlwbGllZEltYWdlKGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRJbWFnZShCeXRlQXJyYXkqIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZEltYWdlKEJ5dGVB
cnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKIAogICAgIEZpbHRlckVmZmVjdFZl
Y3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0
ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKQEAgLTExMCwxMyArMTEwLDEz
IEBAIHByb3RlY3RlZDoKICAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyKik7CiAKICAgICBJbWFnZUJ1
ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZURhdGEqIGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBCeXRlQXJyYXkqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7CisgICAgQnl0ZUFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKIAogcHJpdmF0ZToKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1
bHQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQ
dHI8Qnl0ZUFycmF5PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxCeXRl
QXJyYXk+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogICAgIEZpbHRlckVmZmVjdFZlY3Rv
ciBtX2lucHV0RWZmZWN0czsKIAogICAgIGJvb2wgbV9hbHBoYUltYWdlOwpAQCAtMTI5LDcgKzEy
OSw3IEBAIHByaXZhdGU6CiAgICAgRmlsdGVyKiBtX2ZpbHRlcjsKIAogcHJpdmF0ZToKLSAgICBp
bmxpbmUgdm9pZCBjb3B5SW1hZ2VCeXRlcyhJbWFnZURhdGEqIHNvdXJjZSwgSW1hZ2VEYXRhKiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpOworICAgIGlubGluZSB2b2lkIGNvcHlJbWFnZUJ5
dGVzKEJ5dGVBcnJheSogc291cmNlLCBCeXRlQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRS
ZWN0Jik7CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlciB2YXJpYWJsZXMgYXJlIFNWRyBz
cGVjaWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LgogICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1NjE0LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVm
ZmVyUXQuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCwxMyArMTc4LDEzIEBA
IHZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3IKIH0KIAogdGVtcGxhdGUg
PE11bHRpcGx5IG11bHRpcGxpZWQ+Ci1QYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRh
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRTaXplJiBzaXplKQorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcmVzdWx0ID0g
SW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICB1bnNp
Z25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIFJl
ZlB0cjxCeXRlQXJyYXk+IHJlc3VsdCA9IEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAq
IHJlY3QuaGVpZ2h0KCkgKiA0KTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5k
YXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCAocmVjdC54
KCkgKyByZWN0LndpZHRoKCkpID4gc2l6ZS53aWR0aCgpIHx8IChyZWN0LnkoKSArIHJlY3QuaGVp
Z2h0KCkpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+
ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAg
fHwgcmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgpIHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhl
aWdodCgpKQorICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAKICAg
ICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwogICAgIGludCBkZXN0eCA9IDA7CkBAIC0xOTIsNyAr
MTkyLDcgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdAogICAgICAg
ICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAgICBvcmlnaW54ID0gMDsKICAgICB9Ci0gICAgaW50
IGVuZHggPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKTsKKyAgICBpbnQgZW5keCA9IHJlY3Qucmln
aHQoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5keCA9IHNpemUu
d2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwpAQCAtMjAzLDcg
KzIwMyw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAg
ICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7CiAgICAgfQotICAgIGlu
dCBlbmR5ID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOworICAgIGludCBlbmR5ID0gcmVjdC5i
b3R0b20oKTsKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVuZHkgPSBz
aXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CkBAIC0yNTcs
MTUgKzI1NywxNSBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorUGFzc1JlZlB0
cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFVubXVsdGlw
bGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4g
SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIHJldHVybiBn
ZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUpOwogfQpAQCAt
Mjg3LDcgKzI4Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHByZW11bHRpcGx5QUIK
IH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci12b2lkIHB1dEltYWdlRGF0YShJ
bWFnZURhdGEqJiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3ZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYg
c291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgSW1hZ2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewog
ICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVj
dC5oZWlnaHQoKSA+IDApOwpAQCAtMzE1LDE0ICszMTUsMTQgQEAgdm9pZCBwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhKiYgc291cmNlLCBjbwogICAgIEFTU0VSVChlbmR5IDw9IHNpemUuaGVpZ2h0KCkp
OwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRlc3R5OwogCi0gICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3cgPSA0ICogc291cmNlLT53aWR0aCgpOworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKIAogICAgIC8vIE5PVEU6IEZvciB1bm11bHRp
cGxpZWQgaW5wdXQgZGF0YSwgd2UgZG8gdGhlIHByZW11bHRpcGxpY2F0aW9uIGJlbG93LgogICAg
IFFJbWFnZSBpbWFnZShudW1Db2x1bW5zLCBudW1Sb3dzLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJf
UHJlbXVsdGlwbGllZCk7CiAgICAgdWNoYXIqIGJpdHMgPSBpbWFnZS5iaXRzKCk7CiAgICAgY29u
c3QgaW50IGJ5dGVzUGVyTGluZSA9IGltYWdlLmJ5dGVzUGVyTGluZSgpOwogCi0gICAgY29uc3Qg
cXVpbnQzMiogc3JjU2NhbkxpbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBxdWludDMy
Kj4oc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVy
Um93ICsgb3JpZ2lueCAqIDQpOworICAgIGNvbnN0IHF1aW50MzIqIHNyY1NjYW5MaW5lID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgcXVpbnQzMio+KHNvdXJjZS0+ZGF0YSgpICsgb3JpZ2lu
eSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpOwogCiAgICAgaWYgKG11bHRpcGxpZWQg
PT0gVW5tdWx0aXBsaWVkKSB7CiAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsg
Kyt5KSB7CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiYg
c291cmNlLCBjbwogICAgICAgICAgICAgICAgIHF1aW50MzIgcGl4ZWwgPSBzcmNTY2FuTGluZVt4
XTsKICAgICAgICAgICAgICAgICBkZXN0U2NhbkxpbmVbeF0gPSBwcmVtdWx0aXBseUFCR1J0b0FS
R0IocGl4ZWwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291
cmNlLT53aWR0aCgpOworICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291cmNlU2l6ZS53aWR0
aCgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBudW1Sb3dzOyArK3kpIHsKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIHB1dEltYWdlRGF0YShJ
bWFnZURhdGEqJiBzb3VyY2UsIGNvCiAgICAgICAgICAgICAgICAgcXVpbnQzMiBwaXhlbCA9IHNy
Y1NjYW5MaW5lW3hdOwogICAgICAgICAgICAgICAgIGRlc3RTY2FuTGluZVt4XSA9ICgocGl4ZWwg
PDwgMTYpICYgMHhmZjAwMDApIHwgKChwaXhlbCA+PiAxNikgJiAweGZmKSB8IChwaXhlbCAmIDB4
ZmYwMGZmMDApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291
cmNlLT53aWR0aCgpOworICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291cmNlU2l6ZS53aWR0
aCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNjcsMTQgKzM2NywxNCBAQCB2b2lkIHB1dElt
YWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2UsIGNvCiAgICAgICAgIGRhdGEubV9wYWludGVyLT5y
ZXN0b3JlKCk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0
YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdl
RGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBw
dXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwg
bV9kYXRhLCBtX3NpemUpOworICAgIHB1dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwg
c291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CiB9CiAK
LXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBz
b3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5dGVBcnJh
eSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIHB1dEltYWdlRGF0YTxQ
cmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3Np
emUpOworICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUs
IHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUpOwogfQogCiAvLyBXZSBnZXQg
YSBtaW1lVHlwZSBoZXJlIGJ1dCBRSW1hZ2VXcml0ZXIgZG9lcyBub3Qgc3VwcG9ydCBtaW1ldHlw
ZXMgYnV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDIz
ICsxNTYsMjQgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvcgogfQog
CiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwg
CitQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIFJlZlB0cjxJbWFnZURhdGE+IHJlc3Vs
dCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAg
UmVmUHRyPEJ5dGVBcnJheT4gcmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgp
ICogcmVjdC5oZWlnaHQoKSAqIDQpOwogCiAgICAgaWYgKGJpdG1hcC5jb25maWcoKSA9PSBTa0Jp
dG1hcDo6a05vX0NvbmZpZykgewogICAgICAgICAvLyBUaGlzIGlzIGFuIGVtcHR5IFNrQml0bWFw
IHRoYXQgY291bGQgbm90IGJlIGNvbmZpZ3VyZWQuCiAgICAgICAgIEFTU0VSVCghc2l6ZS53aWR0
aCgpIHx8ICFzaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgY2hhciogZGF0
YSA9IHJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBk
YXRhID0gcmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgp
IDwgMCB8fAotICAgICAgICAocmVjdC54KCkgKyByZWN0LndpZHRoKCkpID4gc2l6ZS53aWR0aCgp
IHx8Ci0gICAgICAgIChyZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpID4gc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAg
aWYgKHJlY3QueCgpIDwgMAorICAgICAgICB8fCByZWN0LnkoKSA8IDAKKyAgICAgICAgfHwgcmVj
dC5yaWdodCgpID4gc2l6ZS53aWR0aCgpCisgICAgICAgIHx8IHJlY3QuYm90dG9tKCkgPiBzaXpl
LmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAK
ICAgICBpbnQgb3JpZ2luWCA9IHJlY3QueCgpOwogICAgIGludCBkZXN0WCA9IDA7CkBAIC0xODAs
MTMgKzE4MSwxMyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAg
ICAgICAgIGRlc3RYID0gLW9yaWdpblg7CiAgICAgICAgIG9yaWdpblggPSAwOwogICAgIH0KLSAg
ICBpbnQgZW5kWCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGludCBlbmRYID0gcmVj
dC5yaWdodCgpOwogICAgIGlmIChlbmRYID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBlbmRYID0g
c2l6ZS53aWR0aCgpOwogICAgIGludCBudW1Db2x1bW5zID0gZW5kWCAtIG9yaWdpblg7CiAKICAg
ICBpZiAobnVtQ29sdW1ucyA8PSAwKSAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAKICAgICBpbnQgb3JpZ2luWSA9IHJlY3QueSgpOwog
ICAgIGludCBkZXN0WSA9IDA7CkBAIC0xOTQsMTMgKzE5NSwxMyBAQCBQYXNzUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3RZID0gLW9yaWdpblk7CiAgICAg
ICAgIG9yaWdpblkgPSAwOwogICAgIH0KLSAgICBpbnQgZW5kWSA9IHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKTsKKyAgICBpbnQgZW5kWSA9IHJlY3QuYm90dG9tKCk7CiAgICAgaWYgKGVuZFkgPiBz
aXplLmhlaWdodCgpKQogICAgICAgICBlbmRZID0gc2l6ZS5oZWlnaHQoKTsKICAgICBpbnQgbnVt
Um93cyA9IGVuZFkgLSBvcmlnaW5ZOwogCiAgICAgaWYgKG51bVJvd3MgPD0gMCkgCi0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogCiAgICAg
QVNTRVJUKGJpdG1hcC5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwog
ICAgIFNrQXV0b0xvY2tQaXhlbHMgYml0bWFwTG9jayhiaXRtYXApOwpAQCAtMjMxLDIzICsyMzIs
MjMgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBk
ZXN0Um93ICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4g
SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBjb250ZXh0KCkt
PnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKICAgICByZXR1cm4gZ2V0
SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmJpdG1hcCgpLCBtX3NpemUpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29u
c3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIGNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOwogICAgIHJldHVybiBnZXRJbWFn
ZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkt
PmJpdG1hcCgpLCBtX3NpemUpOwogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4K
LXZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgCit2b2lkIHB1dEltYWdlRGF0YShC
eXRlQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIAogICAgICAgICAgICAg
ICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAg
ICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7CkBAIC0yNzksOSArMjgwLDkgQEAgdm9p
ZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiYgc291cmNlLCBjbwogICAgIEFTU0VSVChiaXRtYXAu
Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKICAgICBTa0F1dG9Mb2Nr
UGl4ZWxzIGJpdG1hcExvY2soYml0bWFwKTsKIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
ID0gNCAqIHNvdXJjZS0+d2lkdGgoKTsKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQg
KiBzb3VyY2VTaXplLndpZHRoKCk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNSb3cg
PSBzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCkgKyBvcmlnaW5ZICogc3JjQnl0ZXNQZXJS
b3cgKyBvcmlnaW5YICogNDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNSb3cgPSBzb3Vy
Y2UtPmRhdGEoKSArIG9yaWdpblkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpblggKiA0OwogCiAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKICAgICAgICAgdWludDMyX3Qq
IGRlc3RSb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKGRlc3RYLCBkZXN0WSArIHkpOwpAQCAtMzAxLDE1
ICszMDIsMTUgQEAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiYgc291cmNlLCBjbwogICAg
IH0KIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdl
RGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5
dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKLSAgICBwdXRJ
bWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgKmNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUpOworICAgIHB1dElt
YWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVz
dFBvaW50LCAqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6ZSk7
CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VE
YXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5
dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIHB1dEltYWdl
RGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgKmNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUpOworICAgIHB1dEltYWdl
RGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIGRlc3RQ
b2ludCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUpOwog
fQogCiBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHJldmlzaW9uIDc0
NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNF
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDIxICsxMjIsMjEgQEAgdm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDbwogICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oY29u
dGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIGRlc3RSZWN0KTsKIH0KIAotdGVtcGxhdGUgPGJvb2wgcHJlbXVsdGlwbGllZD4gUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+Cit0ZW1wbGF0ZSA8Ym9vbCBwcmVtdWx0aXBsaWVkPiBQYXNzUmVmUHRy
PEJ5dGVBcnJheT4KIHN0YXRpYyBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgU2hhcmVkQml0bWFwKiBiaXRtYXApCiB7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGlt
YWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNy
YyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihiaXRtYXAtPmJ5dGVzKCkpOwog
ICAgIGlmICghc3JjKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgICAgICByZXR1cm4g
aW1hZ2VEYXRhLnJlbGVhc2UoKTsKIAogICAgIEludFJlY3Qgc291cmNlUmVjdCgwLCAwLCBiaXRt
YXAtPndpZHRoKCksIGJpdG1hcC0+aGVpZ2h0KCkpOwogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0
KHJlY3QpOwogICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGlt
YWdlRGF0YTsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7CiAKLSAgICB1bnNp
Z25lZCBjaGFyKiBkc3QgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAg
dW5zaWduZWQgY2hhciogZHN0ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgbWVtc2V0KGRzdCwg
MCwgaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+bGVuZ3RoKCkpOwogICAgIHNyYyArPSAoc291
cmNlUmVjdC55KCkgKiBiaXRtYXAtPndpZHRoKCkgKyBzb3VyY2VSZWN0LngoKSkgKiA0OwogICAg
IGRzdCArPSAoKHNvdXJjZVJlY3QueSgpIC0gcmVjdC55KCkpICogaW1hZ2VEYXRhLT53aWR0aCgp
ICsgc291cmNlUmVjdC54KCkgLSByZWN0LngoKSkgKiA0OwpAQCAtMTY5LDIxICsxNjksMjEgQEAg
c3RhdGljIGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LAogICAgICAgICBkc3QgKz0g
ZHN0U2tpcDsKICAgICB9CiAKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBpbWFn
ZURhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6
OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorUGFz
c1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPGZh
bHNlPihyZWN0LCBtX2RhdGEubV9iaXRtYXAuZ2V0KCkpOwogfQogCi1QYXNzUmVmUHRyPEltYWdl
RGF0YT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIHJl
dHVybiBnZXRJbWFnZURhdGE8dHJ1ZT4ocmVjdCwgbV9kYXRhLm1fYml0bWFwLmdldCgpKTsKIH0K
IAogdGVtcGxhdGUgPGJvb2wgcHJlbXVsdGlwbGllZD4KLXN0YXRpYyB2b2lkIHB1dEltYWdlRGF0
YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgU2hhcmVkQml0bWFwKiBiaXRtYXApCitzdGF0aWMgdm9pZCBwdXRJ
bWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFNoYXJl
ZEJpdG1hcCogYml0bWFwKQogewogICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9ICh1bnNpZ25lZCBj
aGFyKiliaXRtYXAtPmJ5dGVzKCk7CiAgICAgaWYgKCFkc3QpCkBAIC0xOTUsMTIgKzE5NSwxMiBA
QCBzdGF0aWMgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyCiAgICAgaWYgKGRlc3RS
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgdW5zaWduZWQgY2hh
ciogc3JjID0gc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIHNyYyA9IHNvdXJjZS0+ZGF0YSgpOwogICAgIGRzdCArPSAoZGVzdFJlY3QueSgp
ICogYml0bWFwLT53aWR0aCgpICsgZGVzdFJlY3QueCgpKSAqIDQ7Ci0gICAgc3JjICs9IChzb3Vy
Y2VSZWN0LnkoKSAqIHNvdXJjZS0+d2lkdGgoKSArIHNvdXJjZVJlY3QueCgpKSAqIDQ7CisgICAg
c3JjICs9IChzb3VyY2VSZWN0LnkoKSAqIHNvdXJjZVNpemUud2lkdGgoKSArIHNvdXJjZVJlY3Qu
eCgpKSAqIDQ7CiAgICAgaW50IGJ5dGVzVG9Db3B5ID0gZGVzdFJlY3Qud2lkdGgoKSAqIDQ7CiAg
ICAgaW50IGRzdFNraXAgPSAoYml0bWFwLT53aWR0aCgpIC0gZGVzdFJlY3Qud2lkdGgoKSkgKiA0
OwotICAgIGludCBzcmNTa2lwID0gKHNvdXJjZS0+d2lkdGgoKSAtIGRlc3RSZWN0LndpZHRoKCkp
ICogNDsKKyAgICBpbnQgc3JjU2tpcCA9IChzb3VyY2VTaXplLndpZHRoKCkgLSBkZXN0UmVjdC53
aWR0aCgpKSAqIDQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZHN0RW5kID0gZHN0ICsgZGVz
dFJlY3QuaGVpZ2h0KCkgKiBiaXRtYXAtPndpZHRoKCkgKiA0OwogICAgIHdoaWxlIChkc3QgPCBk
c3RFbmQpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZHN0Um93RW5kID0gZHN0ICsg
Ynl0ZXNUb0NvcHk7CkBAIC0yMjcsMTQgKzIyNywxNCBAQCBzdGF0aWMgdm9pZCBwdXRJbWFnZURh
dGEoSW1hZ2VEYXRhKiBzb3VyCiAgICAgfQogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhPGZhbHNlPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRl
c3RQb2ludCwgbV9kYXRhLm1fYml0bWFwLmdldCgpKTsKKyAgICBwdXRJbWFnZURhdGE8ZmFsc2U+
KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEubV9iaXRt
YXAuZ2V0KCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAg
ICBwdXRJbWFnZURhdGE8dHJ1ZT4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0
YS5tX2JpdG1hcC5nZXQoKSk7CisgICAgcHV0SW1hZ2VEYXRhPHRydWU+KHNvdXJjZSwgc291cmNl
U2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEubV9iaXRtYXAuZ2V0KCkpOwogfQog
CiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVj
dG9yPGludD4mIGxvb2tVcFRhYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9JbWFnZUJ1ZmZlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDI0ICs1NCwyNCBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0
dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorUGFzc1JlZlB0cjxC
eXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4g
MDsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdl
RGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5
dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURh
dGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKEJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQg
KzI0LDEyIEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCIKIAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNs
dWRlICJTVkdFbGVtZW50LmgiCkBAIC0zOSw2ICszNyw4IEBACiAjaW5jbHVkZSAiU1ZHTWFza0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVW5p
dFR5cGVzLmgiCisKKyNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCkBAIC0xNjEsOCArMTYxLDcg
QEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbgogCiAgICAgLy8gQ3Jl
YXRlIHRoZSBsdW1pbmFuY2UgbWFzay4KICAgICBJbnRSZWN0IG1hc2tJbWFnZVJlY3QoSW50UG9p
bnQoKSwgbWFza2VyRGF0YS0+bWFza0ltYWdlLT5zaXplKCkpOwotICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YSA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKG1hc2tJbWFnZVJlY3QpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IGlt
YWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxB
cnJheSA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKG1h
c2tJbWFnZVJlY3QpOwogCiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVs
QXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhl
bE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKQEAgLTE3Nyw3
ICsxNzYsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpkcmF3Q29udGVuCiAgICAg
ICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAot
ICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
RGF0YS5nZXQoKSwgbWFza0ltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgbWFza2VyRGF0YS0+
bWFza0ltYWdlLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoc3JjUGl4ZWxBcnJheS5nZXQoKSwg
bWFza0ltYWdlUmVjdC5zaXplKCksIG1hc2tJbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2
b2lkIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpjYWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRS
ZWN0KCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77754</attachid>
            <date>2011-01-01 13:24:57 -0800</date>
            <delta_ts>2011-01-01 13:39:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51297-20110101222452.patch</filename>
            <type>text/plain</type>
            <size>70954</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDg0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA5IEBACisyMDExLTAxLTAxICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xh
cmlmeSBJbWFnZUJ1ZmZlciBhbmQgSW1hZ2VEYXRhIHJlbGF0aW9uc2hpcAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEyOTcKKworICAgICAgICBSZW1v
dmUgcmVmZXJlbmNlcyB0byBJbWFnZURhdGEgYW5kIENhbnZhc1BpeGVsQXJyYXkgZnJvbSBJbWFn
ZUJ1ZmZlciBhbmQgU1ZHIGZpbHRlci9tYXNrZXIgY29kZSwKKyAgICAgICAgc2luY2UgdGhpcyB3
YXMgYSBsYXllcmluZyB2aW9sYXRpb24sIGFuZCByZXBsYWNlZCBpdCBieSBCeXRlQXJyYXkuCisK
KyAgICAgICAgTm8gY2hhbmdlIG9mIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0IGFkZGVk
LgorCisgICAgICAgICogaHRtbC9JbWFnZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpJbWFnZURhdGEp
OgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmg6IEFkZGVkIG5ldyBjb25zdHJ1Y3RvciB3aXRo
IEJ5dGVBcnJheSBpbnB1dC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6d2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEYXRhOjpkYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1BpeGVsQXJyYXk6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNQaXhlbEFycmF5OjpDYW52YXNQaXhlbEFycmF5KToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5Lmg6IE5ldyBjb25jdHJ1Y3RvciB3aXRo
IEJ5dGVBcnJheSBpbnB1dCwgdXNlZCBieSBIVE1MIENhbnZhcy4KKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1BpeGVsQXJyYXk6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUGl4ZWxB
cnJheTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1BpeGVsQXJyYXk6OnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNQaXhlbEFycmF5OjpnZXQpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9uUGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjphcHBseSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNVbm11bHRpcGxpZWRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlw
bGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVs
dGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6cHV0SW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmRyYXdDb250ZW50SW50
b01hc2tJbWFnZSk6CisKIDIwMTEtMDEtMDEgIEtvbnN0YW50aW4gVG9rYXJldiAgPGFubnVsZW5A
eWFuZGV4LnJ1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2Vi
Q29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ltYWdl
RGF0YS5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDExIEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJ
bWFnZURhdGE6OmNyZWF0ZSgKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlRGF0YSh3aWR0
aCwgaGVpZ2h0KSk7CiB9CiAKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0
ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4g
Ynl0ZUFycmF5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VEYXRhKHdpZHRoLCBo
ZWlnaHQsIGJ5dGVBcnJheSkpOworfQorCiBJbWFnZURhdGE6OkltYWdlRGF0YSh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogICAgIDogbV93aWR0aCh3aWR0aCkKICAgICAsIG1faGVp
Z2h0KGhlaWdodCkKQEAgLTQzLDUgKzQ4LDEyIEBAIEltYWdlRGF0YTo6SW1hZ2VEYXRhKHVuc2ln
bmVkIHdpZHRoLCB1bnMKIHsKIH0KIAorSW1hZ2VEYXRhOjpJbWFnZURhdGEodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGJ5dGVBcnJheSkKKyAg
ICA6IG1fd2lkdGgod2lkdGgpCisgICAgLCBtX2hlaWdodChoZWlnaHQpCisgICAgLCBtX2RhdGEo
Q2FudmFzUGl4ZWxBcnJheTo6Y3JlYXRlKGJ5dGVBcnJheSkpCit7Cit9CisKIH0KIApJbmRleDog
V2ViQ29yZS9odG1sL0ltYWdlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9JbWFn
ZURhdGEuaAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDI1ICszMCwyOSBAQAogI2RlZmluZSBJbWFnZURhdGFfaAogCiAj
aW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgSW1hZ2VEYXRhIDogcHVibGljIFJlZkNv
dW50ZWQ8SW1hZ2VEYXRhPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IGNyZWF0ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKLQot
ICAgICAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICAg
ICAgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KLSAgICAgICAg
Q2FudmFzUGl4ZWxBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgSW1hZ2VEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpOwotICAgICAgICB1bnNpZ25lZCBtX3dpZHRoOwotICAgICAgICB1bnNpZ25lZCBt
X2hlaWdodDsKLSAgICAgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IG1fZGF0YTsKLSAgICB9
OworY2xhc3MgSW1hZ2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VEYXRhPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGUodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBj
cmVhdGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0cjxCeXRlQXJy
YXk+KTsKKworICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisgICAgQ2Fu
dmFzUGl4ZWxBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorCitw
cml2YXRlOgorICAgIEltYWdlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsK
KyAgICBJbWFnZURhdGEodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+KTsKKworICAgIHVuc2lnbmVkIG1fd2lkdGg7CisgICAgdW5zaWduZWQgbV9o
ZWlnaHQ7CisgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IG1fZGF0YTsKK307CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhl
bEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BpeGVs
QXJyYXkuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UGl4ZWxBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwyNCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBD
YW52YXNQaXhlbEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQaXhlbEFycmF5KGxlbmd0aCkpOwotICAgIH0KLSAg
ICAKLSAgICBDYW52YXNQaXhlbEFycmF5OjpDYW52YXNQaXhlbEFycmF5KHVuc2lnbmVkIGxlbmd0
aCkKLSAgICAgICAgOiBtX2RhdGEoV1RGOjpCeXRlQXJyYXk6OmNyZWF0ZShsZW5ndGgpKQotICAg
IHsKLSAgICB9Ci0gICAgCitQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IENhbnZhc1BpeGVs
QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDYW52YXNQaXhlbEFycmF5KGxlbmd0aCkpOworfQorCitQYXNzUmVmUHRyPENhbnZhc1BpeGVs
QXJyYXk+IENhbnZhc1BpeGVsQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEJ5dGVBcnJheT4gYnl0
ZUFycmF5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzUGl4ZWxBcnJheShieXRl
QXJyYXkpKTsKK30KKworQ2FudmFzUGl4ZWxBcnJheTo6Q2FudmFzUGl4ZWxBcnJheSh1bnNpZ25l
ZCBsZW5ndGgpCisgICAgOiBtX2RhdGEoQnl0ZUFycmF5OjpjcmVhdGUobGVuZ3RoKSkKK3sKK30K
KworQ2FudmFzUGl4ZWxBcnJheTo6Q2FudmFzUGl4ZWxBcnJheShQYXNzUmVmUHRyPEJ5dGVBcnJh
eT4gYnl0ZUFycmF5KQorICAgIDogbV9kYXRhKGJ5dGVBcnJheSkKK3sKK30KKwogfQpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHJldmlzaW9uIDc0NzgxKQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDM4ICszNyw0MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgY2xhc3Mg
Q2FudmFzUGl4ZWxBcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc1BpeGVsQXJyYXk+IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+
IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgV1RGOjpCeXRlQXJy
YXkqIGRhdGEoKSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLSAgICAgICAgY29uc3QgV1RGOjpC
eXRlQXJyYXkqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLSAgICAgICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5sZW5ndGgoKTsgfQotICAg
ICAgICAKLSAgICAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9kYXRhLT5zZXQoaW5kZXgsIHZhbHVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2RhdGEtPnNldChpbmRleCwgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIGdldCh1bnNpZ25lZCBpbmRleCwgdW5zaWdu
ZWQgY2hhciYgcmVzdWx0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9k
YXRhLT5nZXQoaW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBj
aGFyIGdldCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fZGF0YS0+Z2V0KGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgQ2FudmFzUGl4ZWxBcnJheSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBSZWZQdHI8V1RG
OjpCeXRlQXJyYXk+IG1fZGF0YTsKLSAgICB9OworY2xhc3MgQ2FudmFzUGl4ZWxBcnJheSA6IHB1
YmxpYyBSZWZDb3VudGVkPENhbnZhc1BpeGVsQXJyYXk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxC
eXRlQXJyYXk+KTsKKworICAgIEJ5dGVBcnJheSogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5nZXQo
KTsgfQorICAgIGNvbnN0IEJ5dGVBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5n
ZXQoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+bGVu
Z3RoKCk7IH0KKyAgICAKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgbV9kYXRhLT5zZXQoaW5kZXgsIHZhbHVlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgY2hhciB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIG1fZGF0YS0+c2V0KGluZGV4LCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
Z2V0KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBjaGFyJiByZXN1bHQpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9kYXRhLT5nZXQoaW5kZXgsIHJlc3VsdCk7CisgICAgfQorCisgICAg
dW5zaWduZWQgY2hhciBnZXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9kYXRhLT5nZXQoaW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYW52YXNQ
aXhlbEFycmF5KHVuc2lnbmVkIGxlbmd0aCk7CisgICAgQ2FudmFzUGl4ZWxBcnJheShQYXNzUmVm
UHRyPEJ5dGVBcnJheT4pOworCisgICAgUmVmUHRyPEJ5dGVBcnJheT4gbV9kYXRhOworfTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gNzQ3ODEpCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1ODcsNyArMTU4Nyw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBDYW52YXNS
ZW5kZXJpbmdDb24KICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzKCktPmJ1ZmZlcigp
OwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEo
c2NhbGVkUmVjdC5zaXplKCkpOwotICAgIHJldHVybiBidWZmZXItPmdldFVubXVsdGlwbGllZElt
YWdlRGF0YShzY2FsZWRSZWN0KTsKKyAgICByZXR1cm4gSW1hZ2VEYXRhOjpjcmVhdGUoc2NhbGVk
UmVjdC53aWR0aCgpLCBzY2FsZWRSZWN0LmhlaWdodCgpLCBidWZmZXItPmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShzY2FsZWRSZWN0KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHksIEV4
Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTYzNiw3ICsxNjM2LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnB1dEltYWdlRAogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7
CiAgICAgc291cmNlUmVjdC5tb3ZlKC1kZXN0T2Zmc2V0KTsKIAotICAgIGJ1ZmZlci0+cHV0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGRhdGEsIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQp
KTsKKyAgICBidWZmZXItPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShkYXRhLT5kYXRhKCktPmRh
dGEoKSwgSW50U2l6ZShkYXRhLT53aWR0aCgpLCBkYXRhLT5oZWlnaHQoKSksIHNvdXJjZVJlY3Qs
IEludFBvaW50KGRlc3RPZmZzZXQpKTsKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWRE
cmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDc0
NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCisjaW5jbHVkZSA8d3RmL0J5
dGVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC04MywxMSArODQsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGRyYXdzVXNpbmdDb3B5KCkgY29uc3Q7IC8v
IElmIHRoZSBpbWFnZSBidWZmZXIgaGFzIHRvIHJlbmRlciB1c2luZyBhIGNvcGllZCBpbWFnZSwg
aXQgd2lsbCByZXR1cm4gdHJ1ZS4KICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY29weUltYWdl
KCkgY29uc3Q7IC8vIFJldHVybiBhIG5ldyBpbWFnZSB0aGF0IGlzIGEgY29weSBvZiB0aGUgYnVm
ZmVyLgogCi0gICAgICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAg
ICAgIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYpIGNvbnN0OworICAgICAgICBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBw
dXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7Ci0gICAgICAgIHZvaWQgcHV0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50KTsKKyAgICAgICAgdm9pZCBwdXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoQnl0ZUFycmF5KiwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7CisgICAgICAgIHZv
aWQgcHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqLCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50KTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5ID0gMCkgY29uc3Q7CiAjaWYgIVBMQVRG
T1JNKENHKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MSwxNiArMTUxLDE2IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29s
b3IKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci1QYXNzUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVy
RGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBn
ZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBk
YXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dl
dF90eXBlKGRhdGEubV9zdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOwogCi0g
ICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gcmVzdWx0ID0g
Qnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOwogICAg
IHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGRh
dGEubV9zdXJmYWNlKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRh
KCktPmRhdGEoKS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFEc3QgPSByZXN1bHQt
PmRhdGEoKTsKIAogICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IChyZWN0
LngoKSArIHJlY3Qud2lkdGgoKSkgPiBzaXplLndpZHRoKCkgfHwgKHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKSkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGF0YURzdCwgMCwgcmVz
dWx0LT5kYXRhKCktPmxlbmd0aCgpKTsKKyAgICAgICAgbWVtc2V0KGRhdGFEc3QsIDAsIHJlc3Vs
dC0+bGVuZ3RoKCkpOwogCiAgICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKICAgICBpbnQgZGVz
dHggPSAwOwpAQCAtMTY4LDcgKzE2OCw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFn
ZURhdGEoY29uc3QKICAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKICAgICAgICAgb3JpZ2lueCA9
IDA7CiAgICAgfQotICAgIGludCBlbmR4ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCk7CisgICAg
aW50IGVuZHggPSByZWN0LnJpZ2h0KCk7CiAgICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCiAg
ICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0g
b3JpZ2lueDsKQEAgLTE3OSw3ICsxNzksNyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7CiAgICAgICAgIG9yaWdpbnkg
PSAwOwogICAgIH0KLSAgICBpbnQgZW5keSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKTsKKyAg
ICBpbnQgZW5keSA9IHJlY3QuYm90dG9tKCk7CiAgICAgaWYgKGVuZHkgPiBzaXplLmhlaWdodCgp
KQogICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKICAgICBpbnQgbnVtUm93cyA9IGVuZHkg
LSBvcmlnaW55OwpAQCAtMjA2LDIxICsyMDYsMjEgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdl
dEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CiAg
ICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
IH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5
PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHJlY3Qs
IG1fZGF0YSwgbV9zaXplKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVy
OjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitQ
YXNzUmVmUHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRh
PFByZW11bHRpcGxpZWQ+KHJlY3QsIG1fZGF0YSwgbV9zaXplKTsKIH0KIAogdGVtcGxhdGUgPE11
bHRpcGx5IG11bHRpcGxpZWQ+Ci12b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2Us
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIElt
YWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgcHV0SW1hZ2VE
YXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW1hZ2VCdWZm
ZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VSVChjYWlyb19z
dXJmYWNlX2dldF90eXBlKGRhdGEubV9zdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1B
R0UpOwogCkBAIC0yNTIsMTAgKzI1MiwxMCBAQCB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEq
JiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgaW50
IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CiAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9
IDQgKiBzb3VyY2UtPndpZHRoKCk7CisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICog
c291cmNlU2l6ZS53aWR0aCgpOwogICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUoZGF0YS5tX3N1cmZhY2UpOwogCi0gICAgdW5zaWduZWQgY2hhciogc3JjUm93
cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1Bl
clJvdyArIG9yaWdpbnggKiA0OworICAgIHVuc2lnbmVkIGNoYXIqIHNyY1Jvd3MgPSBzb3VyY2Ut
PmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwogICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7CiAgICAgICAgIHVuc2lnbmVkKiByb3cg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGF0YURzdCArIHN0cmlkZSAqICh5ICsgZGVz
dHkpKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKQEAg
LTI3NywxNCArMjc3LDE0IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwg
Y28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1Db2x1bW5zLCBu
dW1Sb3dzKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKEJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIHB1
dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBt
X2RhdGEsIG1fc2l6ZSk7CisgICAgcHV0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBz
b3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplKTsKIH0KIAot
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNv
dXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5
KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhPFBy
ZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6
ZSk7CisgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwg
c291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CiB9CiAKICNpZiAhUExBVEZP
Uk0oR1RLKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0y
NTMsMTMgKzI1MiwxMyBAQCB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCog
CiB9CiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgotUGFzc1JlZlB0cjxJbWFnZURh
dGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVy
aW5nKQorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQogewotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiByZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSByZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRh
KCk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gcmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUocmVj
dC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEg
PSByZXN1bHQtPmRhdGEoKTsKIAotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAw
IHx8IChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSkgPiBzaXplLndpZHRoKCkgfHwgKHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGF0YSwg
MCwgcmVzdWx0LT5kYXRhKCktPmxlbmd0aCgpKTsKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJl
Y3QueSgpIDwgMCB8fCByZWN0LnJpZ2h0KCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5ib3R0b20o
KSA+IHNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkYXRhLCAwLCByZXN1bHQtPmxlbmd0
aCgpKTsKIAogICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7CiAgICAgaW50IGRlc3R4ID0gMDsK
QEAgLTI2Nyw3ICsyNjYsNyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNv
bnN0CiAgICAgICAgIGRlc3R4ID0gLW9yaWdpbng7CiAgICAgICAgIG9yaWdpbnggPSAwOwogICAg
IH0KLSAgICBpbnQgZW5keCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGludCBlbmR4
ID0gcmVjdC5yaWdodCgpOwogICAgIGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBl
bmR4ID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7
CkBAIC0yNzgsNyArMjc3LDcgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShj
b25zdAogICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwogICAgICAgICBvcmlnaW55ID0gMDsKICAg
ICB9Ci0gICAgaW50IGVuZHkgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCk7CisgICAgaW50IGVu
ZHkgPSByZWN0LmJvdHRvbSgpOwogICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAg
ICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lu
eTsKQEAgLTM0MCwxNyArMzM5LDE3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoY29uc3QKICNlbmRpZgogICAgIH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25z
dAorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBpZiAobV9hY2NlbGVyYXRl
UmVuZGVyaW5nKQogICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgbV9k
YXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CiB9CiAKLVBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0KSBjb25zdAorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAg
aWYgKG1fYWNjZWxlcmF0ZVJlbmRlcmluZykKICAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CkBAIC0zNTgsNyArMzU3LDcgQEAgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRQcgogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVs
dGlwbGllZD4KLXZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW1hZ2VCdWZmZXJE
YXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZykKK3ZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6
ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgSW1hZ2VCdWZmZXJEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53
aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTM4
Niw4ICszODUsOCBAQCB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2UsIGNvCiAg
ICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5
IC0gZGVzdHk7CiAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2UtPndp
ZHRoKCk7Ci0gICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRh
KCktPmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OworICAg
IHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBzcmNSb3dzID0gc291cmNlLT5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0
ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7CiAg
ICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3M7CiAKQEAgLTQ0MiwxOCArNDQxLDE4IEBAIHZvaWQg
cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY28KICAgICB9CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3ZvaWQg
SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwg
Y29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKICAgICBpZiAobV9hY2NlbGVyYXRlUmVuZGVyaW5n
KQogICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICBwdXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQ
b2ludCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CisgICAgcHV0SW1h
Z2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0
UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJpbmcpOwogfQogCi12b2lk
IEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQor
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqIHNv
dXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKICAgICBpZiAobV9hY2NlbGVyYXRlUmVu
ZGVyaW5nKQogICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICBwdXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VSZWN0
LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJpbmcpOworICAg
IHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJl
Y3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCShyZXZpc2lvbiA3NDc4MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDExIEBACiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVk
ZSAiRkVCbGVuZC5oIgogCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUgPHd0Zi9CeXRlQXJy
YXkuaD4KIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyICgqQmxlbmRUeXBlKSh1bnNpZ25lZCBjaGFy
IGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNp
Z25lZCBjaGFyIGFscGhhQik7CiAKQEAgLTEwMCwxOSArMTAwLDE1IEBAIHZvaWQgRkVCbGVuZDo6
YXBwbHkoKQogICAgIGlmIChtX21vZGUgPD0gRkVCTEVORF9NT0RFX1VOS05PV04gfHwgbV9tb2Rl
ID4gRkVCTEVORF9NT0RFX0xJR0hURU4pCiAgICAgICAgIHJldHVybjsKIAotICAgIEltYWdlRGF0
YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQ
dHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFBID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVm
ZmVjdEFEcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QSA9IHNyY0lt
YWdlRGF0YUEtPmRhdGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVs
QXJyYXlBID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAK
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJ
bWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBzcmNJbWFnZURhdGFCID0gaW4yLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RCRHJhd2lu
Z1JlY3QpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUIgPSBzcmNJbWFnZURhdGFCLT5k
YXRhKCktPmRhdGEoKTsKLQotICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlLT5kYXRhKCktPmRhdGEoKTsKKyAgICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5
QiA9IGluMi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0QkRyYXdpbmdSZWN0KTsKIAogICAg
IC8vIEtlZXAgc3luY2hyb25pemVkIHdpdGggQmxlbmRNb2RlVHlwZQogICAgIHN0YXRpYyBjb25z
dCBCbGVuZFR5cGUgY2FsbEVmZmVjdFtdID0ge3Vua25vd24sIG5vcm1hbCwgbXVsdGlwbHksIHNj
cmVlbiwgZGFya2VuLCBsaWdodGVufTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAorI2luY2x1
ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0xNjQsMjggKzE2NCwyNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6
OmFwcGx5KCkKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoaW4t
PmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJl
Y3QoSW50UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoaW1hZ2VSZWN0KTsKLSAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRh
dGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHBpeGVsQXJyYXkgPSByZXN1bHRJ
bWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCk7CiAKICAgICBzd2l0Y2gg
KG1fdHlwZSkgewotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoK
LSAgICAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxB
cnJheSwgbV92YWx1ZXMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX1NBVFVSQVRFPihwaXhlbEFycmF5LCBtX3ZhbHVlcyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAg
ICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5
LCBtX3ZhbHVlcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIG1fdmFsdWVzKTsKLSAg
ICAgICAgICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9S
TUFUUklYX1RZUEVfTUFUUklYPihwaXhlbEFycmF5LmdldCgpLCBtX3ZhbHVlcyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKKyAgICAgICAg
ZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXkuZ2V0KCks
IG1fdmFsdWVzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU+KHBpeGVsQXJyYXkuZ2V0KCksIG1fdmFsdWVzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheS5nZXQoKSwg
bV92YWx1ZXMpOworICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CisgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1h
Z2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5w
dXRVbm11bHRpcGxpZWRJbWFnZURhdGEocGl4ZWxBcnJheS5nZXQoKSwgaW1hZ2VSZWN0LnNpemUo
KSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUNvbG9yTWF0cml4OjpkdW1w
KCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAorI2luY2x1ZGUg
PHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0xNTYsOCArMTU2LDggQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVy
OjphcHBseSgpCiAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgY2hhciByVmFsdWVzWzI1Nl0sIGdWYWx1ZXNbMjU2
XSwgYlZhbHVlc1syNTZdLCBhVmFsdWVzWzI1Nl07CkBAIC0xNzEsOCArMTcxLDcgQEAgdm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSgpCiAgICAgICAgICgqY2FsbEVmZmVjdFt0cmFuc2Zl
ckZ1bmN0aW9uW2NoYW5uZWxdLnR5cGVdKSh0YWJsZXNbY2hhbm5lbF0sIHRyYW5zZmVyRnVuY3Rp
b25bY2hhbm5lbF0pOwogCiAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5
VW5tdWx0aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLCBkcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5
KiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICBpbi0+Y29weVVu
bXVsdGlwbGllZEltYWdlKHBpeGVsQXJyYXksIGRyYXdpbmdSZWN0KTsKIAogICAgIHVuc2lnbmVk
IHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2ln
bmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhl
bE9mZnNldCArPSA0KSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsOCBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisKKyNpbmNsdWRlIDx3dGYvQnl0ZUFy
cmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTkwLDE3ICsxOTEsMTcgQEAgdm9p
ZCBGRUNvbXBvc2l0ZTo6YXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV90eXBl
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgSW1hZ2VEYXRh
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgICAg
ICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICAgICAgaWYgKCFkc3RQaXhlbEFy
cmF5KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YSA9IGluLT5h
c1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgICAgICBSZWZQdHI8
Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5ID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVj
dEFEcmF3aW5nUmVjdCk7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRJbWFnZShyZXN1bHRJbWFnZSwgZWZmZWN0
QkRyYXdpbmdSZWN0KTsKKyAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZEltYWdlKGRzdFBp
eGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKLSAgICAgICAgYXJpdGhtZXRpYyhzcmNJ
bWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCksIG1f
azEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAgICBhcml0aG1ldGljKHNyY1BpeGVsQXJyYXku
Z2V0KCksIGRzdFBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAogI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1
ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUg
PHd0Zi9CeXRlQXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMDIsNyArMjAy
LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcAogfQogCiB0ZW1w
bGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVz
dGluYXRpb25QaXhlbHMoQ2FudmFzUGl4ZWxBcnJheSogaW1hZ2UsIGludCYgcGl4ZWwsIGZsb2F0
KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIENhbnZhc1BpeGVsQXJyYXkqIHNy
YykKK0FMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhCeXRlQXJyYXkqIGlt
YWdlLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFz
LCBCeXRlQXJyYXkqIHNyYykKIHsKICAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2Vy
dmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3Ig
KyBiaWFzKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKQEAgLTM3OSw3ICszNzks
NyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KCkKICAgICBpZiAoIWluLT5oYXNSZXN1
bHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZTsKKyAg
ICBCeXRlQXJyYXkqIHJlc3VsdEltYWdlOwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCiAgICAg
ICAgIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBl
bHNlCkBAIC0zODksMTYgKzM4OSwxNiBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KCkK
IAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAotICAgIFJlZlB0cjxDYW52YXNQ
aXhlbEFycmF5PiBzcmNQaXhlbEFycmF5OworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVs
QXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9
IGluLT5hc1VubXVsdGlwbGllZEltYWdlKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOworICAg
ICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPmFzVW5tdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2lu
Z1JlY3QpOwogICAgIGVsc2UKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5hc1ByZW11bHRp
cGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKTsKKyAgICAgICAgc3JjUGl4ZWxB
cnJheSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCk7CiAKICAg
ICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIFBh
aW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkg
PSBzcmNQaXhlbEFycmF5LmdldCgpOwotICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0g
cmVzdWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlOwogICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwog
ICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBwYWludFNpemUuaGVpZ2h0KCk7CiAgICAgcGFpbnRp
bmdEYXRhLmJpYXMgPSBtX2JpYXMgKiAyNTU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgJKHJldmlzaW9uIDc0Nzgx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aAkod29ya2luZyBjb3B5KQpAQCAtODQsOCArODQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Y29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29sLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKICAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAg
ICAgQ2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgQ2FudmFzUGl4ZWxB
cnJheSogZHN0UGl4ZWxBcnJheTsKKyAgICAgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5Owor
ICAgICAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXk7CiAgICAgICAgIGludCB3aWR0aDsKICAg
ICAgICAgaW50IGhlaWdodDsKICAgICAgICAgZmxvYXQgYmlhczsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw4IEBACiAK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC05MCwxOSArOTEsMTUgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1h
cDo6YXBwbHkoKQogICAgIGlmIChtX3hDaGFubmVsU2VsZWN0b3IgPT0gQ0hBTk5FTF9VTktOT1dO
IHx8IG1feUNoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VOS05PV04pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogZHN0UGl4
ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZHN0
UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFBID0gaW4tPmFzUHJl
bXVsdGlwbGllZEltYWdlKGVmZmVjdEFEcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQ
aXhlbEFycmF5QSA9IHNyY0ltYWdlRGF0YUEtPmRhdGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxC
eXRlQXJyYXk+IHNyY1BpeGVsQXJyYXlBID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVj
dEFEcmF3aW5nUmVjdCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFCID0gaW4yLT5hc1VubXVsdGlwbGllZElt
YWdlKGVmZmVjdEJEcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QiA9
IHNyY0ltYWdlRGF0YUItPmRhdGEoKS0+ZGF0YSgpOwotCi0gICAgQnl0ZUFycmF5KiBkc3RQaXhl
bEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxCeXRlQXJy
YXk+IHNyY1BpeGVsQXJyYXlCID0gaW4yLT5hc1VubXVsdGlwbGllZEltYWdlKGVmZmVjdEJEcmF3
aW5nUmVjdCk7CiAKICAgICBBU1NFUlQoc3JjUGl4ZWxBcnJheUEtPmxlbmd0aCgpID09IHNyY1Bp
eGVsQXJyYXlCLT5sZW5ndGgoKSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gNzQ3ODEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAorI2lu
Y2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1
c2luZyBzdGQ6Om1heDsKQEAgLTE3MSwxNCArMTcxLDE0IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6
OmFwcGx5KCkKICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5
ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFzcmNQaXhlbEFy
cmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJ
bWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29w
eVByZW11bHRpcGxpZWRJbWFnZShyZXN1bHRJbWFnZSwgZWZmZWN0RHJhd2luZ1JlY3QpOworICAg
IGluLT5jb3B5UHJlbXVsdGlwbGllZEltYWdlKHNyY1BpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdS
ZWN0KTsKIAogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4OCw5ICsxODgsOCBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiAgICAgY2FsY3Vs
YXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBtX3N0ZFgs
IG1fc3RkWSk7CiAKICAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRh
KCktPmRhdGEoKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiB0bXBJbWFnZURhdGEgPSBJbWFnZURh
dGE6OmNyZWF0ZShwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICBC
eXRlQXJyYXkqIHRtcFBpeGVsQXJyYXkgPSB0bXBJbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwor
ICAgIFJlZlB0cjxCeXRlQXJyYXk+IHRtcEltYWdlRGF0YSA9IEJ5dGVBcnJheTo6Y3JlYXRlKHBh
aW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpICogNCk7CisgICAgQnl0ZUFycmF5
KiB0bXBQaXhlbEFycmF5ID0gdG1wSW1hZ2VEYXRhLmdldCgpOwogCiAgICAgaW50IHN0cmlkZSA9
IDQgKiBwYWludFNpemUud2lkdGgoKTsKICAgICBpbnQgZHhMZWZ0ID0gMDsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlz
aW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAjaWYgRU5BQkxFKEZJTFRF
UlMpCiAjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJh
eS5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzOCwxNSArMzM2LDE0IEBAIHZvaWQgRkVMaWdodGlu
Zzo6YXBwbHkoKQogICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJh
eSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFzcmNQaXhlbEFy
cmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCiAg
ICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFn
ZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVk
SW1hZ2UocmVzdWx0SW1hZ2UsIGVmZmVjdERyYXdpbmdSZWN0KTsKLSAgICBCeXRlQXJyYXkqIHNy
Y1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgaW4tPmNvcHlV
bm11bHRpcGxpZWRJbWFnZShzcmNQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CiAKICAg
ICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBU
aGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0
IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3Ry
YW5nZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3
LDggQEAKICNpbmNsdWRlICJGRU1vcnBob2xvZ3kuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogCisjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgc3RkOjptaW47CkBAIC05OCw4ICs5OCw4IEBA
IHZvaWQgRkVNb3JwaG9sb2d5OjphcHBseSgpCiAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVB
cnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwor
ICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CkBAIC0xMTEsOSArMTExLDcgQEAgdm9pZCBGRU1v
cnBob2xvZ3k6OmFwcGx5KCkKICAgICBpbnQgcmFkaXVzWSA9IHN0YXRpY19jYXN0PGludD4oZmxv
b3JmKGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fcmFkaXVzWSkpKTsKIAogICAgIEludFJl
Y3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURh
dGEgPSBpbi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2luZ1JlY3QpOwotICAgIEJ5
dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHNyY0ltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7Ci0g
ICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgp
OworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVsQXJyYXkgPSBpbi0+YXNQcmVtdWx0aXBs
aWVkSW1hZ2UoZWZmZWN0RHJhd2luZ1JlY3QpOwogCiAgICAgaW50IGVmZmVjdFdpZHRoID0gZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIDQ7CiAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkocmV2aXNpb24gNzQ3
ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIkZFVHVyYnVsZW5j
ZS5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKKyNp
bmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIyLDE0ICszMjIsMTMgQEAgdm9pZCBGRVR1cmJ1bGVu
Y2U6OmFwcGx5KCkKIHsKICAgICBpZiAoaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFwaXhlbEFycmF5KQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdl
LT5kYXRhKCktPmRhdGEoKTsKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwg
cm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKSk7CiAgICAg
aW5pdFBhaW50KHBhaW50aW5nRGF0YSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw4IEBACiAKICNpZiBFTkFCTEUoRklMVEVSUykKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUg
PHd0Zi9CeXRlQXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MiwzMiArODMs
MzEgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6YXNJbWFnZUJ1ZmZlcgogICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpLCBDb2xvclNwYWNlTGluZWFyUkdCKTsKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVj
dChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBk
ZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkp
OwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRlc3RpbmF0aW9uUmVj
dCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFVubXVsdGlw
bGllZEltYWdlRGF0YShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBkZXN0aW5hdGlv
blJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOwogICAgIHJldHVybiBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gRmls
dGVyRWZmZWN0Ojphc1VubXVsdGlwbGllZEltYWdlKGNvbnN0IEludFJlY3QmIHJlY3QpCitQYXNz
UmVmUHRyPEJ5dGVBcnJheT4gRmlsdGVyRWZmZWN0Ojphc1VubXVsdGlwbGllZEltYWdlKGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1h
Z2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBSZWZQdHI8
Qnl0ZUFycmF5PiBpbWFnZURhdGEgPSBCeXRlQXJyYXk6OmNyZWF0ZShyZWN0LndpZHRoKCkgKiBy
ZWN0LmhlaWdodCgpICogNCk7CiAgICAgY29weVVubXVsdGlwbGllZEltYWdlKGltYWdlRGF0YS5n
ZXQoKSwgcmVjdCk7CiAgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdlKGNvbnN0
IEludFJlY3QmIHJlY3QpCitQYXNzUmVmUHRyPEJ5dGVBcnJheT4gRmlsdGVyRWZmZWN0Ojphc1By
ZW11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIFJlZlB0cjxJbWFn
ZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gaW1hZ2VEYXRhID0gQnl0ZUFycmF5Ojpj
cmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOwogICAgIGNvcHlQcmVtdWx0
aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLmdldCgpLCByZWN0KTsKICAgICByZXR1cm4gaW1hZ2VEYXRh
LnJlbGVhc2UoKTsKIH0KIAotaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRl
cyhJbWFnZURhdGEqIHNvdXJjZSwgSW1hZ2VEYXRhKiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2lubGluZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoQnl0ZUFy
cmF5KiBzb3VyY2UsIEJ5dGVBcnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgLy8gQ29weSB0aGUgbmVjZXNzYXJ5IGxpbmVzLgotICAgIEFTU0VSVChJbnRTaXpl
KGRlc3RpbmF0aW9uLT53aWR0aCgpLCBkZXN0aW5hdGlvbi0+aGVpZ2h0KCkpID09IHJlY3Quc2l6
ZSgpKTsKICAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCByZWN0LmJvdHRv
bSgpID4gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpIHx8IHJlY3QuYm90dG9tKCkgPiBtX2Fi
c29sdXRlUGFpbnRSZWN0LmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24tPmRh
dGEoKS0+ZGF0YSgpLT5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLT5kYXRhKCktPmxlbmd0aCgpKTsK
KyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLT5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLT5sZW5n
dGgoKSk7CiAKICAgICBpbnQgeE9yaWdpbiA9IHJlY3QueCgpOwogICAgIGludCB4RGVzdCA9IDA7
CkBAIC0xMzIsOCArMTMyLDggQEAgaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VC
eXRlcwogICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7CiAgICAgaW50IGRlc3Rp
bmF0aW9uU2NhbmxpbmUgPSByZWN0LndpZHRoKCkgKiA0OwogICAgIGludCBzb3VyY2VTY2FubGlu
ZSA9IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgdW5zaWduZWQgY2hhciAq
ZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsg
KCh5RGVzdCAqIHJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OwotICAgIHVuc2lnbmVkIGNoYXIg
KnNvdXJjZVBpeGVsID0gc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsgKCh5T3JpZ2lu
ICogbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKyAgICB1bnNp
Z25lZCBjaGFyICpkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24tPmRhdGEoKSArICgoeURl
c3QgKiByZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKKyAgICB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2VQaXhlbCA9IHNvdXJjZS0+ZGF0YSgpICsgKCh5T3JpZ2luICogbV9hYnNvbHV0ZVBhaW50UmVj
dC53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKIAogICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkg
ewogICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOwpA
QCAtMTQzLDcgKzE0Myw3IEBAIGlubGluZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0
ZXMKICAgICB9CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2Uo
SW1hZ2VEYXRhKiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UoQnl0ZUFycmF5KiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCkBAIC0xNTIs
OSArMTUyLDkgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRJbWFnZQogICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFn
ZURhdGE6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWlu
dFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc291cmNlQ29tcG9u
ZW50ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgICAgICAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUobV9hYnNvbHV0
ZVBhaW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOwor
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc291cmNlQ29tcG9uZW50ID0gbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlc3Rp
bmF0aW9uQ29tcG9uZW50ID0gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwogICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKG1fYWJzb2x1
dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkgKiA0KTsK
ICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKICAgICAgICAgICAg
ICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CkBAIC0xNzYsNyArMTc2LDcgQEAg
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRJbWFnZQogICAgIGNvcHlJbWFnZUJ5
dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRlc3RpbmF0aW9uLCByZWN0KTsK
IH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkSW1hZ2UoSW1hZ2VEYXRh
KiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5UHJlbXVsdGlwbGllZEltYWdlKEJ5dGVBcnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIApAQCAtMTg1LDkgKzE4NSw5
IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZEltYWcKICAgICAgICAgaWYg
KG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50
UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRh
OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNvdXJjZUNvbXBvbmVudCA9
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgICAgICAgICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBCeXRlQXJyYXk6OmNyZWF0ZShtX2Fic29sdXRlUGFp
bnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpICogNCk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyKiBzb3VyY2VDb21wb25lbnQgPSBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlv
bkNvbXBvbmVudCA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyKiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAobV9hYnNvbHV0ZVBh
aW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOwogICAg
ICAgICAgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewogICAgICAgICAgICAgICAg
IGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKQEAgLTIxNywyNSArMjE3LDI1IEBAIElt
YWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnUKICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAotSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0J5dGVBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5
cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKICAgICBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IElt
YWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5oZWlnaHQoKSk7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEJ5dGVB
cnJheTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWlu
dFJlY3QuaGVpZ2h0KCkgKiA0KTsKICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC5nZXQoKTsKIH0KIAotSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpCitCeXRlQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCkKIHsKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxv
d2VkLgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwogICAgIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6
Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5o
ZWlnaHQoKSk7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBCeXRlQXJyYXk6OmNy
ZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0Lmhl
aWdodCgpICogNCk7CiAgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgp
OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTAgKzUyLDEw
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdCB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0OyB9CiAgICAgSW1hZ2VCdWZmZXIqIGFzSW1hZ2VCdWZmZXIoKTsKLSAg
ICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gYXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0
Jik7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGFzUHJlbXVsdGlwbGllZEltYWdlKGNvbnN0
IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRJbWFnZShJbWFnZURhdGEqIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZElt
YWdlKEltYWdlRGF0YSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKKyAgICBQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gYXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0Jik7CisgICAg
UGFzc1JlZlB0cjxCeXRlQXJyYXk+IGFzUHJlbXVsdGlwbGllZEltYWdlKGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRJbWFnZShCeXRlQXJyYXkqIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZEltYWdlKEJ5dGVB
cnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKIAogICAgIEZpbHRlckVmZmVjdFZl
Y3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0
ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKQEAgLTExMCwxMyArMTEwLDEz
IEBAIHByb3RlY3RlZDoKICAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyKik7CiAKICAgICBJbWFnZUJ1
ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZURhdGEqIGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBCeXRlQXJyYXkqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7CisgICAgQnl0ZUFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKIAogcHJpdmF0ZToKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1
bHQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQ
dHI8Qnl0ZUFycmF5PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxCeXRl
QXJyYXk+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogICAgIEZpbHRlckVmZmVjdFZlY3Rv
ciBtX2lucHV0RWZmZWN0czsKIAogICAgIGJvb2wgbV9hbHBoYUltYWdlOwpAQCAtMTI5LDcgKzEy
OSw3IEBAIHByaXZhdGU6CiAgICAgRmlsdGVyKiBtX2ZpbHRlcjsKIAogcHJpdmF0ZToKLSAgICBp
bmxpbmUgdm9pZCBjb3B5SW1hZ2VCeXRlcyhJbWFnZURhdGEqIHNvdXJjZSwgSW1hZ2VEYXRhKiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpOworICAgIGlubGluZSB2b2lkIGNvcHlJbWFnZUJ5
dGVzKEJ5dGVBcnJheSogc291cmNlLCBCeXRlQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRS
ZWN0Jik7CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlciB2YXJpYWJsZXMgYXJlIFNWRyBz
cGVjaWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LgogICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1NjE0LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVm
ZmVyUXQuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCwxMyArMTc4LDEzIEBA
IHZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3IKIH0KIAogdGVtcGxhdGUg
PE11bHRpcGx5IG11bHRpcGxpZWQ+Ci1QYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRh
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRTaXplJiBzaXplKQorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcmVzdWx0ID0g
SW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICB1bnNp
Z25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIFJl
ZlB0cjxCeXRlQXJyYXk+IHJlc3VsdCA9IEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAq
IHJlY3QuaGVpZ2h0KCkgKiA0KTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5k
YXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCAocmVjdC54
KCkgKyByZWN0LndpZHRoKCkpID4gc2l6ZS53aWR0aCgpIHx8IChyZWN0LnkoKSArIHJlY3QuaGVp
Z2h0KCkpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+
ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAg
fHwgcmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgpIHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhl
aWdodCgpKQorICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAKICAg
ICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwogICAgIGludCBkZXN0eCA9IDA7CkBAIC0xOTIsNyAr
MTkyLDcgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdAogICAgICAg
ICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAgICBvcmlnaW54ID0gMDsKICAgICB9Ci0gICAgaW50
IGVuZHggPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKTsKKyAgICBpbnQgZW5keCA9IHJlY3Qucmln
aHQoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5keCA9IHNpemUu
d2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwpAQCAtMjAzLDcg
KzIwMyw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAg
ICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7CiAgICAgfQotICAgIGlu
dCBlbmR5ID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOworICAgIGludCBlbmR5ID0gcmVjdC5i
b3R0b20oKTsKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVuZHkgPSBz
aXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CkBAIC0yNTcs
MTUgKzI1NywxNSBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorUGFzc1JlZlB0
cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFVubXVsdGlw
bGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4g
SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIHJldHVybiBn
ZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUpOwogfQpAQCAt
Mjg3LDcgKzI4Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHByZW11bHRpcGx5QUIK
IH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci12b2lkIHB1dEltYWdlRGF0YShJ
bWFnZURhdGEqJiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3ZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYg
c291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgSW1hZ2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewog
ICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVj
dC5oZWlnaHQoKSA+IDApOwpAQCAtMzE1LDE0ICszMTUsMTQgQEAgdm9pZCBwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhKiYgc291cmNlLCBjbwogICAgIEFTU0VSVChlbmR5IDw9IHNpemUuaGVpZ2h0KCkp
OwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRlc3R5OwogCi0gICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3cgPSA0ICogc291cmNlLT53aWR0aCgpOworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKIAogICAgIC8vIE5PVEU6IEZvciB1bm11bHRp
cGxpZWQgaW5wdXQgZGF0YSwgd2UgZG8gdGhlIHByZW11bHRpcGxpY2F0aW9uIGJlbG93LgogICAg
IFFJbWFnZSBpbWFnZShudW1Db2x1bW5zLCBudW1Sb3dzLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJf
UHJlbXVsdGlwbGllZCk7CiAgICAgdWNoYXIqIGJpdHMgPSBpbWFnZS5iaXRzKCk7CiAgICAgY29u
c3QgaW50IGJ5dGVzUGVyTGluZSA9IGltYWdlLmJ5dGVzUGVyTGluZSgpOwogCi0gICAgY29uc3Qg
cXVpbnQzMiogc3JjU2NhbkxpbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBxdWludDMy
Kj4oc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVy
Um93ICsgb3JpZ2lueCAqIDQpOworICAgIGNvbnN0IHF1aW50MzIqIHNyY1NjYW5MaW5lID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgcXVpbnQzMio+KHNvdXJjZS0+ZGF0YSgpICsgb3JpZ2lu
eSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpOwogCiAgICAgaWYgKG11bHRpcGxpZWQg
PT0gVW5tdWx0aXBsaWVkKSB7CiAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsg
Kyt5KSB7CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiYg
c291cmNlLCBjbwogICAgICAgICAgICAgICAgIHF1aW50MzIgcGl4ZWwgPSBzcmNTY2FuTGluZVt4
XTsKICAgICAgICAgICAgICAgICBkZXN0U2NhbkxpbmVbeF0gPSBwcmVtdWx0aXBseUFCR1J0b0FS
R0IocGl4ZWwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291
cmNlLT53aWR0aCgpOworICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291cmNlU2l6ZS53aWR0
aCgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBudW1Sb3dzOyArK3kpIHsKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIHB1dEltYWdlRGF0YShJ
bWFnZURhdGEqJiBzb3VyY2UsIGNvCiAgICAgICAgICAgICAgICAgcXVpbnQzMiBwaXhlbCA9IHNy
Y1NjYW5MaW5lW3hdOwogICAgICAgICAgICAgICAgIGRlc3RTY2FuTGluZVt4XSA9ICgocGl4ZWwg
PDwgMTYpICYgMHhmZjAwMDApIHwgKChwaXhlbCA+PiAxNikgJiAweGZmKSB8IChwaXhlbCAmIDB4
ZmYwMGZmMDApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291
cmNlLT53aWR0aCgpOworICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291cmNlU2l6ZS53aWR0
aCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNjcsMTQgKzM2NywxNCBAQCB2b2lkIHB1dElt
YWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2UsIGNvCiAgICAgICAgIGRhdGEubV9wYWludGVyLT5y
ZXN0b3JlKCk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0
YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdl
RGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBw
dXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwg
bV9kYXRhLCBtX3NpemUpOworICAgIHB1dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwg
c291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CiB9CiAK
LXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBz
b3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5dGVBcnJh
eSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIHB1dEltYWdlRGF0YTxQ
cmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3Np
emUpOworICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUs
IHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUpOwogfQogCiAvLyBXZSBnZXQg
YSBtaW1lVHlwZSBoZXJlIGJ1dCBRSW1hZ2VXcml0ZXIgZG9lcyBub3Qgc3VwcG9ydCBtaW1ldHlw
ZXMgYnV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDIz
ICsxNTYsMjQgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvcgogfQog
CiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwg
CitQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIFJlZlB0cjxJbWFnZURhdGE+IHJlc3Vs
dCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAg
UmVmUHRyPEJ5dGVBcnJheT4gcmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgp
ICogcmVjdC5oZWlnaHQoKSAqIDQpOwogCiAgICAgaWYgKGJpdG1hcC5jb25maWcoKSA9PSBTa0Jp
dG1hcDo6a05vX0NvbmZpZykgewogICAgICAgICAvLyBUaGlzIGlzIGFuIGVtcHR5IFNrQml0bWFw
IHRoYXQgY291bGQgbm90IGJlIGNvbmZpZ3VyZWQuCiAgICAgICAgIEFTU0VSVCghc2l6ZS53aWR0
aCgpIHx8ICFzaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgY2hhciogZGF0
YSA9IHJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBk
YXRhID0gcmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgp
IDwgMCB8fAotICAgICAgICAocmVjdC54KCkgKyByZWN0LndpZHRoKCkpID4gc2l6ZS53aWR0aCgp
IHx8Ci0gICAgICAgIChyZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpID4gc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAg
aWYgKHJlY3QueCgpIDwgMAorICAgICAgICB8fCByZWN0LnkoKSA8IDAKKyAgICAgICAgfHwgcmVj
dC5yaWdodCgpID4gc2l6ZS53aWR0aCgpCisgICAgICAgIHx8IHJlY3QuYm90dG9tKCkgPiBzaXpl
LmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAK
ICAgICBpbnQgb3JpZ2luWCA9IHJlY3QueCgpOwogICAgIGludCBkZXN0WCA9IDA7CkBAIC0xODAs
MTMgKzE4MSwxMyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAg
ICAgICAgIGRlc3RYID0gLW9yaWdpblg7CiAgICAgICAgIG9yaWdpblggPSAwOwogICAgIH0KLSAg
ICBpbnQgZW5kWCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGludCBlbmRYID0gcmVj
dC5yaWdodCgpOwogICAgIGlmIChlbmRYID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBlbmRYID0g
c2l6ZS53aWR0aCgpOwogICAgIGludCBudW1Db2x1bW5zID0gZW5kWCAtIG9yaWdpblg7CiAKICAg
ICBpZiAobnVtQ29sdW1ucyA8PSAwKSAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAKICAgICBpbnQgb3JpZ2luWSA9IHJlY3QueSgpOwog
ICAgIGludCBkZXN0WSA9IDA7CkBAIC0xOTQsMTMgKzE5NSwxMyBAQCBQYXNzUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3RZID0gLW9yaWdpblk7CiAgICAg
ICAgIG9yaWdpblkgPSAwOwogICAgIH0KLSAgICBpbnQgZW5kWSA9IHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKTsKKyAgICBpbnQgZW5kWSA9IHJlY3QuYm90dG9tKCk7CiAgICAgaWYgKGVuZFkgPiBz
aXplLmhlaWdodCgpKQogICAgICAgICBlbmRZID0gc2l6ZS5oZWlnaHQoKTsKICAgICBpbnQgbnVt
Um93cyA9IGVuZFkgLSBvcmlnaW5ZOwogCiAgICAgaWYgKG51bVJvd3MgPD0gMCkgCi0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogCiAgICAg
QVNTRVJUKGJpdG1hcC5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwog
ICAgIFNrQXV0b0xvY2tQaXhlbHMgYml0bWFwTG9jayhiaXRtYXApOwpAQCAtMjMxLDIzICsyMzIs
MjMgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBk
ZXN0Um93ICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4g
SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBjb250ZXh0KCkt
PnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKICAgICByZXR1cm4gZ2V0
SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmJpdG1hcCgpLCBtX3NpemUpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29u
c3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIGNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOwogICAgIHJldHVybiBnZXRJbWFn
ZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkt
PmJpdG1hcCgpLCBtX3NpemUpOwogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4K
LXZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgCit2b2lkIHB1dEltYWdlRGF0YShC
eXRlQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIAogICAgICAgICAgICAg
ICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAg
ICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7CkBAIC0yNzksOSArMjgwLDkgQEAgdm9p
ZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiYgc291cmNlLCBjbwogICAgIEFTU0VSVChiaXRtYXAu
Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKICAgICBTa0F1dG9Mb2Nr
UGl4ZWxzIGJpdG1hcExvY2soYml0bWFwKTsKIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
ID0gNCAqIHNvdXJjZS0+d2lkdGgoKTsKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQg
KiBzb3VyY2VTaXplLndpZHRoKCk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNSb3cg
PSBzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCkgKyBvcmlnaW5ZICogc3JjQnl0ZXNQZXJS
b3cgKyBvcmlnaW5YICogNDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNSb3cgPSBzb3Vy
Y2UtPmRhdGEoKSArIG9yaWdpblkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpblggKiA0OwogCiAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKICAgICAgICAgdWludDMyX3Qq
IGRlc3RSb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKGRlc3RYLCBkZXN0WSArIHkpOwpAQCAtMzAxLDE1
ICszMDIsMTUgQEAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiYgc291cmNlLCBjbwogICAg
IH0KIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdl
RGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5
dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKLSAgICBwdXRJ
bWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgKmNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUpOworICAgIHB1dElt
YWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVz
dFBvaW50LCAqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6ZSk7
CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VE
YXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5
dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIHB1dEltYWdl
RGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgKmNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUpOworICAgIHB1dEltYWdl
RGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIGRlc3RQ
b2ludCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUpOwog
fQogCiBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHJldmlzaW9uIDc0
NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNF
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDIxICsxMjIsMjEgQEAgdm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDbwogICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oY29u
dGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIGRlc3RSZWN0KTsKIH0KIAotdGVtcGxhdGUgPGJvb2wgcHJlbXVsdGlwbGllZD4gUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+Cit0ZW1wbGF0ZSA8Ym9vbCBwcmVtdWx0aXBsaWVkPiBQYXNzUmVmUHRy
PEJ5dGVBcnJheT4KIHN0YXRpYyBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgU2hhcmVkQml0bWFwKiBiaXRtYXApCiB7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGlt
YWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNy
YyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihiaXRtYXAtPmJ5dGVzKCkpOwog
ICAgIGlmICghc3JjKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgICAgICByZXR1cm4g
aW1hZ2VEYXRhLnJlbGVhc2UoKTsKIAogICAgIEludFJlY3Qgc291cmNlUmVjdCgwLCAwLCBiaXRt
YXAtPndpZHRoKCksIGJpdG1hcC0+aGVpZ2h0KCkpOwogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0
KHJlY3QpOwogICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGlt
YWdlRGF0YTsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7CiAKLSAgICB1bnNp
Z25lZCBjaGFyKiBkc3QgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAg
dW5zaWduZWQgY2hhciogZHN0ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgbWVtc2V0KGRzdCwg
MCwgaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+bGVuZ3RoKCkpOwogICAgIHNyYyArPSAoc291
cmNlUmVjdC55KCkgKiBiaXRtYXAtPndpZHRoKCkgKyBzb3VyY2VSZWN0LngoKSkgKiA0OwogICAg
IGRzdCArPSAoKHNvdXJjZVJlY3QueSgpIC0gcmVjdC55KCkpICogaW1hZ2VEYXRhLT53aWR0aCgp
ICsgc291cmNlUmVjdC54KCkgLSByZWN0LngoKSkgKiA0OwpAQCAtMTY5LDIxICsxNjksMjEgQEAg
c3RhdGljIGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LAogICAgICAgICBkc3QgKz0g
ZHN0U2tpcDsKICAgICB9CiAKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBpbWFn
ZURhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6
OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorUGFz
c1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPGZh
bHNlPihyZWN0LCBtX2RhdGEubV9iaXRtYXAuZ2V0KCkpOwogfQogCi1QYXNzUmVmUHRyPEltYWdl
RGF0YT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIHJl
dHVybiBnZXRJbWFnZURhdGE8dHJ1ZT4ocmVjdCwgbV9kYXRhLm1fYml0bWFwLmdldCgpKTsKIH0K
IAogdGVtcGxhdGUgPGJvb2wgcHJlbXVsdGlwbGllZD4KLXN0YXRpYyB2b2lkIHB1dEltYWdlRGF0
YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgU2hhcmVkQml0bWFwKiBiaXRtYXApCitzdGF0aWMgdm9pZCBwdXRJ
bWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFNoYXJl
ZEJpdG1hcCogYml0bWFwKQogewogICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9ICh1bnNpZ25lZCBj
aGFyKiliaXRtYXAtPmJ5dGVzKCk7CiAgICAgaWYgKCFkc3QpCkBAIC0xOTUsMTIgKzE5NSwxMiBA
QCBzdGF0aWMgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyCiAgICAgaWYgKGRlc3RS
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgdW5zaWduZWQgY2hh
ciogc3JjID0gc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIHNyYyA9IHNvdXJjZS0+ZGF0YSgpOwogICAgIGRzdCArPSAoZGVzdFJlY3QueSgp
ICogYml0bWFwLT53aWR0aCgpICsgZGVzdFJlY3QueCgpKSAqIDQ7Ci0gICAgc3JjICs9IChzb3Vy
Y2VSZWN0LnkoKSAqIHNvdXJjZS0+d2lkdGgoKSArIHNvdXJjZVJlY3QueCgpKSAqIDQ7CisgICAg
c3JjICs9IChzb3VyY2VSZWN0LnkoKSAqIHNvdXJjZVNpemUud2lkdGgoKSArIHNvdXJjZVJlY3Qu
eCgpKSAqIDQ7CiAgICAgaW50IGJ5dGVzVG9Db3B5ID0gZGVzdFJlY3Qud2lkdGgoKSAqIDQ7CiAg
ICAgaW50IGRzdFNraXAgPSAoYml0bWFwLT53aWR0aCgpIC0gZGVzdFJlY3Qud2lkdGgoKSkgKiA0
OwotICAgIGludCBzcmNTa2lwID0gKHNvdXJjZS0+d2lkdGgoKSAtIGRlc3RSZWN0LndpZHRoKCkp
ICogNDsKKyAgICBpbnQgc3JjU2tpcCA9IChzb3VyY2VTaXplLndpZHRoKCkgLSBkZXN0UmVjdC53
aWR0aCgpKSAqIDQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZHN0RW5kID0gZHN0ICsgZGVz
dFJlY3QuaGVpZ2h0KCkgKiBiaXRtYXAtPndpZHRoKCkgKiA0OwogICAgIHdoaWxlIChkc3QgPCBk
c3RFbmQpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZHN0Um93RW5kID0gZHN0ICsg
Ynl0ZXNUb0NvcHk7CkBAIC0yMjcsMTQgKzIyNywxNCBAQCBzdGF0aWMgdm9pZCBwdXRJbWFnZURh
dGEoSW1hZ2VEYXRhKiBzb3VyCiAgICAgfQogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhPGZhbHNlPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRl
c3RQb2ludCwgbV9kYXRhLm1fYml0bWFwLmdldCgpKTsKKyAgICBwdXRJbWFnZURhdGE8ZmFsc2U+
KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEubV9iaXRt
YXAuZ2V0KCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAg
ICBwdXRJbWFnZURhdGE8dHJ1ZT4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0
YS5tX2JpdG1hcC5nZXQoKSk7CisgICAgcHV0SW1hZ2VEYXRhPHRydWU+KHNvdXJjZSwgc291cmNl
U2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEubV9iaXRtYXAuZ2V0KCkpOwogfQog
CiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVj
dG9yPGludD4mIGxvb2tVcFRhYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9JbWFnZUJ1ZmZlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDI0ICs1NCwyNCBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0
dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorUGFzc1JlZlB0cjxC
eXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4g
MDsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdl
RGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5
dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURh
dGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKEJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQg
KzI0LDEyIEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCIKIAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNs
dWRlICJTVkdFbGVtZW50LmgiCkBAIC0zOSw2ICszNyw4IEBACiAjaW5jbHVkZSAiU1ZHTWFza0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVW5p
dFR5cGVzLmgiCisKKyNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCkBAIC0xNjEsOCArMTYxLDcg
QEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbgogCiAgICAgLy8gQ3Jl
YXRlIHRoZSBsdW1pbmFuY2UgbWFzay4KICAgICBJbnRSZWN0IG1hc2tJbWFnZVJlY3QoSW50UG9p
bnQoKSwgbWFza2VyRGF0YS0+bWFza0ltYWdlLT5zaXplKCkpOwotICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YSA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKG1hc2tJbWFnZVJlY3QpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IGlt
YWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxB
cnJheSA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKG1h
c2tJbWFnZVJlY3QpOwogCiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVs
QXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhl
bE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKQEAgLTE3Nyw3
ICsxNzYsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpkcmF3Q29udGVuCiAgICAg
ICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAot
ICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
RGF0YS5nZXQoKSwgbWFza0ltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgbWFza2VyRGF0YS0+
bWFza0ltYWdlLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoc3JjUGl4ZWxBcnJheS5nZXQoKSwg
bWFza0ltYWdlUmVjdC5zaXplKCksIG1hc2tJbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2
b2lkIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpjYWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRS
ZWN0KCkKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ4NDcpCisrKyBXZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDEtMDEg
IERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGFyaWZ5IEltYWdlQnVmZmVyIGFuZCBJbWFnZURh
dGEgcmVsYXRpb25zaGlwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MTI5NworCisgICAgICAgIFVzZSBCeXRlQXJyYXkgaW5zdGVhZCBvZiBJbWFnZURh
dGEuCisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMpOgorCiAyMDEwLTEyLTMwICBNaWhh
aSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEtlbnQgVGFtdXJhLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlz
aW9uIDc0NzgxKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDYgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIktleWJv
YXJkQ29kZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCkBAIC0xMjAsNiArMTE5LDcg
QEAKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKICNpbmNs
dWRlICJXZWJWaWV3Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIFBMQVRGT1JNKENHKQpAQCAtMTAyMCwxMCArMTAyMCwx
MCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZhCiAgICAgSW50UmVj
dCBpbnZlcnRSZWN0KHJlY3QueCgpLCBiaXRtYXBIZWlnaHQgLSByZWN0LmJvdHRvbSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpKSk7Ci0gICAgUmVmUHRyPElt
YWdlRGF0YT4gaW1hZ2VEYXRhKEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSkpOwotICAgIGlmIChpbWFnZUJ1ZmZlci5nZXQoKSAmJiBpbWFnZURhdGEuZ2V0KCkp
IHsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhpbWFnZURh
dGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCksIGludmVydFJlY3QpOwotICAgICAgICBpbWFnZUJ1
ZmZlci0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIEludFJlY3Qo
SW50UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBJbnRQb2ludCgpKTsKKyAgICBSZWZQdHI8Qnl0ZUFy
cmF5PiBwaXhlbEFycmF5ID0gQnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5o
ZWlnaHQoKSAqIDQpKTsKKyAgICBpZiAoaW1hZ2VCdWZmZXIuZ2V0KCkgJiYgcGl4ZWxBcnJheS5n
ZXQoKSkgeworICAgICAgICBtX2xheWVyUmVuZGVyZXItPmdldEZyYW1lYnVmZmVyUGl4ZWxzKHBp
eGVsQXJyYXktPmRhdGEoKSwgaW52ZXJ0UmVjdCk7CisgICAgICAgIGltYWdlQnVmZmVyLT5wdXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHBpeGVsQXJyYXkuZ2V0KCksIHJlY3Quc2l6ZSgpLCBJbnRS
ZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgSW50UG9pbnQoKSk7CiAgICAgICAgIGdjLnNh
dmUoKTsKICAgICAgICAgZ2MudHJhbnNsYXRlKEZsb2F0U2l6ZSgwLjBmLCBiaXRtYXBIZWlnaHQp
KTsKICAgICAgICAgZ2Muc2NhbGUoRmxvYXRTaXplKDEuMGYsIC0xLjBmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77755</attachid>
            <date>2011-01-01 13:39:28 -0800</date>
            <delta_ts>2011-01-02 02:38:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51297-20110101223924.patch</filename>
            <type>text/plain</type>
            <size>70952</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDg0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA5IEBACisyMDExLTAxLTAxICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xh
cmlmeSBJbWFnZUJ1ZmZlciBhbmQgSW1hZ2VEYXRhIHJlbGF0aW9uc2hpcAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEyOTcKKworICAgICAgICBSZW1v
dmUgcmVmZXJlbmNlcyB0byBJbWFnZURhdGEgYW5kIENhbnZhc1BpeGVsQXJyYXkgZnJvbSBJbWFn
ZUJ1ZmZlciBhbmQgU1ZHIGZpbHRlci9tYXNrZXIgY29kZSwKKyAgICAgICAgc2luY2UgdGhpcyB3
YXMgYSBsYXllcmluZyB2aW9sYXRpb24sIGFuZCByZXBsYWNlZCBpdCBieSBCeXRlQXJyYXkuCisK
KyAgICAgICAgTm8gY2hhbmdlIG9mIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0IGFkZGVk
LgorCisgICAgICAgICogaHRtbC9JbWFnZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpJbWFnZURhdGEp
OgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmg6IEFkZGVkIG5ldyBjb25zdHJ1Y3RvciB3aXRo
IEJ5dGVBcnJheSBpbnB1dC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6d2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEYXRhOjpkYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1BpeGVsQXJyYXk6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNQaXhlbEFycmF5OjpDYW52YXNQaXhlbEFycmF5KToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5Lmg6IE5ldyBjb25jdHJ1Y3RvciB3aXRo
IEJ5dGVBcnJheSBpbnB1dCwgdXNlZCBieSBIVE1MIENhbnZhcy4KKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1BpeGVsQXJyYXk6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUGl4ZWxB
cnJheTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1BpeGVsQXJyYXk6OnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNQaXhlbEFycmF5OjpnZXQpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9uUGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjphcHBseSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNVbm11bHRpcGxpZWRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlw
bGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVs
dGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6cHV0SW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmRyYXdDb250ZW50SW50
b01hc2tJbWFnZSk6CisKIDIwMTEtMDEtMDEgIEtvbnN0YW50aW4gVG9rYXJldiAgPGFubnVsZW5A
eWFuZGV4LnJ1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2Vi
Q29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ltYWdl
RGF0YS5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDExIEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJ
bWFnZURhdGE6OmNyZWF0ZSgKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlRGF0YSh3aWR0
aCwgaGVpZ2h0KSk7CiB9CiAKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0
ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4g
Ynl0ZUFycmF5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VEYXRhKHdpZHRoLCBo
ZWlnaHQsIGJ5dGVBcnJheSkpOworfQorCiBJbWFnZURhdGE6OkltYWdlRGF0YSh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogICAgIDogbV93aWR0aCh3aWR0aCkKICAgICAsIG1faGVp
Z2h0KGhlaWdodCkKQEAgLTQzLDUgKzQ4LDEyIEBAIEltYWdlRGF0YTo6SW1hZ2VEYXRhKHVuc2ln
bmVkIHdpZHRoLCB1bnMKIHsKIH0KIAorSW1hZ2VEYXRhOjpJbWFnZURhdGEodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGJ5dGVBcnJheSkKKyAg
ICA6IG1fd2lkdGgod2lkdGgpCisgICAgLCBtX2hlaWdodChoZWlnaHQpCisgICAgLCBtX2RhdGEo
Q2FudmFzUGl4ZWxBcnJheTo6Y3JlYXRlKGJ5dGVBcnJheSkpCit7Cit9CisKIH0KIApJbmRleDog
V2ViQ29yZS9odG1sL0ltYWdlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9JbWFn
ZURhdGEuaAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDI1ICszMCwyOSBAQAogI2RlZmluZSBJbWFnZURhdGFfaAogCiAj
aW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgSW1hZ2VEYXRhIDogcHVibGljIFJlZkNv
dW50ZWQ8SW1hZ2VEYXRhPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IGNyZWF0ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKLQot
ICAgICAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICAg
ICAgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KLSAgICAgICAg
Q2FudmFzUGl4ZWxBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgSW1hZ2VEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpOwotICAgICAgICB1bnNpZ25lZCBtX3dpZHRoOwotICAgICAgICB1bnNpZ25lZCBt
X2hlaWdodDsKLSAgICAgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IG1fZGF0YTsKLSAgICB9
OworY2xhc3MgSW1hZ2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VEYXRhPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGUodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBj
cmVhdGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0cjxCeXRlQXJy
YXk+KTsKKworICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisgICAgQ2Fu
dmFzUGl4ZWxBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorCitw
cml2YXRlOgorICAgIEltYWdlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsK
KyAgICBJbWFnZURhdGEodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+KTsKKworICAgIHVuc2lnbmVkIG1fd2lkdGg7CisgICAgdW5zaWduZWQgbV9o
ZWlnaHQ7CisgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IG1fZGF0YTsKK307CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhl
bEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BpeGVs
QXJyYXkuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UGl4ZWxBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwyNCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBD
YW52YXNQaXhlbEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQaXhlbEFycmF5KGxlbmd0aCkpOwotICAgIH0KLSAg
ICAKLSAgICBDYW52YXNQaXhlbEFycmF5OjpDYW52YXNQaXhlbEFycmF5KHVuc2lnbmVkIGxlbmd0
aCkKLSAgICAgICAgOiBtX2RhdGEoV1RGOjpCeXRlQXJyYXk6OmNyZWF0ZShsZW5ndGgpKQotICAg
IHsKLSAgICB9Ci0gICAgCitQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IENhbnZhc1BpeGVs
QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDYW52YXNQaXhlbEFycmF5KGxlbmd0aCkpOworfQorCitQYXNzUmVmUHRyPENhbnZhc1BpeGVs
QXJyYXk+IENhbnZhc1BpeGVsQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEJ5dGVBcnJheT4gYnl0
ZUFycmF5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzUGl4ZWxBcnJheShieXRl
QXJyYXkpKTsKK30KKworQ2FudmFzUGl4ZWxBcnJheTo6Q2FudmFzUGl4ZWxBcnJheSh1bnNpZ25l
ZCBsZW5ndGgpCisgICAgOiBtX2RhdGEoQnl0ZUFycmF5OjpjcmVhdGUobGVuZ3RoKSkKK3sKK30K
KworQ2FudmFzUGl4ZWxBcnJheTo6Q2FudmFzUGl4ZWxBcnJheShQYXNzUmVmUHRyPEJ5dGVBcnJh
eT4gYnl0ZUFycmF5KQorICAgIDogbV9kYXRhKGJ5dGVBcnJheSkKK3sKK30KKwogfQpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHJldmlzaW9uIDc0NzgxKQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDM4ICszNyw0MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgY2xhc3Mg
Q2FudmFzUGl4ZWxBcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc1BpeGVsQXJyYXk+IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+
IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgV1RGOjpCeXRlQXJy
YXkqIGRhdGEoKSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLSAgICAgICAgY29uc3QgV1RGOjpC
eXRlQXJyYXkqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLSAgICAgICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5sZW5ndGgoKTsgfQotICAg
ICAgICAKLSAgICAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9kYXRhLT5zZXQoaW5kZXgsIHZhbHVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2RhdGEtPnNldChpbmRleCwgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIGdldCh1bnNpZ25lZCBpbmRleCwgdW5zaWdu
ZWQgY2hhciYgcmVzdWx0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9k
YXRhLT5nZXQoaW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBj
aGFyIGdldCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fZGF0YS0+Z2V0KGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgQ2FudmFzUGl4ZWxBcnJheSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBSZWZQdHI8V1RG
OjpCeXRlQXJyYXk+IG1fZGF0YTsKLSAgICB9OworY2xhc3MgQ2FudmFzUGl4ZWxBcnJheSA6IHB1
YmxpYyBSZWZDb3VudGVkPENhbnZhc1BpeGVsQXJyYXk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxC
eXRlQXJyYXk+KTsKKworICAgIEJ5dGVBcnJheSogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5nZXQo
KTsgfQorICAgIGNvbnN0IEJ5dGVBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5n
ZXQoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+bGVu
Z3RoKCk7IH0KKyAgICAKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgbV9kYXRhLT5zZXQoaW5kZXgsIHZhbHVlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgY2hhciB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIG1fZGF0YS0+c2V0KGluZGV4LCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
Z2V0KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBjaGFyJiByZXN1bHQpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9kYXRhLT5nZXQoaW5kZXgsIHJlc3VsdCk7CisgICAgfQorCisgICAg
dW5zaWduZWQgY2hhciBnZXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9kYXRhLT5nZXQoaW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYW52YXNQ
aXhlbEFycmF5KHVuc2lnbmVkIGxlbmd0aCk7CisgICAgQ2FudmFzUGl4ZWxBcnJheShQYXNzUmVm
UHRyPEJ5dGVBcnJheT4pOworCisgICAgUmVmUHRyPEJ5dGVBcnJheT4gbV9kYXRhOworfTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gNzQ3ODEpCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1ODcsNyArMTU4Nyw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBDYW52YXNS
ZW5kZXJpbmdDb24KICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzKCktPmJ1ZmZlcigp
OwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEo
c2NhbGVkUmVjdC5zaXplKCkpOwotICAgIHJldHVybiBidWZmZXItPmdldFVubXVsdGlwbGllZElt
YWdlRGF0YShzY2FsZWRSZWN0KTsKKyAgICByZXR1cm4gSW1hZ2VEYXRhOjpjcmVhdGUoc2NhbGVk
UmVjdC53aWR0aCgpLCBzY2FsZWRSZWN0LmhlaWdodCgpLCBidWZmZXItPmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShzY2FsZWRSZWN0KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHksIEV4
Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTYzNiw3ICsxNjM2LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnB1dEltYWdlRAogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7
CiAgICAgc291cmNlUmVjdC5tb3ZlKC1kZXN0T2Zmc2V0KTsKIAotICAgIGJ1ZmZlci0+cHV0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGRhdGEsIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQp
KTsKKyAgICBidWZmZXItPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShkYXRhLT5kYXRhKCktPmRh
dGEoKSwgSW50U2l6ZShkYXRhLT53aWR0aCgpLCBkYXRhLT5oZWlnaHQoKSksIHNvdXJjZVJlY3Qs
IEludFBvaW50KGRlc3RPZmZzZXQpKTsKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWRE
cmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDc0
NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCisjaW5jbHVkZSA8d3RmL0J5
dGVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC04MywxMSArODQsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGRyYXdzVXNpbmdDb3B5KCkgY29uc3Q7IC8v
IElmIHRoZSBpbWFnZSBidWZmZXIgaGFzIHRvIHJlbmRlciB1c2luZyBhIGNvcGllZCBpbWFnZSwg
aXQgd2lsbCByZXR1cm4gdHJ1ZS4KICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY29weUltYWdl
KCkgY29uc3Q7IC8vIFJldHVybiBhIG5ldyBpbWFnZSB0aGF0IGlzIGEgY29weSBvZiB0aGUgYnVm
ZmVyLgogCi0gICAgICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAg
ICAgIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYpIGNvbnN0OworICAgICAgICBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBw
dXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7Ci0gICAgICAgIHZvaWQgcHV0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50KTsKKyAgICAgICAgdm9pZCBwdXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoQnl0ZUFycmF5KiwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7CisgICAgICAgIHZv
aWQgcHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqLCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50KTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5ID0gMCkgY29uc3Q7CiAjaWYgIVBMQVRG
T1JNKENHKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MSwxNiArMTUxLDE2IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29s
b3IKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci1QYXNzUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVy
RGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBn
ZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBk
YXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dl
dF90eXBlKGRhdGEubV9zdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOwogCi0g
ICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gcmVzdWx0ID0g
Qnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOwogICAg
IHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGRh
dGEubV9zdXJmYWNlKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRh
KCktPmRhdGEoKS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFEc3QgPSByZXN1bHQt
PmRhdGEoKTsKIAogICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IChyZWN0
LngoKSArIHJlY3Qud2lkdGgoKSkgPiBzaXplLndpZHRoKCkgfHwgKHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKSkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGF0YURzdCwgMCwgcmVz
dWx0LT5kYXRhKCktPmxlbmd0aCgpKTsKKyAgICAgICAgbWVtc2V0KGRhdGFEc3QsIDAsIHJlc3Vs
dC0+bGVuZ3RoKCkpOwogCiAgICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKICAgICBpbnQgZGVz
dHggPSAwOwpAQCAtMTY4LDcgKzE2OCw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFn
ZURhdGEoY29uc3QKICAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKICAgICAgICAgb3JpZ2lueCA9
IDA7CiAgICAgfQotICAgIGludCBlbmR4ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCk7CisgICAg
aW50IGVuZHggPSByZWN0LnJpZ2h0KCk7CiAgICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCiAg
ICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0g
b3JpZ2lueDsKQEAgLTE3OSw3ICsxNzksNyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7CiAgICAgICAgIG9yaWdpbnkg
PSAwOwogICAgIH0KLSAgICBpbnQgZW5keSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKTsKKyAg
ICBpbnQgZW5keSA9IHJlY3QuYm90dG9tKCk7CiAgICAgaWYgKGVuZHkgPiBzaXplLmhlaWdodCgp
KQogICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKICAgICBpbnQgbnVtUm93cyA9IGVuZHkg
LSBvcmlnaW55OwpAQCAtMjA2LDIxICsyMDYsMjEgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdl
dEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CiAg
ICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
IH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5
PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHJlY3Qs
IG1fZGF0YSwgbV9zaXplKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVy
OjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitQ
YXNzUmVmUHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRh
PFByZW11bHRpcGxpZWQ+KHJlY3QsIG1fZGF0YSwgbV9zaXplKTsKIH0KIAogdGVtcGxhdGUgPE11
bHRpcGx5IG11bHRpcGxpZWQ+Ci12b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2Us
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIElt
YWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgcHV0SW1hZ2VE
YXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW1hZ2VCdWZm
ZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VSVChjYWlyb19z
dXJmYWNlX2dldF90eXBlKGRhdGEubV9zdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1B
R0UpOwogCkBAIC0yNTIsMTAgKzI1MiwxMCBAQCB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEq
JiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgaW50
IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CiAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9
IDQgKiBzb3VyY2UtPndpZHRoKCk7CisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICog
c291cmNlU2l6ZS53aWR0aCgpOwogICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUoZGF0YS5tX3N1cmZhY2UpOwogCi0gICAgdW5zaWduZWQgY2hhciogc3JjUm93
cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1Bl
clJvdyArIG9yaWdpbnggKiA0OworICAgIHVuc2lnbmVkIGNoYXIqIHNyY1Jvd3MgPSBzb3VyY2Ut
PmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwogICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7CiAgICAgICAgIHVuc2lnbmVkKiByb3cg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGF0YURzdCArIHN0cmlkZSAqICh5ICsgZGVz
dHkpKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKQEAg
LTI3NywxNCArMjc3LDE0IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwg
Y28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1Db2x1bW5zLCBu
dW1Sb3dzKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKEJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIHB1
dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBt
X2RhdGEsIG1fc2l6ZSk7CisgICAgcHV0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBz
b3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplKTsKIH0KIAot
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNv
dXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5
KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhPFBy
ZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6
ZSk7CisgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwg
c291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CiB9CiAKICNpZiAhUExBVEZP
Uk0oR1RLKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0y
NTMsMTMgKzI1MiwxMyBAQCB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCog
CiB9CiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgotUGFzc1JlZlB0cjxJbWFnZURh
dGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVy
aW5nKQorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQogewotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiByZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSByZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRh
KCk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gcmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUocmVj
dC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEg
PSByZXN1bHQtPmRhdGEoKTsKIAotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAw
IHx8IChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSkgPiBzaXplLndpZHRoKCkgfHwgKHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGF0YSwg
MCwgcmVzdWx0LT5kYXRhKCktPmxlbmd0aCgpKTsKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJl
Y3QueSgpIDwgMCB8fCByZWN0LnJpZ2h0KCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5ib3R0b20o
KSA+IHNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkYXRhLCAwLCByZXN1bHQtPmxlbmd0
aCgpKTsKIAogICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7CiAgICAgaW50IGRlc3R4ID0gMDsK
QEAgLTI2Nyw3ICsyNjYsNyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNv
bnN0CiAgICAgICAgIGRlc3R4ID0gLW9yaWdpbng7CiAgICAgICAgIG9yaWdpbnggPSAwOwogICAg
IH0KLSAgICBpbnQgZW5keCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGludCBlbmR4
ID0gcmVjdC5yaWdodCgpOwogICAgIGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBl
bmR4ID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7
CkBAIC0yNzgsNyArMjc3LDcgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShj
b25zdAogICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwogICAgICAgICBvcmlnaW55ID0gMDsKICAg
ICB9Ci0gICAgaW50IGVuZHkgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCk7CisgICAgaW50IGVu
ZHkgPSByZWN0LmJvdHRvbSgpOwogICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAg
ICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lu
eTsKQEAgLTM0MCwxNyArMzM5LDE3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoY29uc3QKICNlbmRpZgogICAgIH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25z
dAorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBpZiAobV9hY2NlbGVyYXRl
UmVuZGVyaW5nKQogICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgbV9k
YXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CiB9CiAKLVBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0KSBjb25zdAorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAg
aWYgKG1fYWNjZWxlcmF0ZVJlbmRlcmluZykKICAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CkBAIC0zNTgsNyArMzU3LDcgQEAgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRQcgogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVs
dGlwbGllZD4KLXZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW1hZ2VCdWZmZXJE
YXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZykKK3ZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6
ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgSW1hZ2VCdWZmZXJEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53
aWR0aCgpID4gMCk7CiAgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTM4
Niw4ICszODUsOCBAQCB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2UsIGNvCiAg
ICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5
IC0gZGVzdHk7CiAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2UtPndp
ZHRoKCk7Ci0gICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRh
KCktPmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OworICAg
IHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBzcmNSb3dzID0gc291cmNlLT5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0
ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7CiAg
ICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3M7CiAKQEAgLTQ0MiwxOCArNDQxLDE4IEBAIHZvaWQg
cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY28KICAgICB9CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3ZvaWQg
SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwg
Y29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKICAgICBpZiAobV9hY2NlbGVyYXRlUmVuZGVyaW5n
KQogICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICBwdXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQ
b2ludCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CisgICAgcHV0SW1h
Z2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0
UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJpbmcpOwogfQogCi12b2lk
IEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQor
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqIHNv
dXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKICAgICBpZiAobV9hY2NlbGVyYXRlUmVu
ZGVyaW5nKQogICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICBwdXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VSZWN0
LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJpbmcpOworICAg
IHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJl
Y3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCShyZXZpc2lvbiA3NDc4MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDExIEBACiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVk
ZSAiRkVCbGVuZC5oIgogCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUgPHd0Zi9CeXRlQXJy
YXkuaD4KIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyICgqQmxlbmRUeXBlKSh1bnNpZ25lZCBjaGFy
IGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNp
Z25lZCBjaGFyIGFscGhhQik7CiAKQEAgLTEwMCwxOSArMTAwLDE1IEBAIHZvaWQgRkVCbGVuZDo6
YXBwbHkoKQogICAgIGlmIChtX21vZGUgPD0gRkVCTEVORF9NT0RFX1VOS05PV04gfHwgbV9tb2Rl
ID4gRkVCTEVORF9NT0RFX0xJR0hURU4pCiAgICAgICAgIHJldHVybjsKIAotICAgIEltYWdlRGF0
YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQ
dHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFBID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVm
ZmVjdEFEcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QSA9IHNyY0lt
YWdlRGF0YUEtPmRhdGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVs
QXJyYXlBID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAK
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJ
bWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBzcmNJbWFnZURhdGFCID0gaW4yLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RCRHJhd2lu
Z1JlY3QpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUIgPSBzcmNJbWFnZURhdGFCLT5k
YXRhKCktPmRhdGEoKTsKLQotICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlLT5kYXRhKCktPmRhdGEoKTsKKyAgICBSZWZQdHI8Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5
QiA9IGluMi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0QkRyYXdpbmdSZWN0KTsKIAogICAg
IC8vIEtlZXAgc3luY2hyb25pemVkIHdpdGggQmxlbmRNb2RlVHlwZQogICAgIHN0YXRpYyBjb25z
dCBCbGVuZFR5cGUgY2FsbEVmZmVjdFtdID0ge3Vua25vd24sIG5vcm1hbCwgbXVsdGlwbHksIHNj
cmVlbiwgZGFya2VuLCBsaWdodGVufTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAorI2luY2x1
ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0xNjQsMjggKzE2NCwyNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6
OmFwcGx5KCkKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoaW4t
PmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJl
Y3QoSW50UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoaW1hZ2VSZWN0KTsKLSAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRh
dGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHBpeGVsQXJyYXkgPSByZXN1bHRJ
bWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCk7CiAKICAgICBzd2l0Y2gg
KG1fdHlwZSkgewotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoK
LSAgICAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxB
cnJheSwgbV92YWx1ZXMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX1NBVFVSQVRFPihwaXhlbEFycmF5LCBtX3ZhbHVlcyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAg
ICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5
LCBtX3ZhbHVlcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIG1fdmFsdWVzKTsKLSAg
ICAgICAgICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9S
TUFUUklYX1RZUEVfTUFUUklYPihwaXhlbEFycmF5LmdldCgpLCBtX3ZhbHVlcyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKKyAgICAgICAg
ZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXkuZ2V0KCks
IG1fdmFsdWVzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU+KHBpeGVsQXJyYXkuZ2V0KCksIG1fdmFsdWVzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheS5nZXQoKSwg
bV92YWx1ZXMpOworICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CisgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1h
Z2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5w
dXRVbm11bHRpcGxpZWRJbWFnZURhdGEocGl4ZWxBcnJheS5nZXQoKSwgaW1hZ2VSZWN0LnNpemUo
KSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUNvbG9yTWF0cml4OjpkdW1w
KCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAorI2luY2x1ZGUg
PHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0xNTYsOCArMTU2LDggQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVy
OjphcHBseSgpCiAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgY2hhciByVmFsdWVzWzI1Nl0sIGdWYWx1ZXNbMjU2
XSwgYlZhbHVlc1syNTZdLCBhVmFsdWVzWzI1Nl07CkBAIC0xNzEsOCArMTcxLDcgQEAgdm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSgpCiAgICAgICAgICgqY2FsbEVmZmVjdFt0cmFuc2Zl
ckZ1bmN0aW9uW2NoYW5uZWxdLnR5cGVdKSh0YWJsZXNbY2hhbm5lbF0sIHRyYW5zZmVyRnVuY3Rp
b25bY2hhbm5lbF0pOwogCiAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5
VW5tdWx0aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLCBkcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5
KiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICBpbi0+Y29weVVu
bXVsdGlwbGllZEltYWdlKHBpeGVsQXJyYXksIGRyYXdpbmdSZWN0KTsKIAogICAgIHVuc2lnbmVk
IHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2ln
bmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhl
bE9mZnNldCArPSA0KSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsOCBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisKKyNpbmNsdWRlIDx3dGYvQnl0ZUFy
cmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTkwLDE3ICsxOTEsMTcgQEAgdm9p
ZCBGRUNvbXBvc2l0ZTo6YXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV90eXBl
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgSW1hZ2VEYXRh
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgICAg
ICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICAgICAgaWYgKCFkc3RQaXhlbEFy
cmF5KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YSA9IGluLT5h
c1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgICAgICBSZWZQdHI8
Qnl0ZUFycmF5PiBzcmNQaXhlbEFycmF5ID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVj
dEFEcmF3aW5nUmVjdCk7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRJbWFnZShyZXN1bHRJbWFnZSwgZWZmZWN0
QkRyYXdpbmdSZWN0KTsKKyAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZEltYWdlKGRzdFBp
eGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKLSAgICAgICAgYXJpdGhtZXRpYyhzcmNJ
bWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCksIG1f
azEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAgICBhcml0aG1ldGljKHNyY1BpeGVsQXJyYXku
Z2V0KCksIGRzdFBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAogI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1
ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUg
PHd0Zi9CeXRlQXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMDIsNyArMjAy
LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcAogfQogCiB0ZW1w
bGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVz
dGluYXRpb25QaXhlbHMoQ2FudmFzUGl4ZWxBcnJheSogaW1hZ2UsIGludCYgcGl4ZWwsIGZsb2F0
KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIENhbnZhc1BpeGVsQXJyYXkqIHNy
YykKK0FMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhCeXRlQXJyYXkqIGlt
YWdlLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFz
LCBCeXRlQXJyYXkqIHNyYykKIHsKICAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2Vy
dmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3Ig
KyBiaWFzKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKQEAgLTM3OSw3ICszNzks
NyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KCkKICAgICBpZiAoIWluLT5oYXNSZXN1
bHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZTsKKyAg
ICBCeXRlQXJyYXkqIHJlc3VsdEltYWdlOwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCiAgICAg
ICAgIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBl
bHNlCkBAIC0zODksMTYgKzM4OSwxNiBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KCkK
IAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAotICAgIFJlZlB0cjxDYW52YXNQ
aXhlbEFycmF5PiBzcmNQaXhlbEFycmF5OworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVs
QXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9
IGluLT5hc1VubXVsdGlwbGllZEltYWdlKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOworICAg
ICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPmFzVW5tdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2lu
Z1JlY3QpOwogICAgIGVsc2UKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5hc1ByZW11bHRp
cGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKTsKKyAgICAgICAgc3JjUGl4ZWxB
cnJheSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCk7CiAKICAg
ICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIFBh
aW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkg
PSBzcmNQaXhlbEFycmF5LmdldCgpOwotICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0g
cmVzdWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlOwogICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwog
ICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBwYWludFNpemUuaGVpZ2h0KCk7CiAgICAgcGFpbnRp
bmdEYXRhLmJpYXMgPSBtX2JpYXMgKiAyNTU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgJKHJldmlzaW9uIDc0Nzgx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aAkod29ya2luZyBjb3B5KQpAQCAtODQsOCArODQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Y29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29sLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKICAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAg
ICAgQ2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgQ2FudmFzUGl4ZWxB
cnJheSogZHN0UGl4ZWxBcnJheTsKKyAgICAgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5Owor
ICAgICAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXk7CiAgICAgICAgIGludCB3aWR0aDsKICAg
ICAgICAgaW50IGhlaWdodDsKICAgICAgICAgZmxvYXQgYmlhczsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw4IEBACiAK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC05MCwxOSArOTEsMTUgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1h
cDo6YXBwbHkoKQogICAgIGlmIChtX3hDaGFubmVsU2VsZWN0b3IgPT0gQ0hBTk5FTF9VTktOT1dO
IHx8IG1feUNoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VOS05PV04pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogZHN0UGl4
ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZHN0
UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFBID0gaW4tPmFzUHJl
bXVsdGlwbGllZEltYWdlKGVmZmVjdEFEcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQ
aXhlbEFycmF5QSA9IHNyY0ltYWdlRGF0YUEtPmRhdGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxC
eXRlQXJyYXk+IHNyY1BpeGVsQXJyYXlBID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVj
dEFEcmF3aW5nUmVjdCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFCID0gaW4yLT5hc1VubXVsdGlwbGllZElt
YWdlKGVmZmVjdEJEcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QiA9
IHNyY0ltYWdlRGF0YUItPmRhdGEoKS0+ZGF0YSgpOwotCi0gICAgQnl0ZUFycmF5KiBkc3RQaXhl
bEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxCeXRlQXJy
YXk+IHNyY1BpeGVsQXJyYXlCID0gaW4yLT5hc1VubXVsdGlwbGllZEltYWdlKGVmZmVjdEJEcmF3
aW5nUmVjdCk7CiAKICAgICBBU1NFUlQoc3JjUGl4ZWxBcnJheUEtPmxlbmd0aCgpID09IHNyY1Bp
eGVsQXJyYXlCLT5sZW5ndGgoKSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gNzQ3ODEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAorI2lu
Y2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1
c2luZyBzdGQ6Om1heDsKQEAgLTE3MSwxNCArMTcxLDE0IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6
OmFwcGx5KCkKICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5
ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFzcmNQaXhlbEFy
cmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJ
bWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29w
eVByZW11bHRpcGxpZWRJbWFnZShyZXN1bHRJbWFnZSwgZWZmZWN0RHJhd2luZ1JlY3QpOworICAg
IGluLT5jb3B5UHJlbXVsdGlwbGllZEltYWdlKHNyY1BpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdS
ZWN0KTsKIAogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4OCw5ICsxODgsOCBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiAgICAgY2FsY3Vs
YXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBtX3N0ZFgs
IG1fc3RkWSk7CiAKICAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRh
KCktPmRhdGEoKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiB0bXBJbWFnZURhdGEgPSBJbWFnZURh
dGE6OmNyZWF0ZShwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICBC
eXRlQXJyYXkqIHRtcFBpeGVsQXJyYXkgPSB0bXBJbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwor
ICAgIFJlZlB0cjxCeXRlQXJyYXk+IHRtcEltYWdlRGF0YSA9IEJ5dGVBcnJheTo6Y3JlYXRlKHBh
aW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpICogNCk7CisgICAgQnl0ZUFycmF5
KiB0bXBQaXhlbEFycmF5ID0gdG1wSW1hZ2VEYXRhLmdldCgpOwogCiAgICAgaW50IHN0cmlkZSA9
IDQgKiBwYWludFNpemUud2lkdGgoKTsKICAgICBpbnQgZHhMZWZ0ID0gMDsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlz
aW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAjaWYgRU5BQkxFKEZJTFRF
UlMpCiAjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJh
eS5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzOCwxNSArMzM2LDE0IEBAIHZvaWQgRkVMaWdodGlu
Zzo6YXBwbHkoKQogICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJh
eSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFzcmNQaXhlbEFy
cmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCiAg
ICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFn
ZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVk
SW1hZ2UocmVzdWx0SW1hZ2UsIGVmZmVjdERyYXdpbmdSZWN0KTsKLSAgICBCeXRlQXJyYXkqIHNy
Y1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgaW4tPmNvcHlV
bm11bHRpcGxpZWRJbWFnZShzcmNQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CiAKICAg
ICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBU
aGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0
IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3Ry
YW5nZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDc0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3
LDggQEAKICNpbmNsdWRlICJGRU1vcnBob2xvZ3kuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogCisjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgc3RkOjptaW47CkBAIC05OCw4ICs5OCw4IEBA
IHZvaWQgRkVNb3JwaG9sb2d5OjphcHBseSgpCiAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVB
cnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwor
ICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CkBAIC0xMTEsOSArMTExLDcgQEAgdm9pZCBGRU1v
cnBob2xvZ3k6OmFwcGx5KCkKICAgICBpbnQgcmFkaXVzWSA9IHN0YXRpY19jYXN0PGludD4oZmxv
b3JmKGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fcmFkaXVzWSkpKTsKIAogICAgIEludFJl
Y3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURh
dGEgPSBpbi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2luZ1JlY3QpOwotICAgIEJ5
dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHNyY0ltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7Ci0g
ICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgp
OworICAgIFJlZlB0cjxCeXRlQXJyYXk+IHNyY1BpeGVsQXJyYXkgPSBpbi0+YXNQcmVtdWx0aXBs
aWVkSW1hZ2UoZWZmZWN0RHJhd2luZ1JlY3QpOwogCiAgICAgaW50IGVmZmVjdFdpZHRoID0gZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIDQ7CiAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkocmV2aXNpb24gNzQ3
ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIkZFVHVyYnVsZW5j
ZS5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKKyNp
bmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIyLDE0ICszMjIsMTMgQEAgdm9pZCBGRVR1cmJ1bGVu
Y2U6OmFwcGx5KCkKIHsKICAgICBpZiAoaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFwaXhlbEFycmF5KQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdl
LT5kYXRhKCktPmRhdGEoKTsKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwg
cm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKSk7CiAgICAg
aW5pdFBhaW50KHBhaW50aW5nRGF0YSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw4IEBACiAKICNpZiBFTkFCTEUoRklMVEVSUykKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUg
PHd0Zi9CeXRlQXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MiwzMiArODMs
MzEgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6YXNJbWFnZUJ1ZmZlcgogICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpLCBDb2xvclNwYWNlTGluZWFyUkdCKTsKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVj
dChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBk
ZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkp
OwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRlc3RpbmF0aW9uUmVj
dCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFVubXVsdGlw
bGllZEltYWdlRGF0YShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBkZXN0aW5hdGlv
blJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOwogICAgIHJldHVybiBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gRmls
dGVyRWZmZWN0Ojphc1VubXVsdGlwbGllZEltYWdlKGNvbnN0IEludFJlY3QmIHJlY3QpCitQYXNz
UmVmUHRyPEJ5dGVBcnJheT4gRmlsdGVyRWZmZWN0Ojphc1VubXVsdGlwbGllZEltYWdlKGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1h
Z2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBSZWZQdHI8
Qnl0ZUFycmF5PiBpbWFnZURhdGEgPSBCeXRlQXJyYXk6OmNyZWF0ZShyZWN0LndpZHRoKCkgKiBy
ZWN0LmhlaWdodCgpICogNCk7CiAgICAgY29weVVubXVsdGlwbGllZEltYWdlKGltYWdlRGF0YS5n
ZXQoKSwgcmVjdCk7CiAgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdlKGNvbnN0
IEludFJlY3QmIHJlY3QpCitQYXNzUmVmUHRyPEJ5dGVBcnJheT4gRmlsdGVyRWZmZWN0Ojphc1By
ZW11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIFJlZlB0cjxJbWFn
ZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gaW1hZ2VEYXRhID0gQnl0ZUFycmF5Ojpj
cmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOwogICAgIGNvcHlQcmVtdWx0
aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLmdldCgpLCByZWN0KTsKICAgICByZXR1cm4gaW1hZ2VEYXRh
LnJlbGVhc2UoKTsKIH0KIAotaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRl
cyhJbWFnZURhdGEqIHNvdXJjZSwgSW1hZ2VEYXRhKiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2lubGluZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoQnl0ZUFy
cmF5KiBzb3VyY2UsIEJ5dGVBcnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgLy8gQ29weSB0aGUgbmVjZXNzYXJ5IGxpbmVzLgotICAgIEFTU0VSVChJbnRTaXpl
KGRlc3RpbmF0aW9uLT53aWR0aCgpLCBkZXN0aW5hdGlvbi0+aGVpZ2h0KCkpID09IHJlY3Quc2l6
ZSgpKTsKICAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCByZWN0LmJvdHRv
bSgpID4gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpIHx8IHJlY3QuYm90dG9tKCkgPiBtX2Fi
c29sdXRlUGFpbnRSZWN0LmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24tPmRh
dGEoKS0+ZGF0YSgpLT5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLT5kYXRhKCktPmxlbmd0aCgpKTsK
KyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLT5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLT5sZW5n
dGgoKSk7CiAKICAgICBpbnQgeE9yaWdpbiA9IHJlY3QueCgpOwogICAgIGludCB4RGVzdCA9IDA7
CkBAIC0xMzIsOCArMTMyLDggQEAgaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VC
eXRlcwogICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7CiAgICAgaW50IGRlc3Rp
bmF0aW9uU2NhbmxpbmUgPSByZWN0LndpZHRoKCkgKiA0OwogICAgIGludCBzb3VyY2VTY2FubGlu
ZSA9IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgdW5zaWduZWQgY2hhciAq
ZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsg
KCh5RGVzdCAqIHJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OwotICAgIHVuc2lnbmVkIGNoYXIg
KnNvdXJjZVBpeGVsID0gc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsgKCh5T3JpZ2lu
ICogbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKyAgICB1bnNp
Z25lZCBjaGFyICpkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24tPmRhdGEoKSArICgoeURl
c3QgKiByZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKKyAgICB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2VQaXhlbCA9IHNvdXJjZS0+ZGF0YSgpICsgKCh5T3JpZ2luICogbV9hYnNvbHV0ZVBhaW50UmVj
dC53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKIAogICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkg
ewogICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOwpA
QCAtMTQzLDcgKzE0Myw3IEBAIGlubGluZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0
ZXMKICAgICB9CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2Uo
SW1hZ2VEYXRhKiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UoQnl0ZUFycmF5KiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCkBAIC0xNTIs
OSArMTUyLDkgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRJbWFnZQogICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFn
ZURhdGE6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWlu
dFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc291cmNlQ29tcG9u
ZW50ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgICAgICAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUobV9hYnNvbHV0
ZVBhaW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOwor
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc291cmNlQ29tcG9uZW50ID0gbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlc3Rp
bmF0aW9uQ29tcG9uZW50ID0gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwogICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKG1fYWJzb2x1
dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkgKiA0KTsK
ICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKICAgICAgICAgICAg
ICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CkBAIC0xNzYsNyArMTc2LDcgQEAg
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRJbWFnZQogICAgIGNvcHlJbWFnZUJ5
dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRlc3RpbmF0aW9uLCByZWN0KTsK
IH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkSW1hZ2UoSW1hZ2VEYXRh
KiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5UHJlbXVsdGlwbGllZEltYWdlKEJ5dGVBcnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIApAQCAtMTg1LDkgKzE4NSw5
IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZEltYWcKICAgICAgICAgaWYg
KG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50
UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRh
OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNvdXJjZUNvbXBvbmVudCA9
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgICAgICAgICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBCeXRlQXJyYXk6OmNyZWF0ZShtX2Fic29sdXRlUGFp
bnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpICogNCk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyKiBzb3VyY2VDb21wb25lbnQgPSBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlv
bkNvbXBvbmVudCA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyKiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAobV9hYnNvbHV0ZVBh
aW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOwogICAg
ICAgICAgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewogICAgICAgICAgICAgICAg
IGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKQEAgLTIxNywyNSArMjE3LDI1IEBAIElt
YWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnUKICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAotSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0J5dGVBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5
cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKICAgICBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IElt
YWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5oZWlnaHQoKSk7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEJ5dGVB
cnJheTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWlu
dFJlY3QuaGVpZ2h0KCkgKiA0KTsKICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC5nZXQoKTsKIH0KIAotSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpCitCeXRlQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCkKIHsKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxv
d2VkLgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwogICAgIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6
Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5o
ZWlnaHQoKSk7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBCeXRlQXJyYXk6OmNy
ZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0Lmhl
aWdodCgpICogNCk7CiAgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgp
OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTAgKzUyLDEw
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdCB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0OyB9CiAgICAgSW1hZ2VCdWZmZXIqIGFzSW1hZ2VCdWZmZXIoKTsKLSAg
ICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gYXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0
Jik7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGFzUHJlbXVsdGlwbGllZEltYWdlKGNvbnN0
IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRJbWFnZShJbWFnZURhdGEqIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZElt
YWdlKEltYWdlRGF0YSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKKyAgICBQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gYXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0Jik7CisgICAg
UGFzc1JlZlB0cjxCeXRlQXJyYXk+IGFzUHJlbXVsdGlwbGllZEltYWdlKGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRJbWFnZShCeXRlQXJyYXkqIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZEltYWdlKEJ5dGVB
cnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKIAogICAgIEZpbHRlckVmZmVjdFZl
Y3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0
ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKQEAgLTExMCwxMyArMTEwLDEz
IEBAIHByb3RlY3RlZDoKICAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyKik7CiAKICAgICBJbWFnZUJ1
ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZURhdGEqIGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBCeXRlQXJyYXkqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7CisgICAgQnl0ZUFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKIAogcHJpdmF0ZToKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1
bHQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQ
dHI8Qnl0ZUFycmF5PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxCeXRl
QXJyYXk+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogICAgIEZpbHRlckVmZmVjdFZlY3Rv
ciBtX2lucHV0RWZmZWN0czsKIAogICAgIGJvb2wgbV9hbHBoYUltYWdlOwpAQCAtMTI5LDcgKzEy
OSw3IEBAIHByaXZhdGU6CiAgICAgRmlsdGVyKiBtX2ZpbHRlcjsKIAogcHJpdmF0ZToKLSAgICBp
bmxpbmUgdm9pZCBjb3B5SW1hZ2VCeXRlcyhJbWFnZURhdGEqIHNvdXJjZSwgSW1hZ2VEYXRhKiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpOworICAgIGlubGluZSB2b2lkIGNvcHlJbWFnZUJ5
dGVzKEJ5dGVBcnJheSogc291cmNlLCBCeXRlQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRS
ZWN0Jik7CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlciB2YXJpYWJsZXMgYXJlIFNWRyBz
cGVjaWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LgogICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1NjE0LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVm
ZmVyUXQuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCwxMyArMTc4LDEzIEBA
IHZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3IKIH0KIAogdGVtcGxhdGUg
PE11bHRpcGx5IG11bHRpcGxpZWQ+Ci1QYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRh
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRTaXplJiBzaXplKQorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcmVzdWx0ID0g
SW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICB1bnNp
Z25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIFJl
ZlB0cjxCeXRlQXJyYXk+IHJlc3VsdCA9IEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAq
IHJlY3QuaGVpZ2h0KCkgKiA0KTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5k
YXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCAocmVjdC54
KCkgKyByZWN0LndpZHRoKCkpID4gc2l6ZS53aWR0aCgpIHx8IChyZWN0LnkoKSArIHJlY3QuaGVp
Z2h0KCkpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+
ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAg
fHwgcmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgpIHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhl
aWdodCgpKQorICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAKICAg
ICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwogICAgIGludCBkZXN0eCA9IDA7CkBAIC0xOTIsNyAr
MTkyLDcgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdAogICAgICAg
ICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAgICBvcmlnaW54ID0gMDsKICAgICB9Ci0gICAgaW50
IGVuZHggPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKTsKKyAgICBpbnQgZW5keCA9IHJlY3Qucmln
aHQoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5keCA9IHNpemUu
d2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwpAQCAtMjAzLDcg
KzIwMyw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAg
ICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7CiAgICAgfQotICAgIGlu
dCBlbmR5ID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOworICAgIGludCBlbmR5ID0gcmVjdC5i
b3R0b20oKTsKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVuZHkgPSBz
aXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CkBAIC0yNTcs
MTUgKzI1NywxNSBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorUGFzc1JlZlB0
cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFVubXVsdGlw
bGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4g
SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIHJldHVybiBn
ZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUpOwogfQpAQCAt
Mjg3LDcgKzI4Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHByZW11bHRpcGx5QUIK
IH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci12b2lkIHB1dEltYWdlRGF0YShJ
bWFnZURhdGEqJiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3ZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYg
c291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgSW1hZ2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewog
ICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVj
dC5oZWlnaHQoKSA+IDApOwpAQCAtMzE1LDE0ICszMTUsMTQgQEAgdm9pZCBwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhKiYgc291cmNlLCBjbwogICAgIEFTU0VSVChlbmR5IDw9IHNpemUuaGVpZ2h0KCkp
OwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRlc3R5OwogCi0gICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3cgPSA0ICogc291cmNlLT53aWR0aCgpOworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKIAogICAgIC8vIE5PVEU6IEZvciB1bm11bHRp
cGxpZWQgaW5wdXQgZGF0YSwgd2UgZG8gdGhlIHByZW11bHRpcGxpY2F0aW9uIGJlbG93LgogICAg
IFFJbWFnZSBpbWFnZShudW1Db2x1bW5zLCBudW1Sb3dzLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJf
UHJlbXVsdGlwbGllZCk7CiAgICAgdWNoYXIqIGJpdHMgPSBpbWFnZS5iaXRzKCk7CiAgICAgY29u
c3QgaW50IGJ5dGVzUGVyTGluZSA9IGltYWdlLmJ5dGVzUGVyTGluZSgpOwogCi0gICAgY29uc3Qg
cXVpbnQzMiogc3JjU2NhbkxpbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBxdWludDMy
Kj4oc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVy
Um93ICsgb3JpZ2lueCAqIDQpOworICAgIGNvbnN0IHF1aW50MzIqIHNyY1NjYW5MaW5lID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgcXVpbnQzMio+KHNvdXJjZS0+ZGF0YSgpICsgb3JpZ2lu
eSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpOwogCiAgICAgaWYgKG11bHRpcGxpZWQg
PT0gVW5tdWx0aXBsaWVkKSB7CiAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsg
Kyt5KSB7CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiYg
c291cmNlLCBjbwogICAgICAgICAgICAgICAgIHF1aW50MzIgcGl4ZWwgPSBzcmNTY2FuTGluZVt4
XTsKICAgICAgICAgICAgICAgICBkZXN0U2NhbkxpbmVbeF0gPSBwcmVtdWx0aXBseUFCR1J0b0FS
R0IocGl4ZWwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291
cmNlLT53aWR0aCgpOworICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291cmNlU2l6ZS53aWR0
aCgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBudW1Sb3dzOyArK3kpIHsKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIHB1dEltYWdlRGF0YShJ
bWFnZURhdGEqJiBzb3VyY2UsIGNvCiAgICAgICAgICAgICAgICAgcXVpbnQzMiBwaXhlbCA9IHNy
Y1NjYW5MaW5lW3hdOwogICAgICAgICAgICAgICAgIGRlc3RTY2FuTGluZVt4XSA9ICgocGl4ZWwg
PDwgMTYpICYgMHhmZjAwMDApIHwgKChwaXhlbCA+PiAxNikgJiAweGZmKSB8IChwaXhlbCAmIDB4
ZmYwMGZmMDApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291
cmNlLT53aWR0aCgpOworICAgICAgICAgICAgc3JjU2NhbkxpbmUgKz0gc291cmNlU2l6ZS53aWR0
aCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNjcsMTQgKzM2NywxNCBAQCB2b2lkIHB1dElt
YWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2UsIGNvCiAgICAgICAgIGRhdGEubV9wYWludGVyLT5y
ZXN0b3JlKCk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0
YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdl
RGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBw
dXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwg
bV9kYXRhLCBtX3NpemUpOworICAgIHB1dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwg
c291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CiB9CiAK
LXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBz
b3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5dGVBcnJh
eSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIHB1dEltYWdlRGF0YTxQ
cmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3Np
emUpOworICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUs
IHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUpOwogfQogCiAvLyBXZSBnZXQg
YSBtaW1lVHlwZSBoZXJlIGJ1dCBRSW1hZ2VXcml0ZXIgZG9lcyBub3Qgc3VwcG9ydCBtaW1ldHlw
ZXMgYnV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gNzQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDIz
ICsxNTYsMjQgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvcgogfQog
CiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwg
CitQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIFJlZlB0cjxJbWFnZURhdGE+IHJlc3Vs
dCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAg
UmVmUHRyPEJ5dGVBcnJheT4gcmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgp
ICogcmVjdC5oZWlnaHQoKSAqIDQpOwogCiAgICAgaWYgKGJpdG1hcC5jb25maWcoKSA9PSBTa0Jp
dG1hcDo6a05vX0NvbmZpZykgewogICAgICAgICAvLyBUaGlzIGlzIGFuIGVtcHR5IFNrQml0bWFw
IHRoYXQgY291bGQgbm90IGJlIGNvbmZpZ3VyZWQuCiAgICAgICAgIEFTU0VSVCghc2l6ZS53aWR0
aCgpIHx8ICFzaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgY2hhciogZGF0
YSA9IHJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBk
YXRhID0gcmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgp
IDwgMCB8fAotICAgICAgICAocmVjdC54KCkgKyByZWN0LndpZHRoKCkpID4gc2l6ZS53aWR0aCgp
IHx8Ci0gICAgICAgIChyZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpID4gc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAg
aWYgKHJlY3QueCgpIDwgMAorICAgICAgICB8fCByZWN0LnkoKSA8IDAKKyAgICAgICAgfHwgcmVj
dC5yaWdodCgpID4gc2l6ZS53aWR0aCgpCisgICAgICAgIHx8IHJlY3QuYm90dG9tKCkgPiBzaXpl
LmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAK
ICAgICBpbnQgb3JpZ2luWCA9IHJlY3QueCgpOwogICAgIGludCBkZXN0WCA9IDA7CkBAIC0xODAs
MTMgKzE4MSwxMyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAg
ICAgICAgIGRlc3RYID0gLW9yaWdpblg7CiAgICAgICAgIG9yaWdpblggPSAwOwogICAgIH0KLSAg
ICBpbnQgZW5kWCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGludCBlbmRYID0gcmVj
dC5yaWdodCgpOwogICAgIGlmIChlbmRYID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBlbmRYID0g
c2l6ZS53aWR0aCgpOwogICAgIGludCBudW1Db2x1bW5zID0gZW5kWCAtIG9yaWdpblg7CiAKICAg
ICBpZiAobnVtQ29sdW1ucyA8PSAwKSAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAKICAgICBpbnQgb3JpZ2luWSA9IHJlY3QueSgpOwog
ICAgIGludCBkZXN0WSA9IDA7CkBAIC0xOTQsMTMgKzE5NSwxMyBAQCBQYXNzUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3RZID0gLW9yaWdpblk7CiAgICAg
ICAgIG9yaWdpblkgPSAwOwogICAgIH0KLSAgICBpbnQgZW5kWSA9IHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKTsKKyAgICBpbnQgZW5kWSA9IHJlY3QuYm90dG9tKCk7CiAgICAgaWYgKGVuZFkgPiBz
aXplLmhlaWdodCgpKQogICAgICAgICBlbmRZID0gc2l6ZS5oZWlnaHQoKTsKICAgICBpbnQgbnVt
Um93cyA9IGVuZFkgLSBvcmlnaW5ZOwogCiAgICAgaWYgKG51bVJvd3MgPD0gMCkgCi0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogCiAgICAg
QVNTRVJUKGJpdG1hcC5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwog
ICAgIFNrQXV0b0xvY2tQaXhlbHMgYml0bWFwTG9jayhiaXRtYXApOwpAQCAtMjMxLDIzICsyMzIs
MjMgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBk
ZXN0Um93ICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4g
SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAorUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBjb250ZXh0KCkt
PnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKICAgICByZXR1cm4gZ2V0
SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmJpdG1hcCgpLCBtX3NpemUpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29u
c3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIGNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOwogICAgIHJldHVybiBnZXRJbWFn
ZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkt
PmJpdG1hcCgpLCBtX3NpemUpOwogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4K
LXZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgCit2b2lkIHB1dEltYWdlRGF0YShC
eXRlQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIAogICAgICAgICAgICAg
ICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAg
ICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7CkBAIC0yNzksOSArMjgwLDkgQEAgdm9p
ZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiYgc291cmNlLCBjbwogICAgIEFTU0VSVChiaXRtYXAu
Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKICAgICBTa0F1dG9Mb2Nr
UGl4ZWxzIGJpdG1hcExvY2soYml0bWFwKTsKIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
ID0gNCAqIHNvdXJjZS0+d2lkdGgoKTsKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQg
KiBzb3VyY2VTaXplLndpZHRoKCk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNSb3cg
PSBzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCkgKyBvcmlnaW5ZICogc3JjQnl0ZXNQZXJS
b3cgKyBvcmlnaW5YICogNDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNSb3cgPSBzb3Vy
Y2UtPmRhdGEoKSArIG9yaWdpblkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpblggKiA0OwogCiAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKICAgICAgICAgdWludDMyX3Qq
IGRlc3RSb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKGRlc3RYLCBkZXN0WSArIHkpOwpAQCAtMzAxLDE1
ICszMDIsMTUgQEAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiYgc291cmNlLCBjbwogICAg
IH0KIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdl
RGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5
dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIGNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKLSAgICBwdXRJ
bWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgKmNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUpOworICAgIHB1dElt
YWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVz
dFBvaW50LCAqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6ZSk7
CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VE
YXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5
dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIHB1dEltYWdl
RGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgKmNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUpOworICAgIHB1dEltYWdl
RGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIGRlc3RQ
b2ludCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUpOwog
fQogCiBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHJldmlzaW9uIDc0
NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNF
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDIxICsxMjIsMjEgQEAgdm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDbwogICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oY29u
dGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIGRlc3RSZWN0KTsKIH0KIAotdGVtcGxhdGUgPGJvb2wgcHJlbXVsdGlwbGllZD4gUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+Cit0ZW1wbGF0ZSA8Ym9vbCBwcmVtdWx0aXBsaWVkPiBQYXNzUmVmUHRy
PEJ5dGVBcnJheT4KIHN0YXRpYyBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgU2hhcmVkQml0bWFwKiBiaXRtYXApCiB7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGlt
YWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNy
YyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihiaXRtYXAtPmJ5dGVzKCkpOwog
ICAgIGlmICghc3JjKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgICAgICByZXR1cm4g
aW1hZ2VEYXRhLnJlbGVhc2UoKTsKIAogICAgIEludFJlY3Qgc291cmNlUmVjdCgwLCAwLCBiaXRt
YXAtPndpZHRoKCksIGJpdG1hcC0+aGVpZ2h0KCkpOwogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0
KHJlY3QpOwogICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGlt
YWdlRGF0YTsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7CiAKLSAgICB1bnNp
Z25lZCBjaGFyKiBkc3QgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAg
dW5zaWduZWQgY2hhciogZHN0ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgbWVtc2V0KGRzdCwg
MCwgaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+bGVuZ3RoKCkpOwogICAgIHNyYyArPSAoc291
cmNlUmVjdC55KCkgKiBiaXRtYXAtPndpZHRoKCkgKyBzb3VyY2VSZWN0LngoKSkgKiA0OwogICAg
IGRzdCArPSAoKHNvdXJjZVJlY3QueSgpIC0gcmVjdC55KCkpICogaW1hZ2VEYXRhLT53aWR0aCgp
ICsgc291cmNlUmVjdC54KCkgLSByZWN0LngoKSkgKiA0OwpAQCAtMTY5LDIxICsxNjksMjEgQEAg
c3RhdGljIGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LAogICAgICAgICBkc3QgKz0g
ZHN0U2tpcDsKICAgICB9CiAKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBpbWFn
ZURhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6
OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorUGFz
c1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPGZh
bHNlPihyZWN0LCBtX2RhdGEubV9iaXRtYXAuZ2V0KCkpOwogfQogCi1QYXNzUmVmUHRyPEltYWdl
RGF0YT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCkgY29uc3QKK1Bhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIHJl
dHVybiBnZXRJbWFnZURhdGE8dHJ1ZT4ocmVjdCwgbV9kYXRhLm1fYml0bWFwLmdldCgpKTsKIH0K
IAogdGVtcGxhdGUgPGJvb2wgcHJlbXVsdGlwbGllZD4KLXN0YXRpYyB2b2lkIHB1dEltYWdlRGF0
YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgU2hhcmVkQml0bWFwKiBiaXRtYXApCitzdGF0aWMgdm9pZCBwdXRJ
bWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFNoYXJl
ZEJpdG1hcCogYml0bWFwKQogewogICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9ICh1bnNpZ25lZCBj
aGFyKiliaXRtYXAtPmJ5dGVzKCk7CiAgICAgaWYgKCFkc3QpCkBAIC0xOTUsMTIgKzE5NSwxMiBA
QCBzdGF0aWMgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyCiAgICAgaWYgKGRlc3RS
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgdW5zaWduZWQgY2hh
ciogc3JjID0gc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIHNyYyA9IHNvdXJjZS0+ZGF0YSgpOwogICAgIGRzdCArPSAoZGVzdFJlY3QueSgp
ICogYml0bWFwLT53aWR0aCgpICsgZGVzdFJlY3QueCgpKSAqIDQ7Ci0gICAgc3JjICs9IChzb3Vy
Y2VSZWN0LnkoKSAqIHNvdXJjZS0+d2lkdGgoKSArIHNvdXJjZVJlY3QueCgpKSAqIDQ7CisgICAg
c3JjICs9IChzb3VyY2VSZWN0LnkoKSAqIHNvdXJjZVNpemUud2lkdGgoKSArIHNvdXJjZVJlY3Qu
eCgpKSAqIDQ7CiAgICAgaW50IGJ5dGVzVG9Db3B5ID0gZGVzdFJlY3Qud2lkdGgoKSAqIDQ7CiAg
ICAgaW50IGRzdFNraXAgPSAoYml0bWFwLT53aWR0aCgpIC0gZGVzdFJlY3Qud2lkdGgoKSkgKiA0
OwotICAgIGludCBzcmNTa2lwID0gKHNvdXJjZS0+d2lkdGgoKSAtIGRlc3RSZWN0LndpZHRoKCkp
ICogNDsKKyAgICBpbnQgc3JjU2tpcCA9IChzb3VyY2VTaXplLndpZHRoKCkgLSBkZXN0UmVjdC53
aWR0aCgpKSAqIDQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZHN0RW5kID0gZHN0ICsgZGVz
dFJlY3QuaGVpZ2h0KCkgKiBiaXRtYXAtPndpZHRoKCkgKiA0OwogICAgIHdoaWxlIChkc3QgPCBk
c3RFbmQpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZHN0Um93RW5kID0gZHN0ICsg
Ynl0ZXNUb0NvcHk7CkBAIC0yMjcsMTQgKzIyNywxNCBAQCBzdGF0aWMgdm9pZCBwdXRJbWFnZURh
dGEoSW1hZ2VEYXRhKiBzb3VyCiAgICAgfQogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhPGZhbHNlPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRl
c3RQb2ludCwgbV9kYXRhLm1fYml0bWFwLmdldCgpKTsKKyAgICBwdXRJbWFnZURhdGE8ZmFsc2U+
KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEubV9iaXRt
YXAuZ2V0KCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAg
ICBwdXRJbWFnZURhdGE8dHJ1ZT4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0
YS5tX2JpdG1hcC5nZXQoKSk7CisgICAgcHV0SW1hZ2VEYXRhPHRydWU+KHNvdXJjZSwgc291cmNl
U2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEubV9iaXRtYXAuZ2V0KCkpOwogfQog
CiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVj
dG9yPGludD4mIGxvb2tVcFRhYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9JbWFnZUJ1ZmZlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDI0ICs1NCwyNCBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0
dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorUGFzc1JlZlB0cjxC
eXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4g
MDsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdl
RGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5
dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURh
dGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKEJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZpc2lvbiA3NDc4MSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQg
KzI0LDEyIEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCIKIAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNs
dWRlICJTVkdFbGVtZW50LmgiCkBAIC0zOSw2ICszNyw4IEBACiAjaW5jbHVkZSAiU1ZHTWFza0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVW5p
dFR5cGVzLmgiCisKKyNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCkBAIC0xNjEsOCArMTYxLDcg
QEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbgogCiAgICAgLy8gQ3Jl
YXRlIHRoZSBsdW1pbmFuY2UgbWFzay4KICAgICBJbnRSZWN0IG1hc2tJbWFnZVJlY3QoSW50UG9p
bnQoKSwgbWFza2VyRGF0YS0+bWFza0ltYWdlLT5zaXplKCkpOwotICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YSA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKG1hc2tJbWFnZVJlY3QpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IGlt
YWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxB
cnJheSA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKG1h
c2tJbWFnZVJlY3QpOwogCiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVs
QXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhl
bE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKQEAgLTE3Nyw3
ICsxNzYsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpkcmF3Q29udGVuCiAgICAg
ICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAot
ICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
RGF0YS5nZXQoKSwgbWFza0ltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgbWFza2VyRGF0YS0+
bWFza0ltYWdlLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoc3JjUGl4ZWxBcnJheS5nZXQoKSwg
bWFza0ltYWdlUmVjdC5zaXplKCksIG1hc2tJbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2
b2lkIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpjYWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRS
ZWN0KCkKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ4NDcpCisrKyBXZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDEtMDEg
IERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGFyaWZ5IEltYWdlQnVmZmVyIGFuZCBJbWFnZURh
dGEgcmVsYXRpb25zaGlwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MTI5NworCisgICAgICAgIFVzZSBCeXRlQXJyYXkgaW5zdGVhZCBvZiBJbWFnZURh
dGEuCisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMpOgorCiAyMDEwLTEyLTMwICBNaWhh
aSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEtlbnQgVGFtdXJhLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlz
aW9uIDc0NzgxKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDYgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIktleWJv
YXJkQ29kZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCkBAIC0xMjAsNiArMTE5LDcg
QEAKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKICNpbmNs
dWRlICJXZWJWaWV3Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIFBMQVRGT1JNKENHKQpAQCAtMTAyMCwxMCArMTAyMCwx
MCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZhCiAgICAgSW50UmVj
dCBpbnZlcnRSZWN0KHJlY3QueCgpLCBiaXRtYXBIZWlnaHQgLSByZWN0LmJvdHRvbSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpKSk7Ci0gICAgUmVmUHRyPElt
YWdlRGF0YT4gaW1hZ2VEYXRhKEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSkpOwotICAgIGlmIChpbWFnZUJ1ZmZlci5nZXQoKSAmJiBpbWFnZURhdGEuZ2V0KCkp
IHsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhpbWFnZURh
dGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCksIGludmVydFJlY3QpOwotICAgICAgICBpbWFnZUJ1
ZmZlci0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIEludFJlY3Qo
SW50UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBJbnRQb2ludCgpKTsKKyAgICBSZWZQdHI8Qnl0ZUFy
cmF5PiBwaXhlbEFycmF5KEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVp
Z2h0KCkgKiA0KSk7CisgICAgaWYgKGltYWdlQnVmZmVyLmdldCgpICYmIHBpeGVsQXJyYXkuZ2V0
KCkpIHsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhl
bEFycmF5LT5kYXRhKCksIGludmVydFJlY3QpOworICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShwaXhlbEFycmF5LmdldCgpLCByZWN0LnNpemUoKSwgSW50UmVj
dChJbnRQb2ludCgpLCByZWN0LnNpemUoKSksIEludFBvaW50KCkpOwogICAgICAgICBnYy5zYXZl
KCk7CiAgICAgICAgIGdjLnRyYW5zbGF0ZShGbG9hdFNpemUoMC4wZiwgYml0bWFwSGVpZ2h0KSk7
CiAgICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZSgxLjBmLCAtMS4wZikpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>