<?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>83424</bug_id>
          
          <creation_ts>2012-04-07 09:57:06 -0700</creation_ts>
          <short_desc>[WK2] Enable using a single ShareableBitmap for multiple updates</short_desc>
          <delta_ts>2012-04-10 08:16:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>83582</dependson>
          <blocked>78675</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>andersca</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jturcotte</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
    
    <cc>ostap73</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>597981</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-07 09:57:06 -0700</bug_when>
    <thetext>Creating a ShareableBitmap for each content update could be inefficient, as it requires shm allocation/deallocation.
We should enable a configuration where very few larger ShareableBitmaps are created, and are used as atlases for small updates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598012</commentid>
    <comment_count>1</comment_count>
      <attachid>136141</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-07 18:26:44 -0700</bug_when>
    <thetext>Created attachment 136141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598014</commentid>
    <comment_count>2</comment_count>
      <attachid>136141</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-04-07 19:06:45 -0700</bug_when>
    <thetext>Comment on attachment 136141
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=136141&amp;action=review

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:446
&gt; +    glPixelStorei(GL_UNPACK_ROW_LENGTH, bytesPerLine / 4);

by definition TextureMapperGL is a &quot;An OpenGL-ES2 implementation of TextureMapper&quot;. GL_UNPACK_ROW_LENGTH is not supported by default in opengles, it needs the GL_EXT_unpack_subimage extension.
However i think we should not care about this problem for now. Just put a XXX or FIXME :).

&gt; Source/WebKit2/WebProcess/WebPage/UpdateAtlas.cpp:38
&gt; +static int nextPowerOfTwo(int number)

I think there is a trick to make nextPowerOfTwo simpler than this for 32 bits integer.

&gt; Source/WebKit2/WebProcess/WebPage/UpdateAtlas.cpp:48
&gt; +static const int BufferIsInUse = 1;

maybe an enumerator?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598037</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-08 09:00:13 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; by definition TextureMapperGL is a &quot;An OpenGL-ES2 implementation of TextureMapper&quot;. GL_UNPACK_ROW_LENGTH is not supported by default in opengles, it needs the GL_EXT_unpack_subimage extension.
&gt; However i think we should not care about this problem for now. Just put a XXX or FIXME :).
I care about this :)
I&apos;ll add a proper test and add an image-copy fallback when I get to test this on ES.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/UpdateAtlas.cpp:38
&gt; &gt; +static int nextPowerOfTwo(int number)
&gt; 
&gt; I think there is a trick to make nextPowerOfTwo simpler than this for 32 bits integer.
Sure, I can use that... tried to keep it straightforward since it&apos;s not code that gets called a lot.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/UpdateAtlas.cpp:48
&gt; &gt; +static const int BufferIsInUse = 1;
&gt; 
&gt; maybe an enumerator?
OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598113</commentid>
    <comment_count>4</comment_count>
      <attachid>136175</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-08 20:50:45 -0700</bug_when>
    <thetext>Created attachment 136175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598259</commentid>
    <comment_count>5</comment_count>
      <attachid>136175</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-09 06:47:56 -0700</bug_when>
    <thetext>Comment on attachment 136175
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=136175&amp;action=review

&gt; Source/WebCore/ChangeLog:6
&gt; +        Modify BitmapTexture::updateContets to include a source offset.

Contents*

&gt; Source/WebKit2/ChangeLog:12
&gt; +        In this iteration, UpdateAtlas has a simple behavior where a rect inside the bitmap is

Maybe RepaintAtlas would be a better name?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:70
&gt; +    virtual void updateContents(const void*, const IntRect&amp; target, const IntPoint&amp; offset, int bytesPerLine) = 0;

atlasOffset?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:459
&gt; +    // For ES drivers that don&apos;t support sub-imaages, transfer the pixels row-by-row.

images*

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:-444
&gt; +    if (!driverSupportsSubImage()) {
&gt; +        const char* bits = static_cast&lt;const char*&gt;(data);
&gt; +        for (int y = 0; y &lt; targetRect.height(); ++y) {
&gt; +            const char *row = bits + ((sourceOffset.y() + y) * bytesPerLine + sourceOffset.x() * 4);
&gt; +            GL_CMD(glTexSubImage2D(GL_TEXTURE_2D, 0, targetRect.x(), targetRect.y() + y, targetRect.width(), 1, glFormat, GL_UNSIGNED_BYTE, row))
&gt; +        }
&gt; +        return;
&gt;      }
&gt;  
&gt; -    GL_CMD(glTexSubImage2D(GL_TEXTURE_2D, 0, targetRect.x(), targetRect.y(), targetRect.width(), targetRect.height(), glFormat, GL_UNSIGNED_BYTE, data))

Why do you need to do it per line now, you didn&apos;t seem to do that before

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.h:90
&gt; +    virtual void updateContents(const void*, const IntRect&amp; target, const IntPoint&amp; sourceOffset, int bytesPerLine);

updateContentsAtlas?

&gt; Source/WebKit2/WebProcess/WebPage/UpdateAtlas.h:53
&gt; +        InUse

Taken? :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598263</commentid>
    <comment_count>6</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 07:03:59 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 136175 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136175&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:6
&gt; &gt; +        Modify BitmapTexture::updateContets to include a source offset.
&gt; 
&gt; Contents*
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:12
&gt; &gt; +        In this iteration, UpdateAtlas has a simple behavior where a rect inside the bitmap is
&gt; 
&gt; Maybe RepaintAtlas would be a better name?
It&apos;s related to UpdateAtlas.
My first choice was ScratchBufferAtlas. (The word ScratchBuffer is used in other places in webkit as well).

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:70
&gt; &gt; +    virtual void updateContents(const void*, const IntRect&amp; target, const IntPoint&amp; offset, int bytesPerLine) = 0;
&gt; 
&gt; atlasOffset?
Maybe sourceOffset. Atlas is a term only used in the web-process, I don&apos;t want to introduce it to TextureMapper.

&gt; &gt; -    GL_CMD(glTexSubImage2D(GL_TEXTURE_2D, 0, targetRect.x(), targetRect.y(), targetRect.width(), targetRect.height(), glFormat, GL_UNSIGNED_BYTE, data))
&gt; 
&gt; Why do you need to do it per line now, you didn&apos;t seem to do that before
Before we uploaded full images (with no gaps) to the GPU. With the atlas approach, we upload a partial rect from the source image; This requires a sub-image extension, which is not guaranteed on ES.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598264</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 07:04:30 -0700</bug_when>
    <thetext>&gt; &gt; Maybe RepaintAtlas would be a better name?
&gt; It&apos;s related to UpdateAtlas.
I mean UpdateInfo. Repaint is more of a command.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598299</commentid>
    <comment_count>8</comment_count>
      <attachid>136175</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-09 08:37:06 -0700</bug_when>
    <thetext>Comment on attachment 136175
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=136175&amp;action=review

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:500
&gt; +    bytesPerLine= qtImage.bytesPerLine();

Nit: Missing a space after bytesPerLine here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598321</commentid>
    <comment_count>9</comment_count>
      <attachid>136232</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 09:19:42 -0700</bug_when>
    <thetext>Created attachment 136232
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598323</commentid>
    <comment_count>10</comment_count>
      <attachid>136234</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 09:22:27 -0700</bug_when>
    <thetext>Created attachment 136234
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598367</commentid>
    <comment_count>11</comment_count>
      <attachid>136234</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 10:06:28 -0700</bug_when>
    <thetext>Comment on attachment 136234
Patch for landing

Removed from commit-queue so that andersca could take a look if interested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598386</commentid>
    <comment_count>12</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 10:16:50 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 136234 [details])
&gt; Removed from commit-queue so that andersca could take a look if interested.

(note that this does not change any existing behavior - only adding a function to ShareableBitmap for painting into an internal-rect).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598531</commentid>
    <comment_count>13</comment_count>
      <attachid>136286</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 12:37:59 -0700</bug_when>
    <thetext>Created attachment 136286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598533</commentid>
    <comment_count>14</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 12:39:09 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=136286) [details]
&gt; Patch

Kenneth, could you re-review? It&apos;s a minor change from the last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598546</commentid>
    <comment_count>15</comment_count>
      <attachid>136286</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-09 13:04:07 -0700</bug_when>
    <thetext>Comment on attachment 136286
Patch

Attachment 136286 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12369313</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598935</commentid>
    <comment_count>16</comment_count>
      <attachid>136383</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 20:02:28 -0700</bug_when>
    <thetext>Created attachment 136383
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599003</commentid>
    <comment_count>17</comment_count>
      <attachid>136383</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-09 21:57:49 -0700</bug_when>
    <thetext>Comment on attachment 136383
Patch for landing

Clearing flags on attachment: 136383

Committed r113678: &lt;http://trac.webkit.org/changeset/113678&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599004</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-09 21:57:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599278</commentid>
    <comment_count>19</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-04-10 08:14:15 -0700</bug_when>
    <thetext>It caused a regression (crash!), could you check it?
I filed a new bug about it - https://bugs.webkit.org/show_bug.cgi?id=83582</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599280</commentid>
    <comment_count>20</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-10 08:16:02 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; It caused a regression (crash!), could you check it?
&gt; I filed a new bug about it - https://bugs.webkit.org/show_bug.cgi?id=83582
Looks unrelated; I will look later today. Please dont roll out.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136141</attachid>
            <date>2012-04-07 18:26:44 -0700</date>
            <delta_ts>2012-04-08 20:50:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83424-20120407182642.patch</filename>
            <type>text/plain</type>
            <size>40664</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzdmZWQxMDFkMWExYThh
ZTNjYmY3YjA3MTM2MjlkZWEzMTdiMmUzOC4uZWEzMWMyMWIzMjgyOTBkMDBlZjE5OWE3MmZhOGIy
M2RhZjA1YmNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA0LTA3ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1dLMl0g
RW5hYmxlIHVzaW5nIGEgc2luZ2xlIFNoYXJlYWJsZUJpdG1hcCBmb3IgbXVsdGlwbGUgdXBkYXRl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM0MjQK
KworICAgICAgICBNb2RpZnkgQml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGV0cyB0byBpbmNsdWRl
IGEgc291cmNlIG9mZnNldC4KKyAgICAgICAgVGhpcyBhbGxvd3MgdXMgdG8gdXBkYXRlIGEgdGV4
dHVyZSBmcm9tIGEgc3ViLWltYWdlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3RlZCBieSBleGlzdGluZyBBUEkgdGVzdHMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoQml0
bWFwVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OmRyaXZlclN1cHBvcnRzQkdSQVN3aXp6bGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnRleHR1cmVUYXJnZXQpOgorICAgICAgICAoQml0bWFw
VGV4dHVyZUdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVJbWFn
ZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKEJpdG1hcFRleHR1cmVJ
bWFnZUJ1ZmZlcik6CisKIDIwMTItMDQtMDEgIFRvbnkgVHNldW5nICA8dHNldW5nQGFwcGxlLmNv
bT4KIAogICAgICAgICBDb21wb3NpdGUgRm9udCBSZWZlcmVuY2VzIGlzIGEgbmV3IGVzdGFibGlz
aGVkIHN0YW5kYXJkIChJU08vSUVDIDE0NDk2LTI4OjIwMTIpIGZvciBzcGVjaWZ5aW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggYmUwMzk1MDY3ZmJlNjJiMDYwNWM5ZTZiOWZlNTE1YWY5MmMwYWM4NS4uZWJhNDFh
ODczNDg2NDA2NWQyMjIyNmRiOWFhZjJiMDEzYTA5ZjBjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDkwIEBACisyMDEyLTA0LTA3ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tp
YS5jb20+CisKKyAgICAgICAgW1dLMl0gRW5hYmxlIHVzaW5nIGEgc2luZ2xlIFNoYXJlYWJsZUJp
dG1hcCBmb3IgbXVsdGlwbGUgdXBkYXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODM0MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBFbmFibGVkIGNyZWF0aW5nIGEgR3JhcGhpY3NDb250ZXh0IHRoYXQg
cmVmZXJlbmNlcyBhIHJlY3QgaW5zaWRlIFNoYXJlYWJsZUJpdG1hcC4KKyAgICAgICAgQWRkZWQg
Yml0bWFwT2Zmc2V0IHRvIFVwZGF0ZUluZm8sIHRvIGFsbG93IHVwZGF0ZXMgdG8gcmVmZXJlbmNl
IGFuIG9mZnNldCBpbnNpZGUgdGhlIGJpdG1hcC4KKyAgICAgICAgQWRkZWQgVXBkYXRlQXRsYXMs
IGEgY2xhc3MgdGhhdCBtYW5hZ2VzIGF2YWlsYWJsZSByZWN0cyBpbiBhIGxhcmdlciBTaGFyZWFi
bGVCaXRtYXAuCisKKyAgICAgICAgSW4gdGhpcyBpdGVyYXRpb24sIFVwZGF0ZUF0bGFzIGhhcyBh
IHNpbXBsZSBiZWhhdmlvciB3aGVyZSBhIHJlY3QgaW5zaWRlIHRoZSBiaXRtYXAgaXMKKyAgICAg
ICAgZWl0aGVyIGF2YWlsYWJsZSBvciB1c2VkLiBXaGVuIHRoZSBidWZmZXJzIGFyZSBzd2FwcGVk
LCBhbGwgdXNlZCBidWZmZXJzIGJlY29tZSBhdmFpbGFibGUKKyAgICAgICAgYWdhaW4uIEEgZnV0
dXJlIGVuaGFuY2VtZW50IG1pZ2h0IGFsbG93IHRyaXBsZS1idWZmZXJpbmcsIHdoZXJlIGF2YWls
YWJsZSByZWN0cyBjYW4gYmUKKyAgICAgICAgdXBkYXRlZCB3aGlsZSBvdGhlciByZWN0cyBmcm9t
IHRoZSBzYW1lIGF0bGFzIGFyZSBpbiB1c2UuCisKKyAgICAgICAgQWRkZWQgdGhlIG5lY2Vzc2Fy
eSBwbHVtYmluZyB0byBhbGxvdyBRdCdzIFVJLXNpZGUgY29tcG9zaXRpbmcgdG8gdGFrZSBhZHZh
bnRhZ2Ugb2YKKyAgICAgICAgVXBkYXRlQXRsYXMuIExheWVyVHJlZUhvc3RRdCBjcmVhdGVzIGFu
IGF0bGFzIHBlciB0eXBlIG9mIGJpdG1hcCAoaS5lLiBvbmUgb3BhcXVlIGFuZCBvbmUKKyAgICAg
ICAgYWxwaGEtZW5hYmxlZCBhdGxhcykuIFdoZW4gYSB0aWxlIHdhbnRzIHRvIHVwZGF0ZSBhbmQg
dGhlcmUncyBubyBhdmFpbGFibGUgc2NyYXRjaC1idWZmZXIsCisgICAgICAgIHRoZSB1cGRhdGUg
d291bGQgYmUgcG9zdHBvbmVkIHRvIHRoZSBuZXh0IGZyYW1lLCBjcmVhdGluZyBhIHRpbGluZy1h
cnRpZmFjdCBpbiBsb3cgbWVtb3J5CisgICAgICAgIHNpdHVhdGlvbnMuCisKKyAgICAgICAgKiBT
aGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0
bWFwOjpjcmVhdGUpOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuaDoKKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChTaGFyZWFibGVCaXRtYXApOgorICAgICAgICAqIFNoYXJl
ZC9VcGRhdGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlSW5mbzo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6VXBkYXRlSW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQv
VXBkYXRlSW5mby5oOgorICAgICAgICAoVXBkYXRlSW5mbyk6CisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJMYXllclRyZWVSZW5kZXJlci5oOgorICAgICAgICAoVGlsZVVwZGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlOjpUaWxlVXBkYXRlKToK
KyAgICAgICAgKFdlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQv
TGF5ZXJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllckJhY2tpbmdTdG9y
ZVRpbGU6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJCYWNraW5nU3RvcmVU
aWxlOjpzZXRCYWNrQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJCYWNraW5nU3RvcmU6
OmNyZWF0ZVRpbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5o
OgorICAgICAgICAoTGF5ZXJCYWNraW5nU3RvcmVUaWxlKToKKyAgICAgICAgKExheWVyQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oOgorICAgICAgICAo
V2ViR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChXZWJHcmFwaGljc0xheWVyKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjp1cGRhdGVC
YWNrQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlLmg6CisgICAgICAgIChUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGll
bnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OlVwZGF0
ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6bmV4dFBvd2VyT2ZUd28pOgorICAgICAgICAoV2Vi
S2l0OjpVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6
OlVwZGF0ZUF0bGFzOjpmaW5kQXZhaWxhYmxlSW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpVcGRh
dGVBdGxhczo6ZGlkU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6
YWNxdWlyZVNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6b2Zm
c2V0Rm9ySW5kZXgpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OmJpdG1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpzaXplKToKKyAgICAgICAgKFdlYktpdDo6VXBk
YXRlQXRsYXM6OmZsYWdzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJU
cmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjphZG9wdElt
YWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZW5k
ZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnB1cmdlQmFj
a2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OmdldEF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpi
ZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuaDoKKyAgICAgICAgKExheWVyVHJlZUhvc3RRdCk6CisKIDIwMTItMDMtMzEg
IFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIFByZXZlbnQg
b3BlbmluZyBleHRlcm5hbCBVUkxzIGluIHRoZSBXZWIgSW5zcGVjdG9yJ3MgV2ViVmlldy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlci5oCmluZGV4IDZjYjViNzdkNmRkZmRkOGIzNTI5YWVjYjY5MjRiNjJmMTk5NzkxYjgu
LjVkOWRkYTZmMDAzZTlkYTQ3Njc4NDhlMzBiYjc4NzAyOTVlZDhiZTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJ
bnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lk
KiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0LCBpbnQgYnl0
ZXNQZXJMaW5lKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7CiAg
ICAgaW5saW5lIEZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCmluZGV4IGI4ZjhiNTRiZWI4OTZmZDdlNjMwY2FmNzkwNTMxMGQ1YWEw
YTY0OTUuLjAyMzFkNjc5YmU2OTg1ZjYzNWMzNDlhNzcwMDhjMjE1YzdjOWVjYmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCkBAIC00MzEsMTAgKzQzMSwxMSBAQCBzdGF0aWMgYm9vbCBkcml2ZXJT
dXBwb3J0c0JHUkFTd2l6emxpbmcoKQogI2VuZGlmCiB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZUdM
Ojp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0KQordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRh
dGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZz
ZXQsIGludCBieXRlc1BlckxpbmUpCiB7CiAgICAgR0x1aW50IGdsRm9ybWF0ID0gR0xfUkdCQTsK
ICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKKwogICAgIGlm
IChkcml2ZXJTdXBwb3J0c0JHUkFTd2l6emxpbmcoKSkKICAgICAgICAgZ2xGb3JtYXQgPSBHTF9C
R1JBOwogICAgIGVsc2UgewpAQCAtNDQyLDcgKzQ0MywxMyBAQCB2b2lkIEJpdG1hcFRleHR1cmVH
TDo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0
UmVjdAogICAgICAgICBnbEZvcm1hdCA9IEdMX1JHQkE7CiAgICAgfQogCi0gICAgR0xfQ01EKGds
VGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVj
dC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQs
IEdMX1VOU0lHTkVEX0JZVEUsIGRhdGEpKQorICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JP
V19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIDQpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNL
X1NLSVBfUk9XUywgc291cmNlT2Zmc2V0LnkoKSk7CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBB
Q0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNldC54KCkpOworICAgIEdMX0NNRChnbFRleFN1Yklt
YWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0
YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJ
R05FRF9CWVRFLCAoY29uc3QgY2hhciopZGF0YSkpCisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBB
Q0tfUk9XX0xFTkdUSCwgMCk7CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dT
LCAwKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCk7CiB9CiAK
IHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIEJpdG1hcFRl
eHR1cmU6OlBpeGVsRm9ybWF0IGZvcm1hdCkKQEAgLTQ3NCw3ICs0ODEsNyBAQCB2b2lkIEJpdG1h
cFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0LCBjbwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzd2l6emxlQkdSQVRvUkdC
QShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocXRJbWFnZS5iaXRzKCkpLCBxdEltYWdlLnNp
emUoKSk7CiAgICAgfQotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwg
MCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRh
cmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBxdEltYWdlLmNv
bnN0Qml0cygpKSkKKyAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJn
ZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBx
dEltYWdlLmNvbnN0Qml0cygpKSkKIAogI2VsaWYgVVNFKENBSVJPKQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmgKaW5kZXggNTQ3ZmUyZjhiMTc3NmU2NzcwZWNjNzY2MmVhZmYwYWI0MDIyOWRkMi4uZWIwZjhl
MWUwNmZmNGFiYmQwNTA0YjI2MGQ4ZmM5NjY4MTA5NTBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApA
QCAtODMsMTAgKzgzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVTdGVuY2lsKCk7
CiAgICAgfkJpdG1hcFRleHR1cmVHTCgpOwogICAgIHZpcnR1YWwgdWludDMyX3QgaWQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9CisgICAgdWludDMyX3QgdGV4dHVyZVRhcmdldCgpIGNvbnN0IHsg
cmV0dXJuIEdMX1RFWFRVUkVfMkQ7IH0KICAgICBJbnRTaXplIHRleHR1cmVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0dXJlU2l6ZTsgfQogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0
dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KICAgICB2
b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3Qm
LCBQaXhlbEZvcm1hdCk7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiwgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lk
KiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0LCBp
bnQgYnl0ZXNQZXJMaW5lKTsKIAogcHJpdmF0ZToKICAgICBHTHVpbnQgbV9pZDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
SW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAKaW5kZXggZTUzYjlmOGQ2YzBkMDc4ZmYzMDI2
MTExYWZiMzhmYzBkYWYxMzZkMy4uNzhjZjhjZjY4Njk3ZGJmZThiN2JhMDc0MTFiMTE5ODFlYWQ5
ZGFmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAKQEAgLTI1LDE0
ICsyNSwxNSBAQAogI2lmIFVTRShURVhUVVJFX01BUFBFUikKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZv
aWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCit2b2lkIEJpdG1hcFRleHR1cmVJ
bWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVy
TGluZSkKIHsKICNpZiBQTEFURk9STShRVCkKLSAgICBRSW1hZ2UgaW1hZ2UocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1Y2hhcio+KGRhdGEpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3Qu
aGVpZ2h0KCksIHRhcmdldFJlY3Qud2lkdGgoKSAqIDQsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9Q
cmVtdWx0aXBsaWVkKTsKKyAgICBRSW1hZ2UgaW1hZ2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
Y2hhcio+KGRhdGEpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGJ5
dGVzUGVyTGluZSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworCiAgICAg
UVBhaW50ZXIqIHBhaW50ZXIgPSBtX2ltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgp
OwogICAgIHBhaW50ZXItPnNhdmUoKTsKICAgICBwYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUo
UVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOwotICAgIHBhaW50ZXItPmRyYXdJbWFn
ZSh0YXJnZXRSZWN0LCBpbWFnZSk7CisgICAgcGFpbnRlci0+ZHJhd0ltYWdlKHRhcmdldFJlY3Qs
IGltYWdlLCBJbnRSZWN0KHNvdXJjZU9mZnNldCwgdGFyZ2V0UmVjdC5zaXplKCkpKTsKICAgICBw
YWludGVyLT5yZXN0b3JlKCk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXIuaAppbmRleCAyODI2YzRiOTYwZWFlMTZjZjAyYzgzNzkwYTc1NmQ0ZWFiZTViZDI5Li43
NmMyM2IxZTQyN2NhMmFhZWMyNWE4Y2Q3OTNjM2VlYTUzNDc3MTI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVm
ZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KICAgICBpbmxpbmUg
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2ltYWdlID8gbV9p
bWFnZS0+Y29udGV4dCgpIDogMDsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJ
bWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgUGl4ZWxGb3JtYXQpOwotICAg
IHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFy
Z2V0UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBj
b25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBi
eXRlc1BlckxpbmUpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB2b2lkIGFwcGx5Rmls
dGVycyhjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCmluZGV4IGNkZTNh
YTE2NTczMDYwYjBhOGJlYzM2NTRiMGJlYzQzYzJmZDQwMTcuLjdkZTE1MWViMjY4MDgwMTE3ZmMw
MjY1MmFhM2JhOTc1M2Y3YjA3MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9T
aGFyZWFibGVCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVC
aXRtYXAuY3BwCkBAIC0xMjUsNiArMTI1LDE0IEBAIFNoYXJlYWJsZUJpdG1hcDo6U2hhcmVhYmxl
Qml0bWFwKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCBQYXNzUmVmUHRyPFNoCiB7
CiB9CiAKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFibGVCaXRt
YXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQor
eworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGNyZWF0ZUdy
YXBoaWNzQ29udGV4dCgpOworICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcChyZWN0KTsKKyAgICBn
cmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55KCkpOworICAgIHJldHVy
biBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworfQorCiBTaGFyZWFibGVCaXRtYXA6On5TaGFy
ZWFibGVCaXRtYXAoKQogewogICAgIGlmICghaXNCYWNrZWRCeVNoYXJlZE1lbW9yeSgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCmluZGV4IGU1ZDFhNmRjOTEyYTYxM2M3
YzFhYjEyOGM1ZDVhYWVlYjAzY2ExMmEuLmYzY2QyMTNlMzQxYzk4NGJiNmE1OGNjYWE5MmE0MDlm
YzBjMzgwZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRt
YXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKQEAgLTEw
Niw2ICsxMDYsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDcmVhdGUgYSBncmFwaGljcyBjb250ZXh0
IHRoYXQgY2FuIGJlIHVzZWQgdG8gcGFpbnQgaW50byB0aGUgYmFja2luZyBzdG9yZS4KICAgICBQ
YXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0
KCk7CisgICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUdyYXBo
aWNzQ29udGV4dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAKICAgICAvLyBQYWludCB0aGUg
YmFja2luZyBzdG9yZSBpbnRvIHRoZSBnaXZlbiBjb250ZXh0LgogICAgIHZvaWQgcGFpbnQoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RpbmF0
aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1Vw
ZGF0ZUluZm8uY3BwCmluZGV4IGExNWQ3MTZiMTNmMzY2NTNjNGJlMDg1NDY1Y2M1MzRiZDgwZmQx
MjkuLjViYjE4OTU5N2JiMDljMzEyZjZhZTQ3Zjc3NmQ3OTVjZjMyOTIxZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvVXBkYXRlSW5mby5jcHAKQEAgLTQwLDYgKzQwLDcgQEAgdm9pZCBVcGRhdGVJbmZv
OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogICAgIGVu
Y29kZXItPmVuY29kZSh1cGRhdGVSZWN0cyk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHVwZGF0ZVNj
YWxlRmFjdG9yKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoYml0bWFwSGFuZGxlKTsKKyAgICBlbmNv
ZGVyLT5lbmNvZGUoYml0bWFwT2Zmc2V0KTsKIH0KIAogYm9vbCBVcGRhdGVJbmZvOjpkZWNvZGUo
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBVcGRhdGVJbmZvJiByZXN1bHQpCkBA
IC02MCw2ICs2MSw4IEBAIGJvb2wgVXBkYXRlSW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgVXBkYXRlSW5mbyYgcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LmJpdG1hcEhhbmRsZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShyZXN1bHQuYml0bWFw
T2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uaAppbmRleCA0MGM4NmRjNWQzZWZhMDNjYjZhNGFjZjEx
NzY5NWM2YjUxMzUzN2I5Li5lM2E4ZGUyNzg0NzVlOTRjNGNlMGIwYzQ1YzE5MjcyODY3NDhkY2Yz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmgKQEAgLTY1LDYgKzY1LDkgQEAgcHVibGlj
OgogCiAgICAgLy8gVGhlIGhhbmRsZSBvZiB0aGUgc2hhcmVhYmxlIGJpdG1hcCBjb250YWluaW5n
IHRoZSB1cGRhdGVzLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUgYXJlIG5vIHVwZGF0ZXMuCiAgICAg
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgYml0bWFwSGFuZGxlOworCisgICAgLy8gVGhlIG9mZnNl
dCBpbiB0aGUgYml0bWFwIHdoZXJlIHRoZSByZW5kZXJlZCBjb250ZW50cyBhcmUuCisgICAgV2Vi
Q29yZTo6SW50UG9pbnQgYml0bWFwT2Zmc2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaQppbmRleCAxNmZiYWQ0YTNjM2Y0OWRjN2I3ODU5N2Q4YjQxNzQwYmJmNmUwY2E0
Li4zNTI2N2VhZmMwMGJmN2UzYjk3MGY3Zjk3Y2FkM2QwNDY1NzVhYTBlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkK
QEAgLTM1NSw2ICszNTUsNyBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENv
bnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmggXAorICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViQ29udGV4dE1lbnUuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuaCBcCkBAIC0zNjIsNiArMzYz
LDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmggXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5
ZXJUcmVlSG9zdFF0LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29ubmVjdGlvblRvVUlQcm9jZXNz
LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIFwKICAgICBXZWJQcm9jZXNzL3F0L1F0
QnVpbHRpbkJ1bmRsZS5oIFwKQEAgLTcxNSw2ICs3MTcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9QYWdlT3ZlcmxheS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGUuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRs
YXMuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHku
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwIFwKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKaW5kZXggYzJmNjE2MDI5NmIwMDczODliZWI4
NTM0N2FmMzdmNGM3MzBjMmEyNC4uYWI2MjAyOTkzODRmMDk0ZmI4NDQzODQ0NzYzMWRkNWMwZmRm
ZmYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94
eS5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRp
bGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2kKICAgICBJbnRS
ZWN0IHNvdXJjZVJlY3QgPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RzLmZpcnN0KCk7CiAgICAgSW50
UmVjdCB0YXJnZXRSZWN0ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzOwogICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKHVwZGF0
ZUluZm8uYml0bWFwSGFuZGxlKTsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRy
ZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlE
LCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRtYXApKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwg
bGF5ZXJJRCwgdGlsZUlELCBXZWJMYXllclRyZWVSZW5kZXJlcjo6VGlsZVVwZGF0ZShzb3VyY2VS
ZWN0LCB0YXJnZXRSZWN0LCBiaXRtYXAsIHVwZGF0ZUluZm8uYml0bWFwT2Zmc2V0KSkpOwogfQog
CiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxh
eWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRy
ZWVSZW5kZXJlci5jcHAKaW5kZXggZDc3NjI4N2UwMWQ3ODkxYTUzNjM5NjBlMmIxMzYyNGE1YzM3
N2UxZC4uN2Q2ZjEzYjgwZDFlMzY3YmYwZDA1NTQzZTUyZjUzMGU3NzdhM2NiYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0y
OTMsMTEgKzI5MywxMCBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlKFdl
YkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKICAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJ
RCktPnJlbW92ZVRpbGUodGlsZUlEKTsKIH0KIAotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiB3ZWFrQml0bWFwKQordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRl
VGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVw
ZGF0ZSkKIHsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFrQml0bWFw
OwogICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gZ2V0QmFja2lu
Z1N0b3JlKGxheWVySUQpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHNv
dXJjZVJlY3QsIHRhcmdldFJlY3QsIGJpdG1hcC5nZXQoKSk7CisgICAgYmFja2luZ1N0b3JlLT51
cGRhdGVUaWxlKHRpbGVJRCwgdXBkYXRlLnNvdXJjZVJlY3QsIHVwZGF0ZS50YXJnZXRSZWN0LCB1
cGRhdGUuYml0bWFwLCB1cGRhdGUub2Zmc2V0KTsKICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVu
ZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAKQEAgLTMwNSw4ICszMDQsOCBAQCB2
b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZShpbnQ2NF90IGltYWdlSUQsIFBh
c3NSZWZQdHI8U2hhcmVhYmxlQml0bQogewogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJp
dG1hcCA9IHdlYWtCaXRtYXA7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVh
dGUoKTsKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZUNvbnRlbnRzKG1fdGV4dHVyZU1hcHBlci5n
ZXQoKSwgYml0bWFwLT5jcmVhdGVJbWFnZSgpLmdldCgpLCBCaXRtYXBUZXh0dXJlOjpCR1JBRm9y
bWF0KTsKICAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5zZXQoaW1hZ2VJRCwgYmFja2lu
Z1N0b3JlKTsKKyAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZUNvbnRlbnRzKG1fdGV4dHVyZU1hcHBl
ci5nZXQoKSwgYml0bWFwLT5jcmVhdGVJbWFnZSgpLmdldCgpLCBCaXRtYXBUZXh0dXJlOjpCR1JB
Rm9ybWF0KTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUltYWdlKGlu
dDY0X3QgaW1hZ2VJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJM
YXllclRyZWVSZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJl
ZVJlbmRlcmVyLmgKaW5kZXggYTdmOGFjZGFhYzI1NGYyOWI4MTIxMzc0OTcwODY5MDhiYzFiNTk2
My4uOTJkY2U1OWU4MWRiZmU2NzZkMWIzYzNiYTliOTYyYzM1MzZlMjMwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTQ1LDYgKzQ1
LDE5IEBAIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKIAogY2xhc3MgV2ViTGF5ZXJUcmVlUmVu
ZGVyZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+
LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6CisgICAgc3Ry
dWN0IFRpbGVVcGRhdGUgeworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHNvdXJjZVJlY3Q7Cisg
ICAgICAgIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdDsKKyAgICAgICAgUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gYml0bWFwOworICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBvZmZzZXQ7Cisg
ICAgICAgIFRpbGVVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc291cmNlLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBuZXdC
aXRtYXAsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBuZXdPZmZzZXQpCisgICAgICAgICAgICA6
IHNvdXJjZVJlY3Qoc291cmNlKQorICAgICAgICAgICAgLCB0YXJnZXRSZWN0KHRhcmdldCkKKyAg
ICAgICAgICAgICwgYml0bWFwKG5ld0JpdG1hcCkKKyAgICAgICAgICAgICwgb2Zmc2V0KG5ld09m
ZnNldCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKICAgICBXZWJMYXllclRyZWVSZW5k
ZXJlcihMYXllclRyZWVIb3N0UHJveHkqKTsKICAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVSZW5k
ZXJlcigpOwogICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOwpAQCAtNjIsNyArNzUsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYp
OwogICAgIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGZsb2F0IHNjYWxlKTsKICAg
ICB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50KTsKLSAgICB2b2lkIHVwZGF0ZVRpbGUo
V2ViTGF5ZXJJRCwgaW50LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPik7CisgICAgdm9pZCB1cGRhdGVU
aWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZvaWQgZmx1c2hM
YXllckNoYW5nZXMoKTsKICAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIFBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPik7CiAgICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50NjRfdCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcAppbmRl
eCAzZjhhOGM4OTIyMWFkODQ5MjJiYzUzNzI0YTI3ZmJkYzY4MjlhMzI3Li5mZWUwYzkwNjIyMGY0
MThkYTUzZDFiMWM0YjMzZWYzYTgxZjUwMDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAKQEAgLTIzLDggKzIzLDcgQEAKICNpZiBV
U0UoVUlfU0lERV9DT01QT1NJVElORykKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlci5oIgotCi0jaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyR0wuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTUwLDE4
ICs0OSwxNyBAQCB2b2lkIExheWVyQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKICAgICB9CiAKICAgICBRSW1hZ2UgcUlt
YWdlID0gbV9iYWNrQnVmZmVyLT5jcmVhdGVRSW1hZ2UoKTsKLQogICAgIGlmIChzaG91bGRSZXNl
dCkKICAgICAgICAgdGV4dHVyZS0+cmVzZXQobV9zb3VyY2VSZWN0LnNpemUoKSwgcUltYWdlLmhh
c0FscGhhQ2hhbm5lbCgpID8gQml0bWFwVGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6IDApOwotCi0g
ICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMocUltYWdlLmNvbnN0Qml0cygpLCBtX3NvdXJjZVJl
Y3QpOworICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHFJbWFnZS5jb25zdEJpdHMoKSwgbV9z
b3VyY2VSZWN0LCBtX2JpdG1hcE9mZnNldCwgcUltYWdlLmJ5dGVzUGVyTGluZSgpKTsKICAgICBt
X2JhY2tCdWZmZXIuY2xlYXIoKTsKIH0KIAotdm9pZCBMYXllckJhY2tpbmdTdG9yZVRpbGU6OnNl
dEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgc291cmNlUmVjdCwgU2hhcmVhYmxlQml0bWFwKiBidWZmZXIpCit2b2lk
IExheWVyQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihjb25zdCBJbnRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIG1fc291cmNlUmVj
dCA9IHNvdXJjZVJlY3Q7CiAgICAgbV90YXJnZXRSZWN0ID0gdGFyZ2V0UmVjdDsKKyAgICBtX2Jp
dG1hcE9mZnNldCA9IG9mZnNldDsKICAgICBtX2JhY2tCdWZmZXIgPSBidWZmZXI7CiB9CiAKQEAg
LTc2LDExICs3NCwxMiBAQCB2b2lkIExheWVyQmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKGludCBp
ZCkKICAgICBtX3RpbGVzVG9SZW1vdmUuYXBwZW5kKGlkKTsKIH0KIAotdm9pZCBMYXllckJhY2tp
bmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFNoYXJlYWJsZUJpdG1hcCogYmFja0J1ZmZlcikKKwor
dm9pZCBMYXllckJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBiYWNrQnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIEhh
c2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMu
ZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fdGlsZXMuZW5kKCkpOwotICAgIGl0LT5zZWNv
bmQuc2V0QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyKTsKKyAg
ICBpdC0+c2Vjb25kLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1
ZmZlciwgb2Zmc2V0KTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBMYXllckJhY2tp
bmdTdG9yZTo6dGV4dHVyZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9MYXllckJhY2tpbmdTdG9yZS5oCmluZGV4IDIwODNiYWVjODc5MzAxNTg3MzcwZWY2NGQ0M2Zi
NmQxMTIxMDhhMzkuLjM2NmY0OTEzNmUzN2M0MDc1NjgyZjQ1OTcyYTY1OGY2ZTUzNTcwMjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oCkBA
IC0zOCwxMiArMzgsMTMgQEAgcHVibGljOgogCiAgICAgaW5saW5lIGZsb2F0IHNjYWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zY2FsZTsgfQogICAgIHZvaWQgc3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlciopOwotICAgIHZvaWQgc2V0QmFja0J1ZmZlcihjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFNoYXJlYWJsZUJpdG1hcCogYnVmZmVyKTsK
KyAgICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYnVmZmVyLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IG1fYmFja0J1ZmZlcjsKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc291cmNlUmVjdDsK
ICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdGFyZ2V0UmVjdDsKKyAgICBXZWJDb3JlOjpJbnRQb2lu
dCBtX2JpdG1hcE9mZnNldDsKICAgICBmbG9hdCBtX3NjYWxlOwogfTsKIApAQCAtNTEsNyArNTIs
NyBAQCBjbGFzcyBMYXllckJhY2tpbmdTdG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZVRpbGUoaW50LCBmbG9h
dCk7CiAgICAgdm9pZCByZW1vdmVUaWxlKGludCk7Ci0gICAgdm9pZCB1cGRhdGVUaWxlKGludCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBTaGFyZWFi
bGVCaXRtYXAqKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUoaW50LCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXll
ckJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyQmFja2lu
Z1N0b3JlKTsgfQogICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlciopOwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gdGV4dHVy
ZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKaW5kZXggZDZjZTljY2YzM2EyZTgy
OWFlMmRmNTNhNWZmNzJlNDZkNzM4ZDE5NC4uMDA1ZWVmM2RmZWI2NjM0MThiYjI0ZDliYjBmMzJk
YjZmNGU5OThhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCkBAIC01NTYsOCArNTU2LDEz
IEBAIEludFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVj
dCgpCiBDb2xvciBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRD
b2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hp
dGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Cit9CiAKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSwgV2Vi
Q29yZTo6SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICByZXR1cm4gbV93ZWJHcmFwaGljc0xheWVy
Q2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUoc2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IDAgOiBT
aGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEsIGhhbmRsZSwgb2Zmc2V0KTsKIH0KKwogdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUlu
Zm8mIHVwZGF0ZUluZm8pCiB7CiAgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5jcmVhdGVU
aWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCmluZGV4
IDBjYTVhYTU0YWYyZmU1YmYwZWQ0MDIwZGZlMzBiYTg1MTlhMTJhMTcuLmNlNjgxN2U2ZjczYTMy
MWM3N2I4ZTY4NTIzOTEyY2Y2NjlhOGVmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCkBAIC01
OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAg
dmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50
VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOwogfTsKIH0K
IApAQCAtMTMyLDYgKzEzMyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGls
ZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKTsKKyAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJD
b3JlOjpJbnRQb2ludCYpOwogCiAgICAgdm9pZCBzZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KFdl
YktpdDo6V2ViR3JhcGhpY3NMYXllckNsaWVudCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90
ZVRpbGUuY3BwCmluZGV4IGVlMTE2YzJlOWI0ZWYzYzcwOGVmMGU2MjhmN2FhMzQxMWVlMjU3ZGMu
LmFlYjZlYmNiYmI1OGM0YTc0MDUzZWM4NTc4MGFjM2YwMjJmZGViZjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGUuY3BwCkBAIC03MiwxOSArNzIsMjAgQEAgVmVjdG9yPEludFJlY3Q+
IFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6dXBkYXRlQmFja0J1ZmZlcigpCiAgICAgaWYg
KCFpc0RpcnR5KCkpCiAgICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKIAotICAgIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hh
cmVhYmxlKG1fZGlydHlSZWN0LnNpemUoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+c3VwcG9ydHNB
bHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCk7Ci0gICAgT3duUHRy
PEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0KGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3ND
b250ZXh0KCkpOworICAgIFVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICBPd25QdHI8R3JhcGhp
Y3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX2NsaWVudC0+YmVnaW5Db250ZW50VXBkYXRl
KG1fZGlydHlSZWN0LnNpemUoKSwgdXBkYXRlSW5mby5iaXRtYXBIYW5kbGUsIHVwZGF0ZUluZm8u
Yml0bWFwT2Zmc2V0KTsKKyAgICBpZiAoIWdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IFZlY3RvcjxJbnRSZWN0PigpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1tX2Rp
cnR5UmVjdC54KCksIC1tX2RpcnR5UmVjdC55KCkpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+c2Nh
bGUoRmxvYXRTaXplKG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSwgbV90aWxl
ZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpKSk7CiAgICAgbV90aWxlZEJhY2tpbmdTdG9y
ZS0+Y2xpZW50KCktPnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoZ3JhcGhpY3NDb250ZXh0LmdldCgp
LCBtX3RpbGVkQmFja2luZ1N0b3JlLT5tYXBUb0NvbnRlbnRzKG1fZGlydHlSZWN0KSk7CiAKLSAg
ICBVcGRhdGVJbmZvIHVwZGF0ZUluZm87CiAgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRz
ID0gbV9yZWN0OwogICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IG1fZGlydHlSZWN0OwogICAgIHVw
ZGF0ZVJlY3QubW92ZSgtbV9yZWN0LngoKSwgLW1fcmVjdC55KCkpOwogICAgIHVwZGF0ZUluZm8u
dXBkYXRlUmVjdHMuYXBwZW5kKHVwZGF0ZVJlY3QpOwogICAgIHVwZGF0ZUluZm8udXBkYXRlU2Nh
bGVGYWN0b3IgPSBtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCk7Ci0gICAgYml0
bWFwLT5jcmVhdGVIYW5kbGUodXBkYXRlSW5mby5iaXRtYXBIYW5kbGUpOworICAgIGdyYXBoaWNz
Q29udGV4dC5yZWxlYXNlKCk7CiAKICAgICBzdGF0aWMgaW50IGlkID0gMDsKICAgICBpZiAoIW1f
SUQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxl
ZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaAppbmRleCAxMmIyZTA2MDJiNGJlMDJj
MWU5NGY4ZmQwOGIyODMxZDcxODk1YmYzLi5kZmMyNTJlNjkwMjYwNmI3NzdiYjA1OTY2YWJkNWM0
ODFhYjQ4YWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKIAorI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgogI2luY2x1ZGUgIlRpbGUuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9y
ZS5oIgogI2luY2x1ZGUgIldlYkNvcmUvSW50UmVjdC5oIgpAQCAtNzgsNiArNzksNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRl
SW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25z
dCBVcGRhdGVJbmZvJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxl
SUQpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7CiB9OwogCiBjbGFzcyBUaWxl
ZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kIDogcHVibGljIFdlYkNvcmU6OlRpbGVkQmFj
a2luZ1N0b3JlQmFja2VuZCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1VwZGF0ZUF0bGFzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2JkZjg3YjdlMzIyYzRlNDI3ZDMyN2Fh
ZWI4NWE0OWI3ZTVmNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyBDb3B5
cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJVcGRhdGVBdGxhcy5oIgorCisjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworVXBkYXRlQXRsYXM6
OlVwZGF0ZUF0bGFzKGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3Mp
CisgICAgOiBtX2ZsYWdzKGZsYWdzKQoreworICAgIG1fYml0bWFwID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbiksIGZsYWdzKTsK
K30KKworc3RhdGljIGludCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtYmVyKQoreworICAgIGZvciAo
dWludDMyX3QgaSA9IDE7IGkgPCAweEZGRkZGRkZGOyBpIDw8PSAxKSB7CisgICAgICAgIGlmIChp
ID4gbnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiAtMTsK
K30KKworc3RhdGljIGNvbnN0IGludCBCdWZmZXJJc0F2YWlsYWJsZSA9IDA7CitzdGF0aWMgY29u
c3QgaW50IEJ1ZmZlcklzSW5Vc2UgPSAxOworCit2b2lkIFVwZGF0ZUF0bGFzOjpidWlsZExheW91
dElmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fYXRsYXNMYXlvdXQuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzdGF0aWMgY29uc3QgaW50IE1pblRpbGVTaXplID0gMzI7CisgICAg
c3RhdGljIGNvbnN0IGludCBNYXhUaWxlU2l6ZSA9IDUxMjsKKworICAgIC8vIERpdmlkZSBvdXIg
c3F1YXJlIHRvIHNxdWFyZSBwb3dlci1vZi10d28gYm94ZXMuCisgICAgZm9yIChpbnQgY3Vyc29y
ID0gMDsgY3Vyc29yIDwgc2l6ZSgpLndpZHRoKCk7ICkgeworICAgICAgICBpbnQgcmVtYWluZGVy
ID0gc2l6ZSgpLndpZHRoKCkgLSBjdXJzb3I7CisgICAgICAgIGludCBkaW1lbnNpb24gPSBzdGQ6
Om1pbihyZW1haW5kZXIsIHN0ZDo6bWluKE1heFRpbGVTaXplLCBzdGQ6Om1heChNaW5UaWxlU2l6
ZSwgbmV4dFBvd2VyT2ZUd28ocmVtYWluZGVyIC8gMikpKSk7CisgICAgICAgIGN1cnNvciArPSBk
aW1lbnNpb247CisgICAgICAgIG1fYXRsYXNMYXlvdXQuYXBwZW5kKGRpbWVuc2lvbik7CisgICAg
fQorCisgICAgbV9hdGxhc0RhdGEucmVzaXplKG1fYXRsYXNMYXlvdXQuc2l6ZSgpICogbV9hdGxh
c0xheW91dC5zaXplKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9hdGxhc0RhdGEuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fYXRsYXNEYXRhW2ldID0gMDsKK30KKworaW50IFVwZGF0ZUF0
bGFzOjpmaW5kQXZhaWxhYmxlSW5kZXgoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sK
KyAgICBpbnQgZGltZW5zaW9uID0gbV9hdGxhc0xheW91dC5zaXplKCk7CisgICAgaW50IHN0cmlk
ZSA9IGRpbWVuc2lvbjsKKyAgICBpbnQgcmVxdWlyZWREaW1lbnNpb24gPSBzdGQ6Om1heChzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gQmVnaW4gZnJvbSB0aGUgc21hbGxl
c3QgYnVmZmVyLCB1bnRpbCB3ZSByZWFjaCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGJ1ZmZlciB0
aGF0J3MgYmlnIGVub3VnaCB0byBjb250YWluIG91ciByZWN0LgorICAgIGZvciAoaW50IGkgPSBt
X2F0bGFzRGF0YS5zaXplKCkgLSAxOyBpID49IDA7IGkgLT0gKGRpbWVuc2lvbiArIDEpLCAtLXN0
cmlkZSkgeworICAgICAgICAvLyBOZWVkIGEgYmlnZ2VyIGJ1ZmZlci4KKyAgICAgICAgaWYgKG1f
YXRsYXNMYXlvdXRbaSAvIGRpbWVuc2lvbl0gPCByZXF1aXJlZERpbWVuc2lvbikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIENoZWNrIGFsbCBidWZmZXJzIG9mIGN1cnJlbnQg
c2l6ZSwgdG8gZmluZCBhbiBhdmFpbGFibGUgb25lLgorICAgICAgICBmb3IgKGludCBvZmZzZXQg
PSAwOyBvZmZzZXQgPCBzdHJpZGU7ICsrb2Zmc2V0KSB7CisgICAgICAgICAgICBpbnQgaW5kZXgg
PSBpIC0gb2Zmc2V0OworICAgICAgICAgICAgaWYgKG1fYXRsYXNEYXRhW2luZGV4XSA9PSBCdWZm
ZXJJc0F2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgVXBkYXRlQXRsYXM6OmRpZFN3YXBC
dWZmZXJzKCkKK3sKKyAgICBidWlsZExheW91dElmTmVlZGVkKCk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtX2F0bGFzRGF0YS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9hdGxhc0RhdGFbaV0g
PSBCdWZmZXJJc0F2YWlsYWJsZTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVw
ZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSwgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBidWlsZExheW91dElmTmVl
ZGVkKCk7CisgICAgaW50IGluZGV4ID0gZmluZEF2YWlsYWJsZUluZGV4KHNpemUpOworCisgICAg
Ly8gTm8gYXZhaWxhYmxlIGJ1ZmZlciB3YXMgZm91bmQsIHJldHVybmluZyBudWxsLgorICAgIGlm
IChpbmRleCA8IDApCisgICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4o
KTsKKworICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3Rl
ciB1cGRhdGVzLgorICAgIG1fYXRsYXNEYXRhW2luZGV4XSA9IEJ1ZmZlcklzSW5Vc2U7CisgICAg
b2Zmc2V0ID0gb2Zmc2V0Rm9ySW5kZXgoaW5kZXgpOworICAgIEludFJlY3QgcmVjdChJbnRQb2lu
dDo6emVybygpLCBzaXplKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0Nv
bnRleHQgPSBtX2JpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KEludFJlY3Qob2Zmc2V0LCBz
aXplKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlQ29weSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChyZWN0LCAoZmxhZ3MoKSAm
IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSkgPyBDb2xvcjo6dHJhbnNwYXJlbnQgOiBD
b2xvcjo6d2hpdGUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGdyYXBoaWNzQ29udGV4dC0+
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIHJldHVybiBn
cmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworfQorCitJbnRQb2ludCBVcGRhdGVBdGxhczo6b2Zm
c2V0Rm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAoreworICAgIEludFBvaW50IGNvb3JkKGluZGV4
ICUgbV9hdGxhc0xheW91dC5zaXplKCksIGluZGV4IC8gbV9hdGxhc0xheW91dC5zaXplKCkpOwor
ICAgIGludCB4ID0gMDsKKyAgICBpbnQgeSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b29yZC54KCk7ICsraSkKKyAgICAgICAgeCArPSBtX2F0bGFzTGF5b3V0W2ldOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY29vcmQueSgpOyArK2kpCisgICAgICAgIHkgKz0gbV9hdGxhc0xheW91
dFtpXTsKKworICAgIHJldHVybiBJbnRQb2ludCh4LCB5KTsKK30KKworfQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM3ODViNjQ4ZjRhYzlkNzI0ZThkOTUwNDhiNGNjNDg2MGY0ZGI3MjQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaApA
QCAtMCwwICsxLDU5IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBVcGRhdGVBdGxhc19oCisjZGVmaW5lIFVwZGF0ZUF0bGFzX2gKKworI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgorCisjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRSZWN0Owor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVXBkYXRlQXRsYXMgeworcHVibGljOgor
ICAgIFVwZGF0ZUF0bGFzKGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOwor
CisgICAgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0
bWFwOyB9CisgICAgaW5saW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYml0bWFwLT5zaXplKCk7IH0KKworICAgIC8vIFJldHVybnMgYSBudWxsIHBvaW50ZXIgb2Yg
dGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlci4KKyAgICBQYXNzT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dD4gYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KTsKKyAgICB2b2lkIGRpZFN3
YXBCdWZmZXJzKCk7CisgICAgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncygpIGNvbnN0IHsg
cmV0dXJuIG1fZmxhZ3M7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGJ1aWxkTGF5b3V0SWZOZWVk
ZWQoKTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBvZmZzZXRGb3JJbmRleChpbnQpIGNvbnN0Owor
ICAgIGludCBmaW5kQXZhaWxhYmxlSW5kZXgoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworCitw
cml2YXRlOgorICAgIFZlY3RvcjxpbnQ+IG1fYXRsYXNEYXRhOworICAgIFZlY3RvcjxpbnQ+IG1f
YXRsYXNMYXlvdXQ7CisgICAgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBtX2ZsYWdzOworICAgIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYml0bWFwOworfTsKKworfQorI2VuZGlmCisjZW5kaWYg
Ly8gVXBkYXRlQXRsYXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAppbmRleCBjYTc0ZjExNDBiMmI1ODU5Zjc1
MTkxN2Y4OGFjOTAyNTdjY2NhNDQzLi42NWFjNTIxY2NhNjkxYTNhYWQxMzc5NGM0OWViNTFjOWZk
MjIyNjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQv
TGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCiAjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CkBAIC0zMjksOSArMzMwLDkgQEAgaW50NjRfdCBM
YXllclRyZWVIb3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQogICAg
ICAgICByZXR1cm4ga2V5OwogICAgIH0KIAotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJp
dG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCksIGlt
YWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0Fs
cGhhIDogMCk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJh
bWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwogICAg
IHsKLSAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250
ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVH
cmFwaGljc0NvbnRleHQoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBiaXRtYXAtPnNpemUoKSkp
OwogICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgSW50UG9pbnQ6Onplcm8oKSk7CiAgICAgfQogCkBAIC00NTEsNiArNDUyLDggQEAg
dm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSgpCiB7CiAgICAgbV93YWl0aW5n
Rm9yVUlQcm9jZXNzID0gZmFsc2U7CiAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1f
dXBkYXRlQXRsYXNlc1tpXS5kaWRTd2FwQnVmZmVycygpOwogfQogCiBib29sIExheWVyVHJlZUhv
c3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKQEAgLTQ2NSw2ICs0Njgs
MzIgQEAgdm9pZCBMYXllclRyZWVIb3N0UXQ6OnB1cmdlQmFja2luZ1N0b3JlcygpCiAgICAgICAg
ICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKIAogICAgIEFTU0VSVCghbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkpOworICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVh
cigpOworfQorCitVcGRhdGVBdGxhcyYgTGF5ZXJUcmVlSG9zdFF0OjpnZXRBdGxhcyhTaGFyZWFi
bGVCaXRtYXA6OkZsYWdzIGZsYWdzKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV91cGRh
dGVBdGxhc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3VwZGF0ZUF0bGFzZXNbaV0u
ZmxhZ3MoKSA9PSBmbGFncykKKyAgICAgICAgICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXNbaV07
CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDIw
MDA7CisgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChVcGRhdGVBdGxhcyhTY3JhdGNoQnVmZmVy
RGltZW5zaW9uLCBmbGFncykpOworICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpOwor
fQorCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlSG9zdFF0
OjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVh
YmxlQml0bWFwOjpGbGFncyBmbGFncywgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSwg
V2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBVcGRhdGVBdGxhcyYgYXRsYXMgPSBn
ZXRBdGxhcyhmbGFncyk7CisgICAgaWYgKCFhdGxhcy5iaXRtYXAoKS0+Y3JlYXRlSGFuZGxlKGhh
bmRsZSkpCisgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4oKTsKKworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBhdmFp
bGFibGUgYnVmZmVyLgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBo
aWNzQ29udGV4dCA9IGF0bGFzLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihzaXplLCBv
ZmZzZXQpOworICAgIGlmICghZ3JhcGhpY3NDb250ZXh0KQorICAgICAgICByZXR1cm4gUGFzc093
blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KCk7CisKKyAgICByZXR1cm4gZ3JhcGhpY3ND
b250ZXh0LnJlbGVhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgK
aW5kZXggMDhmMGU2NGI3NGIzZDEzZGMxZjRiYjZmNzViYmI0MWVmZmYwNTU5Zi4uZDA2MDFmZWU2
NTIwZDFlN2E1NWQ2YjI1MTQ2MjI3OWIxYjcyMWMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaApAQCAtMjMsNiAr
MjMsNyBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJMYXllclRy
ZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgog
I2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXJDbGllbnQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC03NSw2ICs3Niw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyKik7CiAKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJl
YWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6SW50
UG9pbnQmKTsKKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3RRdChXZWJQ
YWdlKik7CiAKQEAgLTk0LDYgKzk3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1TY2hl
ZHVsZWRMYXllckZsdXNoKCk7CiAgICAgdm9pZCBzZW5kTGF5ZXJzVG9VSSgpOwogCisgICAgVXBk
YXRlQXRsYXMmIGdldEF0bGFzKFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOworCiAgICAgT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwogCiAgICAgLy8gVGhlIGxheWVy
IHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgpAQCAtMTA0LDYgKzEw
OSw3IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIq
PiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+IG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHM7CisgICAgVmVjdG9yPFVwZGF0ZUF0bGFzPiBtX3Vw
ZGF0ZUF0bGFzZXM7CiAKICAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
OwogICAgIGJvb2wgbV9pc1ZhbGlkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136175</attachid>
            <date>2012-04-08 20:50:45 -0700</date>
            <delta_ts>2012-04-09 09:19:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83424-20120408205044.patch</filename>
            <type>text/plain</type>
            <size>52156</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQyYmU1NWMwYzA4MmM5
Y2NmMTJhNjdkMWI3ZDBhZTgwZDUxOWQ4OS4uNmE2MmFmN2IxZGIzNmQ0ZmRlODJlYzgzNDE4YjI1
NGU1MTQ3MGU3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA0LTA3ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1dLMl0g
RW5hYmxlIHVzaW5nIGEgc2luZ2xlIFNoYXJlYWJsZUJpdG1hcCBmb3IgbXVsdGlwbGUgdXBkYXRl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM0MjQK
KworICAgICAgICBNb2RpZnkgQml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGV0cyB0byBpbmNsdWRl
IGEgc291cmNlIG9mZnNldC4KKyAgICAgICAgVGhpcyBhbGxvd3MgdXMgdG8gdXBkYXRlIGEgdGV4
dHVyZSBmcm9tIGEgc3ViLWltYWdlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3RlZCBieSBleGlzdGluZyBBUEkgdGVzdHMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoQml0
bWFwVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OmRyaXZlclN1cHBvcnRzQkdSQVN3aXp6bGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnRleHR1cmVUYXJnZXQpOgorICAgICAgICAoQml0bWFw
VGV4dHVyZUdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVJbWFn
ZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKEJpdG1hcFRleHR1cmVJ
bWFnZUJ1ZmZlcik6CisKIDIwMTItMDQtMDcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW0NNYWtlXSBDbGVhbnVwIFdURiBpbmNsdWRlIGRpcmVjdG9y
aWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggYjc0YTMzMGVhNmE3MWVhNzdkNTdjMGI3ZGVlMDkyZDYyZTFlNGM1
Yi4uYTljYjNkYzA0MTRmYTNiZWYwZWNkZjk0MDQ5ZGExZmFjYjkxZWFhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDkwIEBACisyMDEyLTA0LTA3ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2Vu
dGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1dLMl0gRW5hYmxlIHVzaW5nIGEgc2luZ2xlIFNo
YXJlYWJsZUJpdG1hcCBmb3IgbXVsdGlwbGUgdXBkYXRlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM0MjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGVkIGNyZWF0aW5nIGEgR3JhcGhpY3NDb250
ZXh0IHRoYXQgcmVmZXJlbmNlcyBhIHJlY3QgaW5zaWRlIFNoYXJlYWJsZUJpdG1hcC4KKyAgICAg
ICAgQWRkZWQgYml0bWFwT2Zmc2V0IHRvIFVwZGF0ZUluZm8sIHRvIGFsbG93IHVwZGF0ZXMgdG8g
cmVmZXJlbmNlIGFuIG9mZnNldCBpbnNpZGUgdGhlIGJpdG1hcC4KKyAgICAgICAgQWRkZWQgVXBk
YXRlQXRsYXMsIGEgY2xhc3MgdGhhdCBtYW5hZ2VzIGF2YWlsYWJsZSByZWN0cyBpbiBhIGxhcmdl
ciBTaGFyZWFibGVCaXRtYXAuCisKKyAgICAgICAgSW4gdGhpcyBpdGVyYXRpb24sIFVwZGF0ZUF0
bGFzIGhhcyBhIHNpbXBsZSBiZWhhdmlvciB3aGVyZSBhIHJlY3QgaW5zaWRlIHRoZSBiaXRtYXAg
aXMKKyAgICAgICAgZWl0aGVyIGF2YWlsYWJsZSBvciB1c2VkLiBXaGVuIHRoZSBidWZmZXJzIGFy
ZSBzd2FwcGVkLCBhbGwgdXNlZCBidWZmZXJzIGJlY29tZSBhdmFpbGFibGUKKyAgICAgICAgYWdh
aW4uIEEgZnV0dXJlIGVuaGFuY2VtZW50IG1pZ2h0IGFsbG93IHRyaXBsZS1idWZmZXJpbmcsIHdo
ZXJlIGF2YWlsYWJsZSByZWN0cyBjYW4gYmUKKyAgICAgICAgdXBkYXRlZCB3aGlsZSBvdGhlciBy
ZWN0cyBmcm9tIHRoZSBzYW1lIGF0bGFzIGFyZSBpbiB1c2UuCisKKyAgICAgICAgQWRkZWQgdGhl
IG5lY2Vzc2FyeSBwbHVtYmluZyB0byBhbGxvdyBRdCdzIFVJLXNpZGUgY29tcG9zaXRpbmcgdG8g
dGFrZSBhZHZhbnRhZ2Ugb2YKKyAgICAgICAgVXBkYXRlQXRsYXMuIExheWVyVHJlZUhvc3RRdCBj
cmVhdGVzIGFuIGF0bGFzIHBlciB0eXBlIG9mIGJpdG1hcCAoaS5lLiBvbmUgb3BhcXVlIGFuZCBv
bmUKKyAgICAgICAgYWxwaGEtZW5hYmxlZCBhdGxhcykuIFdoZW4gYSB0aWxlIHdhbnRzIHRvIHVw
ZGF0ZSBhbmQgdGhlcmUncyBubyBhdmFpbGFibGUgc2NyYXRjaC1idWZmZXIsCisgICAgICAgIHRo
ZSB1cGRhdGUgd291bGQgYmUgcG9zdHBvbmVkIHRvIHRoZSBuZXh0IGZyYW1lLCBjcmVhdGluZyBh
IHRpbGluZy1hcnRpZmFjdCBpbiBsb3cgbWVtb3J5CisgICAgICAgIHNpdHVhdGlvbnMuCisKKyAg
ICAgICAgKiBTaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpjcmVhdGUpOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAu
aDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTaGFyZWFibGVCaXRtYXApOgorICAgICAg
ICAqIFNoYXJlZC9VcGRhdGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlSW5mbzo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlSW5mbzo6ZGVjb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvVXBkYXRlSW5mby5oOgorICAgICAgICAoVXBkYXRlSW5mbyk6CisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oOgorICAgICAgICAoVGlsZVVwZGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlOjpUaWxl
VXBkYXRlKToKKyAgICAgICAgKFdlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllckJh
Y2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJCYWNr
aW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJCYWNr
aW5nU3RvcmU6OmNyZWF0ZVRpbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tp
bmdTdG9yZS5oOgorICAgICAgICAoTGF5ZXJCYWNraW5nU3RvcmVUaWxlKToKKyAgICAgICAgKExh
eWVyQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oOgor
ICAgICAgICAoV2ViR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChXZWJHcmFwaGljc0xh
eWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
Ojp1cGRhdGVCYWNrQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlLmg6CisgICAgICAgIChUaWxlZEJhY2tpbmdTdG9yZVJlbW90
ZVRpbGVDbGllbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRs
YXM6OlVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6bmV4dFBvd2VyT2ZUd28pOgorICAg
ICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCk6CisgICAgICAg
IChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpmaW5kQXZhaWxhYmxlSW5kZXgpOgorICAgICAgICAoV2Vi
S2l0OjpVcGRhdGVBdGxhczo6ZGlkU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpVcGRh
dGVBdGxhczo6YWNxdWlyZVNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVB
dGxhczo6b2Zmc2V0Rm9ySW5kZXgpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRh
dGVBdGxhcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OmJp
dG1hcCk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpzaXplKToKKyAgICAgICAgKFdl
YktpdDo6VXBkYXRlQXRsYXM6OmZsYWdzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvTGF5ZXJUcmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFF0OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6
OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UXQ6OmdldEF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9xdC9MYXllclRyZWVIb3N0UXQuaDoKKyAgICAgICAgKExheWVyVHJlZUhvc3RRdCk6CisKIDIw
MTItMDQtMDcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgW0NNYWtlXSBDbGVhbnVwIFdURiBpbmNsdWRlIGRpcmVjdG9yaWVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApp
bmRleCA2Y2I1Yjc3ZDZkZGZkZDhiMzUyOWFlY2I2OTI0YjYyZjE5OTc5MWI4Li5hMjg3ZGJkNDRm
NTdhNGI0Njg3OGIyMTFhNDcwZWQ3OTNhNDA5NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTUyLDcg
KzUyLDYgQEAgY2xhc3MgVGV4dHVyZU1hcHBlcjsKIC8vIEEgMkQgdGV4dHVyZSB0aGF0IGNhbiBi
ZSB0aGUgdGFyZ2V0IG9mIHNvZnR3YXJlIG9yIEdMIHJlbmRlcmluZy4KIGNsYXNzIEJpdG1hcFRl
eHR1cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4gewogcHVibGljOgotICAg
IGVudW0gUGl4ZWxGb3JtYXQgeyBCR1JBRm9ybWF0LCBSR0JBRm9ybWF0LCBCR1JGb3JtYXQsIFJH
QkZvcm1hdCB9OwogICAgIGVudW0gRmxhZyB7CiAgICAgICAgIFN1cHBvcnRzQWxwaGEgPSAweDAx
CiAgICAgfTsKQEAgLTY3LDggKzY2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkJpdG1hcFRl
eHR1cmUoKSB7IH0KIAogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRSZWN0JiwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFBvaW50JiBvZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVu
dHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgSW50UG9pbnQmIG9m
ZnNldCwgaW50IGJ5dGVzUGVyTGluZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgPSAwOwogICAgIGlubGluZSBGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxh
Z3M7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDZj
M2UyZDhkZmQyYzFmZDQzYmNhNjM4OGIzNjcwZmY0MjAwNDc4NjIuLjQzYWM3ODEwYjhjZmZiZjhj
ZDFjMzc0OGZmYmJjZDBhOGUxYjE4ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tp
bmdTdG9yZS5jcHAKQEAgLTI2LDE2ICsyNiwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgVGV4dHVyZU1hcHBlclRpbGU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBCaXRt
YXBUZXh0dXJlOjpQaXhlbEZvcm1hdCBmb3JtYXQpCit2b2lkIFRleHR1cmVNYXBwZXJUaWxlOjp1
cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2Us
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KG1fcmVjdCk7CiAgICAgdGFyZ2V0UmVjdC5pbnRlcnNlY3QoZGlydHlS
ZWN0KTsKICAgICBpZiAodGFyZ2V0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJnZXRSZWN0OworICAgIEludFBvaW50IHNvdXJjZU9m
ZnNldCA9IHRhcmdldFJlY3QubG9jYXRpb24oKTsKIAogICAgIC8vIE5vcm1hbGl6ZSBzb3VyY2VS
ZWN0IHRvIHRoZSBidWZmZXIncyBjb29yZGluYXRlcy4KLSAgICBzb3VyY2VSZWN0Lm1vdmUoLWRp
cnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKyAgICBzb3VyY2VPZmZzZXQubW92ZSgtZGly
dHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOwogCiAgICAgLy8gTm9ybWFsaXplIHRhcmdldFJl
Y3QgdG8gdGhlIHRleHR1cmUncyBjb29yZGluYXRlcy4KICAgICB0YXJnZXRSZWN0Lm1vdmUoLW1f
cmVjdC54KCksIC1tX3JlY3QueSgpKTsKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyVGlsZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgSW1h
Z2UqIGltYWcKICAgICAgICAgbV90ZXh0dXJlLT5yZXNldCh0YXJnZXRSZWN0LnNpemUoKSwgaW1h
Z2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhh
IDogMCk7CiAgICAgfQogCi0gICAgbV90ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZSwgdGFy
Z2V0UmVjdCwgc291cmNlUmVjdCwgZm9ybWF0KTsKKyAgICBtX3RleHR1cmUtPnVwZGF0ZUNvbnRl
bnRzKGltYWdlLCB0YXJnZXRSZWN0LCBzb3VyY2VPZmZzZXQpOwogfQogCiB2b2lkIFRleHR1cmVN
YXBwZXJUaWxlOjpwYWludChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJl
KiBtYXNrKQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdT
dG9yZTo6dXBkYXRlQ29udGVudHNGcm9tSW1hZ2VJZk5lZWRlZChUZXh0dXJlTWFwcAogICAgIGlm
ICghbV9pbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlQ29udGVudHModGV4dHVy
ZU1hcHBlciwgbV9pbWFnZS5nZXQoKSwgbV9pbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/
IEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQgOiBCaXRtYXBUZXh0dXJlOjpCR1JGb3JtYXQpOwor
ICAgIHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIG1faW1hZ2UuZ2V0KCkpOwogICAgIG1f
aW1hZ2UuY2xlYXIoKTsKIH0KIApAQCAtMTM0LDExICsxMzQsMTEgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZU9yRGVzdHJveVRpbGVzSWZOZWVkZWQoY29uc3Qg
RmxvYXRTaXoKICAgICAgICAgbV90aWxlcy5yZW1vdmUodGlsZUluZGljZXNUb1JlbW92ZVtpXSk7
CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVDb250ZW50
cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdG90YWxTaXplLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIEJpdG1hcFRleHR1cmU6
OlBpeGVsRm9ybWF0IGZvcm1hdCkKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3Jl
Ojp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1h
Z2UsIGNvbnN0IEZsb2F0U2l6ZSYgdG90YWxTaXplLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
CiB7CiAgICAgY3JlYXRlT3JEZXN0cm95VGlsZXNJZk5lZWRlZCh0b3RhbFNpemUsIHRleHR1cmVN
YXBwZXItPm1heFRleHR1cmVTaXplKCksIGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IG1fdGlsZXNbaV0udXBkYXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgaW1hZ2UsIGRpcnR5UmVj
dCwgZm9ybWF0KTsKKyAgICAgICAgbV90aWxlc1tpXS51cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFw
cGVyLCBpbWFnZSwgZGlydHlSZWN0KTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBU
ZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKaW5kZXggMDJlODRmMjMzNjRjYjlmMGJiOGE5NjA4
NjczZmY1NjFkNjk1NThiZi4uZGY2MWI4NjI2MjRhMDc4MDJlY2I1OTIwZDkzMWYxNzM1YTc4NzEy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCkBAIC00NSw3ICs0NSw3
IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCBzZXRUZXh0dXJlKEJpdG1hcFRleHR1cmUqIHRl
eHR1cmUpIHsgbV90ZXh0dXJlID0gdGV4dHVyZTsgfQogICAgIGlubGluZSB2b2lkIHNldFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fcmVjdCA9IHJlY3Q7IH0KIAotICAgIHZvaWQgdXBk
YXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEltYWdlKiwgY29uc3QgSW50UmVjdCYsIEJpdG1h
cFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1cmVN
YXBwZXIqLCBJbWFnZSosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
VGV4dHVyZU1hcHBlciosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1h
cFRleHR1cmUqKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyVGlsZSgpIHsgfQogCkBAIC02
NSw4ICs2NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyVGlsZWRCYWNr
aW5nU3RvcmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4
dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVy
ZU1hcHBlciosIEltYWdlKiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW50UmVjdCYsIEJpdG1h
cFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgQml0bWFwVGV4dHVyZTo6UGl4ZWxG
b3JtYXQgZm9ybWF0KSB7IHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLCBpbWFn
ZS0+c2l6ZSgpLCBpbWFnZS0+cmVjdCgpLCBmb3JtYXQpOyB9CisgICAgdm9pZCB1cGRhdGVDb250
ZW50cyhUZXh0dXJlTWFwcGVyKiwgSW1hZ2UqLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdm9pZCB1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyLCBJbWFnZSogaW1hZ2UpIHsgdXBkYXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgaW1hZ2Us
IGltYWdlLT5zaXplKCksIGltYWdlLT5yZWN0KCkpOyB9CiAgICAgaW5saW5lIEZsb2F0UmVjdCBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbV9zaXpl
KTsgfQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9y
ZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tp
bmdTdG9yZSk7IH0KICAgICB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpIHsg
bV9pbWFnZSA9IGltYWdlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGJhNDlmYjI4MjBj
NGZlM2JkZWVlY2RjNjRlOTgxMWE2MGZkOTU3MzYuLjk1OTg1OTBkYmFhMDFhYzc0ZmQzNWQyN2M2
MDFiM2NiNjA2YWUxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC00MDksMTIgKzQwOSwx
MyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGlkUmVzZXQoKQogICAgIG1fc3VyZmFjZU5lZWRz
UmVzZXQgPSB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBzd2l6emxlQkdSQVRvUkdCQSh1aW50MzJf
dCogZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3N0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9S
R0JBKHVpbnQzMl90KiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBpbnQgc3RyaWRlID0gMCkK
IHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IGhlaWdodCA9IHNpemUu
aGVpZ2h0KCk7CisgICAgc3RyaWRlID0gc3RyaWRlIHwgd2lkdGg7CiAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotICAgICAgICB1aW50MzJfdCogcCA9IGRhdGEgKyB5ICog
d2lkdGg7CisgICAgICAgIHVpbnQzMl90KiBwID0gZGF0YSArIHkgKiBzdHJpZGU7CiAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkKICAgICAgICAgICAgIHBbeF0gPSAoKHBb
eF0gPDwgMTYpICYgMHhmZjAwMDApIHwgKChwW3hdID4+IDE2KSAmIDB4ZmYpIHwgKHBbeF0gJiAw
eGZmMDBmZjAwKTsKICAgICB9CkBAIC00MzAsMzMgKzQzMSw2NCBAQCBzdGF0aWMgYm9vbCBkcml2
ZXJTdXBwb3J0c0JHUkFTd2l6emxpbmcoKQogI2VuZGlmCiB9CiAKLXZvaWQgQml0bWFwVGV4dHVy
ZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJn
ZXRSZWN0KQorc3RhdGljIGJvb2wgZHJpdmVyU3VwcG9ydHNTdWJJbWFnZSgpCit7CisjaWYgZGVm
aW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCisgICAgLy8gRklYTUU6IEltcGxlbWVudCByZWxpYWJs
ZSBkZXRlY3Rpb24uCisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsK
KyNlbmRpZgorfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qg
dm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNv
dXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSkKIHsKICAgICBHTHVpbnQgZ2xGb3JtYXQgPSBH
TF9SR0JBOwogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQor
CiAgICAgaWYgKGRyaXZlclN1cHBvcnRzQkdSQVN3aXp6bGluZygpKQogICAgICAgICBnbEZvcm1h
dCA9IEdMX0JHUkE7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN3aXp6bGVCR1JBVG9SR0JBKHN0YXRp
Y19jYXN0PHVpbnQzMl90Kj4oY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpLCB0YXJnZXRSZWN0LnNp
emUoKSk7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCQTsKKyAgICBlbHNlCisgICAgICAgIHN3
aXp6bGVCR1JBVG9SR0JBKHN0YXRpY19jYXN0PHVpbnQzMl90Kj4oY29uc3RfY2FzdDx2b2lkKj4o
ZGF0YSkpLCB0YXJnZXRSZWN0LnNpemUoKSwgYnl0ZXNQZXJMaW5lIC8gNCk7CisKKyAgICBpZiAo
Ynl0ZXNQZXJMaW5lID09IHRhcmdldFJlY3Qud2lkdGgoKSAvIDQgJiYgc291cmNlT2Zmc2V0ID09
IEludFBvaW50Ojp6ZXJvKCkpIHsKKyAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qu
d2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUs
IChjb25zdCBjaGFyKilkYXRhKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZv
ciBFUyBkcml2ZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBzdWItaW1hYWdlcywgdHJhbnNmZXIgdGhl
IHBpeGVscyByb3ctYnktcm93LgorICAgIGlmICghZHJpdmVyU3VwcG9ydHNTdWJJbWFnZSgpKSB7
CisgICAgICAgIGNvbnN0IGNoYXIqIGJpdHMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0
YSk7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgdGFyZ2V0UmVjdC5oZWlnaHQoKTsgKyt5
KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpyb3cgPSBiaXRzICsgKChzb3VyY2VPZmZzZXQu
eSgpICsgeSkgKiBieXRlc1BlckxpbmUgKyBzb3VyY2VPZmZzZXQueCgpICogNCk7CisgICAgICAg
ICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3Qu
eCgpLCB0YXJnZXRSZWN0LnkoKSArIHksIHRhcmdldFJlY3Qud2lkdGgoKSwgMSwgZ2xGb3JtYXQs
IEdMX1VOU0lHTkVEX0JZVEUsIHJvdykpCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0
UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3Qu
aGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBkYXRhKSkKKyAgICAvLyBVc2Ug
dGhlIE9wZW5HTCBzdWItaW1hZ2UgZXh0ZW5zaW9uLCBub3cgdGhhdCB3ZSBrbm93IGl0J3MgYXZh
aWxhYmxlLgorICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVy
TGluZSAvIDQpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNl
T2Zmc2V0LnkoKSk7CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIHNv
dXJjZU9mZnNldC54KCkpOworICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCks
IHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAoY29uc3Qg
Y2hhciopZGF0YSkpCisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7
CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAwKTsKKyAgICBnbFBpeGVs
U3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCk7CiB9CiAKLXZvaWQgQml0bWFwVGV4dHVy
ZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0
IGZvcm1hdCkKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1h
Z2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7
CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIEdMX0NNRChnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQotICAgIEdMdWludCBnbEZvcm1hdCA9IGlzT3BhcXVl
KCkgPyBHTF9SR0IgOiBHTF9SR0JBOwogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2UgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIWZyYW1lSW1hZ2Up
CiAgICAgICAgIHJldHVybjsKIAorICAgIGludCBieXRlc1BlckxpbmU7CisgICAgY29uc3QgY2hh
ciogaW1hZ2VEYXRhOworCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgUUltYWdlIHF0SW1hZ2U7Ci0K
ICNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkKICAgICAvLyBXaXRo
IFFQQSwgd2UgY2FuIGF2b2lkIGEgZGVlcCBjb3B5LgogICAgIHF0SW1hZ2UgPSAqZnJhbWVJbWFn
ZS0+aGFuZGxlKCktPmJ1ZmZlcigpOwpAQCAtNDY0LDQwICs0OTYsMTUgQEAgdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFy
Z2V0UmVjdCwgY28KICAgICAvLyBUaGlzIG1pZ2h0IGJlIGEgZGVlcCBjb3B5LCBkZXBlbmRpbmcg
b24gb3RoZXIgcmVmZXJlbmNlcyB0byB0aGUgcGl4bWFwLgogICAgIHF0SW1hZ2UgPSBmcmFtZUlt
YWdlLT50b0ltYWdlKCk7CiAjZW5kaWYKLQotICAgIGlmIChJbnRTaXplKHF0SW1hZ2Uuc2l6ZSgp
KSAhPSBzb3VyY2VSZWN0LnNpemUoKSkKLSAgICAgICAgcXRJbWFnZSA9IHF0SW1hZ2UuY29weShz
b3VyY2VSZWN0KTsKLSAgICBpZiAoZm9ybWF0ID09IEJHUkFGb3JtYXQgfHwgZm9ybWF0ID09IEJH
UkZvcm1hdCkgewotICAgICAgICBpZiAoZHJpdmVyU3VwcG9ydHNCR1JBU3dpenpsaW5nKCkpCi0g
ICAgICAgICAgICBnbEZvcm1hdCA9IGlzT3BhcXVlKCkgPyBHTF9CR1IgOiBHTF9CR1JBOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzd2l6emxlQkdSQVRvUkdCQShyZWludGVycHJldF9jYXN0
PHVpbnQzMl90Kj4ocXRJbWFnZS5iaXRzKCkpLCBxdEltYWdlLnNpemUoKSk7Ci0gICAgfQotICAg
IEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCks
IHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCks
IGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBxdEltYWdlLmNvbnN0Qml0cygpKSkKLQorICAg
IGltYWdlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHF0SW1hZ2UuY29uc3RC
aXRzKCkpOworICAgIGJ5dGVzUGVyTGluZT0gcXRJbWFnZS5ieXRlc1BlckxpbmUoKTsKICNlbGlm
IFVTRShDQUlSTykKLQotI2lmICFDUFUoQklHX0VORElBTikKLSNpZiBkZWZpbmVkKFRFWE1BUF9P
UEVOR0xfRVNfMikKLSAgICBzd2l6emxlQkdSQVRvUkdCQShyZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShmcmFtZUltYWdlKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGZyYW1lSW1hZ2Up
ICogY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGZyYW1lSW1hZ2UpKTsKLSNlbHNlCi0g
ICAgZ2xGb3JtYXQgPSBpc09wYXF1ZSgpID8gR0xfQkdSIDogR0xfQkdSQTsKLSNlbmRpZgorICAg
IGltYWdlRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoZnJhbWVJbWFnZSk7Cisg
ICAgYnl0ZXNQZXJMaW5lID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGZyYW1lSW1h
Z2UpOwogI2VuZGlmCiAKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoZnJhbWVJbWFnZSkgLyA0KTsKLSAgICBnbFBp
eGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIHNvdXJjZVJlY3QueSgpKTsKLSAgICBnbFBp
eGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgc291cmNlUmVjdC54KCkpOwotICAgIEdM
X0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShmcmFt
ZUltYWdlKSkpOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIDApOwot
ICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgMCk7Ci0gICAgZ2xQaXhlbFN0
b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIDApOwotI2VuZGlmCisgICAgdXBkYXRlQ29udGVu
dHMoaW1hZ2VEYXRhLCB0YXJnZXRSZWN0LCBvZmZzZXQsIGJ5dGVzUGVyTGluZSk7CisKIH0KIAog
c3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9qZWN0aW9uTWF0cml4
KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgZmxpcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCA1
NDdmZTJmOGIxNzc2ZTY3NzBlY2M3NjYyZWFmZjBhYjQwMjI5ZGQyLi5iNmM2ZTQyY2NiMzg4YWRk
Y2EyZDk5ZGY1ZWZkNjhjOGRiODZhYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCkBAIC02Miw3ICs2
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpIHsgbV9jb250ZXh0ID0gY29udGV4dDsgfQogICAgIEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgdmlydHVhbCBi
b29sIGlzT3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgcGxh
dGZvcm1VcGRhdGVDb250ZW50cyhOYXRpdmVJbWFnZVB0ciwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFJlY3QmLCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCk7CisgICAgdm9pZCBwbGF0Zm9y
bVVwZGF0ZUNvbnRlbnRzKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgQWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkg
Y29uc3QgeyByZXR1cm4gT3BlbkdMTW9kZTsgfQogCiBwcml2YXRlOgpAQCAtODMsMTAgKzgzLDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVTdGVuY2lsKCk7CiAgICAgfkJpdG1hcFRl
eHR1cmVHTCgpOwogICAgIHZpcnR1YWwgdWludDMyX3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lk
OyB9CisgICAgdWludDMyX3QgdGV4dHVyZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIEdMX1RFWFRV
UkVfMkQ7IH0KICAgICBJbnRTaXplIHRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0
dXJlU2l6ZTsgfQogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRl
eG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KLSAgICB2b2lkIHVwZGF0ZUNvbnRl
bnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1hdCk7
Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNv
bnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5
dGVzUGVyTGluZSk7CiAKIHByaXZhdGU6CiAgICAgR0x1aW50IG1faWQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCmluZGV4IGU1M2I5ZjhkNmMwZDA3OGZmMzAyNjExMWFm
YjM4ZmMwZGFmMTM2ZDMuLjRjMjgxNzdkMDQ0YjE1NjdjOTE4YzdmMjYwMDFhYTk0NWYwODJlNjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCkBAIC0yNSwxNCArMjUs
MTUgQEAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBk
YXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQordm9pZCBCaXRtYXBUZXh0dXJlSW1hZ2VC
dWZmZXI6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUp
CiB7CiAjaWYgUExBVEZPUk0oUVQpCi0gICAgUUltYWdlIGltYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWNoYXIqPihkYXRhKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdo
dCgpLCB0YXJnZXRSZWN0LndpZHRoKCkgKiA0LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVs
dGlwbGllZCk7CisgICAgUUltYWdlIGltYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWNoYXIq
PihkYXRhKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBieXRlc1Bl
ckxpbmUsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKwogICAgIFFQYWlu
dGVyKiBwYWludGVyID0gbV9pbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKICAg
ICBwYWludGVyLT5zYXZlKCk7CiAgICAgcGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWlu
dGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICBwYWludGVyLT5kcmF3SW1hZ2UodGFy
Z2V0UmVjdCwgaW1hZ2UpOworICAgIHBhaW50ZXItPmRyYXdJbWFnZSh0YXJnZXRSZWN0LCBpbWFn
ZSwgSW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6ZSgpKSk7CiAgICAgcGFpbnRl
ci0+cmVzdG9yZSgpOwogI2VuZGlmCiB9CkBAIC00Miw5ICs0Myw5IEBAIHZvaWQgQml0bWFwVGV4
dHVyZUltYWdlQnVmZmVyOjpkaWRSZXNldCgpCiAgICAgbV9pbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoY29udGVudFNpemUoKSk7CiB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVy
Ojp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIFBpeGVsRm9ybWF0KQordm9pZCBCaXRtYXBUZXh0
dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKIHsKLSAgICBtX2ltYWdlLT5j
b250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgdGFyZ2V0UmVj
dCwgc291cmNlUmVjdCwgQ29tcG9zaXRlQ29weSk7CisgICAgbV9pbWFnZS0+Y29udGV4dCgpLT5k
cmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHRhcmdldFJlY3QsIEludFJlY3Qo
b2Zmc2V0LCB0YXJnZXRSZWN0LnNpemUoKSksIENvbXBvc2l0ZUNvcHkpOwogfQogCiB2b2lkIFRl
eHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
SW1hZ2VCdWZmZXIuaAppbmRleCAyODI2YzRiOTYwZWFlMTZjZjAyYzgzNzkwYTc1NmQ0ZWFiZTVi
ZDI5Li4zN2M5OGFiOGU5Yjg1MTZhZjAwNDQxMWQzZjc0Yjk5ZDllMTlmMTYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlcklt
YWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCkBAIC0zNCw4ICszNCw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVzZXQoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KICAgICBpbmxpbmUgR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQoKSB7IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS0+Y29udGV4dCgpIDogMDsg
fQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBJbnRSZWN0JiwgUGl4ZWxGb3JtYXQpOwotICAgIHZvaWQgdXBkYXRlQ29udGVudHMo
Y29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCk7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBv
aW50Jik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25z
dCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRl
c1BlckxpbmUpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB2b2lkIGFwcGx5RmlsdGVy
cyhjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCmluZGV4IDIzNzk3ZTYzYjU0NDQ3NjRmZTgxZGFj
MmVkNDM0MDQ5NjU1MDY5ZDIuLmRiNTk4MDc5YzU2Y2Y5N2I5MGRhYWE1OWZmMjBiYWZkNDY1OTFj
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyKiB0
ZXh0dXJlTWFwcGVyLCBHcmFwaGkKICAgICBpbWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2Uo
Q29weUJhY2tpbmdTdG9yZSk7CiAjZW5kaWYKIAotICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBw
ZXJUaWxlZEJhY2tpbmdTdG9yZSo+KG1fYmFja2luZ1N0b3JlLmdldCgpKS0+dXBkYXRlQ29udGVu
dHModGV4dHVyZU1hcHBlciwgaW1hZ2UuZ2V0KCksIG1fc2l6ZSwgZGlydHlSZWN0LCBCaXRtYXBU
ZXh0dXJlOjpCR1JBRm9ybWF0KTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmUqPihtX2JhY2tpbmdTdG9yZS5nZXQoKSktPnVwZGF0ZUNvbnRlbnRzKHRleHR1
cmVNYXBwZXIsIGltYWdlLmdldCgpLCBtX3NpemUsIGRpcnR5UmVjdCk7CiB9CiAKIHZvaWQgVGV4
dHVyZU1hcHBlckxheWVyOjpwYWludCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvU2hhcmVhYmxlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVC
aXRtYXAuY3BwCmluZGV4IGNkZTNhYTE2NTczMDYwYjBhOGJlYzM2NTRiMGJlYzQzYzJmZDQwMTcu
LjdkZTE1MWViMjY4MDgwMTE3ZmMwMjY1MmFhM2JhOTc1M2Y3YjA3MTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCkBAIC0xMjUsNiArMTI1LDE0IEBAIFNoYXJl
YWJsZUJpdG1hcDo6U2hhcmVhYmxlQml0bWFwKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZs
YWdzLCBQYXNzUmVmUHRyPFNoCiB7CiB9CiAKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBo
aWNzQ29udGV4dCA9IGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGdyYXBoaWNzQ29udGV4
dC0+Y2xpcChyZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZShyZWN0LngoKSwg
cmVjdC55KCkpOworICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworfQorCiBT
aGFyZWFibGVCaXRtYXA6On5TaGFyZWFibGVCaXRtYXAoKQogewogICAgIGlmICghaXNCYWNrZWRC
eVNoYXJlZE1lbW9yeSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJl
YWJsZUJpdG1hcC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCmlu
ZGV4IGU1ZDFhNmRjOTEyYTYxM2M3YzFhYjEyOGM1ZDVhYWVlYjAzY2ExMmEuLmYzY2QyMTNlMzQx
Yzk4NGJiNmE1OGNjYWE5MmE0MDlmYzBjMzgwZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hh
cmVhYmxlQml0bWFwLmgKQEAgLTEwNiw2ICsxMDYsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDcmVh
dGUgYSBncmFwaGljcyBjb250ZXh0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcGFpbnQgaW50byB0aGUg
YmFja2luZyBzdG9yZS4KICAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4g
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ+IGNyZWF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CiAKICAgICAvLyBQYWludCB0aGUgYmFja2luZyBzdG9yZSBpbnRvIHRoZSBnaXZlbiBjb250ZXh0
LgogICAgIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzb3VyY2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uY3BwCmluZGV4IGExNWQ3MTZiMTNmMzY2NTNj
NGJlMDg1NDY1Y2M1MzRiZDgwZmQxMjkuLjViYjE4OTU5N2JiMDljMzEyZjZhZTQ3Zjc3NmQ3OTVj
ZjMyOTIxZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5jcHAKQEAgLTQwLDYgKzQw
LDcgQEAgdm9pZCBVcGRhdGVJbmZvOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBl
bmNvZGVyKSBjb25zdAogICAgIGVuY29kZXItPmVuY29kZSh1cGRhdGVSZWN0cyk7CiAgICAgZW5j
b2Rlci0+ZW5jb2RlKHVwZGF0ZVNjYWxlRmFjdG9yKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoYml0
bWFwSGFuZGxlKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoYml0bWFwT2Zmc2V0KTsKIH0KIAogYm9v
bCBVcGRhdGVJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBV
cGRhdGVJbmZvJiByZXN1bHQpCkBAIC02MCw2ICs2MSw4IEBAIGJvb2wgVXBkYXRlSW5mbzo6ZGVj
b2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgVXBkYXRlSW5mbyYgcmVzdWx0
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0
LmJpdG1hcEhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShyZXN1bHQuYml0bWFwT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBk
YXRlSW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uaAppbmRleCA0MGM4
NmRjNWQzZWZhMDNjYjZhNGFjZjExNzY5NWM2YjUxMzUzN2I5Li5lM2E4ZGUyNzg0NzVlOTRjNGNl
MGIwYzQ1YzE5MjcyODY3NDhkY2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
VXBkYXRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmgKQEAg
LTY1LDYgKzY1LDkgQEAgcHVibGljOgogCiAgICAgLy8gVGhlIGhhbmRsZSBvZiB0aGUgc2hhcmVh
YmxlIGJpdG1hcCBjb250YWluaW5nIHRoZSB1cGRhdGVzLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUg
YXJlIG5vIHVwZGF0ZXMuCiAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgYml0bWFwSGFuZGxl
OworCisgICAgLy8gVGhlIG9mZnNldCBpbiB0aGUgYml0bWFwIHdoZXJlIHRoZSByZW5kZXJlZCBj
b250ZW50cyBhcmUuCisgICAgV2ViQ29yZTo6SW50UG9pbnQgYml0bWFwT2Zmc2V0OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCAwZGI5ODU5ZjAwYmE1MGQyYmIx
MWU0YzViNzNkNjMxMTlkMmEzN2NiLi41MGJjMTUwOWZjODZjZGZhNWY4ZjZhNzkzY2YyOGJmYThi
OGQ4YThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTM2Myw2ICszNjMsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L1BhZ2VPdmVybGF5LmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuaCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZyYW1lLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3IuaCBcCkBAIC0zNzAsNiArMzcxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFBy
b3h5LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5oIFwKKyAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmggXAogICAgIFdlYlByb2Nlc3MvV2Vi
Q29ubmVjdGlvblRvVUlQcm9jZXNzLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIFwK
ICAgICBXZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZS5oIFwKQEAgLTcyOSw2ICs3MzEsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwIFwKKyAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
QmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29u
dGV4dE1lbnUuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKaW5kZXgg
YzJmNjE2MDI5NmIwMDczODliZWI4NTM0N2FmMzdmNGM3MzBjMmEyNC4uYWI2MjAyOTkzODRmMDk0
ZmI4NDQzODQ0NzYzMWRkNWMwZmRmZmYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwg
Y29uc3QgV2ViS2kKICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB1cGRhdGVJbmZvLnVwZGF0ZVJl
Y3RzLmZpcnN0KCk7CiAgICAgSW50UmVjdCB0YXJnZXRSZWN0ID0gdXBkYXRlSW5mby51cGRhdGVS
ZWN0Qm91bmRzOwogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlKHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKTsKLSAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSwgbV9yZW5kZXJlci5n
ZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRtYXApKTsK
KyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGls
ZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBXZWJMYXllclRyZWVSZW5kZXJl
cjo6VGlsZVVwZGF0ZShzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRtYXAsIHVwZGF0ZUluZm8u
Yml0bWFwT2Zmc2V0KSkpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGls
ZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKaW5kZXggN2UzMjczNjcwODYyZThl
MjQzYWVjZjk5YjZkYmQ5M2NhOWZiZjgwNy4uMDEyODlkNmFhZjA4ZGFlYWNkMTk0NGIwYjMxNzhi
MWUzMjgzMzZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVy
VHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJU
cmVlUmVuZGVyZXIuY3BwCkBAIC0yOTMsMTEgKzI5MywxMCBAQCB2b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKICAgICBn
ZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPnJlbW92ZVRpbGUodGlsZUlEKTsKIH0KIAotdm9pZCBX
ZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFwKQordm9pZCBXZWJMYXll
clRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKIHsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBiaXRtYXAgPSB3ZWFrQml0bWFwOwogICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpOwotICAgIGJhY2tpbmdTdG9yZS0+
dXBkYXRlVGlsZSh0aWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGJpdG1hcC5nZXQoKSk7
CisgICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwgdXBkYXRlLnNvdXJjZVJlY3Qs
IHVwZGF0ZS50YXJnZXRSZWN0LCB1cGRhdGUuYml0bWFwLCB1cGRhdGUub2Zmc2V0KTsKICAgICBt
X2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAK
QEAgLTMwNSw4ICszMDQsOCBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFn
ZShpbnQ2NF90IGltYWdlSUQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bQogewogICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7CiAgICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclRp
bGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZUNvbnRl
bnRzKG1fdGV4dHVyZU1hcHBlci5nZXQoKSwgYml0bWFwLT5jcmVhdGVJbWFnZSgpLmdldCgpLCBC
aXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0KTsKICAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5zZXQoaW1hZ2VJRCwgYmFja2luZ1N0b3JlKTsKKyAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZUNv
bnRlbnRzKG1fdGV4dHVyZU1hcHBlci5nZXQoKSwgYml0bWFwLT5jcmVhdGVJbWFnZSgpLmdldCgp
KTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUltYWdlKGludDY0X3Qg
aW1hZ2VJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRy
ZWVSZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRl
cmVyLmgKaW5kZXggYTdmOGFjZGFhYzI1NGYyOWI4MTIxMzc0OTcwODY5MDhiYzFiNTk2My4uOTJk
Y2U1OWU4MWRiZmU2NzZkMWIzYzNiYTliOTYyYzM1MzZlMjMwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTQ1LDYgKzQ1LDE5IEBA
IGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKIAogY2xhc3MgV2ViTGF5ZXJUcmVlUmVuZGVyZXIg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+LCBwdWJs
aWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6CisgICAgc3RydWN0IFRp
bGVVcGRhdGUgeworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHNvdXJjZVJlY3Q7CisgICAgICAg
IFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdDsKKyAgICAgICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYml0bWFwOworICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBvZmZzZXQ7CisgICAgICAg
IFRpbGVVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB0YXJnZXQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBuZXdCaXRtYXAs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBuZXdPZmZzZXQpCisgICAgICAgICAgICA6IHNvdXJj
ZVJlY3Qoc291cmNlKQorICAgICAgICAgICAgLCB0YXJnZXRSZWN0KHRhcmdldCkKKyAgICAgICAg
ICAgICwgYml0bWFwKG5ld0JpdG1hcCkKKyAgICAgICAgICAgICwgb2Zmc2V0KG5ld09mZnNldCkK
KyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKICAgICBXZWJMYXllclRyZWVSZW5kZXJlcihM
YXllclRyZWVIb3N0UHJveHkqKTsKICAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVSZW5kZXJlcigp
OwogICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOwpAQCAtNjIsNyArNzUsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYpOwogICAg
IHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGZsb2F0IHNjYWxlKTsKICAgICB2b2lk
IHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50KTsKLSAgICB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5
ZXJJRCwgaW50LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPik7CisgICAgdm9pZCB1cGRhdGVUaWxlKFdl
YkxheWVySUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZvaWQgZmx1c2hMYXllckNo
YW5nZXMoKTsKICAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPik7CiAgICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50NjRfdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcAppbmRleCAzZjhh
OGM4OTIyMWFkODQ5MjJiYzUzNzI0YTI3ZmJkYzY4MjlhMzI3Li5mZWUwYzkwNjIyMGY0MThkYTUz
ZDFiMWM0YjMzZWYzYTgxZjUwMDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAKQEAgLTIzLDggKzIzLDcgQEAKICNpZiBVU0UoVUlf
U0lERV9DT01QT1NJVElORykKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlci5oIgotCi0jaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyR0wuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTUwLDE4ICs0OSwx
NyBAQCB2b2lkIExheWVyQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKICAgICB9CiAKICAgICBRSW1hZ2UgcUltYWdlID0g
bV9iYWNrQnVmZmVyLT5jcmVhdGVRSW1hZ2UoKTsKLQogICAgIGlmIChzaG91bGRSZXNldCkKICAg
ICAgICAgdGV4dHVyZS0+cmVzZXQobV9zb3VyY2VSZWN0LnNpemUoKSwgcUltYWdlLmhhc0FscGhh
Q2hhbm5lbCgpID8gQml0bWFwVGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6IDApOwotCi0gICAgdGV4
dHVyZS0+dXBkYXRlQ29udGVudHMocUltYWdlLmNvbnN0Qml0cygpLCBtX3NvdXJjZVJlY3QpOwor
ICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHFJbWFnZS5jb25zdEJpdHMoKSwgbV9zb3VyY2VS
ZWN0LCBtX2JpdG1hcE9mZnNldCwgcUltYWdlLmJ5dGVzUGVyTGluZSgpKTsKICAgICBtX2JhY2tC
dWZmZXIuY2xlYXIoKTsKIH0KIAotdm9pZCBMYXllckJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tC
dWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgc291cmNlUmVjdCwgU2hhcmVhYmxlQml0bWFwKiBidWZmZXIpCit2b2lkIExheWVy
QmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
YnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIG1fc291cmNlUmVjdCA9IHNv
dXJjZVJlY3Q7CiAgICAgbV90YXJnZXRSZWN0ID0gdGFyZ2V0UmVjdDsKKyAgICBtX2JpdG1hcE9m
ZnNldCA9IG9mZnNldDsKICAgICBtX2JhY2tCdWZmZXIgPSBidWZmZXI7CiB9CiAKQEAgLTc2LDEx
ICs3NCwxMiBAQCB2b2lkIExheWVyQmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKGludCBpZCkKICAg
ICBtX3RpbGVzVG9SZW1vdmUuYXBwZW5kKGlkKTsKIH0KIAotdm9pZCBMYXllckJhY2tpbmdTdG9y
ZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIFNoYXJlYWJsZUJpdG1hcCogYmFja0J1ZmZlcikKKwordm9pZCBM
YXllckJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBiYWNrQnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIEhhc2hNYXA8
aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZChp
ZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fdGlsZXMuZW5kKCkpOwotICAgIGl0LT5zZWNvbmQuc2V0
QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyKTsKKyAgICBpdC0+
c2Vjb25kLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwg
b2Zmc2V0KTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBMYXllckJhY2tpbmdTdG9y
ZTo6dGV4dHVyZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvTGF5ZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXll
ckJhY2tpbmdTdG9yZS5oCmluZGV4IGYwOGIxNDQ4N2UwZGQyNmE2ZTYyMjYwYWI1NTA1OTE1YTcz
ZTMzZTcuLmEyNDFlNGMxN2QwZWMwYTI1NTg4YmY4ZGZhYjA3ZDAyYWMzZDcyMTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oCkBAIC0zOSwx
MiArMzksMTMgQEAgcHVibGljOgogCiAgICAgaW5saW5lIGZsb2F0IHNjYWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY2FsZTsgfQogICAgIHZvaWQgc3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlciopOwotICAgIHZvaWQgc2V0QmFja0J1ZmZlcihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFNoYXJlYWJsZUJpdG1hcCogYnVmZmVyKTsKKyAgICB2
b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYnVmZmVyLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IG1fYmFja0J1ZmZlcjsKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc291cmNlUmVjdDsKICAgICBX
ZWJDb3JlOjpJbnRSZWN0IG1fdGFyZ2V0UmVjdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2Jp
dG1hcE9mZnNldDsKICAgICBmbG9hdCBtX3NjYWxlOwogfTsKIApAQCAtNTIsNyArNTMsNyBAQCBj
bGFzcyBMYXllckJhY2tpbmdTdG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZVRpbGUoaW50LCBmbG9hdCk7CiAg
ICAgdm9pZCByZW1vdmVUaWxlKGludCk7Ci0gICAgdm9pZCB1cGRhdGVUaWxlKGludCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBTaGFyZWFibGVCaXRt
YXAqKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUoaW50LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiwgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllckJhY2tp
bmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyQmFja2luZ1N0b3Jl
KTsgfQogICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ciopOwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKaW5kZXggMGY2ZjgxM2Q4OTA5YjQwNmYwZGM5
ZjhiODUxY2YzZDZhYzEyYWYwYS4uZGFjNDAzNTQxMGM0MzA2OGY0MjNkODBlYTk1OTAxMDlmNmFh
YWU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCkBAIC01NjIsOCArNTYyLDEzIEBAIElu
dFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpCiBD
b2xvciBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hpdGUgOiBD
b2xvcjo6dHJhbnNwYXJlbnQ7Cit9CiAKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiBXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6
SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICByZXR1cm4gbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50
LT5iZWdpbkNvbnRlbnRVcGRhdGUoc2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IDAgOiBTaGFyZWFi
bGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEsIGhhbmRsZSwgb2Zmc2V0KTsKIH0KKwogdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCiB7CiAgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5jcmVhdGVUaWxlKGlk
KCksIHRpbGVJRCwgdXBkYXRlSW5mbyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCmluZGV4IDU0M2M0
NjUwY2E4OTlhZDA3NjZmYmFhYmQ5YTY3OGM4N2E1MTkxMmUuLjQ1NDg2Y2RmYTM0NDE3MzkyNjRl
YjhmMWM2YjkwNjg1MTJiYTJkYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCkBAIC01OCw2ICs1
OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFj
aExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IGRldGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAgdmlydHVh
bCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOwogfTsKIH0KIApAQCAt
MTMyLDYgKzEzMyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQg
dGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJ
bnRQb2ludCYpOwogCiAgICAgdm9pZCBzZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KFdlYktpdDo6
V2ViR3JhcGhpY3NMYXllckNsaWVudCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUu
Y3BwCmluZGV4IGVlMTE2YzJlOWI0ZWYzYzcwOGVmMGU2MjhmN2FhMzQxMWVlMjU3ZGMuLmFlYjZl
YmNiYmI1OGM0YTc0MDUzZWM4NTc4MGFjM2YwMjJmZGViZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9y
ZVJlbW90ZVRpbGUuY3BwCkBAIC03MiwxOSArNzIsMjAgQEAgVmVjdG9yPEludFJlY3Q+IFRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6dXBkYXRlQmFja0J1ZmZlcigpCiAgICAgaWYgKCFpc0Rp
cnR5KCkpCiAgICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKIAotICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxl
KG1fZGlydHlSZWN0LnNpemUoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+c3VwcG9ydHNBbHBoYSgp
ID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCk7Ci0gICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0KGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCkpOworICAgIFVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX2NsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKG1fZGly
dHlSZWN0LnNpemUoKSwgdXBkYXRlSW5mby5iaXRtYXBIYW5kbGUsIHVwZGF0ZUluZm8uYml0bWFw
T2Zmc2V0KTsKKyAgICBpZiAoIWdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIFZlY3Rv
cjxJbnRSZWN0PigpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1tX2RpcnR5UmVj
dC54KCksIC1tX2RpcnR5UmVjdC55KCkpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxv
YXRTaXplKG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSwgbV90aWxlZEJhY2tp
bmdTdG9yZS0+Y29udGVudHNTY2FsZSgpKSk7CiAgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+Y2xp
ZW50KCktPnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoZ3JhcGhpY3NDb250ZXh0LmdldCgpLCBtX3Rp
bGVkQmFja2luZ1N0b3JlLT5tYXBUb0NvbnRlbnRzKG1fZGlydHlSZWN0KSk7CiAKLSAgICBVcGRh
dGVJbmZvIHVwZGF0ZUluZm87CiAgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzID0gbV9y
ZWN0OwogICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IG1fZGlydHlSZWN0OwogICAgIHVwZGF0ZVJl
Y3QubW92ZSgtbV9yZWN0LngoKSwgLW1fcmVjdC55KCkpOwogICAgIHVwZGF0ZUluZm8udXBkYXRl
UmVjdHMuYXBwZW5kKHVwZGF0ZVJlY3QpOwogICAgIHVwZGF0ZUluZm8udXBkYXRlU2NhbGVGYWN0
b3IgPSBtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCk7Ci0gICAgYml0bWFwLT5j
cmVhdGVIYW5kbGUodXBkYXRlSW5mby5iaXRtYXBIYW5kbGUpOworICAgIGdyYXBoaWNzQ29udGV4
dC5yZWxlYXNlKCk7CiAKICAgICBzdGF0aWMgaW50IGlkID0gMDsKICAgICBpZiAoIW1fSUQpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9U
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaAppbmRleCAxMmIyZTA2MDJiNGJlMDJjMWU5NGY4
ZmQwOGIyODMxZDcxODk1YmYzLi5kZmMyNTJlNjkwMjYwNmI3NzdiYjA1OTY2YWJkNWM0ODFhYjQ4
YWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKIAorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1h
cC5oIgogI2luY2x1ZGUgIlRpbGUuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgog
I2luY2x1ZGUgIldlYkNvcmUvSW50UmVjdC5oIgpAQCAtNzgsNiArNzksNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRh
dGVJbmZvJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpID0g
MDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdp
bkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7CiB9OwogCiBjbGFzcyBUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kIDogcHVibGljIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0
b3JlQmFja2VuZCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvVXBkYXRlQXRsYXMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Vw
ZGF0ZUF0bGFzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NWUyNTkxNDE2NjJmMDIzZmQ4ZDc0M2JkMDIxMzYw
ZDJjNjQ4ZjcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJV
cGRhdGVBdGxhcy5oIgorCisjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTWF0
aEV4dHJhcy5oIgordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0
bWFwOjpGbGFncyBmbGFncykKKyAgICA6IG1fZmxhZ3MoZmxhZ3MpCit7CisgICAgbV9iaXRtYXAg
PSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKGRpbWVuc2lvbiwgZGlt
ZW5zaW9uKSwgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG5leHRQb3dlck9mVHdvKGludCBudW1i
ZXIpCit7CisgICAgLy8gVGhpcyBpcyBhIGZhc3QgdHJpY2sgdG8gZ2V0IG5leHRQb3dlck9mVHdv
IGZvciBhbiBpbnRlZ2VyLgorICAgIC0tbnVtYmVyOworICAgIG51bWJlciB8PSBudW1iZXIgPj4g
MTsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDI7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiA0
OworICAgIG51bWJlciB8PSBudW1iZXIgPj4gODsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE2
OworICAgIG51bWJlcisrOworICAgIHJldHVybiBudW1iZXI7Cit9CisKK3ZvaWQgVXBkYXRlQXRs
YXM6OmJ1aWxkTGF5b3V0SWZOZWVkZWQoKQoreworICAgIGlmICghbV9sYXlvdXQuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aWMgY29uc3QgaW50IE1pblRpbGVTaXplID0g
MzI7CisgICAgc3RhdGljIGNvbnN0IGludCBNYXhUaWxlU2l6ZSA9IDUxMjsKKworICAgIC8vIERp
dmlkZSBvdXIgc3F1YXJlIHRvIHNxdWFyZSBwb3dlci1vZi10d28gYm94ZXMuCisgICAgZm9yIChp
bnQgY3Vyc29yID0gMDsgY3Vyc29yIDwgc2l6ZSgpLndpZHRoKCk7ICkgeworICAgICAgICBpbnQg
cmVtYWluZGVyID0gc2l6ZSgpLndpZHRoKCkgLSBjdXJzb3I7CisgICAgICAgIGludCBkaW1lbnNp
b24gPSBzdGQ6Om1pbihyZW1haW5kZXIsIHN0ZDo6bWluKE1heFRpbGVTaXplLCBzdGQ6Om1heChN
aW5UaWxlU2l6ZSwgbmV4dFBvd2VyT2ZUd28ocmVtYWluZGVyIC8gMikpKSk7CisgICAgICAgIGN1
cnNvciArPSBkaW1lbnNpb247CisgICAgICAgIG1fbGF5b3V0LmFwcGVuZChkaW1lbnNpb24pOwor
ICAgIH0KKworICAgIG1fYnVmZmVyU3RhdGVzLnJlc2l6ZShtX2xheW91dC5zaXplKCkgKiBtX2xh
eW91dC5zaXplKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9idWZmZXJTdGF0ZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fYnVmZmVyU3RhdGVzW2ldID0gQXZhaWxhYmxlOworfQorCitp
bnQgVXBkYXRlQXRsYXM6OmZpbmRBdmFpbGFibGVJbmRleChjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzaXplKQoreworICAgIGludCBkaW1lbnNpb24gPSBtX2xheW91dC5zaXplKCk7CisgICAgaW50
IHN0cmlkZSA9IGRpbWVuc2lvbjsKKyAgICBpbnQgcmVxdWlyZWREaW1lbnNpb24gPSBzdGQ6Om1h
eChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gQmVnaW4gZnJvbSB0aGUg
c21hbGxlc3QgYnVmZmVyLCB1bnRpbCB3ZSByZWFjaCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGJ1
ZmZlciB0aGF0J3MgYmlnIGVub3VnaCB0byBjb250YWluIG91ciByZWN0LgorICAgIGZvciAoaW50
IGkgPSBtX2J1ZmZlclN0YXRlcy5zaXplKCkgLSAxOyBpID49IDA7IGkgLT0gKGRpbWVuc2lvbiAr
IDEpLCAtLXN0cmlkZSkgeworICAgICAgICAvLyBOZWVkIGEgYmlnZ2VyIGJ1ZmZlci4KKyAgICAg
ICAgaWYgKG1fbGF5b3V0W2kgLyBkaW1lbnNpb25dIDwgcmVxdWlyZWREaW1lbnNpb24pCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBDaGVjayBhbGwgYnVmZmVycyBvZiBjdXJy
ZW50IHNpemUsIHRvIGZpbmQgYW4gYXZhaWxhYmxlIG9uZS4KKyAgICAgICAgZm9yIChpbnQgb2Zm
c2V0ID0gMDsgb2Zmc2V0IDwgc3RyaWRlOyArK29mZnNldCkgeworICAgICAgICAgICAgaW50IGlu
ZGV4ID0gaSAtIG9mZnNldDsKKyAgICAgICAgICAgIGlmIChtX2J1ZmZlclN0YXRlc1tpbmRleF0g
PT0gQXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwordm9pZCBVcGRhdGVBdGxhczo6ZGlkU3dhcEJ1
ZmZlcnMoKQoreworICAgIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1fYnVmZmVyU3RhdGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX2J1ZmZlclN0YXRl
c1tpXSA9IEF2YWlsYWJsZTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0
ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2l6ZSwgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBidWlsZExheW91dElmTmVlZGVk
KCk7CisgICAgaW50IGluZGV4ID0gZmluZEF2YWlsYWJsZUluZGV4KHNpemUpOworCisgICAgLy8g
Tm8gYXZhaWxhYmxlIGJ1ZmZlciB3YXMgZm91bmQsIHJldHVybmluZyBudWxsLgorICAgIGlmIChp
bmRleCA8IDApCisgICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsK
KworICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1
cGRhdGVzLgorICAgIG1fYnVmZmVyU3RhdGVzW2luZGV4XSA9IEluVXNlOworICAgIG9mZnNldCA9
IG9mZnNldEZvckluZGV4KGluZGV4KTsKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgc2l6ZSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0g
bV9iaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChJbnRSZWN0KG9mZnNldCwgc2l6ZSkpOwor
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkp
OworICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocmVjdCwgKGZsYWdzKCkgJiBTaGFyZWFi
bGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpID8gQ29sb3I6OnRyYW5zcGFyZW50IDogQ29sb3I6Ondo
aXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICByZXR1cm4gZ3JhcGhpY3ND
b250ZXh0LnJlbGVhc2UoKTsKK30KKworSW50UG9pbnQgVXBkYXRlQXRsYXM6Om9mZnNldEZvcklu
ZGV4KGludCBpbmRleCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBjb29yZChpbmRleCAlIG1fbGF5
b3V0LnNpemUoKSwgaW5kZXggLyBtX2xheW91dC5zaXplKCkpOworICAgIGludCB4ID0gMDsKKyAg
ICBpbnQgeSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb29yZC54KCk7ICsraSkKKyAg
ICAgICAgeCArPSBtX2xheW91dFtpXTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvb3JkLnko
KTsgKytpKQorICAgICAgICB5ICs9IG1fbGF5b3V0W2ldOworCisgICAgcmV0dXJuIEludFBvaW50
KHgsIHkpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1VwZGF0ZUF0bGFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODM4NjcxYjAzOWNmMzdiNTYzODM2ZDc2
ODlmNGFkNjFmZDI4NzUxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFVwZGF0ZUF0bGFzX2gKKyNkZWZp
bmUgVXBkYXRlQXRsYXNfaAorCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisKKyNpZiBV
U0UoVUlfU0lERV9DT01QT1NJVElORykKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDsKK2NsYXNzIEludFJlY3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBVcGRhdGVBdGxhcyB7CitwdWJsaWM6CisgICAgVXBkYXRlQXRsYXMoaW50IGRpbWVuc2lv
biwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyk7CisKKyAgICBQYXNzUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0KKyAgICBpbmxpbmUgV2ViQ29yZTo6
SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXAtPnNpemUoKTsgfQorCisgICAg
Ly8gUmV0dXJucyBhIG51bGwgcG9pbnRlciBvZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVy
LgorICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpblBhaW50aW5n
T25BdmFpbGFibGVCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkludFBv
aW50JiBvZmZzZXQpOworICAgIHZvaWQgZGlkU3dhcEJ1ZmZlcnMoKTsKKyAgICBTaGFyZWFibGVC
aXRtYXA6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQorCitwcml2YXRl
OgorICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworICAgIFdlYkNvcmU6OkludFBvaW50
IG9mZnNldEZvckluZGV4KGludCkgY29uc3Q7CisgICAgaW50IGZpbmRBdmFpbGFibGVJbmRleChj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisKK3ByaXZhdGU6CisgICAgZW51bSBTdGF0ZSB7Cisg
ICAgICAgIEF2YWlsYWJsZSwKKyAgICAgICAgSW5Vc2UKKyAgICB9OworCisgICAgVmVjdG9yPFN0
YXRlPiBtX2J1ZmZlclN0YXRlczsKKyAgICBWZWN0b3I8aW50PiBtX2xheW91dDsKKyAgICBTaGFy
ZWFibGVCaXRtYXA6OkZsYWdzIG1fZmxhZ3M7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
bV9iaXRtYXA7Cit9OworCit9CisjZW5kaWYKKyNlbmRpZiAvLyBVcGRhdGVBdGxhc19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9z
dFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVI
b3N0UXQuY3BwCmluZGV4IGNhNzRmMTE0MGIyYjU4NTlmNzUxOTE3Zjg4YWM5MDI1N2NjY2E0NDMu
LjY1YWM1MjFjY2E2OTFhM2FhZDEzNzk0YzQ5ZWI1MWM5ZmQyMjI2NTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
Y3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQu
aCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJHcmFw
aGljc0xheWVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWUuaD4KQEAgLTMyOSw5ICszMzAsOSBAQCBpbnQ2NF90IExheWVyVHJlZUhvc3RRdDo6YWRvcHRJ
bWFnZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIHJldHVybiBrZXk7CiAgICAg
fQogCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0Fs
cGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKTsKKyAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJs
ZShpbWFnZS0+c2l6ZSgpLCAoaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFi
bGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKSk7CiAgICAgewotICAgICAgICBPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdy
YXBoaWNzQ29udGV4dCgpOworICAgICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIGJpdG1hcC0+c2l6ZSgpKSk7CiAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVy
bygpKTsKICAgICB9CiAKQEAgLTQ1MSw2ICs0NTIsOCBAQCB2b2lkIExheWVyVHJlZUhvc3RRdDo6
cmVuZGVyTmV4dEZyYW1lKCkKIHsKICAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsK
ICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBk
YXRlQXRsYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLmRpZFN3
YXBCdWZmZXJzKCk7CiB9CiAKIGJvb2wgTGF5ZXJUcmVlSG9zdFF0OjpsYXllclRyZWVUaWxlVXBk
YXRlc0FsbG93ZWQoKSBjb25zdApAQCAtNDY1LDYgKzQ2OCwzMiBAQCB2b2lkIExheWVyVHJlZUhv
c3RRdDo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKICAgICAgICAgKCppdCktPnB1cmdlQmFja2luZ1N0
b3JlcygpOwogCiAgICAgQVNTRVJUKCFtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRz
LnNpemUoKSk7CisgICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Cit9CisKK1VwZGF0ZUF0bGFz
JiBMYXllclRyZWVIb3N0UXQ6OmdldEF0bGFzKFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3Mp
Cit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fdXBkYXRlQXRsYXNlc1tpXS5mbGFncygpID09IGZsYWdzKQorICAg
ICAgICAgICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlc1tpXTsKKyAgICB9CisgICAgc3RhdGljIGNv
bnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMjAwMDsKKyAgICBtX3VwZGF0ZUF0bGFz
ZXMuYXBwZW5kKFVwZGF0ZUF0bGFzKFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdzKSk7Cisg
ICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCk7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0PiBMYXllclRyZWVIb3N0UXQ6OmJlZ2luQ29udGVudFVwZGF0ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdz
LCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zm
c2V0KQoreworICAgIFVwZGF0ZUF0bGFzJiBhdGxhcyA9IGdldEF0bGFzKGZsYWdzKTsKKyAgICBp
ZiAoIWF0bGFzLmJpdG1hcCgpLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJu
IFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PigpOworCisgICAgLy8gVGhpcyB3
aWxsIHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIuCisgICAgT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYXRsYXMuYmVn
aW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKHNpemUsIG9mZnNldCk7CisgICAgaWYgKCFncmFw
aGljc0NvbnRleHQpCisgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dD4oKTsKKworICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaAppbmRleCAwOGYwZTY0Yjc0YjNkMTNk
YzFmNGJiNmY3NWJiYjQxZWZmZjA1NTlmLi5kMDYwMWZlZTY1MjBkMWU3YTU1ZDZiMjUxNDYyMjc5
YjFiNzIxYzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvTGF5ZXJUcmVlSG9zdFF0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiTGF5
ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJU
aW1lci5oIgorI2luY2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCiAjaW5jbHVkZSAiV2ViR3JhcGhpY3NM
YXllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTc1LDYgKzc2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVh
bCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIHZp
cnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVw
ZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOworCiBwcm90ZWN0ZWQ6
CiAgICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsKIApAQCAtOTQsNiArOTcs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKICAg
ICB2b2lkIHNlbmRMYXllcnNUb1VJKCk7CiAKKyAgICBVcGRhdGVBdGxhcyYgZ2V0QXRsYXMoU2hh
cmVhYmxlQml0bWFwOjpGbGFncyk7CisKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXll
cj4gbV9yb290TGF5ZXI7CiAKICAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5v
bi1jb21wb3NpdGVkIGNvbnRlbnQuCkBAIC0xMDQsNiArMTA5LDcgQEAgcHJpdmF0ZToKIAogICAg
IEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsK
ICAgICBIYXNoTWFwPGludDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNv
dW50czsKKyAgICBWZWN0b3I8VXBkYXRlQXRsYXM+IG1fdXBkYXRlQXRsYXNlczsKIAogICAgIGJv
b2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7CiAgICAgYm9vbCBtX2lzVmFsaWQ7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136232</attachid>
            <date>2012-04-09 09:19:42 -0700</date>
            <delta_ts>2012-04-09 09:22:16 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-83424-20120409091939.patch</filename>
            <type>text/plain</type>
            <size>36352</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjNjNiMTVhZTMwNmRi
ZGY5Y2ViZmVhODg5YTNiN2MzMmEzZDkwNC4uM2M2YjRhNDc5MGI4ODU4NjA2ZjZiMjU2OWI0Njk2
OWU1ZGZjMzZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM4IEBACiAyMDEyLTA0LTA3ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKKyAgICAgICAgW1F0XVtX
SzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3ZWIgcHJvY2VzcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzUKKworICAgICAgICBD
cmVhdGVkIHRoZSBHcmFwaGljc1N1cmZhY2UgY2xhc3MsIHdpdGggYW4gaW1wbGVtZW50YXRpb24g
Zm9yIE1hYywgdG8gYmUgdXNlZCBvbmx5IGluCisgICAgICAgIHRoZSBRdCBwb3J0IGZvciBub3cg
d2hlbiBydW5uaW5nIG9uIGEgTWFjLgorICAgICAgICBHcmFwaGljc1N1cmZhY2UgaXMgYSB3cmFw
cGVyIGZvciBhIHBsYXRmb3JtLXNwZWNpZmljIHN1cmZhY2UgaW1wbGVtZW50YXRpb24sIHdoaWNo
IGFsbG93cworICAgICAgICBjcmVhdGluZyBhIGJ1ZmZlciB3aGljaCBjYW4gYmUgZWZmaWNpZW50
bHkgcmVuZGVyZWQgdG8gYW5kIGZyb20gd2l0aCBib3RoIHNvZnR3YXJlIGFuZAorICAgICAgICBo
YXJkd2FyZS4KKworICAgICAgICBCZWNhdXNlIGltcGxlbWVudGF0aW9ucyBhcmUgdmVyeSBkZXBl
bmRhbnQgb24gdGhlIHBsYXRmb3JtLCB0aGUgaW50ZXJmYWNlIGFsbG93cyBvbmx5IGEKKyAgICAg
ICAgc2xpZ2h0bHkgaGlnaGVyLWxldmVsIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgYSBHcmFwaGlj
c0NvbnRleHQgaW50byB0aGUgc3VyZmFjZSwgYW5kIGZvcgorICAgICAgICBjb3B5aW5nIGZyb20g
dGhlIHN1cmZhY2UgaW50byBhIEdMIHRleHR1cmUuIEZ1dHVyZSBhZGRpdGlvbnMgd2lsbCBpbmNs
dWRlIHJlbmRlcmluZyB3aXRoCisgICAgICAgIEdMIGRpcmVjdGx5IGludG8gdGhlIEdyYXBoaWNz
U3VyZmFjZSwgdG8gc3VwcG9ydCBjcm9zcy1wcm9jZXNzIEdyYXBoaWNzQ29udGV4dDNELgorCisg
ICAgICAgIFRvIGFsbG93IGZhc3QgY29weWluZyB0byB0ZXh0dXJlcyBvbiBNYWMsIFRleHR1cmVN
YXBwZXJHTCBoYXMgYmVlbiBtb2RpZmllZCB0byBzdXBwb3J0CisgICAgICAgIGNvbXBhdGlibGUg
YSBwaXhlbCBmb3JtYXQgZm9yIGNyZWF0ZWQgdGV4dHVyZXMuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUucHJpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFj
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3Jh
cGhpY3NTdXJmYWNlTWFjLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNlUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFRleHR1cmVHTDo6ZGlkUmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyk6CisKKzIwMTItMDQtMDcgIE5vJ2FtIFJvc2VudGhh
bCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwogICAgICAgICBbV0syXSBFbmFibGUgdXNp
bmcgYSBzaW5nbGUgU2hhcmVhYmxlQml0bWFwIGZvciBtdWx0aXBsZSB1cGRhdGVzCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzQyNAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
aW5kZXggNGRlYWMyOTBjMjM4ZjBjNzgwYTQ3NzZiMTA2NDBhMDBjZWRhODBjMC4uMDZhNmFkNmI0
ZjY3YzRiOGUzYjg1Y2U4MDAzZTNjNzYyNjA1YjRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQz
IEBACiAyMDEyLTA0LTA3ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CiAKKyAgICAgICAgW1F0XVtXSzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3
ZWIgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg2NzUKKworICAgICAgICBFbmFibGUgU2hhcmVhYmxlQml0bWFwIHRvIGJlIGJhY2tlZCBi
eSBhIEdyYXBoaWNzU3VyZmFjZS4KKyAgICAgICAgV2hlbiBjcmVhdGluZyBhIFNoYXJlYWJsZUJp
dG1hcCB3aXRoIHRoZSBTdXBwb3J0c0dyYXBoaWNzU3VyZmFjZSBmbGFnLCBhIGNvbXBhdGlibGUK
KyAgICAgICAgR3JhcGhpY3NTdXJmYWNlIHdpbGwgYmUgY3JlYXRlZC4gSWYgYSBHcmFwaGljc1N1
cmZhY2UgaXMgbm90IHN1Y2Nlc3NmdWxseSBjcmVhdGVkLAorICAgICAgICBhIHJlZ3VsYXIgU2hh
cmVkTWVtb3J5LWJhY2tlZCBTaGFyZWRCaXRtYXAgaXMgY3JlYXRlZCBpbnN0ZWFkLgorCisgICAg
ICAgIEFsbG93IExheWVyQmFja2luZ1N0b3JlIHRvIHVwZGF0ZSB0ZXh0dXJlcyBkaXJlY3RseSBm
cm9tIHRoZSBHcmFwaGljc1N1cmZhY2UsIGluc3RlYWQgb2YKKyAgICAgICAgY29weWluZyBwaXhl
bHMgdmlhIHVwZGF0ZUNvbnRlbnRzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpIYW5kbGUpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpIYW5kbGU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlV2l0aFN1cmZhY2UpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlSGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpTaGFyZWFibGVCaXRtYXApOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuaDoK
KyAgICAgICAgKEhhbmRsZSk6CisgICAgICAgIChTaGFyZWFibGVCaXRtYXApOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmdyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgICogU2hh
cmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZl
cnMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisKKzIwMTItMDQtMDcgIE5v
J2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwogICAgICAgICBbV0sy
XSBFbmFibGUgdXNpbmcgYSBzaW5nbGUgU2hhcmVhYmxlQml0bWFwIGZvciBtdWx0aXBsZSB1cGRh
dGVzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzQy
NAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQppbmRleCBjZDdlNTcyOGI1YmVkOTMxMWJmYTgwYTM5ZTNiZDg2MWFmMmQy
MmYyLi42M2I2OTBmNGVhMDQwMmUzY2UyNGZmNjIxMzdlYzc3NzFkNzUyZmE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkKQEAgLTExMDYsNiArMTEwNiw4IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1NWR0dseXBoLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VRdC5jcHAgXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxl
ZEJhY2tpbmdTdG9yZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZm
aW5lVHJhbnNmb3JtLmNwcCBcCkBAIC0yMjQyLDYgKzIyNDQsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5o
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1RpbGVkQmFja2luZ1N0b3JlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlQ2xpZW50LmggXApAQCAtNDA3Nyw2ICs0MDgwLDEzIEBAIGNvbnRhaW5zKENPTkZJRywg
b3BlbmdsLXNoaW1zKSB7CiAgICAgREVGSU5FUyArPSBRVF9PUEVOR0xfU0hJTVM9MQogfQogCitj
b250YWlucyhDT05GSUcsIGdyYXBoaWNzX3N1cmZhY2VzKSB7CisgICAgbWFjIHsKKyAgICAgICAg
U09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNl
TWFjLmNwcAorICAgICAgICBJTkNMVURFUEFUSCArPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvSGVhZGVycworICAgIH0KK30KKwogIyBNYWtlIHN1
cmUgdGhlIGRlcml2ZWQgc291cmNlcyBhcmUgYnVpbHQKIGluY2x1ZGUoRGVyaXZlZFNvdXJjZXMu
cHJpKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IGY3NjFjZTk4MWJkZDY0OWIwYzU0ZWU2NzJlOTJkMGQy
MTA0ZWM3Y2YuLmNkYWViNzMyNzg0N2Y5MjMzN2QzODJlMmUyZTIxYzg1MjVlMTkwMzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJpCkBAIC02MCw2ICs2MCw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJD
RV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0gXAogICAgICQkU09VUkNFX0RJUi9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wgXAogICAgICQkU09VUkNFX0RJUi9wbGF0Zm9ybS9ncmFw
aGljcy9xdCBcCisgICAgJCRTT1VSQ0VfRElSL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzIFwK
ICAgICAkJFNPVVJDRV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIFwKICAgICAkJFNPVVJD
RV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3JtcyBcCiAgICAgJCRTT1VSQ0VfRElSL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzIFwKQEAgLTE5NCw2ICsxOTUsNyBAQCBjb250YWlucyhDT05G
SUcsIHRleG1hcCkgewogICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVJf
R0w9MQogICAgICAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMik6IExJQlMgKz0gLWxF
R0wKICAgICB9CisgICAgbWFjOiBMSUJTICs9IC1mcmFtZXdvcmsgSU9TdXJmYWNlIC1mcmFtZXdv
cmsgQ29yZUZvdW5kYXRpb24KIH0KIAogY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9URVhUVVJF
X01BUFBFUl9HTD0xKXxjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NT
dXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dy
YXBoaWNzU3VyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk3ZmYwNTRhZDljMWEwYmYzOWRjMzAxZDAy
ZjUwY2FkOGIwM2U4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKQEAgLTAsMCArMSw3MiBAQAor
LyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNv
bnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50MzJfdCB0b2tlbikKK3sKKyAgICBS
ZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3Vy
ZmFjZShzaXplLCBmbGFncykpOworICAgIGlmICghc3VyZmFjZS0+cGxhdGZvcm1JbXBvcnQodG9r
ZW4pKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisgICAg
cmV0dXJuIHN1cmZhY2U7Cit9CisKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGlj
c1N1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBHcmFwaGljc1N1cmZhY2U6OkZs
YWdzIGZsYWdzKQoreworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9w
dFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7CisgICAgaWYgKCFzdXJmYWNl
LT5wbGF0Zm9ybUNyZWF0ZShzaXplLCBmbGFncykpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRy
PEdyYXBoaWNzU3VyZmFjZT4oKTsKKyAgICByZXR1cm4gc3VyZmFjZTsKK30KKwordWludDMyX3Qg
R3JhcGhpY3NTdXJmYWNlOjpleHBvcnRUb2tlbigpCit7CisgICAgcmV0dXJuIHBsYXRmb3JtRXhw
b3J0KCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBHcmFwaGljc1N1cmZhY2U6
OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgTG9ja09wdGlvbnMgbG9ja09wdGlvbnMp
Cit7CisgICAgaW50IHN0cmlkZSA9IDA7CisgICAgY2hhciogYml0cyA9IHBsYXRmb3JtTG9jayhy
ZWN0LCBzdHJpZGUsIGxvY2tPcHRpb25zKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBn
cmFwaGljc0NvbnRleHQgPSBwbGF0Zm9ybUJlZ2luUGFpbnQocmVjdC5zaXplKCksIGJpdHMsIHN0
cmlkZSk7CisgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NTdXJmYWNlOjpjb3B5VG9HTFRleHR1cmUodWludDMyX3QgdGFyZ2V0LCB1aW50MzJf
dCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgb2Zm
c2V0KQoreworICAgIHBsYXRmb3JtQ29weVRvR0xUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSwgdGFy
Z2V0UmVjdCwgb2Zmc2V0KTsKK30KKworR3JhcGhpY3NTdXJmYWNlOjpHcmFwaGljc1N1cmZhY2Uo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCisgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgLCBtX3BsYXRmb3JtU3VyZmFjZSgwKQorICAgICwgbV90
ZXh0dXJlKDApCisgICAgLCBtX2ZibygwKQoreworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NT
dXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjE1YjU5MDBkY2RjYTcyZjA0NjYyYTU3MDA0MjMwZDNiMjJj
ODNmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBHcmFwaGljc1N1cmZhY2VfaAor
I2RlZmluZSBHcmFwaGljc1N1cmZhY2VfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk93blB0ci5oIgorI2luY2x1ZGUgIlBh
c3NPd25QdHIuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiUmVmUHRyLmgi
CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpZiBPUyhEQVJXSU4pCit0eXBlZGVmIHN0
cnVjdCBfX0lPU3VyZmFjZSogSU9TdXJmYWNlUmVmOwordHlwZWRlZiBJT1N1cmZhY2VSZWYgUGxh
dGZvcm1HcmFwaGljc1N1cmZhY2U7CisjZW5kaWYKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgR3JhcGhpY3NTdXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8R3JhcGhpY3NTdXJmYWNlPiB7
CitwdWJsaWM6CisgICAgZW51bSBGbGFnIHsKKyAgICAgICAgU3VwcG9ydHNBbHBoYSA9IDB4MDEs
CisgICAgICAgIFN1cHBvcnRzU29mdHdhcmVXcml0ZSA9IDB4MDIsCisgICAgICAgIFN1cHBvcnRz
U29mdHdhcmVSZWFkID0gMHgwNCwKKyAgICAgICAgU3VwcG9ydHNUZXh0dXJlVGFyZ2V0ID0gMHgw
OCwKKyAgICAgICAgU3VwcG9ydHNUZXh0dXJlU291cmNlID0gMHgxMCwKKyAgICAgICAgU3VwcG9y
dHNDb3B5VG9UZXh0dXJlID0gMHgyMCwKKyAgICAgICAgU3VwcG9ydHNDb3B5RnJvbVRleHR1cmUg
PSAweDQwLAorICAgICAgICBTdXBwb3J0c1NoYXJpbmcgPSAweDgwCisgICAgfTsKKworICAgIGVu
dW0gTG9ja09wdGlvbiB7CisgICAgICAgIFJldGFpblBpeGVscyA9IDB4MDEsCisgICAgICAgIFJl
YWRPbmx5ID0gMHgwMgorICAgIH07CisKKyAgICB0eXBlZGVmIGludCBGbGFnczsKKyAgICB0eXBl
ZGVmIGludCBMb2NrT3B0aW9uczsKKworICAgIEZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4g
bV9mbGFnczsgfQorICAgIFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNlIHBsYXRmb3JtU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1TdXJmYWNlOyB9CisgICAgSW50U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGlj
c1N1cmZhY2U+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgRmxhZ3MpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncywgdWlu
dDMyX3QgdG9rZW4pOworICAgIHZvaWQgY29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwg
dWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9p
bnQmIHNvdXJjZU9mZnNldCk7CisgICAgdWludDMyX3QgZXhwb3J0VG9rZW4oKTsKKyAgICBQYXNz
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiwgTG9ja09w
dGlvbnMpOworCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRT
aXplJiwgRmxhZ3MpOworICAgIGJvb2wgcGxhdGZvcm1JbXBvcnQodWludDMyX3QpOworICAgIHVp
bnQzMl90IHBsYXRmb3JtRXhwb3J0KCk7CisgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKKwor
ICAgIGNoYXIqIHBsYXRmb3JtTG9jayhjb25zdCBJbnRSZWN0JiwgaW50JiBzdHJpZGUsIExvY2tP
cHRpb25zKTsKKyAgICB2b2lkIHBsYXRmb3JtVW5sb2NrKCk7CisgICAgdm9pZCBwbGF0Zm9ybUNv
cHlUb0dMVGV4dHVyZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBJbnRQb2ludCYpOworCisgICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRl
eHQ+IHBsYXRmb3JtQmVnaW5QYWludChjb25zdCBJbnRTaXplJiwgY2hhciogYml0cywgaW50IHN0
cmlkZSk7CisKK3Byb3RlY3RlZDoKKyAgICBMb2NrT3B0aW9ucyBtX2xvY2tPcHRpb25zOworICAg
IEZsYWdzIG1fZmxhZ3M7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NTdXJmYWNlKGNvbnN0IElu
dFNpemUmLCBGbGFncyk7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBzdGF0aWMgdm9pZCBkaWRS
ZWxlYXNlSW1hZ2Uodm9pZCopOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSW50U2l6ZSBtX3Np
emU7CisgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UgbV9wbGF0Zm9ybVN1cmZhY2U7CisgICAg
dWludDMyX3QgbV90ZXh0dXJlOworICAgIHVpbnQzMl90IG1fZmJvOworfTsKKworfQorI2VuZGlm
IC8vIFVTRShHUkFQSElDU19TVVJGQUNFKQorCisjZW5kaWYgLy8gR3JhcGhpY3NTdXJmYWNlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL21h
Yy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjY3NGRi
ODRkOWQyZDVkNzI0NGRiYTkzODhlZTAxNzIxYWNmZjZlYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZh
Y2VNYWMuY3BwCkBAIC0wLDAgKzEsMTc0IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFj
ZS5oIgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpICYmIE9TKERBUldJTikKKyNpbmNsdWRl
IDxDRk51bWJlci5oPgorI2luY2x1ZGUgPENHTENvbnRleHQuaD4KKyNpbmNsdWRlIDxDR0xDdXJy
ZW50Lmg+CisjaW5jbHVkZSA8Q0dMSU9TdXJmYWNlLmg+CisjaW5jbHVkZSA8SU9TdXJmYWNlL0lP
U3VyZmFjZS5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordWludDMyX3QgR3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybUV4cG9ydCgpCit7CisgICAgcmV0dXJuIElPU3VyZmFjZUdldElEKG1f
cGxhdGZvcm1TdXJmYWNlKTsKK30KKworc3RhdGljIHVpbnQzMl90IGNyZWF0ZVRleHR1cmUoSU9T
dXJmYWNlUmVmIGhhbmRsZSkKK3sKKyAgICBHTHVpbnQgdGV4dHVyZSA9IDA7CisgICAgR0x1aW50
IGZvcm1hdCA9IEdMX0JHUkE7CisgICAgR0x1aW50IHR5cGUgPSBHTF9VTlNJR05FRF9JTlRfOF84
XzhfOF9SRVY7CisgICAgR0x1aW50IGludGVybmFsRm9ybWF0ID0gR0xfUkdCQTsKKyAgICBDR0xD
b250ZXh0T2JqIGNvbnRleHQgPSBDR0xHZXRDdXJyZW50Q29udGV4dCgpOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTGludCBwcmV2VGV4dHVyZTsKKyAgICBH
TGJvb2xlYW4gd2FzRW5hYmxlZCA9IGdsSXNFbmFibGVkKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
Qik7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsICZwcmV2VGV4
dHVyZSk7CisgICAgaWYgKCF3YXNFbmFibGVkKQorICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BUkIpOworICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKKyAgICBDR0xF
cnJvciBlcnJvciA9IENHTFRleEltYWdlSU9TdXJmYWNlMkQoY29udGV4dCwgR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQVJCLCBpbnRlcm5hbEZvcm1hdCwgSU9TdXJmYWNlR2V0V2lkdGgoaGFuZGxlKSwg
SU9TdXJmYWNlR2V0SGVpZ2h0KGhhbmRsZSksIGZvcm1hdCwgdHlwZSwgaGFuZGxlLCAwKTsKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Cisg
ICAgICAgIHRleHR1cmUgPSAwOworICAgIH0KKworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQVJCLCBwcmV2VGV4dHVyZSk7CisgICAgaWYgKCF3YXNFbmFibGVkKQorICAg
ICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKKyAgICByZXR1cm4gdGV4
dHVyZTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xUZXh0dXJl
KHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgaWQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgZ2xQdXNoQXR0cmliKEdMX0FMTF9BVFRS
SUJfQklUUyk7CisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIG1fdGV4dHVyZSA9IGNyZWF0
ZVRleHR1cmUobV9wbGF0Zm9ybVN1cmZhY2UpOworICAgIGlmICghbV9mYm8pCisgICAgICAgIGds
R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIDApOworICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
Qik7CisgICAgZ2xFbmFibGUodGFyZ2V0KTsKKyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgaWQp
OworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIG1fdGV4dHVyZSwgMCk7CisgICAg
Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0
LnkoKSwgb2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRS
ZWN0LmhlaWdodCgpKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVC
VUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDAs
IDApOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIDApOworICAg
IGdsUG9wQXR0cmliKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0
ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKK3sKKyAgICB1bnNpZ25lZCBwaXhl
bEZvcm1hdCA9ICdCR1JBJzsKKyAgICB1bnNpZ25lZCBieXRlc1BlckVsZW1lbnQgPSA0OworICAg
IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQo
KTsKKworICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNQZXJSb3cgPSBJT1N1cmZhY2VBbGlnblByb3Bl
cnR5KGtJT1N1cmZhY2VCeXRlc1BlclJvdywgd2lkdGggKiBieXRlc1BlckVsZW1lbnQpOworICAg
IGlmICghYnl0ZXNQZXJSb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVk
IGxvbmcgYWxsb2NTaXplID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShrSU9TdXJmYWNlQWxsb2NT
aXplLCBoZWlnaHQgKiBieXRlc1BlclJvdyk7CisgICAgaWYgKCFhbGxvY1NpemUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IHZvaWQgKmtleXNbN107CisgICAgY29uc3Qgdm9p
ZCAqdmFsdWVzWzddOworICAgIGtleXNbMF0gPSBrSU9TdXJmYWNlV2lkdGg7CisgICAgdmFsdWVz
WzBdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKKyAgICBr
ZXlzWzFdID0ga0lPU3VyZmFjZUhlaWdodDsKKyAgICB2YWx1ZXNbMV0gPSBDRk51bWJlckNyZWF0
ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKKyAgICBrZXlzWzJdID0ga0lPU3VyZmFj
ZVBpeGVsRm9ybWF0OworICAgIHZhbHVlc1syXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJl
ckludFR5cGUsICZwaXhlbEZvcm1hdCk7CisgICAga2V5c1szXSA9IGtJT1N1cmZhY2VCeXRlc1Bl
ckVsZW1lbnQ7CisgICAgdmFsdWVzWzNdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50
VHlwZSwgJmJ5dGVzUGVyRWxlbWVudCk7CisgICAga2V5c1s0XSA9IGtJT1N1cmZhY2VCeXRlc1Bl
clJvdzsKKyAgICB2YWx1ZXNbNF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlw
ZSwgJmJ5dGVzUGVyUm93KTsKKyAgICBrZXlzWzVdID0ga0lPU3VyZmFjZUFsbG9jU2l6ZTsKKyAg
ICB2YWx1ZXNbNV0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmFsbG9j
U2l6ZSk7CisgICAga2V5c1s2XSA9IGtJT1N1cmZhY2VJc0dsb2JhbDsKKyAgICB2YWx1ZXNbNl0g
PSAoZmxhZ3MgJiBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZykgPyBrQ0ZCb29sZWFu
VHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZTsKKworICAgIENGRGljdGlvbmFyeVJlZiBkaWN0ID0gQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgNywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDc7IGkrKykKKyAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlc1tpXSk7
CisKKyAgICBtX3BsYXRmb3JtU3VyZmFjZSA9IElPU3VyZmFjZUNyZWF0ZShkaWN0KTsKKyAgICBy
ZXR1cm4gISFtX3BsYXRmb3JtU3VyZmFjZTsKK30KKworYm9vbCBHcmFwaGljc1N1cmZhY2U6OnBs
YXRmb3JtSW1wb3J0KHVpbnQzMl90IHRva2VuKQoreworICAgIG1fcGxhdGZvcm1TdXJmYWNlID0g
SU9TdXJmYWNlTG9va3VwKHRva2VuKTsKKyAgICByZXR1cm4gISFtX3BsYXRmb3JtU3VyZmFjZTsK
K30KKworc3RhdGljIGludCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhpbnQgbG9ja09wdGlvbnMpCit7
CisgICAgaW50IG9wdGlvbnMgPSAwOworICAgIGlmIChsb2NrT3B0aW9ucyAmIEdyYXBoaWNzU3Vy
ZmFjZTo6UmVhZE9ubHkpCisgICAgICAgIG9wdGlvbnMgfD0ga0lPU3VyZmFjZUxvY2tSZWFkT25s
eTsKKyAgICBpZiAoIShsb2NrT3B0aW9ucyAmIEdyYXBoaWNzU3VyZmFjZTo6UmV0YWluUGl4ZWxz
KSkKKyAgICAgICAgb3B0aW9ucyB8PSBrSU9TdXJmYWNlTG9ja0F2b2lkU3luYzsKKyAgICByZXR1
cm4gb3B0aW9uczsKK30KKworc3RhdGljIGludCBpb1N1cmZhY2VVbmxvY2tPcHRpb25zKGludCBs
b2NrT3B0aW9ucykKK3sKKyAgICBpbnQgb3B0aW9ucyA9IDA7CisgICAgaWYgKGxvY2tPcHRpb25z
ICYgR3JhcGhpY3NTdXJmYWNlOjpSZWFkT25seSkKKyAgICAgICAgb3B0aW9ucyB8PSAoa0lPU3Vy
ZmFjZUxvY2tBdm9pZFN5bmMgfCBrSU9TdXJmYWNlTG9ja1JlYWRPbmx5KTsKKyAgICByZXR1cm4g
b3B0aW9uczsKK30KKworY2hhciogR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUxvY2soY29uc3Qg
SW50UmVjdCYgcmVjdCwgaW50JiBzdHJpZGUsIExvY2tPcHRpb25zIGxvY2tPcHRpb25zKQorewor
ICAgIG1fbG9ja09wdGlvbnMgPSBsb2NrT3B0aW9uczsKKyAgICBJT1N1cmZhY2VMb2NrKG1fcGxh
dGZvcm1TdXJmYWNlLCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSwgMCk7Cisg
ICAgc3RyaWRlID0gSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3cobV9wbGF0Zm9ybVN1cmZhY2UpOwor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oSU9TdXJmYWNlR2V0QmFzZUFkZHJl
c3MobV9wbGF0Zm9ybVN1cmZhY2UpKTsKKyAgICByZXR1cm4gYmFzZSArIHN0cmlkZSAqIHJlY3Qu
eSgpICsgcmVjdC54KCkgKiA0OworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1V
bmxvY2soKQoreworICAgIElPU3VyZmFjZVVubG9jayhtX3BsYXRmb3JtU3VyZmFjZSwgaW9TdXJm
YWNlVW5sb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSAmICh+a0lPU3VyZmFjZUxvY2tBdm9pZFN5
bmMpLCAwKTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRGVzdHJveSgpCit7
CisgICAgaWYgKG1fZmJvKQorICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8p
OworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4
dHVyZSk7CisgICAgQ0ZSZWxlYXNlKElPU3VyZmFjZVJlZihtX3BsYXRmb3JtU3VyZmFjZSkpOwor
fQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZVF0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZjBjYTJhMTU3NWFiMWRiOWRmMjJlMDNlMDRhMWFkMmRiZTUyMDBmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3Jh
cGhpY3NTdXJmYWNlUXQuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAy
MDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NTdXJmYWNlLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkgJiYgUExBVEZPUk0oUVQp
CisjaW5jbHVkZSA8UUltYWdlPgorI2luY2x1ZGUgPFFQYWludGVyPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7Cit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6ZGlkUmVsZWFzZUltYWdlKHZvaWQqIGRhdGEp
Cit7CisgICAgR3JhcGhpY3NTdXJmYWNlKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NT
dXJmYWNlKj4oZGF0YSk7CisgICAgc3VyZmFjZS0+cGxhdGZvcm1VbmxvY2soKTsKK30KKworUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQ+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1CZWdpblBh
aW50KGNvbnN0IEludFNpemUmIHNpemUsIGNoYXIqIGJpdHMsIGludCBzdHJpZGUpCit7CisgICAg
UUltYWdlOjpGb3JtYXQgZm9ybWF0ID0gKGZsYWdzKCkgJiBTdXBwb3J0c0FscGhhKSA/IFFJbWFn
ZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkIDogUUltYWdlOjpGb3JtYXRfUkdCMzI7CisK
KyAgICAvLyBUaGUgaW1hZ2UgYW5kIHBhaW50ZXIgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBy
ZXR1cm5lZCBHcmFwaGljc0NvbnRleHQgaXMgcmVsZWFzZWQuCisgICAgUUltYWdlKiBpbWFnZSA9
IG5ldyBRSW1hZ2UocmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KGJpdHMpLCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCksIHN0cmlkZSwgZm9ybWF0LCBkaWRSZWxlYXNlSW1hZ2UsIHRoaXMpOwor
ICAgIFFQYWludGVyKiBwYWludGVyID0gbmV3IFFQYWludGVyKGltYWdlKTsKKyAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3ND
b250ZXh0KHBhaW50ZXIpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnRha2VPd25lcnNoaXBPZlBs
YXRmb3JtQ29udGV4dCgpOworICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwor
fQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDhhMjU5NzM1NDg1NTQ5ZDRi
ZTkxZjFhN2I2MmNiMjFhY2FlYTMxN2UuLjQxY2UyYWJkMDM5NjhjYjg5Yzg4Njg4MjhkNWRjMzA0
YzQyODM3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0zOTEsNiArMzkxLDEyIEBAIGJv
b2wgQml0bWFwVGV4dHVyZUdMOjpjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYgY29udGVudHNT
aXplLCBGbGFncykKICAgICByZXR1cm4gY29udGVudHNTaXplID09IG1fdGV4dHVyZVNpemU7CiB9
CiAKKyNpZiBPUyhEQVJXSU4pCisjZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZF
Ul9UWVBFIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFVgorI2Vsc2UKKyNkZWZpbmUgREVGQVVM
VF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfQllURQorI2VuZGlmCisK
IHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCgpCiB7CiAgICAgaWYgKCFtX2lkKQpAQCAt
NDAzLDcgKzQwOSw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCgpCiAgICAgICAg
IEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpKQogICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSkKICAgICAgICAgR0xf
Q01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSkpCi0gICAgICAgIEdMX0NNRChnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCwgR0xfUkdCQSwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdo
dCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKSkKKyAgICAgICAgR0xfQ01EKGds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3RleHR1cmVTaXplLndpZHRo
KCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX0JHUkEsIERFRkFVTFRfVEVYVFVSRV9Q
SVhFTF9UUkFOU0ZFUl9UWVBFLCAwKSkKICAgICB9CiAKICAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0
ID0gdHJ1ZTsKQEAgLTQ1Miw3ICs0NTgsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRl
Q29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdAogICAg
ICAgICBzd2l6emxlQkdSQVRvUkdCQShzdGF0aWNfY2FzdDx1aW50MzJfdCo+KGNvbnN0X2Nhc3Q8
dm9pZCo+KGRhdGEpKSwgdGFyZ2V0UmVjdC5zaXplKCksIGJ5dGVzUGVyTGluZSAvIDQpOwogCiAg
ICAgaWYgKGJ5dGVzUGVyTGluZSA9PSB0YXJnZXRSZWN0LndpZHRoKCkgLyA0ICYmIHNvdXJjZU9m
ZnNldCA9PSBJbnRQb2ludDo6emVybygpKSB7Ci0gICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdl
MkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJn
ZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05F
RF9CWVRFLCAoY29uc3QgY2hhciopZGF0YSkpCisgICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdl
MkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJn
ZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RF
WFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC00NjEsNyArNDY3LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6
OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QKICAgICAgICAgY29uc3QgY2hhciogYml0cyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihk
YXRhKTsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB0YXJnZXRSZWN0LmhlaWdodCgpOyAr
K3kpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJvdyA9IGJpdHMgKyAoKHNvdXJjZU9mZnNl
dC55KCkgKyB5KSAqIGJ5dGVzUGVyTGluZSArIHNvdXJjZU9mZnNldC54KCkgKiA0KTsKLSAgICAg
ICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVj
dC54KCksIHRhcmdldFJlY3QueSgpICsgeSwgdGFyZ2V0UmVjdC53aWR0aCgpLCAxLCBnbEZvcm1h
dCwgR0xfVU5TSUdORURfQllURSwgcm93KSkKKyAgICAgICAgICAgIEdMX0NNRChnbFRleFN1Yklt
YWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpICsg
eSwgdGFyZ2V0UmVjdC53aWR0aCgpLCAxLCBnbEZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVM
X1RSQU5TRkVSX1RZUEUsIHJvdykpCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTQ3MCw3ICs0NzYsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMo
Y29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdAogICAgIGdsUGl4ZWxT
dG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIDQpOwogICAgIGdsUGl4
ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNlT2Zmc2V0LnkoKSk7CiAgICAgZ2xQ
aXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNldC54KCkpOwotICAg
IEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCks
IHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCks
IGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAoY29uc3QgY2hhciopZGF0YSkpCisgICAgR0xf
Q01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFy
Z2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xG
b3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciop
ZGF0YSkpCiAgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7CiAgICAg
Z2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAwKTsKICAgICBnbFBpeGVsU3RvcmVp
KEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFi
bGVCaXRtYXAuY3BwCmluZGV4IDdkZTE1MWViMjY4MDgwMTE3ZmMwMjY1MmFhM2JhOTc1M2Y3YjA3
MTguLjMyZDM2ZjZkYTJkYTU2YzMwYjU1NDRjNTU3NDBkZGFhODNhNDk3MTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCkBAIC0zNiw2ICszNiw5IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6SGFuZGxlKCkKICAgICA6
IG1fZmxhZ3MoMCkKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAsIG1fZ3JhcGhpY3NT
dXJmYWNlVG9rZW4oMCkKKyNlbmRpZgogewogfQogCkBAIC00NCw2ICs0Nyw5IEBAIHZvaWQgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVu
Y29kZXIpIGNvbnN0CiAgICAgZW5jb2Rlci0+ZW5jb2RlKG1faGFuZGxlKTsKICAgICBlbmNvZGVy
LT5lbmNvZGUobV9zaXplKTsKICAgICBlbmNvZGVyLT5lbmNvZGUobV9mbGFncyk7CisjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fZ3JhcGhpY3NTdXJmYWNl
VG9rZW4pOworI2VuZGlmCiB9CiAKIGJvb2wgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGU6OmRlY29k
ZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEhhbmRsZSYgaGFuZGxlKQpAQCAt
NTQsNiArNjAsMTAgQEAgYm9vbCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6ZGVjb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgSGFuZGxlJgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlLm1fZmxhZ3MpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoaGFuZGxlLm1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNzAsMTMgKzgwLDE4IEBA
IFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb25z
dCBJbnRTaXplJiBzaXplLCBGbGFncyBmCiAKIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFn
cyBmbGFncykKIHsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBiaXRtYXAgPSBjcmVhdGVXaXRoU3VyZmFjZShzaXplLCBmbGFncyk7CisgICAg
aWYgKGJpdG1hcCkKKyAgICAgICAgcmV0dXJuIGJpdG1hcDsKKyNlbmRpZgogICAgIHNpemVfdCBu
dW1CeXRlcyA9IG51bUJ5dGVzRm9yU2l6ZShzaXplKTsKIAogICAgIFJlZlB0cjxTaGFyZWRNZW1v
cnk+IHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKG51bUJ5dGVzKTsKICAgICBp
ZiAoIXNoYXJlZE1lbW9yeSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNoYXJlYWJsZUJpdG1hcChzaXplLCBmbGFncywgc2hhcmVkTWVtb3J5KSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVCaXRtYXAoc2l6ZSwgZmxhZ3MsIFBhc3NSZWZQ
dHI8U2hhcmVkTWVtb3J5PihzaGFyZWRNZW1vcnkpKSk7CiB9CiAKIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBG
bGFncyBmbGFncywgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSkKQEAgLTg5
LDggKzEwNCwzNyBAQCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZgogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2hhcmVhYmxlQml0bWFwKHNpemUsIGZsYWdzLCBzaGFyZWRNZW1vcnkpKTsKIH0KIAor
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlV2l0aFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxh
Z3MgZmxhZ3MpCit7CisgICAgaWYgKCEoZmxhZ3MgJiBTdXBwb3J0c0dyYXBoaWNzU3VyZmFjZSkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJmYWNl
RmxhZ3MgPQorICAgICAgICAgICAgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NvZnR3YXJlV3Jp
dGUKKyAgICAgICAgICAgIHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c0NvcHlUb1RleHR1cmUK
KyAgICAgICAgICAgIHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7CisgICAgaWYg
KGZsYWdzICYgU3VwcG9ydHNBbHBoYSkKKyAgICAgICAgc3VyZmFjZUZsYWdzIHw9IEdyYXBoaWNz
U3VyZmFjZTo6U3VwcG9ydHNBbHBoYTsKKyAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJm
YWNlID0gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgc3VyZmFjZUZsYWdzKTsKKyAgICBp
ZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKHN1cmZhY2UpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVhYmxlQml0bWFwKHNpemUsIGZsYWdzLCBQYXNz
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oc3VyZmFjZSkpKTsKK30KKyNlbmRpZgorCiBQYXNzUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY29uc3QgSGFuZGxl
JiBoYW5kbGUpCiB7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaWYgKGhhbmRsZS5t
X2dyYXBoaWNzU3VyZmFjZVRva2VuKSB7CisgICAgICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+
IHN1cmZhY2UgPSBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShoYW5kbGUubV9zaXplLCBoYW5kbGUu
bV9mbGFncywgaGFuZGxlLm1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworICAgICAgICBpZiAoIXN1
cmZhY2UpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTaGFyZWFibGVCaXRtYXAoaGFuZGxlLm1fc2l6ZSwgaGFuZGxlLm1fZmxhZ3MsIFBhc3NSZWZQ
dHI8R3JhcGhpY3NTdXJmYWNlPihzdXJmYWNlKSkpOworICAgIH0KKyNlbmRpZgogICAgIC8vIENy
ZWF0ZSB0aGUgc2hhcmVkIG1lbW9yeS4KICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRN
ZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUubV9oYW5kbGUsIFNoYXJlZE1lbW9y
eTo6UmVhZFdyaXRlKTsKICAgICBpZiAoIXNoYXJlZE1lbW9yeSkKQEAgLTEwMSw2ICsxNDUsMTQg
QEAgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNv
bnN0IEhhbmRsZSYgaGFuZGxlKQogCiBib29sIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlSGFuZGxl
KEhhbmRsZSYgaGFuZGxlKQogeworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlmICht
X2dyYXBoaWNzU3VyZmFjZSkgeworICAgICAgICBoYW5kbGUubV9zaXplID0gbV9zaXplOworICAg
ICAgICBoYW5kbGUubV9mbGFncyA9IG1fZmxhZ3M7CisgICAgICAgIGhhbmRsZS5tX2dyYXBoaWNz
U3VyZmFjZVRva2VuID0gbV9ncmFwaGljc1N1cmZhY2UtPmV4cG9ydFRva2VuKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgogICAgIEFTU0VSVChpc0JhY2tlZEJ5U2hhcmVk
TWVtb3J5KCkpOwogCiAgICAgaWYgKCFtX3NoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRs
ZS5tX2hhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkV3JpdGUpKQpAQCAtMTI1LDYgKzE3NywxNyBA
QCBTaGFyZWFibGVCaXRtYXA6OlNoYXJlYWJsZUJpdG1hcChjb25zdCBJbnRTaXplJiBzaXplLCBG
bGFncyBmbGFncywgUGFzc1JlZlB0cjxTaAogewogfQogCisjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCitTaGFyZWFibGVCaXRtYXA6OlNoYXJlYWJsZUJpdG1hcChjb25zdCBJbnRTaXplJiBzaXpl
LCBGbGFncyBmbGFncywgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UpCisgICAg
OiBtX3NpemUoc2l6ZSkKKyAgICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgLCBtX2dyYXBoaWNzU3Vy
ZmFjZShzdXJmYWNlKQorICAgICwgbV9kYXRhKDApCit7Cit9CisjZW5kaWYKKworI2lmICFVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KQogewogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4
dCA9IGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwpAQCAtMTMyLDYgKzE5NSw3IEBAIFBhc3NPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBo
aWNzQ29udGV4dChjb25zCiAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUocmVjdC54KCks
IHJlY3QueSgpKTsKICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKIH0KKyNl
bmRpZgogCiBTaGFyZWFibGVCaXRtYXA6On5TaGFyZWFibGVCaXRtYXAoKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCmluZGV4IGYzY2QyMTNlMzQxYzk4NGJiNmE1OGNj
YWE5MmE0MDlmYzBjMzgwZDcuLmFlMzhjZjA1ZDlmMDcxMTlkMjIwMjgwZjcxNjkyZTdkNDdjOGE0
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKQEAgLTUwLDYgKzUw
LDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgeyB1c2luZyBXZWJDb3JlOjpSZWdpb247IH0KICNlbmRp
ZgogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpbmNsdWRlICJHcmFwaGlj
c1N1cmZhY2UuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSW1h
Z2U7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwpAQCAtNjEsNiArNjUsOSBAQCBjbGFzcyBT
aGFyZWFibGVCaXRtYXAgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWFibGVCaXRtYXA+IHsKIHB1
YmxpYzoKICAgICBlbnVtIEZsYWcgewogICAgICAgICBTdXBwb3J0c0FscGhhID0gMSA8PCAwLAor
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICBTdXBwb3J0c0dyYXBoaWNzU3VyZmFj
ZSA9ICgxIDw8IDEpCisjZW5kaWYKICAgICB9OwogICAgIHR5cGVkZWYgdW5zaWduZWQgRmxhZ3M7
CiAKQEAgLTc5LDYgKzg2LDkgQEAgcHVibGljOgogCiAgICAgICAgIG11dGFibGUgU2hhcmVkTWVt
b3J5OjpIYW5kbGUgbV9oYW5kbGU7CiAgICAgICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOwor
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICB1aW50MzJfdCBtX2dyYXBoaWNzU3Vy
ZmFjZVRva2VuOworI2VuZGlmCiAgICAgICAgIEZsYWdzIG1fZmxhZ3M7CiAgICAgfTsKIApAQCAt
OTEsNiArMTAxLDExIEBAIHB1YmxpYzoKICAgICAvLyBDcmVhdGUgYSBzaGFyZWFibGUgYml0bWFw
IGZyb20gYW4gYWxyZWFkeSBleGlzdGluZyBzaGFyZWQgbWVtb3J5IGJsb2NrLgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBGbGFncywgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+KTsKIAorI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorICAgIC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBiaXRtYXAgYmFja2VkIGJ5IGEg
Z3JhcGhpY3Mgc3VyZmFjZS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IGNyZWF0ZVdpdGhTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBGbGFncyk7CisjZW5k
aWYKKwogICAgIC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBiaXRtYXAgZnJvbSBhIGhhbmRsZS4KICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNyZWF0ZShjb25zdCBIYW5kbGUm
KTsKIApAQCAtMTM5LDEwICsxNTQsMTggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlbGVh
c2VTaGFyZWRNZW1vcnlEYXRhKHZvaWQqIHR5cGVsZXNzQml0bWFwKTsKICNlbmRpZgogCisjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1
cmZhY2U+IGdyYXBoaWNzU3VyZmFjZSgpIHsgcmV0dXJuIG1fZ3JhcGhpY3NTdXJmYWNlOyB9Cisj
ZW5kaWYKKwogcHJpdmF0ZToKICAgICBTaGFyZWFibGVCaXRtYXAoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIEZsYWdzLCB2b2lkKik7CiAgICAgU2hhcmVhYmxlQml0bWFwKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBGbGFncywgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+KTsKIAorI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorICAgIFNoYXJlYWJsZUJpdG1hcChjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgRmxhZ3MsIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlPik7CisjZW5k
aWYKKwogICAgIHN0YXRpYyBzaXplX3QgbnVtQnl0ZXNGb3JTaXplKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpIHsgcmV0dXJuIHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0OyB9
CiAKICNpZiBVU0UoQ0cpCkBAIC0xNjcsNiArMTkwLDEwIEBAIHByaXZhdGU6CiAgICAgLy8gSWYg
dGhlIHNoYXJlYWJsZSBiaXRtYXAgaXMgYmFja2VkIGJ5IGZhc3RNYWxsb2NlZCBtZW1vcnksIHRo
aXMgcG9pbnRzIHRvIHRoZSBkYXRhLgogICAgIHZvaWQqIG1fZGF0YTsKIAorI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IG1fZ3Jh
cGhpY3NTdXJmYWNlOworI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiAgICAgbXV0YWJsZSBP
d25QdHI8SERDPiBtX3dpbmRvd3NDb250ZXh0OwogICAgIG11dGFibGUgT3duUHRyPEhCSVRNQVA+
IG1fd2luZG93c0JpdG1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9T
aGFyZWFibGVCaXRtYXBRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvU2hhcmVhYmxl
Qml0bWFwUXQuY3BwCmluZGV4IDc3OGJjZmNjMWNkMmMzZDI1OTBjYjhmZjM0MWYwOGRjOTg3OTBj
ZGYuLmQ3OThlZmVjMjk1YWMxODIzMTVhOWM2MTk0ZDNlMzI4MjA2NmVhZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcApAQCAtNjUsNiArNjUs
MTggQEAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
R3JhcGhpY3NDb250ZXh0KCkKICAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKKyNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmIChtX2dyYXBoaWNzU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG1f
Z3JhcGhpY3NTdXJmYWNlLT5iZWdpblBhaW50KHJlY3QsIDAgLyogTG9ja09wdGlvbnMgKi8pOwor
ICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGNyZWF0ZUdyYXBo
aWNzQ29udGV4dCgpOworICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcChyZWN0KTsKKyAgICBncmFw
aGljc0NvbnRleHQtPnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55KCkpOworICAgIHJldHVybiBn
cmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworfQorI2VuZGlmCisKIHZvaWQgU2hhcmVhYmxlQml0
bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBkc3RQ
b2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKIHsKICAgICBRSW1hZ2UgaW1hZ2UgPSBjcmVh
dGVRSW1hZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXll
ckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IGZlZTBjOTA2MjIwZjQxOGRhNTNkMWIxYzRiMzNlZjNhODFmNTAw
MDguLmRjZGM0MmI5NDZiYThmZmM4YjhhNDIzODYxYjQzYmI3MzE4MjNjNzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcApAQCAtNDgs
NiArNDgsMjAgQEAgdm9pZCBMYXllckJhY2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiAgICAgICAgIHNob3VsZFJlc2V0ID0g
dHJ1ZTsKICAgICB9CiAKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gbV9iYWNrQnVmZmVyLT5ncmFwaGljc1N1cmZhY2UoKTsK
KyAgICBpZiAoc3VyZmFjZSkgeworICAgICAgICBpZiAoc2hvdWxkUmVzZXQpCisgICAgICAgICAg
ICB0ZXh0dXJlLT5yZXNldChtX3NvdXJjZVJlY3Quc2l6ZSgpLCAoc3VyZmFjZS0+ZmxhZ3MoKSAm
IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNBbHBoYSkgPyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0
c0FscGhhIDogMCk7CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2Rl
KCkgPT0gVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSkgeworICAgICAgICAgICAgQml0bWFwVGV4
dHVyZUdMKiB0ZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPih0ZXh0dXJl
LmdldCgpKTsKKyAgICAgICAgICAgIHN1cmZhY2UtPmNvcHlUb0dMVGV4dHVyZSh0ZXh0dXJlR0wt
PnRleHR1cmVUYXJnZXQoKSwgdGV4dHVyZUdMLT5pZCgpLCBtX3NvdXJjZVJlY3QsIG1fYml0bWFw
T2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBtX2JhY2tCdWZmZXIuY2xlYXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAgICAgUUltYWdlIHFJbWFnZSA9IG1fYmFja0J1
ZmZlci0+Y3JlYXRlUUltYWdlKCk7CiAgICAgaWYgKHNob3VsZFJlc2V0KQogICAgICAgICB0ZXh0
dXJlLT5yZXNldChtX3NvdXJjZVJlY3Quc2l6ZSgpLCBxSW1hZ2UuaGFzQWxwaGFDaGFubmVsKCkg
PyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAppbmRleCBiYmZhN2Q3ZmFmZWY0
Y2VhNWEwNThiNDU4ZTAwYzQ0Yjc5ZjIyMGY2Li5kY2QxYjA1MTNhODQ5MjNmOTY1NDNjOTE4NDc3
YzAzOWUwNWQxNDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvVXBkYXRlQXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9VcGRhdGVBdGxhcy5jcHAKQEAgLTMyLDYgKzMyLDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBV
cGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpG
bGFncyBmbGFncykKICAgICA6IG1fZmxhZ3MoZmxhZ3MpCiB7CisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisgICAgZmxhZ3MgfD0gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0dyYXBoaWNzU3Vy
ZmFjZTsKKyNlbmRpZgogICAgIG1fYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFy
ZWFibGUoSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbiksIGZsYWdzKTsKIH0KIApkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGI1NjIzM2Y4ZWRm
Mjg4YzgwNjRlNDYzOGNlM2E3YjkyZTI5YjM5NDguLjYwM2JlZDhkZmYxN2YyMTkwYjk3OGRkMTdh
ZTA3Mjk1ZTFmNjBlZTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNC0wNyAgTm8nYW0gUm9zZW50aGFsICA8
bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBNYW5hZ2UgZ3Jh
cGhpY3MgYnVmZmVycyBpbiB0aGUgd2ViIHByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4Njc1CisKKyAgICAgICAgRW5hYmxlIGdyYXBoaWNz
IHN1cmZhY2VzIG9uIE1hYyBmb3IgUXQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZjoK
KwogMjAxMi0wNC0wNyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBbQ01ha2VdIENsZWFudXAgV1RGIGluY2x1ZGUgZGlyZWN0b3JpZXMKZGlmZiAtLWdp
dCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmIGIvVG9vbHMvcW1h
a2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKaW5kZXggZjdmNjI1OWU4ODdlOWZjYWYx
MGNmZjlkMzIxNGNmOGFmOTY5ZDMxNS4uZmVhOTFkMjhlOWEwNmZlMTZjNzg5MTllZWQ0YzRmOGU5
YjQ2NzA5YSAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJl
cy5wcmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKQEAg
LTE4LDYgKzE4LDExIEBAIG1lZWdvdG91Y2ggewogICAgIERFRklORVMgKz0gV1RGX1VTRV9NRUVH
T1RPVUNIPTEKIH0KIAorbWFjOiBDT05GSUcgKz0gZ3JhcGhpY3Nfc3VyZmFjZXMKK2NvbnRhaW5z
KENPTkZJRywgZ3JhcGhpY3Nfc3VyZmFjZXMpIHsKKyAgICBERUZJTkVTICs9IFdURl9VU0VfR1JB
UEhJQ1NfU1VSRkFDRT0xCit9CisKICMjIGxvYWQgbW9iaWxpdHljb25maWcgaWYgbW9iaWxpdHkg
aXMgYXZhaWxhYmxlCiBsb2FkKG1vYmlsaXR5Y29uZmlnLCB0cnVlKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136234</attachid>
            <date>2012-04-09 09:22:27 -0700</date>
            <delta_ts>2012-04-09 12:37:49 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-83424-20120409092224.patch</filename>
            <type>text/plain</type>
            <size>52181</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQyYmU1NWMwYzA4MmM5
Y2NmMTJhNjdkMWI3ZDBhZTgwZDUxOWQ4OS4uNDdjNjNiMTVhZTMwNmRiZGY5Y2ViZmVhODg5YTNi
N2MzMmEzZDkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA0LTA3ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1dLMl0g
RW5hYmxlIHVzaW5nIGEgc2luZ2xlIFNoYXJlYWJsZUJpdG1hcCBmb3IgbXVsdGlwbGUgdXBkYXRl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM0MjQK
KworICAgICAgICBNb2RpZnkgQml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMgdG8gaW5jbHVk
ZSBhIHNvdXJjZSBvZmZzZXQuCisgICAgICAgIFRoaXMgYWxsb3dzIHVzIHRvIHVwZGF0ZSBhIHRl
eHR1cmUgZnJvbSBhIHN1Yi1pbWFnZS4KKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJv
aGRlIENocmlzdGlhbnNlbi4KKworICAgICAgICBUZXN0ZWQgYnkgZXhpc3RpbmcgQVBJIHRlc3Rz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoK
KyAgICAgICAgKEJpdG1hcFRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUdMOjpkaWRSZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpkcml2ZXJTdXBwb3J0c0JHUkFTd2l6
emxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5o
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp0ZXh0dXJlVGFyZ2V0KToKKyAg
ICAgICAgKEJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmg6CisgICAgICAgIChC
aXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIpOgorCiAyMDEyLTA0LTA3ICBQYXRyaWNrIEdhbnN0ZXJl
ciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDTWFrZV0gQ2xlYW51cCBXVEYgaW5j
bHVkZSBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI3NGEzMzBlYTZhNzFlYTc3ZDU3YzBiN2Rl
ZTA5MmQ2MmUxZTRjNWIuLjRkZWFjMjkwYzIzOGYwYzc4MGE0Nzc2YjEwNjQwYTAwY2VkYTgwYzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MCBAQAorMjAxMi0wNC0wNyAgTm8nYW0gUm9zZW50aGFs
ICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtXSzJdIEVuYWJsZSB1c2lu
ZyBhIHNpbmdsZSBTaGFyZWFibGVCaXRtYXAgZm9yIG11bHRpcGxlIHVwZGF0ZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzNDI0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgRW5hYmxl
ZCBjcmVhdGluZyBhIEdyYXBoaWNzQ29udGV4dCB0aGF0IHJlZmVyZW5jZXMgYSByZWN0IGluc2lk
ZSBTaGFyZWFibGVCaXRtYXAuCisgICAgICAgIEFkZGVkIGJpdG1hcE9mZnNldCB0byBVcGRhdGVJ
bmZvLCB0byBhbGxvdyB1cGRhdGVzIHRvIHJlZmVyZW5jZSBhbiBvZmZzZXQgaW5zaWRlIHRoZSBi
aXRtYXAuCisgICAgICAgIEFkZGVkIFVwZGF0ZUF0bGFzLCBhIGNsYXNzIHRoYXQgbWFuYWdlcyBh
dmFpbGFibGUgcmVjdHMgaW4gYSBsYXJnZXIgU2hhcmVhYmxlQml0bWFwLgorCisgICAgICAgIElu
IHRoaXMgaXRlcmF0aW9uLCBVcGRhdGVBdGxhcyBoYXMgYSBzaW1wbGUgYmVoYXZpb3Igd2hlcmUg
YSByZWN0IGluc2lkZSB0aGUgYml0bWFwIGlzCisgICAgICAgIGVpdGhlciBhdmFpbGFibGUgb3Ig
dXNlZC4gV2hlbiB0aGUgYnVmZmVycyBhcmUgc3dhcHBlZCwgYWxsIHVzZWQgYnVmZmVycyBiZWNv
bWUgYXZhaWxhYmxlCisgICAgICAgIGFnYWluLiBBIGZ1dHVyZSBlbmhhbmNlbWVudCBtaWdodCBh
bGxvdyB0cmlwbGUtYnVmZmVyaW5nLCB3aGVyZSBhdmFpbGFibGUgcmVjdHMgY2FuIGJlCisgICAg
ICAgIHVwZGF0ZWQgd2hpbGUgb3RoZXIgcmVjdHMgZnJvbSB0aGUgc2FtZSBhdGxhcyBhcmUgaW4g
dXNlLgorCisgICAgICAgIEFkZGVkIHRoZSBuZWNlc3NhcnkgcGx1bWJpbmcgdG8gYWxsb3cgUXQn
cyBVSS1zaWRlIGNvbXBvc2l0aW5nIHRvIHRha2UgYWR2YW50YWdlIG9mCisgICAgICAgIFVwZGF0
ZUF0bGFzLiBMYXllclRyZWVIb3N0UXQgY3JlYXRlcyBhbiBhdGxhcyBwZXIgdHlwZSBvZiBiaXRt
YXAgKGkuZS4gb25lIG9wYXF1ZSBhbmQgb25lCisgICAgICAgIGFscGhhLWVuYWJsZWQgYXRsYXMp
LiBXaGVuIGEgdGlsZSB3YW50cyB0byB1cGRhdGUgYW5kIHRoZXJlJ3Mgbm8gYXZhaWxhYmxlIHNj
cmF0Y2gtYnVmZmVyLAorICAgICAgICB0aGUgdXBkYXRlIHdvdWxkIGJlIHBvc3Rwb25lZCB0byB0
aGUgbmV4dCBmcmFtZSwgY3JlYXRpbmcgYSB0aWxpbmctYXJ0aWZhY3QgaW4gbG93IG1lbW9yeQor
ICAgICAgICBzaXR1YXRpb25zLgorCisgICAgICAgICogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKToKKyAgICAgICAg
KiBTaGFyZWQvU2hhcmVhYmxlQml0bWFwLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
U2hhcmVhYmxlQml0bWFwKToKKyAgICAgICAgKiBTaGFyZWQvVXBkYXRlSW5mby5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlVwZGF0ZUluZm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0
ZUluZm86OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1VwZGF0ZUluZm8uaDoKKyAgICAgICAg
KFVwZGF0ZUluZm8pOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQ
cm94eTo6dXBkYXRlVGlsZUZvckxheWVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJU
cmVlUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6
c3luY0xheWVyUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRl
cmVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIu
aDoKKyAgICAgICAgKFRpbGVVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVS
ZW5kZXJlcjo6VGlsZVVwZGF0ZTo6VGlsZVVwZGF0ZSk6CisgICAgICAgIChXZWJMYXllclRyZWVS
ZW5kZXJlcik6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVmZmVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcik6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKExheWVyQmFja2lu
Z1N0b3JlVGlsZSk6CisgICAgICAgIChMYXllckJhY2tpbmdTdG9yZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmJlZ2luQ29udGVudFVwZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQp
OgorICAgICAgICAoV2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6dXBkYXRlQmFja0J1ZmZlcik6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oOgorICAgICAg
ICAoVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJL
aXQ6Om5leHRQb3dlck9mVHdvKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OmJ1aWxk
TGF5b3V0SWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6ZmluZEF2YWls
YWJsZUluZGV4KToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OmRpZFN3YXBCdWZmZXJz
KToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OmFjcXVpcmVTY3JhdGNoQnVmZmVyKToK
KyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6Om9mZnNldEZvckluZGV4KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChVcGRhdGVBdGxhcyk6CisgICAgICAg
IChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpiaXRtYXApOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVB
dGxhczo6c2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpmbGFncyk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpnZXRBdGxhcyk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0Lmg6CisgICAgICAg
IChMYXllclRyZWVIb3N0UXQpOgorCiAyMDEyLTA0LTA3ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBh
cm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDTWFrZV0gQ2xlYW51cCBXVEYgaW5jbHVkZSBk
aXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggNmNiNWI3N2Q2ZGRmZGQ4YjM1MjlhZWNiNjky
NGI2MmYxOTk3OTFiOC4uYTI4N2RiZDQ0ZjU3YTRiNDY4NzhiMjExYTQ3MGVkNzkzYTQwOTUyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oCkBAIC01Miw3ICs1Miw2IEBAIGNsYXNzIFRleHR1cmVNYXBwZXI7CiAv
LyBBIDJEIHRleHR1cmUgdGhhdCBjYW4gYmUgdGhlIHRhcmdldCBvZiBzb2Z0d2FyZSBvciBHTCBy
ZW5kZXJpbmcuCiBjbGFzcyBCaXRtYXBUZXh0dXJlICA6IHB1YmxpYyBSZWZDb3VudGVkPEJpdG1h
cFRleHR1cmU+IHsKIHB1YmxpYzoKLSAgICBlbnVtIFBpeGVsRm9ybWF0IHsgQkdSQUZvcm1hdCwg
UkdCQUZvcm1hdCwgQkdSRm9ybWF0LCBSR0JGb3JtYXQgfTsKICAgICBlbnVtIEZsYWcgewogICAg
ICAgICBTdXBwb3J0c0FscGhhID0gMHgwMQogICAgIH07CkBAIC02Nyw4ICs2Niw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5CaXRtYXBUZXh0dXJlKCkgeyB9CiAKICAgICB2aXJ0dWFsIEludFNp
emUgc2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoSW1h
Z2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIEJpdG1hcFRleHR1cmU6OlBpeGVs
Rm9ybWF0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQq
LCBjb25zdCBJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJ
bWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0
YXJnZXQsIGNvbnN0IEludFBvaW50JiBvZmZzZXQsIGludCBieXRlc1BlckxpbmUpID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKICAgICBpbmxpbmUgRmxhZ3MgZmxh
Z3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
QmFja2luZ1N0b3JlLmNwcAppbmRleCA2YzNlMmQ4ZGZkMmMxZmQ0M2JjYTYzODhiMzY3MGZmNDIw
MDQ3ODYyLi40M2FjNzgxMGI4Y2ZmYmY4Y2QxYzM3NDhmZmJiY2QwYThlMWIxOGU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCkBAIC0yNiwxNiArMjYsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFRleHR1cmVNYXBwZXJUaWxlOjp1cGRhdGVD
b250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2UsIGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQgZm9ybWF0KQor
dm9pZCBUZXh0dXJlTWFwcGVyVGlsZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlciwgSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAg
ICAgSW50UmVjdCB0YXJnZXRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX3JlY3QpOwogICAgIHRh
cmdldFJlY3QuaW50ZXJzZWN0KGRpcnR5UmVjdCk7CiAgICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdGFyZ2V0UmVj
dDsKKyAgICBJbnRQb2ludCBzb3VyY2VPZmZzZXQgPSB0YXJnZXRSZWN0LmxvY2F0aW9uKCk7CiAK
ICAgICAvLyBOb3JtYWxpemUgc291cmNlUmVjdCB0byB0aGUgYnVmZmVyJ3MgY29vcmRpbmF0ZXMu
Ci0gICAgc291cmNlUmVjdC5tb3ZlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7Cisg
ICAgc291cmNlT2Zmc2V0Lm1vdmUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKIAog
ICAgIC8vIE5vcm1hbGl6ZSB0YXJnZXRSZWN0IHRvIHRoZSB0ZXh0dXJlJ3MgY29vcmRpbmF0ZXMu
CiAgICAgdGFyZ2V0UmVjdC5tb3ZlKC1tX3JlY3QueCgpLCAtbV9yZWN0LnkoKSk7CkBAIC00NCw3
ICs0NCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlclRpbGU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnCiAgICAgICAgIG1fdGV4dHVyZS0+cmVz
ZXQodGFyZ2V0UmVjdC5zaXplKCksIGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gQml0
bWFwVGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6IDApOwogICAgIH0KIAotICAgIG1fdGV4dHVyZS0+
dXBkYXRlQ29udGVudHMoaW1hZ2UsIHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIGZvcm1hdCk7Cisg
ICAgbV90ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZSwgdGFyZ2V0UmVjdCwgc291cmNlT2Zm
c2V0KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyVGlsZTo6cGFpbnQoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxv
YXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZUNvbnRlbnRzRnJvbUltYWdlSWZO
ZWVkZWQoVGV4dHVyZU1hcHAKICAgICBpZiAoIW1faW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIG1faW1hZ2UuZ2V0KCksIG1faW1hZ2Ut
PmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0IDogQml0
bWFwVGV4dHVyZTo6QkdSRm9ybWF0KTsKKyAgICB1cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFwcGVy
LCBtX2ltYWdlLmdldCgpKTsKICAgICBtX2ltYWdlLmNsZWFyKCk7CiB9CiAKQEAgLTEzNCwxMSAr
MTM0LDExIEBAIHZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGVPckRl
c3Ryb3lUaWxlc0lmTmVlZGVkKGNvbnN0IEZsb2F0U2l6CiAgICAgICAgIG1fdGlsZXMucmVtb3Zl
KHRpbGVJbmRpY2VzVG9SZW1vdmVbaV0pOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJUaWxlZEJh
Y2tpbmdTdG9yZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwg
SW1hZ2UqIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIHRvdGFsU2l6ZSwgY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0LCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCBmb3JtYXQpCit2b2lkIFRleHR1
cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwgSW1hZ2UqIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIHRvdGFsU2l6ZSwg
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogICAgIGNyZWF0ZU9yRGVzdHJveVRpbGVzSWZO
ZWVkZWQodG90YWxTaXplLCB0ZXh0dXJlTWFwcGVyLT5tYXhUZXh0dXJlU2l6ZSgpLCBpbWFnZS0+
Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rp
bGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX3RpbGVzW2ldLnVwZGF0ZUNvbnRlbnRzKHRleHR1
cmVNYXBwZXIsIGltYWdlLCBkaXJ0eVJlY3QsIGZvcm1hdCk7CisgICAgICAgIG1fdGlsZXNbaV0u
dXBkYXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgaW1hZ2UsIGRpcnR5UmVjdCk7CiB9CiAKIFBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjp0
ZXh0dXJlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCmluZGV4
IDAyZTg0ZjIzMzY0Y2I5ZjBiYjhhOTYwODY3M2ZmNTYxZDY5NTU4YmYuLmRmNjFiODYyNjI0YTA3
ODAyZWNiNTkyMGQ5MzFmMTczNWE3ODcxMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQgc2V0
VGV4dHVyZShCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKSB7IG1fdGV4dHVyZSA9IHRleHR1cmU7IH0K
ICAgICBpbmxpbmUgdm9pZCBzZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyBtX3JlY3Qg
PSByZWN0OyB9CiAKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqLCBJbWFn
ZSosIGNvbnN0IEludFJlY3QmLCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCk7CisgICAgdm9p
ZCB1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiwgSW1hZ2UqLCBjb25zdCBJbnRSZWN0Jik7
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFRleHR1cmVNYXBwZXIqLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYsIGZsb2F0LCBCaXRtYXBUZXh0dXJlKik7CiAgICAgdmlydHVhbCB+VGV4dHVy
ZU1hcHBlclRpbGUoKSB7IH0KIApAQCAtNjUsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBCaXRtYXBUZXh0dXJlKik7CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsKLSAgICB2
b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqLCBJbWFnZSosIGNvbnN0IEZsb2F0U2l6
ZSYsIGNvbnN0IEludFJlY3QmLCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCk7Ci0gICAgdm9p
ZCB1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1h
Z2UsIEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0IGZvcm1hdCkgeyB1cGRhdGVDb250ZW50cyh0
ZXh0dXJlTWFwcGVyLCBpbWFnZSwgaW1hZ2UtPnNpemUoKSwgaW1hZ2UtPnJlY3QoKSwgZm9ybWF0
KTsgfQorICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEltYWdlKiwgY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMo
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgSW1hZ2UqIGltYWdlKSB7IHVwZGF0ZUNvbnRl
bnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLCBpbWFnZS0+c2l6ZSgpLCBpbWFnZS0+cmVjdCgpKTsg
fQogICAgIGlubGluZSBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdChG
bG9hdFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7IH0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUpOyB9CiAgICAgdm9pZCBzZXRDb250ZW50
c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKSB7IG1faW1hZ2UgPSBpbWFnZTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmNwcAppbmRleCBiYTQ5ZmIyODIwYzRmZTNiZGVlZWNkYzY0ZTk4MTFhNjBmZDk1NzM2Li44
YTI1OTczNTQ4NTU0OWQ0YmU5MWYxYTdiNjJjYjIxYWNhZWEzMTdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmNwcApAQCAtNDA5LDEyICs0MDksMTMgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJl
c2V0KCkKICAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0ID0gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQg
c3dpenpsZUJHUkFUb1JHQkEodWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCitz
dGF0aWMgdm9pZCBzd2l6emxlQkdSQVRvUkdCQSh1aW50MzJfdCogZGF0YSwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgaW50IHN0cmlkZSA9IDApCiB7CiAgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgp
OwogICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworICAgIHN0cmlkZSA9IHN0cmlkZSB8
IHdpZHRoOwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKLSAgICAgICAg
dWludDMyX3QqIHAgPSBkYXRhICsgeSAqIHdpZHRoOworICAgICAgICB1aW50MzJfdCogcCA9IGRh
dGEgKyB5ICogc3RyaWRlOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gp
CiAgICAgICAgICAgICBwW3hdID0gKChwW3hdIDw8IDE2KSAmIDB4ZmYwMDAwKSB8ICgocFt4XSA+
PiAxNikgJiAweGZmKSB8IChwW3hdICYgMHhmZjAwZmYwMCk7CiAgICAgfQpAQCAtNDMwLDMzICs0
MzEsNjQgQEAgc3RhdGljIGJvb2wgZHJpdmVyU3VwcG9ydHNCR1JBU3dpenpsaW5nKCkKICNlbmRp
ZgogfQogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCog
ZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKK3N0YXRpYyBib29sIGRyaXZlclN1cHBv
cnRzU3ViSW1hZ2UoKQoreworI2lmIGRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQorICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgcmVsaWFibGUgZGV0ZWN0aW9uLgorICAgIHJldHVybiBmYWxzZTsK
KyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKwordm9pZCBCaXRtYXBUZXh0dXJl
R0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUpCiB7
CiAgICAgR0x1aW50IGdsRm9ybWF0ID0gR0xfUkdCQTsKICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX2lkKSkKKwogICAgIGlmIChkcml2ZXJTdXBwb3J0c0JHUkFTd2l6
emxpbmcoKSkKICAgICAgICAgZ2xGb3JtYXQgPSBHTF9CR1JBOwotICAgIGVsc2UgewotICAgICAg
ICBzd2l6emxlQkdSQVRvUkdCQShzdGF0aWNfY2FzdDx1aW50MzJfdCo+KGNvbnN0X2Nhc3Q8dm9p
ZCo+KGRhdGEpKSwgdGFyZ2V0UmVjdC5zaXplKCkpOwotICAgICAgICBnbEZvcm1hdCA9IEdMX1JH
QkE7CisgICAgZWxzZQorICAgICAgICBzd2l6emxlQkdSQVRvUkdCQShzdGF0aWNfY2FzdDx1aW50
MzJfdCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKSwgdGFyZ2V0UmVjdC5zaXplKCksIGJ5dGVz
UGVyTGluZSAvIDQpOworCisgICAgaWYgKGJ5dGVzUGVyTGluZSA9PSB0YXJnZXRSZWN0LndpZHRo
KCkgLyA0ICYmIHNvdXJjZU9mZnNldCA9PSBJbnRQb2ludDo6emVybygpKSB7CisgICAgICAgIEdM
X0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRh
cmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGds
Rm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAoY29uc3QgY2hhciopZGF0YSkpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGb3IgRVMgZHJpdmVycyB0aGF0IGRvbid0IHN1cHBvcnQg
c3ViLWltYWdlcywgdHJhbnNmZXIgdGhlIHBpeGVscyByb3ctYnktcm93LgorICAgIGlmICghZHJp
dmVyU3VwcG9ydHNTdWJJbWFnZSgpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGJpdHMgPSBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSk7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
dGFyZ2V0UmVjdC5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpyb3cg
PSBiaXRzICsgKChzb3VyY2VPZmZzZXQueSgpICsgeSkgKiBieXRlc1BlckxpbmUgKyBzb3VyY2VP
ZmZzZXQueCgpICogNCk7CisgICAgICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RF
WFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSArIHksIHRhcmdldFJl
Y3Qud2lkdGgoKSwgMSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIHJvdykpCisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRS
ZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9C
WVRFLCBkYXRhKSkKKyAgICAvLyBVc2UgdGhlIE9wZW5HTCBzdWItaW1hZ2UgZXh0ZW5zaW9uLCBu
b3cgdGhhdCB3ZSBrbm93IGl0J3MgYXZhaWxhYmxlLgorICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5Q
QUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIDQpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xf
VU5QQUNLX1NLSVBfUk9XUywgc291cmNlT2Zmc2V0LnkoKSk7CisgICAgZ2xQaXhlbFN0b3JlaShH
TF9VTlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNldC54KCkpOworICAgIEdMX0NNRChnbFRl
eFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3Qu
eSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCAoY29uc3QgY2hhciopZGF0YSkpCisgICAgZ2xQaXhlbFN0b3JlaShH
TF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJ
UF9ST1dTLCAwKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCk7
CiB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2Us
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIEJp
dG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0IGZvcm1hdCkKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjp1
cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEludFBvaW50JiBvZmZzZXQpCiB7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJu
OwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQotICAgIEdM
dWludCBnbEZvcm1hdCA9IGlzT3BhcXVlKCkgPyBHTF9SR0IgOiBHTF9SR0JBOwogICAgIE5hdGl2
ZUltYWdlUHRyIGZyYW1lSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKICAgICBpZiAoIWZyYW1lSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIGludCBieXRl
c1BlckxpbmU7CisgICAgY29uc3QgY2hhciogaW1hZ2VEYXRhOworCiAjaWYgUExBVEZPUk0oUVQp
CiAgICAgUUltYWdlIHF0SW1hZ2U7Ci0KICNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hF
Q0soNSwgMCwgMCkKICAgICAvLyBXaXRoIFFQQSwgd2UgY2FuIGF2b2lkIGEgZGVlcCBjb3B5Lgog
ICAgIHF0SW1hZ2UgPSAqZnJhbWVJbWFnZS0+aGFuZGxlKCktPmJ1ZmZlcigpOwpAQCAtNDY0LDQw
ICs0OTYsMTUgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBp
bWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY28KICAgICAvLyBUaGlzIG1pZ2h0IGJl
IGEgZGVlcCBjb3B5LCBkZXBlbmRpbmcgb24gb3RoZXIgcmVmZXJlbmNlcyB0byB0aGUgcGl4bWFw
LgogICAgIHF0SW1hZ2UgPSBmcmFtZUltYWdlLT50b0ltYWdlKCk7CiAjZW5kaWYKLQotICAgIGlm
IChJbnRTaXplKHF0SW1hZ2Uuc2l6ZSgpKSAhPSBzb3VyY2VSZWN0LnNpemUoKSkKLSAgICAgICAg
cXRJbWFnZSA9IHF0SW1hZ2UuY29weShzb3VyY2VSZWN0KTsKLSAgICBpZiAoZm9ybWF0ID09IEJH
UkFGb3JtYXQgfHwgZm9ybWF0ID09IEJHUkZvcm1hdCkgewotICAgICAgICBpZiAoZHJpdmVyU3Vw
cG9ydHNCR1JBU3dpenpsaW5nKCkpCi0gICAgICAgICAgICBnbEZvcm1hdCA9IGlzT3BhcXVlKCkg
PyBHTF9CR1IgOiBHTF9CR1JBOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzd2l6emxlQkdS
QVRvUkdCQShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocXRJbWFnZS5iaXRzKCkpLCBxdElt
YWdlLnNpemUoKSk7Ci0gICAgfQotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVS
RV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRo
KCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBxdElt
YWdlLmNvbnN0Qml0cygpKSkKLQorICAgIGltYWdlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KHF0SW1hZ2UuY29uc3RCaXRzKCkpOworICAgIGJ5dGVzUGVyTGluZSA9IHF0SW1h
Z2UuYnl0ZXNQZXJMaW5lKCk7CiAjZWxpZiBVU0UoQ0FJUk8pCi0KLSNpZiAhQ1BVKEJJR19FTkRJ
QU4pCi0jaWYgZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCi0gICAgc3dpenpsZUJHUkFUb1JH
QkEocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEoZnJhbWVJbWFnZSkpLAotICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X3N0cmlkZShmcmFtZUltYWdlKSAqIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdo
dChmcmFtZUltYWdlKSk7Ci0jZWxzZQotICAgIGdsRm9ybWF0ID0gaXNPcGFxdWUoKSA/IEdMX0JH
UiA6IEdMX0JHUkE7Ci0jZW5kaWYKKyAgICBpbWFnZURhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKGZyYW1lSW1hZ2UpOworICAgIGJ5dGVzUGVyTGluZSA9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3N0cmlkZShmcmFtZUltYWdlKTsKICNlbmRpZgogCi0gICAgZ2xQaXhlbFN0b3Jl
aShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGZy
YW1lSW1hZ2UpIC8gNCk7Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBz
b3VyY2VSZWN0LnkoKSk7Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMs
IHNvdXJjZVJlY3QueCgpKTsKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVf
MkQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0
UmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCks
IHRhcmdldFJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBnbEZvcm1h
dCwgR0xfVU5TSUdORURfQllURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2RhdGEoZnJhbWVJbWFnZSkpKTsKLSAgICBnbFBpeGVsU3RvcmVpKEdM
X1VOUEFDS19ST1dfTEVOR1RILCAwKTsKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQ
X1JPV1MsIDApOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKTsK
LSNlbmRpZgorICAgIHVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0YSwgdGFyZ2V0UmVjdCwgb2Zmc2V0
LCBieXRlc1BlckxpbmUpOworCiB9CiAKIHN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRpb25NYXRy
aXggY3JlYXRlUHJvamVjdGlvbk1hdHJpeChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGZsaXAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmgKaW5kZXggNTQ3ZmUyZjhiMTc3NmU2NzcwZWNjNzY2MmVhZmYwYWI0
MDIyOWRkMi4uYjZjNmU0MmNjYjM4OGFkZGNhMmQ5OWRmNWVmZDY4YzhkYjg2YWM2NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuaApAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRHcmFw
aGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSB7IG1fY29udGV4dCA9IGNvbnRl
eHQ7IH0KICAgICBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIHsgcmV0dXJuIG1f
Y29udGV4dDsgfQogICAgIHZpcnR1YWwgYm9vbCBpc09wZW5HTEJhY2tlZCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2b2lkIHBsYXRmb3JtVXBkYXRlQ29udGVudHMoTmF0aXZlSW1hZ2VQ
dHIsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgQml0bWFwVGV4dHVyZTo6UGl4ZWxG
b3JtYXQpOworICAgIHZvaWQgcGxhdGZvcm1VcGRhdGVDb250ZW50cyhOYXRpdmVJbWFnZVB0ciwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIEFjY2VsZXJhdGlv
bk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIE9wZW5HTE1vZGU7IH0KIAog
cHJpdmF0ZToKQEAgLTgzLDEwICs4MywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0aWFsaXpl
U3RlbmNpbCgpOwogICAgIH5CaXRtYXBUZXh0dXJlR0woKTsKICAgICB2aXJ0dWFsIHVpbnQzMl90
IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQo
KSBjb25zdCB7IHJldHVybiBHTF9URVhUVVJFXzJEOyB9CiAgICAgSW50U2l6ZSB0ZXh0dXJlU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemU7IH0KICAgICB2b2lkIHNldFRleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXApIHsgbV90ZXh0dXJlTWFwcGVyID0gdGV4bWFw
OyB9Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRSZWN0JiwgUGl4ZWxGb3JtYXQpOwotICAgIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qg
dm9pZCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBv
aW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUpOwogCiBwcml2YXRlOgogICAgIEdM
dWludCBtX2lkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcAppbmRleCBl
NTNiOWY4ZDZjMGQwNzhmZjMwMjYxMTFhZmIzOGZjMGRhZjEzNmQzLi40YzI4MTc3ZDA0NGIxNTY3
YzkxOGM3ZjI2MDAxYWE5NDVmMDgyZTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmNwcApAQCAtMjUsMTQgKzI1LDE1IEBACiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6dXBk
YXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkK
K3ZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lk
KiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291cmNl
T2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lKQogewogI2lmIFBMQVRGT1JNKFFUKQotICAgIFFJbWFn
ZSBpbWFnZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVjaGFyKj4oZGF0YSksIHRhcmdldFJlY3Qu
d2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgdGFyZ2V0UmVjdC53aWR0aCgpICogNCwgUUlt
YWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgIFFJbWFnZSBpbWFnZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVjaGFyKj4oZGF0YSksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFy
Z2V0UmVjdC5oZWlnaHQoKSwgYnl0ZXNQZXJMaW5lLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJl
bXVsdGlwbGllZCk7CisKICAgICBRUGFpbnRlciogcGFpbnRlciA9IG1faW1hZ2UtPmNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgcGFpbnRlci0+c2F2ZSgpOwogICAgIHBhaW50ZXIt
PnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0g
ICAgcGFpbnRlci0+ZHJhd0ltYWdlKHRhcmdldFJlY3QsIGltYWdlKTsKKyAgICBwYWludGVyLT5k
cmF3SW1hZ2UodGFyZ2V0UmVjdCwgaW1hZ2UsIEludFJlY3Qoc291cmNlT2Zmc2V0LCB0YXJnZXRS
ZWN0LnNpemUoKSkpOwogICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKICNlbmRpZgogfQpAQCAtNDIs
OSArNDMsOSBAQCB2b2lkIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6ZGlkUmVzZXQoKQogICAg
IG1faW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnRTaXplKCkpOwogfQogCi12b2lk
IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQaXhl
bEZvcm1hdCkKK3ZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhJ
bWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBv
ZmZzZXQpCiB7Ci0gICAgbV9pbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9y
U3BhY2VEZXZpY2VSR0IsIHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIENvbXBvc2l0ZUNvcHkpOwor
ICAgIG1faW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCB0YXJnZXRSZWN0LCBJbnRSZWN0KG9mZnNldCwgdGFyZ2V0UmVjdC5zaXplKCkpLCBDb21w
b3NpdGVDb3B5KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmJlZ2luQ2xp
cChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgKaW5kZXggMjgyNmM0Yjk2MGVh
ZTE2Y2YwMmM4Mzc5MGE3NTZkNGVhYmU1YmQyOS4uMzdjOThhYjhlOWI4NTE2YWYwMDQ0MTFkM2Y3
NGI5OWQ5ZTE5ZjE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaApAQCAt
MzQsOCArMzQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlc2V0KCk7CiAgICAg
dmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CiAgICAgaW5s
aW5lIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9pbWFnZSA/
IG1faW1hZ2UtPmNvbnRleHQoKSA6IDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVu
dHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIFBpeGVsRm9ybWF0KTsK
LSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNv
bnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVD
b250ZW50cyhjb25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2lu
dCYgc291cmNlT2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCiAgICAgdm9pZCBhcHBseUZpbHRlcnMoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAppbmRl
eCAyMzc5N2U2M2I1NDQ0NzY0ZmU4MWRhYzJlZDQzNDA0OTY1NTA2OWQyLi5kYjU5ODA3OWM1NmNm
OTdiOTBkYWFhNTlmZjIwYmFmZDQ2NTkxYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNw
cApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjp1cGRhdGVCYWNr
aW5nU3RvcmUoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpCiAgICAgaW1hZ2Ug
PSBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwogI2VuZGlmCiAKLSAg
ICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUqPihtX2JhY2tpbmdT
dG9yZS5nZXQoKSktPnVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLmdldCgpLCBt
X3NpemUsIGRpcnR5UmVjdCwgQml0bWFwVGV4dHVyZTo6QkdSQUZvcm1hdCk7CisgICAgc3RhdGlj
X2Nhc3Q8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlKj4obV9iYWNraW5nU3RvcmUuZ2V0
KCkpLT51cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFwcGVyLCBpbWFnZS5nZXQoKSwgbV9zaXplLCBk
aXJ0eVJlY3QpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAppbmRleCBjZGUzYWExNjU3MzA2MGIw
YThiZWMzNjU0YjBiZWM0M2MyZmQ0MDE3Li43ZGUxNTFlYjI2ODA4MDExN2ZjMDI2NTJhYTNiYTk3
NTNmN2IwNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0
bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcApA
QCAtMTI1LDYgKzEyNSwxNCBAQCBTaGFyZWFibGVCaXRtYXA6OlNoYXJlYWJsZUJpdG1hcChjb25z
dCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncywgUGFzc1JlZlB0cjxTaAogewogfQogCitQYXNz
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVH
cmFwaGljc0NvbnRleHQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBjcmVhdGVHcmFwaGljc0NvbnRl
eHQoKTsKKyAgICBncmFwaGljc0NvbnRleHQtPmNsaXAocmVjdCk7CisgICAgZ3JhcGhpY3NDb250
ZXh0LT50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICByZXR1cm4gZ3JhcGhpY3ND
b250ZXh0LnJlbGVhc2UoKTsKK30KKwogU2hhcmVhYmxlQml0bWFwOjp+U2hhcmVhYmxlQml0bWFw
KCkKIHsKICAgICBpZiAoIWlzQmFja2VkQnlTaGFyZWRNZW1vcnkoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9TaGFyZWFibGVCaXRtYXAuaAppbmRleCBlNWQxYTZkYzkxMmE2MTNjN2MxYWIxMjhjNWQ1
YWFlZWIwM2NhMTJhLi5mM2NkMjEzZTM0MWM5ODRiYjZhNThjY2FhOTJhNDA5ZmMwYzM4MGQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCkBAIC0xMDYsNiArMTA2LDcg
QEAgcHVibGljOgogCiAgICAgLy8gQ3JlYXRlIGEgZ3JhcGhpY3MgY29udGV4dCB0aGF0IGNhbiBi
ZSB1c2VkIHRvIHBhaW50IGludG8gdGhlIGJhY2tpbmcgc3RvcmUuCiAgICAgUGFzc093blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIFBh
c3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVHcmFwaGljc0NvbnRleHQo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogCiAgICAgLy8gUGFpbnQgdGhlIGJhY2tpbmcgc3Rv
cmUgaW50byB0aGUgZ2l2ZW4gY29udGV4dC4KICAgICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc291cmNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9VcGRhdGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmNw
cAppbmRleCBhMTVkNzE2YjEzZjM2NjUzYzRiZTA4NTQ2NWNjNTM0YmQ4MGZkMTI5Li41YmIxODk1
OTdiYjA5YzMxMmY2YWU0N2Y3NzZkNzk1Y2YzMjkyMWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1Vw
ZGF0ZUluZm8uY3BwCkBAIC00MCw2ICs0MCw3IEBAIHZvaWQgVXBkYXRlSW5mbzo6ZW5jb2RlKENv
cmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyLT5lbmNv
ZGUodXBkYXRlUmVjdHMpOwogICAgIGVuY29kZXItPmVuY29kZSh1cGRhdGVTY2FsZUZhY3Rvcik7
CiAgICAgZW5jb2Rlci0+ZW5jb2RlKGJpdG1hcEhhbmRsZSk7CisgICAgZW5jb2Rlci0+ZW5jb2Rl
KGJpdG1hcE9mZnNldCk7CiB9CiAKIGJvb2wgVXBkYXRlSW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgVXBkYXRlSW5mbyYgcmVzdWx0KQpAQCAtNjAsNiArNjEs
OCBAQCBib29sIFVwZGF0ZUluZm86OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRl
Y29kZXIsIFVwZGF0ZUluZm8mIHJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC5iaXRtYXBIYW5kbGUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LmJpdG1hcE9mZnNldCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9VcGRhdGVJbmZvLmgKaW5kZXggNDBjODZkYzVkM2VmYTAzY2I2YTRhY2YxMTc2OTVjNmI1MTM1
MzdiOS4uZTNhOGRlMjc4NDc1ZTk0YzRjZTBiMGM0NWMxOTI3Mjg2NzQ4ZGNmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvVXBkYXRlSW5mby5oCkBAIC02NSw2ICs2NSw5IEBAIHB1YmxpYzoKIAogICAgIC8v
IFRoZSBoYW5kbGUgb2YgdGhlIHNoYXJlYWJsZSBiaXRtYXAgY29udGFpbmluZyB0aGUgdXBkYXRl
cy4gV2lsbCBiZSBudWxsIGlmIHRoZXJlIGFyZSBubyB1cGRhdGVzLgogICAgIFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlIGJpdG1hcEhhbmRsZTsKKworICAgIC8vIFRoZSBvZmZzZXQgaW4gdGhlIGJp
dG1hcCB3aGVyZSB0aGUgcmVuZGVyZWQgY29udGVudHMgYXJlLgorICAgIFdlYkNvcmU6OkludFBv
aW50IGJpdG1hcE9mZnNldDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkK
aW5kZXggMGRiOTg1OWYwMGJhNTBkMmJiMTFlNGM1YjczZDYzMTE5ZDJhMzdjYi4uNTBiYzE1MDlm
Yzg2Y2RmYTVmOGY2YTc5M2NmMjhiZmE4YjhkOGE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0zNjMsNiAr
MzYzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9s
bGVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250cm9sbGVyLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oIFwKKyAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRl
eHRNZW51LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oIFwKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmggXApAQCAtMzcwLDYgKzM3MSw3IEBAIEhFQURF
UlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViVW5kb1N0ZXAuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RR
dC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvbm5lY3Rpb25Ub1VJUHJvY2Vzcy5oIFwKICAgICBX
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBcCiAgICAgV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5k
bGUuaCBcCkBAIC03MjksNiArNzMxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92
ZXJsYXkuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXll
clRyZWVIb3N0UHJveHkuY3BwCmluZGV4IGMyZjYxNjAyOTZiMDA3Mzg5YmViODUzNDdhZjM3ZjRj
NzMwYzJhMjQuLmFiNjIwMjk5Mzg0ZjA5NGZiODQ0Mzg0NDc2MzFkZDVjMGZkZmZmMGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC03
OCw3ICs3OCw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIo
aW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpCiAgICAgSW50UmVjdCBzb3VyY2VS
ZWN0ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0cy5maXJzdCgpOwogICAgIEludFJlY3QgdGFyZ2V0
UmVjdCA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kczsKICAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSh1cGRhdGVJbmZvLmJpdG1h
cEhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgc291cmNlUmVj
dCwgdGFyZ2V0UmVjdCwgYml0bWFwKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRp
bGVJRCwgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUoc291cmNlUmVjdCwgdGFyZ2V0
UmVjdCwgYml0bWFwLCB1cGRhdGVJbmZvLmJpdG1hcE9mZnNldCkpKTsKIH0KIAogdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5k
ZXJlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIu
Y3BwCmluZGV4IDdlMzI3MzY3MDg2MmU4ZTI0M2FlY2Y5OWI2ZGJkOTNjYTlmYmY4MDcuLjAxMjg5
ZDZhYWYwOGRhZWFjZDE5NDRiMGIzMTc4YjFlMzI4MzM2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcApAQCAtMjkzLDExICsyOTMs
MTAgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxh
eWVySUQsIGludCB0aWxlSUQpCiAgICAgZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpLT5yZW1vdmVU
aWxlKHRpbGVJRCk7CiB9CiAKLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUo
V2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
d2Vha0JpdG1hcCkKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUoV2ViTGF5
ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRhdGUpCiB7Ci0g
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gd2Vha0JpdG1hcDsKICAgICBSZWZQ
dHI8TGF5ZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGdldEJhY2tpbmdTdG9yZShsYXll
cklEKTsKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCBzb3VyY2VSZWN0LCB0
YXJnZXRSZWN0LCBiaXRtYXAuZ2V0KCkpOworICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0
aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0LCB1cGRhdGUudGFyZ2V0UmVjdCwgdXBkYXRlLmJpdG1h
cCwgdXBkYXRlLm9mZnNldCk7CiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
LmFkZChiYWNraW5nU3RvcmUpOwogfQogCkBAIC0zMDUsOCArMzA0LDggQEAgdm9pZCBXZWJMYXll
clRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBQYXNzUmVmUHRyPFNo
YXJlYWJsZUJpdG0KIHsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFr
Qml0bWFwOwogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAg
YmFja2luZ1N0b3JlLT51cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1h
cC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSwgQml0bWFwVGV4dHVyZTo6QkdSQUZvcm1hdCk7CiAgICAg
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7Cisg
ICAgYmFja2luZ1N0b3JlLT51cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJp
dG1hcC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSk7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCmluZGV4IGE3ZjhhY2RhYWMyNTRmMjliODEy
MTM3NDk3MDg2OTA4YmMxYjU5NjMuLjkyZGNlNTllODFkYmZlNjc2ZDFiM2MzYmE5Yjk2MmMzNTM2
ZTIzMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5k
ZXJlci5oCkBAIC00NSw2ICs0NSwxOSBAQCBjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CiAKIGNs
YXNzIFdlYkxheWVyVHJlZVJlbmRlcmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdl
YkxheWVyVHJlZVJlbmRlcmVyPiwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQg
ewogcHVibGljOgorICAgIHN0cnVjdCBUaWxlVXBkYXRlIHsKKyAgICAgICAgV2ViQ29yZTo6SW50
UmVjdCBzb3VyY2VSZWN0OworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3Q7Cisg
ICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcDsKKyAgICAgICAgV2ViQ29yZTo6
SW50UG9pbnQgb2Zmc2V0OworICAgICAgICBUaWxlVXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0LCBQYXNzUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gbmV3Qml0bWFwLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbmV3T2Zm
c2V0KQorICAgICAgICAgICAgOiBzb3VyY2VSZWN0KHNvdXJjZSkKKyAgICAgICAgICAgICwgdGFy
Z2V0UmVjdCh0YXJnZXQpCisgICAgICAgICAgICAsIGJpdG1hcChuZXdCaXRtYXApCisgICAgICAg
ICAgICAsIG9mZnNldChuZXdPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CiAg
ICAgV2ViTGF5ZXJUcmVlUmVuZGVyZXIoTGF5ZXJUcmVlSG9zdFByb3h5Kik7CiAgICAgdmlydHVh
bCB+V2ViTGF5ZXJUcmVlUmVuZGVyZXIoKTsKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsK
QEAgLTYyLDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycyhj
b25zdCBXZWJMYXllckluZm8mKTsKICAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50
LCBmbG9hdCBzY2FsZSk7CiAgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7Ci0g
ICAgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4p
OworICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUm
KTsKICAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7CiAgICAgdm9pZCBjcmVhdGVJbWFnZShp
bnQ2NF90LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4pOwogICAgIHZvaWQgZGVzdHJveUlt
YWdlKGludDY0X3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xh
eWVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJh
Y2tpbmdTdG9yZS5jcHAKaW5kZXggM2Y4YThjODkyMjFhZDg0OTIyYmM1MzcyNGEyN2ZiZGM2ODI5
YTMyNy4uZmVlMGM5MDYyMjBmNDE4ZGE1M2QxYjFjNGIzM2VmM2E4MWY1MDAwOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCkBAIC0y
Myw4ICsyMyw3IEBACiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLQotI2luY2x1ZGUgInN0
ZGlvLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCkBAIC01MCwxOCArNDksMTcgQEAgdm9pZCBMYXllckJhY2tpbmdTdG9yZVRpbGU6
OnN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiAgICAg
fQogCiAgICAgUUltYWdlIHFJbWFnZSA9IG1fYmFja0J1ZmZlci0+Y3JlYXRlUUltYWdlKCk7Ci0K
ICAgICBpZiAoc2hvdWxkUmVzZXQpCiAgICAgICAgIHRleHR1cmUtPnJlc2V0KG1fc291cmNlUmVj
dC5zaXplKCksIHFJbWFnZS5oYXNBbHBoYUNoYW5uZWwoKSA/IEJpdG1hcFRleHR1cmU6OlN1cHBv
cnRzQWxwaGEgOiAwKTsKLQotICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHFJbWFnZS5jb25z
dEJpdHMoKSwgbV9zb3VyY2VSZWN0KTsKKyAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhxSW1h
Z2UuY29uc3RCaXRzKCksIG1fc291cmNlUmVjdCwgbV9iaXRtYXBPZmZzZXQsIHFJbWFnZS5ieXRl
c1BlckxpbmUoKSk7CiAgICAgbV9iYWNrQnVmZmVyLmNsZWFyKCk7CiB9CiAKLXZvaWQgTGF5ZXJC
YWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNvdXJjZVJlY3QsIFNoYXJlYWJsZUJp
dG1hcCogYnVmZmVyKQordm9pZCBMYXllckJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tCdWZmZXIo
Y29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGFz
c1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkK
IHsKICAgICBtX3NvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwogICAgIG1fdGFyZ2V0UmVjdCA9IHRh
cmdldFJlY3Q7CisgICAgbV9iaXRtYXBPZmZzZXQgPSBvZmZzZXQ7CiAgICAgbV9iYWNrQnVmZmVy
ID0gYnVmZmVyOwogfQogCkBAIC03NiwxMSArNzQsMTIgQEAgdm9pZCBMYXllckJhY2tpbmdTdG9y
ZTo6cmVtb3ZlVGlsZShpbnQgaWQpCiAgICAgbV90aWxlc1RvUmVtb3ZlLmFwcGVuZChpZCk7CiB9
CiAKLXZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUoaW50IGlkLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBTaGFyZWFibGVCaXRt
YXAqIGJhY2tCdWZmZXIpCisKK3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUoaW50
IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYmFja0J1ZmZlciwgY29uc3QgSW50UG9pbnQm
IG9mZnNldCkKIHsKICAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3RpbGVzLmVu
ZCgpKTsKLSAgICBpdC0+c2Vjb25kLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVj
dCwgYmFja0J1ZmZlcik7CisgICAgaXQtPnNlY29uZC5zZXRCYWNrQnVmZmVyKHRhcmdldFJlY3Qs
IHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gTGF5ZXJCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaAppbmRleCBmMDhiMTQ0ODdl
MGRkMjZhNmU2MjI2MGFiNTUwNTkxNWE3M2UzM2U3Li5hMjQxZTRjMTdkMGVjMGEyNTU4OGJmOGRm
YWIwN2QwMmFjM2Q3MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
TGF5ZXJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5
ZXJCYWNraW5nU3RvcmUuaApAQCAtMzksMTIgKzM5LDEzIEBAIHB1YmxpYzoKIAogICAgIGlubGlu
ZSBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KICAgICB2b2lkIHN3YXBC
dWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAgICB2b2lkIHNldEJhY2tCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBTaGFyZWFi
bGVCaXRtYXAqIGJ1ZmZlcik7CisgICAgdm9pZCBzZXRCYWNrQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKIAogcHJpdmF0ZToKICAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2JhY2tCdWZmZXI7CiAgICAgV2ViQ29yZTo6SW50
UmVjdCBtX3NvdXJjZVJlY3Q7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3RhcmdldFJlY3Q7Cisg
ICAgV2ViQ29yZTo6SW50UG9pbnQgbV9iaXRtYXBPZmZzZXQ7CiAgICAgZmxvYXQgbV9zY2FsZTsK
IH07CiAKQEAgLTUyLDcgKzUzLDcgQEAgY2xhc3MgTGF5ZXJCYWNraW5nU3RvcmUgOiBwdWJsaWMg
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CiBwdWJsaWM6CiAgICAgdm9pZCBj
cmVhdGVUaWxlKGludCwgZmxvYXQpOwogICAgIHZvaWQgcmVtb3ZlVGlsZShpbnQpOwotICAgIHZv
aWQgdXBkYXRlVGlsZShpbnQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgU2hhcmVhYmxlQml0bWFwKik7CisgICAgdm9pZCB1cGRhdGVUaWxlKGludCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBMYXllckJhY2tpbmdTdG9yZSk7IH0KICAgICB2b2lkIGNvbW1pdFRpbGVPcGVyYXRp
b25zKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkJp
dG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCmlu
ZGV4IDBmNmY4MTNkODkwOWI0MDZmMGRjOWY4Yjg1MWNmM2Q2YWMxMmFmMGEuLmRhYzQwMzU0MTBj
NDMwNjhmNDIzZDgwZWE5NTkwMTA5ZjZhYWFlNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNw
cApAQCAtNTYyLDggKzU2MiwxMyBAQCBJbnRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlVmlzaWJsZVJlY3QoKQogQ29sb3IgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBjb250ZW50c09w
YXF1ZSgpID8gQ29sb3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OworfQogCitQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gV2ViR3JhcGhpY3NMYXllcjo6YmVnaW5Db250
ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCit7CisgICAgcmV0dXJu
IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKHNpemUsIGNvbnRl
bnRzT3BhcXVlKCkgPyAwIDogU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhLCBoYW5kbGUs
IG9mZnNldCk7CiB9CisKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZShpbnQgdGls
ZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQogewogICAgIG1fd2ViR3JhcGhpY3NM
YXllckNsaWVudC0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGlj
c0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdy
YXBoaWNzTGF5ZXIuaAppbmRleCA1NDNjNDY1MGNhODk5YWQwNzY2ZmJhYWJkOWE2NzhjODdhNTE5
MTJlLi40NTQ4NmNkZmEzNDQxNzM5MjY0ZWI4ZjFjNmI5MDY4NTEyYmEyZGM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdy
YXBoaWNzTGF5ZXIuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIoY29uc3QgV2ViTGF5ZXJJbmZvJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyKikgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVh
YmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQ
b2ludCYpID0gMDsKIH07CiB9CiAKQEAgLTEzMiw2ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZv
Jik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0
OjpVcGRhdGVJbmZvJik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50IHRpbGVJRCk7
CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5D
b250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJLaXQ6OlNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKIAogICAgIHZvaWQgc2V0V2ViR3Jh
cGhpY3NMYXllckNsaWVudChXZWJLaXQ6OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmNwcAppbmRleCBlZTExNmMyZTliNGVmM2M3MDhlZjBl
NjI4ZjdhYTM0MTFlZTI1N2RjLi5hZWI2ZWJjYmJiNThjNGE3NDA1M2VjODU3ODBhYzNmMDIyZmRl
YmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmNwcApAQCAtNzIsMTkgKzcyLDIw
IEBAIFZlY3RvcjxJbnRSZWN0PiBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OnVwZGF0ZUJh
Y2tCdWZmZXIoKQogICAgIGlmICghaXNEaXJ0eSgpKQogICAgICAgICByZXR1cm4gVmVjdG9yPElu
dFJlY3Q+KCk7CiAKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShtX2RpcnR5UmVjdC5zaXplKCksIG1fdGlsZWRCYWNr
aW5nU3RvcmUtPnN1cHBvcnRzQWxwaGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBo
YSA6IDApOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dChiaXRt
YXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAgICBVcGRhdGVJbmZvIHVwZGF0ZUluZm87
CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9jbGllbnQt
PmJlZ2luQ29udGVudFVwZGF0ZShtX2RpcnR5UmVjdC5zaXplKCksIHVwZGF0ZUluZm8uYml0bWFw
SGFuZGxlLCB1cGRhdGVJbmZvLmJpdG1hcE9mZnNldCk7CisgICAgaWYgKCFncmFwaGljc0NvbnRl
eHQpCisgICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKICAgICBncmFwaGljc0NvbnRl
eHQtPnRyYW5zbGF0ZSgtbV9kaXJ0eVJlY3QueCgpLCAtbV9kaXJ0eVJlY3QueSgpKTsKICAgICBn
cmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250
ZW50c1NjYWxlKCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkpOwogICAg
IG1fdGlsZWRCYWNraW5nU3RvcmUtPmNsaWVudCgpLT50aWxlZEJhY2tpbmdTdG9yZVBhaW50KGdy
YXBoaWNzQ29udGV4dC5nZXQoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyht
X2RpcnR5UmVjdCkpOwogCi0gICAgVXBkYXRlSW5mbyB1cGRhdGVJbmZvOwogICAgIHVwZGF0ZUlu
Zm8udXBkYXRlUmVjdEJvdW5kcyA9IG1fcmVjdDsKICAgICBJbnRSZWN0IHVwZGF0ZVJlY3QgPSBt
X2RpcnR5UmVjdDsKICAgICB1cGRhdGVSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgp
KTsKICAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RzLmFwcGVuZCh1cGRhdGVSZWN0KTsKICAgICB1
cGRhdGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yID0gbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVu
dHNTY2FsZSgpOwotICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKHVwZGF0ZUluZm8uYml0bWFwSGFu
ZGxlKTsKKyAgICBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwogCiAgICAgc3RhdGljIGludCBp
ZCA9IDA7CiAgICAgaWYgKCFtX0lEKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgKaW5k
ZXggMTJiMmUwNjAyYjRiZTAyYzFlOTRmOGZkMDhiMjgzMWQ3MTg5NWJmMy4uZGZjMjUyZTY5MDI2
MDZiNzc3YmIwNTk2NmFiZDVjNDgxYWI0OGFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGUuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAK
KyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJUaWxlLmgiCiAjaW5jbHVk
ZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJXZWJDb3JlL0ludFJlY3QuaCIKQEAg
LTc4LDYgKzc5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0
aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRp
bGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVGlsZShpbnQgdGlsZUlEKSA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAw
OwogfTsKIAogY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZCA6IHB1Ymxp
YyBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJmYTdk
N2ZhZmVmNGNlYTVhMDU4YjQ1OGUwMGM0NGI3OWYyMjBmNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKQEAgLTAsMCAr
MSwxMzYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKworI2lmIFVTRShVSV9TSURF
X0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKGlu
dCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MpCisgICAgOiBtX2ZsYWdz
KGZsYWdzKQoreworICAgIG1fYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFi
bGUoSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbiksIGZsYWdzKTsKK30KKworc3RhdGljIGlu
dCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtYmVyKQoreworICAgIC8vIFRoaXMgaXMgYSBmYXN0IHRy
aWNrIHRvIGdldCBuZXh0UG93ZXJPZlR3byBmb3IgYW4gaW50ZWdlci4KKyAgICAtLW51bWJlcjsK
KyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiAyOwor
ICAgIG51bWJlciB8PSBudW1iZXIgPj4gNDsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDg7Cisg
ICAgbnVtYmVyIHw9IG51bWJlciA+PiAxNjsKKyAgICBudW1iZXIrKzsKKyAgICByZXR1cm4gbnVt
YmVyOworfQorCit2b2lkIFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKK3sKKyAg
ICBpZiAoIW1fbGF5b3V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhdGlj
IGNvbnN0IGludCBNaW5UaWxlU2l6ZSA9IDMyOworICAgIHN0YXRpYyBjb25zdCBpbnQgTWF4VGls
ZVNpemUgPSA1MTI7CisKKyAgICAvLyBEaXZpZGUgb3VyIHNxdWFyZSB0byBzcXVhcmUgcG93ZXIt
b2YtdHdvIGJveGVzLgorICAgIGZvciAoaW50IGN1cnNvciA9IDA7IGN1cnNvciA8IHNpemUoKS53
aWR0aCgpOyApIHsKKyAgICAgICAgaW50IHJlbWFpbmRlciA9IHNpemUoKS53aWR0aCgpIC0gY3Vy
c29yOworICAgICAgICBpbnQgZGltZW5zaW9uID0gc3RkOjptaW4ocmVtYWluZGVyLCBzdGQ6Om1p
bihNYXhUaWxlU2l6ZSwgc3RkOjptYXgoTWluVGlsZVNpemUsIG5leHRQb3dlck9mVHdvKHJlbWFp
bmRlciAvIDIpKSkpOworICAgICAgICBjdXJzb3IgKz0gZGltZW5zaW9uOworICAgICAgICBtX2xh
eW91dC5hcHBlbmQoZGltZW5zaW9uKTsKKyAgICB9CisKKyAgICBtX2J1ZmZlclN0YXRlcy5yZXNp
emUobV9sYXlvdXQuc2l6ZSgpICogbV9sYXlvdXQuc2l6ZSgpKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1fYnVmZmVyU3RhdGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX2J1ZmZlclN0YXRl
c1tpXSA9IEF2YWlsYWJsZTsKK30KKworaW50IFVwZGF0ZUF0bGFzOjpmaW5kQXZhaWxhYmxlSW5k
ZXgoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgZGltZW5zaW9uID0g
bV9sYXlvdXQuc2l6ZSgpOworICAgIGludCBzdHJpZGUgPSBkaW1lbnNpb247CisgICAgaW50IHJl
cXVpcmVkRGltZW5zaW9uID0gc3RkOjptYXgoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsK
KworICAgIC8vIEJlZ2luIGZyb20gdGhlIHNtYWxsZXN0IGJ1ZmZlciwgdW50aWwgd2UgcmVhY2gg
dGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBidWZmZXIgdGhhdCdzIGJpZyBlbm91Z2ggdG8gY29udGFp
biBvdXIgcmVjdC4KKyAgICBmb3IgKGludCBpID0gbV9idWZmZXJTdGF0ZXMuc2l6ZSgpIC0gMTsg
aSA+PSAwOyBpIC09IChkaW1lbnNpb24gKyAxKSwgLS1zdHJpZGUpIHsKKyAgICAgICAgLy8gTmVl
ZCBhIGJpZ2dlciBidWZmZXIuCisgICAgICAgIGlmIChtX2xheW91dFtpIC8gZGltZW5zaW9uXSA8
IHJlcXVpcmVkRGltZW5zaW9uKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8g
Q2hlY2sgYWxsIGJ1ZmZlcnMgb2YgY3VycmVudCBzaXplLCB0byBmaW5kIGFuIGF2YWlsYWJsZSBv
bmUuCisgICAgICAgIGZvciAoaW50IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0cmlkZTsgKytvZmZz
ZXQpIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGkgLSBvZmZzZXQ7CisgICAgICAgICAgICBp
ZiAobV9idWZmZXJTdGF0ZXNbaW5kZXhdID09IEF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3Zv
aWQgVXBkYXRlQXRsYXM6OmRpZFN3YXBCdWZmZXJzKCkKK3sKKyAgICBidWlsZExheW91dElmTmVl
ZGVkKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2J1ZmZlclN0YXRlcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgbV9idWZmZXJTdGF0ZXNbaV0gPSBBdmFpbGFibGU7Cit9CisKK1Bhc3NPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxl
QnVmZmVyKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIEludFBvaW50JiBvZmZzZXQpCit7
CisgICAgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworICAgIGludCBpbmRleCA9IGZpbmRBdmFpbGFi
bGVJbmRleChzaXplKTsKKworICAgIC8vIE5vIGF2YWlsYWJsZSBidWZmZXIgd2FzIGZvdW5kLCBy
ZXR1cm5pbmcgbnVsbC4KKyAgICBpZiAoaW5kZXggPCAwKQorICAgICAgICByZXR1cm4gUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7CisKKyAgICAvLyBGSVhNRTogVXNlIHRyaS1zdGF0ZSBi
dWZmZXJzLCB0byBhbGxvdyBmYXN0ZXIgdXBkYXRlcy4KKyAgICBtX2J1ZmZlclN0YXRlc1tpbmRl
eF0gPSBUYWtlbjsKKyAgICBvZmZzZXQgPSBvZmZzZXRGb3JJbmRleChpbmRleCk7CisgICAgSW50
UmVjdCByZWN0KEludFBvaW50Ojp6ZXJvKCksIHNpemUpOworICAgIE93blB0cjxHcmFwaGljc0Nv
bnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQo
SW50UmVjdChvZmZzZXQsIHNpemUpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0
KHJlY3QsIChmbGFncygpICYgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKSA/IENvbG9y
Ojp0cmFuc3BhcmVudCA6IENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
Z3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zl
cik7CisgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Cit9CisKK0ludFBvaW50
IFVwZGF0ZUF0bGFzOjpvZmZzZXRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgSW50
UG9pbnQgY29vcmQoaW5kZXggJSBtX2xheW91dC5zaXplKCksIGluZGV4IC8gbV9sYXlvdXQuc2l6
ZSgpKTsKKyAgICBpbnQgeCA9IDA7CisgICAgaW50IHkgPSAwOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY29vcmQueCgpOyArK2kpCisgICAgICAgIHggKz0gbV9sYXlvdXRbaV07CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb29yZC55KCk7ICsraSkKKyAgICAgICAgeSArPSBtX2xheW91dFtp
XTsKKworICAgIHJldHVybiBJbnRQb2ludCh4LCB5KTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmNlZjNlOWMxZDAyY2Y5OTc4YmJiMGZiODc0ZDBhOTFlNjA0ZjA5ZjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaApAQCAt
MCwwICsxLDY0IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBVcGRhdGVBdGxhc19oCisjZGVmaW5lIFVwZGF0ZUF0bGFzX2gKKworI2luY2x1ZGUgIlNo
YXJlYWJsZUJpdG1hcC5oIgorCisjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRSZWN0OworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVXBkYXRlQXRsYXMgeworcHVibGljOgorICAg
IFVwZGF0ZUF0bGFzKGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOworCisg
ICAgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFw
OyB9CisgICAgaW5saW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Yml0bWFwLT5zaXplKCk7IH0KKworICAgIC8vIFJldHVybnMgYSBudWxsIHBvaW50ZXIgb2YgdGhl
cmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlci4KKyAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dD4gYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KTsKKyAgICB2b2lkIGRpZFN3YXBC
dWZmZXJzKCk7CisgICAgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0
dXJuIG1fZmxhZ3M7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGJ1aWxkTGF5b3V0SWZOZWVkZWQo
KTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBvZmZzZXRGb3JJbmRleChpbnQpIGNvbnN0OworICAg
IGludCBmaW5kQXZhaWxhYmxlSW5kZXgoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworCitwcml2
YXRlOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBBdmFpbGFibGUsCisgICAgICAgIFRha2Vu
CisgICAgfTsKKworICAgIFZlY3RvcjxTdGF0ZT4gbV9idWZmZXJTdGF0ZXM7CisgICAgVmVjdG9y
PGludD4gbV9sYXlvdXQ7CisgICAgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBtX2ZsYWdzOworICAg
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYml0bWFwOworfTsKKworfQorI2VuZGlmCisjZW5k
aWYgLy8gVXBkYXRlQXRsYXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAppbmRleCBjYTc0ZjExNDBiMmI1ODU5
Zjc1MTkxN2Y4OGFjOTAyNTdjY2NhNDQzLi42NWFjNTIxY2NhNjkxYTNhYWQxMzc5NGM0OWViNTFj
OWZkMjIyNjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCiAjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CkBAIC0zMjksOSArMzMwLDkgQEAgaW50NjRf
dCBMYXllclRyZWVIb3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQog
ICAgICAgICByZXR1cm4ga2V5OwogICAgIH0KIAotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCks
IGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0
c0FscGhhIDogMCk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50
RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwog
ICAgIHsKLSAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3ND
b250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVh
dGVHcmFwaGljc0NvbnRleHQoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBiaXRtYXAtPnNpemUo
KSkpOwogICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgSW50UG9pbnQ6Onplcm8oKSk7CiAgICAgfQogCkBAIC00NTEsNiArNDUyLDgg
QEAgdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSgpCiB7CiAgICAgbV93YWl0
aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7CiAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fdXBkYXRlQXRsYXNlc1tpXS5kaWRTd2FwQnVmZmVycygpOwogfQogCiBib29sIExheWVyVHJl
ZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKQEAgLTQ2NSw2ICs0
NjgsMzIgQEAgdm9pZCBMYXllclRyZWVIb3N0UXQ6OnB1cmdlQmFja2luZ1N0b3JlcygpCiAgICAg
ICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKIAogICAgIEFTU0VSVCghbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkpOworICAgIG1fdXBkYXRlQXRsYXNlcy5j
bGVhcigpOworfQorCitVcGRhdGVBdGxhcyYgTGF5ZXJUcmVlSG9zdFF0OjpnZXRBdGxhcyhTaGFy
ZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV91
cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3VwZGF0ZUF0bGFzZXNb
aV0uZmxhZ3MoKSA9PSBmbGFncykKKyAgICAgICAgICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXNb
aV07CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9
IDIwMDA7CisgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChVcGRhdGVBdGxhcyhTY3JhdGNoQnVm
ZmVyRGltZW5zaW9uLCBmbGFncykpOworICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgp
OworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlSG9z
dFF0OjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hh
cmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRs
ZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBVcGRhdGVBdGxhcyYgYXRsYXMg
PSBnZXRBdGxhcyhmbGFncyk7CisgICAgaWYgKCFhdGxhcy5iaXRtYXAoKS0+Y3JlYXRlSGFuZGxl
KGhhbmRsZSkpCisgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dD4oKTsKKworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBh
dmFpbGFibGUgYnVmZmVyLgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdy
YXBoaWNzQ29udGV4dCA9IGF0bGFzLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihzaXpl
LCBvZmZzZXQpOworICAgIGlmICghZ3JhcGhpY3NDb250ZXh0KQorICAgICAgICByZXR1cm4gUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KCk7CisKKyAgICByZXR1cm4gZ3JhcGhp
Y3NDb250ZXh0LnJlbGVhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0
LmgKaW5kZXggMDhmMGU2NGI3NGIzZDEzZGMxZjRiYjZmNzViYmI0MWVmZmYwNTU5Zi4uZDA2MDFm
ZWU2NTIwZDFlN2E1NWQ2YjI1MTQ2MjI3OWIxYjcyMWMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaApAQCAtMjMs
NiArMjMsNyBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJMYXll
clRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJVcGRhdGVBdGxhcy5o
IgogI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzTGF5ZXJDbGllbnQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC03NSw2ICs3Niw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyKik7CiAKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNo
YXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6
SW50UG9pbnQmKTsKKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3RRdChX
ZWJQYWdlKik7CiAKQEAgLTk0LDYgKzk3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1T
Y2hlZHVsZWRMYXllckZsdXNoKCk7CiAgICAgdm9pZCBzZW5kTGF5ZXJzVG9VSSgpOwogCisgICAg
VXBkYXRlQXRsYXMmIGdldEF0bGFzKFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOworCiAgICAgT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwogCiAgICAgLy8gVGhlIGxh
eWVyIHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgpAQCAtMTA0LDYg
KzEwOSw3IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+IG1fZGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHM7CisgICAgVmVjdG9yPFVwZGF0ZUF0bGFzPiBt
X3VwZGF0ZUF0bGFzZXM7CiAKICAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZs
dXNoOwogICAgIGJvb2wgbV9pc1ZhbGlkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136286</attachid>
            <date>2012-04-09 12:37:59 -0700</date>
            <delta_ts>2012-04-09 20:02:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83424-20120409123756.patch</filename>
            <type>text/plain</type>
            <size>50542</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQyYmU1NWMwYzA4MmM5
Y2NmMTJhNjdkMWI3ZDBhZTgwZDUxOWQ4OS4uY2RhYjJmZjE0ZGI3MWYxOGI2YWI5NjA4MDI4ZGI4
NDgwN2M2MDI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA0LTA3ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1dLMl0g
RW5hYmxlIHVzaW5nIGEgc2luZ2xlIFNoYXJlYWJsZUJpdG1hcCBmb3IgbXVsdGlwbGUgdXBkYXRl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM0MjQK
KworICAgICAgICBNb2RpZnkgQml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMgdG8gaW5jbHVk
ZSBhIHNvdXJjZSBvZmZzZXQuCisgICAgICAgIFRoaXMgYWxsb3dzIHVzIHRvIHVwZGF0ZSBhIHRl
eHR1cmUgZnJvbSBhIHN1Yi1pbWFnZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOb2JvZHkgKE9P
UFMhKQorCisgICAgICAgIFRlc3RlZCBieSBleGlzdGluZyBBUEkgdGVzdHMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoQml0
bWFwVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OmRyaXZlclN1cHBvcnRzQkdSQVN3aXp6bGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnRleHR1cmVUYXJnZXQpOgorICAgICAgICAoQml0bWFw
VGV4dHVyZUdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVJbWFn
ZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKEJpdG1hcFRleHR1cmVJ
bWFnZUJ1ZmZlcik6CisKIDIwMTItMDQtMDcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW0NNYWtlXSBDbGVhbnVwIFdURiBpbmNsdWRlIGRpcmVjdG9y
aWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggYjc0YTMzMGVhNmE3MWVhNzdkNTdjMGI3ZGVlMDkyZDYyZTFlNGM1
Yi4uOTI0OTFhZTBiNjNlZDQ3ZDMxMmJkOGU5M2U4MDJjNTk0MGYzYzJhYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDg1IEBACisyMDEyLTA0LTA3ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2Vu
dGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1dLMl0gRW5hYmxlIHVzaW5nIGEgc2luZ2xlIFNo
YXJlYWJsZUJpdG1hcCBmb3IgbXVsdGlwbGUgdXBkYXRlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM0MjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
b2JvZHkgKE9PUFMhKQorCisgICAgICAgIEVuYWJsZWQgY3JlYXRpbmcgYSBHcmFwaGljc0NvbnRl
eHQgdGhhdCByZWZlcmVuY2VzIGEgcmVjdCBpbnNpZGUgU2hhcmVhYmxlQml0bWFwLgorICAgICAg
ICBBZGRlZCBiaXRtYXBPZmZzZXQgdG8gVXBkYXRlSW5mbywgdG8gYWxsb3cgdXBkYXRlcyB0byBy
ZWZlcmVuY2UgYW4gb2Zmc2V0IGluc2lkZSB0aGUgYml0bWFwLgorICAgICAgICBBZGRlZCBVcGRh
dGVBdGxhcywgYSBjbGFzcyB0aGF0IG1hbmFnZXMgYXZhaWxhYmxlIHJlY3RzIGluIGEgbGFyZ2Vy
IFNoYXJlYWJsZUJpdG1hcC4KKworICAgICAgICBJbiB0aGlzIGl0ZXJhdGlvbiwgVXBkYXRlQXRs
YXMgaGFzIGEgc2ltcGxlIGJlaGF2aW9yIHdoZXJlIGEgcmVjdCBpbnNpZGUgdGhlIGJpdG1hcCBp
cworICAgICAgICBlaXRoZXIgYXZhaWxhYmxlIG9yIHVzZWQuIFdoZW4gdGhlIGJ1ZmZlcnMgYXJl
IHN3YXBwZWQsIGFsbCB1c2VkIGJ1ZmZlcnMgYmVjb21lIGF2YWlsYWJsZQorICAgICAgICBhZ2Fp
bi4gQSBmdXR1cmUgZW5oYW5jZW1lbnQgbWlnaHQgYWxsb3cgdHJpcGxlLWJ1ZmZlcmluZywgd2hl
cmUgYXZhaWxhYmxlIHJlY3RzIGNhbiBiZQorICAgICAgICB1cGRhdGVkIHdoaWxlIG90aGVyIHJl
Y3RzIGZyb20gdGhlIHNhbWUgYXRsYXMgYXJlIGluIHVzZS4KKworICAgICAgICBBZGRlZCB0aGUg
bmVjZXNzYXJ5IHBsdW1iaW5nIHRvIGFsbG93IFF0J3MgVUktc2lkZSBjb21wb3NpdGluZyB0byB0
YWtlIGFkdmFudGFnZSBvZgorICAgICAgICBVcGRhdGVBdGxhcy4gTGF5ZXJUcmVlSG9zdFF0IGNy
ZWF0ZXMgYW4gYXRsYXMgcGVyIHR5cGUgb2YgYml0bWFwIChpLmUuIG9uZSBvcGFxdWUgYW5kIG9u
ZQorICAgICAgICBhbHBoYS1lbmFibGVkIGF0bGFzKS4gV2hlbiBhIHRpbGUgd2FudHMgdG8gdXBk
YXRlIGFuZCB0aGVyZSdzIG5vIGF2YWlsYWJsZSBzY3JhdGNoLWJ1ZmZlciwKKyAgICAgICAgdGhl
IHVwZGF0ZSB3b3VsZCBiZSBwb3N0cG9uZWQgdG8gdGhlIG5leHQgZnJhbWUsIGNyZWF0aW5nIGEg
dGlsaW5nLWFydGlmYWN0IGluIGxvdyBtZW1vcnkKKyAgICAgICAgc2l0dWF0aW9ucy4KKworICAg
ICAgICAqIFNoYXJlZC9VcGRhdGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlSW5m
bzo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlSW5mbzo6ZGVjb2RlKToKKyAgICAg
ICAgKiBTaGFyZWQvVXBkYXRlSW5mby5oOgorICAgICAgICAoVXBkYXRlSW5mbyk6CisgICAgICAg
ICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5
ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oOgorICAgICAgICAoVGlsZVVwZGF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlOjpU
aWxlVXBkYXRlKToKKyAgICAgICAgKFdlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXll
ckJhY2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJC
YWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJC
YWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJh
Y2tpbmdTdG9yZS5oOgorICAgICAgICAoTGF5ZXJCYWNraW5nU3RvcmVUaWxlKToKKyAgICAgICAg
KExheWVyQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5o
OgorICAgICAgICAoV2ViR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChXZWJHcmFwaGlj
c0xheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVU
aWxlOjp1cGRhdGVCYWNrQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmg6CisgICAgICAgIChUaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGVDbGllbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxh
cy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRl
QXRsYXM6OlVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6bmV4dFBvd2VyT2ZUd28pOgor
ICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpmaW5kQXZhaWxhYmxlSW5kZXgpOgorICAgICAgICAo
V2ViS2l0OjpVcGRhdGVBdGxhczo6ZGlkU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpV
cGRhdGVBdGxhczo6YWNxdWlyZVNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpVcGRh
dGVBdGxhczo6b2Zmc2V0Rm9ySW5kZXgpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9V
cGRhdGVBdGxhcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6
OmJpdG1hcCk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpzaXplKToKKyAgICAgICAg
KFdlYktpdDo6VXBkYXRlQXRsYXM6OmZsYWdzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFF0OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UXQ6OmdldEF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdFF0OjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaDoKKyAgICAgICAgKExheWVyVHJlZUhvc3RRdCk6CisK
IDIwMTItMDQtMDcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgW0NNYWtlXSBDbGVhbnVwIFdURiBpbmNsdWRlIGRpcmVjdG9yaWVzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aAppbmRleCA2Y2I1Yjc3ZDZkZGZkZDhiMzUyOWFlY2I2OTI0YjYyZjE5OTc5MWI4Li5hMjg3ZGJk
NDRmNTdhNGI0Njg3OGIyMTFhNDcwZWQ3OTNhNDA5NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTUy
LDcgKzUyLDYgQEAgY2xhc3MgVGV4dHVyZU1hcHBlcjsKIC8vIEEgMkQgdGV4dHVyZSB0aGF0IGNh
biBiZSB0aGUgdGFyZ2V0IG9mIHNvZnR3YXJlIG9yIEdMIHJlbmRlcmluZy4KIGNsYXNzIEJpdG1h
cFRleHR1cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4gewogcHVibGljOgot
ICAgIGVudW0gUGl4ZWxGb3JtYXQgeyBCR1JBRm9ybWF0LCBSR0JBRm9ybWF0LCBCR1JGb3JtYXQs
IFJHQkZvcm1hdCB9OwogICAgIGVudW0gRmxhZyB7CiAgICAgICAgIFN1cHBvcnRzQWxwaGEgPSAw
eDAxCiAgICAgfTsKQEAgLTY3LDggKzY2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkJpdG1h
cFRleHR1cmUoKSB7IH0KIAogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRSZWN0JiwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFBvaW50JiBvZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29u
dGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgSW50UG9pbnQm
IG9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgPSAwOwogICAgIGlubGluZSBGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1f
ZmxhZ3M7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCmluZGV4
IDZjM2UyZDhkZmQyYzFmZDQzYmNhNjM4OGIzNjcwZmY0MjAwNDc4NjIuLjQzYWM3ODEwYjhjZmZi
ZjhjZDFjMzc0OGZmYmJjZDBhOGUxYjE4ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZS5jcHAKQEAgLTI2LDE2ICsyNiwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgVGV4dHVyZU1hcHBlclRpbGU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIq
IHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBC
aXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCBmb3JtYXQpCit2b2lkIFRleHR1cmVNYXBwZXJUaWxl
Ojp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1h
Z2UsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICBJbnRSZWN0IHRhcmdldFJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KG1fcmVjdCk7CiAgICAgdGFyZ2V0UmVjdC5pbnRlcnNlY3QoZGly
dHlSZWN0KTsKICAgICBpZiAodGFyZ2V0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJnZXRSZWN0OworICAgIEludFBvaW50IHNvdXJj
ZU9mZnNldCA9IHRhcmdldFJlY3QubG9jYXRpb24oKTsKIAogICAgIC8vIE5vcm1hbGl6ZSBzb3Vy
Y2VSZWN0IHRvIHRoZSBidWZmZXIncyBjb29yZGluYXRlcy4KLSAgICBzb3VyY2VSZWN0Lm1vdmUo
LWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKyAgICBzb3VyY2VPZmZzZXQubW92ZSgt
ZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOwogCiAgICAgLy8gTm9ybWFsaXplIHRhcmdl
dFJlY3QgdG8gdGhlIHRleHR1cmUncyBjb29yZGluYXRlcy4KICAgICB0YXJnZXRSZWN0Lm1vdmUo
LW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyVGlsZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwg
SW1hZ2UqIGltYWcKICAgICAgICAgbV90ZXh0dXJlLT5yZXNldCh0YXJnZXRSZWN0LnNpemUoKSwg
aW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0Fs
cGhhIDogMCk7CiAgICAgfQogCi0gICAgbV90ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZSwg
dGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgZm9ybWF0KTsKKyAgICBtX3RleHR1cmUtPnVwZGF0ZUNv
bnRlbnRzKGltYWdlLCB0YXJnZXRSZWN0LCBzb3VyY2VPZmZzZXQpOwogfQogCiB2b2lkIFRleHR1
cmVNYXBwZXJUaWxlOjpwYWludChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0
dXJlKiBtYXNrKQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJUaWxlZEJhY2tp
bmdTdG9yZTo6dXBkYXRlQ29udGVudHNGcm9tSW1hZ2VJZk5lZWRlZChUZXh0dXJlTWFwcAogICAg
IGlmICghbV9pbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlQ29udGVudHModGV4
dHVyZU1hcHBlciwgbV9pbWFnZS5nZXQoKSwgbV9pbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEo
KSA/IEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQgOiBCaXRtYXBUZXh0dXJlOjpCR1JGb3JtYXQp
OworICAgIHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIG1faW1hZ2UuZ2V0KCkpOwogICAg
IG1faW1hZ2UuY2xlYXIoKTsKIH0KIApAQCAtMTM0LDExICsxMzQsMTEgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZU9yRGVzdHJveVRpbGVzSWZOZWVkZWQoY29u
c3QgRmxvYXRTaXoKICAgICAgICAgbV90aWxlcy5yZW1vdmUodGlsZUluZGljZXNUb1JlbW92ZVtp
XSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVDb250
ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdG90YWxTaXplLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIEJpdG1hcFRleHR1
cmU6OlBpeGVsRm9ybWF0IGZvcm1hdCkKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0
b3JlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSog
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgdG90YWxTaXplLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCiB7CiAgICAgY3JlYXRlT3JEZXN0cm95VGlsZXNJZk5lZWRlZCh0b3RhbFNpemUsIHRleHR1
cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCksIGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1fdGlsZXNbaV0udXBkYXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgaW1hZ2UsIGRpcnR5
UmVjdCwgZm9ybWF0KTsKKyAgICAgICAgbV90aWxlc1tpXS51cGRhdGVDb250ZW50cyh0ZXh0dXJl
TWFwcGVyLCBpbWFnZSwgZGlydHlSZWN0KTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJl
PiBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKaW5kZXggMDJlODRmMjMzNjRjYjlmMGJiOGE5
NjA4NjczZmY1NjFkNjk1NThiZi4uZGY2MWI4NjI2MjRhMDc4MDJlY2I1OTIwZDkzMWYxNzM1YTc4
NzEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCkBAIC00NSw3ICs0
NSw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCBzZXRUZXh0dXJlKEJpdG1hcFRleHR1cmUq
IHRleHR1cmUpIHsgbV90ZXh0dXJlID0gdGV4dHVyZTsgfQogICAgIGlubGluZSB2b2lkIHNldFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fcmVjdCA9IHJlY3Q7IH0KIAotICAgIHZvaWQg
dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEltYWdlKiwgY29uc3QgSW50UmVjdCYsIEJp
dG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1
cmVNYXBwZXIqLCBJbWFnZSosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoVGV4dHVyZU1hcHBlciosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJp
dG1hcFRleHR1cmUqKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyVGlsZSgpIHsgfQogCkBA
IC02NSw4ICs2NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4
dHVyZU1hcHBlciosIEltYWdlKiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW50UmVjdCYsIEJp
dG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1
cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgQml0bWFwVGV4dHVyZTo6UGl4
ZWxGb3JtYXQgZm9ybWF0KSB7IHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLCBp
bWFnZS0+c2l6ZSgpLCBpbWFnZS0+cmVjdCgpLCBmb3JtYXQpOyB9CisgICAgdm9pZCB1cGRhdGVD
b250ZW50cyhUZXh0dXJlTWFwcGVyKiwgSW1hZ2UqLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWFwcGVyLCBJbWFnZSogaW1hZ2UpIHsgdXBkYXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgaW1h
Z2UsIGltYWdlLT5zaXplKCksIGltYWdlLT5yZWN0KCkpOyB9CiAgICAgaW5saW5lIEZsb2F0UmVj
dCByZWN0KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbV9z
aXplKTsgfQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdT
dG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJUaWxlZEJh
Y2tpbmdTdG9yZSk7IH0KICAgICB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2Up
IHsgbV9pbWFnZSA9IGltYWdlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGJhNDlmYjI4
MjBjNGZlM2JkZWVlY2RjNjRlOTgxMWE2MGZkOTU3MzYuLjhhMjU5NzM1NDg1NTQ5ZDRiZTkxZjFh
N2I2MmNiMjFhY2FlYTMxN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC00MDksMTIgKzQw
OSwxMyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGlkUmVzZXQoKQogICAgIG1fc3VyZmFjZU5l
ZWRzUmVzZXQgPSB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBzd2l6emxlQkdSQVRvUkdCQSh1aW50
MzJfdCogZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3N0YXRpYyB2b2lkIHN3aXp6bGVCR1JB
VG9SR0JBKHVpbnQzMl90KiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBpbnQgc3RyaWRlID0g
MCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IGhlaWdodCA9IHNp
emUuaGVpZ2h0KCk7CisgICAgc3RyaWRlID0gc3RyaWRlIHwgd2lkdGg7CiAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotICAgICAgICB1aW50MzJfdCogcCA9IGRhdGEgKyB5
ICogd2lkdGg7CisgICAgICAgIHVpbnQzMl90KiBwID0gZGF0YSArIHkgKiBzdHJpZGU7CiAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkKICAgICAgICAgICAgIHBbeF0gPSAo
KHBbeF0gPDwgMTYpICYgMHhmZjAwMDApIHwgKChwW3hdID4+IDE2KSAmIDB4ZmYpIHwgKHBbeF0g
JiAweGZmMDBmZjAwKTsKICAgICB9CkBAIC00MzAsMzMgKzQzMSw2NCBAQCBzdGF0aWMgYm9vbCBk
cml2ZXJTdXBwb3J0c0JHUkFTd2l6emxpbmcoKQogI2VuZGlmCiB9CiAKLXZvaWQgQml0bWFwVGV4
dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0KQorc3RhdGljIGJvb2wgZHJpdmVyU3VwcG9ydHNTdWJJbWFnZSgpCit7CisjaWYg
ZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCisgICAgLy8gRklYTUU6IEltcGxlbWVudCByZWxp
YWJsZSBkZXRlY3Rpb24uCisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1
ZTsKKyNlbmRpZgorfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29u
c3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQm
IHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSkKIHsKICAgICBHTHVpbnQgZ2xGb3JtYXQg
PSBHTF9SR0JBOwogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQp
KQorCiAgICAgaWYgKGRyaXZlclN1cHBvcnRzQkdSQVN3aXp6bGluZygpKQogICAgICAgICBnbEZv
cm1hdCA9IEdMX0JHUkE7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN3aXp6bGVCR1JBVG9SR0JBKHN0
YXRpY19jYXN0PHVpbnQzMl90Kj4oY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpLCB0YXJnZXRSZWN0
LnNpemUoKSk7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCQTsKKyAgICBlbHNlCisgICAgICAg
IHN3aXp6bGVCR1JBVG9SR0JBKHN0YXRpY19jYXN0PHVpbnQzMl90Kj4oY29uc3RfY2FzdDx2b2lk
Kj4oZGF0YSkpLCB0YXJnZXRSZWN0LnNpemUoKSwgYnl0ZXNQZXJMaW5lIC8gNCk7CisKKyAgICBp
ZiAoYnl0ZXNQZXJMaW5lID09IHRhcmdldFJlY3Qud2lkdGgoKSAvIDQgJiYgc291cmNlT2Zmc2V0
ID09IEludFBvaW50Ojp6ZXJvKCkpIHsKKyAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJl
Y3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIChjb25zdCBjaGFyKilkYXRhKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IEZvciBFUyBkcml2ZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBzdWItaW1hZ2VzLCB0cmFuc2ZlciB0
aGUgcGl4ZWxzIHJvdy1ieS1yb3cuCisgICAgaWYgKCFkcml2ZXJTdXBwb3J0c1N1YkltYWdlKCkp
IHsKKyAgICAgICAgY29uc3QgY2hhciogYml0cyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihk
YXRhKTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB0YXJnZXRSZWN0LmhlaWdodCgpOyAr
K3kpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJvdyA9IGJpdHMgKyAoKHNvdXJjZU9mZnNl
dC55KCkgKyB5KSAqIGJ5dGVzUGVyTGluZSArIHNvdXJjZU9mZnNldC54KCkgKiA0KTsKKyAgICAg
ICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVj
dC54KCksIHRhcmdldFJlY3QueSgpICsgeSwgdGFyZ2V0UmVjdC53aWR0aCgpLCAxLCBnbEZvcm1h
dCwgR0xfVU5TSUdORURfQllURSwgcm93KSkKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJn
ZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVj
dC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGRhdGEpKQorICAgIC8vIFVz
ZSB0aGUgT3BlbkdMIHN1Yi1pbWFnZSBleHRlbnNpb24sIG5vdyB0aGF0IHdlIGtub3cgaXQncyBh
dmFpbGFibGUuCisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgYnl0ZXNQ
ZXJMaW5lIC8gNCk7CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBzb3Vy
Y2VPZmZzZXQueSgpKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywg
c291cmNlT2Zmc2V0LngoKSk7CisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgo
KSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIChjb25z
dCBjaGFyKilkYXRhKSkKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAw
KTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIDApOworICAgIGdsUGl4
ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKTsKIH0KIAotdm9pZCBCaXRtYXBUZXh0
dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3Jt
YXQgZm9ybWF0KQordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBp
bWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkK
IHsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgR0xfQ01EKGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0gICAgR0x1aW50IGdsRm9ybWF0ID0gaXNPcGFx
dWUoKSA/IEdMX1JHQiA6IEdMX1JHQkE7CiAgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghZnJhbWVJbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaW50IGJ5dGVzUGVyTGluZTsKKyAgICBjb25zdCBj
aGFyKiBpbWFnZURhdGE7CisKICNpZiBQTEFURk9STShRVCkKICAgICBRSW1hZ2UgcXRJbWFnZTsK
LQogI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQogICAgIC8vIFdp
dGggUVBBLCB3ZSBjYW4gYXZvaWQgYSBkZWVwIGNvcHkuCiAgICAgcXRJbWFnZSA9ICpmcmFtZUlt
YWdlLT5oYW5kbGUoKS0+YnVmZmVyKCk7CkBAIC00NjQsNDAgKzQ5NiwxNSBAQCB2b2lkIEJpdG1h
cFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0LCBjbwogICAgIC8vIFRoaXMgbWlnaHQgYmUgYSBkZWVwIGNvcHksIGRlcGVuZGlu
ZyBvbiBvdGhlciByZWZlcmVuY2VzIHRvIHRoZSBwaXhtYXAuCiAgICAgcXRJbWFnZSA9IGZyYW1l
SW1hZ2UtPnRvSW1hZ2UoKTsKICNlbmRpZgotCi0gICAgaWYgKEludFNpemUocXRJbWFnZS5zaXpl
KCkpICE9IHNvdXJjZVJlY3Quc2l6ZSgpKQotICAgICAgICBxdEltYWdlID0gcXRJbWFnZS5jb3B5
KHNvdXJjZVJlY3QpOwotICAgIGlmIChmb3JtYXQgPT0gQkdSQUZvcm1hdCB8fCBmb3JtYXQgPT0g
QkdSRm9ybWF0KSB7Ci0gICAgICAgIGlmIChkcml2ZXJTdXBwb3J0c0JHUkFTd2l6emxpbmcoKSkK
LSAgICAgICAgICAgIGdsRm9ybWF0ID0gaXNPcGFxdWUoKSA/IEdMX0JHUiA6IEdMX0JHUkE7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN3aXp6bGVCR1JBVG9SR0JBKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihxdEltYWdlLmJpdHMoKSksIHF0SW1hZ2Uuc2l6ZSgpKTsKLSAgICB9Ci0g
ICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0Lngo
KSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQo
KSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIHF0SW1hZ2UuY29uc3RCaXRzKCkpKQotCisg
ICAgaW1hZ2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocXRJbWFnZS5jb25z
dEJpdHMoKSk7CisgICAgYnl0ZXNQZXJMaW5lID0gcXRJbWFnZS5ieXRlc1BlckxpbmUoKTsKICNl
bGlmIFVTRShDQUlSTykKLQotI2lmICFDUFUoQklHX0VORElBTikKLSNpZiBkZWZpbmVkKFRFWE1B
UF9PUEVOR0xfRVNfMikKLSAgICBzd2l6emxlQkdSQVRvUkdCQShyZWludGVycHJldF9jYXN0PHVp
bnQzMl90Kj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShmcmFtZUltYWdlKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGZyYW1lSW1h
Z2UpICogY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGZyYW1lSW1hZ2UpKTsKLSNlbHNl
Ci0gICAgZ2xGb3JtYXQgPSBpc09wYXF1ZSgpID8gR0xfQkdSIDogR0xfQkdSQTsKLSNlbmRpZgor
ICAgIGltYWdlRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoZnJhbWVJbWFnZSk7
CisgICAgYnl0ZXNQZXJMaW5lID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGZyYW1l
SW1hZ2UpOwogI2VuZGlmCiAKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RI
LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoZnJhbWVJbWFnZSkgLyA0KTsKLSAgICBn
bFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIHNvdXJjZVJlY3QueSgpKTsKLSAgICBn
bFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgc291cmNlUmVjdC54KCkpOwotICAg
IEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShm
cmFtZUltYWdlKSkpOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIDAp
OwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgMCk7Ci0gICAgZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIDApOwotI2VuZGlmCisgICAgdXBkYXRlQ29u
dGVudHMoaW1hZ2VEYXRhLCB0YXJnZXRSZWN0LCBvZmZzZXQsIGJ5dGVzUGVyTGluZSk7CisKIH0K
IAogc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9qZWN0aW9uTWF0
cml4KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgZmxpcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAppbmRl
eCA1NDdmZTJmOGIxNzc2ZTY3NzBlY2M3NjYyZWFmZjBhYjQwMjI5ZGQyLi5iNmM2ZTQyY2NiMzg4
YWRkY2EyZDk5ZGY1ZWZkNjhjOGRiODZhYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCkBAIC02Miw3
ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpIHsgbV9jb250ZXh0ID0gY29udGV4dDsgfQogICAgIEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgdmlydHVh
bCBib29sIGlzT3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQg
cGxhdGZvcm1VcGRhdGVDb250ZW50cyhOYXRpdmVJbWFnZVB0ciwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFJlY3QmLCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCk7CisgICAgdm9pZCBwbGF0
Zm9ybVVwZGF0ZUNvbnRlbnRzKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBJbnRSZWN0JiwgY29uc3Qg
SW50UmVjdCYpOwogICAgIHZpcnR1YWwgQWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2Rl
KCkgY29uc3QgeyByZXR1cm4gT3BlbkdMTW9kZTsgfQogCiBwcml2YXRlOgpAQCAtODMsMTAgKzgz
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVTdGVuY2lsKCk7CiAgICAgfkJpdG1h
cFRleHR1cmVHTCgpOwogICAgIHZpcnR1YWwgdWludDMyX3QgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9CisgICAgdWludDMyX3QgdGV4dHVyZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIEdMX1RF
WFRVUkVfMkQ7IH0KICAgICBJbnRTaXplIHRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0dXJlU2l6ZTsgfQogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wq
IHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KLSAgICB2b2lkIHVwZGF0ZUNv
bnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQaXhlbEZvcm1h
dCk7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3Qg
SW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCos
IGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50
IGJ5dGVzUGVyTGluZSk7CiAKIHByaXZhdGU6CiAgICAgR0x1aW50IG1faWQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlcklt
YWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCmluZGV4IGU1M2I5ZjhkNmMwZDA3OGZmMzAyNjEx
MWFmYjM4ZmMwZGFmMTM2ZDMuLjRjMjgxNzdkMDQ0YjE1NjdjOTE4YzdmMjYwMDFhYTk0NWYwODJl
NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCkBAIC0yNSwxNCAr
MjUsMTUgQEAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lk
KiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQordm9pZCBCaXRtYXBUZXh0dXJlSW1h
Z2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1Blckxp
bmUpCiB7CiAjaWYgUExBVEZPUk0oUVQpCi0gICAgUUltYWdlIGltYWdlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWNoYXIqPihkYXRhKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0Lmhl
aWdodCgpLCB0YXJnZXRSZWN0LndpZHRoKCkgKiA0LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJl
bXVsdGlwbGllZCk7CisgICAgUUltYWdlIGltYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWNo
YXIqPihkYXRhKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBieXRl
c1BlckxpbmUsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKwogICAgIFFQ
YWludGVyKiBwYWludGVyID0gbV9pbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsK
ICAgICBwYWludGVyLT5zYXZlKCk7CiAgICAgcGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQ
YWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICBwYWludGVyLT5kcmF3SW1hZ2Uo
dGFyZ2V0UmVjdCwgaW1hZ2UpOworICAgIHBhaW50ZXItPmRyYXdJbWFnZSh0YXJnZXRSZWN0LCBp
bWFnZSwgSW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6ZSgpKSk7CiAgICAgcGFp
bnRlci0+cmVzdG9yZSgpOwogI2VuZGlmCiB9CkBAIC00Miw5ICs0Myw5IEBAIHZvaWQgQml0bWFw
VGV4dHVyZUltYWdlQnVmZmVyOjpkaWRSZXNldCgpCiAgICAgbV9pbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoY29udGVudFNpemUoKSk7CiB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVm
ZmVyOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIFBpeGVsRm9ybWF0KQordm9pZCBCaXRtYXBU
ZXh0dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKIHsKLSAgICBtX2ltYWdl
LT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgdGFyZ2V0
UmVjdCwgc291cmNlUmVjdCwgQ29tcG9zaXRlQ29weSk7CisgICAgbV9pbWFnZS0+Y29udGV4dCgp
LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHRhcmdldFJlY3QsIEludFJl
Y3Qob2Zmc2V0LCB0YXJnZXRSZWN0LnNpemUoKSksIENvbXBvc2l0ZUNvcHkpOwogfQogCiB2b2lk
IFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVySW1hZ2VCdWZmZXIuaAppbmRleCAyODI2YzRiOTYwZWFlMTZjZjAyYzgzNzkwYTc1NmQ0ZWFi
ZTViZDI5Li4zN2M5OGFiOGU5Yjg1MTZhZjAwNDQxMWQzZjc0Yjk5ZDllMTlmMTYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCkBAIC0zNCw4ICszNCw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzZXQoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KICAgICBpbmxpbmUgR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS0+Y29udGV4dCgpIDog
MDsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJl
Y3QmLCBjb25zdCBJbnRSZWN0JiwgUGl4ZWxGb3JtYXQpOwotICAgIHZvaWQgdXBkYXRlQ29udGVu
dHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCk7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBj
b25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBi
eXRlc1BlckxpbmUpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB2b2lkIGFwcGx5Rmls
dGVycyhjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCmluZGV4IDIzNzk3ZTYzYjU0NDQ3NjRmZTgx
ZGFjMmVkNDM0MDQ5NjU1MDY5ZDIuLmRiNTk4MDc5YzU2Y2Y5N2I5MGRhYWE1OWZmMjBiYWZkNDY1
OTFjN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGkKICAgICBpbWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1h
Z2UoQ29weUJhY2tpbmdTdG9yZSk7CiAjZW5kaWYKIAotICAgIHN0YXRpY19jYXN0PFRleHR1cmVN
YXBwZXJUaWxlZEJhY2tpbmdTdG9yZSo+KG1fYmFja2luZ1N0b3JlLmdldCgpKS0+dXBkYXRlQ29u
dGVudHModGV4dHVyZU1hcHBlciwgaW1hZ2UuZ2V0KCksIG1fc2l6ZSwgZGlydHlSZWN0LCBCaXRt
YXBUZXh0dXJlOjpCR1JBRm9ybWF0KTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyVGls
ZWRCYWNraW5nU3RvcmUqPihtX2JhY2tpbmdTdG9yZS5nZXQoKSktPnVwZGF0ZUNvbnRlbnRzKHRl
eHR1cmVNYXBwZXIsIGltYWdlLmdldCgpLCBtX3NpemUsIGRpcnR5UmVjdCk7CiB9CiAKIHZvaWQg
VGV4dHVyZU1hcHBlckxheWVyOjpwYWludCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvVXBkYXRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5j
cHAKaW5kZXggYTE1ZDcxNmIxM2YzNjY1M2M0YmUwODU0NjVjYzUzNGJkODBmZDEyOS4uNWJiMTg5
NTk3YmIwOWMzMTJmNmFlNDdmNzc2ZDc5NWNmMzI5MjFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9V
cGRhdGVJbmZvLmNwcApAQCAtNDAsNiArNDAsNyBAQCB2b2lkIFVwZGF0ZUluZm86OmVuY29kZShD
b3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2Rlci0+ZW5j
b2RlKHVwZGF0ZVJlY3RzKTsKICAgICBlbmNvZGVyLT5lbmNvZGUodXBkYXRlU2NhbGVGYWN0b3Ip
OwogICAgIGVuY29kZXItPmVuY29kZShiaXRtYXBIYW5kbGUpOworICAgIGVuY29kZXItPmVuY29k
ZShiaXRtYXBPZmZzZXQpOwogfQogCiBib29sIFVwZGF0ZUluZm86OmRlY29kZShDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqIGRlY29kZXIsIFVwZGF0ZUluZm8mIHJlc3VsdCkKQEAgLTYwLDYgKzYx
LDggQEAgYm9vbCBVcGRhdGVJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBVcGRhdGVJbmZvJiByZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShyZXN1bHQuYml0bWFwSGFuZGxlKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC5iaXRtYXBPZmZzZXQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvVXBkYXRlSW5mby5oCmluZGV4IDQwYzg2ZGM1ZDNlZmEwM2NiNmE0YWNmMTE3Njk1YzZiNTEz
NTM3YjkuLmUzYThkZTI3ODQ3NWU5NGM0Y2UwYjBjNDVjMTkyNzI4Njc0OGRjZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1VwZGF0ZUluZm8uaApAQCAtNjUsNiArNjUsOSBAQCBwdWJsaWM6CiAKICAgICAv
LyBUaGUgaGFuZGxlIG9mIHRoZSBzaGFyZWFibGUgYml0bWFwIGNvbnRhaW5pbmcgdGhlIHVwZGF0
ZXMuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSBhcmUgbm8gdXBkYXRlcy4KICAgICBTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSBiaXRtYXBIYW5kbGU7CisKKyAgICAvLyBUaGUgb2Zmc2V0IGluIHRoZSBi
aXRtYXAgd2hlcmUgdGhlIHJlbmRlcmVkIGNvbnRlbnRzIGFyZS4KKyAgICBXZWJDb3JlOjpJbnRQ
b2ludCBiaXRtYXBPZmZzZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
CmluZGV4IDBkYjk4NTlmMDBiYTUwZDJiYjExZTRjNWI3M2Q2MzExOWQyYTM3Y2IuLjUwYmMxNTA5
ZmM4NmNkZmE1ZjhmNmE3OTNjZjI4YmZhOGI4ZDhhOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMzYzLDYg
KzM2Myw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5o
IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBcCisgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250
ZXh0TWVudS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaCBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oIFwKQEAgLTM3MCw2ICszNzEsNyBAQCBIRUFE
RVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIFwKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlVuZG9TdGVwLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb25uZWN0aW9uVG9VSVByb2Nlc3MuaCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVu
ZGxlLmggXApAQCAtNzI5LDYgKzczMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VP
dmVybGF5LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZS5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAgXAog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5
ZXJUcmVlSG9zdFByb3h5LmNwcAppbmRleCBjMmY2MTYwMjk2YjAwNzM4OWJlYjg1MzQ3YWYzN2Y0
YzczMGMyYTI0Li5hYjYyMDI5OTM4NGYwOTRmYjg0NDM4NDQ3NjMxZGQ1YzBmZGZmZjBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApAQCAt
NzgsNyArNzgsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVy
KGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaQogICAgIEludFJlY3Qgc291cmNl
UmVjdCA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdHMuZmlyc3QoKTsKICAgICBJbnRSZWN0IHRhcmdl
dFJlY3QgPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHM7CiAgICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUodXBkYXRlSW5mby5iaXRt
YXBIYW5kbGUpOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVy
Ojp1cGRhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHNvdXJjZVJl
Y3QsIHRhcmdldFJlY3QsIGJpdG1hcCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxh
eWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0
aWxlSUQsIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlKHNvdXJjZVJlY3QsIHRhcmdl
dFJlY3QsIGJpdG1hcCwgdXBkYXRlSW5mby5iaXRtYXBPZmZzZXQpKSk7CiB9CiAKIHZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxl
SUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVy
LmNwcAppbmRleCA3ZTMyNzM2NzA4NjJlOGUyNDNhZWNmOTliNmRiZDkzY2E5ZmJmODA3Li4wMTI4
OWQ2YWFmMDhkYWVhY2QxOTQ0YjBiMzE3OGIxZTMyODMzNmY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTI5MywxMSArMjkz
LDEwIEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBs
YXllcklELCBpbnQgdGlsZUlEKQogICAgIGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+cmVtb3Zl
VGlsZSh0aWxlSUQpOwogfQogCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxl
KFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IHdlYWtCaXRtYXApCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlKFdlYkxh
eWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYgdXBkYXRlKQogewot
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7CiAgICAgUmVm
UHRyPExheWVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5nU3RvcmUobGF5
ZXJJRCk7Ci0gICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwgc291cmNlUmVjdCwg
dGFyZ2V0UmVjdCwgYml0bWFwLmdldCgpKTsKKyAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUo
dGlsZUlELCB1cGRhdGUuc291cmNlUmVjdCwgdXBkYXRlLnRhcmdldFJlY3QsIHVwZGF0ZS5iaXRt
YXAsIHVwZGF0ZS5vZmZzZXQpOwogICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVy
cy5hZGQoYmFja2luZ1N0b3JlKTsKIH0KIApAQCAtMzA1LDggKzMwNCw4IEBAIHZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgUGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtCiB7CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gd2Vh
a0JpdG1hcDsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAg
IGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdldCgpLCBiaXRt
YXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCksIEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQpOwogICAg
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNraW5nU3RvcmUpOwor
ICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdldCgpLCBi
aXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCkpOwogfQogCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRl
cmVyOjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAppbmRleCBhN2Y4YWNkYWFjMjU0ZjI5Yjgx
MjEzNzQ5NzA4NjkwOGJjMWI1OTYzLi45MmRjZTU5ZTgxZGJmZTY3NmQxYjNjM2JhOWI5NjJjMzUz
NmUyMzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVl
UmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVu
ZGVyZXIuaApAQCAtNDUsNiArNDUsMTkgQEAgY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogCiBj
bGFzcyBXZWJMYXllclRyZWVSZW5kZXJlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxX
ZWJMYXllclRyZWVSZW5kZXJlcj4sIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50
IHsKIHB1YmxpYzoKKyAgICBzdHJ1Y3QgVGlsZVVwZGF0ZSB7CisgICAgICAgIFdlYkNvcmU6Oklu
dFJlY3Qgc291cmNlUmVjdDsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0Owor
ICAgICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXA7CisgICAgICAgIFdlYkNvcmU6
OkludFBvaW50IG9mZnNldDsKKyAgICAgICAgVGlsZVVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldCwgUGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IG5ld0JpdG1hcCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG5ld09m
ZnNldCkKKyAgICAgICAgICAgIDogc291cmNlUmVjdChzb3VyY2UpCisgICAgICAgICAgICAsIHRh
cmdldFJlY3QodGFyZ2V0KQorICAgICAgICAgICAgLCBiaXRtYXAobmV3Qml0bWFwKQorICAgICAg
ICAgICAgLCBvZmZzZXQobmV3T2Zmc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9Owog
ICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKExheWVyVHJlZUhvc3RQcm94eSopOwogICAgIHZpcnR1
YWwgfldlYkxheWVyVHJlZVJlbmRlcmVyKCk7CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7
CkBAIC02Miw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN5bmNMYXllclBhcmFtZXRlcnMo
Y29uc3QgV2ViTGF5ZXJJbmZvJik7CiAgICAgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGlu
dCwgZmxvYXQgc2NhbGUpOwogICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOwot
ICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+
KTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBjb25zdCBUaWxlVXBkYXRl
Jik7CiAgICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOwogICAgIHZvaWQgY3JlYXRlSW1hZ2Uo
aW50NjRfdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKICAgICB2b2lkIGRlc3Ryb3lJ
bWFnZShpbnQ2NF90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9M
YXllckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJC
YWNraW5nU3RvcmUuY3BwCmluZGV4IDNmOGE4Yzg5MjIxYWQ4NDkyMmJjNTM3MjRhMjdmYmRjNjgy
OWEzMjcuLmZlZTBjOTA2MjIwZjQxOGRhNTNkMWIxYzRiMzNlZjNhODFmNTAwMDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcApAQCAt
MjMsOCArMjMsNyBAQAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0KLSNpbmNsdWRlICJz
dGRpby5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIApAQCAtNTAsMTggKzQ5LDE3IEBAIHZvaWQgTGF5ZXJCYWNraW5nU3RvcmVUaWxl
Ojpzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQogICAg
IH0KIAogICAgIFFJbWFnZSBxSW1hZ2UgPSBtX2JhY2tCdWZmZXItPmNyZWF0ZVFJbWFnZSgpOwot
CiAgICAgaWYgKHNob3VsZFJlc2V0KQogICAgICAgICB0ZXh0dXJlLT5yZXNldChtX3NvdXJjZVJl
Y3Quc2l6ZSgpLCBxSW1hZ2UuaGFzQWxwaGFDaGFubmVsKCkgPyBCaXRtYXBUZXh0dXJlOjpTdXBw
b3J0c0FscGhhIDogMCk7Ci0KLSAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhxSW1hZ2UuY29u
c3RCaXRzKCksIG1fc291cmNlUmVjdCk7CisgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMocUlt
YWdlLmNvbnN0Qml0cygpLCBtX3NvdXJjZVJlY3QsIG1fYml0bWFwT2Zmc2V0LCBxSW1hZ2UuYnl0
ZXNQZXJMaW5lKCkpOwogICAgIG1fYmFja0J1ZmZlci5jbGVhcigpOwogfQogCi12b2lkIExheWVy
QmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzb3VyY2VSZWN0LCBTaGFyZWFibGVC
aXRtYXAqIGJ1ZmZlcikKK3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVy
KGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIFBh
c3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBidWZmZXIsIGNvbnN0IEludFBvaW50JiBvZmZzZXQp
CiB7CiAgICAgbV9zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKICAgICBtX3RhcmdldFJlY3QgPSB0
YXJnZXRSZWN0OworICAgIG1fYml0bWFwT2Zmc2V0ID0gb2Zmc2V0OwogICAgIG1fYmFja0J1ZmZl
ciA9IGJ1ZmZlcjsKIH0KIApAQCAtNzYsMTEgKzc0LDEyIEBAIHZvaWQgTGF5ZXJCYWNraW5nU3Rv
cmU6OnJlbW92ZVRpbGUoaW50IGlkKQogICAgIG1fdGlsZXNUb1JlbW92ZS5hcHBlbmQoaWQpOwog
fQogCi12b2lkIExheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKGludCBpZCwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgU2hhcmVhYmxlQml0
bWFwKiBiYWNrQnVmZmVyKQorCit2b2lkIExheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKGlu
dCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJhY2tCdWZmZXIsIGNvbnN0IEludFBvaW50
JiBvZmZzZXQpCiB7CiAgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0
ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5l
bmQoKSk7Ci0gICAgaXQtPnNlY29uZC5zZXRCYWNrQnVmZmVyKHRhcmdldFJlY3QsIHNvdXJjZVJl
Y3QsIGJhY2tCdWZmZXIpOworICAgIGl0LT5zZWNvbmQuc2V0QmFja0J1ZmZlcih0YXJnZXRSZWN0
LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyLCBvZmZzZXQpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1h
cFRleHR1cmU+IExheWVyQmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmgKaW5kZXggZjA4YjE0NDg3
ZTBkZDI2YTZlNjIyNjBhYjU1MDU5MTVhNzNlMzNlNy4uYTI0MWU0YzE3ZDBlYzBhMjU1ODhiZjhk
ZmFiMDdkMDJhYzNkNzIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0xheWVyQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xh
eWVyQmFja2luZ1N0b3JlLmgKQEAgLTM5LDEyICszOSwxMyBAQCBwdWJsaWM6CiAKICAgICBpbmxp
bmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9CiAgICAgdm9pZCBzd2Fw
QnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7Ci0gICAgdm9pZCBzZXRCYWNrQnVmZmVy
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgU2hhcmVh
YmxlQml0bWFwKiBidWZmZXIpOworICAgIHZvaWQgc2V0QmFja0J1ZmZlcihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBidWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAKIHByaXZhdGU6CiAg
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iYWNrQnVmZmVyOwogICAgIFdlYkNvcmU6Oklu
dFJlY3QgbV9zb3VyY2VSZWN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgbV90YXJnZXRSZWN0Owor
ICAgIFdlYkNvcmU6OkludFBvaW50IG1fYml0bWFwT2Zmc2V0OwogICAgIGZsb2F0IG1fc2NhbGU7
CiB9OwogCkBAIC01Miw3ICs1Myw3IEBAIGNsYXNzIExheWVyQmFja2luZ1N0b3JlIDogcHVibGlj
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgewogcHVibGljOgogICAgIHZvaWQg
Y3JlYXRlVGlsZShpbnQsIGZsb2F0KTsKICAgICB2b2lkIHJlbW92ZVRpbGUoaW50KTsKLSAgICB2
b2lkIHVwZGF0ZVRpbGUoaW50LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYsIFNoYXJlYWJsZUJpdG1hcCopOworICAgIHZvaWQgdXBkYXRlVGlsZShpbnQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgTGF5ZXJCYWNraW5nU3RvcmUpOyB9CiAgICAgdm9pZCBjb21taXRUaWxlT3BlcmF0
aW9ucyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcApp
bmRleCAwZjZmODEzZDg5MDliNDA2ZjBkYzlmOGI4NTFjZjNkNmFjMTJhZjBhLi5kYWM0MDM1NDEw
YzQzMDY4ZjQyM2Q4MGVhOTU5MDEwOWY2YWFhZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5j
cHAKQEAgLTU2Miw4ICs1NjIsMTMgQEAgSW50UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJh
Y2tpbmdTdG9yZVZpc2libGVSZWN0KCkKIENvbG9yIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gY29udGVudHNP
cGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKK30KIAorUGFzc093
blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IFdlYkdyYXBoaWNzTGF5ZXI6OmJlZ2luQ29u
dGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIHJldHVy
biBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmJlZ2luQ29udGVudFVwZGF0ZShzaXplLCBjb250
ZW50c09wYXF1ZSgpID8gMCA6IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSwgaGFuZGxl
LCBvZmZzZXQpOwogfQorCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUoaW50IHRp
bGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIHsKICAgICBtX3dlYkdyYXBoaWNz
TGF5ZXJDbGllbnQtPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhp
Y3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJH
cmFwaGljc0xheWVyLmgKaW5kZXggNTQzYzQ2NTBjYTg5OWFkMDc2NmZiYWFiZDlhNjc4Yzg3YTUx
OTEyZS4uNDU0ODZjZGZhMzQ0MTczOTI2NGViOGYxYzZiOTA2ODUxMmJhMmRjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xh
eWVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJH
cmFwaGljc0xheWVyLmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0IFdlYkxheWVySW5mbyYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
ciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllciopID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJl
YWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6SW50
UG9pbnQmKSA9IDA7CiB9OwogfQogCkBAIC0xMzIsNiArMTMzLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5m
byYpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktp
dDo6VXBkYXRlSW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQp
OworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2lu
Q29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50Jik7CiAKICAgICB2b2lkIHNldFdlYkdy
YXBoaWNzTGF5ZXJDbGllbnQoV2ViS2l0OjpXZWJHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Rp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKaW5kZXggZWUxMTZjMmU5YjRlZjNjNzA4ZWYw
ZTYyOGY3YWEzNDExZWUyNTdkYy4uYWViNmViY2JiYjU4YzRhNzQwNTNlYzg1NzgwYWMzZjAyMmZk
ZWJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKQEAgLTcyLDE5ICs3Miwy
MCBAQCBWZWN0b3I8SW50UmVjdD4gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjp1cGRhdGVC
YWNrQnVmZmVyKCkKICAgICBpZiAoIWlzRGlydHkoKSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxJ
bnRSZWN0PigpOwogCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCBtX3RpbGVkQmFj
a2luZ1N0b3JlLT5zdXBwb3J0c0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxw
aGEgOiAwKTsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQoYml0
bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKSk7CisgICAgVXBkYXRlSW5mbyB1cGRhdGVJbmZv
OworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fY2xpZW50
LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJbmZvLmJpdG1h
cEhhbmRsZSwgdXBkYXRlSW5mby5iaXRtYXBPZmZzZXQpOworICAgIGlmICghZ3JhcGhpY3NDb250
ZXh0KQorICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7CiAgICAgZ3JhcGhpY3NDb250
ZXh0LT50cmFuc2xhdGUoLW1fZGlydHlSZWN0LngoKSwgLW1fZGlydHlSZWN0LnkoKSk7CiAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zY2FsZShGbG9hdFNpemUobV90aWxlZEJhY2tpbmdTdG9yZS0+Y29u
dGVudHNTY2FsZSgpLCBtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkpKTsKICAg
ICBtX3RpbGVkQmFja2luZ1N0b3JlLT5jbGllbnQoKS0+dGlsZWRCYWNraW5nU3RvcmVQYWludChn
cmFwaGljc0NvbnRleHQuZ2V0KCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPm1hcFRvQ29udGVudHMo
bV9kaXJ0eVJlY3QpKTsKIAotICAgIFVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKICAgICB1cGRhdGVJ
bmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSBtX3JlY3Q7CiAgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0g
bV9kaXJ0eVJlY3Q7CiAgICAgdXBkYXRlUmVjdC5tb3ZlKC1tX3JlY3QueCgpLCAtbV9yZWN0Lnko
KSk7CiAgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0cy5hcHBlbmQodXBkYXRlUmVjdCk7CiAgICAg
dXBkYXRlSW5mby51cGRhdGVTY2FsZUZhY3RvciA9IG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRl
bnRzU2NhbGUoKTsKLSAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZSh1cGRhdGVJbmZvLmJpdG1hcEhh
bmRsZSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKIAogICAgIHN0YXRpYyBpbnQg
aWQgPSAwOwogICAgIGlmICghbV9JRCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oCmlu
ZGV4IDEyYjJlMDYwMmI0YmUwMmMxZTk0ZjhmZDA4YjI4MzFkNzE4OTViZjMuLmRmYzI1MmU2OTAy
NjA2Yjc3N2JiMDU5NjZhYmQ1YzQ4MWFiNDhhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVU
aWxlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQog
CisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiVGlsZS5oIgogI2luY2x1
ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZS9JbnRSZWN0LmgiCkBA
IC03OCw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQg
dGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVU
aWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZVRpbGUoaW50IHRpbGVJRCkgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpID0g
MDsKIH07CiAKIGNsYXNzIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQgOiBwdWJs
aWMgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllNDY0
MTM1ZjlhMDlkNDZkNGVkNmE1MzE4ZDZjMTEwZDdkYzgzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCkBAIC0wLDAg
KzEsMTM4IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCisKKyNpZiBVU0UoVUlfU0lE
RV9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1VwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhp
bnQgZGltZW5zaW9uLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKQorICAgIDogbV9mbGFn
cyhmbGFncykKK3sKKyAgICBtX2JpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVh
YmxlKEludFNpemUoZGltZW5zaW9uLCBkaW1lbnNpb24pLCBmbGFncyk7Cit9CisKK3N0YXRpYyBp
bnQgbmV4dFBvd2VyT2ZUd28oaW50IG51bWJlcikKK3sKKyAgICAvLyBUaGlzIGlzIGEgZmFzdCB0
cmljayB0byBnZXQgbmV4dFBvd2VyT2ZUd28gZm9yIGFuIGludGVnZXIuCisgICAgLS1udW1iZXI7
CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiAxOworICAgIG51bWJlciB8PSBudW1iZXIgPj4gMjsK
KyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDQ7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiA4Owor
ICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTY7CisgICAgbnVtYmVyKys7CisgICAgcmV0dXJuIG51
bWJlcjsKK30KKwordm9pZCBVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCgpCit7Cisg
ICAgaWYgKCFtX2xheW91dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRp
YyBjb25zdCBpbnQgTWluVGlsZVNpemUgPSAzMjsKKyAgICBzdGF0aWMgY29uc3QgaW50IE1heFRp
bGVTaXplID0gNTEyOworCisgICAgLy8gRGl2aWRlIG91ciBzcXVhcmUgdG8gc3F1YXJlIHBvd2Vy
LW9mLXR3byBib3hlcy4KKyAgICBmb3IgKGludCBjdXJzb3IgPSAwOyBjdXJzb3IgPCBzaXplKCku
d2lkdGgoKTsgKSB7CisgICAgICAgIGludCByZW1haW5kZXIgPSBzaXplKCkud2lkdGgoKSAtIGN1
cnNvcjsKKyAgICAgICAgaW50IGRpbWVuc2lvbiA9IHN0ZDo6bWluKHJlbWFpbmRlciwgc3RkOjpt
aW4oTWF4VGlsZVNpemUsIHN0ZDo6bWF4KE1pblRpbGVTaXplLCBuZXh0UG93ZXJPZlR3byhyZW1h
aW5kZXIgLyAyKSkpKTsKKyAgICAgICAgY3Vyc29yICs9IGRpbWVuc2lvbjsKKyAgICAgICAgbV9s
YXlvdXQuYXBwZW5kKGRpbWVuc2lvbik7CisgICAgfQorCisgICAgbV9idWZmZXJTdGF0ZXMucmVz
aXplKG1fbGF5b3V0LnNpemUoKSAqIG1fbGF5b3V0LnNpemUoKSk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtX2J1ZmZlclN0YXRlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9idWZmZXJTdGF0
ZXNbaV0gPSBBdmFpbGFibGU7Cit9CisKK2ludCBVcGRhdGVBdGxhczo6ZmluZEF2YWlsYWJsZUlu
ZGV4KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit7CisgICAgaW50IGRpbWVuc2lvbiA9
IG1fbGF5b3V0LnNpemUoKTsKKyAgICBpbnQgc3RyaWRlID0gZGltZW5zaW9uOworICAgIGludCBy
ZXF1aXJlZERpbWVuc2lvbiA9IHN0ZDo6bWF4KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
CisKKyAgICAvLyBCZWdpbiBmcm9tIHRoZSBzbWFsbGVzdCBidWZmZXIsIHVudGlsIHdlIHJlYWNo
IHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgYnVmZmVyIHRoYXQncyBiaWcgZW5vdWdoIHRvIGNvbnRh
aW4gb3VyIHJlY3QuCisgICAgZm9yIChpbnQgaSA9IG1fYnVmZmVyU3RhdGVzLnNpemUoKSAtIDE7
IGkgPj0gMDsgaSAtPSAoZGltZW5zaW9uICsgMSksIC0tc3RyaWRlKSB7CisgICAgICAgIC8vIE5l
ZWQgYSBiaWdnZXIgYnVmZmVyLgorICAgICAgICBpZiAobV9sYXlvdXRbaSAvIGRpbWVuc2lvbl0g
PCByZXF1aXJlZERpbWVuc2lvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8v
IENoZWNrIGFsbCBidWZmZXJzIG9mIGN1cnJlbnQgc2l6ZSwgdG8gZmluZCBhbiBhdmFpbGFibGUg
b25lLgorICAgICAgICBmb3IgKGludCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdHJpZGU7ICsrb2Zm
c2V0KSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpIC0gb2Zmc2V0OworICAgICAgICAgICAg
aWYgKG1fYnVmZmVyU3RhdGVzW2luZGV4XSA9PSBBdmFpbGFibGUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCit2
b2lkIFVwZGF0ZUF0bGFzOjpkaWRTd2FwQnVmZmVycygpCit7CisgICAgYnVpbGRMYXlvdXRJZk5l
ZWRlZCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9idWZmZXJTdGF0ZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fYnVmZmVyU3RhdGVzW2ldID0gQXZhaWxhYmxlOworfQorCitQYXNzT3du
UHRyPEdyYXBoaWNzQ29udGV4dD4gVXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJs
ZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBJbnRQb2ludCYgb2Zmc2V0KQor
eworICAgIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKKyAgICBpbnQgaW5kZXggPSBmaW5kQXZhaWxh
YmxlSW5kZXgoc2l6ZSk7CisKKyAgICAvLyBObyBhdmFpbGFibGUgYnVmZmVyIHdhcyBmb3VuZCwg
cmV0dXJuaW5nIG51bGwuCisgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuIFBhc3NP
d25QdHI8R3JhcGhpY3NDb250ZXh0PigpOworCisgICAgLy8gRklYTUU6IFVzZSB0cmktc3RhdGUg
YnVmZmVycywgdG8gYWxsb3cgZmFzdGVyIHVwZGF0ZXMuCisgICAgbV9idWZmZXJTdGF0ZXNbaW5k
ZXhdID0gVGFrZW47CisgICAgb2Zmc2V0ID0gb2Zmc2V0Rm9ySW5kZXgoaW5kZXgpOworICAgIElu
dFJlY3QgcmVjdChJbnRQb2ludDo6emVybygpLCBzaXplKTsKKyAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX2JpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0Lnko
KSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwKHJlY3QpOworICAgIGdyYXBoaWNzQ29udGV4
dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZmlsbFJlY3QocmVjdCwgKGZsYWdzKCkgJiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRz
QWxwaGEpID8gQ29sb3I6OnRyYW5zcGFyZW50IDogQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVTb3VyY2VPdmVyKTsKKyAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsK
K30KKworSW50UG9pbnQgVXBkYXRlQXRsYXM6Om9mZnNldEZvckluZGV4KGludCBpbmRleCkgY29u
c3QKK3sKKyAgICBJbnRQb2ludCBjb29yZChpbmRleCAlIG1fbGF5b3V0LnNpemUoKSwgaW5kZXgg
LyBtX2xheW91dC5zaXplKCkpOworICAgIGludCB4ID0gMDsKKyAgICBpbnQgeSA9IDA7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb29yZC54KCk7ICsraSkKKyAgICAgICAgeCArPSBtX2xheW91
dFtpXTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvb3JkLnkoKTsgKytpKQorICAgICAgICB5
ICs9IG1fbGF5b3V0W2ldOworCisgICAgcmV0dXJuIEludFBvaW50KHgsIHkpOworfQorCit9Cisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRh
dGVBdGxhcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uY2VmM2U5YzFkMDJjZjk5NzhiYmIwZmI4NzRkMGE5MWU2MDRmMDlmNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRh
dGVBdGxhcy5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFVwZGF0ZUF0bGFzX2gKKyNkZWZpbmUgVXBkYXRlQXRsYXNfaAor
CisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisKKyNpZiBVU0UoVUlfU0lERV9DT01QT1NJ
VElORykKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNz
IEludFJlY3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBVcGRhdGVBdGxhcyB7
CitwdWJsaWM6CisgICAgVXBkYXRlQXRsYXMoaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFw
OjpGbGFncyk7CisKKyAgICBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwKCkgeyBy
ZXR1cm4gbV9iaXRtYXA7IH0KKyAgICBpbmxpbmUgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9iaXRtYXAtPnNpemUoKTsgfQorCisgICAgLy8gUmV0dXJucyBhIG51bGwg
cG9pbnRlciBvZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyLgorICAgIFBhc3NPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpOworICAg
IHZvaWQgZGlkU3dhcEJ1ZmZlcnMoKTsKKyAgICBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdz
KCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnVpbGRM
YXlvdXRJZk5lZWRlZCgpOworICAgIFdlYkNvcmU6OkludFBvaW50IG9mZnNldEZvckluZGV4KGlu
dCkgY29uc3Q7CisgICAgaW50IGZpbmRBdmFpbGFibGVJbmRleChjb25zdCBXZWJDb3JlOjpJbnRT
aXplJik7CisKK3ByaXZhdGU6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIEF2YWlsYWJsZSwK
KyAgICAgICAgVGFrZW4KKyAgICB9OworCisgICAgVmVjdG9yPFN0YXRlPiBtX2J1ZmZlclN0YXRl
czsKKyAgICBWZWN0b3I8aW50PiBtX2xheW91dDsKKyAgICBTaGFyZWFibGVCaXRtYXA6OkZsYWdz
IG1fZmxhZ3M7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iaXRtYXA7Cit9OworCit9
CisjZW5kaWYKKyNlbmRpZiAvLyBVcGRhdGVBdGxhc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4IGNh
NzRmMTE0MGIyYjU4NTlmNzUxOTE3Zjg4YWM5MDI1N2NjY2E0NDMuLjY1YWM1MjFjY2E2OTFhM2Fh
ZDEzNzk0YzQ5ZWI1MWM5ZmQyMjI2NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9z
dFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KQEAgLTMyOSw5ICsz
MzAsOSBAQCBpbnQ2NF90IExheWVyVHJlZUhvc3RRdDo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJ
bWFnZSogaW1hZ2UpCiAgICAgICAgIHJldHVybiBrZXk7CiAgICAgfQogCi0gICAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUo
aW1hZ2UtPnNpemUoKSwgaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBi
aXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCAo
aW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRz
QWxwaGEgOiAwKSk7CiAgICAgewotICAgICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwor
ICAgICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQg
PSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IGJpdG1hcC0+c2l6ZSgpKSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGlt
YWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKICAgICB9CiAKQEAg
LTQ1MSw2ICs0NTIsOCBAQCB2b2lkIExheWVyVHJlZUhvc3RRdDo6cmVuZGVyTmV4dEZyYW1lKCkK
IHsKICAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKICAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7
ICsraSkKKyAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLmRpZFN3YXBCdWZmZXJzKCk7CiB9CiAK
IGJvb2wgTGF5ZXJUcmVlSG9zdFF0OjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25z
dApAQCAtNDY1LDYgKzQ2OCwzMiBAQCB2b2lkIExheWVyVHJlZUhvc3RRdDo6cHVyZ2VCYWNraW5n
U3RvcmVzKCkKICAgICAgICAgKCppdCktPnB1cmdlQmFja2luZ1N0b3JlcygpOwogCiAgICAgQVNT
RVJUKCFtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnNpemUoKSk7CisgICAgbV91
cGRhdGVBdGxhc2VzLmNsZWFyKCk7Cit9CisKK1VwZGF0ZUF0bGFzJiBMYXllclRyZWVIb3N0UXQ6
OmdldEF0bGFzKFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MpCit7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
dXBkYXRlQXRsYXNlc1tpXS5mbGFncygpID09IGZsYWdzKQorICAgICAgICAgICAgcmV0dXJuIG1f
dXBkYXRlQXRsYXNlc1tpXTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVm
ZmVyRGltZW5zaW9uID0gMjAwMDsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKFVwZGF0ZUF0
bGFzKFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdzKSk7CisgICAgcmV0dXJuIG1fdXBkYXRl
QXRsYXNlcy5sYXN0KCk7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
PiBMYXllclRyZWVIb3N0UXQ6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIFVwZGF0
ZUF0bGFzJiBhdGxhcyA9IGdldEF0bGFzKGZsYWdzKTsKKyAgICBpZiAoIWF0bGFzLmJpdG1hcCgp
LT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0PigpOworCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlm
IHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYXRsYXMuYmVnaW5QYWludGluZ09uQXZhaWxh
YmxlQnVmZmVyKHNpemUsIG9mZnNldCk7CisgICAgaWYgKCFncmFwaGljc0NvbnRleHQpCisgICAg
ICAgIHJldHVybiBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4oKTsKKworICAg
IHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9M
YXllclRyZWVIb3N0UXQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9M
YXllclRyZWVIb3N0UXQuaAppbmRleCAwOGYwZTY0Yjc0YjNkMTNkYzFmNGJiNmY3NWJiYjQxZWZm
ZjA1NTlmLi5kMDYwMWZlZTY1MjBkMWU3YTU1ZDZiMjUxNDYyMjc5YjFiNzIxYzNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhv
c3RRdC5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgog
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUg
IlVwZGF0ZUF0bGFzLmgiCiAjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
QEAgLTc1LDYgKzc2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMYXllcihX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVy
KFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIHZpcnR1YWwgUGFzc093blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOworCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTGF5
ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsKIApAQCAtOTQsNiArOTcsOCBAQCBwcml2YXRlOgogICAg
IHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKICAgICB2b2lkIHNlbmRMYXllcnNU
b1VJKCk7CiAKKyAgICBVcGRhdGVBdGxhcyYgZ2V0QXRsYXMoU2hhcmVhYmxlQml0bWFwOjpGbGFn
cyk7CisKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAK
ICAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRl
bnQuCkBAIC0xMDQsNiArMTA5LDcgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKICAgICBIYXNoTWFwPGludDY0
X3QsIGludD4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKKyAgICBWZWN0b3I8
VXBkYXRlQXRsYXM+IG1fdXBkYXRlQXRsYXNlczsKIAogICAgIGJvb2wgbV9ub3RpZnlBZnRlclNj
aGVkdWxlZExheWVyRmx1c2g7CiAgICAgYm9vbCBtX2lzVmFsaWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136383</attachid>
            <date>2012-04-09 20:02:28 -0700</date>
            <delta_ts>2012-04-09 21:57:49 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-83424-20120409200226.patch</filename>
            <type>text/plain</type>
            <size>50438</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDIxMThjZmIwM2ExNDdi
NDlmYmMxMmY1NzM0ZDA5NDBjYjU5OWM4Yy4uNWI5MWExNmE4NDY4MjdhZjgzYzg1MGY5ZmVjNjA2
YmZlOTQwZDI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA0LTA3ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1dLMl0g
RW5hYmxlIHVzaW5nIGEgc2luZ2xlIFNoYXJlYWJsZUJpdG1hcCBmb3IgbXVsdGlwbGUgdXBkYXRl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM0MjQK
KworICAgICAgICBNb2RpZnkgQml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMgdG8gaW5jbHVk
ZSBhIHNvdXJjZSBvZmZzZXQuCisgICAgICAgIFRoaXMgYWxsb3dzIHVzIHRvIHVwZGF0ZSBhIHRl
eHR1cmUgZnJvbSBhIHN1Yi1pbWFnZS4KKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJv
aGRlIENocmlzdGlhbnNlbi4KKworICAgICAgICBUZXN0ZWQgYnkgZXhpc3RpbmcgQVBJIHRlc3Rz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoK
KyAgICAgICAgKEJpdG1hcFRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUdMOjpkaWRSZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpkcml2ZXJTdXBwb3J0c0JHUkFTd2l6
emxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5o
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp0ZXh0dXJlVGFyZ2V0KToKKyAg
ICAgICAgKEJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmg6CisgICAgICAgIChC
aXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIpOgorCiAyMDEyLTA0LTA5ICBMZXZpIFdlaW50cmF1YiAg
PGxldml3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBDbGVhbiB1cCBMYXlvdXRVbml0IHVzYWdl
IGluIERPTU5vZGVIaWdobGlnaHRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGIzYTUxZTE4NjhjNzg0YWQzMWY1
YzZlZTI1YTQ2MzNlMDI2YjE4OTAuLjYxMGQyMTkzYWQ2Y2E5OTk1MDcwYjZmNjUxODNkOThkODYx
NTU1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NSBAQAorMjAxMi0wNC0wNyAgTm8nYW0gUm9z
ZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtXSzJdIEVuYWJs
ZSB1c2luZyBhIHNpbmdsZSBTaGFyZWFibGVCaXRtYXAgZm9yIG11bHRpcGxlIHVwZGF0ZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzNDI0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAg
RW5hYmxlZCBjcmVhdGluZyBhIEdyYXBoaWNzQ29udGV4dCB0aGF0IHJlZmVyZW5jZXMgYSByZWN0
IGluc2lkZSBTaGFyZWFibGVCaXRtYXAuCisgICAgICAgIEFkZGVkIGJpdG1hcE9mZnNldCB0byBV
cGRhdGVJbmZvLCB0byBhbGxvdyB1cGRhdGVzIHRvIHJlZmVyZW5jZSBhbiBvZmZzZXQgaW5zaWRl
IHRoZSBiaXRtYXAuCisgICAgICAgIEFkZGVkIFVwZGF0ZUF0bGFzLCBhIGNsYXNzIHRoYXQgbWFu
YWdlcyBhdmFpbGFibGUgcmVjdHMgaW4gYSBsYXJnZXIgU2hhcmVhYmxlQml0bWFwLgorCisgICAg
ICAgIEluIHRoaXMgaXRlcmF0aW9uLCBVcGRhdGVBdGxhcyBoYXMgYSBzaW1wbGUgYmVoYXZpb3Ig
d2hlcmUgYSByZWN0IGluc2lkZSB0aGUgYml0bWFwIGlzCisgICAgICAgIGVpdGhlciBhdmFpbGFi
bGUgb3IgdXNlZC4gV2hlbiB0aGUgYnVmZmVycyBhcmUgc3dhcHBlZCwgYWxsIHVzZWQgYnVmZmVy
cyBiZWNvbWUgYXZhaWxhYmxlCisgICAgICAgIGFnYWluLiBBIGZ1dHVyZSBlbmhhbmNlbWVudCBt
aWdodCBhbGxvdyB0cmlwbGUtYnVmZmVyaW5nLCB3aGVyZSBhdmFpbGFibGUgcmVjdHMgY2FuIGJl
CisgICAgICAgIHVwZGF0ZWQgd2hpbGUgb3RoZXIgcmVjdHMgZnJvbSB0aGUgc2FtZSBhdGxhcyBh
cmUgaW4gdXNlLgorCisgICAgICAgIEFkZGVkIHRoZSBuZWNlc3NhcnkgcGx1bWJpbmcgdG8gYWxs
b3cgUXQncyBVSS1zaWRlIGNvbXBvc2l0aW5nIHRvIHRha2UgYWR2YW50YWdlIG9mCisgICAgICAg
IFVwZGF0ZUF0bGFzLiBMYXllclRyZWVIb3N0UXQgY3JlYXRlcyBhbiBhdGxhcyBwZXIgdHlwZSBv
ZiBiaXRtYXAgKGkuZS4gb25lIG9wYXF1ZSBhbmQgb25lCisgICAgICAgIGFscGhhLWVuYWJsZWQg
YXRsYXMpLiBXaGVuIGEgdGlsZSB3YW50cyB0byB1cGRhdGUgYW5kIHRoZXJlJ3Mgbm8gYXZhaWxh
YmxlIHNjcmF0Y2gtYnVmZmVyLAorICAgICAgICB0aGUgdXBkYXRlIHdvdWxkIGJlIHBvc3Rwb25l
ZCB0byB0aGUgbmV4dCBmcmFtZSwgY3JlYXRpbmcgYSB0aWxpbmctYXJ0aWZhY3QgaW4gbG93IG1l
bW9yeQorICAgICAgICBzaXR1YXRpb25zLgorCisgICAgICAgICogU2hhcmVkL1VwZGF0ZUluZm8u
Y3BwOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVJbmZvOjplbmNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpVcGRhdGVJbmZvOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9VcGRhdGVJbmZvLmg6
CisgICAgICAgIChVcGRhdGVJbmZvKToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVJlbmRlcmVyOjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxheWVyVHJl
ZVJlbmRlcmVyLmg6CisgICAgICAgIChUaWxlVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGU6OlRpbGVVcGRhdGUpOgorICAgICAgICAoV2Vi
TGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdT
dG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1
ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXllckJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tC
dWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllckJhY2tpbmdTdG9yZTo6Y3JlYXRlVGlsZSk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChM
YXllckJhY2tpbmdTdG9yZVRpbGUpOgorICAgICAgICAoTGF5ZXJCYWNraW5nU3RvcmUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tn
cm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNv
bnRlbnRVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChXZWJHcmFwaGljc0xh
eWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUu
aDoKKyAgICAgICAgKFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMpOgorICAg
ICAgICAoV2ViS2l0OjpuZXh0UG93ZXJPZlR3byk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0
bGFzOjpidWlsZExheW91dElmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6
OmZpbmRBdmFpbGFibGVJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpkaWRT
d2FwQnVmZmVycyk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjphY3F1aXJlU2NyYXRj
aEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpvZmZzZXRGb3JJbmRleCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoVXBkYXRlQXRsYXMp
OgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6Yml0bWFwKToKKyAgICAgICAgKFdlYktp
dDo6VXBkYXRlQXRsYXM6OnNpemUpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6Zmxh
Z3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5nU3Rv
cmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6cHVyZ2VCYWNraW5nU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Z2V0
QXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmJlZ2luQ29udGVudFVw
ZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5o
OgorICAgICAgICAoTGF5ZXJUcmVlSG9zdFF0KToKKwogMjAxMi0wNC0wOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF1bV0syXSBTeW5j
IHRoZSBsYXllcidzIHN0YXRlIGFuZCB0aGUgbGF5ZXIncyBjaGlsZHJlbiBzZXBhcmF0ZWx5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXIuaAppbmRleCA2Y2I1Yjc3ZDZkZGZkZDhiMzUyOWFlY2I2OTI0YjYyZjE5OTc5MWI4
Li5hMjg3ZGJkNDRmNTdhNGI0Njg3OGIyMTFhNDcwZWQ3OTNhNDA5NTIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
LmgKQEAgLTUyLDcgKzUyLDYgQEAgY2xhc3MgVGV4dHVyZU1hcHBlcjsKIC8vIEEgMkQgdGV4dHVy
ZSB0aGF0IGNhbiBiZSB0aGUgdGFyZ2V0IG9mIHNvZnR3YXJlIG9yIEdMIHJlbmRlcmluZy4KIGNs
YXNzIEJpdG1hcFRleHR1cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4gewog
cHVibGljOgotICAgIGVudW0gUGl4ZWxGb3JtYXQgeyBCR1JBRm9ybWF0LCBSR0JBRm9ybWF0LCBC
R1JGb3JtYXQsIFJHQkZvcm1hdCB9OwogICAgIGVudW0gRmxhZyB7CiAgICAgICAgIFN1cHBvcnRz
QWxwaGEgPSAweDAxCiAgICAgfTsKQEAgLTY3LDggKzY2LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgfkJpdG1hcFRleHR1cmUoKSB7IH0KIAogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJl
Y3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3Qg
SW50UmVjdCYsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3Qg
SW50UG9pbnQmIG9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSkgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgPSAwOwogICAgIGlubGluZSBGbGFncyBmbGFncygpIGNvbnN0IHsg
cmV0dXJuIG1fZmxhZ3M7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUu
Y3BwCmluZGV4IDZjM2UyZDhkZmQyYzFmZDQzYmNhNjM4OGIzNjcwZmY0MjAwNDc4NjIuLjQzYWM3
ODEwYjhjZmZiZjhjZDFjMzc0OGZmYmJjZDBhOGUxYjE4ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKQEAgLTI2LDE2ICsyNiwxNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgVGV4dHVyZU1hcHBlclRpbGU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1
cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0LCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCBmb3JtYXQpCit2b2lkIFRleHR1cmVN
YXBwZXJUaWxlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJ
bWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICBJbnRSZWN0IHRh
cmdldFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fcmVjdCk7CiAgICAgdGFyZ2V0UmVjdC5pbnRl
cnNlY3QoZGlydHlSZWN0KTsKICAgICBpZiAodGFyZ2V0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJnZXRSZWN0OworICAgIEludFBv
aW50IHNvdXJjZU9mZnNldCA9IHRhcmdldFJlY3QubG9jYXRpb24oKTsKIAogICAgIC8vIE5vcm1h
bGl6ZSBzb3VyY2VSZWN0IHRvIHRoZSBidWZmZXIncyBjb29yZGluYXRlcy4KLSAgICBzb3VyY2VS
ZWN0Lm1vdmUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKyAgICBzb3VyY2VPZmZz
ZXQubW92ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOwogCiAgICAgLy8gTm9ybWFs
aXplIHRhcmdldFJlY3QgdG8gdGhlIHRleHR1cmUncyBjb29yZGluYXRlcy4KICAgICB0YXJnZXRS
ZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyVGlsZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVy
ZU1hcHBlciwgSW1hZ2UqIGltYWcKICAgICAgICAgbV90ZXh0dXJlLT5yZXNldCh0YXJnZXRSZWN0
LnNpemUoKSwgaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBCaXRtYXBUZXh0dXJlOjpT
dXBwb3J0c0FscGhhIDogMCk7CiAgICAgfQogCi0gICAgbV90ZXh0dXJlLT51cGRhdGVDb250ZW50
cyhpbWFnZSwgdGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgZm9ybWF0KTsKKyAgICBtX3RleHR1cmUt
PnVwZGF0ZUNvbnRlbnRzKGltYWdlLCB0YXJnZXRSZWN0LCBzb3VyY2VPZmZzZXQpOwogfQogCiB2
b2lkIFRleHR1cmVNYXBwZXJUaWxlOjpwYWludChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBC
aXRtYXBUZXh0dXJlKiBtYXNrKQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJU
aWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlQ29udGVudHNGcm9tSW1hZ2VJZk5lZWRlZChUZXh0dXJl
TWFwcAogICAgIGlmICghbV9pbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlQ29u
dGVudHModGV4dHVyZU1hcHBlciwgbV9pbWFnZS5nZXQoKSwgbV9pbWFnZS0+Y3VycmVudEZyYW1l
SGFzQWxwaGEoKSA/IEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQgOiBCaXRtYXBUZXh0dXJlOjpC
R1JGb3JtYXQpOworICAgIHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIG1faW1hZ2UuZ2V0
KCkpOwogICAgIG1faW1hZ2UuY2xlYXIoKTsKIH0KIApAQCAtMTM0LDExICsxMzQsMTEgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZU9yRGVzdHJveVRpbGVzSWZO
ZWVkZWQoY29uc3QgRmxvYXRTaXoKICAgICAgICAgbV90aWxlcy5yZW1vdmUodGlsZUluZGljZXNU
b1JlbW92ZVtpXSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjp1
cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdG90YWxTaXplLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIEJp
dG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0IGZvcm1hdCkKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGVk
QmFja2luZ1N0b3JlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
LCBJbWFnZSogaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgdG90YWxTaXplLCBjb25zdCBJbnRSZWN0
JiBkaXJ0eVJlY3QpCiB7CiAgICAgY3JlYXRlT3JEZXN0cm95VGlsZXNJZk5lZWRlZCh0b3RhbFNp
emUsIHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCksIGltYWdlLT5jdXJyZW50RnJhbWVI
YXNBbHBoYSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIG1fdGlsZXNbaV0udXBkYXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgaW1h
Z2UsIGRpcnR5UmVjdCwgZm9ybWF0KTsKKyAgICAgICAgbV90aWxlc1tpXS51cGRhdGVDb250ZW50
cyh0ZXh0dXJlTWFwcGVyLCBpbWFnZSwgZGlydHlSZWN0KTsKIH0KIAogUGFzc1JlZlB0cjxCaXRt
YXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKaW5kZXggMDJlODRmMjMzNjRj
YjlmMGJiOGE5NjA4NjczZmY1NjFkNjk1NThiZi4uZGY2MWI4NjI2MjRhMDc4MDJlY2I1OTIwZDkz
MWYxNzM1YTc4NzEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCkBA
IC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCBzZXRUZXh0dXJlKEJpdG1h
cFRleHR1cmUqIHRleHR1cmUpIHsgbV90ZXh0dXJlID0gdGV4dHVyZTsgfQogICAgIGlubGluZSB2
b2lkIHNldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fcmVjdCA9IHJlY3Q7IH0KIAot
ICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEltYWdlKiwgY29uc3QgSW50
UmVjdCYsIEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRl
bnRzKFRleHR1cmVNYXBwZXIqLCBJbWFnZSosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoVGV4dHVyZU1hcHBlciosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
ZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyVGlsZSgp
IHsgfQogCkBAIC02NSw4ICs2NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFw
cGVyVGlsZWRCYWNraW5nU3RvcmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlQ29u
dGVudHMoVGV4dHVyZU1hcHBlciosIEltYWdlKiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW50
UmVjdCYsIEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKLSAgICB2b2lkIHVwZGF0ZUNvbnRl
bnRzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgQml0bWFwVGV4
dHVyZTo6UGl4ZWxGb3JtYXQgZm9ybWF0KSB7IHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIs
IGltYWdlLCBpbWFnZS0+c2l6ZSgpLCBpbWFnZS0+cmVjdCgpLCBmb3JtYXQpOyB9CisgICAgdm9p
ZCB1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiwgSW1hZ2UqLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2UpIHsgdXBkYXRlQ29udGVudHModGV4dHVyZU1h
cHBlciwgaW1hZ2UsIGltYWdlLT5zaXplKCksIGltYWdlLT5yZWN0KCkpOyB9CiAgICAgaW5saW5l
IEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onpl
cm8oKSwgbV9zaXplKTsgfQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJUaWxl
ZEJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBw
ZXJUaWxlZEJhY2tpbmdTdG9yZSk7IH0KICAgICB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFn
ZSogaW1hZ2UpIHsgbV9pbWFnZSA9IGltYWdlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4
IGJhNDlmYjI4MjBjNGZlM2JkZWVlY2RjNjRlOTgxMWE2MGZkOTU3MzYuLjhhMjU5NzM1NDg1NTQ5
ZDRiZTkxZjFhN2I2MmNiMjFhY2FlYTMxN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC00
MDksMTIgKzQwOSwxMyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGlkUmVzZXQoKQogICAgIG1f
c3VyZmFjZU5lZWRzUmVzZXQgPSB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBzd2l6emxlQkdSQVRv
UkdCQSh1aW50MzJfdCogZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3N0YXRpYyB2b2lkIHN3
aXp6bGVCR1JBVG9SR0JBKHVpbnQzMl90KiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBpbnQg
c3RyaWRlID0gMCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IGhl
aWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgc3RyaWRlID0gc3RyaWRlIHwgd2lkdGg7CiAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotICAgICAgICB1aW50MzJfdCogcCA9
IGRhdGEgKyB5ICogd2lkdGg7CisgICAgICAgIHVpbnQzMl90KiBwID0gZGF0YSArIHkgKiBzdHJp
ZGU7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkKICAgICAgICAgICAg
IHBbeF0gPSAoKHBbeF0gPDwgMTYpICYgMHhmZjAwMDApIHwgKChwW3hdID4+IDE2KSAmIDB4ZmYp
IHwgKHBbeF0gJiAweGZmMDBmZjAwKTsKICAgICB9CkBAIC00MzAsMzMgKzQzMSw2NCBAQCBzdGF0
aWMgYm9vbCBkcml2ZXJTdXBwb3J0c0JHUkFTd2l6emxpbmcoKQogI2VuZGlmCiB9CiAKLXZvaWQg
Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0KQorc3RhdGljIGJvb2wgZHJpdmVyU3VwcG9ydHNTdWJJbWFnZSgp
Cit7CisjaWYgZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCisgICAgLy8gRklYTUU6IEltcGxl
bWVudCByZWxpYWJsZSBkZXRlY3Rpb24uCisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29u
dGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
SW50UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSkKIHsKICAgICBHTHVpbnQg
Z2xGb3JtYXQgPSBHTF9SR0JBOwogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1faWQpKQorCiAgICAgaWYgKGRyaXZlclN1cHBvcnRzQkdSQVN3aXp6bGluZygpKQogICAg
ICAgICBnbEZvcm1hdCA9IEdMX0JHUkE7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN3aXp6bGVCR1JB
VG9SR0JBKHN0YXRpY19jYXN0PHVpbnQzMl90Kj4oY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpLCB0
YXJnZXRSZWN0LnNpemUoKSk7Ci0gICAgICAgIGdsRm9ybWF0ID0gR0xfUkdCQTsKKyAgICBlbHNl
CisgICAgICAgIHN3aXp6bGVCR1JBVG9SR0JBKHN0YXRpY19jYXN0PHVpbnQzMl90Kj4oY29uc3Rf
Y2FzdDx2b2lkKj4oZGF0YSkpLCB0YXJnZXRSZWN0LnNpemUoKSwgYnl0ZXNQZXJMaW5lIC8gNCk7
CisKKyAgICBpZiAoYnl0ZXNQZXJMaW5lID09IHRhcmdldFJlY3Qud2lkdGgoKSAvIDQgJiYgc291
cmNlT2Zmc2V0ID09IEludFBvaW50Ojp6ZXJvKCkpIHsKKyAgICAgICAgR0xfQ01EKGdsVGV4U3Vi
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCks
IHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VO
U0lHTkVEX0JZVEUsIChjb25zdCBjaGFyKilkYXRhKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIEZvciBFUyBkcml2ZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBzdWItaW1hZ2VzLCB0
cmFuc2ZlciB0aGUgcGl4ZWxzIHJvdy1ieS1yb3cuCisgICAgaWYgKCFkcml2ZXJTdXBwb3J0c1N1
YkltYWdlKCkpIHsKKyAgICAgICAgY29uc3QgY2hhciogYml0cyA9IHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihkYXRhKTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB0YXJnZXRSZWN0Lmhl
aWdodCgpOyArK3kpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJvdyA9IGJpdHMgKyAoKHNv
dXJjZU9mZnNldC55KCkgKyB5KSAqIGJ5dGVzUGVyTGluZSArIHNvdXJjZU9mZnNldC54KCkgKiA0
KTsKKyAgICAgICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwg
dGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpICsgeSwgdGFyZ2V0UmVjdC53aWR0aCgpLCAx
LCBnbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgcm93KSkKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwg
dGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGRhdGEpKQor
ICAgIC8vIFVzZSB0aGUgT3BlbkdMIHN1Yi1pbWFnZSBleHRlbnNpb24sIG5vdyB0aGF0IHdlIGtu
b3cgaXQncyBhdmFpbGFibGUuCisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdU
SCwgYnl0ZXNQZXJMaW5lIC8gNCk7CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9S
T1dTLCBzb3VyY2VPZmZzZXQueSgpKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQ
X1BJWEVMUywgc291cmNlT2Zmc2V0LngoKSk7CisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJl
Y3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIChjb25zdCBjaGFyKilkYXRhKSkKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1df
TEVOR1RILCAwKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIDApOwor
ICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKTsKIH0KIAotdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6
UGl4ZWxGb3JtYXQgZm9ybWF0KQordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRz
KEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQm
IG9mZnNldCkKIHsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgR0xfQ01E
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0gICAgR0x1aW50IGdsRm9ybWF0
ID0gaXNPcGFxdWUoKSA/IEdMX1JHQiA6IEdMX1JHQkE7CiAgICAgTmF0aXZlSW1hZ2VQdHIgZnJh
bWVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICgh
ZnJhbWVJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaW50IGJ5dGVzUGVyTGluZTsKKyAg
ICBjb25zdCBjaGFyKiBpbWFnZURhdGE7CisKICNpZiBQTEFURk9STShRVCkKICAgICBRSW1hZ2Ug
cXRJbWFnZTsKLQogI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQog
ICAgIC8vIFdpdGggUVBBLCB3ZSBjYW4gYXZvaWQgYSBkZWVwIGNvcHkuCiAgICAgcXRJbWFnZSA9
ICpmcmFtZUltYWdlLT5oYW5kbGUoKS0+YnVmZmVyKCk7CkBAIC00NjQsNDAgKzQ5NiwxNSBAQCB2
b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjbwogICAgIC8vIFRoaXMgbWlnaHQgYmUgYSBkZWVwIGNvcHks
IGRlcGVuZGluZyBvbiBvdGhlciByZWZlcmVuY2VzIHRvIHRoZSBwaXhtYXAuCiAgICAgcXRJbWFn
ZSA9IGZyYW1lSW1hZ2UtPnRvSW1hZ2UoKTsKICNlbmRpZgotCi0gICAgaWYgKEludFNpemUocXRJ
bWFnZS5zaXplKCkpICE9IHNvdXJjZVJlY3Quc2l6ZSgpKQotICAgICAgICBxdEltYWdlID0gcXRJ
bWFnZS5jb3B5KHNvdXJjZVJlY3QpOwotICAgIGlmIChmb3JtYXQgPT0gQkdSQUZvcm1hdCB8fCBm
b3JtYXQgPT0gQkdSRm9ybWF0KSB7Ci0gICAgICAgIGlmIChkcml2ZXJTdXBwb3J0c0JHUkFTd2l6
emxpbmcoKSkKLSAgICAgICAgICAgIGdsRm9ybWF0ID0gaXNPcGFxdWUoKSA/IEdMX0JHUiA6IEdM
X0JHUkE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN3aXp6bGVCR1JBVG9SR0JBKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihxdEltYWdlLmJpdHMoKSksIHF0SW1hZ2Uuc2l6ZSgpKTsK
LSAgICB9Ci0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJn
ZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVj
dC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIHF0SW1hZ2UuY29uc3RCaXRz
KCkpKQotCisgICAgaW1hZ2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocXRJ
bWFnZS5jb25zdEJpdHMoKSk7CisgICAgYnl0ZXNQZXJMaW5lID0gcXRJbWFnZS5ieXRlc1Blckxp
bmUoKTsKICNlbGlmIFVTRShDQUlSTykKLQotI2lmICFDUFUoQklHX0VORElBTikKLSNpZiBkZWZp
bmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKLSAgICBzd2l6emxlQkdSQVRvUkdCQShyZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Kj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShmcmFtZUltYWdl
KSksCi0gICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KGZyYW1lSW1hZ2UpICogY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGZyYW1lSW1hZ2Up
KTsKLSNlbHNlCi0gICAgZ2xGb3JtYXQgPSBpc09wYXF1ZSgpID8gR0xfQkdSIDogR0xfQkdSQTsK
LSNlbmRpZgorICAgIGltYWdlRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoZnJh
bWVJbWFnZSk7CisgICAgYnl0ZXNQZXJMaW5lID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKGZyYW1lSW1hZ2UpOwogI2VuZGlmCiAKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19S
T1dfTEVOR1RILCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoZnJhbWVJbWFnZSkgLyA0
KTsKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIHNvdXJjZVJlY3QueSgp
KTsKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgc291cmNlUmVjdC54
KCkpOwotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5o
ZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsRm9ybWF0LCBHTF9VTlNJR05F
RF9CWVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZGF0YShmcmFtZUltYWdlKSkpOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19M
RU5HVEgsIDApOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgMCk7Ci0g
ICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIDApOwotI2VuZGlmCisgICAg
dXBkYXRlQ29udGVudHMoaW1hZ2VEYXRhLCB0YXJnZXRSZWN0LCBvZmZzZXQsIGJ5dGVzUGVyTGlu
ZSk7CisKIH0KIAogc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9q
ZWN0aW9uTWF0cml4KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgZmxpcCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuaAppbmRleCA1NDdmZTJmOGIxNzc2ZTY3NzBlY2M3NjYyZWFmZjBhYjQwMjI5ZGQyLi5iNmM2
ZTQyY2NiMzg4YWRkY2EyZDk5ZGY1ZWZkNjhjOGRiODZhYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5o
CkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpIHsgbV9jb250ZXh0ID0gY29udGV4dDsgfQogICAgIEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAg
ICAgdmlydHVhbCBib29sIGlzT3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIHZvaWQgcGxhdGZvcm1VcGRhdGVDb250ZW50cyhOYXRpdmVJbWFnZVB0ciwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFJlY3QmLCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCk7CisgICAg
dm9pZCBwbGF0Zm9ybVVwZGF0ZUNvbnRlbnRzKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgQWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVy
YXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gT3BlbkdMTW9kZTsgfQogCiBwcml2YXRlOgpAQCAt
ODMsMTAgKzgzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVTdGVuY2lsKCk7CiAg
ICAgfkJpdG1hcFRleHR1cmVHTCgpOwogICAgIHZpcnR1YWwgdWludDMyX3QgaWQoKSBjb25zdCB7
IHJldHVybiBtX2lkOyB9CisgICAgdWludDMyX3QgdGV4dHVyZVRhcmdldCgpIGNvbnN0IHsgcmV0
dXJuIEdMX1RFWFRVUkVfMkQ7IH0KICAgICBJbnRTaXplIHRleHR1cmVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0dXJlU2l6ZTsgfQogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJl
TWFwcGVyR0wqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KLSAgICB2b2lk
IHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQ
aXhlbEZvcm1hdCk7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29u
c3Qgdm9pZCosIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9m
ZnNldCwgaW50IGJ5dGVzUGVyTGluZSk7CiAKIHByaXZhdGU6CiAgICAgR0x1aW50IG1faWQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCmluZGV4IGU1M2I5ZjhkNmMwZDA3
OGZmMzAyNjExMWFmYjM4ZmMwZGFmMTM2ZDMuLjRjMjgxNzdkMDQ0YjE1NjdjOTE4YzdmMjYwMDFh
YTk0NWYwODJlNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCkBA
IC0yNSwxNCArMjUsMTUgQEAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhj
b25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQordm9pZCBCaXRtYXBU
ZXh0dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBi
eXRlc1BlckxpbmUpCiB7CiAjaWYgUExBVEZPUk0oUVQpCi0gICAgUUltYWdlIGltYWdlKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWNoYXIqPihkYXRhKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJn
ZXRSZWN0LmhlaWdodCgpLCB0YXJnZXRSZWN0LndpZHRoKCkgKiA0LCBRSW1hZ2U6OkZvcm1hdF9B
UkdCMzJfUHJlbXVsdGlwbGllZCk7CisgICAgUUltYWdlIGltYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWNoYXIqPihkYXRhKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdo
dCgpLCBieXRlc1BlckxpbmUsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsK
KwogICAgIFFQYWludGVyKiBwYWludGVyID0gbV9pbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKTsKICAgICBwYWludGVyLT5zYXZlKCk7CiAgICAgcGFpbnRlci0+c2V0Q29tcG9zaXRp
b25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICBwYWludGVyLT5k
cmF3SW1hZ2UodGFyZ2V0UmVjdCwgaW1hZ2UpOworICAgIHBhaW50ZXItPmRyYXdJbWFnZSh0YXJn
ZXRSZWN0LCBpbWFnZSwgSW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6ZSgpKSk7
CiAgICAgcGFpbnRlci0+cmVzdG9yZSgpOwogI2VuZGlmCiB9CkBAIC00Miw5ICs0Myw5IEBAIHZv
aWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjpkaWRSZXNldCgpCiAgICAgbV9pbWFnZSA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoY29udGVudFNpemUoKSk7CiB9CiAKLXZvaWQgQml0bWFwVGV4dHVy
ZUltYWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIFBpeGVsRm9ybWF0KQordm9p
ZCBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwg
Y29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKIHsKLSAg
ICBtX2ltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJH
QiwgdGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgQ29tcG9zaXRlQ29weSk7CisgICAgbV9pbWFnZS0+
Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHRhcmdldFJl
Y3QsIEludFJlY3Qob2Zmc2V0LCB0YXJnZXRSZWN0LnNpemUoKSksIENvbXBvc2l0ZUNvcHkpOwog
fQogCiB2b2lkIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6YmVnaW5DbGlwKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaAppbmRleCAyODI2YzRiOTYwZWFlMTZjZjAyYzgzNzkw
YTc1NmQ0ZWFiZTViZDI5Li4zN2M5OGFiOGU5Yjg1MTZhZjAwNDQxMWQzZjc0Yjk5ZDllMTlmMTYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCkBAIC0zNCw4ICszNCw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzZXQoKTsKICAgICB2aXJ0dWFsIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KICAgICBpbmxpbmUgR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS0+Y29u
dGV4dCgpIDogMDsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNv
bnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgUGl4ZWxGb3JtYXQpOwotICAgIHZvaWQgdXBk
YXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCk7
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0
IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZz
ZXQsIGludCBieXRlc1BlckxpbmUpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB2b2lk
IGFwcGx5RmlsdGVycyhjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCmluZGV4IDIzNzk3ZTYzYjU0
NDQ3NjRmZTgxZGFjMmVkNDM0MDQ5NjU1MDY5ZDIuLmRiNTk4MDc5YzU2Y2Y5N2I5MGRhYWE1OWZm
MjBiYWZkNDY1OTFjN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCkBAIC0xMzEsNyAr
MTMxLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZShUZXh0
dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGkKICAgICBpbWFnZSA9IGltYWdlQnVmZmVy
LT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAjZW5kaWYKIAotICAgIHN0YXRpY19jYXN0
PFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZSo+KG1fYmFja2luZ1N0b3JlLmdldCgpKS0+
dXBkYXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgaW1hZ2UuZ2V0KCksIG1fc2l6ZSwgZGlydHlS
ZWN0LCBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0KTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJl
TWFwcGVyVGlsZWRCYWNraW5nU3RvcmUqPihtX2JhY2tpbmdTdG9yZS5nZXQoKSktPnVwZGF0ZUNv
bnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLmdldCgpLCBtX3NpemUsIGRpcnR5UmVjdCk7CiB9
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBk
YXRlSW5mby5jcHAKaW5kZXggYTE1ZDcxNmIxM2YzNjY1M2M0YmUwODU0NjVjYzUzNGJkODBmZDEy
OS4uNWJiMTg5NTk3YmIwOWMzMTJmNmFlNDdmNzc2ZDc5NWNmMzI5MjFkYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9VcGRhdGVJbmZvLmNwcApAQCAtNDAsNiArNDAsNyBAQCB2b2lkIFVwZGF0ZUluZm86
OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2Rlci0+ZW5jb2RlKHVwZGF0ZVJlY3RzKTsKICAgICBlbmNvZGVyLT5lbmNvZGUodXBkYXRlU2Nh
bGVGYWN0b3IpOwogICAgIGVuY29kZXItPmVuY29kZShiaXRtYXBIYW5kbGUpOworICAgIGVuY29k
ZXItPmVuY29kZShiaXRtYXBPZmZzZXQpOwogfQogCiBib29sIFVwZGF0ZUluZm86OmRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFVwZGF0ZUluZm8mIHJlc3VsdCkKQEAg
LTYwLDYgKzYxLDggQEAgYm9vbCBVcGRhdGVJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBVcGRhdGVJbmZvJiByZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShyZXN1bHQuYml0bWFwSGFuZGxlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC5iaXRtYXBP
ZmZzZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5oCmluZGV4IDQwYzg2ZGM1ZDNlZmEwM2NiNmE0YWNmMTE3
Njk1YzZiNTEzNTM3YjkuLmUzYThkZTI3ODQ3NWU5NGM0Y2UwYjBjNDVjMTkyNzI4Njc0OGRjZjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmgKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uaApAQCAtNjUsNiArNjUsOSBAQCBwdWJsaWM6
CiAKICAgICAvLyBUaGUgaGFuZGxlIG9mIHRoZSBzaGFyZWFibGUgYml0bWFwIGNvbnRhaW5pbmcg
dGhlIHVwZGF0ZXMuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSBhcmUgbm8gdXBkYXRlcy4KICAgICBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBiaXRtYXBIYW5kbGU7CisKKyAgICAvLyBUaGUgb2Zmc2V0
IGluIHRoZSBiaXRtYXAgd2hlcmUgdGhlIHJlbmRlcmVkIGNvbnRlbnRzIGFyZS4KKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBiaXRtYXBPZmZzZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9U
YXJnZXQucHJpCmluZGV4IDBkYjk4NTlmMDBiYTUwZDJiYjExZTRjNWI3M2Q2MzExOWQyYTM3Y2Iu
LjUwYmMxNTA5ZmM4NmNkZmE1ZjhmNmE3OTNjZjI4YmZhOGI4ZDhhOGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpA
QCAtMzYzLDYgKzM2Myw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29u
dHJvbGxlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBcCisgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJDb250ZXh0TWVudS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oIFwKQEAgLTM3MCw2ICszNzEs
NyBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlVuZG9TdGVwLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb25uZWN0aW9uVG9VSVByb2Nlc3Mu
aCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggXAogICAgIFdlYlByb2Nlc3MvcXQvUXRC
dWlsdGluQnVuZGxlLmggXApAQCAtNzI5LDYgKzczMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL1BhZ2VPdmVybGF5LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZS5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxh
cy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAgXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAppbmRleCAyNDQ5YzMxMjYzN2JkY2IxNzg5OTUx
YTBlZDQwODAxOGJmOGNjYWU1Li5mNzkwNjI3NTBmNTkwMjU4ZmEyZWQ5MzFmNjRlMDE0Zjg2NThl
NWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5
LmNwcApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGls
ZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaQogICAgIEludFJl
Y3Qgc291cmNlUmVjdCA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdHMuZmlyc3QoKTsKICAgICBJbnRS
ZWN0IHRhcmdldFJlY3QgPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHM7CiAgICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUodXBkYXRl
SW5mby5iaXRtYXBIYW5kbGUpOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJl
ZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQs
IHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGJpdG1hcCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBs
YXllcklELCB0aWxlSUQsIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlKHNvdXJjZVJl
Y3QsIHRhcmdldFJlY3QsIGJpdG1hcCwgdXBkYXRlSW5mby5iaXRtYXBPZmZzZXQpKSk7CiB9CiAK
IHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQs
IGludCB0aWxlSUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5
ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJl
ZVJlbmRlcmVyLmNwcAppbmRleCBmMjhkMDc5NGUxMTNjMzVhMjQ1MzJjYTZkNmVmOGNiZmQyODM3
MDQ0Li5kNmU3MmU2ZjY3OTY4NGY1NjdjMzk0ZjQwZGVhMjg3ODI0ZWRjMDA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTI2
NywxMSArMjY3LDEwIEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUoV2Vi
TGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQogICAgIGdldEJhY2tpbmdTdG9yZShsYXllcklE
KS0+cmVtb3ZlVGlsZSh0aWxlSUQpOwogfQogCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjp1
cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IHdlYWtCaXRtYXApCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVU
aWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYgdXBk
YXRlKQogewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7
CiAgICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5n
U3RvcmUobGF5ZXJJRCk7Ci0gICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwgc291
cmNlUmVjdCwgdGFyZ2V0UmVjdCwgYml0bWFwLmdldCgpKTsKKyAgICBiYWNraW5nU3RvcmUtPnVw
ZGF0ZVRpbGUodGlsZUlELCB1cGRhdGUuc291cmNlUmVjdCwgdXBkYXRlLnRhcmdldFJlY3QsIHVw
ZGF0ZS5iaXRtYXAsIHVwZGF0ZS5vZmZzZXQpOwogICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5k
aW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKIH0KIApAQCAtMjc5LDggKzI3OCw4IEBAIHZv
aWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgUGFz
c1JlZlB0cjxTaGFyZWFibGVCaXRtCiB7CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0
bWFwID0gd2Vha0JpdG1hcDsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0
ZSgpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdl
dCgpLCBiaXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCksIEJpdG1hcFRleHR1cmU6OkJHUkFGb3Jt
YXQpOwogICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNraW5n
U3RvcmUpOworICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVy
LmdldCgpLCBiaXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCkpOwogfQogCiB2b2lkIFdlYkxheWVy
VHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAppbmRleCA0NGNkYmE3Y2E0
Njk3NjAyZDNlNTA1ZTU5Y2QyOTJiMDBhNzA2YzE5Li4xODFiZTBjMDY4NGM2NGJiZjBkZGQ2NjUz
MjNkZmI3ZmI1Yzg4ODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
TGF5ZXJUcmVlUmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5
ZXJUcmVlUmVuZGVyZXIuaApAQCAtNDUsNiArNDUsMTkgQEAgY2xhc3MgV2ViTGF5ZXJVcGRhdGVJ
bmZvOwogCiBjbGFzcyBXZWJMYXllclRyZWVSZW5kZXJlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxXZWJMYXllclRyZWVSZW5kZXJlcj4sIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2xpZW50IHsKIHB1YmxpYzoKKyAgICBzdHJ1Y3QgVGlsZVVwZGF0ZSB7CisgICAgICAgIFdl
YkNvcmU6OkludFJlY3Qgc291cmNlUmVjdDsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCB0YXJn
ZXRSZWN0OworICAgICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXA7CisgICAgICAg
IFdlYkNvcmU6OkludFBvaW50IG9mZnNldDsKKyAgICAgICAgVGlsZVVwZGF0ZShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldCwgUGFz
c1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG5ld0JpdG1hcCwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIG5ld09mZnNldCkKKyAgICAgICAgICAgIDogc291cmNlUmVjdChzb3VyY2UpCisgICAgICAg
ICAgICAsIHRhcmdldFJlY3QodGFyZ2V0KQorICAgICAgICAgICAgLCBiaXRtYXAobmV3Qml0bWFw
KQorICAgICAgICAgICAgLCBvZmZzZXQobmV3T2Zmc2V0KQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICB9OwogICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKExheWVyVHJlZUhvc3RQcm94eSopOwog
ICAgIHZpcnR1YWwgfldlYkxheWVyVHJlZVJlbmRlcmVyKCk7CiAgICAgdm9pZCBwdXJnZUdMUmVz
b3VyY2VzKCk7CkBAIC02Myw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyU3Rh
dGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7CiAgICAgdm9pZCBjcmVhdGVUaWxl
KFdlYkxheWVySUQsIGludCwgZmxvYXQgc2NhbGUpOwogICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJM
YXllcklELCBpbnQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtYXA+KTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBj
b25zdCBUaWxlVXBkYXRlJik7CiAgICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOwogICAgIHZv
aWQgY3JlYXRlSW1hZ2UoaW50NjRfdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKICAg
ICB2b2lkIGRlc3Ryb3lJbWFnZShpbnQ2NF90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDNmOGE4Yzg5MjIxYWQ4NDkyMmJj
NTM3MjRhMjdmYmRjNjgyOWEzMjcuLmZlZTBjOTA2MjIwZjQxOGRhNTNkMWIxYzRiMzNlZjNhODFm
NTAwMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tp
bmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2lu
Z1N0b3JlLmNwcApAQCAtMjMsOCArMjMsNyBAQAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5H
KQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgi
Ci0KLSNpbmNsdWRlICJzdGRpby5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTAsMTggKzQ5LDE3IEBAIHZvaWQgTGF5ZXJC
YWNraW5nU3RvcmVUaWxlOjpzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWFwcGVyKQogICAgIH0KIAogICAgIFFJbWFnZSBxSW1hZ2UgPSBtX2JhY2tCdWZmZXItPmNy
ZWF0ZVFJbWFnZSgpOwotCiAgICAgaWYgKHNob3VsZFJlc2V0KQogICAgICAgICB0ZXh0dXJlLT5y
ZXNldChtX3NvdXJjZVJlY3Quc2l6ZSgpLCBxSW1hZ2UuaGFzQWxwaGFDaGFubmVsKCkgPyBCaXRt
YXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogMCk7Ci0KLSAgICB0ZXh0dXJlLT51cGRhdGVDb250
ZW50cyhxSW1hZ2UuY29uc3RCaXRzKCksIG1fc291cmNlUmVjdCk7CisgICAgdGV4dHVyZS0+dXBk
YXRlQ29udGVudHMocUltYWdlLmNvbnN0Qml0cygpLCBtX3NvdXJjZVJlY3QsIG1fYml0bWFwT2Zm
c2V0LCBxSW1hZ2UuYnl0ZXNQZXJMaW5lKCkpOwogICAgIG1fYmFja0J1ZmZlci5jbGVhcigpOwog
fQogCi12b2lkIExheWVyQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBTaGFyZWFibGVCaXRtYXAqIGJ1ZmZlcikKK3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmVUaWxl
OjpzZXRCYWNrQnVmZmVyKGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBidWZmZXIsIGNvbnN0IElu
dFBvaW50JiBvZmZzZXQpCiB7CiAgICAgbV9zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKICAgICBt
X3RhcmdldFJlY3QgPSB0YXJnZXRSZWN0OworICAgIG1fYml0bWFwT2Zmc2V0ID0gb2Zmc2V0Owog
ICAgIG1fYmFja0J1ZmZlciA9IGJ1ZmZlcjsKIH0KIApAQCAtNzYsMTEgKzc0LDEyIEBAIHZvaWQg
TGF5ZXJCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUoaW50IGlkKQogICAgIG1fdGlsZXNUb1JlbW92
ZS5hcHBlbmQoaWQpOwogfQogCi12b2lkIExheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKGlu
dCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgU2hhcmVhYmxlQml0bWFwKiBiYWNrQnVmZmVyKQorCit2b2lkIExheWVyQmFja2luZ1N0b3Jl
Ojp1cGRhdGVUaWxlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgdGFyZ2V0UmVjdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJhY2tCdWZmZXIs
IGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7CiAgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2lu
Z1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsKICAgICBBU1NFUlQo
aXQgIT0gbV90aWxlcy5lbmQoKSk7Ci0gICAgaXQtPnNlY29uZC5zZXRCYWNrQnVmZmVyKHRhcmdl
dFJlY3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIpOworICAgIGl0LT5zZWNvbmQuc2V0QmFja0J1
ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyLCBvZmZzZXQpOwogfQogCiBQ
YXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IExheWVyQmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdT
dG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmgK
aW5kZXggZjA4YjE0NDg3ZTBkZDI2YTZlNjIyNjBhYjU1MDU5MTVhNzNlMzNlNy4uYTI0MWU0YzE3
ZDBlYzBhMjU1ODhiZjhkZmFiMDdkMDJhYzNkNzIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmgKQEAgLTM5LDEyICszOSwxMyBAQCBwdWJs
aWM6CiAKICAgICBpbmxpbmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9
CiAgICAgdm9pZCBzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7Ci0gICAgdm9p
ZCBzZXRCYWNrQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiwgU2hhcmVhYmxlQml0bWFwKiBidWZmZXIpOworICAgIHZvaWQgc2V0QmFja0J1ZmZl
cihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBidWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7
CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iYWNrQnVmZmVyOwog
ICAgIFdlYkNvcmU6OkludFJlY3QgbV9zb3VyY2VSZWN0OwogICAgIFdlYkNvcmU6OkludFJlY3Qg
bV90YXJnZXRSZWN0OworICAgIFdlYkNvcmU6OkludFBvaW50IG1fYml0bWFwT2Zmc2V0OwogICAg
IGZsb2F0IG1fc2NhbGU7CiB9OwogCkBAIC01Miw3ICs1Myw3IEBAIGNsYXNzIExheWVyQmFja2lu
Z1N0b3JlIDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgewogcHVi
bGljOgogICAgIHZvaWQgY3JlYXRlVGlsZShpbnQsIGZsb2F0KTsKICAgICB2b2lkIHJlbW92ZVRp
bGUoaW50KTsKLSAgICB2b2lkIHVwZGF0ZVRpbGUoaW50LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFNoYXJlYWJsZUJpdG1hcCopOworICAgIHZvaWQg
dXBkYXRlVGlsZShpbnQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+LCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJCYWNraW5nU3RvcmUpOyB9CiAgICAgdm9pZCBj
b21taXRUaWxlT3BlcmF0aW9ucyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7CiAgICAgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcAppbmRleCA1MjNiNDE5NDczNGFhNDYxMzlkODZhYzA5OTIxMGFlNmZmOGRh
NGI0Li4zYWY2MjU3ZDUwOTlhZWM4NDdhYzk1YWU5Y2M5ZWQ1MTk3YmE1N2QwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
R3JhcGhpY3NMYXllci5jcHAKQEAgLTU1Myw2ICs1NTMsMTEgQEAgQ29sb3IgV2ViR3JhcGhpY3NM
YXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogICAgIHJldHVy
biBjb250ZW50c09wYXF1ZSgpID8gQ29sb3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50Owog
fQogCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gV2ViR3JhcGhpY3NMYXll
cjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCit7
CisgICAgcmV0dXJuIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+YmVnaW5Db250ZW50VXBkYXRl
KHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyAwIDogU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0Fs
cGhhLCBoYW5kbGUsIG9mZnNldCk7Cit9CisKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRl
VGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQogewogICAgIG1f
d2ViR3JhcGhpY3NMYXllckNsaWVudC0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUlu
Zm8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAppbmRleCBmOWQ2ZWE2NzRjYTNhMjQ0YmEyMDdjZWRi
ZWVkM2M5MjIxMGNkMDVlLi4yN2ZlYzU1ZWQ4ZmUxYTVkOTk0YmYyMzk2MTI2ZGYyYmZhOTczM2Jh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaApAQCAtNTksNiArNTksNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxX
ZWJMYXllcklEPiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7CiB9OwogfQogCkBAIC0xMjgsNiArMTI5LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdl
YktpdDo6VXBkYXRlSW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxl
SUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVU
aWxlKGludCB0aWxlSUQpOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50Jik7CiAKICAg
ICB2b2lkIHNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoV2ViS2l0OjpXZWJHcmFwaGljc0xheWVy
Q2xpZW50Kik7CiAgICAgdm9pZCBzeW5jQ2hpbGRyZW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZS5jcHAKaW5kZXggZWUxMTZjMmU5YjRlZjNjNzA4ZWYwZTYyOGY3YWEzNDExZWUyNTdk
Yy4uYWViNmViY2JiYjU4YzRhNzQwNTNlYzg1NzgwYWMzZjAyMmZkZWJmOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFj
a2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKQEAgLTcyLDE5ICs3MiwyMCBAQCBWZWN0b3I8SW50UmVj
dD4gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKCkKICAgICBp
ZiAoIWlzRGlydHkoKSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOwogCi0gICAg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVT
aGFyZWFibGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCBtX3RpbGVkQmFja2luZ1N0b3JlLT5zdXBwb3J0
c0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKTsKLSAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQoYml0bWFwLT5jcmVhdGVHcmFwaGlj
c0NvbnRleHQoKSk7CisgICAgVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgIE93blB0cjxHcmFw
aGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRh
dGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSwgdXBkYXRlSW5m
by5iaXRtYXBPZmZzZXQpOworICAgIGlmICghZ3JhcGhpY3NDb250ZXh0KQorICAgICAgICByZXR1
cm4gVmVjdG9yPEludFJlY3Q+KCk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1f
ZGlydHlSZWN0LngoKSwgLW1fZGlydHlSZWN0LnkoKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUobV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpLCBtX3Rp
bGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkpKTsKICAgICBtX3RpbGVkQmFja2luZ1N0
b3JlLT5jbGllbnQoKS0+dGlsZWRCYWNraW5nU3RvcmVQYWludChncmFwaGljc0NvbnRleHQuZ2V0
KCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPm1hcFRvQ29udGVudHMobV9kaXJ0eVJlY3QpKTsKIAot
ICAgIFVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKICAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3Vu
ZHMgPSBtX3JlY3Q7CiAgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gbV9kaXJ0eVJlY3Q7CiAgICAg
dXBkYXRlUmVjdC5tb3ZlKC1tX3JlY3QueCgpLCAtbV9yZWN0LnkoKSk7CiAgICAgdXBkYXRlSW5m
by51cGRhdGVSZWN0cy5hcHBlbmQodXBkYXRlUmVjdCk7CiAgICAgdXBkYXRlSW5mby51cGRhdGVT
Y2FsZUZhY3RvciA9IG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKTsKLSAgICBi
aXRtYXAtPmNyZWF0ZUhhbmRsZSh1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSk7CisgICAgZ3JhcGhp
Y3NDb250ZXh0LnJlbGVhc2UoKTsKIAogICAgIHN0YXRpYyBpbnQgaWQgPSAwOwogICAgIGlmICgh
bV9JRCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Rp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oCmluZGV4IDEyYjJlMDYwMmI0YmUw
MmMxZTk0ZjhmZDA4YjI4MzFkNzE4OTViZjMuLmRmYzI1MmU2OTAyNjA2Yjc3N2JiMDU5NjZhYmQ1
YzQ4MWFiNDhhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogCisjaW5jbHVkZSAiU2hhcmVh
YmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiVGlsZS5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0
b3JlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZS9JbnRSZWN0LmgiCkBAIC03OCw2ICs3OSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRh
dGVJbmZvJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNv
bnN0IFVwZGF0ZUluZm8mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50IHRp
bGVJRCkgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKIH07CiAKIGNsYXNzIFRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQgOiBwdWJsaWMgV2ViQ29yZTo6VGlsZWRC
YWNraW5nU3RvcmVCYWNrZW5kIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVXBkYXRlQXRsYXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllNDY0MTM1ZjlhMDlkNDZkNGVkNmE1
MzE4ZDZjMTEwZDdkYzgzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgorIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCisKKyNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlICJNYXRoRXh0cmFzLmgiCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1VwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhpbnQgZGltZW5zaW9uLCBTaGFy
ZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKQorICAgIDogbV9mbGFncyhmbGFncykKK3sKKyAgICBt
X2JpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKEludFNpemUoZGltZW5z
aW9uLCBkaW1lbnNpb24pLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbmV4dFBvd2VyT2ZUd28o
aW50IG51bWJlcikKK3sKKyAgICAvLyBUaGlzIGlzIGEgZmFzdCB0cmljayB0byBnZXQgbmV4dFBv
d2VyT2ZUd28gZm9yIGFuIGludGVnZXIuCisgICAgLS1udW1iZXI7CisgICAgbnVtYmVyIHw9IG51
bWJlciA+PiAxOworICAgIG51bWJlciB8PSBudW1iZXIgPj4gMjsKKyAgICBudW1iZXIgfD0gbnVt
YmVyID4+IDQ7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiA4OworICAgIG51bWJlciB8PSBudW1i
ZXIgPj4gMTY7CisgICAgbnVtYmVyKys7CisgICAgcmV0dXJuIG51bWJlcjsKK30KKwordm9pZCBV
cGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2xheW91dC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgTWluVGls
ZVNpemUgPSAzMjsKKyAgICBzdGF0aWMgY29uc3QgaW50IE1heFRpbGVTaXplID0gNTEyOworCisg
ICAgLy8gRGl2aWRlIG91ciBzcXVhcmUgdG8gc3F1YXJlIHBvd2VyLW9mLXR3byBib3hlcy4KKyAg
ICBmb3IgKGludCBjdXJzb3IgPSAwOyBjdXJzb3IgPCBzaXplKCkud2lkdGgoKTsgKSB7CisgICAg
ICAgIGludCByZW1haW5kZXIgPSBzaXplKCkud2lkdGgoKSAtIGN1cnNvcjsKKyAgICAgICAgaW50
IGRpbWVuc2lvbiA9IHN0ZDo6bWluKHJlbWFpbmRlciwgc3RkOjptaW4oTWF4VGlsZVNpemUsIHN0
ZDo6bWF4KE1pblRpbGVTaXplLCBuZXh0UG93ZXJPZlR3byhyZW1haW5kZXIgLyAyKSkpKTsKKyAg
ICAgICAgY3Vyc29yICs9IGRpbWVuc2lvbjsKKyAgICAgICAgbV9sYXlvdXQuYXBwZW5kKGRpbWVu
c2lvbik7CisgICAgfQorCisgICAgbV9idWZmZXJTdGF0ZXMucmVzaXplKG1fbGF5b3V0LnNpemUo
KSAqIG1fbGF5b3V0LnNpemUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2J1ZmZlclN0
YXRlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9idWZmZXJTdGF0ZXNbaV0gPSBBdmFpbGFibGU7
Cit9CisKK2ludCBVcGRhdGVBdGxhczo6ZmluZEF2YWlsYWJsZUluZGV4KGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUpCit7CisgICAgaW50IGRpbWVuc2lvbiA9IG1fbGF5b3V0LnNpemUoKTsK
KyAgICBpbnQgc3RyaWRlID0gZGltZW5zaW9uOworICAgIGludCByZXF1aXJlZERpbWVuc2lvbiA9
IHN0ZDo6bWF4KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBCZWdpbiBm
cm9tIHRoZSBzbWFsbGVzdCBidWZmZXIsIHVudGlsIHdlIHJlYWNoIHRoZSBzbWFsbGVzdCBhdmFp
bGFibGUgYnVmZmVyIHRoYXQncyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gb3VyIHJlY3QuCisgICAg
Zm9yIChpbnQgaSA9IG1fYnVmZmVyU3RhdGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgaSAtPSAoZGlt
ZW5zaW9uICsgMSksIC0tc3RyaWRlKSB7CisgICAgICAgIC8vIE5lZWQgYSBiaWdnZXIgYnVmZmVy
LgorICAgICAgICBpZiAobV9sYXlvdXRbaSAvIGRpbWVuc2lvbl0gPCByZXF1aXJlZERpbWVuc2lv
bikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIENoZWNrIGFsbCBidWZmZXJz
IG9mIGN1cnJlbnQgc2l6ZSwgdG8gZmluZCBhbiBhdmFpbGFibGUgb25lLgorICAgICAgICBmb3Ig
KGludCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdHJpZGU7ICsrb2Zmc2V0KSB7CisgICAgICAgICAg
ICBpbnQgaW5kZXggPSBpIC0gb2Zmc2V0OworICAgICAgICAgICAgaWYgKG1fYnVmZmVyU3RhdGVz
W2luZGV4XSA9PSBBdmFpbGFibGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCit2b2lkIFVwZGF0ZUF0bGFzOjpk
aWRTd2FwQnVmZmVycygpCit7CisgICAgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbV9idWZmZXJTdGF0ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYnVm
ZmVyU3RhdGVzW2ldID0gQXZhaWxhYmxlOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4
dD4gVXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzaXplLCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGJ1aWxkTGF5b3V0
SWZOZWVkZWQoKTsKKyAgICBpbnQgaW5kZXggPSBmaW5kQXZhaWxhYmxlSW5kZXgoc2l6ZSk7CisK
KyAgICAvLyBObyBhdmFpbGFibGUgYnVmZmVyIHdhcyBmb3VuZCwgcmV0dXJuaW5nIG51bGwuCisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0PigpOworCisgICAgLy8gRklYTUU6IFVzZSB0cmktc3RhdGUgYnVmZmVycywgdG8gYWxsb3cg
ZmFzdGVyIHVwZGF0ZXMuCisgICAgbV9idWZmZXJTdGF0ZXNbaW5kZXhdID0gVGFrZW47CisgICAg
b2Zmc2V0ID0gb2Zmc2V0Rm9ySW5kZXgoaW5kZXgpOworICAgIEludFJlY3QgcmVjdChJbnRQb2lu
dDo6emVybygpLCBzaXplKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0Nv
bnRleHQgPSBtX2JpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgZ3JhcGhpY3ND
b250ZXh0LT50cmFuc2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CisgICAgZ3JhcGhpY3ND
b250ZXh0LT5jbGlwKHJlY3QpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocmVj
dCwgKGZsYWdzKCkgJiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpID8gQ29sb3I6OnRy
YW5zcGFyZW50IDogQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBncmFw
aGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsK
KyAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKK30KKworSW50UG9pbnQgVXBk
YXRlQXRsYXM6Om9mZnNldEZvckluZGV4KGludCBpbmRleCkgY29uc3QKK3sKKyAgICBJbnRQb2lu
dCBjb29yZChpbmRleCAlIG1fbGF5b3V0LnNpemUoKSwgaW5kZXggLyBtX2xheW91dC5zaXplKCkp
OworICAgIGludCB4ID0gMDsKKyAgICBpbnQgeSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb29yZC54KCk7ICsraSkKKyAgICAgICAgeCArPSBtX2xheW91dFtpXTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvb3JkLnkoKTsgKytpKQorICAgICAgICB5ICs9IG1fbGF5b3V0W2ldOwor
CisgICAgcmV0dXJuIEludFBvaW50KHgsIHkpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Vm
M2U5YzFkMDJjZjk5NzhiYmIwZmI4NzRkMGE5MWU2MDRmMDlmNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCkBAIC0wLDAg
KzEsNjQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFVwZGF0ZUF0bGFzX2gKKyNkZWZpbmUgVXBkYXRlQXRsYXNfaAorCisjaW5jbHVkZSAiU2hhcmVh
YmxlQml0bWFwLmgiCisKKyNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFJlY3Q7Cit9CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBVcGRhdGVBdGxhcyB7CitwdWJsaWM6CisgICAgVXBk
YXRlQXRsYXMoaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyk7CisKKyAgICBQ
YXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0K
KyAgICBpbmxpbmUgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9iaXRt
YXAtPnNpemUoKTsgfQorCisgICAgLy8gUmV0dXJucyBhIG51bGwgcG9pbnRlciBvZiB0aGVyZSBp
cyBubyBhdmFpbGFibGUgYnVmZmVyLgorICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpOworICAgIHZvaWQgZGlkU3dhcEJ1ZmZl
cnMoKTsKKyAgICBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4g
bV9mbGFnczsgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwor
ICAgIFdlYkNvcmU6OkludFBvaW50IG9mZnNldEZvckluZGV4KGludCkgY29uc3Q7CisgICAgaW50
IGZpbmRBdmFpbGFibGVJbmRleChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisKK3ByaXZhdGU6
CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIEF2YWlsYWJsZSwKKyAgICAgICAgVGFrZW4KKyAg
ICB9OworCisgICAgVmVjdG9yPFN0YXRlPiBtX2J1ZmZlclN0YXRlczsKKyAgICBWZWN0b3I8aW50
PiBtX2xheW91dDsKKyAgICBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIG1fZmxhZ3M7CisgICAgUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iaXRtYXA7Cit9OworCit9CisjZW5kaWYKKyNlbmRpZiAv
LyBVcGRhdGVBdGxhc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4IDEzZTlmYzE1Mzc1ODhmZmY3ZTZm
Yzc4OGVjMDY2ZDM5M2UxYTlmMGEuLjEzZWE5NmFhZmM5YjVjMmJlNWU0ZWM1Njg2OTk3OWUxZjlm
Yjg1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9M
YXllclRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKICNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KQEAgLTMyOSw3ICszMzAsNyBAQCBpbnQ2NF90IExh
eWVyVHJlZUhvc3RRdDo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCiAgICAg
ICAgIHJldHVybiBrZXk7CiAgICAgfQogCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0
bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgaW1h
Z2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxw
aGEgOiAwKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVC
aXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCAoaW1hZ2UtPmN1cnJlbnRGcmFt
ZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKSk7CiAgICAg
ewogICAgICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRl
eHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQ6Onpl
cm8oKSk7CkBAIC00NTEsNiArNDUyLDggQEAgdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbmRlck5l
eHRGcmFtZSgpCiB7CiAgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7CiAgICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFz
ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS5kaWRTd2FwQnVmZmVy
cygpOwogfQogCiBib29sIExheWVyVHJlZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxv
d2VkKCkgY29uc3QKQEAgLTQ2NSw2ICs0NjgsMzIgQEAgdm9pZCBMYXllclRyZWVIb3N0UXQ6OnB1
cmdlQmFja2luZ1N0b3JlcygpCiAgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsK
IAogICAgIEFTU0VSVCghbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkp
OworICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOworfQorCitVcGRhdGVBdGxhcyYgTGF5ZXJU
cmVlSG9zdFF0OjpnZXRBdGxhcyhTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChtX3VwZGF0ZUF0bGFzZXNbaV0uZmxhZ3MoKSA9PSBmbGFncykKKyAgICAgICAgICAg
IHJldHVybiBtX3VwZGF0ZUF0bGFzZXNbaV07CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBpbnQg
U2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDIwMDA7CisgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVu
ZChVcGRhdGVBdGxhcyhTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpOworICAgIHJldHVy
biBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpOworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dD4gTGF5ZXJUcmVlSG9zdFF0OjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK3sK
KyAgICBVcGRhdGVBdGxhcyYgYXRsYXMgPSBnZXRBdGxhcyhmbGFncyk7CisgICAgaWYgKCFhdGxh
cy5iaXRtYXAoKS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCisgICAgICAgIHJldHVybiBQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4oKTsKKworICAgIC8vIFRoaXMgd2lsbCByZXR1
cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyLgorICAgIE93blB0cjxXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLmJlZ2luUGFpbnRp
bmdPbkF2YWlsYWJsZUJ1ZmZlcihzaXplLCBvZmZzZXQpOworICAgIGlmICghZ3JhcGhpY3NDb250
ZXh0KQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
KCk7CisKKyAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgKaW5kZXggOGQzMjM2ZWY0MmRkODdhYTJmNGZkMTk3
NWRhNTZlNThkMzdlZmM4OC4uNzkxMjg0MjQ5ZjcxNmI5ZGIwZTljZTQxYzU1NGQzYzFlMTk4MmY0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9M
YXllclRyZWVIb3N0UXQuaApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUNv
bnRleHQuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
KyNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgogI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CkBAIC03Niw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CiAKKyAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKKwogcHJvdGVjdGVkOgogICAgIGV4
cGxpY2l0IExheWVyVHJlZUhvc3RRdChXZWJQYWdlKik7CiAKQEAgLTk1LDYgKzk4LDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CiAgICAgdm9pZCBz
ZW5kTGF5ZXJzVG9VSSgpOwogCisgICAgVXBkYXRlQXRsYXMmIGdldEF0bGFzKFNoYXJlYWJsZUJp
dG1hcDo6RmxhZ3MpOworCiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9v
dExheWVyOwogCiAgICAgLy8gVGhlIGxheWVyIHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9z
aXRlZCBjb250ZW50LgpAQCAtMTA1LDYgKzExMCw3IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0
PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgSGFz
aE1hcDxpbnQ2NF90LCBpbnQ+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHM7Cisg
ICAgVmVjdG9yPFVwZGF0ZUF0bGFzPiBtX3VwZGF0ZUF0bGFzZXM7CiAKICAgICBib29sIG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwogICAgIGJvb2wgbV9pc1ZhbGlkOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>