<?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>23453</bug_id>
          
          <creation_ts>2009-01-21 01:57:30 -0800</creation_ts>
          <short_desc>Devirtualize width/height/x/y on RenderObject and just make it non-virtual on RenderBox</short_desc>
          <delta_ts>2009-01-21 18:32:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106450</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-21 01:57:30 -0800</bug_when>
    <thetext>This bug is covering taking width/height/x/y on RenderObject and removing it from that class completely.  The methods will become non-virtual on RenderBox instead.

This forces many derived classes to tighten up their type handling and will make people have to think about the special objects like RenderTexts that can consist of more than one rect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106451</commentid>
    <comment_count>1</comment_count>
      <attachid>26891</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-21 01:57:59 -0800</bug_when>
    <thetext>Created attachment 26891
Work in progress. All files compile except for RenderObject.cpp and bidi.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106490</commentid>
    <comment_count>2</comment_count>
      <attachid>26902</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-21 12:49:40 -0800</bug_when>
    <thetext>Created attachment 26902
Compiles.  Crashes, but at least it compiles. :)

Just storing my work.  Not ready yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106532</commentid>
    <comment_count>3</comment_count>
      <attachid>26913</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-21 16:09:15 -0800</bug_when>
    <thetext>Created attachment 26913
Patch that passes all layout tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106533</commentid>
    <comment_count>4</comment_count>
      <attachid>26914</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-21 16:13:05 -0800</bug_when>
    <thetext>Created attachment 26914
Patch that passes all layout tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106541</commentid>
    <comment_count>5</comment_count>
      <attachid>26914</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-21 16:44:55 -0800</bug_when>
    <thetext>Comment on attachment 26914
Patch that passes all layout tests

&gt;              if (o-&gt;isText() &amp;&amp; static_cast&lt;RenderText *&gt;(o)-&gt;firstTextBox()) {
&gt; -                point.move(static_cast&lt;RenderText *&gt;(o)-&gt;minXPos(),
&gt; +                point.move(static_cast&lt;RenderText *&gt;(o)-&gt;boundingBoxX(),
&gt;                             static_cast&lt;RenderText *&gt;(o)-&gt;firstTextBox()-&gt;root()-&gt;topOverflow());
&gt; -            } else
&gt; -                point.move(o-&gt;xPos(), o-&gt;yPos());
&gt; +            } else {
&gt; +                RenderBox* box = static_cast&lt;RenderBox*&gt;(o);
&gt; +                point.move(box-&gt;x(), box-&gt;y());
&gt; +            }

This code is casting this to RenderBox* without checking that it&apos;s a RenderBox. For example, it could be a RenderText* with 0 for firstTextBox().

&gt;      if (!o-&gt;isInline() || o-&gt;isReplaced())
&gt;      {
&gt; +        RenderBox* box = static_cast&lt;RenderBox*&gt;(o);

What guarantees this is a RenderBox? There are some strange classes like RenderPath, RenderSVGContainer, and RenderSVGGradientStop. Are we guaranteed it&apos;s not one of those? Do the isInline and isReplaced checks guarantee it&apos;s a RenderBox?

&gt; +            if (o-&gt;isText()) {
&gt; +                RenderText* text = static_cast&lt;RenderText*&gt;(o);
&gt; +                point.move(text-&gt;boundingBoxX() + text-&gt;boundingBoxWidth(), text-&gt;boundingBoxHeight());
&gt; +            } else {
&gt; +                RenderBox* box = static_cast&lt;RenderBox*&gt;(o);
&gt; +                point.move(box-&gt;x() + box-&gt;width(), box-&gt;y() + box-&gt;height());
&gt; +            }

What prevents us from getting a RenderObject of one of the more exotic types here? Is it safe to assume it can only be RenderText or RenderBox?

&gt; +    return m_renderer &amp;&amp; m_renderer-&gt;isBox() ? static_cast&lt;const RenderBox* const&gt;(m_renderer) : 0;

You shouldn&apos;t need the &quot;const&quot; after the &quot;*&quot; in this expression.

&gt;  IntRect Node::getRect() const
&gt;  {
&gt;      // FIXME: broken with transforms
&gt; -    if (renderer()) {
&gt; -        FloatPoint absPos = renderer()-&gt;localToAbsolute();
&gt; -        return IntRect(roundedIntPoint(absPos),
&gt; -                       IntSize(renderer()-&gt;width(), renderer()-&gt;height() + renderer()-&gt;borderTopExtra() + renderer()-&gt;borderBottomExtra()));
&gt; -    }
&gt; +    if (renderer())
&gt; +        return renderer()-&gt;absoluteBoundingBoxRect();
&gt;      return IntRect();
&gt;  }

Could we do this fix first in another patch?

&gt; +    // Use with caution. Does no type checking.  Mostly a convenience method for shadow nodes of form controls, where we know exactly
&gt; +    // what kind of renderer we made.
&gt; +    RenderBox* renderBox() const;

This comment is inaccurate. The function does indeed do type checking. I think what you mean to say is that this is illegal to call on something that has a renderer that is not a RenderBox.

&gt; -    return node-&gt;renderer()-&gt;isReplaced() &amp;&amp; canHaveChildrenForEditing(node) &amp;&amp; node-&gt;renderer()-&gt;height() != 0 &amp;&amp; !node-&gt;firstChild();
&gt; +    return node-&gt;renderer()-&gt;isReplaced() &amp;&amp; canHaveChildrenForEditing(node) &amp;&amp; static_cast&lt;RenderBox*&gt;(node-&gt;renderer())-&gt;height() != 0 &amp;&amp; !node-&gt;firstChild();

Should use renderBox() here. Is this renderer guaranteed to not have an exotic type of RenderObject?

&gt;      if (!node()-&gt;hasTagName(htmlTag) &amp;&amp; renderer-&gt;isBlockFlow() &amp;&amp; !hasRenderedNonAnonymousDescendantsWithHeight(renderer) &amp;&amp;
&gt; -       (renderer-&gt;height() || node()-&gt;hasTagName(bodyTag)))
&gt; +       (static_cast&lt;RenderBox*&gt;(renderer)-&gt;height() || node()-&gt;hasTagName(bodyTag)))
&gt;          return offset() == 0 &amp;&amp; !nodeIsUserSelectNone(node());

Is isBlockFlow() enough to guarantee this is a RenderBox and not a RenderText or exotic type of RenderObject?

&gt; -    if (renderer-&gt;height() == 0 || (renderer-&gt;isListItem() &amp;&amp; renderer-&gt;isEmpty()))
&gt; +    RenderBlock* block = static_cast&lt;RenderBlock*&gt;(renderer);
&gt; +    if (block-&gt;height() == 0 || (block-&gt;isListItem() &amp;&amp; block-&gt;isEmpty()))
&gt;          return appendBlockPlaceholder(container);

What guarantees the renderer is a RenderBlock?

&gt; -    return renderer()-&gt;width();
&gt; +    return static_cast&lt;RenderBox*&gt;(renderer())-&gt;width();

Should use the renderBox() function here.

&gt; -    return renderer()-&gt;height();
&gt; +    return static_cast&lt;RenderBox*&gt;(renderer())-&gt;height();

Here too.

&gt; -    RenderObject* renderer = m_highlightedNode-&gt;renderer();
&gt; +    RenderBox* renderer = m_highlightedNode-&gt;renderBox();

This is bad in debug builds because renderBox() will assert if the renderer is a RenderText. Unless you somehow know this is a RenderBox?

&gt; +    // Use with caution! The type is not checked!
&gt; +    RenderBox* renderBox() const;

I think you should say this differently. Instead you should say this is only legal to call if you know the renderer is a RenderBox. I don&apos;t understand why you included the runtime check in Node, but not here.

I stopped reviewing at InlineFlowBox.h. I&apos;ll look again later.

I think this patch is really tricky because it mixes mechanical changes with real changes to the substance of things. As long as you&apos;re confident we have good enough regression test coverage, I think I can make myself comfortable with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106544</commentid>
    <comment_count>6</comment_count>
    <who name="Robert O&apos;Callahan">roc</who>
    <bug_when>2009-01-21 16:49:30 -0800</bug_when>
    <thetext>All the Element scroll*/client*/offset* methods call renderBox(), which asserts the renderer is a RenderBox and will die if it isn&apos;t, but those methods can be called on any kind of element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106545</commentid>
    <comment_count>7</comment_count>
      <attachid>26914</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-21 16:58:57 -0800</bug_when>
    <thetext>Comment on attachment 26914
Patch that passes all layout tests

Seems this could use a FIXME for when you fix y():

 void RenderBlock::paint(PaintInfo&amp; paintInfo, int tx, int ty)
14851485 {
1486      tx += m_x;
1487      ty += m_y;
 1486     tx += x();
 1487     ty += m_frameRect.y();

I guess you should just search for m_frameRect.y(), cause you seem to use that in several places.

I doubt this is a win:
55         // Optimize for the case where we don&apos;t move at all.
 56         if (x == m_frameRect.x() &amp;&amp; y == m_frameRect.y())
 57             return;

But if you found it to be in the PLT, I&apos;ll believe you.

The next lines:
58         m_frameRect.setX(x);
 59         m_frameRect.setY(y);
can be replaced by
m_frameRect.setOrigin(point) if you invert which setLocation calls which setLocation

Seems odd this would be needed:
private:
 72 protected:
6973     RenderObject* m_firstChild;
7074     RenderObject* m_lastChild;

Why this cast is safe is unclear to me:

564             if (!c-&gt;isFloatingOrPositioned() &amp;&amp; !c-&gt;isText() &amp;&amp; !c-&gt;isInlineFlow())
 565                 bottom = max(bottom, static_cast&lt;RenderBox*&gt;(c)-&gt;y() + c-&gt;lowestPosition(false));

If table cells are RenderBoxs, seems we should just cast directly to RenderTableCell:
             if (child-&gt;isTableCell()) {
 2233                 IntRect bbox = static_cast&lt;RenderBox*&gt;(child)-&gt;borderBoxRect();


Maybe I&apos;m missing context, but this seems unsafe:
@@ void RenderObject::updateHitTestResult(H
 2569             RenderBox* block = static_cast&lt;RenderBox*&gt;(this);
27412570             if (isInline())
27422571                 block = containingBlock();

I hope SVG never depended on this?
TransformationMatrix RenderObject::localTransform() const
32703012 {
3271      return TransformationMatrix(1, 0, 0, 1, xPos(), yPos());
 3013     return TransformationMatrix();
32723014 }
32733015 

Seems unintentional:
127      bool m_widthChanged : 1;
 124     bool m_widthChanged: 1;


Phew!  I read through it all.

I&apos;m not sure I understand all of the SVG changes, but that&apos;s probably why the SVG code got wrong in the first place. :)

Assuming all of the pixel tests pass (or are changing to better values), then r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106553</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-21 18:32:56 -0800</bug_when>
    <thetext>Fixed in r40107.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26891</attachid>
            <date>2009-01-21 01:57:59 -0800</date>
            <delta_ts>2009-01-21 12:49:40 -0800</delta_ts>
            <desc>Work in progress. All files compile except for RenderObject.cpp and bidi.cpp.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>316450</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA0MDA3NSkKKysr
IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBhaXIu
aCIKICNpbmNsdWRlICJSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiU2hhZG93VmFsdWUuaCIKICNpbmNsdWRlICJXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIgogCkBAIC0zOTUsNyArMzk1LDExIEBAIHN0YXRpYyBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBnZXRCb3JkZXJSYWQKIAogc3RhdGljIEludFJlY3Qgc2l6aW5nQm94
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgp
LT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IHJlbmRlcmVyLT5jb250ZW50Qm94KCkgOiBy
ZW5kZXJlci0+Ym9yZGVyQm94KCk7CisgICAgaWYgKCFyZW5kZXJlci0+aXNCb3goKSkKKyAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAKKyAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19j
YXN0PFJlbmRlckJveCo+KHJlbmRlcmVyKTsKKyAgICByZXR1cm4gYm94LT5zdHlsZSgpLT5ib3hT
aXppbmcoKSA9PSBDT05URU5UX0JPWCA/IGJveC0+Y29udGVudEJveCgpIDogYm94LT5ib3JkZXJC
b3hSZWN0KCk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFRyYW5z
Zm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQpJbmRleDogZG9tL0NvbnRhaW5lck5vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGRvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gNDAwNzUpCisr
KyBkb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5j
bHVkZSAiTXV0YXRpb25FdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgpAQCAtNjkxLDEwICs2OTIsMTIgQEAgYm9vbCBDb250YWluZXJOb2Rl
OjpnZXRVcHBlckxlZnRDb3JuZXIoRgogICAgICAgICB9IGVsc2UgaWYgKChvLT5pc1RleHQoKSAm
JiAhby0+aXNCUigpKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsKICAgICAgICAgICAgIHBvaW50ID0g
by0+Y29udGFpbmVyKCktPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAgICAgICAgICAgaWYgKG8tPmlz
VGV4dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4obyktPmZpcnN0VGV4dEJveCgpKSB7
Ci0gICAgICAgICAgICAgICAgcG9pbnQubW92ZShzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8p
LT5taW5YUG9zKCksCisgICAgICAgICAgICAgICAgcG9pbnQubW92ZShzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0ICo+KG8pLT5ib3VuZGluZ0JveFgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4obyktPmZpcnN0VGV4dEJveCgpLT5yb290KCktPnRv
cE92ZXJmbG93KCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcG9pbnQu
bW92ZShvLT54UG9zKCksIG8tPnlQb3MoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obyk7Cisg
ICAgICAgICAgICAgICAgcG9pbnQubW92ZShib3gtPngoKSwgYm94LT55KCkpOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC03MTcs
OSArNzIwLDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcigKICAg
ICBSZW5kZXJPYmplY3QgKm8gPSByZW5kZXJlcigpOwogICAgIGlmICghby0+aXNJbmxpbmUoKSB8
fCBvLT5pc1JlcGxhY2VkKCkpCiAgICAgeworICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRp
Y19jYXN0PFJlbmRlckJveCo+KG8pOwogICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0
ZSgpOwotICAgICAgICBwb2ludC5tb3ZlKG8tPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAg
by0+aGVpZ2h0KCkgKyBvLT5ib3JkZXJUb3BFeHRyYSgpICsgby0+Ym9yZGVyQm90dG9tRXh0cmEo
KSk7CisgICAgICAgIHBvaW50Lm1vdmUoYm94LT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAg
IGJveC0+aGVpZ2h0KCkgKyBib3gtPmludHJpbnNpY1BhZGRpbmdUb3AoKSArIGJveC0+aW50cmlu
c2ljUGFkZGluZ0JvdHRvbSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC03
NDEsMTMgKzc0NSwxMyBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRDb3JuZXIo
CiAgICAgICAgIH0KICAgICAgICAgaWYgKG8tPmlzVGV4dCgpIHx8IG8tPmlzUmVwbGFjZWQoKSkg
ewogICAgICAgICAgICAgcG9pbnQgPSBvLT5jb250YWluZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7
Ci0gICAgICAgICAgICBpbnQgeE9mZnNldDsKLSAgICAgICAgICAgIGlmIChvLT5pc1RleHQoKSkK
LSAgICAgICAgICAgICAgICB4T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+
bWluWFBvcygpICsgby0+d2lkdGgoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB4T2Zmc2V0ID0gby0+eFBvcygpICsgby0+d2lkdGgoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgcG9pbnQubW92ZSh4T2Zmc2V0LCBvLT55UG9zKCkgKyBvLT5oZWlnaHQoKSk7CisgICAg
ICAgICAgICBpZiAoby0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJUZXh0KiB0
ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG8pOworICAgICAgICAgICAgICAgIHBvaW50
Lm1vdmUodGV4dC0+Ym91bmRpbmdCb3hYKCkgKyB0ZXh0LT5ib3VuZGluZ0JveFdpZHRoKCksIHRl
eHQtPmJvdW5kaW5nQm94SGVpZ2h0KCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG8pOworICAg
ICAgICAgICAgICAgIHBvaW50Lm1vdmUoYm94LT54KCkgKyBib3gtPndpZHRoKCksIGJveC0+eSgp
ICsgYm94LT5oZWlnaHQoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IGRvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgZG9tL0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTAsMTYgKzI5MCwyMCBAQCBpbnQgRWxlbWVudDo6b2Zmc2V0VG9w
KCkKIGludCBFbGVtZW50OjpvZmZzZXRXaWR0aCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCog
cmVuZCA9IHJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20o
cmVuZC0+b2Zmc2V0V2lkdGgoKSwgcmVuZCk7CisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9
IHJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKHJlbmQtPmlzQm94KCkpCisgICAgICAgICAgICBy
ZXR1cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29tKHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmQp
LT5vZmZzZXRXaWR0aCgpLCByZW5kKTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIGludCBF
bGVtZW50OjpvZmZzZXRIZWlnaHQoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmQgPSBy
ZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29tKHJlbmQtPm9m
ZnNldEhlaWdodCgpLCByZW5kKTsKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kID0gcmVuZGVy
ZXIoKSkgeworICAgICAgICBpZiAocmVuZC0+aXNCb3goKSkKKyAgICAgICAgICAgIHJldHVybiBh
ZGp1c3RGb3JBYnNvbHV0ZVpvb20oc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocmVuZCktPm9mZnNl
dEhlaWdodCgpLCByZW5kKTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IGRvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vTm9kZS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysg
ZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsMTQgKzU3NiwxNyBAQCBib29sIE5v
ZGU6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QKICAgICByZXR1cm4gaXNDb250ZW50RWRp
dGFibGUoKTsKIH0KIAorUmVuZGVyQm94KiBOb2RlOjpyZW5kZXJCb3goKSBjb25zdAoreworICAg
IEFTU0VSVCghbV9yZW5kZXJlciB8fCBtX3JlbmRlcmVyLT5pc0JveCgpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94KiBjb25zdD4obV9yZW5kZXJlcik7Cit9CisKIElu
dFJlY3QgTm9kZTo6Z2V0UmVjdCgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGJyb2tlbiB3aXRo
IHRyYW5zZm9ybXMKLSAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICBGbG9hdFBvaW50IGFi
c1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZSgpOwotICAgICAgICByZXR1cm4gSW50
UmVjdChyb3VuZGVkSW50UG9pbnQoYWJzUG9zKSwKLSAgICAgICAgICAgICAgICAgICAgICAgSW50
U2l6ZShyZW5kZXJlcigpLT53aWR0aCgpLCByZW5kZXJlcigpLT5oZWlnaHQoKSArIHJlbmRlcmVy
KCktPmJvcmRlclRvcEV4dHJhKCkgKyByZW5kZXJlcigpLT5ib3JkZXJCb3R0b21FeHRyYSgpKSk7
Ci0gICAgfQorICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXIoKS0+
YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCklu
ZGV4OiBkb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Ob2RlLmgJKHJldmlzaW9uIDQwMDc1
KQorKysgZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBjbGFzcyBQ
bGF0Zm9ybU1vdXNlRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBRdWFs
aWZpZWROYW1lOwogY2xhc3MgUmVuZGVyQXJlbmE7CitjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFN0cmluZ0J1aWxkZXI7CkBA
IC0zNzQsNiArMzc1LDEwIEBAIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3QqIHByZXZpb3VzUmVu
ZGVyZXIoKTsKICAgICB2b2lkIHNldFJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIHsg
bV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9CiAgICAgCisgICAgLy8gVXNlIHdpdGggY2F1dGlvbi4g
RG9lcyBubyB0eXBlIGNoZWNraW5nLiAgTW9zdGx5IGEgY29udmVuaWVuY2UgbWV0aG9kIGZvciBz
aGFkb3cgbm9kZXMgb2YgZm9ybSBjb250cm9scywgd2hlcmUgd2Uga25vdyBleGFjdGx5CisgICAg
Ly8gd2hhdCBraW5kIG9mIHJlbmRlcmVyIHdlIG1hZGUuCisgICAgUmVuZGVyQm94KiByZW5kZXJC
b3goKSBjb25zdDsKKyAgICAKICAgICB2b2lkIGNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0
cmluZyYgcHJlZml4LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZihj
b25zdCBOb2RlKikgY29uc3Q7CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBOb2RlKikgY29uc3Q7
CkluZGV4OiBkb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Qb3NpdGlvbi5jcHAJ
KHJldmlzaW9uIDQwMDc1KQorKysgZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjg0LDcgKzI4NCw3IEBAIHN0YXRpYyBib29sIGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmMK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRoZXJlIGlzIGEgVmlzaWJsZVBv
c2l0aW9uIGluc2lkZSBhbiBlbXB0eSBpbmxpbmUtYmxvY2sgY29udGFpbmVyLgotICAgIHJldHVy
biBub2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRp
dGluZyhub2RlKSAmJiBub2RlLT5yZW5kZXJlcigpLT5oZWlnaHQoKSAhPSAwICYmICFub2RlLT5m
aXJzdENoaWxkKCk7CisgICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSAm
JiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG5vZGUpICYmIHN0YXRpY19jYXN0PFJlbmRlckJv
eCo+KG5vZGUtPnJlbmRlcmVyKCkpLT5oZWlnaHQoKSAhPSAwICYmICFub2RlLT5maXJzdENoaWxk
KCk7CiB9CiAKIHN0YXRpYyBOb2RlKiBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShOb2RlKiBub2Rl
KQpAQCAtNTM2LDkgKzUzNiwxMSBAQCBib29sIFBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255
bW91c0RlCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gcmVuZGVyZXItPm5leHRJblByZU9y
ZGVyQWZ0ZXJDaGlsZHJlbigpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0ICpvID0gcmVuZGVyZXIt
PmZpcnN0Q2hpbGQoKTsgbyAmJiBvICE9IHN0b3A7IG8gPSBvLT5uZXh0SW5QcmVPcmRlcigpKQot
ICAgICAgICBpZiAoby0+ZWxlbWVudCgpICYmIG8tPmhlaWdodCgpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAKKyAgICAgICAgaWYgKG8tPmVsZW1lbnQoKSkgeworICAg
ICAgICAgICAgaWYgKChvLT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obykt
PmJvdW5kaW5nQm94SGVpZ2h0KCkpIHx8CisgICAgICAgICAgICAgICAgKG8tPmlzQm94KCkgJiYg
c3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obyktPmhlaWdodCgpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNTY5LDcg
KzU3MSw3IEBAIGJvb2wgUG9zaXRpb246OmlzQ2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgcmV0
dXJuIChvZmZzZXQoKSA9PSAwIHx8IG9mZnNldCgpID09IG1heERlZXBPZmZzZXQobm9kZSgpKSkg
JiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKS0+cGFyZW50KCkpOwogCiAgICAgaWYgKCFu
b2RlKCktPmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYg
IWhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSAm
JgotICAgICAgIChyZW5kZXJlci0+aGVpZ2h0KCkgfHwgbm9kZSgpLT5oYXNUYWdOYW1lKGJvZHlU
YWcpKSkKKyAgICAgICAoc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocmVuZGVyZXIpLT5oZWlnaHQo
KSB8fCBub2RlKCktPmhhc1RhZ05hbWUoYm9keVRhZykpKQogICAgICAgICByZXR1cm4gb2Zmc2V0
KCkgPT0gMCAmJiAhbm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpKTsKICAgICAKICAgICByZXR1
cm4gZmFsc2U7CkluZGV4OiBkb20vUG9zaXRpb25JdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIGRvbS9Qb3NpdGlv
bkl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUg
IlBvc2l0aW9uSXRlcmF0b3IuaCIKIAogI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgImh0bWxlZGl0
aW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE1MSw3ICsxNTEsNyBAQCBib29sIFBv
c2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKCkgY29uCiAgICAgICAgIHJldHVybiAoYXRTdGFy
dE9mTm9kZSgpIHx8IGF0RW5kT2ZOb2RlKCkpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVj
dE5vbmUobV9wYXJlbnQtPnBhcmVudCgpKTsKIAogICAgIGlmICghbV9wYXJlbnQtPmhhc1RhZ05h
bWUoaHRtbFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgIVBvc2l0aW9uOjpoYXNS
ZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChyZW5kZXJlcikgJiYKLSAg
ICAgICAocmVuZGVyZXItPmhlaWdodCgpIHx8IG1fcGFyZW50LT5oYXNUYWdOYW1lKGJvZHlUYWcp
KSkKKyAgICAgICAoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihyZW5kZXJlciktPmhlaWdodCgp
IHx8IG1fcGFyZW50LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkKICAgICAgICAgcmV0dXJuIGF0U3Rh
cnRPZk5vZGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fcGFyZW50KTsK
ICAgICAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAko
cmV2aXNpb24gNDAwNzUpCisrKyBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIlJlbW92ZU5vZGVDb21tYW5k
LmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaCIKICNp
bmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2Nr
LmgiCiAjaW5jbHVkZSAiU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCIKICNpbmNsdWRlICJTcGxp
dEVsZW1lbnRDb21tYW5kLmgiCiAjaW5jbHVkZSAiU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCIKQEAg
LTU5MCw3ICs1OTEsOCBAQCBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
CiAgICAgCiAgICAgLy8gYXBwZW5kIHRoZSBwbGFjZWhvbGRlciB0byBtYWtlIHN1cmUgaXQgZm9s
bG93cwogICAgIC8vIGFueSB1bnJlbmRlcmVkIGJsb2NrcwotICAgIGlmIChyZW5kZXJlci0+aGVp
Z2h0KCkgPT0gMCB8fCAocmVuZGVyZXItPmlzTGlzdEl0ZW0oKSAmJiByZW5kZXJlci0+aXNFbXB0
eSgpKSkKKyAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+
KHJlbmRlcmVyKTsKKyAgICBpZiAoYmxvY2stPmhlaWdodCgpID09IDAgfHwgKGJsb2NrLT5pc0xp
c3RJdGVtKCkgJiYgYmxvY2stPmlzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiBhcHBlbmRCbG9j
a1BsYWNlaG9sZGVyKGNvbnRhaW5lcik7CiAKICAgICByZXR1cm4gMDsKSW5kZXg6IGVkaXRpbmcv
RGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9EZWxldGVC
dXR0b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBlZGl0aW5nL0RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBACiAjaW5j
bHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZUNv
bW1hbmQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3gu
aCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTcxLDcgKzcxLDExIEBAIHN0YXRpYyBib29sIGlzRGVsZXRhYmxlRWxlbWVudChjb25z
dCBOb2QKICAgICBjb25zdCB1bnNpZ25lZCBtaW5pbXVtVmlzaWJsZUJvcmRlcnMgPSAzOwogCiAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFy
ZW5kZXJlciB8fCByZW5kZXJlci0+d2lkdGgoKSA8IG1pbmltdW1XaWR0aCB8fCByZW5kZXJlci0+
aGVpZ2h0KCkgPCBtaW5pbXVtSGVpZ2h0KQorICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVy
LT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9
IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmRlcmVyKTsKKyAgICBpZiAoYm94LT53aWR0aCgp
IDwgbWluaW11bVdpZHRoIHx8IGJveC0+aGVpZ2h0KCkgPCBtaW5pbXVtSGVpZ2h0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocmVuZGVyZXItPmlzVGFibGUoKSkKSW5kZXg6IGVk
aXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0VkaXRvci5jcHAJKHJldmlz
aW9uIDQwMDc1KQorKysgZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcx
LDcgKzIwNzEsNyBAQCBib29sIEVkaXRvcjo6aW5zaWRlVmlzaWJsZUFyZWEoY29uc3QgSW50CiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCByZWN0SW5QYWdlQ29vcmRzID0gY29u
dGFpbmVyLT5nZXRPdmVyZmxvd0NsaXBSZWN0KDAsIDApOwotICAgIEludFJlY3QgcmVjdEluRnJh
bWVDb29yZHMgPSBJbnRSZWN0KHJlbmRlcmVyLT54UG9zKCkgKiAtMSwgcmVuZGVyZXItPnlQb3Mo
KSAqIC0xLAorICAgIEludFJlY3QgcmVjdEluRnJhbWVDb29yZHMgPSBJbnRSZWN0KHJlbmRlcmVy
LT54KCkgKiAtMSwgcmVuZGVyZXItPnkoKSAqIC0xLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjdEluUGFnZUNvb3Jkcy53aWR0aCgpLCByZWN0SW5QYWdlQ29vcmRzLmhl
aWdodCgpKTsKIAogICAgIHJldHVybiByZWN0SW5GcmFtZUNvb3Jkcy5jb250YWlucyhwb2ludCk7
CkBAIC0yMDk3LDcgKzIwOTcsNyBAQCBib29sIEVkaXRvcjo6aW5zaWRlVmlzaWJsZUFyZWEoUmFu
Z2UqIHJhCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCByZWN0SW5QYWdlQ29v
cmRzID0gY29udGFpbmVyLT5nZXRPdmVyZmxvd0NsaXBSZWN0KDAsIDApOwotICAgIEludFJlY3Qg
cmVjdEluRnJhbWVDb29yZHMgPSBJbnRSZWN0KHJlbmRlcmVyLT54UG9zKCkgKiAtMSwgcmVuZGVy
ZXItPnlQb3MoKSAqIC0xLAorICAgIEludFJlY3QgcmVjdEluRnJhbWVDb29yZHMgPSBJbnRSZWN0
KHJlbmRlcmVyLT54KCkgKiAtMSwgcmVuZGVyZXItPnkoKSAqIC0xLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVjdEluUGFnZUNvb3Jkcy53aWR0aCgpLCByZWN0SW5QYWdl
Q29vcmRzLmhlaWdodCgpKTsKICAgICBJbnRSZWN0IHJlc3VsdFJlY3QgPSByYW5nZS0+Ym91bmRp
bmdCb3goKTsKICAgICAKSW5kZXg6IGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIGh0
bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTMgKzEwNywx
NiBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhCiAgICAgaWYgKCFk
b2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+dGFic1RvTGlua3MoZXZlbnQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXJlbmRlcmVyKCkpCisgICAgaWYgKCFy
ZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCiAgICAgLy8gQmVmb3JlIGNhbGxpbmcgYWJzb2x1dGVSZWN0cywgY2hlY2sgZm9yIHRo
ZSBjb21tb24gY2FzZSB3aGVyZSB0aGUgcmVuZGVyZXIKICAgICAvLyBvciBvbmUgb2YgdGhlIGNv
bnRpbnVhdGlvbnMgaXMgbm9uLWVtcHR5LCBzaW5jZSB0aGlzIGlzIGEgZmFzdGVyIGNoZWNrIGFu
ZAogICAgIC8vIGFsbW9zdCBhbHdheXMgcmV0dXJucyB0cnVlLgotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiByID0gcmVuZGVyZXIoKTsgcjsgciA9IHItPnZpcnR1YWxDb250aW51YXRpb24oKSkKKyAg
ICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmRlcmVyKCkpOwor
ICAgIGlmIChib3gtPndpZHRoKCkgPiAwICYmIGJveC0+aGVpZ2h0KCkgPiAwKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKFJlbmRlckZsb3cqIHIgPSBib3gtPnZpcnR1YWxDb250aW51
YXRpb24oKTsgcjsgciA9IHItPmNvbnRpbnVhdGlvbigpKQogICAgICAgICBpZiAoci0+d2lkdGgo
KSA+IDAgJiYgci0+aGVpZ2h0KCkgPiAwKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKSW5k
ZXg6IGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBodG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNyArMTk5LDcgQEAg
Ym9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0ZvY3VzYWJsZQogewogICAgIGlmIChkaXNh
YmxlZCgpIHx8ICFyZW5kZXJlcigpIHx8IAogICAgICAgICAocmVuZGVyZXIoKS0+c3R5bGUoKSAm
JiByZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkgfHwgCi0gICAg
ICAgIHJlbmRlcmVyKCktPndpZHRoKCkgPT0gMCB8fCByZW5kZXJlcigpLT5oZWlnaHQoKSA9PSAw
KQorICAgICAgICAhcmVuZGVyZXIoKS0+aXNCb3goKSB8fCBzdGF0aWNfY2FzdDxSZW5kZXJCb3gq
PihyZW5kZXJlcigpKS0+d2lkdGgoKSA9PSAwIHx8IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJl
bmRlcmVyKCkpLT5oZWlnaHQoKSA9PSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkluZGV4OiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkocmV2aXNpb24gNDAwNzUpCisr
KyBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDcg
KzMxMSw3IEBAIGludCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6d2lkdGgoKSBjb25zdAogICAgICAg
ICByZXR1cm4gMDsKICAgICAKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS0+d2lkdGgoKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocmVuZGVyZXIoKSktPndpZHRoKCk7CiB9CiAK
IGludCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6aGVpZ2h0KCkgY29uc3QKQEAgLTMyMCw3ICszMjAs
NyBAQCBpbnQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmhlaWdodCgpIGNvbnN0CiAgICAgICAgIHJl
dHVybiAwOwogICAgIAogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwotICAgIHJldHVybiByZW5kZXJlcigpLT5oZWlnaHQoKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocmVuZGVyZXIoKSktPmhlaWdodCgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBwYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJ
KHJldmlzaW9uIDQwMDc1KQorKysgcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE3NywxMiArMTE3NywxMiBAQCBib29sIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmFjY2Vzc2liCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIGNo
ZWNrIGZvciBvbmUtZGltZW5zaW9uYWwgaW1hZ2UKLSAgICAgICAgaWYgKG1fcmVuZGVyZXItPmhl
aWdodCgpIDw9IDEgfHwgbV9yZW5kZXJlci0+d2lkdGgoKSA8PSAxKQorICAgICAgICBSZW5kZXJJ
bWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KG1fcmVuZGVyZXIpOworICAg
ICAgICBpZiAoaW1hZ2UtPmhlaWdodCgpIDw9IDEgfHwgaW1hZ2UtPndpZHRoKCkgPD0gMSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICAgICAgLy8gY2hlY2sgd2hldGhl
ciByZW5kZXJlZCBpbWFnZSB3YXMgc3RyZXRjaGVkIGZyb20gb25lLWRpbWVuc2lvbmFsIGZpbGUg
aW1hZ2UKICAgICAgICAgaWYgKGlzTmF0aXZlSW1hZ2UoKSkgewotICAgICAgICAgICAgUmVuZGVy
SW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihtX3JlbmRlcmVyKTsKICAg
ICAgICAgICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkgewogICAgICAgICAgICAgICAgIElu
dFNpemUgaW1hZ2VTaXplID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShpbWFnZS0+
dmlldygpLT56b29tRmFjdG9yKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZVNpemUu
aGVpZ2h0KCkgPD0gMSB8fCBpbWFnZVNpemUud2lkdGgoKSA8PSAxOwpJbmRleDogcGFnZS9GcmFt
ZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gNDAw
NzUpCisrKyBwYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCwxMiArMjg4
LDEyIEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBGcmFtZVZpZXc6OmNyZWF0ZVMKICAgICAvLyBU
cnkgdGhlIDxib2R5PiBlbGVtZW50IGZpcnN0IGFzIGEgc2Nyb2xsYmFyIHNvdXJjZS4KICAgICBF
bGVtZW50KiBib2R5ID0gZG9jLT5ib2R5KCk7CiAgICAgaWYgKGJvZHkgJiYgYm9keS0+cmVuZGVy
ZXIoKSAmJiBib2R5LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShSZW5kZXJT
dHlsZTo6U0NST0xMQkFSKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRl
Q3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBib2R5LT5yZW5kZXJlcigpKTsKKyAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMs
IG9yaWVudGF0aW9uLCBib2R5LT5yZW5kZXJCb3goKSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIDxi
b2R5PiBkaWRuJ3QgaGF2ZSBhIGN1c3RvbSBzdHlsZSwgdGhlbiB0aGUgcm9vdCBlbGVtZW50IG1p
Z2h0LgogICAgIEVsZW1lbnQqIGRvY0VsZW1lbnQgPSBkb2MtPmRvY3VtZW50RWxlbWVudCgpOwog
ICAgIGlmIChkb2NFbGVtZW50ICYmIGRvY0VsZW1lbnQtPnJlbmRlcmVyKCkgJiYgZG9jRWxlbWVu
dC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNDUk9M
TEJBUikpCi0gICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9s
bGJhcih0aGlzLCBvcmllbnRhdGlvbiwgZG9jRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgICAg
IHJldHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcih0aGlzLCBvcmll
bnRhdGlvbiwgZG9jRWxlbWVudC0+cmVuZGVyQm94KCkpOwogICAgICAgICAKICAgICAvLyBJZiB3
ZSBoYXZlIGFuIG93bmluZyBpZnJhbWUvZnJhbWUgZWxlbWVudCwgdGhlbiBpdCBjYW4gc2V0IHRo
ZSBjdXN0b20gc2Nyb2xsYmFyIGFsc28uCiAgICAgUmVuZGVyUGFydCogZnJhbWVSZW5kZXJlciA9
IG1fZnJhbWUtPm93bmVyUmVuZGVyZXIoKTsKSW5kZXg6IHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1P
cGVyYXRpb25zIGJsZW5kRgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ29u
dmVydCB0aGUgVHJhbnNmb3JtT3BlcmF0aW9ucyBpbnRvIG1hdHJpY2VzCi0gICAgICAgIEludFNp
emUgc2l6ZSA9IGFuaW0tPnJlbmRlcmVyKCktPmJvcmRlckJveCgpLnNpemUoKTsKKyAgICAgICAg
SW50U2l6ZSBzaXplID0gYW5pbS0+cmVuZGVyZXIoKS0+aXNCb3goKSA/IHN0YXRpY19jYXN0PFJl
bmRlckJveCo+KGFuaW0tPnJlbmRlcmVyKCkpLT5ib3JkZXJCb3hSZWN0KCkuc2l6ZSgpIDogSW50
U2l6ZSgpOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tVDsKICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggdG9UOwogICAgICAgICBmcm9tLmFwcGx5KHNpemUsIGZyb21UKTsK
SW5kZXg6IHJlbmRlcmluZy9JbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9J
bmxpbmVCb3guY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9JbmxpbmVCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgogI2luY2x1ZGUgIklubGluZUZsb3dCb3guaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5o
IgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKIAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTg0LDYgKzg1LDEyIEBAIHZvaWQgSW5saW5lQm94Ojpz
aG93VHJlZUZvclRoaXMoKSBjb25zdAogfQogI2VuZGlmCiAKK1JlbmRlckJveCogSW5saW5lQm94
OjpyZW5kZXJCb3goKSBjb25zdAoreworICAgIEFTU0VSVChtX29iamVjdC0+aXNCb3goKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG1fb2JqZWN0KTsKK30KKwogaW50IElu
bGluZUJveDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdCAKIHsgCiAgICAgcmV0dXJuIG1fb2JqZWN0
LT5jYXJldE1pbk9mZnNldCgpOyAKQEAgLTEyOSw4ICsxMzYsMTAgQEAgdm9pZCBJbmxpbmVCb3g6
OmFkanVzdFBvc2l0aW9uKGludCBkeCwgaQogewogICAgIG1feCArPSBkeDsKICAgICBtX3kgKz0g
ZHk7Ci0gICAgaWYgKG1fb2JqZWN0LT5pc1JlcGxhY2VkKCkgfHwgbV9vYmplY3QtPmlzQlIoKSkK
LSAgICAgICAgbV9vYmplY3QtPnNldFBvcyhtX29iamVjdC0+eFBvcygpICsgZHgsIG1fb2JqZWN0
LT55UG9zKCkgKyBkeSk7CisgICAgaWYgKG1fb2JqZWN0LT5pc1JlcGxhY2VkKCkpIHsKKyAgICAg
ICAgUmVuZGVyQm94KiBib3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihtX29iamVjdCk7Cisg
ICAgICAgIGJveC0+bW92ZShkeCwgZHkpOworICAgIH0KIH0KIAogdm9pZCBJbmxpbmVCb3g6OnBh
aW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQpJ
bmRleDogcmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9Jbmxp
bmVCb3guaAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvSW5saW5lQm94LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
SGl0VGVzdFJlc3VsdDsKK2NsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJvb3RJbmxpbmVCb3g7CiAK
IHN0cnVjdCBIaXRUZXN0UmVxdWVzdDsKQEAgLTIzOSw2ICsyNDAsOSBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gb2JqZWN0KCkt
PnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmIG9iamVjdCgpLT5zdHlsZSgpLT5w
b2ludGVyRXZlbnRzKCkgIT0gUEVfTk9ORTsgfQogICAgIAorICAgIC8vIFVzZSB3aXRoIGNhdXRp
b24hIFRoZSB0eXBlIGlzIG5vdCBjaGVja2VkIQorICAgIFJlbmRlckJveCogcmVuZGVyQm94KCkg
Y29uc3Q7CisKIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3QqIG1fb2JqZWN0OwogCkluZGV4OiBy
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI1LDcgKzMyNSw3IEBAIGludCBJbmxpbmVGbG93Qm94
OjpwbGFjZUJveGVzSG9yaXpvbnRhbGwKICAgICAgICAgICAgICAgICAgICAgLy8gT3VyIG9mZnNl
dCB0aGF0IHdlIGNhY2hlIG5lZWRzIHRvIGJlIGZyb20gdGhlIGVkZ2Ugb2YgdGhlIHJpZ2h0IGJv
cmRlciBib3ggYW5kCiAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCB0aGUgbGVmdCBib3JkZXIg
Ym94LiAgV2UgaGF2ZSB0byBzdWJ0cmFjdCB8eHwgZnJvbSB0aGUgd2lkdGggb2YgdGhlIGJsb2Nr
CiAgICAgICAgICAgICAgICAgICAgIC8vICh3aGljaCBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUg
cm9vdCBsaW5lIGJveCkuCi0gICAgICAgICAgICAgICAgICAgIGN1cnItPnNldFhQb3Mocm9vdCgp
LT5vYmplY3QoKS0+d2lkdGgoKS14KTsKKyAgICAgICAgICAgICAgICAgICAgY3Vyci0+c2V0WFBv
cyhyb290KCktPmJsb2NrKCktPndpZHRoKCkteCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
IC8vIFRoZSBwb3NpdGlvbmVkIG9iamVjdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSB3aWR0aC4KICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjdXJyLT5vYmplY3QoKS0+aXNJbmxpbmVGbG93
KCkpIHsKQEAgLTM0MSw4ICszNDEsOCBAQCBpbnQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0hv
cml6b250YWxsCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFjdXJyLT5vYmplY3QoKS0+aXNDb21w
YWN0KCkgJiYgKCFjdXJyLT5vYmplY3QoKS0+aXNMaXN0TWFya2VyKCkgfHwgc3RhdGljX2Nhc3Q8
UmVuZGVyTGlzdE1hcmtlcio+KGN1cnItPm9iamVjdCgpKS0+aXNJbnNpZGUoKSkpIHsKICAgICAg
ICAgICAgICAgICB4ICs9IGN1cnItPm9iamVjdCgpLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgICAg
ICAgICAgY3Vyci0+c2V0WFBvcyh4KTsKLSAgICAgICAgICAgICAgICBsZWZ0UG9zaXRpb24gPSBt
aW4oeCArIGN1cnItPm9iamVjdCgpLT5vdmVyZmxvd0xlZnQoZmFsc2UpLCBsZWZ0UG9zaXRpb24p
OwotICAgICAgICAgICAgICAgIHJpZ2h0UG9zaXRpb24gPSBtYXgoeCArIGN1cnItPm9iamVjdCgp
LT5vdmVyZmxvd1dpZHRoKGZhbHNlKSwgcmlnaHRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAg
bGVmdFBvc2l0aW9uID0gbWluKHggKyBjdXJyLT5yZW5kZXJCb3goKS0+b3ZlcmZsb3dMZWZ0KGZh
bHNlKSwgbGVmdFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICByaWdodFBvc2l0aW9uID0gbWF4
KHggKyBjdXJyLT5yZW5kZXJCb3goKS0+b3ZlcmZsb3dXaWR0aChmYWxzZSksIHJpZ2h0UG9zaXRp
b24pOwogICAgICAgICAgICAgICAgIHggKz0gY3Vyci0+d2lkdGgoKSArIGN1cnItPm9iamVjdCgp
LT5tYXJnaW5SaWdodCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MzUsOCArNTM1
LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzVmVydGljYWxseQogICAgICAgICB9
IGVsc2UgaWYgKCFjdXJyLT5vYmplY3QoKS0+aXNCUigpKSB7CiAgICAgICAgICAgICBuZXdZICs9
IGN1cnItPm9iamVjdCgpLT5tYXJnaW5Ub3AoKTsKICAgICAgICAgICAgIG5ld0hlaWdodCA9IGN1
cnItPmhlaWdodCgpIC0gKGN1cnItPm9iamVjdCgpLT5tYXJnaW5Ub3AoKSArIGN1cnItPm9iamVj
dCgpLT5tYXJnaW5Cb3R0b20oKSk7Ci0gICAgICAgICAgICBvdmVyZmxvd1RvcCA9IGN1cnItPm9i
amVjdCgpLT5vdmVyZmxvd1RvcChmYWxzZSk7Ci0gICAgICAgICAgICBvdmVyZmxvd0JvdHRvbSA9
IGN1cnItPm9iamVjdCgpLT5vdmVyZmxvd0hlaWdodChmYWxzZSkgLSBuZXdIZWlnaHQ7CisgICAg
ICAgICAgICBvdmVyZmxvd1RvcCA9IGN1cnItPnJlbmRlckJveCgpLT5vdmVyZmxvd1RvcChmYWxz
ZSk7CisgICAgICAgICAgICBvdmVyZmxvd0JvdHRvbSA9IGN1cnItPnJlbmRlckJveCgpLT5vdmVy
Zmxvd0hlaWdodChmYWxzZSkgLSBuZXdIZWlnaHQ7CiAgICAgICAgIH0KIAogICAgICAgICBjdXJy
LT5zZXRZUG9zKG5ld1kpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysg
cmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEwICs2Niwx
MCBAQCB2b2lkIFJlbmRlckFwcGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhCiAgICAgLy8gSW4g
b3JkZXIgdG8gd29yayBhcm91bmQgdGhpcyBwcm9ibGVtIGFuZCBoYXZlIGEgY29ycmVjdCBzaXpl
IGZyb20gdGhlIHN0YXJ0LCB3ZSB3aWxsCiAgICAgLy8gdXNlIGZpeGVkIHdpZHRocy9oZWlnaHRz
IGZyb20gdGhlIHN0eWxlIHN5c3RlbSB3aGVuIHdlIGNhbiwgc2luY2UgdGhlIHdpZGdldCBtaWdo
dAogICAgIC8vIG5vdCBoYXZlIGFuIGFjY3VyYXRlIG1fd2lkdGgvbV9oZWlnaHQuCi0gICAgaW50
IHdpZHRoID0gc3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgPyBzdHlsZSgpLT53aWR0aCgpLnZh
bHVlKCkgOiAKLSAgICAgICAgbV93aWR0aCAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCkg
LSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCk7Ci0gICAgaW50IGhlaWdodCA9IHN0eWxl
KCktPmhlaWdodCgpLmlzRml4ZWQoKSA/IHN0eWxlKCktPmhlaWdodCgpLnZhbHVlKCkgOgotICAg
ICAgICBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9w
KCkgLSBwYWRkaW5nQm90dG9tKCk7CisgICAgaW50IGNvbnRlbnRXaWR0aCA9IHN0eWxlKCktPndp
ZHRoKCkuaXNGaXhlZCgpID8gc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpIDogCisgICAgICAgIHdp
ZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBh
ZGRpbmdSaWdodCgpOworICAgIGludCBjb250ZW50SGVpZ2h0ID0gc3R5bGUoKS0+aGVpZ2h0KCku
aXNGaXhlZCgpID8gc3R5bGUoKS0+aGVpZ2h0KCkudmFsdWUoKSA6CisgICAgICAgIGhlaWdodCgp
IC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdC
b3R0b20oKTsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY2hpbGQt
Pmhhc1RhZ05hbWUocGFyYW1UYWcpKSB7CiAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50KiBw
ID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudCo+KGNoaWxkKTsKQEAgLTgwLDcgKzgwLDcg
QEAgdm9pZCBSZW5kZXJBcHBsZXQ6OmNyZWF0ZVdpZGdldElmTmVjZXNzYQogCiAgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwotICAgIHNl
dFdpZGdldChmcmFtZS0+bG9hZGVyKCktPmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSwgZWxlbWVudCwgbV9hcmdzKSk7CisgICAgc2V0V2lkZ2V0KGZyYW1lLT5s
b2FkZXIoKS0+Y3JlYXRlSmF2YUFwcGxldFdpZGdldChJbnRTaXplKGNvbnRlbnRXaWR0aCwgY29u
dGVudEhlaWdodCksIGVsZW1lbnQsIG1fYXJncykpOwogfQogCiB2b2lkIFJlbmRlckFwcGxldDo6
bGF5b3V0KCkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjIsMTAgKzQyMiwxMCBAQCBpbnQg
UmVuZGVyQmxvY2s6Om92ZXJmbG93SGVpZ2h0KGJvb2wgaW5jCiAgICAgICAgIGludCBzaGFkb3dI
ZWlnaHQgPSAwOwogICAgICAgICBmb3IgKFNoYWRvd0RhdGEqIGJveFNoYWRvdyA9IHN0eWxlKCkt
PmJveFNoYWRvdygpOyBib3hTaGFkb3c7IGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCkKICAg
ICAgICAgICAgIHNoYWRvd0hlaWdodCA9IG1heChib3hTaGFkb3ctPnkgKyBib3hTaGFkb3ctPmJs
dXIsIHNoYWRvd0hlaWdodCk7Ci0gICAgICAgIGludCBoZWlnaHQgPSBtX2hlaWdodCArIHNoYWRv
d0hlaWdodDsKKyAgICAgICAgaW50IGluZmxhdGVkSGVpZ2h0ID0gaGVpZ2h0KCkgKyBzaGFkb3dI
ZWlnaHQ7CiAgICAgICAgIGlmIChoYXNSZWZsZWN0aW9uKCkpCi0gICAgICAgICAgICBoZWlnaHQg
PSBtYXgoaGVpZ2h0LCByZWZsZWN0aW9uQm94KCkuYm90dG9tKCkpOwotICAgICAgICByZXR1cm4g
aGVpZ2h0OworICAgICAgICAgICAgaW5mbGF0ZWRIZWlnaHQgPSBtYXgoaW5mbGF0ZWRIZWlnaHQs
IHJlZmxlY3Rpb25Cb3goKS5ib3R0b20oKSk7CisgICAgICAgIHJldHVybiBpbmZsYXRlZEhlaWdo
dDsKICAgICB9CiAgICAgcmV0dXJuIG1fb3ZlcmZsb3dIZWlnaHQ7CiB9CkBAIC00MzYsMTAgKzQz
NiwxMCBAQCBpbnQgUmVuZGVyQmxvY2s6Om92ZXJmbG93V2lkdGgoYm9vbCBpbmNsCiAgICAgICAg
IGludCBzaGFkb3dXaWR0aCA9IDA7CiAgICAgICAgIGZvciAoU2hhZG93RGF0YSogYm94U2hhZG93
ID0gc3R5bGUoKS0+Ym94U2hhZG93KCk7IGJveFNoYWRvdzsgYm94U2hhZG93ID0gYm94U2hhZG93
LT5uZXh0KQogICAgICAgICAgICAgc2hhZG93V2lkdGggPSBtYXgoYm94U2hhZG93LT54ICsgYm94
U2hhZG93LT5ibHVyLCBzaGFkb3dXaWR0aCk7Ci0gICAgICAgIGludCB3aWR0aCA9IG1fd2lkdGgg
KyBzaGFkb3dXaWR0aDsKKyAgICAgICAgaW50IGluZmxhdGVkV2lkdGggPSB3aWR0aCgpICsgc2hh
ZG93V2lkdGg7CiAgICAgICAgIGlmIChoYXNSZWZsZWN0aW9uKCkpCi0gICAgICAgICAgICB3aWR0
aCA9IG1heCh3aWR0aCwgcmVmbGVjdGlvbkJveCgpLnJpZ2h0KCkpOwotICAgICAgICByZXR1cm4g
d2lkdGg7CisgICAgICAgICAgICBpbmZsYXRlZFdpZHRoID0gbWF4KGluZmxhdGVkV2lkdGgsIHJl
ZmxlY3Rpb25Cb3goKS5yaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIGluZmxhdGVkV2lkdGg7CiAg
ICAgfQogICAgIHJldHVybiBtX292ZXJmbG93V2lkdGg7CiB9CkBAIC00NzUsNyArNDc1LDcgQEAg
aW50IFJlbmRlckJsb2NrOjpvdmVyZmxvd1RvcChib29sIGluY2x1ZAogSW50UmVjdCBSZW5kZXJC
bG9jazo6b3ZlcmZsb3dSZWN0KGJvb2wgaW5jbHVkZUludGVyaW9yKSBjb25zdAogewogICAgIGlm
ICghaW5jbHVkZUludGVyaW9yICYmIGhhc092ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgIEludFJl
Y3QgYm94ID0gYm9yZGVyQm94KCk7CisgICAgICAgIEludFJlY3QgYm94ID0gYm9yZGVyQm94UmVj
dCgpOwogICAgICAgICBpbnQgc2hhZG93TGVmdCA9IDA7CiAgICAgICAgIGludCBzaGFkb3dSaWdo
dCA9IDA7CiAgICAgICAgIGludCBzaGFkb3dUb3AgPSAwOwpAQCAtNTA4LDEwICs1MDgsMTAgQEAg
SW50UmVjdCBSZW5kZXJCbG9jazo6b3ZlcmZsb3dSZWN0KGJvb2wgaQogICAgIH0KIAogICAgIGlm
ICghaW5jbHVkZUludGVyaW9yICYmIGhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICByZXR1cm4g
Ym9yZGVyQm94KCk7CisgICAgICAgIHJldHVybiBib3JkZXJCb3hSZWN0KCk7CiAgICAgaW50IGwg
PSBvdmVyZmxvd0xlZnQoaW5jbHVkZUludGVyaW9yKTsKLSAgICBpbnQgdCA9IG1pbihvdmVyZmxv
d1RvcChpbmNsdWRlSW50ZXJpb3IpLCAtYm9yZGVyVG9wRXh0cmEoKSk7Ci0gICAgcmV0dXJuIElu
dFJlY3QobCwgdCwgb3ZlcmZsb3dXaWR0aChpbmNsdWRlSW50ZXJpb3IpIC0gbCwgbWF4KG92ZXJm
bG93SGVpZ2h0KGluY2x1ZGVJbnRlcmlvciksIGhlaWdodCgpICsgYm9yZGVyQm90dG9tRXh0cmEo
KSkgLSB0KTsKKyAgICBpbnQgdCA9IG1pbihvdmVyZmxvd1RvcChpbmNsdWRlSW50ZXJpb3IpLCAt
aW50cmluc2ljUGFkZGluZ1RvcCgpKTsKKyAgICByZXR1cm4gSW50UmVjdChsLCB0LCBvdmVyZmxv
d1dpZHRoKGluY2x1ZGVJbnRlcmlvcikgLSBsLCBtYXgob3ZlcmZsb3dIZWlnaHQoaW5jbHVkZUlu
dGVyaW9yKSwgaGVpZ2h0KCkgKyBpbnRyaW5zaWNQYWRkaW5nQm90dG9tKCkpIC0gdCk7CiB9CiAK
IGJvb2wgUmVuZGVyQmxvY2s6OmlzU2VsZkNvbGxhcHNpbmdCbG9jaygpIGNvbnN0CkBAIC01MjIs
NyArNTIyLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNTZWxmQ29sbGFwc2luZ0Jsb2NrKAogICAg
IC8vIChjKSBoYXZlIGJvcmRlci9wYWRkaW5nLAogICAgIC8vIChkKSBoYXZlIGEgbWluLWhlaWdo
dAogICAgIC8vIChlKSBoYXZlIHNwZWNpZmllZCB0aGF0IG9uZSBvZiBvdXIgbWFyZ2lucyBjYW4n
dCBjb2xsYXBzZSB1c2luZyBhIENTUyBleHRlbnNpb24KLSAgICBpZiAobV9oZWlnaHQgPiAwIHx8
CisgICAgaWYgKGhlaWdodCgpID4gMCB8fAogICAgICAgICBpc1RhYmxlKCkgfHwgKGJvcmRlckJv
dHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpICE9
IDAgfHwKICAgICAgICAgc3R5bGUoKS0+bWluSGVpZ2h0KCkuaXNQb3NpdGl2ZSgpIHx8IAogICAg
ICAgICBzdHlsZSgpLT5tYXJnaW5Ub3BDb2xsYXBzZSgpID09IE1TRVBBUkFURSB8fCBzdHlsZSgp
LT5tYXJnaW5Cb3R0b21Db2xsYXBzZSgpID09IE1TRVBBUkFURSkKQEAgLTU3MCw4ICs1NzAsOCBA
QCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogICAgIC8vIEl0J3Mgc2FmZSB0byBjaGVjayBm
b3IgY29udHJvbCBjbGlwIGhlcmUsIHNpbmNlIGNvbnRyb2xzIGNhbiBuZXZlciBiZSB0YWJsZSBj
ZWxscy4KICAgICBpZiAoaGFzQ29udHJvbENsaXAoKSkgewogICAgICAgICAvLyBCZWNhdXNlIG9m
IHRoZSBsaWdodHdlaWdodCBjbGlwLCB0aGVyZSBjYW4gbmV2ZXIgYmUgYW55IG92ZXJmbG93IGZy
b20gY2hpbGRyZW4uCi0gICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1fd2lkdGg7Ci0gICAgICAg
IG1fb3ZlcmZsb3dIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0g
d2lkdGgoKTsKKyAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IGhlaWdodCgpOwogICAgICAgICBt
X292ZXJmbG93TGVmdCA9IDA7CiAgICAgICAgIG1fb3ZlcmZsb3dUb3AgPSAwOwogICAgIH0KQEAg
LTU5NSwyNCArNTk1LDI1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVs
YXkKICAgICAgICAgb2xkT3V0bGluZUJveCA9IGFic29sdXRlT3V0bGluZUJvdW5kcygpOwogICAg
IH0KIAotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMs
IEludFNpemUoeFBvcygpLCB5UG9zKCkpLCBtX2hhc0NvbHVtbnMgfHwgaGFzVHJhbnNmb3JtKCkg
fHwgaGFzUmVmbGVjdGlvbigpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNo
ZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgbV9oYXNDb2x1bW5zIHx8IGhhc1Ry
YW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7CiAKLSAgICBpbnQgb2xkV2lkdGggPSBtX3dp
ZHRoOworICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7CiAgICAgaW50IG9sZENvbHVtbldpZHRo
ID0gZGVzaXJlZENvbHVtbldpZHRoKCk7CiAKICAgICBjYWxjV2lkdGgoKTsKICAgICBjYWxjQ29s
dW1uV2lkdGgoKTsKIAotICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1fd2lkdGg7CisgICAgbV9vdmVy
Zmxvd1dpZHRoID0gd2lkdGgoKTsKICAgICBtX292ZXJmbG93TGVmdCA9IDA7CiAKLSAgICBpZiAo
b2xkV2lkdGggIT0gbV93aWR0aCB8fCBvbGRDb2x1bW5XaWR0aCAhPSBkZXNpcmVkQ29sdW1uV2lk
dGgoKSkKKyAgICBpZiAob2xkV2lkdGggIT0gd2lkdGgoKSB8fCBvbGRDb2x1bW5XaWR0aCAhPSBk
ZXNpcmVkQ29sdW1uV2lkdGgoKSkKICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CiAK
ICAgICBjbGVhckZsb2F0cygpOwogCi0gICAgaW50IHByZXZpb3VzSGVpZ2h0ID0gbV9oZWlnaHQ7
Ci0gICAgbV9oZWlnaHQgPSAwOworICAgIGludCBwcmV2aW91c0hlaWdodCA9IGhlaWdodCgpOwor
ICAgIHNldEhlaWdodCgwKTsKKwogICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSAwOwogCiAgICAgLy8g
V2UgdXNlIGZvdXIgdmFsdWVzLCBtYXhUb3BQb3MsIG1heFBvc05lZywgbWF4Qm90dG9tUG9zLCBh
bmQgbWF4Qm90dG9tTmVnLCB0byB0cmFjawpAQCAtNjU4LDI1ICs2NTksMjUgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogCiAgICAgLy8gRXhwYW5kIG91ciBpbnRy
aW5zaWMgaGVpZ2h0IHRvIGVuY29tcGFzcyBmbG9hdHMuCiAgICAgaW50IHRvQWRkID0gYm9yZGVy
Qm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7
Ci0gICAgaWYgKGZsb2F0Qm90dG9tKCkgPiAobV9oZWlnaHQgLSB0b0FkZCkgJiYgKGlzSW5saW5l
QmxvY2tPcklubGluZVRhYmxlKCkgfHwgaXNGbG9hdGluZ09yUG9zaXRpb25lZCgpIHx8IGhhc092
ZXJmbG93Q2xpcCgpIHx8CisgICAgaWYgKGZsb2F0Qm90dG9tKCkgPiAoaGVpZ2h0KCkgLSB0b0Fk
ZCkgJiYgKGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgfHwgaXNGbG9hdGluZ09yUG9zaXRp
b25lZCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocGFyZW50KCkgJiYgcGFyZW50KCktPmlzRmxleGlibGVCb3goKSB8fCBtX2hh
c0NvbHVtbnMpKSkKLSAgICAgICAgbV9oZWlnaHQgPSBmbG9hdEJvdHRvbSgpICsgdG9BZGQ7Cisg
ICAgICAgIHNldEhlaWdodChmbG9hdEJvdHRvbSgpICsgdG9BZGQpOwogICAgIAogICAgIC8vIE5v
dyBsYXkgb3V0IG91ciBjb2x1bW5zIHdpdGhpbiB0aGlzIGludHJpbnNpYyBoZWlnaHQsIHNpbmNl
IHRoZXkgY2FuIHNsaWdodGx5IGFmZmVjdCB0aGUgaW50cmluc2ljIGhlaWdodCBhcwogICAgIC8v
IHdlIGFkanVzdCBmb3IgY2xlYW4gY29sdW1uIGJyZWFrcy4KICAgICBpbnQgc2luZ2xlQ29sdW1u
Qm90dG9tID0gbGF5b3V0Q29sdW1ucygpOwogCiAgICAgLy8gQ2FsY3VsYXRlIG91ciBuZXcgaGVp
Z2h0LgotICAgIGludCBvbGRIZWlnaHQgPSBtX2hlaWdodDsKKyAgICBpbnQgb2xkSGVpZ2h0ID0g
aGVpZ2h0KCk7CiAgICAgY2FsY0hlaWdodCgpOwotICAgIGlmIChvbGRIZWlnaHQgIT0gbV9oZWln
aHQpIHsKLSAgICAgICAgaWYgKG9sZEhlaWdodCA+IG1faGVpZ2h0ICYmIG1heEZsb2F0Qm90dG9t
ID4gbV9oZWlnaHQgJiYgIWNoaWxkcmVuSW5saW5lKCkpIHsKKyAgICBpZiAob2xkSGVpZ2h0ICE9
IGhlaWdodCgpKSB7CisgICAgICAgIGlmIChvbGRIZWlnaHQgPiBoZWlnaHQoKSAmJiBtYXhGbG9h
dEJvdHRvbSA+IGhlaWdodCgpICYmICFjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgICAgICAv
LyBPbmUgb2Ygb3VyIGNoaWxkcmVuJ3MgZmxvYXRzIG1heSBoYXZlIGJlY29tZSBhbiBvdmVyaGFu
Z2luZyBmbG9hdCBmb3IgdXMuIFdlIG5lZWQgdG8gbG9vayBmb3IgaXQuCiAgICAgICAgICAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Jsb2Nr
RmxvdygpICYmICFjaGlsZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4o
Y2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmZsb2F0Qm90dG9tKCkgKyBi
bG9jay0+eVBvcygpID4gbV9oZWlnaHQpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRPdmVy
aGFuZ2luZ0Zsb2F0cyhibG9jaywgLWJsb2NrLT54UG9zKCksIC1ibG9jay0+eVBvcygpLCBmYWxz
ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+ZmxvYXRCb3R0b20oKSArIGJsb2Nr
LT55KCkgPiBoZWlnaHQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE92ZXJoYW5naW5n
RmxvYXRzKGJsb2NrLCAtYmxvY2stPngoKSwgLWJsb2NrLT55KCksIGZhbHNlKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY4NCwxOSArNjg1LDE5IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgbGF5b3V0
Q29sdW1ucyhzaW5nbGVDb2x1bW5Cb3R0b20pOwogCiAgICAgICAgIC8vIElmIHRoZSBibG9jayBn
b3QgZXhwYW5kZWQgaW4gc2l6ZSwgdGhlbiBpbmNyZWFzZSBvdXIgb3ZlcmZsb3doZWlnaHQgdG8g
bWF0Y2guCi0gICAgICAgIGlmIChtX292ZXJmbG93SGVpZ2h0ID4gbV9oZWlnaHQpCisgICAgICAg
IGlmIChtX292ZXJmbG93SGVpZ2h0ID4gaGVpZ2h0KCkpCiAgICAgICAgICAgICBtX292ZXJmbG93
SGVpZ2h0IC09IHRvQWRkOwotICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA8IG1faGVpZ2h0
KQotICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1faGVpZ2h0OworICAgICAgICBpZiAo
bV9vdmVyZmxvd0hlaWdodCA8IGhlaWdodCgpKQorICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdo
dCA9IGhlaWdodCgpOwogICAgIH0KLSAgICBpZiAocHJldmlvdXNIZWlnaHQgIT0gbV9oZWlnaHQp
CisgICAgaWYgKHByZXZpb3VzSGVpZ2h0ICE9IGhlaWdodCgpKQogICAgICAgICByZWxheW91dENo
aWxkcmVuID0gdHJ1ZTsKIAogICAgIC8vIFNvbWUgY2xhc3NlcyBvZiBvYmplY3RzIChmbG9hdHMg
YW5kIGZpZWxkc2V0cyB3aXRoIG5vIHNwZWNpZmllZCBoZWlnaHRzIGFuZCB0YWJsZSBjZWxscykg
ZXhwYW5kIHRvIGVuY29tcGFzcwogICAgIC8vIG92ZXJoYW5naW5nIGZsb2F0cy4KICAgICBpZiAo
aGFzT3ZlcmhhbmdpbmdGbG9hdHMoKSAmJiBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9h
dHMoKSkgewotICAgICAgICBtX2hlaWdodCA9IGZsb2F0Qm90dG9tKCk7Ci0gICAgICAgIG1faGVp
Z2h0ICs9IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpOworICAgICAgICBzZXRIZWln
aHQoZmxvYXRCb3R0b20oKSk7CisgICAgICAgIHNldEhlaWdodChib3JkZXJCb3R0b20oKSArIHBh
ZGRpbmdCb3R0b20oKSk7CiAgICAgfQogCiAgICAgaWYgKChpc0NlbGwgfHwgaXNJbmxpbmUoKSB8
fCBpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgfHwgaXNSb290KCkpICYmICFoYXNPdmVyZmxvd0Ns
aXAoKSAmJiAhaGFzQ29udHJvbENsaXAoKSkKQEAgLTcwNywxNSArNzA4LDE1IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICBwb3NpdGlvbkxpc3RNYXJrZXIo
KTsKIAogICAgIC8vIEFsd2F5cyBlbnN1cmUgb3VyIG92ZXJmbG93IHdpZHRoL2hlaWdodCBhcmUg
YXQgbGVhc3QgYXMgbGFyZ2UgYXMgb3VyIHdpZHRoL2hlaWdodC4KLSAgICBtX292ZXJmbG93V2lk
dGggPSBtYXgobV9vdmVyZmxvd1dpZHRoLCBtX3dpZHRoKTsKLSAgICBtX292ZXJmbG93SGVpZ2h0
ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIG1faGVpZ2h0KTsKKyAgICBtX292ZXJmbG93V2lkdGgg
PSBtYXgobV9vdmVyZmxvd1dpZHRoLCB3aWR0aCgpKTsKKyAgICBtX292ZXJmbG93SGVpZ2h0ID0g
bWF4KG1fb3ZlcmZsb3dIZWlnaHQsIGhlaWdodCgpKTsKIAogICAgIGlmICghaGFzT3ZlcmZsb3dD
bGlwKCkpIHsKICAgICAgICAgZm9yIChTaGFkb3dEYXRhKiBib3hTaGFkb3cgPSBzdHlsZSgpLT5i
b3hTaGFkb3coKTsgYm94U2hhZG93OyBib3hTaGFkb3cgPSBib3hTaGFkb3ctPm5leHQpIHsKICAg
ICAgICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1fb3ZlcmZsb3dMZWZ0LCBib3hTaGFkb3ct
PnggLSBib3hTaGFkb3ctPmJsdXIpOwotICAgICAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4
KG1fb3ZlcmZsb3dXaWR0aCwgbV93aWR0aCArIGJveFNoYWRvdy0+eCArIGJveFNoYWRvdy0+Ymx1
cik7CisgICAgICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgobV9vdmVyZmxvd1dpZHRoLCB3
aWR0aCgpICsgYm94U2hhZG93LT54ICsgYm94U2hhZG93LT5ibHVyKTsKICAgICAgICAgICAgIG1f
b3ZlcmZsb3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgYm94U2hhZG93LT55IC0gYm94U2hhZG93
LT5ibHVyKTsKLSAgICAgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hl
aWdodCwgbV9oZWlnaHQgKyBib3hTaGFkb3ctPnkgKyBib3hTaGFkb3ctPmJsdXIpOworICAgICAg
ICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBoZWlnaHQoKSAr
IGJveFNoYWRvdy0+eSArIGJveFNoYWRvdy0+Ymx1cik7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmIChoYXNSZWZsZWN0aW9uKCkpIHsKQEAgLTc1Miw3ICs3NTMsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgICAgICByZXBhaW50UmVj
dC5zZXRZKHkpOwogCiAgICAgICAgICAgICAvLyBEb24ndCBhbGxvdyB0aGlzIHJlY3QgdG8gc3Bp
bGwgb3V0IG9mIG91ciBvdmVyZmxvdyBib3guCi0gICAgICAgICAgICByZXBhaW50UmVjdC5pbnRl
cnNlY3QoSW50UmVjdCgwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCkpOworICAgICAgICAgICAgcmVw
YWludFJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVjdCBpcyBzdGlsbCBub24tZW1w
dHkgYWZ0ZXIgaW50ZXJzZWN0aW5nIGZvciBvdmVyZmxvdyBhYm92ZQpAQCAtNzc1LDcgKzc3Niw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFBvc2l0aW9uZWRCbG9jaygKICAgICB9CiAKICAg
ICBpZiAoY2hpbGQtPmhhc1N0YXRpY1koKSkgewotICAgICAgICBpbnQgeSA9IG1faGVpZ2h0Owor
ICAgICAgICBpbnQgeSA9IGhlaWdodCgpOwogICAgICAgICBpZiAoIW1hcmdpbkluZm8uY2FuQ29s
bGFwc2VXaXRoVG9wKCkpIHsKICAgICAgICAgICAgIGNoaWxkLT5jYWxjVmVydGljYWxNYXJnaW5z
KCk7CiAgICAgICAgICAgICBpbnQgbWFyZ2luVG9wID0gY2hpbGQtPm1hcmdpblRvcCgpOwpAQCAt
ODEwLDE1ICs4MTEsMTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayhj
bwogICAgIC8vIGh0dHA6Ly93d3cuaGl4aWUuY2gvdGVzdHMvYWRob2MvY3NzL2JveC9ibG9jay9t
YXJnaW4tY29sbGFwc2UvMDQ2Lmh0bWwgZm9yCiAgICAgLy8gYW4gZXhhbXBsZSBvZiB0aGlzIHNj
ZW5hcmlvLgogICAgIGludCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0
aFRvcCgpID8gMCA6IG1hcmdpbkluZm8ubWFyZ2luKCk7Ci0gICAgbV9oZWlnaHQgKz0gbWFyZ2lu
T2Zmc2V0OworICAgIHNldEhlaWdodChoZWlnaHQoKSArIG1hcmdpbk9mZnNldCk7CiAgICAgcG9z
aXRpb25OZXdGbG9hdHMoKTsKLSAgICBtX2hlaWdodCAtPSBtYXJnaW5PZmZzZXQ7CisgICAgc2V0
SGVpZ2h0KGhlaWdodCgpIC0gbWFyZ2luT2Zmc2V0KTsKIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5k
ZXJCbG9jazo6aGFuZGxlU3BlY2lhbENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1h
cmdpbkluZm8mIG1hcmdpbkluZm8sIENvbXBhY3RJbmZvJiBjb21wYWN0SW5mbywgYm9vbCYgaGFu
ZGxlZCkKK1JlbmRlckJveCogUmVuZGVyQmxvY2s6OmhhbmRsZVNwZWNpYWxDaGlsZChSZW5kZXJC
b3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBDb21wYWN0SW5mbyYgY29t
cGFjdEluZm8sIGJvb2wmIGhhbmRsZWQpCiB7CiAgICAgLy8gSGFuZGxlIHBvc2l0aW9uZWQgY2hp
bGRyZW4gZmlyc3QuCi0gICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gaGFuZGxlUG9zaXRpb25lZENo
aWxkKGNoaWxkLCBtYXJnaW5JbmZvLCBoYW5kbGVkKTsKKyAgICBSZW5kZXJCb3gqIG5leHQgPSBo
YW5kbGVQb3NpdGlvbmVkQ2hpbGQoY2hpbGQsIG1hcmdpbkluZm8sIGhhbmRsZWQpOwogICAgIGlm
IChoYW5kbGVkKSByZXR1cm4gbmV4dDsKICAgICAKICAgICAvLyBIYW5kbGUgZmxvYXRpbmcgY2hp
bGRyZW4gbmV4dC4KQEAgLTgzNCwzMSArODM1LDMxIEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxv
Y2s6OmhhbmRsZVNwZWNpYWwKIH0KIAogCi1SZW5kZXJPYmplY3QqIFJlbmRlckJsb2NrOjpoYW5k
bGVQb3NpdGlvbmVkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYg
bWFyZ2luSW5mbywgYm9vbCYgaGFuZGxlZCkKK1JlbmRlckJveCogUmVuZGVyQmxvY2s6OmhhbmRs
ZVBvc2l0aW9uZWRDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBtYXJn
aW5JbmZvLCBib29sJiBoYW5kbGVkKQogewogICAgIGlmIChjaGlsZC0+aXNQb3NpdGlvbmVkKCkp
IHsKICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIGNoaWxkLT5jb250YWluaW5nQmxv
Y2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChjaGlsZCk7CiAgICAgICAgIGFkanVzdFBvc2l0
aW9uZWRCbG9jayhjaGlsZCwgbWFyZ2luSW5mbyk7Ci0gICAgICAgIHJldHVybiBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkLT5uZXh0U2libGluZ0JveCgpOwogICAg
IH0KIAogICAgIHJldHVybiAwOwogfQogCi1SZW5kZXJPYmplY3QqIFJlbmRlckJsb2NrOjpoYW5k
bGVGbG9hdGluZ0NoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1h
cmdpbkluZm8sIGJvb2wmIGhhbmRsZWQpCitSZW5kZXJCb3gqIFJlbmRlckJsb2NrOjpoYW5kbGVG
bG9hdGluZ0NoaWxkKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbklu
Zm8sIGJvb2wmIGhhbmRsZWQpCiB7CiAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkpIHsKICAg
ICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KGNoaWxk
KTsKICAgICAgICAgYWRqdXN0RmxvYXRpbmdCbG9jayhtYXJnaW5JbmZvKTsKLSAgICAgICAgcmV0
dXJuIGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAgICByZXR1cm4gY2hpbGQtPm5leHRTaWJs
aW5nQm94KCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiAwOwogfQogCi1SZW5kZXJPYmplY3Qq
IFJlbmRlckJsb2NrOjpoYW5kbGVDb21wYWN0Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgQ29t
cGFjdEluZm8mIGNvbXBhY3RJbmZvLCBib29sJiBoYW5kbGVkKQorUmVuZGVyQm94KiBSZW5kZXJC
bG9jazo6aGFuZGxlQ29tcGFjdENoaWxkKFJlbmRlckJveCogY2hpbGQsIENvbXBhY3RJbmZvJiBj
b21wYWN0SW5mbywgYm9vbCYgaGFuZGxlZCkKIHsKICAgICAvLyBGSVhNRTogV2Ugb25seSBkZWFs
IHdpdGggb25lIGNvbXBhY3QgYXQgYSB0aW1lLiAgSXQgaXMgdW5jbGVhciB3aGF0IHNob3VsZCBi
ZQogICAgIC8vIGRvbmUgaWYgbXVsdGlwbGUgY29udGlndW91cyBjb21wYWN0cyBhcmUgZW5jb3Vu
dGVyZWQuICBGb3Igbm93IHdlIGFzc3VtZSB0aGF0CkBAIC04ODEsMTIgKzg4MiwxMiBAQCBSZW5k
ZXJPYmplY3QqIFJlbmRlckJsb2NrOjpoYW5kbGVDb21wYWN0CiAgICAgICAgICAgICAgICAgLy8g
VGhlIGNvbXBhY3Qgd2lsbCBmaXQgaW4gdGhlIG1hcmdpbi4KICAgICAgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBjb21wYWN0SW5mby5zZXQoY2hpbGQsIGN1cnIp
OwotICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRQb3MoMCwwKTsgLy8gVGhpcyBwb3NpdGlvbiB3
aWxsIGJlIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY29tcGFjdCdzCisgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4oY2hpbGQpLT5zZXRMb2NhdGlvbihJbnRQb2ludCgpKTsg
Ly8gVGhpcyBwb3NpdGlvbiB3aWxsIGJlIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY29tcGFjdCdz
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXNpcmVkIHBvc2l0aW9u
IGFuZCB0aGUgbGluZSBib3ggZm9yIHRoZSBjb21wYWN0IHdpbGwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHBpY2sgdGhhdCBwb3NpdGlvbiB1cC4KICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGNoaWxkLgotICAgICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogbmV4dCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAgICAg
ICAgICAgIFJlbmRlckJveCogbmV4dCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpOwogICAgICAg
ICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZCk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgLy8gTm93IGluc2VydCB0aGUgY2hpbGQgdW5kZXIgfGN1cnJ8LgpAQCAtOTAw
LDI0ICs5MDEsMjQgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJCbG9jazo6aGFuZGxlQ29tcGFjdAog
ICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjppbnNlcnRDb21wYWN0SWZOZWVk
ZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgQ29tcGFjdEluZm8mIGNvbXBhY3RJbmZvKQordm9pZCBS
ZW5kZXJCbG9jazo6aW5zZXJ0Q29tcGFjdElmTmVlZGVkKFJlbmRlckJveCogY2hpbGQsIENvbXBh
Y3RJbmZvJiBjb21wYWN0SW5mbykKIHsKICAgICBpZiAoY29tcGFjdEluZm8ubWF0Y2hlcyhjaGls
ZCkpIHsKICAgICAgICAgLy8gV2UgaGF2ZSBhIGNvbXBhY3QgY2hpbGQgdG8gc3F1ZWV6ZSBpbi4K
LSAgICAgICAgUmVuZGVyT2JqZWN0KiBjb21wYWN0Q2hpbGQgPSBjb21wYWN0SW5mby5jb21wYWN0
KCk7CisgICAgICAgIFJlbmRlckJveCogY29tcGFjdENoaWxkID0gY29tcGFjdEluZm8uY29tcGFj
dCgpOwogICAgICAgICBpbnQgY29tcGFjdFhQb3MgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpICsgY29tcGFjdENoaWxkLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgIGlmIChzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBSVEwpIHsKICAgICAgICAgICAgIGNvbXBhY3RDaGlsZC0+Y2FsY1dpZHRo
KCk7IC8vIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIG9mIHRoZSBjYXBwZWQgbWF4d2lkdGgKICAg
ICAgICAgICAgIGNvbXBhY3RYUG9zID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBwYWRkaW5n
UmlnaHQoKSAtIG1hcmdpblJpZ2h0KCkgLQogICAgICAgICAgICAgICAgIGNvbXBhY3RDaGlsZC0+
d2lkdGgoKSAtIGNvbXBhY3RDaGlsZC0+bWFyZ2luUmlnaHQoKTsKICAgICAgICAgfQotICAgICAg
ICBjb21wYWN0WFBvcyAtPSBjaGlsZC0+eFBvcygpOyAvLyBQdXQgY29tcGFjdFhQb3MgaW50byB0
aGUgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLgotICAgICAgICBjb21wYWN0Q2hpbGQtPnNldFBv
cyhjb21wYWN0WFBvcywgY29tcGFjdENoaWxkLT55UG9zKCkpOyAvLyBTZXQgdGhlIHggcG9zaXRp
b24uCisgICAgICAgIGNvbXBhY3RYUG9zIC09IGNoaWxkLT54KCk7IC8vIFB1dCBjb21wYWN0WFBv
cyBpbnRvIHRoZSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuCisgICAgICAgIGNvbXBhY3RDaGls
ZC0+c2V0TG9jYXRpb24oY29tcGFjdFhQb3MsIGNvbXBhY3RDaGlsZC0+eSgpKTsgLy8gU2V0IHRo
ZSB4IHBvc2l0aW9uLgogICAgICAgICBjb21wYWN0SW5mby5jbGVhcigpOwogICAgIH0KIH0KIAot
UmVuZGVyT2JqZWN0KiBSZW5kZXJCbG9jazo6aGFuZGxlUnVuSW5DaGlsZChSZW5kZXJPYmplY3Qq
IGNoaWxkLCBib29sJiBoYW5kbGVkKQorUmVuZGVyQm94KiBSZW5kZXJCbG9jazo6aGFuZGxlUnVu
SW5DaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBib29sJiBoYW5kbGVkKQogewogICAgIC8vIFNlZSBp
ZiB3ZSBoYXZlIGEgcnVuLWluIGVsZW1lbnQgd2l0aCBpbmxpbmUgY2hpbGRyZW4uICBJZiB0aGUK
ICAgICAvLyBjaGlsZHJlbiBhcmVuJ3QgaW5saW5lLCB0aGVuIGp1c3QgdHJlYXQgdGhlIHJ1bi1p
biBhcyBhIG5vcm1hbApAQCAtOTMyLDEwICs5MzMsMTAgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJC
bG9jazo6aGFuZGxlUnVuSW5DaAogICAgICAgICAgICAgLy8gcG9zaXRpb24uCiAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGNoaWxkLT5zZXRJbmxpbmUodHJ1ZSk7Ci0g
ICAgICAgICAgICBjaGlsZC0+c2V0UG9zKDAsMCk7CisgICAgICAgICAgICBjaGlsZC0+c2V0TG9j
YXRpb24oMCwwKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBjaGls
ZC4KLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogbmV4dCA9IGNoaWxkLT5uZXh0U2libGluZygp
OworICAgICAgICAgICAgUmVuZGVyQm94KiBuZXh0ID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCk7
CiAgICAgICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGQpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICAvLyBOb3cgaW5zZXJ0IHRoZSBjaGlsZCB1bmRlciB8Y3VycnwuCkBAIC05NDYsNyAr
OTQ3LDcgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJCbG9jazo6aGFuZGxlUnVuSW5DaAogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgaW50IHlQb3NFc3RpbWF0ZSkKK3Zv
aWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCb3gqIGNoaWxkLCBNYXJnaW5J
bmZvJiBtYXJnaW5JbmZvLCBpbnQgeVBvc0VzdGltYXRlKQogewogICAgIC8vIEdldCBvdXIgbWF4
IHBvcyBhbmQgbmVnIHRvcCBtYXJnaW5zLgogICAgIGludCBwb3NUb3AgPSBjaGlsZC0+bWF4VG9w
TWFyZ2luKHRydWUpOwpAQCAtOTkxLDcgKzk5Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxh
cHNlTWFyZ2lucyhSZW5kZXIKICAgICBpZiAobWFyZ2luSW5mby5xdWlya0NvbnRhaW5lcigpICYm
IG1hcmdpbkluZm8uYXRUb3BPZkJsb2NrKCkgJiYgKHBvc1RvcCAtIG5lZ1RvcCkpCiAgICAgICAg
IG1hcmdpbkluZm8uc2V0VG9wUXVpcmsodG9wUXVpcmspOwogCi0gICAgaW50IHlwb3MgPSBtX2hl
aWdodDsKKyAgICBpbnQgeXBvcyA9IGhlaWdodCgpOwogICAgIGlmIChjaGlsZC0+aXNTZWxmQ29s
bGFwc2luZ0Jsb2NrKCkpIHsKICAgICAgICAgLy8gVGhpcyBjaGlsZCBoYXMgbm8gaGVpZ2h0LiAg
V2UgbmVlZCB0byBjb21wdXRlIG91cgogICAgICAgICAvLyBwb3NpdGlvbiBiZWZvcmUgd2UgY29s
bGFwc2UgdGhlIGNoaWxkJ3MgbWFyZ2lucyB0b2dldGhlciwKQEAgLTEwMTAsMjAgKzEwMTEsMjAg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKFJlbmRlcgogICAgICAgICAgICAg
Ly8gaXMgY29ycmVjdCwgc2luY2UgaXQgY291bGQgaGF2ZSBvdmVyZmxvd2luZyBjb250ZW50CiAg
ICAgICAgICAgICAvLyB0aGF0IG5lZWRzIHRvIGJlIHBvc2l0aW9uZWQgY29ycmVjdGx5IChlLmcu
LCBhIGJsb2NrIHRoYXQKICAgICAgICAgICAgIC8vIGhhZCBhIHNwZWNpZmllZCBoZWlnaHQgb2Yg
MCBidXQgdGhhdCBhY3R1YWxseSBoYWQgc3ViY29udGVudCkuCi0gICAgICAgICAgICB5cG9zID0g
bV9oZWlnaHQgKyBjb2xsYXBzZWRUb3BQb3MgLSBjb2xsYXBzZWRUb3BOZWc7CisgICAgICAgICAg
ICB5cG9zID0gaGVpZ2h0KCkgKyBjb2xsYXBzZWRUb3BQb3MgLSBjb2xsYXBzZWRUb3BOZWc7CiAg
ICAgfQogICAgIGVsc2UgewogICAgICAgICBpZiAoY2hpbGQtPnN0eWxlKCktPm1hcmdpblRvcENv
bGxhcHNlKCkgPT0gTVNFUEFSQVRFKSB7Ci0gICAgICAgICAgICBtX2hlaWdodCArPSBtYXJnaW5J
bmZvLm1hcmdpbigpICsgY2hpbGQtPm1hcmdpblRvcCgpOwotICAgICAgICAgICAgeXBvcyA9IG1f
aGVpZ2h0OworICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbWFyZ2luSW5mby5tYXJn
aW4oKSArIGNoaWxkLT5tYXJnaW5Ub3AoKSk7CisgICAgICAgICAgICB5cG9zID0gaGVpZ2h0KCk7
CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoIW1hcmdpbkluZm8uYXRUb3BPZkJsb2NrKCkg
fHwKICAgICAgICAgICAgICghbWFyZ2luSW5mby5jYW5Db2xsYXBzZVRvcFdpdGhDaGlsZHJlbigp
CiAgICAgICAgICAgICAgJiYgKCFzdHlsZSgpLT5odG1sSGFja3MoKSB8fCAhbWFyZ2luSW5mby5x
dWlya0NvbnRhaW5lcigpIHx8ICFtYXJnaW5JbmZvLnRvcFF1aXJrKCkpKSkgewogICAgICAgICAg
ICAgLy8gV2UncmUgY29sbGFwc2luZyB3aXRoIGEgcHJldmlvdXMgc2libGluZydzIG1hcmdpbnMg
YW5kIG5vdAogICAgICAgICAgICAgLy8gd2l0aCB0aGUgdG9wIG9mIHRoZSBibG9jay4KLSAgICAg
ICAgICAgIG1faGVpZ2h0ICs9IG1heChtYXJnaW5JbmZvLnBvc01hcmdpbigpLCBwb3NUb3ApIC0g
bWF4KG1hcmdpbkluZm8ubmVnTWFyZ2luKCksIG5lZ1RvcCk7Ci0gICAgICAgICAgICB5cG9zID0g
bV9oZWlnaHQ7CisgICAgICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBtYXgobWFyZ2luSW5m
by5wb3NNYXJnaW4oKSwgcG9zVG9wKSAtIG1heChtYXJnaW5JbmZvLm5lZ01hcmdpbigpLCBuZWdU
b3ApKTsKKyAgICAgICAgICAgIHlwb3MgPSBoZWlnaHQoKTsKICAgICAgICAgfQogCiAgICAgICAg
IG1hcmdpbkluZm8uc2V0UG9zTWFyZ2luKGNoaWxkLT5tYXhCb3R0b21NYXJnaW4odHJ1ZSkpOwpA
QCAtMTAzNiw3ICsxMDM3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKFJl
bmRlcgogICAgIH0KIAogICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZSgwLCB5UG9z
RXN0aW1hdGUgLSB5cG9zKSk7Ci0gICAgY2hpbGQtPnNldFBvcyhjaGlsZC0+eFBvcygpLCB5cG9z
KTsKKyAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hpbGQtPngoKSwgeXBvcyk7CiAgICAgaWYgKHlw
b3MgIT0geVBvc0VzdGltYXRlKSB7CiAgICAgICAgIGlmIChjaGlsZC0+c2hyaW5rVG9Bdm9pZEZs
b2F0cygpKQogICAgICAgICAgICAgLy8gVGhlIGNoaWxkJ3Mgd2lkdGggZGVwZW5kcyBvbiB0aGUg
bGluZSB3aWR0aC4KQEAgLTEwNTMsNyArMTA1NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxh
cHNlTWFyZ2lucyhSZW5kZXIKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxv
YXRzSWZOZWVkZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywg
aW50IG9sZFRvcFBvc01hcmdpbiwgaW50IG9sZFRvcE5lZ01hcmdpbikKK3ZvaWQgUmVuZGVyQmxv
Y2s6OmNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFy
Z2luSW5mbywgaW50IG9sZFRvcFBvc01hcmdpbiwgaW50IG9sZFRvcE5lZ01hcmdpbikKIHsKICAg
ICBpbnQgaGVpZ2h0SW5jcmVhc2UgPSBnZXRDbGVhckRlbHRhKGNoaWxkKTsKICAgICBpZiAoIWhl
aWdodEluY3JlYXNlKQpAQCAtMTA2MSw3ICsxMDYyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xl
YXJGbG9hdHNJZk5lZWRlZChSZQogCiAgICAgLy8gVGhlIGNoaWxkIG5lZWRzIHRvIGJlIGxvd2Vy
ZWQuICBNb3ZlIHRoZSBjaGlsZCBzbyB0aGF0IGl0IGp1c3QgY2xlYXJzIHRoZSBmbG9hdC4KICAg
ICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNpemUoMCwgLWhlaWdodEluY3JlYXNlKSk7Ci0g
ICAgY2hpbGQtPnNldFBvcyhjaGlsZC0+eFBvcygpLCBjaGlsZC0+eVBvcygpICsgaGVpZ2h0SW5j
cmVhc2UpOworICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+eCgpLCBjaGlsZC0+eSgpICsg
aGVpZ2h0SW5jcmVhc2UpOwogCiAgICAgaWYgKGNoaWxkLT5pc1NlbGZDb2xsYXBzaW5nQmxvY2so
KSkgewogICAgICAgICAvLyBGb3Igc2VsZi1jb2xsYXBzaW5nIGJsb2NrcyB0aGF0IGNsZWFyLCB0
aGV5IGNhbiBzdGlsbCBjb2xsYXBzZSB0aGVpcgpAQCAtMTA3MSw3ICsxMDcyLDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZChSZQogICAgICAgICBtYXJnaW5JbmZvLnNl
dE5lZ01hcmdpbihtYXgoY2hpbGQtPm1heFRvcE1hcmdpbihmYWxzZSksIGNoaWxkLT5tYXhCb3R0
b21NYXJnaW4oZmFsc2UpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBBZGp1c3Qgb3VyIGhlaWdo
dCBzdWNoIHRoYXQgd2UgYXJlIHJlYWR5IHRvIGJlIGNvbGxhcHNlZCB3aXRoIHN1YnNlcXVlbnQg
c2libGluZ3MuCi0gICAgICAgIG1faGVpZ2h0ID0gY2hpbGQtPnlQb3MoKSAtIG1heCgwLCBtYXJn
aW5JbmZvLm1hcmdpbigpKTsKKyAgICAgICAgc2V0SGVpZ2h0KGNoaWxkLT55KCkgLSBtYXgoMCwg
bWFyZ2luSW5mby5tYXJnaW4oKSkpOwogICAgICAgICAKICAgICAgICAgLy8gU2V0IGEgZmxhZyB0
aGF0IHdlIGNsZWFyZWQgYSBmbG9hdCBzbyB0aGF0IHdlIGtub3cgYm90aCB0byBpbmNyZWFzZSB0
aGUgaGVpZ2h0IG9mIHRoZSBibG9jawogICAgICAgICAvLyB0byBjb21wZW5zYXRlIGZvciB0aGUg
Y2xlYXIgYW5kIHRvIGF2b2lkIGNvbGxhcHNpbmcgb3VyIG1hcmdpbnMgd2l0aCB0aGUgcGFyZW50
IGJsb2NrJ3MKQEAgLTEwNzksNyArMTA4MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxv
YXRzSWZOZWVkZWQoUmUKICAgICAgICAgbWFyZ2luSW5mby5zZXRTZWxmQ29sbGFwc2luZ0Jsb2Nr
Q2xlYXJlZEZsb2F0KHRydWUpOwogICAgIH0gZWxzZQogICAgICAgICAvLyBJbmNyZWFzZSBvdXIg
aGVpZ2h0IGJ5IHRoZSBhbW91bnQgd2UgaGFkIHRvIGNsZWFyLgotICAgICAgICBtX2hlaWdodCAr
PSBoZWlnaHRJbmNyZWFzZTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgaGVpZ2h0SW5j
cmVhc2UpOwogICAgIAogICAgIGlmIChtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aFRvcCgpKSB7
CiAgICAgICAgIC8vIFdlIGNhbiBubyBsb25nZXIgY29sbGFwc2Ugd2l0aCB0aGUgdG9wIG9mIHRo
ZSBibG9jayBzaW5jZSBhIGNsZWFyCkBAIC0xMTA5LDcgKzExMTAsNyBAQCBpbnQgUmVuZGVyQmxv
Y2s6OmVzdGltYXRlVmVydGljYWxQb3NpdGlvCiB7CiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
ZWxpbWluYXRlIHRoZSBlc3RpbWF0aW9uIG9mIHZlcnRpY2FsIHBvc2l0aW9uLCBiZWNhdXNlIHdo
ZW4gaXQncyB3cm9uZyB3ZSBzb21ldGltZXMgdHJpZ2dlciBhIHBhdGhvbG9naWNhbAogICAgIC8v
IHJlbGF5b3V0IGlmIHRoZXJlIGFyZSBpbnRydWRpbmcgZmxvYXRzLgotICAgIGludCB5UG9zRXN0
aW1hdGUgPSBtX2hlaWdodDsKKyAgICBpbnQgeVBvc0VzdGltYXRlID0gaGVpZ2h0KCk7CiAgICAg
aWYgKCFtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aFRvcCgpKSB7CiAgICAgICAgIGludCBjaGls
ZE1hcmdpblRvcCA9IGNoaWxkLT5zZWxmTmVlZHNMYXlvdXQoKSA/IGNoaWxkLT5tYXJnaW5Ub3Ao
KSA6IGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5Ub3AoKTsKICAgICAgICAgeVBvc0VzdGltYXRlICs9
IG1heChtYXJnaW5JbmZvLm1hcmdpbigpLCBjaGlsZE1hcmdpblRvcCk7CkBAIC0xMTE3LDcgKzEx
MTgsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmVzdGltYXRlVmVydGljYWxQb3NpdGlvCiAgICAgcmV0
dXJuIHlQb3NFc3RpbWF0ZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lSG9yaXpv
bnRhbFBvc2l0aW9uKFJlbmRlck9iamVjdCogY2hpbGQpCit2b2lkIFJlbmRlckJsb2NrOjpkZXRl
cm1pbmVIb3Jpem9udGFsUG9zaXRpb24oUmVuZGVyQm94KiBjaGlsZCkKIHsKICAgICBpZiAoc3R5
bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAgICAgICAgIGludCB4UG9zID0gYm9yZGVyTGVm
dCgpICsgcGFkZGluZ0xlZnQoKTsKQEAgLTExMjgsNyArMTEyOSw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmRldGVybWluZUhvcml6b250YWxQb3MKICAgICAgICAgLy8gU29tZSBvYmplY3RzIChlLmcu
LCB0YWJsZXMsIGhvcml6b250YWwgcnVsZXMsIG92ZXJmbG93OmF1dG8gYmxvY2tzKSBhdm9pZCBm
bG9hdHMuICBUaGV5IG5lZWQKICAgICAgICAgLy8gdG8gc2hpZnQgb3ZlciBhcyBuZWNlc3Nhcnkg
dG8gZG9kZ2UgYW55IGZsb2F0cyB0aGF0IG1pZ2h0IGdldCBpbiB0aGUgd2F5LgogICAgICAgICBp
ZiAoY2hpbGQtPmF2b2lkc0Zsb2F0cygpKSB7Ci0gICAgICAgICAgICBpbnQgbGVmdE9mZiA9IGxl
ZnRPZmZzZXQobV9oZWlnaHQpOworICAgICAgICAgICAgaW50IGxlZnRPZmYgPSBsZWZ0T2Zmc2V0
KGhlaWdodCgpKTsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT50ZXh0QWxpZ24oKSAhPSBXRUJL
SVRfQ0VOVEVSICYmIGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCkudHlwZSgpICE9IEF1dG8p
IHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm1hcmdpbkxlZnQoKSA8IDApCiAgICAgICAg
ICAgICAgICAgICAgIGxlZnRPZmYgKz0gY2hpbGQtPm1hcmdpbkxlZnQoKTsKQEAgLTExNDAsMTcg
KzExNDEsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lSG9yaXpvbnRhbFBvcwogICAg
ICAgICAgICAgICAgIC8vIHdpZHRoIGNvbXB1dGF0aW9uIHdpbGwgdGFrZSBpbnRvIGFjY291bnQg
dGhlIGRlbHRhIGJldHdlZW4gfGxlZnRPZmZ8IGFuZCB8eFBvc3wKICAgICAgICAgICAgICAgICAv
LyBzbyB0aGF0IHdlIGNhbiBqdXN0IHBhc3MgdGhlIGNvbnRlbnQgd2lkdGggaW4gZGlyZWN0bHkg
dG8gdGhlIHxjYWxjSG9yaXpvbnRhbE1hcmdpbnN8CiAgICAgICAgICAgICAgICAgLy8gZnVuY3Rp
b24uCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4oY2hpbGQpLT5jYWxj
SG9yaXpvbnRhbE1hcmdpbnMoY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKSwgY2hpbGQtPnN0
eWxlKCktPm1hcmdpblJpZ2h0KCksIGxpbmVXaWR0aChjaGlsZC0+eVBvcygpKSk7CisgICAgICAg
ICAgICAgICAgY2hpbGQtPmNhbGNIb3Jpem9udGFsTWFyZ2lucyhjaGlsZC0+c3R5bGUoKS0+bWFy
Z2luTGVmdCgpLCBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKSwgbGluZVdpZHRoKGNoaWxk
LT55KCkpKTsKICAgICAgICAgICAgICAgICBjaFBvcyA9IGxlZnRPZmYgKyBjaGlsZC0+bWFyZ2lu
TGVmdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHZpZXcoKS0+YWRkTGF5
b3V0RGVsdGEoSW50U2l6ZShjaGlsZC0+eFBvcygpIC0gY2hQb3MsIDApKTsKLSAgICAgICAgY2hp
bGQtPnNldFBvcyhjaFBvcywgY2hpbGQtPnlQb3MoKSk7CisgICAgICAgIHZpZXcoKS0+YWRkTGF5
b3V0RGVsdGEoSW50U2l6ZShjaGlsZC0+eCgpIC0gY2hQb3MsIDApKTsKKyAgICAgICAgY2hpbGQt
PnNldExvY2F0aW9uKGNoUG9zLCBjaGlsZC0+eSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBp
bnQgeFBvcyA9IG1fd2lkdGggLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgICAgIGludCB4UG9zID0gd2lkdGgoKSAtIGJvcmRl
clJpZ2h0KCkgLSBwYWRkaW5nUmlnaHQoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKICAg
ICAgICAgaW50IGNoUG9zID0geFBvcyAtIChjaGlsZC0+d2lkdGgoKSArIGNoaWxkLT5tYXJnaW5S
aWdodCgpKTsKICAgICAgICAgaWYgKGNoaWxkLT5hdm9pZHNGbG9hdHMoKSkgewotICAgICAgICAg
ICAgaW50IHJpZ2h0T2ZmID0gcmlnaHRPZmZzZXQobV9oZWlnaHQpOworICAgICAgICAgICAgaW50
IHJpZ2h0T2ZmID0gcmlnaHRPZmZzZXQoaGVpZ2h0KCkpOwogICAgICAgICAgICAgaWYgKHN0eWxl
KCktPnRleHRBbGlnbigpICE9IFdFQktJVF9DRU5URVIgJiYgY2hpbGQtPnN0eWxlKCktPm1hcmdp
blJpZ2h0KCkudHlwZSgpICE9IEF1dG8pIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm1h
cmdpblJpZ2h0KCkgPCAwKQogICAgICAgICAgICAgICAgICAgICByaWdodE9mZiAtPSBjaGlsZC0+
bWFyZ2luUmlnaHQoKTsKQEAgLTExNjEsMTIgKzExNjIsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6
ZGV0ZXJtaW5lSG9yaXpvbnRhbFBvcwogICAgICAgICAgICAgICAgIC8vIHdpZHRoIGNvbXB1dGF0
aW9uIHdpbGwgdGFrZSBpbnRvIGFjY291bnQgdGhlIGRlbHRhIGJldHdlZW4gfHJpZ2h0T2ZmfCBh
bmQgfHhQb3N8CiAgICAgICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBjYW4ganVzdCBwYXNzIHRo
ZSBjb250ZW50IHdpZHRoIGluIGRpcmVjdGx5IHRvIHRoZSB8Y2FsY0hvcml6b250YWxNYXJnaW5z
fAogICAgICAgICAgICAgICAgIC8vIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlckJveCo+KGNoaWxkKS0+Y2FsY0hvcml6b250YWxNYXJnaW5zKGNoaWxkLT5zdHls
ZSgpLT5tYXJnaW5MZWZ0KCksIGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpLCBsaW5lV2lk
dGgoY2hpbGQtPnlQb3MoKSkpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJv
eCo+KGNoaWxkKS0+Y2FsY0hvcml6b250YWxNYXJnaW5zKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5M
ZWZ0KCksIGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpLCBsaW5lV2lkdGgoY2hpbGQtPnko
KSkpOwogICAgICAgICAgICAgICAgIGNoUG9zID0gcmlnaHRPZmYgLSBjaGlsZC0+bWFyZ2luUmln
aHQoKSAtIGNoaWxkLT53aWR0aCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZShjaGlsZC0+eFBvcygpIC0gY2hQb3MsIDAp
KTsKLSAgICAgICAgY2hpbGQtPnNldFBvcyhjaFBvcywgY2hpbGQtPnlQb3MoKSk7CisgICAgICAg
IHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZShjaGlsZC0+eCgpIC0gY2hQb3MsIDApKTsK
KyAgICAgICAgY2hpbGQtPnNldExvY2F0aW9uKGNoUG9zLCBjaGlsZC0+eSgpKTsKICAgICB9CiB9
CiAKQEAgLTEyMDUsMTcgKzEyMDYsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6aGFuZGxlQm90dG9t
T2ZCbG9jayhpbgogICAgIC8vIElmIHdlIGNhbid0IGNvbGxhcHNlIHdpdGggY2hpbGRyZW4gdGhl
biBnbyBhaGVhZCBhbmQgYWRkIGluIHRoZSBib3R0b20gbWFyZ2luLgogICAgIGlmICghbWFyZ2lu
SW5mby5jYW5Db2xsYXBzZVdpdGhCb3R0b20oKSAmJiAhbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdp
dGhUb3AoKQogICAgICAgICAmJiAoIXN0eWxlKCktPmh0bWxIYWNrcygpIHx8ICFtYXJnaW5JbmZv
LnF1aXJrQ29udGFpbmVyKCkgfHwgIW1hcmdpbkluZm8uYm90dG9tUXVpcmsoKSkpCi0gICAgICAg
IG1faGVpZ2h0ICs9IG1hcmdpbkluZm8ubWFyZ2luKCk7CisgICAgICAgIHNldEhlaWdodChoZWln
aHQoKSArIG1hcmdpbkluZm8ubWFyZ2luKCkpOwogICAgICAgICAKICAgICAvLyBOb3cgYWRkIGlu
IG91ciBib3R0b20gYm9yZGVyL3BhZGRpbmcuCi0gICAgbV9oZWlnaHQgKz0gYm90dG9tOworICAg
IHNldEhlaWdodChoZWlnaHQoKSArIGJvdHRvbSk7CiAKICAgICAvLyBOZWdhdGl2ZSBtYXJnaW5z
IGNhbiBjYXVzZSBvdXIgaGVpZ2h0IHRvIHNocmluayBiZWxvdyBvdXIgbWluaW1hbCBoZWlnaHQg
KGJvcmRlci9wYWRkaW5nKS4KICAgICAvLyBJZiB0aGlzIGhhcHBlbnMsIGVuc3VyZSB0aGF0IHRo
ZSBjb21wdXRlZCBoZWlnaHQgaXMgaW5jcmVhc2VkIHRvIHRoZSBtaW5pbWFsIGhlaWdodC4KLSAg
ICBtX2hlaWdodCA9IG1heChtX2hlaWdodCwgdG9wICsgYm90dG9tKTsKKyAgICBzZXRIZWlnaHQo
bWF4KGhlaWdodCgpLCB0b3AgKyBib3R0b20pKTsKIAogICAgIC8vIEFsd2F5cyBtYWtlIHN1cmUg
b3VyIG92ZXJmbG93IGhlaWdodCBpcyBhdCBsZWFzdCBvdXIgaGVpZ2h0LgotICAgIG1fb3ZlcmZs
b3dIZWlnaHQgPSBtYXgobV9oZWlnaHQsIG1fb3ZlcmZsb3dIZWlnaHQpOworICAgIG1fb3ZlcmZs
b3dIZWlnaHQgPSBtYXgoaGVpZ2h0KCksIG1fb3ZlcmZsb3dIZWlnaHQpOwogCiAgICAgLy8gVXBk
YXRlIG91ciBib3R0b20gY29sbGFwc2VkIG1hcmdpbiBpbmZvLgogICAgIHNldENvbGxhcHNlZEJv
dHRvbU1hcmdpbihtYXJnaW5JbmZvKTsKQEAgLTEyNDQsNyArMTI0NSw4IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8KICAgICBpbnQgdG9wID0gYm9yZGVyVG9wKCkg
KyBwYWRkaW5nVG9wKCk7CiAgICAgaW50IGJvdHRvbSA9IGJvcmRlckJvdHRvbSgpICsgcGFkZGlu
Z0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwogCi0gICAgbV9oZWlnaHQg
PSBtX292ZXJmbG93SGVpZ2h0ID0gdG9wOworICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSB0b3A7Cisg
ICAgc2V0SGVpZ2h0KG1fb3ZlcmZsb3dIZWlnaHQpOwogCiAgICAgLy8gVGhlIG1hcmdpbiBzdHJ1
Y3QgY2FjaGVzIGFsbCBvdXIgY3VycmVudCBtYXJnaW4gY29sbGFwc2luZyBzdGF0ZS4gIFRoZSBj
b21wYWN0IHN0cnVjdCBjYWNoZXMgc3RhdGUgd2hlbiB3ZSBlbmNvdW50ZXIgY29tcGFjdHMsCiAg
ICAgTWFyZ2luSW5mbyBtYXJnaW5JbmZvKHRoaXMsIHRvcCwgYm90dG9tKTsKQEAgLTEyNTcsMTAg
KzEyNTksMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbihibwogICAg
IGludCBwcmV2aW91c0Zsb2F0Qm90dG9tID0gMDsKICAgICBtYXhGbG9hdEJvdHRvbSA9IDA7CiAK
LSAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOworICAgIFJlbmRlckJveCog
Y2hpbGQgPSBmaXJzdENoaWxkQm94KCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIGlm
IChsZWdlbmQgPT0gY2hpbGQpIHsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCk7CisgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpOwogICAg
ICAgICAgICAgY29udGludWU7IC8vIFNraXAgdGhlIGxlZ2VuZCwgc2luY2UgaXQgaGFzIGFscmVh
ZHkgYmVlbiBwb3NpdGlvbmVkIHVwIGluIHRoZSBmaWVsZHNldCdzIGJvcmRlci4KICAgICAgICAg
fQogCkBAIC0xMjgwLDcgKzEyODIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0No
aWxkcmVuKGJvCiAgICAgICAgIC8vIEhhbmRsZSB0aGUgZm91ciB0eXBlcyBvZiBzcGVjaWFsIGVs
ZW1lbnRzIGZpcnN0LiAgVGhlc2UgaW5jbHVkZSBwb3NpdGlvbmVkIGNvbnRlbnQsIGZsb2F0aW5n
IGNvbnRlbnQsIGNvbXBhY3RzIGFuZAogICAgICAgICAvLyBydW4taW5zLiAgV2hlbiB3ZSBlbmNv
dW50ZXIgdGhlc2UgZm91ciB0eXBlcyBvZiBvYmplY3RzLCB3ZSBkb24ndCBhY3R1YWxseSBsYXkg
dGhlbSBvdXQgYXMgbm9ybWFsIGZsb3cgYmxvY2tzLgogICAgICAgICBib29sIGhhbmRsZWQgPSBm
YWxzZTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gaGFuZGxlU3BlY2lhbENoaWxkKGNo
aWxkLCBtYXJnaW5JbmZvLCBjb21wYWN0SW5mbywgaGFuZGxlZCk7CisgICAgICAgIFJlbmRlckJv
eCogbmV4dCA9IGhhbmRsZVNwZWNpYWxDaGlsZChjaGlsZCwgbWFyZ2luSW5mbywgY29tcGFjdElu
Zm8sIGhhbmRsZWQpOwogICAgICAgICBpZiAoaGFuZGxlZCkgewogICAgICAgICAgICAgY2hpbGQg
PSBuZXh0OwogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMzAxLDEzICsxMzAzLDEzIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8KICAgICAgICAgaW50IHlQb3NF
c3RpbWF0ZSA9IGVzdGltYXRlVmVydGljYWxQb3NpdGlvbihjaGlsZCwgbWFyZ2luSW5mbyk7CiAK
ICAgICAgICAgLy8gQ2FjaGUgb3VyIG9sZCByZWN0IHNvIHRoYXQgd2UgY2FuIGRpcnR5IHRoZSBw
cm9wZXIgcmVwYWludCByZWN0cyBpZiB0aGUgY2hpbGQgbW92ZXMuCi0gICAgICAgIEludFJlY3Qg
b2xkUmVjdChjaGlsZC0+eFBvcygpLCBjaGlsZC0+eVBvcygpICwgY2hpbGQtPndpZHRoKCksIGNo
aWxkLT5oZWlnaHQoKSk7CisgICAgICAgIEludFJlY3Qgb2xkUmVjdChjaGlsZC0+eCgpLCBjaGls
ZC0+eSgpICwgY2hpbGQtPndpZHRoKCksIGNoaWxkLT5oZWlnaHQoKSk7CiAjaWZuZGVmIE5ERUJV
RwogICAgICAgICBJbnRTaXplIG9sZExheW91dERlbHRhID0gdmlldygpLT5sYXlvdXREZWx0YSgp
OwogI2VuZGlmCiAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCBwb3NpdGlvbiB0aGUgY2hpbGQgYXMg
dGhvdWdoIGl0IGRpZG4ndCBjb2xsYXBzZSB3aXRoIHRoZSB0b3AuCi0gICAgICAgIHZpZXcoKS0+
YWRkTGF5b3V0RGVsdGEoSW50U2l6ZSgwLCBjaGlsZC0+eVBvcygpIC0geVBvc0VzdGltYXRlKSk7
Ci0gICAgICAgIGNoaWxkLT5zZXRQb3MoY2hpbGQtPnhQb3MoKSwgeVBvc0VzdGltYXRlKTsKKyAg
ICAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRTaXplKDAsIGNoaWxkLT55KCkgLSB5UG9z
RXN0aW1hdGUpKTsKKyAgICAgICAgY2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54KCksIHlQb3NF
c3RpbWF0ZSk7CiAKICAgICAgICAgYm9vbCBtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzID0gZmFs
c2U7CiAgICAgICAgIGlmICh5UG9zRXN0aW1hdGUgIT0gb2xkUmVjdC55KCkgJiYgIWNoaWxkLT5h
dm9pZHNGbG9hdHMoKSAmJiBjaGlsZC0+Y29udGFpbnNGbG9hdHMoKSkKQEAgLTEzMTYsNyArMTMx
OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8KICAgICAgICAg
ICAgIC8vIElmIGFuIGVsZW1lbnQgbWlnaHQgYmUgYWZmZWN0ZWQgYnkgdGhlIHByZXNlbmNlIG9m
IGZsb2F0cywgdGhlbiBhbHdheXMgbWFyayBpdCBmb3IKICAgICAgICAgICAgIC8vIGxheW91dC4K
ICAgICAgICAgICAgIGludCBmYiA9IG1heChwcmV2aW91c0Zsb2F0Qm90dG9tLCBmbG9hdEJvdHRv
bSgpKTsKLSAgICAgICAgICAgIGlmIChmYiA+IG1faGVpZ2h0IHx8IGZiID4geVBvc0VzdGltYXRl
KQorICAgICAgICAgICAgaWYgKGZiID4gaGVpZ2h0KCkgfHwgZmIgPiB5UG9zRXN0aW1hdGUpCiAg
ICAgICAgICAgICAgICAgbWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0cyA9IHRydWU7CiAgICAgICAg
IH0KIApAQCAtMTM0NywyNSArMTM0OSwyNSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9j
a0NoaWxkcmVuKGJvCiAgICAgICAgIGRldGVybWluZUhvcml6b250YWxQb3NpdGlvbihjaGlsZCk7
CiAKICAgICAgICAgLy8gVXBkYXRlIG91ciBoZWlnaHQgbm93IHRoYXQgdGhlIGNoaWxkIGhhcyBi
ZWVuIHBsYWNlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbi4KLSAgICAgICAgbV9oZWlnaHQgKz0g
Y2hpbGQtPmhlaWdodCgpOworICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBjaGlsZC0+aGVp
Z2h0KCkpOwogICAgICAgICBpZiAoY2hpbGQtPnN0eWxlKCktPm1hcmdpbkJvdHRvbUNvbGxhcHNl
KCkgPT0gTVNFUEFSQVRFKSB7Ci0gICAgICAgICAgICBtX2hlaWdodCArPSBjaGlsZC0+bWFyZ2lu
Qm90dG9tKCk7CisgICAgICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBjaGlsZC0+bWFyZ2lu
Qm90dG9tKCkpOwogICAgICAgICAgICAgbWFyZ2luSW5mby5jbGVhck1hcmdpbigpOwogICAgICAg
ICB9CiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgb3ZlcmhhbmdpbmcgZmxvYXRzIHRoYXQg
aW50cnVkZSBpbnRvIGZvbGxvd2luZyBzaWJsaW5ncyAob3IgcG9zc2libHkgb3V0CiAgICAgICAg
IC8vIG9mIHRoaXMgYmxvY2spLCB0aGVuIHRoZSBwYXJlbnQgZ2V0cyBub3RpZmllZCBvZiB0aGUg
ZmxvYXRzIG5vdy4KLSAgICAgICAgbWF4RmxvYXRCb3R0b20gPSBtYXgobWF4RmxvYXRCb3R0b20s
IGFkZE92ZXJoYW5naW5nRmxvYXRzKHN0YXRpY19jYXN0PFJlbmRlckJsb2NrICo+KGNoaWxkKSwg
LWNoaWxkLT54UG9zKCksIC1jaGlsZC0+eVBvcygpLCAhY2hpbGROZWVkZWRMYXlvdXQpKTsKKyAg
ICAgICAgbWF4RmxvYXRCb3R0b20gPSBtYXgobWF4RmxvYXRCb3R0b20sIGFkZE92ZXJoYW5naW5n
RmxvYXRzKHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4oY2hpbGQpLCAtY2hpbGQtPngoKSwgLWNo
aWxkLT55KCksICFjaGlsZE5lZWRlZExheW91dCkpOwogCiAgICAgICAgIC8vIFVwZGF0ZSBvdXIg
b3ZlcmZsb3cgaW4gY2FzZSB0aGUgY2hpbGQgc3BpbGxzIG91dCB0aGUgYmxvY2suCi0gICAgICAg
IG1fb3ZlcmZsb3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgY2hpbGQtPnlQb3MoKSArIGNoaWxk
LT5vdmVyZmxvd1RvcChmYWxzZSkpOwotICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1f
b3ZlcmZsb3dIZWlnaHQsIG1faGVpZ2h0ICsgY2hpbGQtPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSAt
IGNoaWxkLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChjaGlsZC0+
eFBvcygpICsgY2hpbGQtPm92ZXJmbG93V2lkdGgoZmFsc2UpLCBtX292ZXJmbG93V2lkdGgpOwot
ICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1pbihjaGlsZC0+eFBvcygpICsgY2hpbGQtPm92ZXJm
bG93TGVmdChmYWxzZSksIG1fb3ZlcmZsb3dMZWZ0KTsKKyAgICAgICAgbV9vdmVyZmxvd1RvcCA9
IG1pbihtX292ZXJmbG93VG9wLCBjaGlsZC0+eSgpICsgY2hpbGQtPm92ZXJmbG93VG9wKGZhbHNl
KSk7CisgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgaGVp
Z2h0KCkgKyBjaGlsZC0+b3ZlcmZsb3dIZWlnaHQoZmFsc2UpIC0gY2hpbGQtPmhlaWdodCgpKTsK
KyAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KGNoaWxkLT54KCkgKyBjaGlsZC0+b3ZlcmZs
b3dXaWR0aChmYWxzZSksIG1fb3ZlcmZsb3dXaWR0aCk7CisgICAgICAgIG1fb3ZlcmZsb3dMZWZ0
ID0gbWluKGNoaWxkLT54KCkgKyBjaGlsZC0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSwgbV9vdmVyZmxv
d0xlZnQpOwogICAgICAgICAKICAgICAgICAgLy8gSW5zZXJ0IG91ciBjb21wYWN0IGludG8gdGhl
IGJsb2NrIG1hcmdpbiBpZiB3ZSBoYXZlIG9uZS4KICAgICAgICAgaW5zZXJ0Q29tcGFjdElmTmVl
ZGVkKGNoaWxkLCBjb21wYWN0SW5mbyk7CiAKLSAgICAgICAgSW50U2l6ZSBjaGlsZE9mZnNldChj
aGlsZC0+eFBvcygpIC0gb2xkUmVjdC54KCksIGNoaWxkLT55UG9zKCkgLSBvbGRSZWN0LnkoKSk7
CisgICAgICAgIEludFNpemUgY2hpbGRPZmZzZXQoY2hpbGQtPngoKSAtIG9sZFJlY3QueCgpLCBj
aGlsZC0+eSgpIC0gb2xkUmVjdC55KCkpOwogICAgICAgICBpZiAoY2hpbGRPZmZzZXQud2lkdGgo
KSB8fCBjaGlsZE9mZnNldC5oZWlnaHQoKSkgewogICAgICAgICAgICAgdmlldygpLT5hZGRMYXlv
dXREZWx0YShjaGlsZE9mZnNldCk7CiAKQEAgLTEzODAsNyArMTM4Miw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8KICAgICAgICAgICAgIGNoaWxkLT5yZXBhaW50
KCk7CiAKICAgICAgICAgQVNTRVJUKG9sZExheW91dERlbHRhID09IHZpZXcoKS0+bGF5b3V0RGVs
dGEoKSk7Ci0gICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAgfQogCiAgICAgLy8gTm93IGRvIHRo
ZSBoYW5kbGluZyBvZiB0aGUgYm90dG9tIG9mIHRoZSBibG9jaywgYWRkaW5nIGluIG91ciBib3R0
b20gYm9yZGVyL3BhZGRpbmcgYW5kCkBAIC0xMzkzLDcgKzEzOTUsNyBAQCBib29sIFJlbmRlckJs
b2NrOjpsYXlvdXRPbmx5UG9zaXRpb25lZE9iCiAgICAgaWYgKCFwb3NDaGlsZE5lZWRzTGF5b3V0
KCkgfHwgbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpIHx8IHNlbGZOZWVkc0xheW91dCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNo
ZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHhQb3MoKSwgeVBvcygpKSwgbV9oYXNDb2x1bW5zIHx8
IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7CisgICAgTGF5b3V0U3RhdGVNYWlu
dGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIHkoKSksIG1faGFz
Q29sdW1ucyB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkpOwogCiAgICAgaWYg
KG5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCkpIHsKICAgICAgICAgdHJ5TGF5b3V0RG9p
bmdQb3NpdGlvbmVkTW92ZW1lbnRPbmx5KCk7CkBAIC0xNDE2LDcgKzE0MTgsNyBAQCBib29sIFJl
bmRlckJsb2NrOjpsYXlvdXRPbmx5UG9zaXRpb25lZE9iCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRQb3NpdGlvbmVkT2JqZWN0cyhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiB7CiAgICAgaWYgKG1f
cG9zaXRpb25lZE9iamVjdHMpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByOworICAgICAgICBS
ZW5kZXJCb3gqIHI7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMt
PmVuZCgpOwogICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICByID0gKml0OwpAQCAtMTQ0
Myw3ICsxNDQ1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdAog
dm9pZCBSZW5kZXJCbG9jazo6bWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCkKIHsKICAg
ICBpZiAobV9wb3NpdGlvbmVkT2JqZWN0cykgewotICAgICAgICBSZW5kZXJPYmplY3QqIHI7Cisg
ICAgICAgIFJlbmRlckJveCogcjsKICAgICAgICAgSXRlcmF0b3IgZW5kID0gbV9wb3NpdGlvbmVk
T2JqZWN0cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX3Bvc2l0aW9uZWRP
YmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIHIgPSAqaXQ7
CkBAIC0xNDcyLDcgKzE0NzQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZXBhaW50T3Zlcmhhbmdp
bmdGbG9hCiAgICAgICAgICAgICAvLyBPbmx5IHJlcGFpbnQgdGhlIG9iamVjdCBpZiBpdCBpcyBv
dmVyaGFuZ2luZywgaXMgbm90IGluIGl0cyBvd24gbGF5ZXIsIGFuZAogICAgICAgICAgICAgLy8g
aXMgb3VyIHJlc3BvbnNpYmlsaXR5IHRvIHBhaW50IChtX3Nob3VsZFBhaW50IGlzIHNldCkuIFdo
ZW4gcGFpbnRBbGxEZXNjZW5kYW50cyBpcyB0cnVlLCB0aGUgbGF0dGVyCiAgICAgICAgICAgICAv
LyBjb25kaXRpb24gaXMgcmVwbGFjZWQgd2l0aCBiZWluZyBhIGRlc2NlbmRhbnQgb2YgdXMuCi0g
ICAgICAgICAgICBpZiAoci0+bV9ib3R0b20gPiBtX2hlaWdodCAmJiAocGFpbnRBbGxEZXNjZW5k
YW50cyAmJiByLT5tX3JlbmRlcmVyLT5pc0Rlc2NlbmRhbnRPZih0aGlzKSB8fCByLT5tX3Nob3Vs
ZFBhaW50KSAmJiAhci0+bV9yZW5kZXJlci0+aGFzTGF5ZXIoKSkgeyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChyLT5tX2JvdHRvbSA+IGhlaWdodCgpICYmIChwYWludEFsbERlc2Nl
bmRhbnRzICYmIHItPm1fcmVuZGVyZXItPmlzRGVzY2VuZGFudE9mKHRoaXMpIHx8IHItPm1fc2hv
dWxkUGFpbnQpICYmICFyLT5tX3JlbmRlcmVyLT5oYXNMYXllcigpKSB7ICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnJlcGFpbnQoKTsKICAgICAgICAgICAg
ICAgICByLT5tX3JlbmRlcmVyLT5yZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMoKTsKICAgICAgICAg
ICAgIH0KQEAgLTE0ODMsOCArMTQ4NSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVy
aGFuZ2luZ0Zsb2EKIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGludCB0eCwgaW50IHR5KQogewotICAgIHR4ICs9IG1feDsKLSAgICB0eSArPSBtX3k7Cisg
ICAgdHggKz0geCgpOworICAgIHR5ICs9IG1fZnJhbWVSZWN0LnkoKTsKICAgICAKICAgICBQYWlu
dFBoYXNlIHBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwogCkBAIC0xNjE5LDEyICsxNjIxLDEyIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICBpbmZvLnBhaW50
aW5nUm9vdCA9IHBhaW50aW5nUm9vdEZvckNoaWxkcmVuKHBhaW50SW5mbyk7CiAgICAgYm9vbCBp
c1ByaW50aW5nID0gZG9jdW1lbnQoKS0+cHJpbnRpbmcoKTsKIAotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsgICAgICAgIAorICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRC
b3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsgICAgICAgIAog
ICAgICAgICAvLyBDaGVjayBmb3IgcGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cywgYW5kIGlmIGl0
J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KICAgICAgICAgaWYgKGlzUHJpbnRpbmcgJiYgIWNoaWxk
cmVuSW5saW5lKCkgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxX
QVlTICYmCi0gICAgICAgICAgICBpblJvb3RCbG9ja0NvbnRleHQoKSAmJiAodHkgKyBjaGlsZC0+
eVBvcygpKSA+IHBhaW50SW5mby5yZWN0LnkoKSAmJiAKLSAgICAgICAgICAgICh0eSArIGNoaWxk
LT55UG9zKCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKLSAgICAgICAgICAgIHZpZXco
KS0+c2V0QmVzdFRydW5jYXRlZEF0KHR5ICsgY2hpbGQtPnlQb3MoKSwgdGhpcywgdHJ1ZSk7Cisg
ICAgICAgICAgICBpblJvb3RCbG9ja0NvbnRleHQoKSAmJiAodHkgKyBjaGlsZC0+eSgpKSA+IHBh
aW50SW5mby5yZWN0LnkoKSAmJiAKKyAgICAgICAgICAgICh0eSArIGNoaWxkLT55KCkpIDwgcGFp
bnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgIHZpZXcoKS0+c2V0QmVzdFRydW5j
YXRlZEF0KHR5ICsgY2hpbGQtPnkoKSwgdGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMTYzMyw5ICsxNjM1LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFp
bnRDaGlsZHJlbihQYWludEluZgogCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWFm
dGVyOiBhbHdheXMsIGFuZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwuCiAgICAgICAgIGlm
IChpc1ByaW50aW5nICYmICFjaGlsZHJlbklubGluZSgpICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdl
QnJlYWtBZnRlcigpID09IFBCQUxXQVlTICYmIAotICAgICAgICAgICAgaW5Sb290QmxvY2tDb250
ZXh0KCkgJiYgKHR5ICsgY2hpbGQtPnlQb3MoKSArIGNoaWxkLT5oZWlnaHQoKSkgPiBwYWludElu
Zm8ucmVjdC55KCkgJiYgCi0gICAgICAgICAgICAodHkgKyBjaGlsZC0+eVBvcygpICsgY2hpbGQt
PmhlaWdodCgpKSA8IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7Ci0gICAgICAgICAgICB2aWV3
KCktPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIGNoaWxkLT55UG9zKCkgKyBjaGlsZC0+aGVpZ2h0
KCkgKyBtYXgoMCwgY2hpbGQtPmNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpKSwgdGhpcywgdHJ1ZSk7
CisgICAgICAgICAgICBpblJvb3RCbG9ja0NvbnRleHQoKSAmJiAodHkgKyBjaGlsZC0+eSgpICsg
Y2hpbGQtPmhlaWdodCgpKSA+IHBhaW50SW5mby5yZWN0LnkoKSAmJiAKKyAgICAgICAgICAgICh0
eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9t
KCkpIHsKKyAgICAgICAgICAgIHZpZXcoKS0+c2V0QmVzdFRydW5jYXRlZEF0KHR5ICsgY2hpbGQt
PnkoKSArIGNoaWxkLT5oZWlnaHQoKSArIG1heCgwLCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQm90
dG9tKCkpLCB0aGlzLCB0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KQEAgLTE3MjEsOCArMTcyMyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBh
aW50SW5mbyYKICAgICAgICAgICAgIGlmICghaW5saW5lRmxvdy0+aGFzTGF5ZXIoKSkKICAgICAg
ICAgICAgICAgICBjb250YWluaW5nQmxvY2soKS0+YWRkQ29udGludWF0aW9uV2l0aE91dGxpbmUo
aW5saW5lRmxvdyk7CiAgICAgICAgICAgICBlbHNlIGlmICghaW5saW5lRmxvdy0+Zmlyc3RMaW5l
Qm94KCkpCi0gICAgICAgICAgICAgICAgaW5saW5lRmxvdy0+cGFpbnRPdXRsaW5lKHBhaW50SW5m
by5jb250ZXh0LCB0eCAtIHhQb3MoKSArIGlubGluZUZsb3ctPmNvbnRhaW5pbmdCbG9jaygpLT54
UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geVBv
cygpICsgaW5saW5lRmxvdy0+Y29udGFpbmluZ0Jsb2NrKCktPnlQb3MoKSk7CisgICAgICAgICAg
ICAgICAgaW5saW5lRmxvdy0+cGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCB0eCAtIHgo
KSArIGlubGluZUZsb3ctPmNvbnRhaW5pbmdCbG9jaygpLT54KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geSgpICsgaW5saW5lRmxvdy0+Y29udGFpbmlu
Z0Jsb2NrKCktPnkoKSk7CiAgICAgICAgIH0KICAgICAgICAgcGFpbnRDb250aW51YXRpb25PdXRs
aW5lcyhwYWludEluZm8sIHR4LCB0eSk7CiAgICAgfQpAQCAtMTc0OCw4ICsxNzUwLDggQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMoUGFpbnRJbmZvJgogICAgICAgICBpZiAoci0+bV9z
aG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJlci0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAg
UGFpbnRJbmZvIGN1cnJlbnRQYWludEluZm8ocGFpbnRJbmZvKTsKICAgICAgICAgICAgIGN1cnJl
bnRQYWludEluZm8ucGhhc2UgPSBwcmVzZXJ2ZVBoYXNlID8gcGFpbnRJbmZvLnBoYXNlIDogUGFp
bnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKLSAgICAgICAgICAgIGludCBjdXJyZW50VFggPSB0eCAr
IHItPm1fbGVmdCAtIHItPm1fcmVuZGVyZXItPnhQb3MoKSArIHItPm1fcmVuZGVyZXItPm1hcmdp
bkxlZnQoKTsKLSAgICAgICAgICAgIGludCBjdXJyZW50VFkgPSB0eSArIHItPm1fdG9wIC0gci0+
bV9yZW5kZXJlci0+eVBvcygpICsgci0+bV9yZW5kZXJlci0+bWFyZ2luVG9wKCk7CisgICAgICAg
ICAgICBpbnQgY3VycmVudFRYID0gdHggKyByLT5tX2xlZnQgLSByLT5tX3JlbmRlcmVyLT54KCkg
KyByLT5tX3JlbmRlcmVyLT5tYXJnaW5MZWZ0KCk7CisgICAgICAgICAgICBpbnQgY3VycmVudFRZ
ID0gdHkgKyByLT5tX3RvcCAtIHItPm1fcmVuZGVyZXItPnkoKSArIHItPm1fcmVuZGVyZXItPm1h
cmdpblRvcCgpOwogICAgICAgICAgICAgci0+bV9yZW5kZXJlci0+cGFpbnQoY3VycmVudFBhaW50
SW5mbywgY3VycmVudFRYLCBjdXJyZW50VFkpOwogICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVBo
YXNlKSB7CiAgICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IFBhaW50UGhh
c2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7CkBAIC0xODI5LDggKzE4MzEsOCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpwYWludENvbnRpbnVhdGlvbk91dGxpCiAgICAgICAgIFJlbmRlckZsb3cqIGZsb3cg
PSAqaXQ7CiAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGZsb3ctPmNvbnRhaW5pbmdCbG9j
aygpOwogICAgICAgICBmb3IgKCA7IGJsb2NrICYmIGJsb2NrICE9IHRoaXM7IGJsb2NrID0gYmxv
Y2stPmNvbnRhaW5pbmdCbG9jaygpKSB7Ci0gICAgICAgICAgICB0eCArPSBibG9jay0+eFBvcygp
OwotICAgICAgICAgICAgdHkgKz0gYmxvY2stPnlQb3MoKTsKKyAgICAgICAgICAgIHR4ICs9IGJs
b2NrLT54KCk7CisgICAgICAgICAgICB0eSArPSBibG9jay0+eSgpOwogICAgICAgICB9CiAgICAg
ICAgIEFTU0VSVChibG9jayk7ICAgCiAgICAgICAgIGZsb3ctPnBhaW50T3V0bGluZShpbmZvLmNv
bnRleHQsIHR4LCB0eSk7CkBAIC0xOTAwLDcgKzE5MDIsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9j
azo6c2VsZWN0aW9uR2FwUmVjdHMoCiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAg
ICBhYnNDb250ZW50UG9pbnQgLT0gbGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAK
LSAgICBpbnQgbGFzdFRvcCA9IC1ib3JkZXJUb3BFeHRyYSgpOworICAgIGludCBsYXN0VG9wID0g
LWludHJpbnNpY1BhZGRpbmdUb3AoKTsKICAgICBpbnQgbGFzdExlZnQgPSBsZWZ0U2VsZWN0aW9u
T2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwogICAgIGludCBsYXN0UmlnaHQgPSByaWdodFNlbGVjdGlv
bk9mZnNldCh0aGlzLCBsYXN0VG9wKTsKICAgICAKQEAgLTE5MTAsNyArMTkxMiw3IEBAIEdhcFJl
Y3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBSZWN0cygKIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAg
ICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgJiYgcGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgIGludCBsYXN0VG9wID0gLWJvcmRlclRvcEV4
dHJhKCk7CisgICAgICAgIGludCBsYXN0VG9wID0gLWludHJpbnNpY1BhZGRpbmdUb3AoKTsKICAg
ICAgICAgaW50IGxhc3RMZWZ0ID0gbGVmdFNlbGVjdGlvbk9mZnNldCh0aGlzLCBsYXN0VG9wKTsK
ICAgICAgICAgaW50IGxhc3RSaWdodCA9IHJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RU
b3ApOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwpAQCAtMTkxOSwxNSArMTky
MSwxNSBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQYWludEluCiAgICAgfQog
fQogCi1zdGF0aWMgdm9pZCBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMoY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8qIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIExpc3RIYXNoU2V0PFJl
bmRlck9iamVjdCo+KiBwb3NpdGlvbmVkT2JqZWN0cykKK3N0YXRpYyB2b2lkIGNsaXBPdXRQb3Np
dGlvbmVkT2JqZWN0cyhjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyogcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSwgTGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj4qIHBvc2l0aW9uZWRPYmplY3Rz
KQogewogICAgIGlmICghcG9zaXRpb25lZE9iamVjdHMpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBMaXN0SGFzaFNldDxSZW5kZXJPYmplY3QqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcG9z
aXRpb25lZE9iamVjdHMtPmVuZCgpOwotICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVuZGVyT2JqZWN0
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHIgPSAqaXQ7Ci0gICAgICAgIHBh
aW50SW5mby0+Y29udGV4dC0+Y2xpcE91dChJbnRSZWN0KHR4ICsgci0+eFBvcygpLCB0eSArIHIt
PnlQb3MoKSwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkpKTsKKyAgICBMaXN0SGFzaFNldDxSZW5k
ZXJCb3gqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwor
ICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcG9z
aXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5k
ZXJCb3gqIHIgPSAqaXQ7CisgICAgICAgIHBhaW50SW5mby0+Y29udGV4dC0+Y2xpcE91dChJbnRS
ZWN0KHR4ICsgci0+eCgpLCB0eSArIHItPnkoKSwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkpKTsK
ICAgICB9CiB9CiAKQEAgLTE5NDEsNyArMTk0Myw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpm
aWxsU2VsZWN0aW9uR2FwcygKICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50
SW5mbywgdHgsIHR5LCBtX3Bvc2l0aW9uZWRPYmplY3RzKTsKICAgICAgICAgaWYgKGlzQm9keSgp
IHx8IGlzUm9vdCgpKSAvLyBUaGUgPGJvZHk+IG11c3QgbWFrZSBzdXJlIHRvIGV4YW1pbmUgaXRz
IGNvbnRhaW5pbmdCbG9jaydzIHBvc2l0aW9uZWQgb2JqZWN0cy4KICAgICAgICAgICAgIGZvciAo
UmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7IGNiICYmICFjYi0+aXNSZW5kZXJW
aWV3KCk7IGNiID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICAgICAgICAgIGNsaXBP
dXRQb3NpdGlvbmVkT2JqZWN0cyhwYWludEluZm8sIGNiLT54UG9zKCksIGNiLT55UG9zKCksIGNi
LT5tX3Bvc2l0aW9uZWRPYmplY3RzKTsKKyAgICAgICAgICAgICAgICBjbGlwT3V0UG9zaXRpb25l
ZE9iamVjdHMocGFpbnRJbmZvLCBjYi0+eCgpLCBjYi0+eSgpLCBjYi0+bV9wb3NpdGlvbmVkT2Jq
ZWN0cyk7CiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgZm9y
IChEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGlu
Z09iamVjdHMpOyBpdC5jdXJyZW50KCk7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdCogciA9IGl0LmN1cnJlbnQoKTsKQEAgLTE5NzMsNyArMTk3NSw3IEBAIEdhcFJlY3Rz
IFJlbmRlckJsb2NrOjpmaWxsU2VsZWN0aW9uR2FwcygKIAogICAgIC8vIEdvIGFoZWFkIGFuZCBm
aWxsIHRoZSB2ZXJ0aWNhbCBnYXAgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbSBvZiBvdXIgYmxv
Y2sgaWYgdGhlIHNlbGVjdGlvbiBleHRlbmRzIHBhc3Qgb3VyIGJsb2NrLgogICAgIGlmIChyb290
QmxvY2sgPT0gdGhpcyAmJiAobV9zZWxlY3Rpb25TdGF0ZSAhPSBTZWxlY3Rpb25Cb3RoICYmIG1f
c2VsZWN0aW9uU3RhdGUgIT0gU2VsZWN0aW9uRW5kKSkKLSAgICAgICAgcmVzdWx0LnVuaXRlQ2Vu
dGVyKGZpbGxWZXJ0aWNhbFNlbGVjdGlvbkdhcChsYXN0VG9wLCBsYXN0TGVmdCwgbGFzdFJpZ2h0
LCB0eSArIGhlaWdodCgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSwKKyAgICAgICAgcmVzdWx0LnVu
aXRlQ2VudGVyKGZpbGxWZXJ0aWNhbFNlbGVjdGlvbkdhcChsYXN0VG9wLCBsYXN0TGVmdCwgbGFz
dFJpZ2h0LCB0eSArIGhlaWdodCgpICsgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RCbG9jaywg
YmxvY2tYLCBibG9ja1ksIHBhaW50SW5mbykpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0y
MDM1LDEwICsyMDM3LDEwIEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpmaWxsQmxvY2tTZWxlY3Rp
b24KICAgICBHYXBSZWN0cyByZXN1bHQ7CiAKICAgICAvLyBHbyBhaGVhZCBhbmQganVtcCByaWdo
dCB0byB0aGUgZmlyc3QgYmxvY2sgY2hpbGQgdGhhdCBjb250YWlucyBzb21lIHNlbGVjdGVkIG9i
amVjdHMuCi0gICAgUmVuZGVyT2JqZWN0KiBjdXJyOwotICAgIGZvciAoY3VyciA9IGZpcnN0Q2hp
bGQoKTsgY3VyciAmJiBjdXJyLT5zZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5vbmU7IGN1
cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7IH0KKyAgICBSZW5kZXJCb3gqIGN1cnI7CisgICAg
Zm9yIChjdXJyID0gZmlyc3RDaGlsZEJveCgpOyBjdXJyICYmIGN1cnItPnNlbGVjdGlvblN0YXRl
KCkgPT0gU2VsZWN0aW9uTm9uZTsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nQm94KCkpIHsgfQog
Ci0gICAgZm9yIChib29sIHNhd1NlbGVjdGlvbkVuZCA9IGZhbHNlOyBjdXJyICYmICFzYXdTZWxl
Y3Rpb25FbmQ7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChib29sIHNh
d1NlbGVjdGlvbkVuZCA9IGZhbHNlOyBjdXJyICYmICFzYXdTZWxlY3Rpb25FbmQ7IGN1cnIgPSBj
dXJyLT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAgIFNlbGVjdGlvblN0YXRlIGNoaWxkU3Rh
dGUgPSBjdXJyLT5zZWxlY3Rpb25TdGF0ZSgpOwogICAgICAgICBpZiAoY2hpbGRTdGF0ZSA9PSBT
ZWxlY3Rpb25Cb3RoIHx8IGNoaWxkU3RhdGUgPT0gU2VsZWN0aW9uRW5kKQogICAgICAgICAgICAg
c2F3U2VsZWN0aW9uRW5kID0gdHJ1ZTsKQEAgLTIwNjEsNyArMjA2Myw3IEBAIEdhcFJlY3RzIFJl
bmRlckJsb2NrOjpmaWxsQmxvY2tTZWxlY3Rpb24KICAgICAgICAgICAgIGlmIChjaGlsZFN0YXRl
ID09IFNlbGVjdGlvbkVuZCB8fCBjaGlsZFN0YXRlID09IFNlbGVjdGlvbkluc2lkZSkKICAgICAg
ICAgICAgICAgICAvLyBGaWxsIHRoZSBnYXAgYWJvdmUgdGhlIG9iamVjdC4KICAgICAgICAgICAg
ICAgICByZXN1bHQudW5pdGVDZW50ZXIoZmlsbFZlcnRpY2FsU2VsZWN0aW9uR2FwKGxhc3RUb3As
IGxhc3RMZWZ0LCBsYXN0UmlnaHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgKyBjdXJyLT55UG9zKCksIHJvb3RCbG9jaywg
YmxvY2tYLCBibG9ja1ksIHBhaW50SW5mbykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgKyBjdXJyLT55KCksIHJvb3RCbG9j
aywgYmxvY2tYLCBibG9ja1ksIHBhaW50SW5mbykpOwogCiAgICAgICAgICAgICAvLyBPbmx5IGZp
bGwgc2lkZSBnYXBzIGZvciBvYmplY3RzIHRoYXQgcGFpbnQgdGhlaXIgb3duIHNlbGVjdGlvbiBp
ZiB3ZSBrbm93IGZvciBzdXJlIHRoZSBzZWxlY3Rpb24gaXMgZ29pbmcgdG8gZXh0ZW5kIGFsbCB0
aGUgd2F5ICpwYXN0KgogICAgICAgICAgICAgLy8gb3VyIG9iamVjdC4gIFdlIGtub3cgdGhpcyBp
ZiB0aGUgc2VsZWN0aW9uIGRpZCBub3QgZW5kIGluc2lkZSBvdXIgb2JqZWN0LgpAQCAtMjA3Mywx
OSArMjA3NSwxOSBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6ZmlsbEJsb2NrU2VsZWN0aW9uCiAg
ICAgICAgICAgICBnZXRIb3Jpem9udGFsU2VsZWN0aW9uR2FwSW5mbyhjaGlsZFN0YXRlLCBsZWZ0
R2FwLCByaWdodEdhcCk7CiAKICAgICAgICAgICAgIGlmIChsZWZ0R2FwKQotICAgICAgICAgICAg
ICAgIHJlc3VsdC51bml0ZUxlZnQoZmlsbExlZnRTZWxlY3Rpb25HYXAodGhpcywgY3Vyci0+eFBv
cygpLCBjdXJyLT55UG9zKCksIGN1cnItPmhlaWdodCgpLCByb290QmxvY2ssIGJsb2NrWCwgYmxv
Y2tZLCB0eCwgdHksIHBhaW50SW5mbykpOworICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUxl
ZnQoZmlsbExlZnRTZWxlY3Rpb25HYXAodGhpcywgY3Vyci0+eCgpLCBjdXJyLT55KCksIGN1cnIt
PmhlaWdodCgpLCByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHksIHBhaW50SW5mbykp
OwogICAgICAgICAgICAgaWYgKHJpZ2h0R2FwKQotICAgICAgICAgICAgICAgIHJlc3VsdC51bml0
ZVJpZ2h0KGZpbGxSaWdodFNlbGVjdGlvbkdhcCh0aGlzLCBjdXJyLT54UG9zKCkgKyBjdXJyLT53
aWR0aCgpLCBjdXJyLT55UG9zKCksIGN1cnItPmhlaWdodCgpLCByb290QmxvY2ssIGJsb2NrWCwg
YmxvY2tZLCB0eCwgdHksIHBhaW50SW5mbykpOworICAgICAgICAgICAgICAgIHJlc3VsdC51bml0
ZVJpZ2h0KGZpbGxSaWdodFNlbGVjdGlvbkdhcCh0aGlzLCBjdXJyLT54KCkgKyBjdXJyLT53aWR0
aCgpLCBjdXJyLT55KCksIGN1cnItPmhlaWdodCgpLCByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZ
LCB0eCwgdHksIHBhaW50SW5mbykpOwogCiAgICAgICAgICAgICAvLyBVcGRhdGUgbGFzdFRvcCB0
byBiZSBqdXN0IHVuZGVybmVhdGggdGhlIG9iamVjdC4gIGxhc3RMZWZ0IGFuZCBsYXN0UmlnaHQg
ZXh0ZW5kIGFzIGZhciBhcwogICAgICAgICAgICAgLy8gdGhleSBjYW4gd2l0aG91dCBidW1waW5n
IGludG8gZmxvYXRpbmcgb3IgcG9zaXRpb25lZCBvYmplY3RzLiAgSWRlYWxseSB0aGV5IHdpbGwg
Z28gcmlnaHQgdXAKICAgICAgICAgICAgIC8vIHRvIHRoZSBib3JkZXIgb2YgdGhlIHJvb3Qgc2Vs
ZWN0aW9uIGJsb2NrLgotICAgICAgICAgICAgbGFzdFRvcCA9ICh0eSAtIGJsb2NrWSkgKyAoY3Vy
ci0+eVBvcygpICsgY3Vyci0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgbGFzdExlZnQgPSBsZWZ0
U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+eVBvcygpICsgY3Vyci0+aGVpZ2h0KCkp
OwotICAgICAgICAgICAgbGFzdFJpZ2h0ID0gcmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2Nr
LCBjdXJyLT55UG9zKCkgKyBjdXJyLT5oZWlnaHQoKSk7CisgICAgICAgICAgICBsYXN0VG9wID0g
KHR5IC0gYmxvY2tZKSArIChjdXJyLT55KCkgKyBjdXJyLT5oZWlnaHQoKSk7CisgICAgICAgICAg
ICBsYXN0TGVmdCA9IGxlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBjdXJyLT55KCkgKyBj
dXJyLT5oZWlnaHQoKSk7CisgICAgICAgICAgICBsYXN0UmlnaHQgPSByaWdodFNlbGVjdGlvbk9m
ZnNldChyb290QmxvY2ssIGN1cnItPnkoKSArIGN1cnItPmhlaWdodCgpKTsKICAgICAgICAgfSBl
bHNlIGlmIChjaGlsZFN0YXRlICE9IFNlbGVjdGlvbk5vbmUpCiAgICAgICAgICAgICAvLyBXZSBt
dXN0IGJlIGEgYmxvY2sgdGhhdCBoYXMgc29tZSBzZWxlY3RlZCBvYmplY3QgaW5zaWRlIGl0LiAg
R28gYWhlYWQgYW5kIHJlY3VyLgotICAgICAgICAgICAgcmVzdWx0LnVuaXRlKHN0YXRpY19jYXN0
PFJlbmRlckJsb2NrKj4oY3VyciktPmZpbGxTZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywgYmxvY2tY
LCBibG9ja1ksIHR4ICsgY3Vyci0+eFBvcygpLCB0eSArIGN1cnItPnlQb3MoKSwgCisgICAgICAg
ICAgICByZXN1bHQudW5pdGUoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjdXJyKS0+ZmlsbFNl
bGVjdGlvbkdhcHMocm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHggKyBjdXJyLT54KCksIHR5
ICsgY3Vyci0+eSgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VG9wLCBsYXN0TGVmdCwgbGFz
dFJpZ2h0LCBwYWludEluZm8pKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIxNjUs
MTkgKzIxNjcsMTkgQEAgdm9pZCBSZW5kZXJCbG9jazo6Z2V0SG9yaXpvbnRhbFNlbGVjdGlvbgog
ICAgICAgICAgICAgICAgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kICYmICFs
dHIpOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmxlZnRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxv
Y2sqIHJvb3RCbG9jaywgaW50IHkpCitpbnQgUmVuZGVyQmxvY2s6OmxlZnRTZWxlY3Rpb25PZmZz
ZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IHlQb3MpCiB7Ci0gICAgaW50IGxlZnQgPSBs
ZWZ0T2Zmc2V0KHkpOworICAgIGludCBsZWZ0ID0gbGVmdE9mZnNldCh5UG9zKTsKICAgICBpZiAo
bGVmdCA9PSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKSB7CiAgICAgICAgIGlmIChyb290
QmxvY2sgIT0gdGhpcykKICAgICAgICAgICAgIC8vIFRoZSBib3JkZXIgY2FuIHBvdGVudGlhbGx5
IGJlIGZ1cnRoZXIgZXh0ZW5kZWQgYnkgb3VyIGNvbnRhaW5pbmdCbG9jaygpLgotICAgICAgICAg
ICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5sZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9j
aywgeSArIHlQb3MoKSk7CisgICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPmxl
ZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCB5UG9zICsgeSgpKTsKICAgICAgICAgcmV0dXJu
IGxlZnQ7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBSZW5kZXJCbG9jayogY2IgPSB0aGlz
OwogICAgICAgICB3aGlsZSAoY2IgIT0gcm9vdEJsb2NrKSB7Ci0gICAgICAgICAgICBsZWZ0ICs9
IGNiLT54UG9zKCk7CisgICAgICAgICAgICBsZWZ0ICs9IGNiLT54KCk7CiAgICAgICAgICAgICBj
YiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxODUsMzUg
KzIxODcsMzUgQEAgaW50IFJlbmRlckJsb2NrOjpsZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbgogICAg
IHJldHVybiBsZWZ0OwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OnJpZ2h0U2VsZWN0aW9uT2Zmc2V0
KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGludCB5KQoraW50IFJlbmRlckJsb2NrOjpyaWdodFNl
bGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgeVBvcykKIHsKLSAgICBp
bnQgcmlnaHQgPSByaWdodE9mZnNldCh5KTsKKyAgICBpbnQgcmlnaHQgPSByaWdodE9mZnNldCh5
UG9zKTsKICAgICBpZiAocmlnaHQgPT0gKGNvbnRlbnRXaWR0aCgpICsgKGJvcmRlckxlZnQoKSAr
IHBhZGRpbmdMZWZ0KCkpKSkgewogICAgICAgICBpZiAocm9vdEJsb2NrICE9IHRoaXMpCiAgICAg
ICAgICAgICAvLyBUaGUgYm9yZGVyIGNhbiBwb3RlbnRpYWxseSBiZSBmdXJ0aGVyIGV4dGVuZGVk
IGJ5IG91ciBjb250YWluaW5nQmxvY2soKS4KLSAgICAgICAgICAgIHJldHVybiBjb250YWluaW5n
QmxvY2soKS0+cmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCB5ICsgeVBvcygpKTsKKyAg
ICAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2soKS0+cmlnaHRTZWxlY3Rpb25PZmZzZXQo
cm9vdEJsb2NrLCB5UG9zICsgeSgpKTsKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIH0KICAg
ICBlbHNlIHsKICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gdGhpczsKICAgICAgICAgd2hpbGUg
KGNiICE9IHJvb3RCbG9jaykgewotICAgICAgICAgICAgcmlnaHQgKz0gY2ItPnhQb3MoKTsKKyAg
ICAgICAgICAgIHJpZ2h0ICs9IGNiLT54KCk7CiAgICAgICAgICAgICBjYiA9IGNiLT5jb250YWlu
aW5nQmxvY2soKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmlnaHQ7CiB9CiAKLXZv
aWQgUmVuZGVyQmxvY2s6Omluc2VydFBvc2l0aW9uZWRPYmplY3QoUmVuZGVyT2JqZWN0ICpvKQor
dm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqIG8pCiB7
CiAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0IG9mIHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBh
bGVhZHkgaGF2ZSBvbmUKICAgICBpZiAoIW1fcG9zaXRpb25lZE9iamVjdHMpCi0gICAgICAgIG1f
cG9zaXRpb25lZE9iamVjdHMgPSBuZXcgTGlzdEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj47CisgICAg
ICAgIG1fcG9zaXRpb25lZE9iamVjdHMgPSBuZXcgTGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj47CiAK
ICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzLT5hZGQobyk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6
OnJlbW92ZVBvc2l0aW9uZWRPYmplY3QoUmVuZGVyT2JqZWN0ICpvKQordm9pZCBSZW5kZXJCbG9j
azo6cmVtb3ZlUG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqIG8pCiB7CiAgICAgaWYgKG1fcG9z
aXRpb25lZE9iamVjdHMpCiAgICAgICAgIG1fcG9zaXRpb25lZE9iamVjdHMtPnJlbW92ZShvKTsK
QEAgLTIyMjQsMTEgKzIyMjYsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25l
ZE9iamVjdAogICAgIGlmICghbV9wb3NpdGlvbmVkT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIFJlbmRlck9iamVjdCogcjsKKyAgICBSZW5kZXJCb3gqIHI7CiAgICAgCiAgICAg
SXRlcmF0b3IgZW5kID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+ZW5kKCk7CiAgICAgCi0gICAgVmVj
dG9yPFJlbmRlck9iamVjdCosIDE2PiBkZWFkT2JqZWN0czsKKyAgICBWZWN0b3I8UmVuZGVyQm94
KiwgMTY+IGRlYWRPYmplY3RzOwogCiAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25l
ZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICByID0gKml0OwpA
QCAtMjI1Miw3ICsyMjU0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25lZE9i
amVjdAogICAgICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzLT5yZW1vdmUoZGVhZE9iamVjdHMuYXQo
aSkpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJP
YmplY3QgKm8pCit2b2lkIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJC
b3gqIG8pCiB7CiAgICAgQVNTRVJUKG8tPmlzRmxvYXRpbmcoKSk7CiAKQEAgLTIyODYsNyArMjI4
OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFIKICAgICBtX2Zs
b2F0aW5nT2JqZWN0cy0+YXBwZW5kKG5ld09iaik7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnJl
bW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlck9iamVjdCAqbykKK3ZvaWQgUmVuZGVyQmxvY2s6OnJl
bW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHsKICAgICBpZiAobV9mbG9hdGluZ09i
amVjdHMpIHsKICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVj
dD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKQEAgLTIzMjEsNyArMjMyMyw3IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgbGFzdEZsb2F0ID0gbV9mbG9h
dGluZ09iamVjdHMtPmdldFByZXYoKTsKICAgICB9CiAKLSAgICBpbnQgeSA9IG1faGVpZ2h0Owor
ICAgIGludCB5ID0gaGVpZ2h0KCk7CiAgICAgCiAgICAgLy8gVGhlIGZsb2F0IGNhbm5vdCBzdGFy
dCBhYm92ZSB0aGUgeSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBwb3NpdGlvbmVkIGZsb2F0LgogICAg
IGlmIChsYXN0RmxvYXQpCkBAIC0yMzM2LDcgKzIzMzgsNyBAQCBib29sIFJlbmRlckJsb2NrOjpw
b3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIFJlbmRlck9iamVjdCogbyA9IGYtPm1fcmVuZGVyZXI7CisgICAgICAgIFJlbmRlckJv
eCogbyA9IGYtPm1fcmVuZGVyZXI7CiAgICAgICAgIGludCBfaGVpZ2h0ID0gby0+aGVpZ2h0KCkg
KyBvLT5tYXJnaW5Ub3AoKSArIG8tPm1hcmdpbkJvdHRvbSgpOwogCiAgICAgICAgIGludCBybyA9
IHJpZ2h0T2Zmc2V0KCk7IC8vIENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0LgpAQCAtMjM0
NSw3ICsyMzQ3LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAg
ICAgICBpZiAocm8gLSBsbyA8IGZ3aWR0aCkKICAgICAgICAgICAgIGZ3aWR0aCA9IHJvIC0gbG87
IC8vIE5ldmVyIGxvb2sgZm9yIG1vcmUgdGhhbiB3aGF0IHdpbGwgYmUgYXZhaWxhYmxlLgogICAg
ICAgICAKLSAgICAgICAgSW50UmVjdCBvbGRSZWN0KG8tPnhQb3MoKSwgby0+eVBvcygpICwgby0+
d2lkdGgoKSwgby0+aGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IG9sZFJlY3Qoby0+eCgpLCBv
LT55KCkgLCBvLT53aWR0aCgpLCBvLT5oZWlnaHQoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
by0+c3R5bGUoKS0+Y2xlYXIoKSAmIENMRUZUKQogICAgICAgICAgICAgeSA9IG1heChsZWZ0Qm90
dG9tKCksIHkpOwpAQCAtMjM2Miw3ICsyMzY0LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRp
b25OZXdGbG9hdHMoKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZnggPSBtYXgoMCwgZngp
OwogICAgICAgICAgICAgZi0+bV9sZWZ0ID0gZng7Ci0gICAgICAgICAgICBvLT5zZXRQb3MoZngg
KyBvLT5tYXJnaW5MZWZ0KCksIHkgKyBvLT5tYXJnaW5Ub3AoKSk7CisgICAgICAgICAgICBvLT5z
ZXRMb2NhdGlvbihmeCArIG8tPm1hcmdpbkxlZnQoKSwgeSArIG8tPm1hcmdpblRvcCgpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGludCBoZWlnaHRSZW1haW5pbmdMZWZ0ID0gMTsK
ICAgICAgICAgICAgIGludCBoZWlnaHRSZW1haW5pbmdSaWdodCA9IDE7CkBAIC0yMzcyLDcgKzIz
NzQsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgICAg
ICAgICAgZnggPSByaWdodFJlbE9mZnNldCh5LCBybywgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdS
aWdodCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmLT5tX2xlZnQgPSBmeCAtIGYtPm1f
d2lkdGg7Ci0gICAgICAgICAgICBvLT5zZXRQb3MoZnggLSBvLT5tYXJnaW5SaWdodCgpIC0gby0+
d2lkdGgoKSwgeSArIG8tPm1hcmdpblRvcCgpKTsKKyAgICAgICAgICAgIG8tPnNldExvY2F0aW9u
KGZ4IC0gby0+bWFyZ2luUmlnaHQoKSAtIG8tPndpZHRoKCksIHkgKyBvLT5tYXJnaW5Ub3AoKSk7
CiAgICAgICAgIH0KIAogICAgICAgICBmLT5tX3RvcCA9IHk7CkBAIC0yNDA1LDggKzI0MDcsOCBA
QCB2b2lkIFJlbmRlckJsb2NrOjpuZXdMaW5lKEVDbGVhciBjbGVhcikKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAobV9oZWlnaHQgPCBuZXdZKQot
ICAgICAgICBtX2hlaWdodCA9IG5ld1k7CisgICAgaWYgKGhlaWdodCgpIDwgbmV3WSkKKyAgICAg
ICAgc2V0SGVpZ2h0KG5ld1kpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGRQZXJjZW50SGVp
Z2h0RGVzY2VuZGFudChSZW5kZXJCb3gqIGRlc2NlbmRhbnQpCkBAIC0yNjAzLDcgKzI2MDUsNyBA
QCBpbnQgUmVuZGVyQmxvY2s6Omxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jCiAgICAgICAgIGJvdHRv
bSA9IG1heChib3R0b20sIG1fb3ZlcmZsb3dIZWlnaHQgKyByZWxhdGl2ZU9mZnNldCk7CiAgICAg
ICAgIAogICAgIGlmIChtX3Bvc2l0aW9uZWRPYmplY3RzKSB7Ci0gICAgICAgIFJlbmRlck9iamVj
dCogcjsKKyAgICAgICAgUmVuZGVyQm94KiByOwogICAgICAgICBJdGVyYXRvciBlbmQgPSBtX3Bv
c2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9z
aXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAg
ciA9ICppdDsKQEAgLTI2MTMsOCArMjYxNSw4IEBAIGludCBSZW5kZXJCbG9jazo6bG93ZXN0UG9z
aXRpb24oYm9vbCBpbmMKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdvcmsgZm9y
IG92ZXJmbG93IHNlY3Rpb25zIHRvby4KICAgICAgICAgICAgICAgICAvLyBJZiBhIHBvc2l0aW9u
ZWQgb2JqZWN0IGxpZXMgY29tcGxldGVseSB0byB0aGUgbGVmdCBvZiB0aGUgcm9vdCBpdCB3aWxs
IGJlIHVucmVhY2hhYmxlIHZpYSBzY3JvbGxpbmcuCiAgICAgICAgICAgICAgICAgLy8gVGhlcmVm
b3JlIHdlIHNob3VsZCBub3QgYWxsb3cgaXQgdG8gY29udHJpYnV0ZSB0byB0aGUgbG93ZXN0IHBv
c2l0aW9uLgotICAgICAgICAgICAgICAgIGlmICghaXNSZW5kZXJWaWV3KCkgfHwgci0+eFBvcygp
ICsgci0+d2lkdGgoKSA+IDAgfHwgci0+eFBvcygpICsgci0+cmlnaHRtb3N0UG9zaXRpb24oZmFs
c2UpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgbHAgPSByLT55UG9zKCkgKyByLT5s
b3dlc3RQb3NpdGlvbihmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1JlbmRlclZpZXco
KSB8fCByLT54KCkgKyByLT53aWR0aCgpID4gMCB8fCByLT54KCkgKyByLT5yaWdodG1vc3RQb3Np
dGlvbihmYWxzZSkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBscCA9IHItPnkoKSAr
IHItPmxvd2VzdFBvc2l0aW9uKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgYm90dG9tID0g
bWF4KGJvdHRvbSwgbHAgKyByZWxhdGl2ZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpAQCAtMjY2MCw3ICsyNjYyLDcgQEAgaW50IFJlbmRlckJsb2NrOjpyaWdodG1v
c3RQb3NpdGlvbihib29sIAogICAgICAgICByaWdodCA9IG1heChyaWdodCwgbV9vdmVyZmxvd1dp
ZHRoICsgcmVsYXRpdmVPZmZzZXQpOwogCiAgICAgaWYgKG1fcG9zaXRpb25lZE9iamVjdHMpIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiByOworICAgICAgICBSZW5kZXJCb3gqIHI7CiAgICAgICAg
IEl0ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwogICAgICAgICBmb3Ig
KEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKSA7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICAgICAgciA9ICppdDsKQEAgLTI2NzAsOCArMjY3Miw4IEBAIGludCBS
ZW5kZXJCbG9jazo6cmlnaHRtb3N0UG9zaXRpb24oYm9vbCAKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHdvcmsgZm9yIG92ZXJmbG93IHNlY3Rpb25zIHRvby4KICAgICAgICAgICAg
ICAgICAvLyBJZiBhIHBvc2l0aW9uZWQgb2JqZWN0IGxpZXMgY29tcGxldGVseSBhYm92ZSB0aGUg
cm9vdCBpdCB3aWxsIGJlIHVucmVhY2hhYmxlIHZpYSBzY3JvbGxpbmcuCiAgICAgICAgICAgICAg
ICAgLy8gVGhlcmVmb3JlIHdlIHNob3VsZCBub3QgYWxsb3cgaXQgdG8gY29udHJpYnV0ZSB0byB0
aGUgcmlnaHRtb3N0IHBvc2l0aW9uLgotICAgICAgICAgICAgICAgIGlmICghaXNSZW5kZXJWaWV3
KCkgfHwgci0+eVBvcygpICsgci0+aGVpZ2h0KCkgPiAwIHx8IHItPnlQb3MoKSArIHItPmxvd2Vz
dFBvc2l0aW9uKGZhbHNlKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJwID0gci0+
eFBvcygpICsgci0+cmlnaHRtb3N0UG9zaXRpb24oZmFsc2UpOworICAgICAgICAgICAgICAgIGlm
ICghaXNSZW5kZXJWaWV3KCkgfHwgci0+eSgpICsgci0+aGVpZ2h0KCkgPiAwIHx8IHItPnkoKSAr
IHItPmxvd2VzdFBvc2l0aW9uKGZhbHNlKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW50
IHJwID0gci0+eCgpICsgci0+cmlnaHRtb3N0UG9zaXRpb24oZmFsc2UpOwogICAgICAgICAgICAg
ICAgICAgICByaWdodCA9IG1heChyaWdodCwgcnAgKyByZWxhdGl2ZU9mZnNldCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjcyMiw3ICsyNzI0LDcgQEAgaW50IFJlbmRl
ckJsb2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICBsZWZ0ID0gbWluKGxlZnQs
IG1fb3ZlcmZsb3dMZWZ0ICsgcmVsYXRpdmVPZmZzZXQpOwogCiAgICAgaWYgKG1fcG9zaXRpb25l
ZE9iamVjdHMpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByOworICAgICAgICBSZW5kZXJCb3gq
IHI7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwog
ICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICByID0gKml0OwpAQCAtMjczMiw4ICsyNzM0
LDggQEAgaW50IFJlbmRlckJsb2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd29yayBmb3Igb3ZlcmZsb3cgc2VjdGlvbnMgdG9vLgog
ICAgICAgICAgICAgICAgIC8vIElmIGEgcG9zaXRpb25lZCBvYmplY3QgbGllcyBjb21wbGV0ZWx5
IGFib3ZlIHRoZSByb290IGl0IHdpbGwgYmUgdW5yZWFjaGFibGUgdmlhIHNjcm9sbGluZy4KICAg
ICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUgd2Ugc2hvdWxkIG5vdCBhbGxvdyBpdCB0byBjb250
cmlidXRlIHRvIHRoZSBsZWZ0bW9zdCBwb3NpdGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoIWlz
UmVuZGVyVmlldygpIHx8IHItPnlQb3MoKSArIHItPmhlaWdodCgpID4gMCB8fCByLT55UG9zKCkg
KyByLT5sb3dlc3RQb3NpdGlvbihmYWxzZSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlu
dCBscCA9IHItPnhQb3MoKSArIHItPmxlZnRtb3N0UG9zaXRpb24oZmFsc2UpOworICAgICAgICAg
ICAgICAgIGlmICghaXNSZW5kZXJWaWV3KCkgfHwgci0+eSgpICsgci0+aGVpZ2h0KCkgPiAwIHx8
IHItPnkoKSArIHItPmxvd2VzdFBvc2l0aW9uKGZhbHNlKSA+IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgaW50IGxwID0gci0+eCgpICsgci0+bGVmdG1vc3RQb3NpdGlvbihmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgbHAgKyByZWxhdGl2ZU9mZnNldCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjgzNywyNCArMjgzOSwyNCBAQCB2
b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cygpCiAgICAgLy8gb3V0IG9mIGZsb3cgKGxpa2Ug
ZmxvYXRpbmcvcG9zaXRpb25lZCBlbGVtZW50cyksIGFuZCB3ZSBhbHNvIHNraXAgb3ZlciBhbnkg
b2JqZWN0cyB0aGF0IG1heSBoYXZlIHNoaWZ0ZWQKICAgICAvLyB0byBhdm9pZCBmbG9hdHMuCiAg
ICAgYm9vbCBwYXJlbnRIYXNGbG9hdHMgPSBmYWxzZTsKLSAgICBSZW5kZXJPYmplY3QgKnByZXYg
PSBwcmV2aW91c1NpYmxpbmcoKTsKKyAgICBSZW5kZXJCb3gqIHByZXYgPSBwcmV2aW91c1NpYmxp
bmdCb3goKTsKICAgICB3aGlsZSAocHJldiAmJiAoIXByZXYtPmlzUmVuZGVyQmxvY2soKSB8fCBw
cmV2LT5hdm9pZHNGbG9hdHMoKSB8fCBwcmV2LT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpKSB7
CiAgICAgICAgIGlmIChwcmV2LT5pc0Zsb2F0aW5nKCkpCiAgICAgICAgICAgICBwYXJlbnRIYXNG
bG9hdHMgPSB0cnVlOwotICAgICAgICAgcHJldiA9IHByZXYtPnByZXZpb3VzU2libGluZygpOwor
ICAgICAgICAgcHJldiA9IHByZXYtPnByZXZpb3VzU2libGluZ0JveCgpOwogICAgIH0KIAogICAg
IC8vIEZpcnN0IGFkZCBpbiBmbG9hdHMgZnJvbSB0aGUgcGFyZW50LgotICAgIGludCBvZmZzZXQg
PSBtX3k7CisgICAgaW50IG9mZnNldCA9IG1fZnJhbWVSZWN0LnkoKTsKICAgICBpZiAocGFyZW50
SGFzRmxvYXRzKQogICAgICAgICBhZGRJbnRydWRpbmdGbG9hdHMoc3RhdGljX2Nhc3Q8UmVuZGVy
QmxvY2sgKj4ocGFyZW50KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50KCkt
PmJvcmRlckxlZnQoKSArIHBhcmVudCgpLT5wYWRkaW5nTGVmdCgpLCBvZmZzZXQpOwogCiAgICAg
aW50IHhvZmZzZXQgPSAwOwogICAgIGlmIChwcmV2KQotICAgICAgICBvZmZzZXQgLT0gcHJldi0+
eVBvcygpOworICAgICAgICBvZmZzZXQgLT0gcHJldi0+eSgpOwogICAgIGVsc2UgewotICAgICAg
ICBwcmV2ID0gcGFyZW50KCk7CisgICAgICAgIHByZXYgPSBwYXJlbnRCb3goKTsKICAgICAgICAg
eG9mZnNldCArPSBwcmV2LT5ib3JkZXJMZWZ0KCkgKyBwcmV2LT5wYWRkaW5nTGVmdCgpOwogICAg
IH0KIApAQCAtMjkxNiw3ICsyOTE4LDcgQEAgaW50IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2lu
Z0Zsb2F0cyhSZQogICAgIEludFJlY3QgZmxvYXRzT3ZlcmZsb3dSZWN0OwogICAgIERlcHJlY2F0
ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCpjaGlsZC0+bV9mbG9hdGluZ09i
amVjdHMpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3QqIHI7IChyID0gaXQuY3VycmVudCgpKTsg
KytpdCkgewotICAgICAgICBpbnQgYm90dG9tID0gY2hpbGQtPnlQb3MoKSArIHItPm1fYm90dG9t
OworICAgICAgICBpbnQgYm90dG9tID0gY2hpbGQtPnkoKSArIHItPm1fYm90dG9tOwogICAgICAg
ICBsb3dlc3RGbG9hdEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdEJvdHRvbSwgYm90dG9tKTsKIAog
ICAgICAgICBpZiAoYm90dG9tID4gaGVpZ2h0KCkpIHsKQEAgLTMwMjksNyArMzAzMSw3IEBAIGJv
b2wgUmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQoUmVuZGVyT2IKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JM
YXlvdXQoUmVuZGVyT2JqZWN0KiBmbG9hdFRvUmVtb3ZlKQordm9pZCBSZW5kZXJCbG9jazo6bWFy
a0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1v
dmUpCiB7CiAgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVlKTsKIApAQCAtMzA0Niw3ICszMDQ4
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aAogICAgIH0KIH0K
IAotaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlck9iamVjdCAqY2hpbGQpCitp
bnQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCkKIHsKICAgICAv
LyBUaGVyZSBpcyBubyBuZWVkIHRvIGNvbXB1dGUgY2xlYXJhbmNlIGlmIHdlIGhhdmUgbm8gZmxv
YXRzLgogICAgIGlmICghY29udGFpbnNGbG9hdHMoKSkKQEAgLTMwNzQsMTEgKzMwNzYsMTEgQEAg
aW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlck9iagogICAgIC8vIHRvIGZpdCkg
YW5kIG5vdCBhbGwgKHdlIHNob3VsZCBiZSB1c2luZyBuZXh0RmxvYXRCb3R0b21CZWxvdyBhbmQg
bG9vcGluZykuCiAgICAgLy8gRG8gbm90IGFsbG93IHRhYmxlcyB0byB3cmFwIGluIHF1aXJrcyBv
ciBldmVuIGluIGFsbW9zdCBzdHJpY3QgbW9kZSAKICAgICAvLyAoZWJheSBvbiB0aGUgUExULCBm
aW5hbmNlLnlhaG9vLmNvbSBpbiB0aGUgcmVhbCB3b3JsZCwgdmVyc2lvbnRyYWNrZXIuY29tIGZv
cmNlcyBldmVuIGFsbW9zdCBzdHJpY3QgbW9kZSBub3QgdG8gd29yaykKLSAgICBpbnQgcmVzdWx0
ID0gY2xlYXJTZXQgPyBtYXgoMCwgYm90dG9tIC0gY2hpbGQtPnlQb3MoKSkgOiAwOworICAgIGlu
dCByZXN1bHQgPSBjbGVhclNldCA/IG1heCgwLCBib3R0b20gLSBjaGlsZC0+eSgpKSA6IDA7CiAg
ICAgaWYgKCFyZXN1bHQgJiYgY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkLT5zdHlsZSgp
LT53aWR0aCgpLmlzRml4ZWQoKSAmJiAKLSAgICAgICAgY2hpbGQtPm1pblByZWZXaWR0aCgpID4g
bGluZVdpZHRoKGNoaWxkLT55UG9zKCkpICYmIGNoaWxkLT5taW5QcmVmV2lkdGgoKSA8PSBhdmFp
bGFibGVXaWR0aCgpICYmIAorICAgICAgICBjaGlsZC0+bWluUHJlZldpZHRoKCkgPiBsaW5lV2lk
dGgoY2hpbGQtPnkoKSkgJiYgY2hpbGQtPm1pblByZWZXaWR0aCgpIDw9IGF2YWlsYWJsZVdpZHRo
KCkgJiYgCiAgICAgICAgIGRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgpKSAgIAotICAgICAgICBy
ZXN1bHQgPSBtYXgoMCwgZmxvYXRCb3R0b20oKSAtIGNoaWxkLT55UG9zKCkpOworICAgICAgICBy
ZXN1bHQgPSBtYXgoMCwgZmxvYXRCb3R0b20oKSAtIGNoaWxkLT55KCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKQEAgLTMxMDQsOCArMzEwNiw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFQKIHsKICAgICBib29sIGlubGluZUZsb3cgPSBpc0lubGluZUZsb3co
KTsKIAotICAgIGludCB0eCA9IF90eCArIG1feDsKLSAgICBpbnQgdHkgPSBfdHkgKyBtX3kgKyBi
b3JkZXJUb3BFeHRyYSgpOworICAgIGludCB0eCA9IF90eCArIHgoKTsKKyAgICBpbnQgdHkgPSBf
dHkgKyB5KCk7CiAKICAgICBpZiAoIWlubGluZUZsb3cgJiYgIWlzUmVuZGVyVmlldygpKSB7CiAg
ICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgpAQCAtMzE1
MCw4ICszMTUyLDggQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAog
ICAgICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQo
Km1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAgICAgICAgIGZvciAoaXQudG9MYXN0KCk7IChvID0g
aXQuY3VycmVudCgpKTsgLS1pdCkgewogICAgICAgICAgICAgICAgIGlmIChvLT5tX3Nob3VsZFBh
aW50ICYmICFvLT5tX3JlbmRlcmVyLT5oYXNMYXllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGludCB4b2Zmc2V0ID0gc2Nyb2xsZWRYICsgby0+bV9sZWZ0ICsgby0+bV9yZW5kZXJlci0+bWFy
Z2luTGVmdCgpIC0gby0+bV9yZW5kZXJlci0+eFBvcygpOwotICAgICAgICAgICAgICAgICAgICBp
bnQgeW9mZnNldCA9ICBzY3JvbGxlZFkgKyBvLT5tX3RvcCArIG8tPm1fcmVuZGVyZXItPm1hcmdp
blRvcCgpIC0gby0+bV9yZW5kZXJlci0+eVBvcygpOworICAgICAgICAgICAgICAgICAgICBpbnQg
eG9mZnNldCA9IHNjcm9sbGVkWCArIG8tPm1fbGVmdCArIG8tPm1fcmVuZGVyZXItPm1hcmdpbkxl
ZnQoKSAtIG8tPm1fcmVuZGVyZXItPngoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHlvZmZz
ZXQgPSAgc2Nyb2xsZWRZICsgby0+bV90b3AgKyBvLT5tX3JlbmRlcmVyLT5tYXJnaW5Ub3AoKSAt
IG8tPm1fcmVuZGVyZXItPnkoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG8tPm1fcmVuZGVy
ZXItPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBJbnRQb2ludChfeCwgX3kpLCB4b2Zmc2V0LCB5
b2Zmc2V0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIEludFBvaW50KF94IC0geG9mZnNldCwgX3kgLSB5b2Zmc2V0KSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxNjMsOCArMzE2NSw4IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQKIAogICAgIC8vIE5vdyBoaXQgdGVzdCBv
dXIgYmFja2dyb3VuZAogICAgIGlmICghaW5saW5lRmxvdyAmJiAoaGl0VGVzdEFjdGlvbiA9PSBI
aXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxv
Y2tCYWNrZ3JvdW5kKSkgewotICAgICAgICBpbnQgdG9wRXh0cmEgPSBib3JkZXJUb3BFeHRyYSgp
OwotICAgICAgICBJbnRSZWN0IGJvdW5kc1JlY3QodHgsIHR5IC0gdG9wRXh0cmEsIG1fd2lkdGgs
IG1faGVpZ2h0ICsgdG9wRXh0cmEgKyBib3JkZXJCb3R0b21FeHRyYSgpKTsKKyAgICAgICAgaW50
IHRvcEV4dHJhID0gaW50cmluc2ljUGFkZGluZ1RvcCgpOworICAgICAgICBJbnRSZWN0IGJvdW5k
c1JlY3QodHgsIHR5IC0gdG9wRXh0cmEsIHdpZHRoKCksIGhlaWdodCgpICsgdG9wRXh0cmEgKyBp
bnRyaW5zaWNQYWRkaW5nQm90dG9tKCkpOwogICAgICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGlu
ZygpICYmIGJvdW5kc1JlY3QuY29udGFpbnMoX3gsIF95KSkgewogICAgICAgICAgICAgdXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0gdHgsIF95IC0gdHkgKyB0b3BFeHRy
YSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjc0LDcgKzMyNzYsNyBAQCBWaXNp
YmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yCiAgICAgICAgIHJldHVybiBSZW5k
ZXJGbG93Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKHgsIHkpOyAKIAogICAgIGludCB0b3AgPSBi
b3JkZXJUb3AoKTsKLSAgICBpbnQgYm90dG9tID0gdG9wICsgYm9yZGVyVG9wRXh0cmEoKSArIHBh
ZGRpbmdUb3AoKSArIGNvbnRlbnRIZWlnaHQoKSArIHBhZGRpbmdCb3R0b20oKSArIGJvcmRlckJv
dHRvbUV4dHJhKCk7CisgICAgaW50IGJvdHRvbSA9IHRvcCArIGludHJpbnNpY1BhZGRpbmdUb3Ao
KSArIHBhZGRpbmdUb3AoKSArIGNvbnRlbnRIZWlnaHQoKSArIHBhZGRpbmdCb3R0b20oKSArIGlu
dHJpbnNpY1BhZGRpbmdCb3R0b20oKTsKIAogICAgIGludCBsZWZ0ID0gYm9yZGVyTGVmdCgpOwog
ICAgIGludCByaWdodCA9IGxlZnQgKyBwYWRkaW5nTGVmdCgpICsgY29udGVudFdpZHRoKCkgKyBw
YWRkaW5nUmlnaHQoKTsKQEAgLTMzMDAsOCArMzMwMiw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5k
ZXJCbG9jazo6cG9zaXRpb25Gb3IKIAogICAgICAgICBpZiAoeSA8IHRvcCB8fCAoaXNFZGl0YWJs
ZVJvb3QgJiYgKHkgPCBib3R0b20gJiYgeCA8IGxlZnQpKSkgewogICAgICAgICAgICAgaWYgKCFp
c0VkaXRhYmxlUm9vdCkKLSAgICAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjID0gZmly
c3RDaGlsZCgpKSB7IC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBtYWtlIGFueSBzZW5zZS4g
IFRoaXMgY2hpbGQgY291bGQgYmUgYW4gaW5saW5lIG9yIGEgcG9zaXRpb25lZCBlbGVtZW50IG9y
IGEgZmxvYXQgb3IgYSBjb21wYWN0LCBldGMuCi0gICAgICAgICAgICAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBwID0gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhjb250ZW50c1ggLSBjLT54UG9z
KCksIGNvbnRlbnRzWSAtIGMtPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgaWYgKFJlbmRlckJv
eCogYyA9IGZpcnN0Q2hpbGRCb3goKSkgeyAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgbWFr
ZSBhbnkgc2Vuc2UuICBUaGlzIGNoaWxkIGNvdWxkIGJlIGFuIGlubGluZSBvciBhIHBvc2l0aW9u
ZWQgZWxlbWVudCBvciBhIGZsb2F0IG9yIGEgY29tcGFjdCwgZXRjLgorICAgICAgICAgICAgICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IGMtPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoY29udGVu
dHNYIC0gYy0+eCgpLCBjb250ZW50c1kgLSBjLT55KCkpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAocC5pc05vdE51bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTMzMTYsOCArMzMxOCw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5k
ZXJCbG9jazo6cG9zaXRpb25Gb3IKIAogICAgICAgICBpZiAoeSA+PSBib3R0b20gfHwgKGlzRWRp
dGFibGVSb290ICYmICh5ID49IHRvcCAmJiB4ID49IHJpZ2h0KSkpIHsKICAgICAgICAgICAgIGlm
ICghaXNFZGl0YWJsZVJvb3QpCi0gICAgICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogYyA9
IGxhc3RDaGlsZCgpKSB7IC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBtYWtlIGFueSBzZW5z
ZS4gIFRoaXMgY2hpbGQgY291bGQgYmUgYW4gaW5saW5lIG9yIGEgcG9zaXRpb25lZCBlbGVtZW50
IG9yIGEgZmxvYXQgb3IgYSBjb21wYWN0LCBlY3QuCi0gICAgICAgICAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBwID0gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhjb250ZW50c1ggLSBjLT54
UG9zKCksIGNvbnRlbnRzWSAtIGMtPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgaWYgKFJlbmRl
ckJveCogYyA9IGxhc3RDaGlsZEJveCgpKSB7IC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBt
YWtlIGFueSBzZW5zZS4gIFRoaXMgY2hpbGQgY291bGQgYmUgYW4gaW5saW5lIG9yIGEgcG9zaXRp
b25lZCBlbGVtZW50IG9yIGEgZmxvYXQgb3IgYSBjb21wYWN0LCBlY3QuCisgICAgICAgICAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhjb250
ZW50c1ggLSBjLT54KCksIGNvbnRlbnRzWSAtIGMtPnkoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChwLmlzTm90TnVsbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMzM2NCwyMCArMzM2NiwyMCBAQCBWaXNpYmxlUG9zaXRpb24g
UmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yCiAgICAgfQogICAgIAogICAgIC8vIFNlZSBpZiBhbnkg
Y2hpbGQgYmxvY2tzIGV4aXN0IGF0IHRoaXMgeSBjb29yZGluYXRlLgotICAgIGlmIChmaXJzdENo
aWxkKCkgJiYgY29udGVudHNZIDwgZmlyc3RDaGlsZCgpLT55UG9zKCkpCisgICAgaWYgKGZpcnN0
Q2hpbGRCb3goKSAmJiBjb250ZW50c1kgPCBmaXJzdENoaWxkQm94KCktPnkoKSkKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbihuLCAwLCBET1dOU1RSRUFNKTsKLSAgICBmb3IgKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBmaXJzdENoaWxkKCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJl
bmRlcmVyLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIHJlbmRlcmVyID0g
Zmlyc3RDaGlsZEJveCgpOyByZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5kZXJlci0+bmV4dFNpYmxp
bmdCb3goKSkgewogICAgICAgICBpZiAocmVuZGVyZXItPmhlaWdodCgpID09IDAgfHwgcmVuZGVy
ZXItPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHJlbmRlcmVyLT5pc0Zsb2F0
aW5nT3JQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVuZGVy
T2JqZWN0KiBuZXh0ID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCk7CisgICAgICAgIFJlbmRlckJv
eCogbmV4dCA9IHJlbmRlcmVyLT5uZXh0U2libGluZ0JveCgpOwogICAgICAgICB3aGlsZSAobmV4
dCAmJiBuZXh0LT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICBuZXh0ID0g
bmV4dC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5leHQgPSBuZXh0LT5uZXh0U2libGlu
Z0JveCgpOwogICAgICAgICBpZiAobmV4dCkgCi0gICAgICAgICAgICBib3R0b20gPSBuZXh0LT55
UG9zKCk7CisgICAgICAgICAgICBib3R0b20gPSBuZXh0LT55KCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGJvdHRvbSA9IHRvcCArIHNjcm9sbEhlaWdodCgpOwotICAgICAgICBpZiAoY29u
dGVudHNZID49IHJlbmRlcmVyLT55UG9zKCkgJiYgY29udGVudHNZIDwgYm90dG9tKQotICAgICAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKGNvbnRlbnRzWCAt
IHJlbmRlcmVyLT54UG9zKCksIGNvbnRlbnRzWSAtIHJlbmRlcmVyLT55UG9zKCkpOworICAgICAg
ICBpZiAoY29udGVudHNZID49IHJlbmRlcmVyLT55KCkgJiYgY29udGVudHNZIDwgYm90dG9tKQor
ICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKGNvbnRl
bnRzWCAtIHJlbmRlcmVyLT54KCksIGNvbnRlbnRzWSAtIHJlbmRlcmVyLT55KCkpOwogICAgIH0K
ICAgICAKICAgICByZXR1cm4gUmVuZGVyRmxvdzo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4LCB5
KTsKQEAgLTMzODUsNyArMzM4Nyw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9jazo6cG9z
aXRpb25Gb3IKIAogdm9pZCBSZW5kZXJCbG9jazo6b2Zmc2V0Rm9yQ29udGVudHMoaW50JiB0eCwg
aW50JiB0eSkgY29uc3QKIHsKLSAgICB0eSAtPSBib3JkZXJUb3BFeHRyYSgpOworICAgIHR5IC09
IGludHJpbnNpY1BhZGRpbmdUb3AoKTsKICAgICAKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkp
CiAgICAgICAgIG1fbGF5ZXItPmFkZFNjcm9sbGVkQ29udGVudE9mZnNldCh0eCwgdHkpOwpAQCAt
MzU5NSwxNCArMzU5NywxNCBAQCBpbnQgUmVuZGVyQmxvY2s6OmxheW91dENvbHVtbnMoaW50IGVu
ZE9mCiAgICAgICAgICAgICBjb2xDb3VudCsrOwogICAgIH0KIAotICAgIG1fb3ZlcmZsb3dXaWR0
aCA9IG1heChtX3dpZHRoLCBjdXJyWCAtIGNvbEdhcCk7CisgICAgbV9vdmVyZmxvd1dpZHRoID0g
bWF4KHdpZHRoKCksIGN1cnJYIC0gY29sR2FwKTsKICAgICBtX292ZXJmbG93TGVmdCA9IG1pbigw
LCBjdXJyWCArIGRlc2lyZWRDb2x1bW5XaWR0aCArIGNvbEdhcCk7CiAKICAgICBtX292ZXJmbG93
SGVpZ2h0ID0gbWF4Q29sQm90dG9tOwogICAgIGludCB0b0FkZCA9IGJvcmRlckJvdHRvbSgpICsg
cGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwogICAgICAgICAK
ICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCkKLSAgICAgICAgbV9oZWlnaHQgPSBtX292
ZXJmbG93SGVpZ2h0ICsgdG9BZGQ7CisgICAgICAgIHNldEhlaWdodChtX292ZXJmbG93SGVpZ2h0
ICsgdG9BZGQpOwogCiAgICAgdi0+c2V0UHJpbnRSZWN0KEludFJlY3QoKSk7CiAgICAgdi0+c2V0
VHJ1bmNhdGVkQXQoMCk7CkBAIC00MjUxLDExICs0MjUzLDExIEBAIGludCBSZW5kZXJCbG9jazo6
Z2V0QmFzZWxpbmVPZkZpcnN0TGluZUIKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgp
OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBmb3IgKFJlbmRl
ckJveCogY3VyciA9IGZpcnN0Q2hpbGRCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJs
aW5nQm94KCkpIHsKICAgICAgICAgICAgIGlmICghY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRpb25l
ZCgpKSB7CiAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IGN1cnItPmdldEJhc2VsaW5lT2ZG
aXJzdExpbmVCb3goKTsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IC0xKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3Vyci0+eVBvcygpICsgcmVzdWx0OyAvLyBUcmFuc2xhdGUg
dG8gb3VyIGNvb3JkaW5hdGUgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJy
LT55KCkgKyByZXN1bHQ7IC8vIFRyYW5zbGF0ZSB0byBvdXIgY29vcmRpbmF0ZSBzcGFjZS4KICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQyNzcsMTIgKzQyNzksMTIgQEAgaW50
IFJlbmRlckJsb2NrOjpnZXRCYXNlbGluZU9mTGFzdExpbmVCbwogICAgIH0KICAgICBlbHNlIHsK
ICAgICAgICAgYm9vbCBoYXZlTm9ybWFsRmxvd0NoaWxkID0gZmFsc2U7Ci0gICAgICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjdXJyID0gbGFzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2
aW91c1NpYmxpbmcoKSkgeworICAgICAgICBmb3IgKFJlbmRlckJveCogY3VyciA9IGxhc3RDaGls
ZEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKICAgICAg
ICAgICAgIGlmICghY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAg
ICAgICAgaGF2ZU5vcm1hbEZsb3dDaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaW50IHJl
c3VsdCA9IGN1cnItPmdldEJhc2VsaW5lT2ZMYXN0TGluZUJveCgpOwogICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyLT55UG9z
KCkgKyByZXN1bHQ7IC8vIFRyYW5zbGF0ZSB0byBvdXIgY29vcmRpbmF0ZSBzcGFjZS4KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnItPnkoKSArIHJlc3VsdDsgLy8gVHJhbnNsYXRlIHRv
IG91ciBjb29yZGluYXRlIHNwYWNlLgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IGlmICghaGF2ZU5vcm1hbEZsb3dDaGlsZCAmJiBoYXNMaW5lSWZFbXB0eSgpKQpAQCAtNDUwMCwx
OCArNDUwMiwxOCBAQCBpbnQgZ2V0SGVpZ2h0Rm9yTGluZUNvdW50KFJlbmRlckJsb2NrKiBiCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyA9IDA7Ci0gICAgICAgICAgICBm
b3IgKFJlbmRlck9iamVjdCogb2JqID0gYmxvY2stPmZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBv
YmotPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCogbm9ybWFsRmxvd0No
aWxkV2l0aG91dExpbmVzID0gMDsKKyAgICAgICAgICAgIGZvciAoUmVuZGVyQm94KiBvYmogPSBi
bG9jay0+Zmlyc3RDaGlsZEJveCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmdCb3goKSkg
ewogICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGVja0xpbmVzKG9iaikpIHsKICAgICAgICAg
ICAgICAgICAgICAgaW50IHJlc3VsdCA9IGdldEhlaWdodEZvckxpbmVDb3VudChzdGF0aWNfY2Fz
dDxSZW5kZXJCbG9jayo+KG9iaiksIGwsIGZhbHNlLCBjb3VudCk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0ICsgb2JqLT55UG9zKCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay0+Ym9yZGVyQm90dG9t
KCkgKyBibG9jay0+cGFkZGluZ0JvdHRvbSgpKSA6IDApOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdCArIG9iai0+eSgpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxvY2stPmJv
cmRlckJvdHRvbSgpICsgYmxvY2stPnBhZGRpbmdCb3R0b20oKSkgOiAwKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIW9iai0+aXNGbG9hdGluZ09yUG9zaXRp
b25lZCgpICYmICFvYmotPmlzQ29tcGFjdCgpICYmICFvYmotPmlzUnVuSW4oKSkKICAgICAgICAg
ICAgICAgICAgICAgbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzID0gb2JqOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyAmJiBsID09
IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcy0+
eVBvcygpICsgbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzLT5oZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzLT55KCkgKyBub3JtYWxG
bG93Q2hpbGRXaXRob3V0TGluZXMtPmhlaWdodCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApA
QCAtNDU1OSwxNCArNDU2MSwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJG
aXQoaW50CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBmb3IgKFJlbmRlck9iamVjdCogb2JqID0gZmlyc3RDaGlsZCgpOyBvYmo7IG9iaiA9IG9i
ai0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgZm9yIChSZW5kZXJCb3gqIG9iaiA9IGZp
cnN0Q2hpbGRCb3goKTsgb2JqOyBvYmogPSBvYmotPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIW9iai0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChvYmotPmlzQmxvY2tGbG93KCkgJiYgIW9iai0+aGFzT3ZlcmZsb3dD
bGlwKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+
KG9iaiktPmFkanVzdEZvckJvcmRlckZpdCh4ICsgb2JqLT54UG9zKCksIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ob2JqKS0+
YWRqdXN0Rm9yQm9yZGVyRml0KHggKyBvYmotPngoKSwgbGVmdCwgcmlnaHQpOwogICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChvYmotPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxF
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgYSByZXBsYWNlZCBlbGVtZW50
IG9yIHNvbWUga2luZCBvZiBub24tYmxvY2stZmxvdyBvYmplY3QuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHggKyBvYmotPnhQb3MoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByaWdodCA9IG1heChyaWdodCwgeCArIG9iai0+eFBvcygpICsgb2JqLT53aWR0
aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgeCArIG9iai0+
eCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCB4ICsgb2Jq
LT54KCkgKyBvYmotPndpZHRoKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDU3OCw3ICs0NTgwLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KGludAogICAgICAgICAgICAgZm9yICg7IChyID0gaXQu
Y3VycmVudCgpKTsgKytpdCkgewogICAgICAgICAgICAgICAgIC8vIE9ubHkgZXhhbWluZSB0aGUg
b2JqZWN0IGlmIG91ciBtX3Nob3VsZFBhaW50IGZsYWcgaXMgc2V0LgogICAgICAgICAgICAgICAg
IGlmIChyLT5tX3Nob3VsZFBhaW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBmbG9hdExl
ZnQgPSByLT5tX2xlZnQgLSByLT5tX3JlbmRlcmVyLT54UG9zKCkgKyByLT5tX3JlbmRlcmVyLT5t
YXJnaW5MZWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIGludCBmbG9hdExlZnQgPSByLT5tX2xl
ZnQgLSByLT5tX3JlbmRlcmVyLT54KCkgKyByLT5tX3JlbmRlcmVyLT5tYXJnaW5MZWZ0KCk7CiAg
ICAgICAgICAgICAgICAgICAgIGludCBmbG9hdFJpZ2h0ID0gZmxvYXRMZWZ0ICsgci0+bV9yZW5k
ZXJlci0+d2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCBmbG9h
dExlZnQpOwogICAgICAgICAgICAgICAgICAgICByaWdodCA9IG1heChyaWdodCwgZmxvYXRSaWdo
dCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDggKzExMiw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50
VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20pOwogCiAgICAgdm9pZCBsYXlvdXRQb3NpdGlvbmVkT2Jq
ZWN0cyhib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwotICAgIHZvaWQgaW5zZXJ0UG9zaXRpb25lZE9i
amVjdChSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHJlbW92ZVBvc2l0aW9uZWRPYmplY3QoUmVu
ZGVyT2JqZWN0Kik7CisgICAgdm9pZCBpbnNlcnRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCop
OworICAgIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoUmVuZGVyQmxvY2sqKTsKIAogICAgIHZv
aWQgYWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoUmVuZGVyQm94Kik7CkBAIC0xMjgsMTMgKzEy
OCwxMyBAQCBwdWJsaWM6CiAKICAgICAvLyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZvbGxv
d2luZyBmdW5jdGlvbnMgaXMgaW4gYmlkaS5jcHAKICAgICBzdHJ1Y3QgRmxvYXRXaXRoUmVjdCB7
Ci0gICAgICAgIEZsb2F0V2l0aFJlY3QoUmVuZGVyT2JqZWN0KiBmKQorICAgICAgICBGbG9hdFdp
dGhSZWN0KFJlbmRlckJveCogZikKICAgICAgICAgICAgIDogb2JqZWN0KGYpCi0gICAgICAgICAg
ICAsIHJlY3QoSW50UmVjdChmLT54UG9zKCkgLSBmLT5tYXJnaW5MZWZ0KCksIGYtPnlQb3MoKSAt
IGYtPm1hcmdpblRvcCgpLCBmLT53aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICsgZi0+bWFyZ2lu
UmlnaHQoKSwgZi0+aGVpZ2h0KCkgKyBmLT5tYXJnaW5Ub3AoKSArIGYtPm1hcmdpbkJvdHRvbSgp
KSkKKyAgICAgICAgICAgICwgcmVjdChJbnRSZWN0KGYtPngoKSAtIGYtPm1hcmdpbkxlZnQoKSwg
Zi0+eSgpIC0gZi0+bWFyZ2luVG9wKCksIGYtPndpZHRoKCkgKyBmLT5tYXJnaW5MZWZ0KCkgKyBm
LT5tYXJnaW5SaWdodCgpLCBmLT5oZWlnaHQoKSArIGYtPm1hcmdpblRvcCgpICsgZi0+bWFyZ2lu
Qm90dG9tKCkpKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBSZW5kZXJPYmplY3Qq
IG9iamVjdDsKKyAgICAgICAgUmVuZGVyQm94KiBvYmplY3Q7CiAgICAgICAgIEludFJlY3QgcmVj
dDsKICAgICB9OwogCkBAIC0xNjksMTUgKzE2OSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWlu
dFNlbGVjdGlvbihQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdm9pZCBwYWludENh
cmV0KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBDYXJldFR5cGUpOwogCi0gICAgdm9pZCBp
bnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHJlbW92ZUZsb2F0
aW5nT2JqZWN0KFJlbmRlck9iamVjdCopOworICAgIHZvaWQgaW5zZXJ0RmxvYXRpbmdPYmplY3Qo
UmVuZGVyQm94Kik7CisgICAgdm9pZCByZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqKTsK
IAogICAgIC8vIENhbGxlZCBmcm9tIGxpbmVXaWR0aCwgdG8gcG9zaXRpb24gdGhlIGZsb2F0cyBh
ZGRlZCBpbiB0aGUgbGFzdCBsaW5lLgogICAgIC8vIFJldHVybnMgdHVyZSBpZiBhbmQgb25seSBp
ZiBpdCBoYXMgcG9zaXRpb25lZCBhbnkgZmxvYXRzLgogICAgIGJvb2wgcG9zaXRpb25OZXdGbG9h
dHMoKTsKICAgICB2b2lkIGNsZWFyRmxvYXRzKCk7Ci0gICAgaW50IGdldENsZWFyRGVsdGEoUmVu
ZGVyT2JqZWN0KiBjaGlsZCk7Ci0gICAgdmlydHVhbCB2b2lkIG1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyT2JqZWN0KiBmbG9hdFRvUmVtb3ZlID0gMCk7CisgICAg
aW50IGdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCk7CisgICAgdmlydHVhbCB2b2lkIG1h
cmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVt
b3ZlID0gMCk7CiAgICAgdm9pZCBtYXJrUG9zaXRpb25lZE9iamVjdHNGb3JMYXlvdXQoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBjb250YWluc0Zsb2F0cygpIHsgcmV0dXJuIG1fZmxvYXRpbmdPYmpl
Y3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpOyB9CkBAIC0xODUsNyArMTg1LDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBib29sIGhhc092ZXJoYW5naW5nRmxvYXRzKCkgeyByZXR1cm4gIWhhc0NvbHVt
bnMoKSAmJiBmbG9hdEJvdHRvbSgpID4gbV9oZWlnaHQ7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFz
T3ZlcmhhbmdpbmdGbG9hdHMoKSB7IHJldHVybiAhaGFzQ29sdW1ucygpICYmIGZsb2F0Qm90dG9t
KCkgPiBoZWlnaHQoKTsgfQogICAgIHZvaWQgYWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2Nr
KiBwcmV2LCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQpOwogICAgIGludCBhZGRPdmVyaGFuZ2lu
Z0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgYm9v
bCBtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzKTsKIApAQCAtMzUyLDcgKzM1Miw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgICAgICBUeXBlIHR5cGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPiht
X3R5cGUpOyB9CiAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOworICAgICAgICBS
ZW5kZXJCb3gqIG1fcmVuZGVyZXI7CiAgICAgICAgIGludCBtX3RvcDsKICAgICAgICAgaW50IG1f
Ym90dG9tOwogICAgICAgICBpbnQgbV9sZWZ0OwpAQCAtMzY1LDE4ICszNjUsMTggQEAgcHJvdGVj
dGVkOgogICAgIC8vIFRoZSBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgc3RydWN0cyBh
cmUgdXNlZCBieSBsYXlvdXRCbG9ja0NoaWxkcmVuLgogICAgIGNsYXNzIENvbXBhY3RJbmZvIHsK
ICAgICAgICAgLy8gQSBjb21wYWN0IGNoaWxkIHRoYXQgbmVlZHMgdG8gYmUgY29sbGFwc2VkIGlu
dG8gdGhlIG1hcmdpbiBvZiB0aGUgZm9sbG93aW5nIGJsb2NrLgotICAgICAgICBSZW5kZXJPYmpl
Y3QqIG1fY29tcGFjdDsKKyAgICAgICAgUmVuZGVyQm94KiBtX2NvbXBhY3Q7CiAKICAgICAgICAg
Ly8gVGhlIGJsb2NrIHdpdGggdGhlIG9wZW4gbWFyZ2luIHRoYXQgdGhlIGNvbXBhY3QgY2hpbGQg
aXMgZ29pbmcgdG8gcGxhY2UgaXRzZWxmIHdpdGhpbi4KICAgICAgICAgUmVuZGVyT2JqZWN0KiBt
X2Jsb2NrOwogCiAgICAgcHVibGljOgotICAgICAgICBSZW5kZXJPYmplY3QqIGNvbXBhY3QoKSBj
b25zdCB7IHJldHVybiBtX2NvbXBhY3Q7IH0KKyAgICAgICAgUmVuZGVyQm94KiBjb21wYWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb21wYWN0OyB9CiAgICAgICAgIFJlbmRlck9iamVjdCogYmxvY2so
KSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CiAgICAgICAgIGJvb2wgbWF0Y2hlcyhSZW5kZXJP
YmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBtX2NvbXBhY3QgJiYgbV9ibG9jayA9PSBjaGls
ZDsgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKSB7IHNldCgwLCAwKTsgfQotICAgICAgICB2b2lk
IHNldChSZW5kZXJPYmplY3QqIGMsIFJlbmRlck9iamVjdCogYikgeyBtX2NvbXBhY3QgPSBjOyBt
X2Jsb2NrID0gYjsgfQorICAgICAgICB2b2lkIHNldChSZW5kZXJCb3gqIGMsIFJlbmRlck9iamVj
dCogYikgeyBtX2NvbXBhY3QgPSBjOyBtX2Jsb2NrID0gYjsgfQogCiAgICAgICAgIENvbXBhY3RJ
bmZvKCkgeyBjbGVhcigpOyB9CiAgICAgfTsKQEAgLTQ0OSwyNCArNDQ5LDI0IEBAIHByb3RlY3Rl
ZDoKIAogICAgIHZvaWQgYWRqdXN0UG9zaXRpb25lZEJsb2NrKFJlbmRlck9iamVjdCogY2hpbGQs
IGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICB2b2lkIGFkanVzdEZsb2F0aW5nQmxvY2soY29uc3Qg
TWFyZ2luSW5mbyYpOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlU3BlY2lhbENoaWxkKFJlbmRl
ck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mLCBDb21wYWN0SW5mbyYsIGJvb2wmIGhh
bmRsZWQpOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlRmxvYXRpbmdDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiwgYm9vbCYgaGFuZGxlZCk7Ci0gICAgUmVuZGVy
T2JqZWN0KiBoYW5kbGVQb3NpdGlvbmVkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgY29uc3Qg
TWFyZ2luSW5mbyYsIGJvb2wmIGhhbmRsZWQpOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlQ29t
cGFjdENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIENvbXBhY3RJbmZvJiwgYm9vbCYgaGFuZGxl
ZCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBoYW5kbGVSdW5JbkNoaWxkKFJlbmRlck9iamVjdCogY2hp
bGQsIGJvb2wmIGhhbmRsZWQpOwotICAgIHZvaWQgY29sbGFwc2VNYXJnaW5zKFJlbmRlck9iamVj
dCogY2hpbGQsIE1hcmdpbkluZm8mLCBpbnQgeVBvc0VzdGltYXRlKTsKLSAgICB2b2lkIGNsZWFy
RmxvYXRzSWZOZWVkZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgTWFyZ2luSW5mbyYsIGludCBvbGRU
b3BQb3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJnaW4pOwotICAgIHZvaWQgaW5zZXJ0Q29tcGFj
dElmTmVlZGVkKFJlbmRlck9iamVjdCogY2hpbGQsIENvbXBhY3RJbmZvJik7CisgICAgUmVuZGVy
Qm94KiBoYW5kbGVTcGVjaWFsQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5m
byYsIENvbXBhY3RJbmZvJiwgYm9vbCYgaGFuZGxlZCk7CisgICAgUmVuZGVyQm94KiBoYW5kbGVG
bG9hdGluZ0NoaWxkKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mLCBib29sJiBo
YW5kbGVkKTsKKyAgICBSZW5kZXJCb3gqIGhhbmRsZVBvc2l0aW9uZWRDaGlsZChSZW5kZXJCb3gq
IGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiwgYm9vbCYgaGFuZGxlZCk7CisgICAgUmVuZGVyQm94
KiBoYW5kbGVDb21wYWN0Q2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgQ29tcGFjdEluZm8mLCBib29s
JiBoYW5kbGVkKTsKKyAgICBSZW5kZXJCb3gqIGhhbmRsZVJ1bkluQ2hpbGQoUmVuZGVyQm94KiBj
aGlsZCwgYm9vbCYgaGFuZGxlZCk7CisgICAgdm9pZCBjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94
KiBjaGlsZCwgTWFyZ2luSW5mbyYsIGludCB5UG9zRXN0aW1hdGUpOworICAgIHZvaWQgY2xlYXJG
bG9hdHNJZk5lZWRlZChSZW5kZXJCb3gqIGNoaWxkLCBNYXJnaW5JbmZvJiwgaW50IG9sZFRvcFBv
c01hcmdpbiwgaW50IG9sZFRvcE5lZ01hcmdpbik7CisgICAgdm9pZCBpbnNlcnRDb21wYWN0SWZO
ZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgQ29tcGFjdEluZm8mKTsKICAgICBpbnQgZXN0aW1hdGVW
ZXJ0aWNhbFBvc2l0aW9uKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mKTsK
LSAgICB2b2lkIGRldGVybWluZUhvcml6b250YWxQb3NpdGlvbihSZW5kZXJPYmplY3QqIGNoaWxk
KTsKKyAgICB2b2lkIGRldGVybWluZUhvcml6b250YWxQb3NpdGlvbihSZW5kZXJCb3gqIGNoaWxk
KTsKICAgICB2b2lkIGhhbmRsZUJvdHRvbU9mQmxvY2soaW50IHRvcCwgaW50IGJvdHRvbSwgTWFy
Z2luSW5mbyYpOwogICAgIHZvaWQgc2V0Q29sbGFwc2VkQm90dG9tTWFyZ2luKGNvbnN0IE1hcmdp
bkluZm8mKTsKICAgICAvLyBFbmQgaGVscGVyIGZ1bmN0aW9ucyBhbmQgc3RydWN0cyB1c2VkIGJ5
IGxheW91dEJsb2NrQ2hpbGRyZW4uCiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBMaXN0SGFzaFNl
dDxSZW5kZXJPYmplY3QqPjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CisgICAgdHlwZWRlZiBM
aXN0SGFzaFNldDxSZW5kZXJCb3gqPjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgRGVw
cmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+KiBtX2Zsb2F0aW5nT2JqZWN0czsKLSAgICBM
aXN0SGFzaFNldDxSZW5kZXJPYmplY3QqPiogbV9wb3NpdGlvbmVkT2JqZWN0czsKKyAgICBMaXN0
SGFzaFNldDxSZW5kZXJCb3gqPiogbV9wb3NpdGlvbmVkT2JqZWN0czsKICAgICAgICAgIAogICAg
IC8vIEFsbG9jYXRlZCBvbmx5IHdoZW4gc29tZSBvZiB0aGVzZSBmaWVsZHMgaGF2ZSBub24tZGVm
YXVsdCB2YWx1ZXMKICAgICBzdHJ1Y3QgTWF4TWFyZ2luIHsKSW5kZXg6IHJlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lv
biA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgi
CiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJJbmxpbmUu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIK
ICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTYwLDEwICs2MSw2IEBAIGJvb2wgUmVu
ZGVyQm94OjpzX2hhZE92ZXJmbG93Q2xpcCA9IGZhbHMKIAogUmVuZGVyQm94OjpSZW5kZXJCb3go
Tm9kZSogbm9kZSkKICAgICA6IFJlbmRlck9iamVjdChub2RlKQotICAgICwgbV93aWR0aCgwKQot
ICAgICwgbV9oZWlnaHQoMCkKLSAgICAsIG1feCgwKQotICAgICwgbV95KDApCiAgICAgLCBtX21h
cmdpbkxlZnQoMCkKICAgICAsIG1fbWFyZ2luUmlnaHQoMCkKICAgICAsIG1fbWFyZ2luVG9wKDAp
CkBAIC0yNTQsMjIgKzI1MSwxMiBAQCB2b2lkIFJlbmRlckJveDo6c2V0T3ZlcnJpZGVTaXplKGlu
dCBzKQogCiBpbnQgUmVuZGVyQm94OjpvdmVycmlkZVdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gaGFzT3ZlcnJpZGVTaXplKCkgPyBvdmVycmlkZVNpemUoKSA6IG1fd2lkdGg7CisgICAgcmV0
dXJuIGhhc092ZXJyaWRlU2l6ZSgpID8gb3ZlcnJpZGVTaXplKCkgOiB3aWR0aCgpOwogfQogCiBp
bnQgUmVuZGVyQm94OjpvdmVycmlkZUhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092
ZXJyaWRlU2l6ZSgpID8gb3ZlcnJpZGVTaXplKCkgOiBtX2hlaWdodDsKLX0KLQotdm9pZCBSZW5k
ZXJCb3g6OnNldFBvcyhpbnQgeFBvcywgaW50IHlQb3MpCi17Ci0gICAgLy8gT3B0aW1pemUgZm9y
IHRoZSBjYXNlIHdoZXJlIHdlIGRvbid0IG1vdmUgYXQgYWxsLgotICAgIGlmICh4UG9zID09IG1f
eCAmJiB5UG9zID09IG1feSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV94ID0geFBvczsKLSAg
ICBtX3kgPSB5UG9zOworICAgIHJldHVybiBoYXNPdmVycmlkZVNpemUoKSA/IG92ZXJyaWRlU2l6
ZSgpIDogaGVpZ2h0KCk7CiB9CiAKIGludCBSZW5kZXJCb3g6OmNhbGNCb3JkZXJCb3hXaWR0aChp
bnQgd2lkdGgpIGNvbnN0CkBAIC0zMDMsMTAgKzI5MCwxMCBAQCBpbnQgUmVuZGVyQm94OjpjYWxj
Q29udGVudEJveEhlaWdodChpbnQgCiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlckJv
eDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBh
Y3Rpb24pCitib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgdHggKz0gbV94OwotICAg
IHR5ICs9IG1feTsKKyAgICB0eCArPSB4KCk7CisgICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwog
CiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQg
PSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7
CkBAIC0zMTQsMTYgKzMwMSwxNiBAQCBib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzCiAgICAgICAgIC8vIGF0IHRoZSBtb21lbnQgKGEgZGVtb3RlZCBpbmxpbmUgPGZvcm0+
IGZvciBleGFtcGxlKS4gSWYgd2UgZXZlciBpbXBsZW1lbnQgYQogICAgICAgICAvLyB0YWJsZS1z
cGVjaWZpYyBoaXQtdGVzdCBtZXRob2QgKHdoaWNoIHdlIHNob3VsZCBkbyBmb3IgcGVyZm9ybWFu
Y2UgcmVhc29ucyBhbnl3YXkpLAogICAgICAgICAvLyB0aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBj
aGVjay4KLSAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiAhY2hpbGQtPmlzSW5saW5l
RmxvdygpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0
eSwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIElu
dFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CisgICAgICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkg
JiYgIWNoaWxkLT5pc0lubGluZUZsb3coKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCB4UG9zLCB5UG9zLCB0eCwgdHksIGFjdGlvbikpIHsKKyAgICAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0eSkpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBDaGVj
ayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdl
IGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBp
cyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAgaWYgKHZpc2li
bGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgSW50UmVj
dCh0eCwgdHksIG1fd2lkdGgsIG1faGVpZ2h0KS5jb250YWlucyh4LCB5KSkgewotICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKKyAg
ICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3Vu
ZCAmJiBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpLmNvbnRhaW5zKHhQb3MsIHlQ
b3MpKSB7CisgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4UG9z
IC0gdHgsIHlQb3MgLSB0eSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTMz
NCw4ICszMjEsOCBAQCBib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzCiAK
IHZvaWQgUmVuZGVyQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQg
dHkpCiB7Ci0gICAgdHggKz0gbV94OwotICAgIHR5ICs9IG1feTsKKyAgICB0eCArPSB4KCk7Cisg
ICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwogCiAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlv
bi4gSnVzdCBwYXNzIHBhaW50IHRocm91Z2ggdG8gdGhlIGNoaWxkcmVuCiAgICAgUGFpbnRJbmZv
IGNoaWxkSW5mbyhwYWludEluZm8pOwpAQCAtNDAxLDggKzM4OCw4IEBAIHZvaWQgUmVuZGVyQm94
OjpwYWludEJveERlY29yYXRpb25zKFBhaW4KICAgICB9CiAKICAgICBpbnQgdyA9IHdpZHRoKCk7
Ci0gICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21F
eHRyYSgpOwotICAgIHR5IC09IGJvcmRlclRvcEV4dHJhKCk7CisgICAgaW50IGggPSBoZWlnaHQo
KSArIGludHJpbnNpY1BhZGRpbmdUb3AoKSArIGludHJpbnNpY1BhZGRpbmdCb3R0b20oKTsKKyAg
ICB0eSAtPSBpbnRyaW5zaWNQYWRkaW5nVG9wKCk7CiAKICAgICAvLyBib3JkZXItZml0IGNhbiBh
ZGp1c3Qgd2hlcmUgd2UgcGFpbnQgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZC4gIElmIHNldCwg
d2Ugc251Z2x5IGZpdCBvdXIgbGluZSBib3ggZGVzY2VuZGFudHMuICAoVGhlIGlDaGF0CiAgICAg
Ly8gYmFsbG9vbiBsYXlvdXQgaXMgYW4gZXhhbXBsZSBvZiB0aGlzKS4KQEAgLTQ0Myw4ICs0MzAs
OCBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRNYXNrKFBhaW50SW5mbyYgcGFpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGludCB3ID0gd2lkdGgoKTsKLSAgICBpbnQgaCA9IGhlaWdodCgpICsgYm9y
ZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7Ci0gICAgdHkgLT0gYm9yZGVyVG9w
RXh0cmEoKTsKKyAgICBpbnQgaCA9IGhlaWdodCgpICsgaW50cmluc2ljUGFkZGluZ1RvcCgpICsg
aW50cmluc2ljUGFkZGluZ0JvdHRvbSgpOworICAgIHR5IC09IGludHJpbnNpY1BhZGRpbmdUb3Ao
KTsKIAogICAgIC8vIGJvcmRlci1maXQgY2FuIGFkanVzdCB3aGVyZSB3ZSBwYWludCBvdXIgYm9y
ZGVyIGFuZCBiYWNrZ3JvdW5kLiAgSWYgc2V0LCB3ZSBzbnVnbHkgZml0IG91ciBsaW5lIGJveCBk
ZXNjZW5kYW50cy4gIChUaGUgaUNoYXQKICAgICAvLyBiYWxsb29uIGxheW91dCBpcyBhbiBleGFt
cGxlIG9mIHRoaXMpLgpAQCAtNDg5LDcgKzQ3Niw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludE1h
c2tJbWFnZXMoY29uc3QgUGEKIAogSW50UmVjdCBSZW5kZXJCb3g6Om1hc2tDbGlwUmVjdCgpCiB7
Ci0gICAgSW50UmVjdCBiYm94ID0gYm9yZGVyQm94KCk7CisgICAgSW50UmVjdCBiYm94ID0gYm9y
ZGVyQm94UmVjdCgpOwogICAgIGlmIChzdHlsZSgpLT5tYXNrQm94SW1hZ2UoKS5pbWFnZSgpKQog
ICAgICAgICByZXR1cm4gYmJveDsKICAgICAKQEAgLTYwNiw3ICs1OTMsNyBAQCBib29sIFJlbmRl
ckJveDo6cmVwYWludExheWVyUmVjdHNGb3JJbWFnCiAgICAgICAgICAgICAgICAgICAgICAgICBt
YXgobGF5ZXJSZW5kZXJlci0+aGVpZ2h0KCkgKyBsYXllclJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAr
IGxheWVyUmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpICsgbGF5ZXJSZW5kZXJlci0+Ym9yZGVyVG9w
KCkgKyBsYXllclJlbmRlcmVyLT5ib3JkZXJCb3R0b20oKSwgcmgpKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBsYXllclJlbmRlcmVyID0gdGhpczsKLSAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyZXJSZWN0ID0gYm9yZGVyQm94KCk7CisgICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVyUmVjdCA9IGJvcmRlckJveFJlY3QoKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKQEAgLTg4NywxMCArODc0LDEwIEBAIHZvaWQgUmVuZGVyQm94
OjpwYWludEN1c3RvbUhpZ2hsaWdodChpbnQKICAgICBSb290SW5saW5lQm94KiByID0gYm94V3Jh
cCA/IGJveFdyYXAtPnJvb3QoKSA6IDA7CiAgICAgaWYgKHIpIHsKICAgICAgICAgRmxvYXRSZWN0
IHJvb3RSZWN0KHR4ICsgci0+eFBvcygpLCB0eSArIHItPnNlbGVjdGlvblRvcCgpLCByLT53aWR0
aCgpLCByLT5zZWxlY3Rpb25IZWlnaHQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBpbWFnZVJlY3Qo
dHggKyBtX3gsIHJvb3RSZWN0LnkoKSwgd2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpOworICAg
ICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KHR4ICsgeCgpLCByb290UmVjdC55KCksIHdpZHRoKCks
IHJvb3RSZWN0LmhlaWdodCgpKTsKICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5w
YWludEN1c3RvbUhpZ2hsaWdodChub2RlKCksIHR5cGUsIGltYWdlUmVjdCwgcm9vdFJlY3QsIGJl
aGluZFRleHQsIGZhbHNlKTsKICAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFJlY3QgaW1hZ2VS
ZWN0KHR4ICsgbV94LCB0eSArIG1feSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBGbG9h
dFJlY3QgaW1hZ2VSZWN0KHR4ICsgeCgpLCB0eSArIG1fZnJhbWVSZWN0LnkoKSwgd2lkdGgoKSwg
aGVpZ2h0KCkpOwogICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBhaW50Q3VzdG9t
SGlnaGxpZ2h0KG5vZGUoKSwgdHlwZSwgaW1hZ2VSZWN0LCBpbWFnZVJlY3QsIGJlaGluZFRleHQs
IGZhbHNlKTsKICAgICB9CiB9CkBAIC05MDcsOCArODk0LDggQEAgSW50UmVjdCBSZW5kZXJCb3g6
OmdldE92ZXJmbG93Q2xpcFJlY3QoaQogCiAgICAgaW50IGNsaXBYID0gdHggKyBiTGVmdDsKICAg
ICBpbnQgY2xpcFkgPSB0eSArIGJUb3A7Ci0gICAgaW50IGNsaXBXaWR0aCA9IG1fd2lkdGggLSBi
TGVmdCAtIGJvcmRlclJpZ2h0KCk7Ci0gICAgaW50IGNsaXBIZWlnaHQgPSBtX2hlaWdodCAtIGJU
b3AgLSBib3JkZXJCb3R0b20oKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRy
YSgpOworICAgIGludCBjbGlwV2lkdGggPSB3aWR0aCgpIC0gYkxlZnQgLSBib3JkZXJSaWdodCgp
OworICAgIGludCBjbGlwSGVpZ2h0ID0gaGVpZ2h0KCkgLSBiVG9wIC0gYm9yZGVyQm90dG9tKCkg
KyBpbnRyaW5zaWNQYWRkaW5nVG9wKCkgKyBpbnRyaW5zaWNQYWRkaW5nQm90dG9tKCk7CiAKICAg
ICAvLyBTdWJ0cmFjdCBvdXQgc2Nyb2xsYmFycyBpZiB3ZSBoYXZlIHRoZW0uCiAgICAgaWYgKG1f
bGF5ZXIpIHsKQEAgLTkyMywyNiArOTEwLDI2IEBAIEludFJlY3QgUmVuZGVyQm94OjpnZXRDbGlw
UmVjdChpbnQgdHgsIGkKIHsKICAgICBpbnQgY2xpcFggPSB0eDsKICAgICBpbnQgY2xpcFkgPSB0
eTsKLSAgICBpbnQgY2xpcFdpZHRoID0gbV93aWR0aDsKLSAgICBpbnQgY2xpcEhlaWdodCA9IG1f
aGVpZ2h0OworICAgIGludCBjbGlwV2lkdGggPSB3aWR0aCgpOworICAgIGludCBjbGlwSGVpZ2h0
ID0gaGVpZ2h0KCk7CiAKICAgICBpZiAoIXN0eWxlKCktPmNsaXBMZWZ0KCkuaXNBdXRvKCkpIHsK
LSAgICAgICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwTGVmdCgpLmNhbGNWYWx1ZShtX3dpZHRoKTsK
KyAgICAgICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwTGVmdCgpLmNhbGNWYWx1ZSh3aWR0aCgpKTsK
ICAgICAgICAgY2xpcFggKz0gYzsKICAgICAgICAgY2xpcFdpZHRoIC09IGM7CiAgICAgfQogCiAg
ICAgaWYgKCFzdHlsZSgpLT5jbGlwUmlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgY2xpcFdpZHRo
IC09IG1fd2lkdGggLSBzdHlsZSgpLT5jbGlwUmlnaHQoKS5jYWxjVmFsdWUobV93aWR0aCk7Cisg
ICAgICAgIGNsaXBXaWR0aCAtPSB3aWR0aCgpIC0gc3R5bGUoKS0+Y2xpcFJpZ2h0KCkuY2FsY1Zh
bHVlKHdpZHRoKCkpOwogCiAgICAgaWYgKCFzdHlsZSgpLT5jbGlwVG9wKCkuaXNBdXRvKCkpIHsK
LSAgICAgICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwVG9wKCkuY2FsY1ZhbHVlKG1faGVpZ2h0KTsK
KyAgICAgICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwVG9wKCkuY2FsY1ZhbHVlKGhlaWdodCgpKTsK
ICAgICAgICAgY2xpcFkgKz0gYzsKICAgICAgICAgY2xpcEhlaWdodCAtPSBjOwogICAgIH0KIAog
ICAgIGlmICghc3R5bGUoKS0+Y2xpcEJvdHRvbSgpLmlzQXV0bygpKQotICAgICAgICBjbGlwSGVp
Z2h0IC09IG1faGVpZ2h0IC0gc3R5bGUoKS0+Y2xpcEJvdHRvbSgpLmNhbGNWYWx1ZShtX2hlaWdo
dCk7CisgICAgICAgIGNsaXBIZWlnaHQgLT0gaGVpZ2h0KCkgLSBzdHlsZSgpLT5jbGlwQm90dG9t
KCkuY2FsY1ZhbHVlKGhlaWdodCgpKTsKIAogICAgIHJldHVybiBJbnRSZWN0KGNsaXBYLCBjbGlw
WSwgY2xpcFdpZHRoLCBjbGlwSGVpZ2h0KTsKIH0KQEAgLTk1Myw3ICs5NDAsNyBAQCBpbnQgUmVu
ZGVyQm94Ojpjb250YWluaW5nQmxvY2tXaWR0aCgpIGNvCiAgICAgaWYgKCFjYikKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgaWYgKHNocmlua1RvQXZvaWRGbG9hdHMoKSkKLSAgICAgICAgcmV0dXJu
IGNiLT5saW5lV2lkdGgobV95KTsKKyAgICAgICAgcmV0dXJuIGNiLT5saW5lV2lkdGgobV9mcmFt
ZVJlY3QueSgpKTsKICAgICByZXR1cm4gY2ItPmF2YWlsYWJsZVdpZHRoKCk7CiB9CiAKQEAgLTEw
MDAsNyArOTg3LDcgQEAgRmxvYXRQb2ludCBSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZShGbAog
ICAgICAgICBpZiAodi0+bGF5b3V0U3RhdGVFbmFibGVkKCkpIHsKICAgICAgICAgICAgIExheW91
dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHYtPmxheW91dFN0YXRlKCk7CiAgICAgICAgICAgICBJbnRT
aXplIG9mZnNldCA9IGxheW91dFN0YXRlLT5tX29mZnNldDsKLSAgICAgICAgICAgIG9mZnNldC5l
eHBhbmQobV94LCBtX3kpOworICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZCh4KCksIG1fZnJhbWVS
ZWN0LnkoKSk7CiAgICAgICAgICAgICBsb2NhbFBvaW50ICs9IG9mZnNldDsKICAgICAgICAgICAg
IGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbV9sYXllcikK
ICAgICAgICAgICAgICAgICBsb2NhbFBvaW50ICs9IG1fbGF5ZXItPnJlbGF0aXZlUG9zaXRpb25P
ZmZzZXQoKTsKQEAgLTEwNDMsNyArMTAzMCw3IEBAIEZsb2F0UG9pbnQgUmVuZGVyQm94OjphYnNv
bHV0ZVRvTG9jYWwoRmwKIAogICAgICAgICAvLyBUYWtlIGludG8gYWNjb3VudCBzcGFjZSBhYm92
ZSBhIHZlcnRpY2FsbHkgYWxpZ25lZCB0YWJsZSBjZWxsCiAgICAgICAgIC8vIChzZWUgbG9jYWxU
b0Fic29sdXRlRm9yQ29udGVudCgpKQotICAgICAgICBsb2NhbFBvaW50Lm1vdmUoMC4wZiwgLXN0
YXRpY19jYXN0PGZsb2F0Pihib3JkZXJUb3BFeHRyYSgpKSk7CisgICAgICAgIGxvY2FsUG9pbnQu
bW92ZSgwLjBmLCAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KGludHJpbnNpY1BhZGRpbmdUb3AoKSkpOwog
CiAgICAgICAgIGxvY2FsUG9pbnQgLT0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvKTsKIApAQCAtMTA3
Myw3ICsxMDYwLDcgQEAgRmxvYXRRdWFkIFJlbmRlckJveDo6bG9jYWxUb0Fic29sdXRlUXVhZAog
CiAgICAgICAgIC8vIFRha2UgaW50byBhY2NvdW50IHNwYWNlIGFib3ZlIGEgdmVydGljYWxseSBh
bGlnbmVkIHRhYmxlIGNlbGwKICAgICAgICAgLy8gKHNlZSBsb2NhbFRvQWJzb2x1dGVGb3JDb250
ZW50KCkpCi0gICAgICAgIHF1YWQubW92ZSgwLjBmLCBzdGF0aWNfY2FzdDxmbG9hdD4oby0+Ym9y
ZGVyVG9wRXh0cmEoKSkpOworICAgICAgICBxdWFkLm1vdmUoMC4wZiwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG8tPmludHJpbnNpY1BhZGRpbmdUb3AoKSkpOwogCiAgICAgICAgIHJldHVybiBvLT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKHF1YWQsIGZpeGVkKTsKICAgICB9CkBAIC0xMDkzLDExICsxMDgwLDEx
IEBAIEludFNpemUgUmVuZGVyQm94OjpvZmZzZXRGcm9tQ29udGFpbmVyKFIKICAgICAgICAgUmVu
ZGVyQmxvY2sqIGNiOwogICAgICAgICBpZiAoby0+aXNCbG9ja0Zsb3coKSAmJiBzdHlsZSgpLT5w
b3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24gJiYgc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBG
aXhlZFBvc2l0aW9uCiAgICAgICAgICAgICAgICAgJiYgKGNiID0gc3RhdGljX2Nhc3Q8UmVuZGVy
QmxvY2sqPihvKSktPmhhc0NvbHVtbnMoKSkgewotICAgICAgICAgICAgSW50UmVjdCByZWN0KG1f
eCwgbV95LCAxLCAxKTsKKyAgICAgICAgICAgIEludFJlY3QgcmVjdCh4KCksIG1fZnJhbWVSZWN0
LnkoKSwgMSwgMSk7CiAgICAgICAgICAgICBjYi0+YWRqdXN0UmVjdEZvckNvbHVtbnMocmVjdCk7
CiAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHJlY3QueCgpLCByZWN0LnkoKSk7CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZChtX3gsIG1feSk7CisgICAgICAgICAg
ICBvZmZzZXQuZXhwYW5kKHgoKSwgbV9mcmFtZVJlY3QueSgpKTsKICAgICB9CiAKICAgICBpZiAo
by0+aGFzT3ZlcmZsb3dDbGlwKCkpCkBAIC0xMTQ0LDggKzExMzEsNyBAQCB2b2lkIFJlbmRlckJv
eDo6cG9zaXRpb24oSW5saW5lQm94KiBib3gpCiAgICAgICAgIGJveC0+cmVtb3ZlKCk7CiAgICAg
ICAgIGJveC0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKICAgICB9IGVsc2UgaWYgKGlzUmVwbGFj
ZWQoKSkgewotICAgICAgICBtX3ggPSBib3gtPnhQb3MoKTsKLSAgICAgICAgbV95ID0gYm94LT55
UG9zKCk7CisgICAgICAgIHNldExvY2F0aW9uKGJveC0+eFBvcygpLCBib3gtPnlQb3MoKSk7CiAg
ICAgICAgIG1faW5saW5lQm94V3JhcHBlciA9IGJveDsKICAgICB9CiB9CkBAIC0xMTk1LDcgKzEx
ODEsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlCiAgICAgICAg
ICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIG1fbGF5
ZXIpCiAgICAgICAgICAgICAgICAgcmVjdC5tb3ZlKG1fbGF5ZXItPnJlbGF0aXZlUG9zaXRpb25P
ZmZzZXQoKSk7CiAKLSAgICAgICAgICAgIHJlY3QubW92ZShtX3gsIG1feSk7CisgICAgICAgICAg
ICByZWN0Lm1vdmUoeCgpLCBtX2ZyYW1lUmVjdC55KCkpOwogICAgICAgICAgICAgcmVjdC5tb3Zl
KGxheW91dFN0YXRlLT5tX29mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUtPm1f
Y2xpcHBlZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChsYXlvdXRTdGF0ZS0+bV9j
bGlwUmVjdCk7CkBAIC0xMjExLDcgKzExOTcsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUFi
c29sdXRlUmVwYWludFJlCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFBvaW50IHRvcExlZnQg
PSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgdG9wTGVmdC5tb3ZlKG1feCwgbV95KTsKKyAgICB0b3BM
ZWZ0Lm1vdmUoeCgpLCBtX2ZyYW1lUmVjdC55KCkpOwogCiAgICAgaWYgKHN0eWxlKCktPnBvc2l0
aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikKICAgICAgICAgZml4ZWQgPSB0cnVlOwpAQCAtMTIzMyw3
ICsxMjE5LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZQogICAg
ICAgICByZWN0ID0gbV9sYXllci0+dHJhbnNmb3JtKCktPm1hcFJlY3QocmVjdCk7CiAgICAgICAg
IC8vIEZJWE1FOiB0aGlzIGNsb2JiZXJzIHRvcExlZnQgYWRqdXN0bWVudCBkb25lIGZvciBtdWx0
aWNvbCBhYm92ZQogICAgICAgICB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOwotICAgICAgICB0
b3BMZWZ0Lm1vdmUobV94LCBtX3kpOworICAgICAgICB0b3BMZWZ0Lm1vdmUoeCgpLCBtX2ZyYW1l
UmVjdC55KCkpOwogICAgIH0KIAogICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IEFic29s
dXRlUG9zaXRpb24pCkBAIC0xMjY3LDI0ICsxMjUzLDE3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlQWJzb2x1dGVSZXBhaW50UmUKIAogdm9pZCBSZW5kZXJCb3g6OnJlcGFpbnREdXJpbmdMYXlv
dXRJZk1vdmVkKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaW50IG5ld1ggPSBtX3g7Ci0g
ICAgaW50IG5ld1kgPSBtX3k7Ci0gICAgaW50IG5ld1dpZHRoID0gbV93aWR0aDsKLSAgICBpbnQg
bmV3SGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgaW50IG5ld1ggPSB4KCk7CisgICAgaW50IG5ld1kg
PSBtX2ZyYW1lUmVjdC55KCk7CisgICAgaW50IG5ld1dpZHRoID0gd2lkdGgoKTsKKyAgICBpbnQg
bmV3SGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgaWYgKHJlY3QueCgpICE9IG5ld1ggfHwgcmVjdC55
KCkgIT0gbmV3WSkgewogICAgICAgICAvLyBUaGUgY2hpbGQgbW92ZWQuICBJbnZhbGlkYXRlIHRo
ZSBvYmplY3QncyBvbGQgYW5kIG5ldyBwb3NpdGlvbnMuICBXZSBoYXZlIHRvIGRvIHRoaXMKICAg
ICAgICAgLy8gc2luY2UgdGhlIG9iamVjdCBtYXkgbm90IGhhdmUgZ290dGVuIGEgbGF5b3V0Lgot
ICAgICAgICBtX3ggPSByZWN0LngoKTsKLSAgICAgICAgbV95ID0gcmVjdC55KCk7Ci0gICAgICAg
IG1fd2lkdGggPSByZWN0LndpZHRoKCk7Ci0gICAgICAgIG1faGVpZ2h0ID0gcmVjdC5oZWlnaHQo
KTsKKyAgICAgICAgbV9mcmFtZVJlY3QgPSByZWN0OwogICAgICAgICByZXBhaW50KCk7CiAgICAg
ICAgIHJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyh0cnVlKTsKLQotICAgICAgICBtX3ggPSBuZXdY
OwotICAgICAgICBtX3kgPSBuZXdZOwotICAgICAgICBtX3dpZHRoID0gbmV3V2lkdGg7Ci0gICAg
ICAgIG1faGVpZ2h0ID0gbmV3SGVpZ2h0OworICAgICAgICBtX2ZyYW1lUmVjdCA9IEludFJlY3Qo
bmV3WCwgbmV3WSwgbmV3V2lkdGgsIG5ld0hlaWdodCk7CiAgICAgICAgIHJlcGFpbnQoKTsKICAg
ICAgICAgcmVwYWludE92ZXJoYW5naW5nRmxvYXRzKHRydWUpOwogICAgIH0KQEAgLTEzMjksNyAr
MTMwOCw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjV2lkdGgoKQogICAgIC8vIHdpZHRoLiAgVXNl
IHRoZSB3aWR0aCBmcm9tIHRoZSBzdHlsZSBjb250ZXh0LgogICAgIGlmIChoYXNPdmVycmlkZVNp
emUoKSAmJiAgcGFyZW50KCktPnN0eWxlKCktPmJveE9yaWVudCgpID09IEhPUklaT05UQUwKICAg
ICAgICAgICAgICYmIHBhcmVudCgpLT5pc0ZsZXhpYmxlQm94KCkgJiYgcGFyZW50KCktPmlzRmxl
eGluZ0NoaWxkcmVuKCkpIHsKLSAgICAgICAgbV93aWR0aCA9IG92ZXJyaWRlU2l6ZSgpOworICAg
ICAgICBzZXRXaWR0aChvdmVycmlkZVNpemUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTEzMzcsNyArMTMxNiw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjV2lkdGgoKQogICAgIGJv
b2wgc3RyZXRjaGluZyA9IChwYXJlbnQoKS0+c3R5bGUoKS0+Ym94QWxpZ24oKSA9PSBCU1RSRVRD
SCk7CiAgICAgYm9vbCB0cmVhdEFzUmVwbGFjZWQgPSBzaG91bGRDYWxjdWxhdGVTaXplQXNSZXBs
YWNlZCgpICYmICghaW5WZXJ0aWNhbEJveCB8fCAhc3RyZXRjaGluZyk7CiAKLSAgICBMZW5ndGgg
d2lkdGggPSAodHJlYXRBc1JlcGxhY2VkKSA/IExlbmd0aChjYWxjUmVwbGFjZWRXaWR0aCgpLCBG
aXhlZCkgOiBzdHlsZSgpLT53aWR0aCgpOworICAgIExlbmd0aCB3ID0gKHRyZWF0QXNSZXBsYWNl
ZCkgPyBMZW5ndGgoY2FsY1JlcGxhY2VkV2lkdGgoKSwgRml4ZWQpIDogc3R5bGUoKS0+d2lkdGgo
KTsKIAogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIGludCBj
b250YWluZXJXaWR0aCA9IG1heCgwLCBjb250YWluaW5nQmxvY2tXaWR0aCgpKTsKQEAgLTEzNTAs
NDIgKzEzMjksNDIgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNXaWR0aCgpCiAgICAgICAgIG1fbWFy
Z2luTGVmdCA9IG1hcmdpbkxlZnQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldpZHRoKTsKICAgICAg
ICAgbV9tYXJnaW5SaWdodCA9IG1hcmdpblJpZ2h0LmNhbGNNaW5WYWx1ZShjb250YWluZXJXaWR0
aCk7CiAgICAgICAgIGlmICh0cmVhdEFzUmVwbGFjZWQpCi0gICAgICAgICAgICBtX3dpZHRoID0g
bWF4KHdpZHRoLnZhbHVlKCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGlu
Z0xlZnQoKSArIHBhZGRpbmdSaWdodCgpLCBtaW5QcmVmV2lkdGgoKSk7CisgICAgICAgICAgICBz
ZXRXaWR0aChtYXgody52YWx1ZSgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBh
ZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSwgbWluUHJlZldpZHRoKCkpKTsKIAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gV2lkdGggY2FsY3VsYXRpb25zCiAgICAgaWYgKHRy
ZWF0QXNSZXBsYWNlZCkKLSAgICAgICAgbV93aWR0aCA9IHdpZHRoLnZhbHVlKCkgKyBib3JkZXJM
ZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpOwor
ICAgICAgICBzZXRXaWR0aCh3LnZhbHVlKCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgp
ICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpKTsKICAgICBlbHNlIHsKICAgICAgICAg
Ly8gQ2FsY3VsYXRlIFdpZHRoCi0gICAgICAgIG1fd2lkdGggPSBjYWxjV2lkdGhVc2luZyhXaWR0
aCwgY29udGFpbmVyV2lkdGgpOworICAgICAgICBzZXRXaWR0aChjYWxjV2lkdGhVc2luZyhXaWR0
aCwgY29udGFpbmVyV2lkdGgpKTsKIAogICAgICAgICAvLyBDYWxjdWxhdGUgTWF4V2lkdGgKICAg
ICAgICAgaWYgKCFzdHlsZSgpLT5tYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAg
ICAgIGludCBtYXhXID0gY2FsY1dpZHRoVXNpbmcoTWF4V2lkdGgsIGNvbnRhaW5lcldpZHRoKTsK
LSAgICAgICAgICAgIGlmIChtX3dpZHRoID4gbWF4VykgewotICAgICAgICAgICAgICAgIG1fd2lk
dGggPSBtYXhXOwotICAgICAgICAgICAgICAgIHdpZHRoID0gc3R5bGUoKS0+bWF4V2lkdGgoKTsK
KyAgICAgICAgICAgIGlmICh3aWR0aCgpID4gbWF4VykgeworICAgICAgICAgICAgICAgIHNldFdp
ZHRoKG1heFcpOworICAgICAgICAgICAgICAgIHcgPSBzdHlsZSgpLT5tYXhXaWR0aCgpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2FsY3VsYXRlIE1pbldpZHRoCiAg
ICAgICAgIGludCBtaW5XID0gY2FsY1dpZHRoVXNpbmcoTWluV2lkdGgsIGNvbnRhaW5lcldpZHRo
KTsKLSAgICAgICAgaWYgKG1fd2lkdGggPCBtaW5XKSB7Ci0gICAgICAgICAgICBtX3dpZHRoID0g
bWluVzsKLSAgICAgICAgICAgIHdpZHRoID0gc3R5bGUoKS0+bWluV2lkdGgoKTsKKyAgICAgICAg
aWYgKHdpZHRoKCkgPCBtaW5XKSB7CisgICAgICAgICAgICBzZXRXaWR0aChtaW5XKTsKKyAgICAg
ICAgICAgIHcgPSBzdHlsZSgpLT5taW5XaWR0aCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSkgewotICAgICAgICBtX3dpZHRoID0g
bWF4KG1fd2lkdGgsIG1pblByZWZXaWR0aCgpKTsKLSAgICAgICAgd2lkdGggPSBMZW5ndGgobV93
aWR0aCwgRml4ZWQpOworICAgICAgICBzZXRXaWR0aChtYXgod2lkdGgoKSwgbWluUHJlZldpZHRo
KCkpKTsKKyAgICAgICAgdyA9IExlbmd0aCh3aWR0aCgpLCBGaXhlZCk7CiAgICAgfQogCiAgICAg
Ly8gTWFyZ2luIGNhbGN1bGF0aW9ucwotICAgIGlmICh3aWR0aC5pc0F1dG8oKSkgeworICAgIGlm
ICh3LmlzQXV0bygpKSB7CiAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQuY2FsY01p
blZhbHVlKGNvbnRhaW5lcldpZHRoKTsKICAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1hcmdpblJp
Z2h0LmNhbGNNaW5WYWx1ZShjb250YWluZXJXaWR0aCk7CiAgICAgfSBlbHNlIHsKQEAgLTEzOTQs
MTggKzEzNzMsMTggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNXaWR0aCgpCiAgICAgICAgIGNhbGNI
b3Jpem9udGFsTWFyZ2lucyhtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCwgY29udGFpbmVyV2lkdGgp
OwogICAgIH0KIAotICAgIGlmIChjb250YWluZXJXaWR0aCAmJiBjb250YWluZXJXaWR0aCAhPSAo
bV93aWR0aCArIG1fbWFyZ2luTGVmdCArIG1fbWFyZ2luUmlnaHQpCisgICAgaWYgKGNvbnRhaW5l
cldpZHRoICYmIGNvbnRhaW5lcldpZHRoICE9ICh3aWR0aCgpICsgbV9tYXJnaW5MZWZ0ICsgbV9t
YXJnaW5SaWdodCkKICAgICAgICAgICAgICYmICFpc0Zsb2F0aW5nKCkgJiYgIWlzSW5saW5lKCkg
JiYgIWNiLT5pc0ZsZXhpYmxlQm94KCkpIHsKICAgICAgICAgaWYgKGNiLT5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gY29udGFpbmVyV2lk
dGggLSBtX3dpZHRoIC0gbV9tYXJnaW5MZWZ0OworICAgICAgICAgICAgbV9tYXJnaW5SaWdodCA9
IGNvbnRhaW5lcldpZHRoIC0gd2lkdGgoKSAtIG1fbWFyZ2luTGVmdDsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gY29udGFpbmVyV2lkdGggLSBtX3dpZHRoIC0gbV9t
YXJnaW5SaWdodDsKKyAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IGNvbnRhaW5lcldpZHRoIC0g
d2lkdGgoKSAtIG1fbWFyZ2luUmlnaHQ7CiAgICAgfQogfQogCiBpbnQgUmVuZGVyQm94OjpjYWxj
V2lkdGhVc2luZyhXaWR0aFR5cGUgd2lkdGhUeXBlLCBpbnQgY3cpCiB7Ci0gICAgaW50IHdpZHRo
ID0gbV93aWR0aDsKKyAgICBpbnQgd2lkdGhSZXN1bHQgPSB3aWR0aCgpOwogICAgIExlbmd0aCB3
OwogICAgIGlmICh3aWR0aFR5cGUgPT0gV2lkdGgpCiAgICAgICAgIHcgPSBzdHlsZSgpLT53aWR0
aCgpOwpAQCAtMTQxOCwxNiArMTM5NywxNiBAQCBpbnQgUmVuZGVyQm94OjpjYWxjV2lkdGhVc2lu
ZyhXaWR0aFR5cGUgCiAgICAgICAgIGludCBtYXJnaW5MZWZ0ID0gc3R5bGUoKS0+bWFyZ2luTGVm
dCgpLmNhbGNNaW5WYWx1ZShjdyk7CiAgICAgICAgIGludCBtYXJnaW5SaWdodCA9IHN0eWxlKCkt
Pm1hcmdpblJpZ2h0KCkuY2FsY01pblZhbHVlKGN3KTsKICAgICAgICAgaWYgKGN3KQotICAgICAg
ICAgICAgd2lkdGggPSBjdyAtIG1hcmdpbkxlZnQgLSBtYXJnaW5SaWdodDsKKyAgICAgICAgICAg
IHdpZHRoUmVzdWx0ID0gY3cgLSBtYXJnaW5MZWZ0IC0gbWFyZ2luUmlnaHQ7CiAKICAgICAgICAg
aWYgKHNpemVzVG9JbnRyaW5zaWNXaWR0aCh3aWR0aFR5cGUpKSB7Ci0gICAgICAgICAgICB3aWR0
aCA9IG1heCh3aWR0aCwgbWluUHJlZldpZHRoKCkpOwotICAgICAgICAgICAgd2lkdGggPSBtaW4o
d2lkdGgsIG1heFByZWZXaWR0aCgpKTsKKyAgICAgICAgICAgIHdpZHRoUmVzdWx0ID0gbWF4KHdp
ZHRoUmVzdWx0LCBtaW5QcmVmV2lkdGgoKSk7CisgICAgICAgICAgICB3aWR0aFJlc3VsdCA9IG1p
bih3aWR0aFJlc3VsdCwgbWF4UHJlZldpZHRoKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0g
ICAgICAgIHdpZHRoID0gY2FsY0JvcmRlckJveFdpZHRoKHcuY2FsY1ZhbHVlKGN3KSk7CisgICAg
ICAgIHdpZHRoUmVzdWx0ID0gY2FsY0JvcmRlckJveFdpZHRoKHcuY2FsY1ZhbHVlKGN3KSk7CiAK
LSAgICByZXR1cm4gd2lkdGg7CisgICAgcmV0dXJuIHdpZHRoUmVzdWx0OwogfQogCiBib29sIFJl
bmRlckJveDo6c2l6ZXNUb0ludHJpbnNpY1dpZHRoKFdpZHRoVHlwZSB3aWR0aFR5cGUpIGNvbnN0
CkBAIC0xNDcwLDIwICsxNDQ5LDIwIEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjSG9yaXpvbnRhbE1h
cmdpbnMoY28KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgobWFyZ2luTGVmdC5p
c0F1dG8oKSAmJiBtYXJnaW5SaWdodC5pc0F1dG8oKSAmJiBtX3dpZHRoIDwgY29udGFpbmVyV2lk
dGgpCisgICAgaWYgKChtYXJnaW5MZWZ0LmlzQXV0bygpICYmIG1hcmdpblJpZ2h0LmlzQXV0bygp
ICYmIHdpZHRoKCkgPCBjb250YWluZXJXaWR0aCkKICAgICAgICAgICAgIHx8ICghbWFyZ2luTGVm
dC5pc0F1dG8oKSAmJiAhbWFyZ2luUmlnaHQuaXNBdXRvKCkgJiYgY29udGFpbmluZ0Jsb2NrKCkt
PnN0eWxlKCktPnRleHRBbGlnbigpID09IFdFQktJVF9DRU5URVIpKSB7Ci0gICAgICAgIG1fbWFy
Z2luTGVmdCA9IG1heCgwLCAoY29udGFpbmVyV2lkdGggLSBtX3dpZHRoKSAvIDIpOwotICAgICAg
ICBtX21hcmdpblJpZ2h0ID0gY29udGFpbmVyV2lkdGggLSBtX3dpZHRoIC0gbV9tYXJnaW5MZWZ0
OwotICAgIH0gZWxzZSBpZiAoKG1hcmdpblJpZ2h0LmlzQXV0bygpICYmIG1fd2lkdGggPCBjb250
YWluZXJXaWR0aCkKKyAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWF4KDAsIChjb250YWluZXJXaWR0
aCAtIHdpZHRoKCkpIC8gMik7CisgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjb250YWluZXJXaWR0
aCAtIHdpZHRoKCkgLSBtX21hcmdpbkxlZnQ7CisgICAgfSBlbHNlIGlmICgobWFyZ2luUmlnaHQu
aXNBdXRvKCkgJiYgd2lkdGgoKSA8IGNvbnRhaW5lcldpZHRoKQogICAgICAgICAgICAgfHwgKCFt
YXJnaW5MZWZ0LmlzQXV0bygpICYmIGNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBSVEwgJiYgY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCktPnRleHRBbGlnbigpID09
IFdFQktJVF9MRUZUKSkgewogICAgICAgICBtX21hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNhbGNW
YWx1ZShjb250YWluZXJXaWR0aCk7Ci0gICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjb250YWluZXJX
aWR0aCAtIG1fd2lkdGggLSBtX21hcmdpbkxlZnQ7Ci0gICAgfSBlbHNlIGlmICgobWFyZ2luTGVm
dC5pc0F1dG8oKSAmJiBtX3dpZHRoIDwgY29udGFpbmVyV2lkdGgpCisgICAgICAgIG1fbWFyZ2lu
UmlnaHQgPSBjb250YWluZXJXaWR0aCAtIHdpZHRoKCkgLSBtX21hcmdpbkxlZnQ7CisgICAgfSBl
bHNlIGlmICgobWFyZ2luTGVmdC5pc0F1dG8oKSAmJiB3aWR0aCgpIDwgY29udGFpbmVyV2lkdGgp
CiAgICAgICAgICAgICB8fCAoIW1hcmdpblJpZ2h0LmlzQXV0bygpICYmIGNvbnRhaW5pbmdCbG9j
aygpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgJiYgY29udGFpbmluZ0Jsb2NrKCktPnN0
eWxlKCktPnRleHRBbGlnbigpID09IFdFQktJVF9SSUdIVCkpIHsKICAgICAgICAgbV9tYXJnaW5S
aWdodCA9IG1hcmdpblJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7Ci0gICAgICAgIG1f
bWFyZ2luTGVmdCA9IGNvbnRhaW5lcldpZHRoIC0gbV93aWR0aCAtIG1fbWFyZ2luUmlnaHQ7Cisg
ICAgICAgIG1fbWFyZ2luTGVmdCA9IGNvbnRhaW5lcldpZHRoIC0gd2lkdGgoKSAtIG1fbWFyZ2lu
UmlnaHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhpcyBtYWtlcyBhdXRvIG1hcmdpbnMg
MCBpZiB3ZSBmYWlsZWQgYSBtX3dpZHRoIDwgY29udGFpbmVyV2lkdGggdGVzdCBhYm92ZSAoY3Nz
Mi4xLCAxMC4zLjMpLgorICAgICAgICAvLyBUaGlzIG1ha2VzIGF1dG8gbWFyZ2lucyAwIGlmIHdl
IGZhaWxlZCBhIHdpZHRoKCkgPCBjb250YWluZXJXaWR0aCB0ZXN0IGFib3ZlIChjc3MyLjEsIDEw
LjMuMykuCiAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQuY2FsY01pblZhbHVlKGNv
bnRhaW5lcldpZHRoKTsKICAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1hcmdpblJpZ2h0LmNhbGNN
aW5WYWx1ZShjb250YWluZXJXaWR0aCk7CiAgICAgfQpAQCAtMTUzMCwyNSArMTUwOSwyNSBAQCB2
b2lkIFJlbmRlckJveDo6Y2FsY0hlaWdodCgpCiAgICAgICAgICAgICBjaGVja01pbk1heEhlaWdo
dCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IGhlaWdodDsKKyAgICAgICAgaW50
IGhlaWdodFJlc3VsdDsKICAgICAgICAgaWYgKGNoZWNrTWluTWF4SGVpZ2h0KSB7Ci0gICAgICAg
ICAgICBoZWlnaHQgPSBjYWxjSGVpZ2h0VXNpbmcoc3R5bGUoKS0+aGVpZ2h0KCkpOwotICAgICAg
ICAgICAgaWYgKGhlaWdodCA9PSAtMSkKLSAgICAgICAgICAgICAgICBoZWlnaHQgPSBtX2hlaWdo
dDsKKyAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGNhbGNIZWlnaHRVc2luZyhzdHlsZSgpLT5o
ZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAoaGVpZ2h0UmVzdWx0ID09IC0xKQorICAgICAgICAg
ICAgICAgIGhlaWdodFJlc3VsdCA9IGhlaWdodCgpOwogICAgICAgICAgICAgaW50IG1pbkggPSBj
YWxjSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bWluSGVpZ2h0KCkpOyAvLyBMZWF2ZSBhcyAtMSBpZiB1
bnNldC4KLSAgICAgICAgICAgIGludCBtYXhIID0gc3R5bGUoKS0+bWF4SGVpZ2h0KCkuaXNVbmRl
ZmluZWQoKSA/IGhlaWdodCA6IGNhbGNIZWlnaHRVc2luZyhzdHlsZSgpLT5tYXhIZWlnaHQoKSk7
CisgICAgICAgICAgICBpbnQgbWF4SCA9IHN0eWxlKCktPm1heEhlaWdodCgpLmlzVW5kZWZpbmVk
KCkgPyBoZWlnaHRSZXN1bHQgOiBjYWxjSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bWF4SGVpZ2h0KCkp
OwogICAgICAgICAgICAgaWYgKG1heEggPT0gLTEpCi0gICAgICAgICAgICAgICAgbWF4SCA9IGhl
aWdodDsKLSAgICAgICAgICAgIGhlaWdodCA9IG1pbihtYXhILCBoZWlnaHQpOwotICAgICAgICAg
ICAgaGVpZ2h0ID0gbWF4KG1pbkgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgbWF4SCA9IGhl
aWdodFJlc3VsdDsKKyAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IG1pbihtYXhILCBoZWlnaHRS
ZXN1bHQpOworICAgICAgICAgICAgaGVpZ2h0UmVzdWx0ID0gbWF4KG1pbkgsIGhlaWdodFJlc3Vs
dCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgLy8gVGhlIG9ubHkgdGltZXMgd2UgZG9u
J3QgY2hlY2sgbWluL21heCBoZWlnaHQgYXJlIHdoZW4gYSBmaXhlZCBsZW5ndGggaGFzCiAgICAg
ICAgICAgICAvLyBiZWVuIGdpdmVuIGFzIGFuIG92ZXJyaWRlLiAgSnVzdCB1c2UgdGhhdC4gIFRo
ZSB2YWx1ZSBoYXMgYWxyZWFkeSBiZWVuIGFkanVzdGVkCiAgICAgICAgICAgICAvLyBmb3IgYm94
LXNpemluZy4KLSAgICAgICAgICAgIGhlaWdodCA9IGgudmFsdWUoKSArIGJvcmRlclRvcCgpICsg
Ym9yZGVyQm90dG9tKCkgKyBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCk7CisgICAgICAg
ICAgICBoZWlnaHRSZXN1bHQgPSBoLnZhbHVlKCkgKyBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRv
bSgpICsgcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpOwogCi0gICAgICAgIG1faGVpZ2h0
ID0gaGVpZ2h0OwotICAgIH0KKyAgICAgICAgICAgIHNldEhlaWdodChoZWlnaHRSZXN1bHQpOwor
ICAgICAgICB9CiAKICAgICAvLyBXaW5JRSBxdWlyazogVGhlIDxodG1sPiBibG9jayBhbHdheXMg
ZmlsbHMgdGhlIGVudGlyZSBjYW52YXMgaW4gcXVpcmtzIG1vZGUuICBUaGUgPGJvZHk+IGFsd2F5
cyBmaWxscyB0aGUKICAgICAvLyA8aHRtbD4gYmxvY2sgaW4gcXVpcmtzIG1vZGUuICBPbmx5IGFw
cGx5IHRoaXMgcXVpcmsgaWYgdGhlIGJsb2NrIGlzIG5vcm1hbCBmbG93IGFuZCBubyBoZWlnaHQK
QEAgLTE1NTcsMTIgKzE1MzYsMTIgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNIZWlnaHQoKQogICAg
ICAgICBpbnQgbWFyZ2lucyA9IGNvbGxhcHNlZE1hcmdpblRvcCgpICsgY29sbGFwc2VkTWFyZ2lu
Qm90dG9tKCk7CiAgICAgICAgIGludCB2aXNIZWlnaHQgPSB2aWV3KCktPnZpZXdIZWlnaHQoKTsK
ICAgICAgICAgaWYgKGlzUm9vdCgpKQotICAgICAgICAgICAgbV9oZWlnaHQgPSBtYXgobV9oZWln
aHQsIHZpc0hlaWdodCAtIG1hcmdpbnMpOworICAgICAgICAgICAgc2V0SGVpZ2h0KG1heChoZWln
aHQoKSwgdmlzSGVpZ2h0IC0gbWFyZ2lucykpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IGludCBtYXJnaW5zQm9yZGVyc1BhZGRpbmcgPSBtYXJnaW5zICsgcGFyZW50KCktPm1hcmdpblRv
cCgpICsgcGFyZW50KCktPm1hcmdpbkJvdHRvbSgpCiAgICAgICAgICAgICAgICAgKyBwYXJlbnQo
KS0+Ym9yZGVyVG9wKCkgKyBwYXJlbnQoKS0+Ym9yZGVyQm90dG9tKCkKICAgICAgICAgICAgICAg
ICArIHBhcmVudCgpLT5wYWRkaW5nVG9wKCkgKyBwYXJlbnQoKS0+cGFkZGluZ0JvdHRvbSgpOwot
ICAgICAgICAgICAgbV9oZWlnaHQgPSBtYXgobV9oZWlnaHQsIHZpc0hlaWdodCAtIG1hcmdpbnNC
b3JkZXJzUGFkZGluZyk7CisgICAgICAgICAgICBzZXRIZWlnaHQobWF4KGhlaWdodCgpLCB2aXNI
ZWlnaHQgLSBtYXJnaW5zQm9yZGVyc1BhZGRpbmcpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTE2MzMsNyArMTYxMiw3IEBAIGludCBSZW5kZXJCb3g6OmNhbGNQZXJjZW50YWdlSGVpZ2h0KGNv
bnMKICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkKICAgICAgICAgICAgIHJlc3VsdCA9IGNiLT5j
YWxjQ29udGVudEJveEhlaWdodChyZXN1bHQpOwogICAgIH0gZWxzZSBpZiAoY2ItPmlzUmVuZGVy
VmlldygpIHx8IChjYi0+aXNCb2R5KCkgJiYgc3R5bGUoKS0+aHRtbEhhY2tzKCkpIHx8IGlzUG9z
aXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQpIHsKLSAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhp
cyB0byBhZmZlY3QgdGhlIGJsb2NrJyBtX2hlaWdodCBtZW1iZXIgdmFyaWFibGUsIHNpbmNlIHRo
aXMKKyAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyB0byBhZmZlY3QgdGhlIGJsb2NrJyBoZWln
aHQoKSBtZW1iZXIgdmFyaWFibGUsIHNpbmNlIHRoaXMKICAgICAgICAgLy8gY2FuIGdldCBjYWxs
ZWQgd2hpbGUgdGhlIGJsb2NrIGlzIHN0aWxsIGxheWluZyBvdXQgaXRzIGtpZHMuCiAgICAgICAg
IGludCBvbGRIZWlnaHQgPSBjYi0+aGVpZ2h0KCk7CiAgICAgICAgIGNiLT5jYWxjSGVpZ2h0KCk7
CkBAIC0xODM3LDEyICsxODE2LDE5IEBAIGludCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja1dp
ZHRoRm9yUG8KICAgICAgICAgcmV0dXJuIG1heCgwLCAoZnJvbVJpZ2h0IC0gZnJvbUxlZnQpKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrLT53aWR0aCgpIC0gY29udGFpbmlu
Z0Jsb2NrLT5ib3JkZXJMZWZ0KCkgLSBjb250YWluaW5nQmxvY2stPmJvcmRlclJpZ2h0KCkgLSBj
b250YWluaW5nQmxvY2stPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94Kj4oY29udGFpbmluZ0Jsb2NrKS0+d2lkdGgoKSAtIGNv
bnRhaW5pbmdCbG9jay0+Ym9yZGVyTGVmdCgpIC0gY29udGFpbmluZ0Jsb2NrLT5ib3JkZXJSaWdo
dCgpIC0gY29udGFpbmluZ0Jsb2NrLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiB9CiAKIGlu
dCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0hlaWdodEZvclBvc2l0aW9uZWQoY29uc3QgUmVu
ZGVyT2JqZWN0KiBjb250YWluaW5nQmxvY2spIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvbnRhaW5p
bmdCbG9jay0+aGVpZ2h0KCkgLSBjb250YWluaW5nQmxvY2stPmJvcmRlclRvcCgpIC0gY29udGFp
bmluZ0Jsb2NrLT5ib3JkZXJCb3R0b20oKTsKKyAgICBpbnQgaGVpZ2h0UmVzdWx0OworICAgIGlm
IChjb250YWluaW5nQmxvY2stPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgQVNTRVJUKGNv
bnRhaW5pbmdCbG9jay0+aXNSZWxQb3NpdGlvbmVkKCkpOworICAgICAgICBoZWlnaHRSZXN1bHQg
PSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJJbmxpbmUqPihjb250YWluaW5nQmxvY2spLT5ib3Vu
ZGluZ0JveEhlaWdodCgpOworICAgIH0gZWxzZQorICAgICAgICBoZWlnaHRSZXN1bHQgPSBzdGF0
aWNfY2FzdDxjb25zdCBSZW5kZXJCb3gqPihjb250YWluaW5nQmxvY2spLT5oZWlnaHQoKTsKKyAg
ICAKKyAgICByZXR1cm4gaGVpZ2h0UmVzdWx0IC0gY29udGFpbmluZ0Jsb2NrLT5ib3JkZXJUb3Ao
KSAtIGNvbnRhaW5pbmdCbG9jay0+Ym9yZGVyQm90dG9tKCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94
OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCkKQEAgLTE4NjcsNyArMTg1Myw3IEBAIHZvaWQgUmVu
ZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCkKICAgICAvLyBOT1RFOiAnc3RhdGljJyBp
cyBub3QgYSBsZWdhbCB2YWx1ZSBmb3IgJ2xlZnQnIG9yICdyaWdodCcgYXMgb2YgQ1NTIDIuMS4K
IAogICAgIC8vIEZJWE1FIDM6IENhbiBwZXJoYXBzIG9wdGltaXplIG91dCBjYXNlcyB3aGVuIG1h
eC13aWR0aC9taW4td2lkdGggYXJlIGdyZWF0ZXIKLSAgICAvLyB0aGFuIG9yIGxlc3MgdGhhbiB0
aGUgY29tcHV0ZWQgbV93aWR0aC4gIEJlIGNhcmVmdWwgb2YgYm94LXNpemluZyBhbmQKKyAgICAv
LyB0aGFuIG9yIGxlc3MgdGhhbiB0aGUgY29tcHV0ZWQgd2lkdGgoKS4gIEJlIGNhcmVmdWwgb2Yg
Ym94LXNpemluZyBhbmQKICAgICAvLyBwZXJjZW50YWdlIGlzc3Vlcy4KIAogICAgIC8vIFRoZSBm
b2xsb3dpbmcgaXMgYmFzZWQgb2ZmIG9mIHRoZSBXM0MgV29ya2luZyBEcmFmdCBmcm9tIEFwcmls
IDExLCAyMDA2IG9mCkBAIC0xOTIzLDI0ICsxOTA5LDI4IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxj
QWJzb2x1dGVIb3Jpem9udGFsKCkKICAgICAgICAgaWYgKGNvbnRhaW5lckRpcmVjdGlvbiA9PSBM
VFIpIHsKICAgICAgICAgICAgIC8vICdzdGF0aWNYJyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4g
c2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQuCiAgICAgICAgICAgICBpbnQgc3RhdGlj
UG9zaXRpb24gPSBzdGF0aWNYKCkgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyTGVmdCgpOwotICAg
ICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7IHBvICYmIHBvICE9IGNv
bnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQoKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNQ
b3NpdGlvbiArPSBwby0+eFBvcygpOworICAgICAgICAgICAgZm9yIChSZW5kZXJCb3gqIHBvID0g
cGFyZW50Qm94KCk7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnRC
b3goKSkKKyAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBwby0+eCgpOwogICAgICAg
ICAgICAgbGVmdC5zZXRWYWx1ZShGaXhlZCwgc3RhdGljUG9zaXRpb24pOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOworICAgICAgICAg
ICAgUmVuZGVyQm94KiBwbyA9IHBhcmVudEJveCgpOwogICAgICAgICAgICAgLy8gJ3N0YXRpY1gn
IHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlvdXQgb2YgdGhlIHBhcmVu
dC4KICAgICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9IHN0YXRpY1goKSArIGNvbnRhaW5l
cldpZHRoICsgY29udGFpbmVyQmxvY2stPmJvcmRlclJpZ2h0KCkgLSBwby0+d2lkdGgoKTsKLSAg
ICAgICAgICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFy
ZW50KCkpCi0gICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0gcG8tPnhQb3MoKTsKKyAg
ICAgICAgICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFy
ZW50Qm94KCkpCisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0gcG8tPngoKTsKICAg
ICAgICAgICAgIHJpZ2h0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMg
Zm9yICd3aWR0aCcgY2FzZS4KKyAgICBpbnQgd2lkdGhSZXN1bHQ7CisgICAgaW50IHhSZXN1bHQ7
CiAgICAgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcyhzdHlsZSgpLT53aWR0aCgpLCBjb250
YWluZXJCbG9jaywgY29udGFpbmVyRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGFpbmVyV2lkdGgsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd2lkdGgsIG1fbWFyZ2luTGVm
dCwgbV9tYXJnaW5SaWdodCwgbV94KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdpZHRoUmVzdWx0LCBtX21hcmdpbkxlZnQsIG1fbWFyZ2luUmlnaHQsIHhSZXN1bHQpOworICAg
IHNldFdpZHRoKHdpZHRoUmVzdWx0KTsKKyAgICBzZXRYKHhSZXN1bHQpOwogCiAgICAgLy8gQ2Fs
Y3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAnbWF4LXdpZHRoJyBjYXNlLgog
ICAgIGlmICghc3R5bGUoKS0+bWF4V2lkdGgoKS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xOTU0LDEx
ICsxOTQ0LDExIEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LCByaWdodCwgbWFyZ2luTGVm
dCwgbWFyZ2luUmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4
V2lkdGgsIG1heE1hcmdpbkxlZnQsIG1heE1hcmdpblJpZ2h0LCBtYXhYUG9zKTsKIAotICAgICAg
ICBpZiAobV93aWR0aCA+IG1heFdpZHRoKSB7Ci0gICAgICAgICAgICBtX3dpZHRoID0gbWF4V2lk
dGg7CisgICAgICAgIGlmICh3aWR0aCgpID4gbWF4V2lkdGgpIHsKKyAgICAgICAgICAgIHNldFdp
ZHRoKG1heFdpZHRoKTsKICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1heE1hcmdpbkxlZnQ7
CiAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWF4TWFyZ2luUmlnaHQ7Ci0gICAgICAgICAg
ICBtX3ggPSBtYXhYUG9zOworICAgICAgICAgICAgbV9mcmFtZVJlY3Quc2V0WChtYXhYUG9zKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMTk3NCwyMiArMTk2NCwyNSBAQCB2b2lkIFJlbmRlckJv
eDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoLCBtaW5NYXJnaW5MZWZ0LCBtaW5N
YXJnaW5SaWdodCwgbWluWFBvcyk7CiAKLSAgICAgICAgaWYgKG1fd2lkdGggPCBtaW5XaWR0aCkg
ewotICAgICAgICAgICAgbV93aWR0aCA9IG1pbldpZHRoOworICAgICAgICBpZiAod2lkdGgoKSA8
IG1pbldpZHRoKSB7CisgICAgICAgICAgICBzZXRXaWR0aChtaW5XaWR0aCk7CiAgICAgICAgICAg
ICBtX21hcmdpbkxlZnQgPSBtaW5NYXJnaW5MZWZ0OwogICAgICAgICAgICAgbV9tYXJnaW5SaWdo
dCA9IG1pbk1hcmdpblJpZ2h0OwotICAgICAgICAgICAgbV94ID0gbWluWFBvczsKKyAgICAgICAg
ICAgIG1fZnJhbWVSZWN0LnNldFgobWluWFBvcyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAoc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNXaWR0aCgpICYmIG1fd2lkdGggPCBtaW5QcmVmV2lk
dGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZykKKyAgICBpZiAoc3RyZXRjaGVzVG9NaW5JbnRyaW5z
aWNXaWR0aCgpICYmIHdpZHRoKCkgPCBtaW5QcmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGlu
ZykgewogICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKExlbmd0aChtaW5QcmVm
V2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZywgRml4ZWQpLCBjb250YWluZXJCbG9jaywgY29u
dGFpbmVyRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRhaW5lcldpZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd2lkdGgsIG1fbWFyZ2luTGVmdCwg
bV9tYXJnaW5SaWdodCwgbV94KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aFJlc3VsdCwgbV9tYXJnaW5MZWZ0LCBtX21hcmdpblJpZ2h0LCB4UmVzdWx0KTsKKyAg
ICAgICAgc2V0V2lkdGgod2lkdGhSZXN1bHQpOworICAgICAgICBzZXRYKHhSZXN1bHQpOworICAg
IH0KIAotICAgIC8vIFB1dCBtX3dpZHRoIGludG8gY29ycmVjdCBmb3JtLgotICAgIG1fd2lkdGgg
Kz0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgIC8vIFB1dCB3aWR0aCgpIGludG8gY29ycmVjdCBm
b3JtLgorICAgIHNldFdpZHRoKHdpZHRoKCkgKyBib3JkZXJzUGx1c1BhZGRpbmcpOwogfQogCiB2
b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcyhMZW5ndGggd2lkdGgs
IGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyQmxvY2ssIFRleHREaXJlY3Rpb24gY29udGFp
bmVyRGlyZWN0aW9uLApAQCAtMjIxMSwyMCArMjIwNCwyMiBAQCB2b2lkIFJlbmRlckJveDo6Y2Fs
Y0Fic29sdXRlVmVydGljYWwoKQogICAgIGlmICh0b3AuaXNBdXRvKCkgJiYgYm90dG9tLmlzQXV0
bygpKSB7CiAgICAgICAgIC8vIHN0YXRpY1kgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0
aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50KCkKICAgICAgICAgaW50IHN0YXRpY1RvcCA9IHN0
YXRpY1koKSAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJUb3AoKTsKLSAgICAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIHBvID0gcGFyZW50KCk7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9
IHBvLT5wYXJlbnQoKSkgeworICAgICAgICBmb3IgKFJlbmRlckJveCogcG8gPSBwYXJlbnRCb3go
KTsgcG8gJiYgcG8gIT0gY29udGFpbmVyQmxvY2s7IHBvID0gcG8tPnBhcmVudEJveCgpKSB7CiAg
ICAgICAgICAgICBpZiAoIXBvLT5pc1RhYmxlUm93KCkpCi0gICAgICAgICAgICAgICAgc3RhdGlj
VG9wICs9IHBvLT55UG9zKCk7CisgICAgICAgICAgICAgICAgc3RhdGljVG9wICs9IHBvLT55KCk7
CiAgICAgICAgIH0KICAgICAgICAgdG9wLnNldFZhbHVlKEZpeGVkLCBzdGF0aWNUb3ApOwogICAg
IH0KIAogCi0gICAgaW50IGhlaWdodDsgLy8gTmVlZGVkIHRvIGNvbXB1dGUgb3ZlcmZsb3cuCisg
ICAgaW50IGg7IC8vIE5lZWRlZCB0byBjb21wdXRlIG92ZXJmbG93LgorICAgIGludCB5OwogCiAg
ICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAnaGVpZ2h0JyBj
YXNlLgogICAgIGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKHN0eWxlKCktPmhlaWdodCgpLCBj
b250YWluZXJCbG9jaywgY29udGFpbmVySGVpZ2h0LCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wLCBib3R0b20sIG1hcmdpblRvcCwgbWFyZ2lu
Qm90dG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwgbV9tYXJnaW5U
b3AsIG1fbWFyZ2luQm90dG9tLCBtX3kpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGgsIG1fbWFyZ2luVG9wLCBtX21hcmdpbkJvdHRvbSwgeSk7CisgICAgc2V0WSh5KTsKIAogICAg
IC8vIEF2b2lkIGRvaW5nIGFueSB3b3JrIGluIHRoZSBjb21tb24gY2FzZSAod2hlcmUgdGhlIHZh
bHVlcyBvZiBtaW4taGVpZ2h0IGFuZCBtYXgtaGVpZ2h0IGFyZSB0aGVpciBkZWZhdWx0cykuCiAg
ICAgLy8gc2VlIEZJWE1FIDMKQEAgLTIyNDAsMTEgKzIyMzUsMTEgQEAgdm9pZCBSZW5kZXJCb3g6
OmNhbGNBYnNvbHV0ZVZlcnRpY2FsKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9wLCBib3R0b20sIG1hcmdpblRvcCwgbWFyZ2luQm90dG9tLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQsIG1heE1hcmdpblRvcCwgbWF4TWFyZ2luQm90
dG9tLCBtYXhZUG9zKTsKIAotICAgICAgICBpZiAoaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7Ci0gICAg
ICAgICAgICBoZWlnaHQgPSBtYXhIZWlnaHQ7CisgICAgICAgIGlmIChoID4gbWF4SGVpZ2h0KSB7
CisgICAgICAgICAgICBoID0gbWF4SGVpZ2h0OwogICAgICAgICAgICAgbV9tYXJnaW5Ub3AgPSBt
YXhNYXJnaW5Ub3A7CiAgICAgICAgICAgICBtX21hcmdpbkJvdHRvbSA9IG1heE1hcmdpbkJvdHRv
bTsKLSAgICAgICAgICAgIG1feSA9IG1heFlQb3M7CisgICAgICAgICAgICBtX2ZyYW1lUmVjdC5z
ZXRZKG1heFlQb3MpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMjU5LDE5ICsyMjU0LDE5IEBA
IHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbCgpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvcCwgYm90dG9tLCBtYXJnaW5Ub3AsIG1hcmdpbkJvdHRvbSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0LCBtaW5NYXJnaW5U
b3AsIG1pbk1hcmdpbkJvdHRvbSwgbWluWVBvcyk7CiAKLSAgICAgICAgaWYgKGhlaWdodCA8IG1p
bkhlaWdodCkgewotICAgICAgICAgICAgaGVpZ2h0ID0gbWluSGVpZ2h0OworICAgICAgICBpZiAo
aCA8IG1pbkhlaWdodCkgeworICAgICAgICAgICAgaCA9IG1pbkhlaWdodDsKICAgICAgICAgICAg
IG1fbWFyZ2luVG9wID0gbWluTWFyZ2luVG9wOwogICAgICAgICAgICAgbV9tYXJnaW5Cb3R0b20g
PSBtaW5NYXJnaW5Cb3R0b207Ci0gICAgICAgICAgICBtX3kgPSBtaW5ZUG9zOworICAgICAgICAg
ICAgbV9mcmFtZVJlY3Quc2V0WShtaW5ZUG9zKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8v
IFNldCBmaW5hbCBoZWlnaHQgdmFsdWUuCi0gICAgbV9oZWlnaHQgPSBoZWlnaHQgKyBib3JkZXJz
UGx1c1BhZGRpbmc7CisgICAgc2V0SGVpZ2h0KGggKyBib3JkZXJzUGx1c1BhZGRpbmcpOwogfQog
Ci12b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoTGVuZ3RoIGhlaWdo
dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXJCbG9jaywKK3ZvaWQgUmVuZGVyQm94Ojpj
YWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhMZW5ndGggaCwgY29uc3QgUmVuZGVyT2JqZWN0KiBj
b250YWluZXJCbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBpbnQgY29udGFpbmVySGVpZ2h0LCBjb25zdCBpbnQgYm9yZGVyc1BsdXNQYWRkaW5n
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExlbmd0
aCB0b3AsIGNvbnN0IExlbmd0aCBib3R0b20sIGNvbnN0IExlbmd0aCBtYXJnaW5Ub3AsIGNvbnN0
IExlbmd0aCBtYXJnaW5Cb3R0b20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50JiBoZWlnaHRWYWx1ZSwgaW50JiBtYXJnaW5Ub3BWYWx1ZSwgaW50JiBtYXJn
aW5Cb3R0b21WYWx1ZSwgaW50JiB5UG9zKQpAQCAtMjI4MCwxNyArMjI3NSwxNyBAQCB2b2lkIFJl
bmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxWYWx1CiAgICAgLy8gY29udmVydGVkIHRvIHRo
ZSBzdGF0aWMgcG9zaXRpb24gaW4gY2FsY0Fic29sdXRlVmVydGljYWwoKQogICAgIEFTU0VSVCgh
KHRvcC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpKTsKIAotICAgIGludCBjb250ZW50SGVp
Z2h0ID0gbV9oZWlnaHQgLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgaW50IGNvbnRlbnRIZWln
aHQgPSBoZWlnaHQoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKIAogICAgIGludCB0b3BWYWx1ZSA9
IDA7CiAKLSAgICBib29sIGhlaWdodElzQXV0byA9IGhlaWdodC5pc0F1dG8oKTsKKyAgICBib29s
IGhlaWdodElzQXV0byA9IGguaXNBdXRvKCk7CiAgICAgYm9vbCB0b3BJc0F1dG8gPSB0b3AuaXNB
dXRvKCk7CiAgICAgYm9vbCBib3R0b21Jc0F1dG8gPSBib3R0b20uaXNBdXRvKCk7CiAKICAgICAv
LyBIZWlnaHQgaXMgbmV2ZXIgdW5zb2x2ZWQgZm9yIHRhYmxlcy4KICAgICBpZiAoaXNUYWJsZSgp
KSB7Ci0gICAgICAgIGhlaWdodC5zZXRWYWx1ZShGaXhlZCwgY29udGVudEhlaWdodCk7CisgICAg
ICAgIGguc2V0VmFsdWUoRml4ZWQsIGNvbnRlbnRIZWlnaHQpOwogICAgICAgICBoZWlnaHRJc0F1
dG8gPSBmYWxzZTsKICAgICB9CiAKQEAgLTIzMDYsNyArMjMwMSw3IEBAIHZvaWQgUmVuZGVyQm94
OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHUKICAgICAgICAgLy8gTk9URTogIEl0IGlzIG5vdCBu
ZWNlc3NhcnkgdG8gc29sdmUgZm9yICdib3R0b20nIGluIHRoZSBvdmVyIGNvbnN0cmFpbmVkCiAg
ICAgICAgIC8vIGNhc2UgYmVjYXVzZSB0aGUgdmFsdWUgaXMgbm90IHVzZWQgZm9yIGFueSBmdXJ0
aGVyIGNhbGN1bGF0aW9ucy4KIAotICAgICAgICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94
SGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CisgICAgICAgIGhlaWdo
dFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0
KSk7CiAgICAgICAgIHRvcFZhbHVlID0gdG9wLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOwog
CiAgICAgICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckhlaWdodCAtICh0
b3BWYWx1ZSArIGhlaWdodFZhbHVlICsgYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQp
ICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKQEAgLTIzNzMsNyArMjM2OCw3IEBAIHZvaWQgUmVuZGVy
Qm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHUKICAgICAgICAgICAgIGhlaWdodFZhbHVlID0g
Y29udGVudEhlaWdodDsKICAgICAgICAgfSBlbHNlIGlmICh0b3BJc0F1dG8gJiYgIWhlaWdodElz
QXV0byAmJiAhYm90dG9tSXNBdXRvKSB7CiAgICAgICAgICAgICAvLyBSVUxFIDQ6IChzb2x2ZSBv
ZiB0b3ApCi0gICAgICAgICAgICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGhl
aWdodC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CisgICAgICAgICAgICBoZWlnaHRWYWx1
ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGguY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkpOwog
ICAgICAgICAgICAgdG9wVmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtIChoZWlnaHRWYWx1ZSArIGJv
dHRvbS5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRv
cElzQXV0byAmJiBoZWlnaHRJc0F1dG8gJiYgIWJvdHRvbUlzQXV0bykgewogICAgICAgICAgICAg
Ly8gUlVMRSA1OiAoc29sdmUgb2YgaGVpZ2h0KQpAQCAtMjM4MSw3ICsyMzc2LDcgQEAgdm9pZCBS
ZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdQogICAgICAgICAgICAgaGVpZ2h0VmFs
dWUgPSBtYXgoMCwgYXZhaWxhYmxlU3BhY2UgLSAodG9wVmFsdWUgKyBib3R0b20uY2FsY1ZhbHVl
KGNvbnRhaW5lckhlaWdodCkpKTsKICAgICAgICAgfSBlbHNlIGlmICghdG9wSXNBdXRvICYmICFo
ZWlnaHRJc0F1dG8gJiYgYm90dG9tSXNBdXRvKSB7CiAgICAgICAgICAgICAvLyBSVUxFIDY6IChu
byBuZWVkIHNvbHZlIG9mIGJvdHRvbSkKLSAgICAgICAgICAgIGhlaWdodFZhbHVlID0gY2FsY0Nv
bnRlbnRCb3hIZWlnaHQoaGVpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpKTsKKyAgICAg
ICAgICAgIGhlaWdodFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaC5jYWxjVmFsdWUoY29u
dGFpbmVySGVpZ2h0KSk7CiAgICAgICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxjVmFsdWUoY29u
dGFpbmVySGVpZ2h0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0MjIsOCArMjQxNyw4IEBAIHZv
aWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsUmUKICAgICAvLyBOT1RFOiBUaGlz
IHZhbHVlIG9mIHdpZHRoIGlzIEZJTkFMIGluIHRoYXQgdGhlIG1pbi9tYXggd2lkdGggY2FsY3Vs
YXRpb25zCiAgICAgLy8gYXJlIGRlYWx0IHdpdGggaW4gY2FsY1JlcGxhY2VkV2lkdGgoKS4gIFRo
aXMgbWVhbnMgdGhhdCB0aGUgc3RlcHMgdG8gcHJvZHVjZQogICAgIC8vIGNvcnJlY3QgbWF4L21p
biBpbiB0aGUgbm9uLXJlcGxhY2VkIHZlcnNpb24sIGFyZSBub3QgbmVjZXNzYXJ5LgotICAgIG1f
d2lkdGggPSBjYWxjUmVwbGFjZWRXaWR0aCgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQo
KSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKTsKLSAgICBjb25zdCBpbnQgYXZhaWxh
YmxlU3BhY2UgPSBjb250YWluZXJXaWR0aCAtIG1fd2lkdGg7CisgICAgc2V0V2lkdGgoY2FsY1Jl
cGxhY2VkV2lkdGgoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVm
dCgpICsgcGFkZGluZ1JpZ2h0KCkpOworICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNv
bnRhaW5lcldpZHRoIC0gd2lkdGgoKTsKIAogICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAogICAgICAq
IDIuIElmIGJvdGggJ2xlZnQnIGFuZCAncmlnaHQnIGhhdmUgdGhlIHZhbHVlICdhdXRvJywgdGhl
biBpZiAnZGlyZWN0aW9uJwpAQCAtMjQzNiwxNSArMjQzMSwxNSBAQCB2b2lkIFJlbmRlckJveDo6
Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFJlCiAgICAgICAgIGlmIChjb250YWluZXJEaXJlY3Rpb24g
PT0gTFRSKSB7CiAgICAgICAgICAgICAvLyAnc3RhdGljWCcgc2hvdWxkIGFscmVhZHkgaGF2ZSBi
ZWVuIHNldCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50LgogICAgICAgICAgICAgaW50IHN0
YXRpY1Bvc2l0aW9uID0gc3RhdGljWCgpIC0gY29udGFpbmVyQmxvY2stPmJvcmRlckxlZnQoKTsK
LSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOyBwbyAmJiBwbyAh
PSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFyZW50KCkpCi0gICAgICAgICAgICAgICAgc3Rh
dGljUG9zaXRpb24gKz0gcG8tPnhQb3MoKTsKKyAgICAgICAgICAgIGZvciAoUmVuZGVyQm94KiBw
byA9IHBhcmVudEJveCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFy
ZW50Qm94KCkpCisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gcG8tPngoKTsKICAg
ICAgICAgICAgIGxlZnQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcG8gPSBwYXJlbnQoKTsKKyAgICAg
ICAgICAgIFJlbmRlckJveCogcG8gPSBwYXJlbnRCb3goKTsKICAgICAgICAgICAgIC8vICdzdGF0
aWNYJyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBw
YXJlbnQuCiAgICAgICAgICAgICBpbnQgc3RhdGljUG9zaXRpb24gPSBzdGF0aWNYKCkgKyBjb250
YWluZXJXaWR0aCArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJSaWdodCgpIC0gcG8tPndpZHRoKCk7
Ci0gICAgICAgICAgICBmb3IgKDsgcG8gJiYgcG8gIT0gY29udGFpbmVyQmxvY2s7IHBvID0gcG8t
PnBhcmVudCgpKQotICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IHBvLT54UG9zKCk7
CisgICAgICAgICAgICBmb3IgKDsgcG8gJiYgcG8gIT0gY29udGFpbmVyQmxvY2s7IHBvID0gcG8t
PnBhcmVudEJveCgpKQorICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IHBvLT54KCk7
CiAgICAgICAgICAgICByaWdodC5zZXRWYWx1ZShGaXhlZCwgc3RhdGljUG9zaXRpb24pOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMjU0MSw3ICsyNTM2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNB
YnNvbHV0ZUhvcml6b250YWxSZQogICAgIFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgIC8vIE5PVEU6
ICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNvbHZlIGZvciAncmlnaHQnIHdoZW4gdGhlIGRpcmVj
dGlvbiBpcwogICAgIC8vIExUUiBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBub3QgdXNlZC4KLSAgICBp
bnQgdG90YWxXaWR0aCA9IG1fd2lkdGggKyBsZWZ0VmFsdWUgKyByaWdodFZhbHVlICsgIG1fbWFy
Z2luTGVmdCArIG1fbWFyZ2luUmlnaHQ7CisgICAgaW50IHRvdGFsV2lkdGggPSB3aWR0aCgpICsg
bGVmdFZhbHVlICsgcmlnaHRWYWx1ZSArICBtX21hcmdpbkxlZnQgKyBtX21hcmdpblJpZ2h0Owog
ICAgIGlmICh0b3RhbFdpZHRoID4gY29udGFpbmVyV2lkdGggJiYgKGNvbnRhaW5lckRpcmVjdGlv
biA9PSBSVEwpKQogICAgICAgICBsZWZ0VmFsdWUgPSBjb250YWluZXJXaWR0aCAtICh0b3RhbFdp
ZHRoIC0gbGVmdFZhbHVlKTsKIApAQCAtMjU1NiwxMiArMjU1MSwxMiBAQCB2b2lkIFJlbmRlckJv
eDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFJlCiAgICAgICAgIElubGluZUZsb3dCb3gqIGZpcnN0
TGluZSA9IGZsb3ctPmZpcnN0TGluZUJveCgpOwogICAgICAgICBJbmxpbmVGbG93Qm94KiBsYXN0
TGluZSA9IGZsb3ctPmxhc3RMaW5lQm94KCk7CiAgICAgICAgIGlmIChmaXJzdExpbmUgJiYgbGFz
dExpbmUgJiYgZmlyc3RMaW5lICE9IGxhc3RMaW5lKSB7Ci0gICAgICAgICAgICBtX3ggPSBsZWZ0
VmFsdWUgKyBtX21hcmdpbkxlZnQgKyBsYXN0TGluZS0+Ym9yZGVyTGVmdCgpICsgKGxhc3RMaW5l
LT54UG9zKCkgLSBmaXJzdExpbmUtPnhQb3MoKSk7CisgICAgICAgICAgICBtX2ZyYW1lUmVjdC5z
ZXRYKGxlZnRWYWx1ZSArIG1fbWFyZ2luTGVmdCArIGxhc3RMaW5lLT5ib3JkZXJMZWZ0KCkgKyAo
bGFzdExpbmUtPnhQb3MoKSAtIGZpcnN0TGluZS0+eFBvcygpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3ggPSBsZWZ0VmFsdWUgKyBtX21hcmdpbkxl
ZnQgKyBjb250YWluZXJCbG9jay0+Ym9yZGVyTGVmdCgpOworICAgIG1fZnJhbWVSZWN0LnNldFgo
bGVmdFZhbHVlICsgbV9tYXJnaW5MZWZ0ICsgY29udGFpbmVyQmxvY2stPmJvcmRlckxlZnQoKSk7
CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFJlcGxhY2VkKCkKQEAg
LTI1OTEsOCArMjU4Niw4IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFJl
cGwKICAgICAvLyBOT1RFOiBUaGlzIHZhbHVlIG9mIGhlaWdodCBpcyBGSU5BTCBpbiB0aGF0IHRo
ZSBtaW4vbWF4IGhlaWdodCBjYWxjdWxhdGlvbnMKICAgICAvLyBhcmUgZGVhbHQgd2l0aCBpbiBj
YWxjUmVwbGFjZWRIZWlnaHQoKS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RlcHMgdG8gcHJvZHVj
ZQogICAgIC8vIGNvcnJlY3QgbWF4L21pbiBpbiB0aGUgbm9uLXJlcGxhY2VkIHZlcnNpb24sIGFy
ZSBub3QgbmVjZXNzYXJ5LgotICAgIG1faGVpZ2h0ID0gY2FsY1JlcGxhY2VkSGVpZ2h0KCkgKyBi
b3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRv
bSgpOwotICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckhlaWdodCAtIG1f
aGVpZ2h0OworICAgIHNldEhlaWdodChjYWxjUmVwbGFjZWRIZWlnaHQoKSArIGJvcmRlclRvcCgp
ICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCkpOworICAg
IGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckhlaWdodCAtIGhlaWdodCgpOwog
CiAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCiAgICAgICogMi4gSWYgYm90aCAndG9wJyBhbmQgJ2Jv
dHRvbScgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCByZXBsYWNlICd0b3AnCkBAIC0yNjAyLDkgKzI1
OTcsOSBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxSZXBsCiAgICAgaWYg
KHRvcC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpIHsKICAgICAgICAgLy8gc3RhdGljWSBz
aG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQo
KS4KICAgICAgICAgaW50IHN0YXRpY1RvcCA9IHN0YXRpY1koKSAtIGNvbnRhaW5lckJsb2NrLT5i
b3JkZXJUb3AoKTsKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7IHBv
ICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQoKSkgeworICAgICAgICBm
b3IgKFJlbmRlckJveCogcG8gPSBwYXJlbnRCb3goKTsgcG8gJiYgcG8gIT0gY29udGFpbmVyQmxv
Y2s7IHBvID0gcG8tPnBhcmVudEJveCgpKSB7CiAgICAgICAgICAgICBpZiAoIXBvLT5pc1RhYmxl
Um93KCkpCi0gICAgICAgICAgICAgICAgc3RhdGljVG9wICs9IHBvLT55UG9zKCk7CisgICAgICAg
ICAgICAgICAgc3RhdGljVG9wICs9IHBvLT55KCk7CiAgICAgICAgIH0KICAgICAgICAgdG9wLnNl
dFZhbHVlKEZpeGVkLCBzdGF0aWNUb3ApOwogICAgIH0KQEAgLTI2OTMsNyArMjY4OCw3IEBAIHZv
aWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFJlcGwKICAgICAvLyBvciBub3QuCiAK
ICAgICAvLyBVc2UgY29tcHV0ZWQgdmFsdWVzIHRvIGNhbGN1bGF0ZSB0aGUgdmVydGljYWwgcG9z
aXRpb24uCi0gICAgbV95ID0gdG9wVmFsdWUgKyBtX21hcmdpblRvcCArIGNvbnRhaW5lckJsb2Nr
LT5ib3JkZXJUb3AoKTsKKyAgICBtX2ZyYW1lUmVjdC5zZXRZKHRvcFZhbHVlICsgbV9tYXJnaW5U
b3AgKyBjb250YWluZXJCbG9jay0+Ym9yZGVyVG9wKCkpOwogfQogCiBJbnRSZWN0IFJlbmRlckJv
eDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIGludCBjYXJldE9mZnNldCwgaW50KiBl
eHRyYVdpZHRoVG9FbmRPZkxpbmUpCkBAIC0yNzA1LDExICsyNzAwLDExIEBAIEludFJlY3QgUmVu
ZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmUKIAogICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0
IGJvcmRlciBhbmQgcGFkZGluZz8KICAgICBjb25zdCBpbnQgY2FyZXRXaWR0aCA9IDE7Ci0gICAg
SW50UmVjdCByZWN0KHhQb3MoKSwgeVBvcygpLCBjYXJldFdpZHRoLCBtX2hlaWdodCk7CisgICAg
SW50UmVjdCByZWN0KHgoKSwgeSgpLCBjYXJldFdpZHRoLCBoZWlnaHQoKSk7CiAgICAgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24gPSBib3ggPyBib3gtPmRpcmVjdGlvbigpIDogc3R5bGUoKS0+ZGly
ZWN0aW9uKCk7CiAKICAgICBpZiAoKCFjYXJldE9mZnNldCkgXiAoZGlyZWN0aW9uID09IExUUikp
Ci0gICAgICAgIHJlY3QubW92ZShJbnRTaXplKG1fd2lkdGggLSBjYXJldFdpZHRoLCAwKSk7Cisg
ICAgICAgIHJlY3QubW92ZShJbnRTaXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwKSk7CiAKICAg
ICBpZiAoYm94KSB7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBib3gtPnJvb3Qo
KTsKQEAgLTI3MzEsMTggKzI3MjYsMTggQEAgSW50UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRS
ZWN0KElubGluZQogICAgICAgICByZWN0LnNldEhlaWdodChmb250SGVpZ2h0KTsKIAogICAgIGlm
IChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCi0gICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUg
PSB4UG9zKCkgKyBtX3dpZHRoIC0gcmVjdC5yaWdodCgpOworICAgICAgICAqZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lID0geCgpICsgd2lkdGgoKSAtIHJlY3QucmlnaHQoKTsKIAogICAgIC8vIE1vdmUg
dG8gbG9jYWwgY29vcmRzCi0gICAgcmVjdC5tb3ZlKC14UG9zKCksIC15UG9zKCkpOworICAgIHJl
Y3QubW92ZSgteCgpLCAteSgpKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIAogaW50IFJlbmRlckJv
eDo6bG93ZXN0UG9zaXRpb24oYm9vbCAvKmluY2x1ZGVPdmVyZmxvd0ludGVyaW9yKi8sIGJvb2wg
aW5jbHVkZVNlbGYpIGNvbnN0CiB7Ci0gICAgaWYgKCFpbmNsdWRlU2VsZiB8fCAhbV93aWR0aCkK
KyAgICBpZiAoIWluY2x1ZGVTZWxmIHx8ICF3aWR0aCgpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBpbnQgYm90dG9tID0gbV9oZWlnaHQ7CisgICAgaW50IGJvdHRvbSA9IGhlaWdodCgpOwogICAg
IGlmIChpc1JlbFBvc2l0aW9uZWQoKSkKICAgICAgICAgYm90dG9tICs9IHJlbGF0aXZlUG9zaXRp
b25PZmZzZXRZKCk7CiAgICAgcmV0dXJuIGJvdHRvbTsKQEAgLTI3NTAsOSArMjc0NSw5IEBAIGlu
dCBSZW5kZXJCb3g6Omxvd2VzdFBvc2l0aW9uKGJvb2wgLyppbmMKIAogaW50IFJlbmRlckJveDo6
cmlnaHRtb3N0UG9zaXRpb24oYm9vbCAvKmluY2x1ZGVPdmVyZmxvd0ludGVyaW9yKi8sIGJvb2wg
aW5jbHVkZVNlbGYpIGNvbnN0CiB7Ci0gICAgaWYgKCFpbmNsdWRlU2VsZiB8fCAhbV9oZWlnaHQp
CisgICAgaWYgKCFpbmNsdWRlU2VsZiB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIGludCByaWdodCA9IG1fd2lkdGg7CisgICAgaW50IHJpZ2h0ID0gd2lkdGgoKTsKICAgICBp
ZiAoaXNSZWxQb3NpdGlvbmVkKCkpCiAgICAgICAgIHJpZ2h0ICs9IHJlbGF0aXZlUG9zaXRpb25P
ZmZzZXRYKCk7CiAgICAgcmV0dXJuIHJpZ2h0OwpAQCAtMjc2MCw4ICsyNzU1LDggQEAgaW50IFJl
bmRlckJveDo6cmlnaHRtb3N0UG9zaXRpb24oYm9vbCAvKgogCiBpbnQgUmVuZGVyQm94OjpsZWZ0
bW9zdFBvc2l0aW9uKGJvb2wgLyppbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciovLCBib29sIGluY2x1
ZGVTZWxmKSBjb25zdAogewotICAgIGlmICghaW5jbHVkZVNlbGYgfHwgIW1faGVpZ2h0KQotICAg
ICAgICByZXR1cm4gbV93aWR0aDsKKyAgICBpZiAoIWluY2x1ZGVTZWxmIHx8ICFoZWlnaHQoKSkK
KyAgICAgICAgcmV0dXJuIHdpZHRoKCk7CiAgICAgaW50IGxlZnQgPSAwOwogICAgIGlmIChpc1Jl
bFBvc2l0aW9uZWQoKSkKICAgICAgICAgbGVmdCArPSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgp
OwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9S
ZW5kZXJCb3guaAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDU3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJCb3giOyB9CiAKKyAg
ICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LngoKTsgfQorICAgIGludCB5KCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QueSgpICsgaW50cmluc2ljUGFkZGluZ1RvcCgpOyB9
IC8vIEZJWE1FOiBOZWVkIHRvIGRlYWwgd2l0aCB0aGUgaW50cmluc2ljUGFkZGluZ1RvcCgpIGxp
ZSBpbiBhIHNhbmUgd2F5LgorICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVS
ZWN0LndpZHRoKCk7IH0KKyAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3QuaGVpZ2h0KCk7IH0KKyAgICAKKyAgICB2b2lkIHNldFgoaW50IHgpIHsgbV9mcmFtZVJlY3Qu
c2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShpbnQgeSkgeyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9
CisgICAgdm9pZCBzZXRXaWR0aChpbnQgd2lkdGgpIHsgbV9mcmFtZVJlY3Quc2V0V2lkdGgod2lk
dGgpOyB9CisgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBtX2ZyYW1lUmVjdC5zZXRI
ZWlnaHQoaGVpZ2h0KTsgfQorICAgIAorICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZVJlY3QubG9jYXRpb24oKTsgfSAvLyBGSVhNRTogQmUgYXdhcmUgdGhhdCB0
aGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIHgoKSwgeSgpIGJlY2F1c2Ugb2YgeSgpJ3MgaW50cmlu
c2ljUGFkZGluZ1RvcCgpIGxpZSEKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lUmVjdC5zaXplKCk7IH0KKworICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgSW50UG9p
bnQmIGxvY2F0aW9uKSB7IHNldExvY2F0aW9uKGxvY2F0aW9uLngoKSwgbG9jYXRpb24ueSgpKTsg
fQorICAgIHZvaWQgc2V0TG9jYXRpb24oaW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgLy8g
T3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGRvbid0IG1vdmUgYXQgYWxsLgorICAgICAg
ICBpZiAoeCA9PSBtX2ZyYW1lUmVjdC54KCkgJiYgeSA9PSBtX2ZyYW1lUmVjdC55KCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIG1fZnJhbWVSZWN0LnNldFgoeCk7CisgICAgICAgIG1f
ZnJhbWVSZWN0LnNldFkoeSk7CisgICAgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKSB7IG1fZnJhbWVSZWN0LnNldFNpemUoc2l6ZSk7IH0KKyAgICB2b2lkIG1vdmUoaW50
IGR4LCBpbnQgZHkpIHsgbV9mcmFtZVJlY3QubW92ZShkeCwgZHkpOyB9CisKKyAgICBJbnRSZWN0
IGZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisgICAgdm9pZCBzZXRG
cmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2ZyYW1lUmVjdCA9IHJlY3Q7IH0KKwor
ICAgIEludFJlY3QgYm9yZGVyQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoMCwgLWlu
dHJpbnNpY1BhZGRpbmdUb3AoKSwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBpbnRyaW5zaWNQYWRkaW5n
VG9wKCkgKyBpbnRyaW5zaWNQYWRkaW5nQm90dG9tKCkpOyB9CisKKyAgICAvLyBVc2UgdGhpcyB3
aXRoIGNhdXRpb24hIE5vIHR5cGUgY2hlY2tpbmcgaXMgZG9uZSEKKyAgICBSZW5kZXJCb3gqIHBy
ZXZpb3VzU2libGluZ0JveCgpIGNvbnN0IHsgQVNTRVJUKCFwcmV2aW91c1NpYmxpbmcoKSB8fCBw
cmV2aW91c1NpYmxpbmcoKS0+aXNCb3goKSk7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gq
PihwcmV2aW91c1NpYmxpbmcoKSk7IH0KKyAgICBSZW5kZXJCb3gqIG5leHRTaWJsaW5nQm94KCkg
Y29uc3QgeyBBU1NFUlQoIW5leHRTaWJsaW5nKCkgfHwgbmV4dFNpYmxpbmcoKS0+aXNCb3goKSk7
IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihuZXh0U2libGluZygpKTsgfQorICAgIFJl
bmRlckJveCogcGFyZW50Qm94KCkgY29uc3QgeyBBU1NFUlQoIXBhcmVudCgpIHx8IHBhcmVudCgp
LT5pc0JveCgpKTsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHBhcmVudCgpKTsgfQor
CisgICAgLy8gVGhlIGhlaWdodCBvZiBhIGJsb2NrIHdoZW4geW91IGluY2x1ZGUgbm9ybWFsIGZs
b3cgb3ZlcmZsb3cgc3BpbGxhZ2Ugb3V0IG9mIHRoZSBib3R0b20KKyAgICAvLyBvZiB0aGUgYmxv
Y2sgKGUuZy4sIGEgPGRpdiBzdHlsZT0iaGVpZ2h0OjI1cHgiPiB0aGF0IGhhcyBhIDEwMHB4IHRh
bGwgaW1hZ2UgaW5zaWRlCisgICAgLy8gaXQgd291bGQgaGF2ZSBhbiBvdmVyZmxvdyBoZWlnaHQg
b2YgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyAxMDBweC4KKyAgICB2aXJ0dWFsIGludCBv
dmVyZmxvd0hlaWdodChib29sIC8qaW5jbHVkZUludGVyaW9yKi8gPSB0cnVlKSBjb25zdCB7IHJl
dHVybiBoZWlnaHQoKTsgfQorICAgIHZpcnR1YWwgaW50IG92ZXJmbG93V2lkdGgoYm9vbCAvKmlu
Y2x1ZGVJbnRlcmlvciovID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gd2lkdGgoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXRPdmVyZmxvd0hlaWdodChpbnQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRPdmVyZmxvd1dpZHRoKGludCkgeyB9CisgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dMZWZ0KGJv
b2wgLyppbmNsdWRlSW50ZXJpb3IqLyA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIGludCBvdmVyZmxvd1RvcChib29sIC8qaW5jbHVkZUludGVyaW9yKi8gPSB0cnVlKSBj
b25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBJbnRSZWN0IG92ZXJmbG93UmVjdChib29s
IC8qaW5jbHVkZUludGVyaW9yKi8gPSB0cnVlKSBjb25zdCB7IHJldHVybiBib3JkZXJCb3hSZWN0
KCk7IH0KKworICAgIC8vIElFIGV4dGVuc2lvbnMuIFVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldFdp
ZHRoL0hlaWdodC4gIE92ZXJyaWRkZW4gYnkgaW5saW5lcyAoUmVuZGVyRmxvdykKKyAgICAvLyB0
byByZXR1cm4gdGhlIHJlbWFpbmluZyB3aWR0aCBvbiBhIGdpdmVuIGxpbmUgKGFuZCB0aGUgaGVp
Z2h0IG9mIGEgc2luZ2xlIGxpbmUpLgorICAgIGludCBvZmZzZXRXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIHdpZHRoKCk7IH0KKyAgICBpbnQgb2Zmc2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gaGVp
Z2h0KCkgKyBpbnRyaW5zaWNQYWRkaW5nVG9wKCkgKyBpbnRyaW5zaWNQYWRkaW5nQm90dG9tKCk7
IH0KKwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7
CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OwogCkBAIC01NSwyMiArMTA2LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50U2l6ZSBv
ZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBp
bnQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQotICAgIHZpcnR1YWwgaW50IHlQb3MoKSBj
b25zdCB7IHJldHVybiBtX3k7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zKGludCB4LCBpbnQg
eSk7Ci0KLSAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0K
LSAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRXaWR0aChpbnQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEhlaWdodChpbnQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0
OyB9Ci0KICAgICB2aXJ0dWFsIGludCBtYXJnaW5Ub3AoKSBjb25zdCB7IHJldHVybiBtX21hcmdp
blRvcDsgfQogICAgIHZpcnR1YWwgaW50IG1hcmdpbkJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFyZ2luQm90dG9tOyB9CiAgICAgdmlydHVhbCBpbnQgbWFyZ2luTGVmdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFyZ2luTGVmdDsgfQogICAgIHZpcnR1YWwgaW50IG1hcmdpblJpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9tYXJnaW5SaWdodDsgfQogCi0gICAgdmlydHVhbCBJbnRSZWN0IGJvcmRlckJv
eCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoMCwgLWJvcmRlclRvcEV4dHJhKCksIHdpZHRoKCks
IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCkpOyB9Ci0K
ICAgICBpbnQgY2FsY0JvcmRlckJveFdpZHRoKGludCB3aWR0aCkgY29uc3Q7CiAgICAgaW50IGNh
bGNCb3JkZXJCb3hIZWlnaHQoaW50IGhlaWdodCkgY29uc3Q7CiAgICAgaW50IGNhbGNDb250ZW50
Qm94V2lkdGgoaW50IHdpZHRoKSBjb25zdDsKQEAgLTE2NSwxNiArMjA1LDE2IEBAIHB1YmxpYzoK
ICAgICAvLyB0aGF0IGp1c3QgdXBkYXRlcyB0aGUgb2JqZWN0J3MgcG9zaXRpb24uCiAgICAgdmly
dHVhbCB2b2lkIHRyeUxheW91dERvaW5nUG9zaXRpb25lZE1vdmVtZW50T25seSgpCiAgICAgewot
ICAgICAgICBpbnQgb2xkV2lkdGggPSBtX3dpZHRoOworICAgICAgICBpbnQgb2xkV2lkdGggPSB3
aWR0aCgpOwogICAgICAgICBjYWxjV2lkdGgoKTsKICAgICAgICAgLy8gSWYgd2Ugc2hyaW5rIHRv
IGZpdCBvdXIgd2lkdGggbWF5IGhhdmUgY2hhbmdlZCwgc28gd2Ugc3RpbGwgbmVlZCBmdWxsIGxh
eW91dC4KLSAgICAgICAgaWYgKG9sZFdpZHRoICE9IG1fd2lkdGgpCisgICAgICAgIGlmIChvbGRX
aWR0aCAhPSB3aWR0aCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYWxjSGVpZ2h0
KCk7CiAgICAgICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKICAgICB9CiAKLSAgICB2aXJ0dWFs
IEludFJlY3QgbWFza0NsaXBSZWN0KCk7CisgICAgSW50UmVjdCBtYXNrQ2xpcFJlY3QoKTsKICAg
ICAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFJlbmRlclN0
eWxlOjpEaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOwpAQCAtMjIyLDEyICsyNjIs
OCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpID0gMDsKIAog
cHJvdGVjdGVkOgotICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQgb2YgdGhlIGNvbnRlbnRzICsgYm9y
ZGVycyArIHBhZGRpbmcuCi0gICAgaW50IG1fd2lkdGg7Ci0gICAgaW50IG1faGVpZ2h0OwotCi0g
ICAgaW50IG1feDsKLSAgICBpbnQgbV95OworICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQgb2YgdGhl
IGNvbnRlbnRzICsgYm9yZGVycyArIHBhZGRpbmcuICBUaGUgeC95IGxvY2F0aW9uIGlzIHJlbGF0
aXZlIHRvIG91ciBjb250YWluZXIgKHdoaWNoIGlzIG5vdCBhbHdheXMgb3VyIHBhcmVudCkuCisg
ICAgSW50UmVjdCBtX2ZyYW1lUmVjdDsKIAogICAgIGludCBtX21hcmdpbkxlZnQ7CiAgICAgaW50
IG1fbWFyZ2luUmlnaHQ7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBy
ZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3
IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjp1cGRhdGVCZWZvcmVBZnRlckNvbnQKIEludFJlY3QgUmVu
ZGVyQnV0dG9uOjpjb250cm9sQ2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpIGNvbnN0CiB7CiAgICAg
Ly8gQ2xpcCB0byB0aGUgcGFkZGluZyBib3ggdG8gYXQgbGVhc3QgZ2l2ZSBjb250ZW50IHRoZSBl
eHRyYSBwYWRkaW5nIHNwYWNlLgotICAgIHJldHVybiBJbnRSZWN0KHR4ICsgYm9yZGVyTGVmdCgp
LCB0eSArIGJvcmRlclRvcCgpLCBtX3dpZHRoIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQo
KSwgbV9oZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKKyAgICByZXR1cm4g
SW50UmVjdCh0eCArIGJvcmRlckxlZnQoKSwgdHkgKyBib3JkZXJUb3AoKSwgd2lkdGgoKSAtIGJv
cmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCksIGhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3Jk
ZXJCb3R0b20oKSk7CiB9CiAKIHZvaWQgUmVuZGVyQnV0dG9uOjp0aW1lckZpcmVkKFRpbWVyPFJl
bmRlckJ1dHRvbj4qKQpJbmRleDogcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDQwMDc1KQor
KysgcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNCw3
ICs1MjQsNyBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7CiAKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIo
dmlldygpLCB0aGlzLCBJbnRTaXplKG1feCwgbV95KSk7CisgICAgTGF5b3V0U3RhdGVNYWludGFp
bmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIG1fZnJhbWVSZWN0Lnko
KSkpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG1fZmlyc3RDaGlsZDsKICAgICB3aGls
ZSAoY2hpbGQpIHsKQEAgLTU4MCw3ICs1ODAsNyBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6cmVt
b3ZlTGVmdG92ZXJBbm9uCiAgICAgY2hpbGQtPmRlc3Ryb3koKTsKIH0KIAotVmlzaWJsZVBvc2l0
aW9uIFJlbmRlckNvbnRhaW5lcjo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkp
CitWaXNpYmxlUG9zaXRpb24gUmVuZGVyQ29udGFpbmVyOjpwb3NpdGlvbkZvckNvb3JkaW5hdGVz
KGludCB4UG9zLCBpbnQgeVBvcykKIHsKICAgICAvLyBubyBjaGlsZHJlbi4uLnJldHVybiB0aGlz
IHJlbmRlciBvYmplY3QncyBlbGVtZW50LCBpZiB0aGVyZSBpcyBvbmUsIGFuZCBvZmZzZXQgMAog
ICAgIGlmICghbV9maXJzdENoaWxkKQpAQCAtNTkwLDggKzU5MCw4IEBAIFZpc2libGVQb3NpdGlv
biBSZW5kZXJDb250YWluZXI6OnBvc2l0aW8KICAgICAgICAgaW50IHJpZ2h0ID0gY29udGVudFdp
ZHRoKCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBw
YWRkaW5nTGVmdCgpOwogICAgICAgICBpbnQgYm90dG9tID0gY29udGVudEhlaWdodCgpICsgYm9y
ZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20o
KTsKICAgICAgICAgCi0gICAgICAgIGlmICh4IDwgMCB8fCB4ID4gcmlnaHQgfHwgeSA8IDAgfHwg
eSA+IGJvdHRvbSkgewotICAgICAgICAgICAgaWYgKHggPD0gcmlnaHQgLyAyKQorICAgICAgICBp
ZiAoeFBvcyA8IDAgfHwgeFBvcyA+IHJpZ2h0IHx8IHlQb3MgPCAwIHx8IHlQb3MgPiBib3R0b20p
IHsKKyAgICAgICAgICAgIGlmICh4UG9zIDw9IHJpZ2h0IC8gMikKICAgICAgICAgICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGVsZW1lbnQoKSwgMCkpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24o
ZWxlbWVudCgpLCBtYXhEZWVwT2Zmc2V0KGVsZW1lbnQoKSkpKTsKQEAgLTYwMCw1NSArNjAwLDYw
IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJDb250YWluZXI6OnBvc2l0aW8KIAogICAgIC8vIFBh
c3Mgb2ZmIHRvIHRoZSBjbG9zZXN0IGNoaWxkLgogICAgIGludCBtaW5EaXN0ID0gSU5UX01BWDsK
LSAgICBSZW5kZXJPYmplY3QqIGNsb3Nlc3RSZW5kZXJlciA9IDA7Ci0gICAgaW50IG5ld1ggPSB4
OwotICAgIGludCBuZXdZID0geTsKKyAgICBSZW5kZXJCb3gqIGNsb3Nlc3RSZW5kZXJlciA9IDA7
CisgICAgaW50IG5ld1ggPSB4UG9zOworICAgIGludCBuZXdZID0geVBvczsKICAgICBpZiAoaXNU
YWJsZVJvdygpKSB7Ci0gICAgICAgIG5ld1ggKz0geFBvcygpOwotICAgICAgICBuZXdZICs9IHlQ
b3MoKTsKKyAgICAgICAgbmV3WCArPSB4KCk7CisgICAgICAgIG5ld1kgKz0geSgpOwogICAgIH0K
LSAgICBmb3IgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2ZpcnN0Q2hpbGQ7IHJlbmRlcmVy
OyByZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghcmVu
ZGVyZXItPmZpcnN0Q2hpbGQoKSAmJiAhcmVuZGVyZXItPmlzSW5saW5lKCkgJiYgIXJlbmRlcmVy
LT5pc0Jsb2NrRmxvdygpIAotICAgICAgICAgICAgfHwgcmVuZGVyZXItPnN0eWxlKCktPnZpc2li
aWxpdHkoKSAhPSBWSVNJQkxFKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qg
PSBtX2ZpcnN0Q2hpbGQ7IHJlbmRlck9iamVjdDsgcmVuZGVyT2JqZWN0ID0gcmVuZGVyT2JqZWN0
LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghcmVuZGVyT2JqZWN0LT5maXJzdENoaWxk
KCkgJiYgIXJlbmRlck9iamVjdC0+aXNJbmxpbmUoKSAmJiAhcmVuZGVyT2JqZWN0LT5pc0Jsb2Nr
RmxvdygpIAorICAgICAgICAgICAgfHwgcmVuZGVyT2JqZWN0LT5zdHlsZSgpLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAg
aW50IHRvcCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgKGlzVGFibGVSb3coKSA/IDAg
OiByZW5kZXJlci0+eVBvcygpKTsKKyAgICAgICAgaWYgKCFyZW5kZXJPYmplY3QtPmlzQm94KCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIFJlbmRlckJveCogcmVu
ZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihyZW5kZXJPYmplY3QpOworCisgICAgICAg
IGludCB0b3AgPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIChpc1RhYmxlUm93KCkgPyAw
IDogcmVuZGVyZXItPnkoKSk7CiAgICAgICAgIGludCBib3R0b20gPSB0b3AgKyByZW5kZXJlci0+
Y29udGVudEhlaWdodCgpOwotICAgICAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRp
bmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gMCA6IHJlbmRlcmVyLT54UG9zKCkpOworICAgICAg
ICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygp
ID8gMCA6IHJlbmRlcmVyLT54KCkpOwogICAgICAgICBpbnQgcmlnaHQgPSBsZWZ0ICsgcmVuZGVy
ZXItPmNvbnRlbnRXaWR0aCgpOwogICAgICAgICAKLSAgICAgICAgaWYgKHggPD0gcmlnaHQgJiYg
eCA+PSBsZWZ0ICYmIHkgPD0gdG9wICYmIHkgPj0gYm90dG9tKSB7CisgICAgICAgIGlmICh4UG9z
IDw9IHJpZ2h0ICYmIHhQb3MgPj0gbGVmdCAmJiB5UG9zIDw9IHRvcCAmJiB5UG9zID49IGJvdHRv
bSkgewogICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1RhYmxlUm93KCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKHggKyBuZXdYIC0g
cmVuZGVyZXItPnhQb3MoKSwgeSArIG5ld1kgLSByZW5kZXJlci0+eVBvcygpKTsKLSAgICAgICAg
ICAgIHJldHVybiByZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4IC0gcmVuZGVyZXIt
PnhQb3MoKSwgeSAtIHJlbmRlcmVyLT55UG9zKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4UG9zICsgbmV3WCAtIHJlbmRlcmVyLT54
KCksIHlQb3MgKyBuZXdZIC0gcmVuZGVyZXItPnkoKSk7CisgICAgICAgICAgICByZXR1cm4gcmVu
ZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeFBvcyAtIHJlbmRlcmVyLT54KCksIHlQb3Mg
LSByZW5kZXJlci0+eSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZpbmQgdGhlIGRpc3Rh
bmNlIGZyb20gKHgsIHkpIHRvIHRoZSBib3guICBTcGxpdCB0aGUgc3BhY2UgYXJvdW5kIHRoZSBi
b3ggaW50byA4IHBpZWNlcwogICAgICAgICAvLyBhbmQgdXNlIGEgZGlmZmVyZW50IGNvbXBhcmUg
ZGVwZW5kaW5nIG9uIHdoaWNoIHBpZWNlICh4LCB5KSBpcyBpbi4KICAgICAgICAgSW50UG9pbnQg
Y21wOwotICAgICAgICBpZiAoeCA+IHJpZ2h0KSB7Ci0gICAgICAgICAgICBpZiAoeSA8IHRvcCkK
KyAgICAgICAgaWYgKHhQb3MgPiByaWdodCkgeworICAgICAgICAgICAgaWYgKHlQb3MgPCB0b3Ap
CiAgICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQocmlnaHQsIHRvcCk7Ci0gICAgICAgICAg
ICBlbHNlIGlmICh5ID4gYm90dG9tKQorICAgICAgICAgICAgZWxzZSBpZiAoeVBvcyA+IGJvdHRv
bSkKICAgICAgICAgICAgICAgICBjbXAgPSBJbnRQb2ludChyaWdodCwgYm90dG9tKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjbXAgPSBJbnRQb2ludChyaWdodCwgeSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoeCA8IGxlZnQpIHsKLSAgICAgICAgICAgIGlmICh5IDwgdG9wKQor
ICAgICAgICAgICAgICAgIGNtcCA9IEludFBvaW50KHJpZ2h0LCB5UG9zKTsKKyAgICAgICAgfSBl
bHNlIGlmICh4UG9zIDwgbGVmdCkgeworICAgICAgICAgICAgaWYgKHlQb3MgPCB0b3ApCiAgICAg
ICAgICAgICAgICAgY21wID0gSW50UG9pbnQobGVmdCwgdG9wKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKHkgPiBib3R0b20pCisgICAgICAgICAgICBlbHNlIGlmICh5UG9zID4gYm90dG9tKQogICAg
ICAgICAgICAgICAgIGNtcCA9IEludFBvaW50KGxlZnQsIGJvdHRvbSk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQobGVmdCwgeSk7CisgICAgICAgICAg
ICAgICAgY21wID0gSW50UG9pbnQobGVmdCwgeVBvcyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoeSA8IHRvcCkKLSAgICAgICAgICAgICAgICBjbXAgPSBJbnRQb2ludCh4LCB0
b3ApOworICAgICAgICAgICAgaWYgKHlQb3MgPCB0b3ApCisgICAgICAgICAgICAgICAgY21wID0g
SW50UG9pbnQoeFBvcywgdG9wKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBj
bXAgPSBJbnRQb2ludCh4LCBib3R0b20pOworICAgICAgICAgICAgICAgIGNtcCA9IEludFBvaW50
KHhQb3MsIGJvdHRvbSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGludCB4MW1pbnVz
eDIgPSBjbXAueCgpIC0geDsKLSAgICAgICAgaW50IHkxbWludXN5MiA9IGNtcC55KCkgLSB5Owor
ICAgICAgICBpbnQgeDFtaW51c3gyID0gY21wLngoKSAtIHhQb3M7CisgICAgICAgIGludCB5MW1p
bnVzeTIgPSBjbXAueSgpIC0geVBvczsKICAgICAgICAgCiAgICAgICAgIGludCBkaXN0ID0geDFt
aW51c3gyICogeDFtaW51c3gyICsgeTFtaW51c3kyICogeTFtaW51c3kyOwogICAgICAgICBpZiAo
ZGlzdCA8IG1pbkRpc3QpIHsKQEAgLTY1OCw3ICs2NjMsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVu
ZGVyQ29udGFpbmVyOjpwb3NpdGlvCiAgICAgfQogICAgIAogICAgIGlmIChjbG9zZXN0UmVuZGVy
ZXIpCi0gICAgICAgIHJldHVybiBjbG9zZXN0UmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0
ZXMobmV3WCAtIGNsb3Nlc3RSZW5kZXJlci0+eFBvcygpLCBuZXdZIC0gY2xvc2VzdFJlbmRlcmVy
LT55UG9zKCkpOworICAgICAgICByZXR1cm4gY2xvc2VzdFJlbmRlcmVyLT5wb3NpdGlvbkZvckNv
b3JkaW5hdGVzKG5ld1ggLSBjbG9zZXN0UmVuZGVyZXItPngoKSwgbmV3WSAtIGNsb3Nlc3RSZW5k
ZXJlci0+eSgpKTsKICAgICAKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnQoKSwg
MCwgRE9XTlNUUkVBTSk7CiB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oCShyZXZpc2lvbiA0MDA3NSkK
KysrIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkg
Y29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9CiAKKyAgICAvLyBVc2Ug
dGhpcyB3aXRoIGNhdXRpb24hIE5vIHR5cGUgY2hlY2tpbmcgaXMgZG9uZSEKKyAgICBSZW5kZXJC
b3gqIGZpcnN0Q2hpbGRCb3goKSBjb25zdCB7IEFTU0VSVCghZmlyc3RDaGlsZCgpIHx8IGZpcnN0
Q2hpbGQtPmlzQm94KCkpOyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obV9maXJzdENo
aWxkKTsgfQorICAgIFJlbmRlckJveCogbGFzdENoaWxkQm94KCkgY29uc3QgeyBBU1NFUlQoIWxh
c3RDaGlsZCgpIHx8IGxhc3RDaGlsZC0+aXNCb3goKSk7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJCb3gqPihtX2xhc3RDaGlsZCk7IH0KKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNo
aWxkcmVuKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCog
bmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CkBAIC02NSw3ICs2OSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkTGluZUJveFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gVUlOVF9NQVgsIGJvb2wg
dXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwogICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0QWJz
b2x1dGVMaW5lQm94UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhl
aWdodCA9IGZhbHNlKTsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBSZW5kZXJPYmplY3Qq
IG1fZmlyc3RDaGlsZDsKICAgICBSZW5kZXJPYmplY3QqIG1fbGFzdENoaWxkOwogfTsKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1Jl
bmRlckZpZWxkc2V0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyRmll
bGRzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIFJlbmRlckZpZWxkc2V0
OjpSZW5kZXJGaWVsZHNldChOb2RlKiBlbGUKIHZvaWQgUmVuZGVyRmllbGRzZXQ6OmNhbGNQcmVm
V2lkdGhzKCkKIHsKICAgICBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMoKTsKLSAgICBpZiAo
UmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCkpIHsKKyAgICBpZiAoUmVuZGVyQm94
KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCkpIHsKICAgICAgICAgaW50IGxlZ2VuZE1pbldpZHRoID0g
bGVnZW5kLT5taW5QcmVmV2lkdGgoKTsKIAogICAgICAgICBMZW5ndGggbGVnZW5kTWFyZ2luTGVm
dCA9IGxlZ2VuZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpOwpAQCAtNjYsNyArNjYsNyBAQCB2b2lk
IFJlbmRlckZpZWxkc2V0OjpjYWxjUHJlZldpZHRocygpCiAKIFJlbmRlck9iamVjdCogUmVuZGVy
RmllbGRzZXQ6OmxheW91dExlZ2VuZChib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiB7Ci0gICAgUmVu
ZGVyT2JqZWN0KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCk7CisgICAgUmVuZGVyQm94KiBsZWdlbmQg
PSBmaW5kTGVnZW5kKCk7CiAgICAgaWYgKGxlZ2VuZCkgewogICAgICAgICBpZiAocmVsYXlvdXRD
aGlsZHJlbikKICAgICAgICAgICAgIGxlZ2VuZC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CkBAIC03
OSwxOCArNzksMTggQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6bGF5b3V0TGVnZQog
ICAgICAgICAgICAgICAgICAgICB4UG9zID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBDRU5URVI6
Ci0gICAgICAgICAgICAgICAgICAgIHhQb3MgPSAobV93aWR0aCAtIGxlZ2VuZC0+d2lkdGgoKSkg
LyAyOworICAgICAgICAgICAgICAgICAgICB4UG9zID0gKHdpZHRoKCkgLSBsZWdlbmQtPndpZHRo
KCkpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgeFBvcyA9IG1fd2lkdGggLSBwYWRkaW5nUmlnaHQo
KSAtIGJvcmRlclJpZ2h0KCkgLSBsZWdlbmQtPndpZHRoKCkgLSBsZWdlbmQtPm1hcmdpblJpZ2h0
KCk7CisgICAgICAgICAgICAgICAgICAgIHhQb3MgPSB3aWR0aCgpIC0gcGFkZGluZ1JpZ2h0KCkg
LSBib3JkZXJSaWdodCgpIC0gbGVnZW5kLT53aWR0aCgpIC0gbGVnZW5kLT5tYXJnaW5SaWdodCgp
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3dpdGNoIChs
ZWdlbmQtPnN0eWxlKCktPnRleHRBbGlnbigpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBSSUdI
VDoKLSAgICAgICAgICAgICAgICAgICAgeFBvcyA9IG1fd2lkdGggLSBwYWRkaW5nUmlnaHQoKSAt
IGJvcmRlclJpZ2h0KCkgLSBsZWdlbmQtPndpZHRoKCk7CisgICAgICAgICAgICAgICAgICAgIHhQ
b3MgPSB3aWR0aCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSBib3JkZXJSaWdodCgpIC0gbGVnZW5kLT53
aWR0aCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNl
IENFTlRFUjoKLSAgICAgICAgICAgICAgICAgICAgeFBvcyA9IChtX3dpZHRoIC0gbGVnZW5kLT53
aWR0aCgpKSAvIDI7CisgICAgICAgICAgICAgICAgICAgIHhQb3MgPSAod2lkdGgoKSAtIGxlZ2Vu
ZC0+d2lkdGgoKSkgLyAyOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICB4UG9zID0gYm9yZGVyTGVmdCgpICsg
cGFkZGluZ0xlZnQoKSArIGxlZ2VuZC0+bWFyZ2luTGVmdCgpOwpAQCAtOTgsMTMgKzk4LDEzIEBA
IFJlbmRlck9iamVjdCogUmVuZGVyRmllbGRzZXQ6OmxheW91dExlZ2UKICAgICAgICAgfQogICAg
ICAgICBpbnQgYiA9IGJvcmRlclRvcCgpOwogICAgICAgICBpbnQgaCA9IGxlZ2VuZC0+aGVpZ2h0
KCk7Ci0gICAgICAgIGxlZ2VuZC0+c2V0UG9zKHhQb3MsIG1heCgoYi1oKS8yLCAwKSk7Ci0gICAg
ICAgIG1faGVpZ2h0ID0gbWF4KGIsaCkgKyBwYWRkaW5nVG9wKCk7CisgICAgICAgIGxlZ2VuZC0+
c2V0TG9jYXRpb24oeFBvcywgbWF4KChiLWgpLzIsIDApKTsKKyAgICAgICAgc2V0SGVpZ2h0KG1h
eChiLGgpICsgcGFkZGluZ1RvcCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGxlZ2VuZDsKIH0KIAot
UmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZCgpIGNvbnN0CitSZW5kZXJC
b3gqIFJlbmRlckZpZWxkc2V0OjpmaW5kTGVnZW5kKCkgY29uc3QKIHsKICAgICBmb3IgKFJlbmRl
ck9iamVjdCogbGVnZW5kID0gZmlyc3RDaGlsZCgpOyBsZWdlbmQ7IGxlZ2VuZCA9IGxlZ2VuZC0+
bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIWxlZ2VuZC0+aXNGbG9hdGluZ09yUG9zaXRp
b25lZCgpICYmIGxlZ2VuZC0+ZWxlbWVudCgpICYmCkBAIC0xMTMsNyArMTEzLDcgQEAgUmVuZGVy
T2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZAogICAgICAgICAgICAgfHwgbGVnZW5k
LT5lbGVtZW50KCktPmhhc1RhZ05hbWUoV01MTmFtZXM6Omluc2VydGVkTGVnZW5kVGFnKQogI2Vu
ZGlmCiAgICAgICAgICAgICkKLSAgICAgICAgICAgIHJldHVybiBsZWdlbmQ7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obGVnZW5kKTsKICAgICB9CiAgICAgcmV0
dXJuIDA7CiB9CkBAIC0xMjEsMTUgKzEyMSwxNSBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckZpZWxk
c2V0OjpmaW5kTGVnZW5kCiB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJveERlY29yYXRpb25z
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBpbnQgdyA9IHdp
ZHRoKCk7Ci0gICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJC
b3R0b21FeHRyYSgpOwotICAgIFJlbmRlck9iamVjdCogbGVnZW5kID0gZmluZExlZ2VuZCgpOwor
ICAgIGludCBoID0gaGVpZ2h0KCkgKyBpbnRyaW5zaWNQYWRkaW5nVG9wKCkgKyBpbnRyaW5zaWNQ
YWRkaW5nQm90dG9tKCk7CisgICAgUmVuZGVyQm94KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCk7CiAg
ICAgaWYgKCFsZWdlbmQpCiAgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6cGFpbnRCb3hEZWNv
cmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CiAKLSAgICBpbnQgeU9mZiA9IChsZWdlbmQtPnlQ
b3MoKSA+IDApID8gMCA6IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVyVG9wKCkpIC8gMjsKLSAg
ICBpbnQgbGVnZW5kQm90dG9tID0gdHkgKyBsZWdlbmQtPnlQb3MoKSArIGxlZ2VuZC0+aGVpZ2h0
KCk7CisgICAgaW50IHlPZmYgPSAobGVnZW5kLT55KCkgPiAwKSA/IDAgOiAobGVnZW5kLT5oZWln
aHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7CisgICAgaW50IGxlZ2VuZEJvdHRvbSA9IHR5ICsgbGVn
ZW5kLT55KCkgKyBsZWdlbmQtPmhlaWdodCgpOwogICAgIGggLT0geU9mZjsKLSAgICB0eSArPSB5
T2ZmIC0gYm9yZGVyVG9wRXh0cmEoKTsKKyAgICB0eSArPSB5T2ZmIC0gaW50cmluc2ljUGFkZGlu
Z1RvcCgpOwogCiAgICAgaW50IG15ID0gbWF4KHR5LCBwYWludEluZm8ucmVjdC55KCkpOwogICAg
IGludCBlbmQgPSBtaW4ocGFpbnRJbmZvLnJlY3QuYm90dG9tKCksIHR5ICsgaCk7CkBAIC0xNDQs
NyArMTQ0LDcgQEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9ucwogCiAg
ICAgLy8gU2F2ZSB0aW1lIGJ5IG5vdCBzYXZpbmcgYW5kIHJlc3RvcmluZyB0aGUgR3JhcGhpY3ND
b250ZXh0IGluIHRoZSBzdHJhaWdodCBib3JkZXIgY2FzZQogICAgIGlmICghc3R5bGUoKS0+aGFz
Qm9yZGVyUmFkaXVzKCkpCi0gICAgICAgIHJldHVybiBwYWludEJvcmRlck1pbnVzTGVnZW5kKHBh
aW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIGxlZ2VuZC0+eFBvcygpLCBs
ZWdlbmQtPndpZHRoKCksIGxlZ2VuZEJvdHRvbSk7CisgICAgICAgIHJldHVybiBwYWludEJvcmRl
ck1pbnVzTGVnZW5kKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIGxl
Z2VuZC0+eCgpLCBsZWdlbmQtPndpZHRoKCksIGxlZ2VuZEJvdHRvbSk7CiAgICAgCiAgICAgLy8g
V2UgaGF2ZSByb3VuZGVkIGJvcmRlcnMsIGNyZWF0ZSBhIGNsaXBwaW5nIHJlZ2lvbiAKICAgICAv
LyBhcm91bmQgdGhlIGxlZ2VuZCBhbmQgcGFpbnQgdGhlIGJvcmRlciBhcyBub3JtYWwKQEAgLTE1
NCw3ICsxNTQsNyBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJveERlY29yYXRpb25zCiAg
ICAgaW50IGNsaXBUb3AgPSB0eTsKICAgICBpbnQgY2xpcEhlaWdodCA9IG1heChzdGF0aWNfY2Fz
dDxpbnQ+KHN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCkpLCBsZWdlbmQtPmhlaWdodCgpKTsKIAot
ICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcE91dChJbnRSZWN0KHR4ICsgbGVnZW5kLT54UG9zKCks
IGNsaXBUb3AsCisgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwT3V0KEludFJlY3QodHggKyBsZWdl
bmQtPngoKSwgY2xpcFRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZ2VuZC0+d2lkdGgoKSwgY2xpcEhlaWdodCkpOwogICAgIHBhaW50Qm9yZGVyKHBhaW50SW5m
by5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIHRydWUsIHRydWUpOwogCkBAIC0xNjcs
MTQgKzE2NywxNCBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludE1hc2soUGFpbnRJbmZvCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGludCB3ID0gd2lkdGgoKTsKLSAgICBpbnQgaCA9IGhlaWdo
dCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7Ci0gICAgUmVuZGVy
T2JqZWN0KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCk7CisgICAgaW50IGggPSBoZWlnaHQoKSArIGlu
dHJpbnNpY1BhZGRpbmdUb3AoKSArIGludHJpbnNpY1BhZGRpbmdCb3R0b20oKTsKKyAgICBSZW5k
ZXJCb3gqIGxlZ2VuZCA9IGZpbmRMZWdlbmQoKTsKICAgICBpZiAoIWxlZ2VuZCkKICAgICAgICAg
cmV0dXJuIFJlbmRlckJsb2NrOjpwYWludE1hc2socGFpbnRJbmZvLCB0eCwgdHkpOwogCi0gICAg
aW50IHlPZmYgPSAobGVnZW5kLT55UG9zKCkgPiAwKSA/IDAgOiAobGVnZW5kLT5oZWlnaHQoKSAt
IGJvcmRlclRvcCgpKSAvIDI7CisgICAgaW50IHlPZmYgPSAobGVnZW5kLT55KCkgPiAwKSA/IDAg
OiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7CiAgICAgaCAtPSB5T2ZmOwot
ICAgIHR5ICs9IHlPZmYgLSBib3JkZXJUb3BFeHRyYSgpOworICAgIHR5ICs9IHlPZmYgLSBpbnRy
aW5zaWNQYWRkaW5nVG9wKCk7CiAKICAgICBpbnQgbXkgPSBtYXgodHksIHBhaW50SW5mby5yZWN0
LnkoKSk7CiAgICAgaW50IGVuZCA9IG1pbihwYWludEluZm8ucmVjdC5ib3R0b20oKSwgdHkgKyBo
KTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9SZW5kZXJGaWVsZHNldC5oCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5k
ZXJGaWVsZHNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkgY29uc3Qg
eyByZXR1cm4gc3R5bGUoKS0+aGVpZ2h0KCkuaXNBdXRvKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wg
c3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIFJlbmRlck9iamVjdCogZmluZExlZ2VuZCgpIGNvbnN0OworICAgIFJlbmRlckJveCogZmlu
ZExlZ2VuZCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlk
Q2hhbmdlKFJlbmRlclN0eWxlOjpEaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwpJ
bmRleDogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCShyZXZpc2lvbiA0MDA3NSkK
KysrIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRhdGVG
cm9tCiAKIGludCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6bWF4RmlsZW5hbWVXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1heCgwLCBjb250ZW50V2lkdGgoKSAtIG1fYnV0dG9uLT5yZW5k
ZXJlcigpLT53aWR0aCgpIC0gYWZ0ZXJCdXR0b25TcGFjaW5nCisgICAgcmV0dXJuIG1heCgwLCBj
b250ZW50V2lkdGgoKSAtIG1fYnV0dG9uLT5yZW5kZXJCb3goKS0+d2lkdGgoKSAtIGFmdGVyQnV0
dG9uU3BhY2luZwogICAgICAgICAtIChtX2ZpbGVDaG9vc2VyLT5pY29uKCkgPyBpY29uV2lkdGgg
KyBpY29uRmlsZW5hbWVTcGFjaW5nIDogMCkpOwogfQogCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9p
ZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogICAgICAgICAKICAgICAgICAg
Ly8gRGV0ZXJtaW5lIHdoZXJlIHRoZSBmaWxlbmFtZSBzaG91bGQgYmUgcGxhY2VkCiAgICAgICAg
IGludCBjb250ZW50TGVmdCA9IHR4ICsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKLSAg
ICAgICAgaW50IGJ1dHRvbkFuZEljb25XaWR0aCA9IG1fYnV0dG9uLT5yZW5kZXJlcigpLT53aWR0
aCgpICsgYWZ0ZXJCdXR0b25TcGFjaW5nCisgICAgICAgIGludCBidXR0b25BbmRJY29uV2lkdGgg
PSBtX2J1dHRvbi0+cmVuZGVyQm94KCktPndpZHRoKCkgKyBhZnRlckJ1dHRvblNwYWNpbmcKICAg
ICAgICAgICAgICsgKG1fZmlsZUNob29zZXItPmljb24oKSA/IGljb25XaWR0aCArIGljb25GaWxl
bmFtZVNwYWNpbmcgOiAwKTsKICAgICAgICAgaW50IHRleHRYOwogICAgICAgICBpZiAoc3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQpAQCAtMjEzLDkgKzIxMyw5IEBAIHZvaWQgUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMKICAgICAgICAgICAgIGludCBpY29uWSA9IHR5ICsg
Ym9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyAoY29udGVudEhlaWdodCgpIC0gaWNvbkhlaWdo
dCkgLyAyOwogICAgICAgICAgICAgaW50IGljb25YOwogICAgICAgICAgICAgaWYgKHN0eWxlKCkt
PmRpcmVjdGlvbigpID09IExUUikKLSAgICAgICAgICAgICAgICBpY29uWCA9IGNvbnRlbnRMZWZ0
ICsgbV9idXR0b24tPnJlbmRlcmVyKCktPndpZHRoKCkgKyBhZnRlckJ1dHRvblNwYWNpbmc7Cisg
ICAgICAgICAgICAgICAgaWNvblggPSBjb250ZW50TGVmdCArIG1fYnV0dG9uLT5yZW5kZXJCb3go
KS0+d2lkdGgoKSArIGFmdGVyQnV0dG9uU3BhY2luZzsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBpY29uWCA9IGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRoKCkgLSBtX2J1dHRv
bi0+cmVuZGVyZXIoKS0+d2lkdGgoKSAtIGFmdGVyQnV0dG9uU3BhY2luZyAtIGljb25XaWR0aDsK
KyAgICAgICAgICAgICAgICBpY29uWCA9IGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRoKCkgLSBt
X2J1dHRvbi0+cmVuZGVyQm94KCktPndpZHRoKCkgLSBhZnRlckJ1dHRvblNwYWNpbmcgLSBpY29u
V2lkdGg7CiAKICAgICAgICAgICAgIC8vIERyYXcgdGhlIGZpbGUgaWNvbgogICAgICAgICAgICAg
bV9maWxlQ2hvb3Nlci0+aWNvbigpLT5wYWludChwYWludEluZm8uY29udGV4dCwgSW50UmVjdChp
Y29uWCwgaWNvblksIGljb25XaWR0aCwgaWNvbkhlaWdodCkpOwpJbmRleDogcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmxleGli
bGVCb3guY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDExICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IGxhc3RPcmRpbmFsID0gMTsgCiAgICAgICAgIGlmICghZm9yd2FyZCkgewogICAgICAgICAgICAg
Ly8gTm8gY2hvaWNlLCBzaW5jZSB3ZSdyZSBnb2luZyBiYWNrd2FyZHMsIHdlIGhhdmUgdG8gZmlu
ZCBvdXQgdGhlIGhpZ2hlc3Qgb3JkaW5hbCB1cCBmcm9udC4KLSAgICAgICAgICAgIFJlbmRlck9i
amVjdCogY2hpbGQgPSBib3gtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIFJlbmRlckJveCog
Y2hpbGQgPSBib3gtPmZpcnN0Q2hpbGRCb3goKTsKICAgICAgICAgICAgIHdoaWxlIChjaGlsZCkg
ewogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+c3R5bGUoKS0+Ym94T3JkaW5hbEdyb3VwKCkg
PiBsYXN0T3JkaW5hbCkKICAgICAgICAgICAgICAgICAgICAgbGFzdE9yZGluYWwgPSBjaGlsZC0+
c3R5bGUoKS0+Ym94T3JkaW5hbEdyb3VwKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZ0JveCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApAQCAtNjEsMjkg
KzYxLDI4IEBAIHB1YmxpYzoKICAgICAgICAgY3VycmVudE9yZGluYWwgPSBmb3J3YXJkID8gMCA6
IGxhc3RPcmRpbmFsKzE7CiAgICAgfQogCi0gICAgUmVuZGVyT2JqZWN0KiBmaXJzdCgpIHsKKyAg
ICBSZW5kZXJCb3gqIGZpcnN0KCkgewogICAgICAgICByZXNldCgpOwogICAgICAgICByZXR1cm4g
bmV4dCgpOwogICAgIH0KICAgICAKLSAgICBSZW5kZXJPYmplY3QqIG5leHQoKSB7Ci0KKyAgICBS
ZW5kZXJCb3gqIG5leHQoKSB7CiAgICAgICAgIGRvIHsgCiAgICAgICAgICAgICBpZiAoIWN1cnJl
bnQpIHsKICAgICAgICAgICAgICAgICBpZiAoZm9yd2FyZCkgewogICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50T3JkaW5hbCsrOyAKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRPcmRp
bmFsID4gbGFzdE9yZGluYWwpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGJveC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50ID0gYm94LT5maXJzdENoaWxkQm94KCk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9yZGluYWwtLTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRPcmRpbmFsID09IDApCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGJveC0+bGFz
dENoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBib3gtPmxhc3RDaGlsZEJv
eCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBjdXJyZW50ID0gZm9yd2FyZCA/IGN1cnJlbnQtPm5leHRTaWJsaW5n
KCkgOiBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50
ID0gZm9yd2FyZCA/IGN1cnJlbnQtPm5leHRTaWJsaW5nQm94KCkgOiBjdXJyZW50LT5wcmV2aW91
c1NpYmxpbmdCb3goKTsKICAgICAgICAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQtPnN0eWxl
KCktPmJveE9yZGluYWxHcm91cCgpID4gbGFzdE9yZGluYWwpCiAgICAgICAgICAgICAgICAgbGFz
dE9yZGluYWwgPSBjdXJyZW50LT5zdHlsZSgpLT5ib3hPcmRpbmFsR3JvdXAoKTsKICAgICAgICAg
fSB3aGlsZSAoIWN1cnJlbnQgfHwgY3VycmVudC0+c3R5bGUoKS0+Ym94T3JkaW5hbEdyb3VwKCkg
IT0gY3VycmVudE9yZGluYWwgfHwKQEAgLTkzLDcgKzkyLDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIFJlbmRlckZsZXhpYmxlQm94KiBib3g7Ci0gICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50
OworICAgIFJlbmRlckJveCogY3VycmVudDsKICAgICBib29sIGZvcndhcmQ7CiAgICAgdW5zaWdu
ZWQgaW50IGN1cnJlbnRPcmRpbmFsOwogICAgIHVuc2lnbmVkIGludCBsYXN0T3JkaW5hbDsKQEAg
LTExMiwxMyArMTExLDEwIEBAIFJlbmRlckZsZXhpYmxlQm94Ojp+UmVuZGVyRmxleGlibGVCb3go
KQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjSG9yaXpvbnRhbFByZWZXaWR0aHMoKQog
ewotICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGNo
aWxkKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgewogICAgICAgICAvLyBwb3NpdGlv
bmVkIGNoaWxkcmVuIGRvbid0IGFmZmVjdCB0aGUgbWlubWF4d2lkdGgKLSAgICAgICAgaWYgKGNo
aWxkLT5pc1Bvc2l0aW9uZWQoKSB8fCBjaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IENP
TExBUFNFKSB7Ci0gICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAg
ICAgICBpZiAoY2hpbGQtPmlzUG9zaXRpb25lZCgpIHx8IGNoaWxkLT5zdHlsZSgpLT52aXNpYmls
aXR5KCkgPT0gQ09MTEFQU0UpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQogCiAg
ICAgICAgIC8vIEEgbWFyZ2luIGJhc2ljYWxseSBoYXMgdGhyZWUgdHlwZXM6IGZpeGVkLCBwZXJj
ZW50YWdlLCBhbmQgYXV0byAodmFyaWFibGUpLgogICAgICAgICAvLyBBdXRvIGFuZCBwZXJjZW50
YWdlIG1hcmdpbnMgc2ltcGx5IGJlY29tZSAwIHdoZW4gY29tcHV0aW5nIG1pbi9tYXggd2lkdGgu
CkBAIC0xMzQsMjEgKzEzMCwxNSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjSG9yaXpv
bnRhbFByCiAKICAgICAgICAgbV9taW5QcmVmV2lkdGggKz0gY2hpbGQtPm1pblByZWZXaWR0aCgp
ICsgbWFyZ2luOwogICAgICAgICBtX21heFByZWZXaWR0aCArPSBjaGlsZC0+bWF4UHJlZldpZHRo
KCkgKyBtYXJnaW47Ci0KLSAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAg
ICB9ICAgIAogfQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjVmVydGljYWxQcmVmV2lk
dGhzKCkKIHsKLSAgICBSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOwotICAgIHdo
aWxlKGNoaWxkICE9IDApCi0gICAgeworICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0
Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKICAg
ICAgICAgLy8gUG9zaXRpb25lZCBjaGlsZHJlbiBhbmQgY29sbGFwc2VkIGNoaWxkcmVuIGRvbid0
IGFmZmVjdCB0aGUgbWluL21heCB3aWR0aAotICAgICAgICBpZiAoY2hpbGQtPmlzUG9zaXRpb25l
ZCgpIHx8IGNoaWxkLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gQ09MTEFQU0UpIHsKLSAgICAg
ICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGlmIChjaGlsZC0+
aXNQb3NpdGlvbmVkKCkgfHwgY2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBDT0xMQVBT
RSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CiAKICAgICAgICAgLy8gQSBtYXJn
aW4gYmFzaWNhbGx5IGhhcyB0aHJlZSB0eXBlczogZml4ZWQsIHBlcmNlbnRhZ2UsIGFuZCBhdXRv
ICh2YXJpYWJsZSkuCiAgICAgICAgIC8vIEF1dG8vcGVyY2VudGFnZSBtYXJnaW5zIHNpbXBseSBi
ZWNvbWUgMCB3aGVuIGNvbXB1dGluZyBtaW4vbWF4IHdpZHRoLgpAQCAtMTY2LDggKzE1Niw2IEBA
IHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNWZXJ0aWNhbFByZWYKICAgICAgICAgCiAgICAg
ICAgIHcgPSBjaGlsZC0+bWF4UHJlZldpZHRoKCkgKyBtYXJnaW47CiAgICAgICAgIG1fbWF4UHJl
ZldpZHRoID0gbWF4KHcsIG1fbWF4UHJlZldpZHRoKTsKLQotICAgICAgICBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpOwogICAgIH0gICAgCiB9CiAKQEAgLTIyMCwyMSArMjA4LDIxIEBAIHZv
aWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKGJvb2wKICAgICAgICAgb2xkT3V0bGlu
ZUJveCA9IGFic29sdXRlT3V0bGluZUJvdW5kcygpOwogICAgIH0KIAotICAgIExheW91dFN0YXRl
TWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUobV94LCBtX3kpLCBo
YXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkpOworICAgIExheW91dFN0YXRlTWFpbnRh
aW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCBtX2ZyYW1lUmVjdC55
KCkpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkpOwogCi0gICAgaW50IHByZXZp
b3VzV2lkdGggPSBtX3dpZHRoOwotICAgIGludCBwcmV2aW91c0hlaWdodCA9IG1faGVpZ2h0Owor
ICAgIGludCBwcmV2aW91c1dpZHRoID0gd2lkdGgoKTsKKyAgICBpbnQgcHJldmlvdXNIZWlnaHQg
PSBoZWlnaHQoKTsKICAgICAKICAgICBjYWxjV2lkdGgoKTsKICAgICBjYWxjSGVpZ2h0KCk7Ci0g
ICAgbV9vdmVyZmxvd1dpZHRoID0gbV93aWR0aDsKKyAgICBtX292ZXJmbG93V2lkdGggPSB3aWR0
aCgpOwogCi0gICAgaWYgKHByZXZpb3VzV2lkdGggIT0gbV93aWR0aCB8fCBwcmV2aW91c0hlaWdo
dCAhPSBtX2hlaWdodCB8fAorICAgIGlmIChwcmV2aW91c1dpZHRoICE9IHdpZHRoKCkgfHwgcHJl
dmlvdXNIZWlnaHQgIT0gaGVpZ2h0KCkgfHwKICAgICAgICAgKHBhcmVudCgpLT5pc0ZsZXhpYmxl
Qm94KCkgJiYgcGFyZW50KCktPnN0eWxlKCktPmJveE9yaWVudCgpID09IEhPUklaT05UQUwgJiYK
ICAgICAgICAgIHBhcmVudCgpLT5zdHlsZSgpLT5ib3hBbGlnbigpID09IEJTVFJFVENIKSkKICAg
ICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CiAKLSAgICBtX2hlaWdodCA9IDA7CisgICAg
c2V0SGVpZ2h0KDApOwogICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSAwOwogICAgIG1fZmxleGluZ0No
aWxkcmVuID0gbV9zdHJldGNoaW5nQ2hpbGRyZW4gPSBmYWxzZTsKIApAQCAtMjUzLDIxICsyNDEs
MjEgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbAogICAgIGVsc2UK
ICAgICAgICAgbGF5b3V0VmVydGljYWxCb3gocmVsYXlvdXRDaGlsZHJlbik7CiAKLSAgICBpbnQg
b2xkSGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgaW50IG9sZEhlaWdodCA9IGhlaWdodCgpOwogICAg
IGNhbGNIZWlnaHQoKTsKLSAgICBpZiAob2xkSGVpZ2h0ICE9IG1faGVpZ2h0KSB7CisgICAgaWYg
KG9sZEhlaWdodCAhPSBoZWlnaHQoKSkgewogICAgICAgICAvLyBJZiB0aGUgYmxvY2sgZ290IGV4
cGFuZGVkIGluIHNpemUsIHRoZW4gaW5jcmVhc2Ugb3VyIG92ZXJmbG93aGVpZ2h0IHRvIG1hdGNo
LgotICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA+IG1faGVpZ2h0KQorICAgICAgICBpZiAo
bV9vdmVyZmxvd0hlaWdodCA+IGhlaWdodCgpKQogICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdo
dCAtPSAoYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCkpOwotICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA8IG1faGVpZ2h0KQot
ICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1faGVpZ2h0OworICAgICAgICBpZiAobV9v
dmVyZmxvd0hlaWdodCA8IGhlaWdodCgpKQorICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9
IGhlaWdodCgpOwogICAgIH0KLSAgICBpZiAocHJldmlvdXNIZWlnaHQgIT0gbV9oZWlnaHQpCisg
ICAgaWYgKHByZXZpb3VzSGVpZ2h0ICE9IGhlaWdodCgpKQogICAgICAgICByZWxheW91dENoaWxk
cmVuID0gdHJ1ZTsKIAogICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRy
ZW4gfHwgaXNSb290KCkpOwogCi0gICAgaWYgKCFpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYg
bV9oZWlnaHQgPT0gMCkgeworICAgIGlmICghaXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmIGhl
aWdodCgpID09IDApIHsKICAgICAgICAgLy8gV2UgYXJlIGEgYmxvY2sgd2l0aCBubyBib3JkZXIg
YW5kIHBhZGRpbmcgYW5kIGEgY29tcHV0ZWQgaGVpZ2h0CiAgICAgICAgIC8vIG9mIDAuICBUaGUg
Q1NTIHNwZWMgc3RhdGVzIHRoYXQgemVyby1oZWlnaHQgYmxvY2tzIGNvbGxhcHNlIHRoZWlyIG1h
cmdpbnMKICAgICAgICAgLy8gdG9nZXRoZXIuCkBAIC0yODYsMTUgKzI3NCwxNSBAQCB2b2lkIFJl
bmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sCiAgICAgfQogCiAgICAgLy8gQWx3YXlz
IGVuc3VyZSBvdXIgb3ZlcmZsb3cgd2lkdGggaXMgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgb3VyIHdp
ZHRoLgotICAgIGlmIChtX292ZXJmbG93V2lkdGggPCBtX3dpZHRoKQotICAgICAgICBtX292ZXJm
bG93V2lkdGggPSBtX3dpZHRoOworICAgIGlmIChtX292ZXJmbG93V2lkdGggPCB3aWR0aCgpKQor
ICAgICAgICBtX292ZXJmbG93V2lkdGggPSB3aWR0aCgpOwogCiAgICAgaWYgKCFoYXNPdmVyZmxv
d0NsaXAoKSkgewogICAgICAgICBmb3IgKFNoYWRvd0RhdGEqIGJveFNoYWRvdyA9IHN0eWxlKCkt
PmJveFNoYWRvdygpOyBib3hTaGFkb3c7IGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCkgewog
ICAgICAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIGJveFNoYWRv
dy0+eCAtIGJveFNoYWRvdy0+Ymx1cik7Ci0gICAgICAgICAgICBtX292ZXJmbG93V2lkdGggPSBt
YXgobV9vdmVyZmxvd1dpZHRoLCBtX3dpZHRoICsgYm94U2hhZG93LT54ICsgYm94U2hhZG93LT5i
bHVyKTsKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lkdGgs
IHdpZHRoKCkgKyBib3hTaGFkb3ctPnggKyBib3hTaGFkb3ctPmJsdXIpOwogICAgICAgICAgICAg
bV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9wLCBib3hTaGFkb3ctPnkgLSBib3hTaGFk
b3ctPmJsdXIpOwotICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93
SGVpZ2h0LCBtX2hlaWdodCArIGJveFNoYWRvdy0+eSArIGJveFNoYWRvdy0+Ymx1cik7CisgICAg
ICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIGhlaWdodCgp
ICsgYm94U2hhZG93LT55ICsgYm94U2hhZG93LT5ibHVyKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKGhhc1JlZmxlY3Rpb24oKSkgewpAQCAtMzMyLDExICszMjAsMTEgQEAgdm9p
ZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbAogICAgIHVuc2lnbmVkIGludCBs
b3dlc3RGbGV4R3JvdXAgPSAwOwogICAgIGJvb2wgaGF2ZUZsZXggPSBmYWxzZTsKICAgICBpbnQg
cmVtYWluaW5nU3BhY2UgPSAwOwotICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtX2hlaWdodDsKKyAg
ICBtX292ZXJmbG93SGVpZ2h0ID0gaGVpZ2h0KCk7CiAKICAgICAvLyBUaGUgZmlyc3Qgd2FsayBv
dmVyIG91ciBraWRzIGlzIHRvIGZpbmQgb3V0IGlmIHdlIGhhdmUgYW55IGZsZXhpYmxlIGNoaWxk
cmVuLgogICAgIEZsZXhCb3hJdGVyYXRvciBpdGVyYXRvcih0aGlzKTsKLSAgICBSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOworICAgIFJlbmRlckJveCogY2hpbGQgPSBpdGVy
YXRvci5uZXh0KCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIC8vIENoZWNrIHRvIHNl
ZSBpZiB0aGlzIGNoaWxkIGZsZXhlcy4KICAgICAgICAgaWYgKCFjaGlsZC0+aXNQb3NpdGlvbmVk
KCkgJiYgY2hpbGQtPnN0eWxlKCktPmJveEZsZXgoKSA+IDAuMGYpIHsKQEAgLTM2MSw4ICszNDks
OCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsCiAgICAgLy8gdGhl
aXIgcHJlZmVycmVkIHdpZHRocy4gIFRoZSBzZWNvbmQgcGFzcyBoYW5kbGVzIGZsZXhpbmcgdGhl
IGNoaWxkcmVuLgogICAgIGRvIHsKICAgICAgICAgLy8gUmVzZXQgb3VyIGhlaWdodC4KLSAgICAg
ICAgbV9oZWlnaHQgPSB5UG9zOwotICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbV9oZWlnaHQ7
CisgICAgICAgIHNldEhlaWdodCh5UG9zKTsKKyAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IGhl
aWdodCgpOwogICAgICAgICB4UG9zID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgLy8gT3VyIGZpcnN0IHBhc3MgaXMgZG9uZSB3aXRob3V0
IGZsZXhpbmcuICBXZSBzaW1wbHkgbGF5IHRoZSBjaGlsZHJlbgpAQCAtNDAwLDI4ICszODgsMjgg
QEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbAogICAgICAgICAgICAg
ICAgIG1heERlc2NlbnQgPSBtYXgobWF4RGVzY2VudCwgZGVzY2VudCk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgLy8gTm93IHVwZGF0ZSBvdXIgaGVpZ2h0LgotICAgICAgICAg
ICAgICAgIG1faGVpZ2h0ID0gbWF4KHlQb3MgKyBtYXhBc2NlbnQgKyBtYXhEZXNjZW50LCBtX2hl
aWdodCk7CisgICAgICAgICAgICAgICAgc2V0SGVpZ2h0KG1heCh5UG9zICsgbWF4QXNjZW50ICsg
bWF4RGVzY2VudCwgaGVpZ2h0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBtX2hlaWdodCA9IG1heChtX2hlaWdodCwgeVBvcyArIGNoaWxkLT5t
YXJnaW5Ub3AoKSArIGNoaWxkLT5oZWlnaHQoKSArIGNoaWxkLT5tYXJnaW5Cb3R0b20oKSk7Cisg
ICAgICAgICAgICAgICAgc2V0SGVpZ2h0KG1heChoZWlnaHQoKSwgeVBvcyArIGNoaWxkLT5tYXJn
aW5Ub3AoKSArIGNoaWxkLT5oZWlnaHQoKSArIGNoaWxkLT5tYXJnaW5Cb3R0b20oKSkpOwogCiAg
ICAgICAgICAgICBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKCFpdGVyYXRvci5maXJzdCgpICYmIGhhc0xpbmVJZkVtcHR5KCkpCi0gICAg
ICAgICAgICBtX2hlaWdodCArPSBsaW5lSGVpZ2h0KHRydWUsIHRydWUpOworICAgICAgICAgICAg
c2V0SGVpZ2h0KGhlaWdodCgpICsgbGluZUhlaWdodCh0cnVlLCB0cnVlKSk7CiAgICAgICAgIAot
ICAgICAgICBtX2hlaWdodCArPSB0b0FkZDsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsg
dG9BZGQpOwogCiAgICAgICAgIC8vIEFsd2F5cyBtYWtlIHN1cmUgb3VyIG92ZXJmbG93aGVpZ2h0
IGlzIGF0IGxlYXN0IG91ciBoZWlnaHQuCi0gICAgICAgIGlmIChtX292ZXJmbG93SGVpZ2h0IDwg
bV9oZWlnaHQpCi0gICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAg
ICAgIGlmIChtX292ZXJmbG93SGVpZ2h0IDwgaGVpZ2h0KCkpCisgICAgICAgICAgICBtX292ZXJm
bG93SGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgICAgIAotICAgICAgICBvbGRIZWlnaHQgPSBtX2hl
aWdodDsKKyAgICAgICAgb2xkSGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgICAgIGNhbGNIZWlnaHQo
KTsKIAogICAgICAgICByZWxheW91dENoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgIGlmIChvbGRI
ZWlnaHQgIT0gbV9oZWlnaHQpCisgICAgICAgIGlmIChvbGRIZWlnaHQgIT0gaGVpZ2h0KCkpCiAg
ICAgICAgICAgICBoZWlnaHRTcGVjaWZpZWQgPSB0cnVlOwogICAgICAgICAKICAgICAgICAgLy8g
Tm93IHRoYXQgb3VyIGhlaWdodCBpcyBhY3R1YWxseSBrbm93biwgd2UgY2FuIHBsYWNlIG91ciBi
b3hlcy4KQEAgLTQ3OCw3ICs0NjYsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRI
b3Jpem9udGFsCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjaGls
ZCktPmFkZFZpc3VhbE92ZXJmbG93KHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4oY2hpbGQpLT5m
bG9hdFJlY3QoKSk7CiAKICAgICAgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVy
Zmxvd0hlaWdodCwgY2hpbGRZICsgY2hpbGQtPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSk7Ci0gICAg
ICAgICAgICBtX292ZXJmbG93VG9wID0gbWluKG1fb3ZlcmZsb3dUb3AsIGNoaWxkLT55UG9zKCkg
KyBjaGlsZC0+b3ZlcmZsb3dUb3AoZmFsc2UpKTsKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dUb3Ag
PSBtaW4obV9vdmVyZmxvd1RvcCwgY2hpbGQtPnkoKSArIGNoaWxkLT5vdmVyZmxvd1RvcChmYWxz
ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB4UG9zICs9IGNoaWxkLT53aWR0aCgpICsg
Y2hpbGQtPm1hcmdpblJpZ2h0KCk7CiAgICAgCkBAIC02MTksNyArNjA3LDcgQEAgdm9pZCBSZW5k
ZXJGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbAogICAgICAgICAgICAgICAgICAgICByZW1h
aW5pbmdTcGFjZSAtPSAocmVtYWluaW5nU3BhY2UvdG90YWxDaGlsZHJlbik7CiAgICAgICAgICAg
ICAgICAgICAgIHRvdGFsQ2hpbGRyZW4tLTsKIAotICAgICAgICAgICAgICAgICAgICBwbGFjZUNo
aWxkKGNoaWxkLCBjaGlsZC0+eFBvcygpK29mZnNldCwgY2hpbGQtPnlQb3MoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNoaWxkLT54KCkrb2Zmc2V0LCBjaGlsZC0+
eSgpKTsKICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNjM0LDcgKzYyMiw3IEBAIHZvaWQgUmVu
ZGVyRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWwKICAgICAgICAgICAgICAgICAgICAgY2hp
bGQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGlsZC0+
eFBvcygpK29mZnNldCwgY2hpbGQtPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgcGxhY2VDaGls
ZChjaGlsZCwgY2hpbGQtPngoKStvZmZzZXQsIGNoaWxkLT55KCkpOwogICAgICAgICAgICAgICAg
IGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02
NDYsMjAgKzYzNCwyMCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFs
CiAgICAgfQogICAgIAogICAgIGlmIChjaGlsZCkgewotICAgICAgICBtX292ZXJmbG93TGVmdCA9
IG1pbihjaGlsZC0+eFBvcygpICsgY2hpbGQtPm92ZXJmbG93TGVmdChmYWxzZSksIG1fb3ZlcmZs
b3dMZWZ0KTsKKyAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4oY2hpbGQtPngoKSArIGNoaWxk
LT5vdmVyZmxvd0xlZnQoZmFsc2UpLCBtX292ZXJmbG93TGVmdCk7CiAKLSAgICAgICAgUmVuZGVy
T2JqZWN0KiBsYXN0Q2hpbGQgPSBjaGlsZDsKKyAgICAgICAgUmVuZGVyQm94KiBsYXN0Q2hpbGQg
PSBjaGlsZDsKICAgICAgICAgd2hpbGUgKChjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkpIHsKICAg
ICAgICAgICAgIGlmICghY2hpbGQtPmlzUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIGxh
c3RDaGlsZCA9IGNoaWxkOwogICAgICAgICB9Ci0gICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1h
eChsYXN0Q2hpbGQtPnhQb3MoKSArIGxhc3RDaGlsZC0+b3ZlcmZsb3dXaWR0aChmYWxzZSksIG1f
b3ZlcmZsb3dXaWR0aCk7CisgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChsYXN0Q2hpbGQt
PngoKSArIGxhc3RDaGlsZC0+b3ZlcmZsb3dXaWR0aChmYWxzZSksIG1fb3ZlcmZsb3dXaWR0aCk7
CiAgICAgfQogICAgIAogICAgIC8vIFNvIHRoYXQgdGhlIGNhbGNIZWlnaHQgaW4gbGF5b3V0Qmxv
Y2soKSBrbm93cyB0byByZWxheW91dCBwb3NpdGlvbmVkIG9iamVjdHMgYmVjYXVzZSBvZgogICAg
IC8vIGEgaGVpZ2h0IGNoYW5nZSwgd2UgcmV2ZXJ0IG91ciBoZWlnaHQgYmFjayB0byB0aGUgaW50
cmluc2ljIGhlaWdodCBiZWZvcmUgcmV0dXJuaW5nLgogICAgIGlmIChoZWlnaHRTcGVjaWZpZWQp
Ci0gICAgICAgIG1faGVpZ2h0ID0gb2xkSGVpZ2h0OworICAgICAgICBzZXRIZWlnaHQob2xkSGVp
Z2h0KTsKIH0KIAogdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCb3goYm9v
bCByZWxheW91dENoaWxkcmVuKQpAQCAtNjY3LDcgKzY1NSw3IEBAIHZvaWQgUmVuZGVyRmxleGli
bGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICBpbnQgeFBvcyA9IGJvcmRlckxlZnQoKSArIHBh
ZGRpbmdMZWZ0KCk7CiAgICAgaW50IHlQb3MgPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsK
ICAgICBpZiggc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMICkKLSAgICAgICAgeFBvcyA9IG1f
d2lkdGggLSBwYWRkaW5nUmlnaHQoKSAtIGJvcmRlclJpZ2h0KCk7CisgICAgICAgIHhQb3MgPSB3
aWR0aCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSBib3JkZXJSaWdodCgpOwogICAgIGludCB0b0FkZCA9
IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCgpOwogICAgIGJvb2wgaGVpZ2h0U3BlY2lmaWVkID0gZmFsc2U7CiAgICAgaW50IG9sZEhl
aWdodCA9IDA7CkBAIC02NzksNyArNjY3LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5
b3V0VmVydGljYWxCbwogICAgIAogICAgIC8vIFRoZSBmaXJzdCB3YWxrIG92ZXIgb3VyIGtpZHMg
aXMgdG8gZmluZCBvdXQgaWYgd2UgaGF2ZSBhbnkgZmxleGlibGUgY2hpbGRyZW4uCiAgICAgRmxl
eEJveEl0ZXJhdG9yIGl0ZXJhdG9yKHRoaXMpOwotICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBp
dGVyYXRvci5uZXh0KCk7CisgICAgUmVuZGVyQm94KiBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsK
ICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgY2hp
bGQgZmxleGVzLgogICAgICAgICBpZiAoIWNoaWxkLT5pc1Bvc2l0aW9uZWQoKSAmJiBjaGlsZC0+
c3R5bGUoKS0+Ym94RmxleCgpID4gMC4wZikgewpAQCAtODA4LDkgKzc5Niw5IEBAIHZvaWQgUmVu
ZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICAvLyBPdXIgZmlyc3QgcGFzcyBp
cyBkb25lIHdpdGhvdXQgZmxleGluZy4gIFdlIHNpbXBseSBsYXkgdGhlIGNoaWxkcmVuCiAgICAg
Ly8gb3V0IHdpdGhpbiB0aGUgYm94LgogICAgIGRvIHsKLSAgICAgICAgbV9oZWlnaHQgPSBib3Jk
ZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKLSAgICAgICAgaW50IG1pbkhlaWdodCA9IG1faGVpZ2h0
ICsgdG9BZGQ7Ci0gICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAg
c2V0SGVpZ2h0KGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKKyAgICAgICAgaW50IG1pbkhl
aWdodCA9IGhlaWdodCgpICsgdG9BZGQ7CisgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBoZWln
aHQoKTsKIAogICAgICAgICBjaGlsZCA9IGl0ZXJhdG9yLmZpcnN0KCk7CiAgICAgICAgIHdoaWxl
IChjaGlsZCkgewpAQCAtODI4LDcgKzgxNiw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6Omxh
eW91dFZlcnRpY2FsQm8KICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRTdGF0aWNY
KGJvcmRlclJpZ2h0KCkrcGFkZGluZ1JpZ2h0KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQtPmhhc1N0YXRpY1koKSkKLSAgICAgICAgICAgICAgICAgICAg
Y2hpbGQtPnNldFN0YXRpY1kobV9oZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBjaGlsZC0+
c2V0U3RhdGljWShoZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgY2hpbGQgPSBpdGVyYXRvci5u
ZXh0KCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9IApAQCAtODM3
LDcgKzgyNSw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAg
ICAgICAgICAgIGNoaWxkLT5jYWxjVmVydGljYWxNYXJnaW5zKCk7CiAgICAgCiAgICAgICAgICAg
ICAvLyBBZGQgaW4gdGhlIGNoaWxkJ3MgbWFyZ2luVG9wIHRvIG91ciBoZWlnaHQuCi0gICAgICAg
ICAgICBtX2hlaWdodCArPSBjaGlsZC0+bWFyZ2luVG9wKCk7CisgICAgICAgICAgICBzZXRIZWln
aHQoaGVpZ2h0KCkgKyBjaGlsZC0+bWFyZ2luVG9wKCkpOwogICAgIAogICAgICAgICAgICAgLy8g
Tm93IGRvIGEgbGF5b3V0LgogICAgICAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7CkBA
IC04NjQsMzkgKzg1MiwzOSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNh
bEJvCiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICAvLyBQbGFjZSB0aGUgY2hpbGQu
Ci0gICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGlsZFgsIG1faGVpZ2h0KTsKLSAgICAg
ICAgICAgIG1faGVpZ2h0ICs9IGNoaWxkLT5oZWlnaHQoKSArIGNoaWxkLT5tYXJnaW5Cb3R0b20o
KTsKKyAgICAgICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNoaWxkWCwgaGVpZ2h0KCkpOworICAg
ICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgY2hpbGQtPmhlaWdodCgpICsgY2hpbGQtPm1h
cmdpbkJvdHRvbSgpKTsKICAgICAKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9j
aygpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4oY2hpbGQpLT5h
ZGRWaXN1YWxPdmVyZmxvdyhzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKS0+ZmxvYXRS
ZWN0KCkpOwogCiAgICAgICAgICAgICAvLyBTZWUgaWYgdGhpcyBjaGlsZCBoYXMgbWFkZSBvdXIg
b3ZlcmZsb3cgbmVlZCB0byBncm93LgotICAgICAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4
KGNoaWxkLT54UG9zKCkgKyBjaGlsZC0+b3ZlcmZsb3dXaWR0aChmYWxzZSksIG1fb3ZlcmZsb3dX
aWR0aCk7Ci0gICAgICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1pbihjaGlsZC0+eFBvcygpICsg
Y2hpbGQtPm92ZXJmbG93TGVmdChmYWxzZSksIG1fb3ZlcmZsb3dMZWZ0KTsKKyAgICAgICAgICAg
IG1fb3ZlcmZsb3dXaWR0aCA9IG1heChjaGlsZC0+eCgpICsgY2hpbGQtPm92ZXJmbG93V2lkdGgo
ZmFsc2UpLCBtX292ZXJmbG93V2lkdGgpOworICAgICAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBt
aW4oY2hpbGQtPngoKSArIGNoaWxkLT5vdmVyZmxvd0xlZnQoZmFsc2UpLCBtX292ZXJmbG93TGVm
dCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgeVBvcyA9IG1faGVpZ2h0OworICAgICAgICB5UG9zID0gaGVp
Z2h0KCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWl0ZXJhdG9yLmZpcnN0KCkgJiYgaGFzTGlu
ZUlmRW1wdHkoKSkKLSAgICAgICAgICAgIG1faGVpZ2h0ICs9IGxpbmVIZWlnaHQodHJ1ZSwgdHJ1
ZSk7CisgICAgICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBsaW5lSGVpZ2h0KHRydWUsIHRy
dWUpKTsKICAgICAKLSAgICAgICAgbV9oZWlnaHQgKz0gdG9BZGQ7CisgICAgICAgIHNldEhlaWdo
dChoZWlnaHQoKSArIHRvQWRkKTsKIAogICAgICAgICAvLyBOZWdhdGl2ZSBtYXJnaW5zIGNhbiBj
YXVzZSBvdXIgaGVpZ2h0IHRvIHNocmluayBiZWxvdyBvdXIgbWluaW1hbCBoZWlnaHQgKGJvcmRl
ci9wYWRkaW5nKS4KICAgICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zLCBlbnN1cmUgdGhhdCB0aGUg
Y29tcHV0ZWQgaGVpZ2h0IGlzIGluY3JlYXNlZCB0byB0aGUgbWluaW1hbCBoZWlnaHQuCi0gICAg
ICAgIGlmIChtX2hlaWdodCA8IG1pbkhlaWdodCkKLSAgICAgICAgICAgIG1faGVpZ2h0ID0gbWlu
SGVpZ2h0OworICAgICAgICBpZiAoaGVpZ2h0KCkgPCBtaW5IZWlnaHQpCisgICAgICAgICAgICBz
ZXRIZWlnaHQobWluSGVpZ2h0KTsKIAogICAgICAgICAvLyBBbHdheXMgbWFrZSBzdXJlIG91ciBv
dmVyZmxvd2hlaWdodCBpcyBhdCBsZWFzdCBvdXIgaGVpZ2h0LgotICAgICAgICBpZiAobV9vdmVy
Zmxvd0hlaWdodCA8IG1faGVpZ2h0KQotICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1f
aGVpZ2h0OworICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA8IGhlaWdodCgpKQorICAgICAg
ICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IGhlaWdodCgpOwogCiAgICAgICAgIC8vIE5vdyB3ZSBo
YXZlIHRvIGNhbGMgb3VyIGhlaWdodCwgc28gd2Uga25vdyBob3cgbXVjaCBzcGFjZSB3ZSBoYXZl
IHJlbWFpbmluZy4KLSAgICAgICAgb2xkSGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAgIG9sZEhl
aWdodCA9IGhlaWdodCgpOwogICAgICAgICBjYWxjSGVpZ2h0KCk7Ci0gICAgICAgIGlmIChvbGRI
ZWlnaHQgIT0gbV9oZWlnaHQpCisgICAgICAgIGlmIChvbGRIZWlnaHQgIT0gaGVpZ2h0KCkpCiAg
ICAgICAgICAgICBoZWlnaHRTcGVjaWZpZWQgPSB0cnVlOwogCiAgICAgICAgIHJlbWFpbmluZ1Nw
YWNlID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBjb250ZW50SGVpZ2h0KCkgLSB5UG9z
OwpAQCAtMTAyOCw3ICsxMDE2LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVy
dGljYWxCbwogICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gcmVtYWluaW5nU3BhY2UvdG90
YWxDaGlsZHJlbjsKICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nU3BhY2UgLT0gKHJlbWFp
bmluZ1NwYWNlL3RvdGFsQ2hpbGRyZW4pOwogICAgICAgICAgICAgICAgICAgICB0b3RhbENoaWxk
cmVuLS07Ci0gICAgICAgICAgICAgICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNoaWxkLT54UG9z
KCksIGNoaWxkLT55UG9zKCkrb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgcGxhY2VDaGls
ZChjaGlsZCwgY2hpbGQtPngoKSwgY2hpbGQtPnkoKStvZmZzZXQpOwogICAgICAgICAgICAgICAg
ICAgICBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CkBAIC0xMDQzLDcgKzEwMzEsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlv
dXRWZXJ0aWNhbEJvCiAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gaXRlcmF0b3IubmV4dCgp
OwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcGxhY2VDaGlsZChjaGlsZCwgY2hpbGQtPnhQb3MoKSwgY2hpbGQtPnlQb3Mo
KStvZmZzZXQpOworICAgICAgICAgICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNoaWxkLT54KCks
IGNoaWxkLT55KCkrb2Zmc2V0KTsKICAgICAgICAgICAgICAgICBjaGlsZCA9IGl0ZXJhdG9yLm5l
eHQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTA1NSwyOCArMTA0MywyOCBAQCB2
b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAgfQogICAgIAogICAg
IGlmIChjaGlsZCkgewotICAgICAgICBtX292ZXJmbG93VG9wID0gbWluKGNoaWxkLT55UG9zKCkg
KyBjaGlsZC0+b3ZlcmZsb3dUb3AoZmFsc2UpLCBtX292ZXJmbG93VG9wKTsKKyAgICAgICAgbV9v
dmVyZmxvd1RvcCA9IG1pbihjaGlsZC0+eSgpICsgY2hpbGQtPm92ZXJmbG93VG9wKGZhbHNlKSwg
bV9vdmVyZmxvd1RvcCk7CiAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQgPSBjaGls
ZDsKKyAgICAgICAgUmVuZGVyQm94KiBsYXN0Q2hpbGQgPSBjaGlsZDsKICAgICAgICAgd2hpbGUg
KChjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkpIHsKICAgICAgICAgICAgIGlmICghY2hpbGQtPmlz
UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9IGNoaWxkOwogICAgICAg
ICB9Ci0gICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobGFzdENoaWxkLT55UG9zKCkgKyBs
YXN0Q2hpbGQtPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSwgbV9vdmVyZmxvd0hlaWdodCk7CisgICAg
ICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobGFzdENoaWxkLT55KCkgKyBsYXN0Q2hpbGQtPm92
ZXJmbG93SGVpZ2h0KGZhbHNlKSwgbV9vdmVyZmxvd0hlaWdodCk7CiAgICAgfQogCiAgICAgLy8g
U28gdGhhdCB0aGUgY2FsY0hlaWdodCBpbiBsYXlvdXRCbG9jaygpIGtub3dzIHRvIHJlbGF5b3V0
IHBvc2l0aW9uZWQgb2JqZWN0cyBiZWNhdXNlIG9mCiAgICAgLy8gYSBoZWlnaHQgY2hhbmdlLCB3
ZSByZXZlcnQgb3VyIGhlaWdodCBiYWNrIHRvIHRoZSBpbnRyaW5zaWMgaGVpZ2h0IGJlZm9yZSBy
ZXR1cm5pbmcuCiAgICAgaWYgKGhlaWdodFNwZWNpZmllZCkKLSAgICAgICAgbV9oZWlnaHQgPSBv
bGRIZWlnaHQ7IAorICAgICAgICBzZXRIZWlnaHQob2xkSGVpZ2h0KTsgCiB9CiAKLXZvaWQgUmVu
ZGVyRmxleGlibGVCb3g6OnBsYWNlQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgaW50IHgsIGlu
dCB5KQordm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6cGxhY2VDaGlsZChSZW5kZXJCb3gqIGNoaWxk
LCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgSW50UmVjdCBvbGRSZWN0KGNoaWxkLT54UG9zKCksIGNo
aWxkLT55UG9zKCkgLCBjaGlsZC0+d2lkdGgoKSwgY2hpbGQtPmhlaWdodCgpKTsKKyAgICBJbnRS
ZWN0IG9sZFJlY3QoY2hpbGQtPngoKSwgY2hpbGQtPnkoKSAsIGNoaWxkLT53aWR0aCgpLCBjaGls
ZC0+aGVpZ2h0KCkpOwogCiAgICAgLy8gUGxhY2UgdGhlIGNoaWxkLgotICAgIGNoaWxkLT5zZXRQ
b3MoeCwgeSk7CisgICAgY2hpbGQtPnNldExvY2F0aW9uKHgsIHkpOwogCiAgICAgLy8gSWYgdGhl
IGNoaWxkIG1vdmVkLCB3ZSBoYXZlIHRvIHJlcGFpbnQgaXQgYXMgd2VsbCBhcyBhbnkgZmxvYXRp
bmcvcG9zaXRpb25lZAogICAgIC8vIGRlc2NlbmRhbnRzLiAgQW4gZXhjZXB0aW9uIGlzIGlmIHdl
IG5lZWQgYSBsYXlvdXQuICBJbiB0aGlzIGNhc2UsIHdlIGtub3cgd2UncmUgZ29pbmcgdG8KQEAg
LTEwODUsNyArMTA3Myw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnBsYWNlQ2hpbGQoUmVu
ZGUKICAgICAgICAgY2hpbGQtPnJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKG9sZFJlY3QpOwog
fQogCi1pbnQgUmVuZGVyRmxleGlibGVCb3g6OmFsbG93ZWRDaGlsZEZsZXgoUmVuZGVyT2JqZWN0
KiBjaGlsZCwgYm9vbCBleHBhbmRpbmcsIHVuc2lnbmVkIGludCBncm91cCkKK2ludCBSZW5kZXJG
bGV4aWJsZUJveDo6YWxsb3dlZENoaWxkRmxleChSZW5kZXJCb3gqIGNoaWxkLCBib29sIGV4cGFu
ZGluZywgdW5zaWduZWQgaW50IGdyb3VwKQogewogICAgIGlmIChjaGlsZC0+aXNQb3NpdGlvbmVk
KCkgfHwgY2hpbGQtPnN0eWxlKCktPmJveEZsZXgoKSA9PSAwLjBmIHx8IGNoaWxkLT5zdHlsZSgp
LT5ib3hGbGV4R3JvdXAoKSAhPSBncm91cCkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guaAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyRmxleGli
bGVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgaXNGbGV4aW5nQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2ZsZXhpbmdD
aGlsZHJlbjsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1N0cmV0Y2hpbmdDaGlsZHJlbigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyZXRjaGluZ0NoaWxkcmVuOyB9CiAKLSAgICB2b2lkIHBsYWNlQ2hpbGQo
UmVuZGVyT2JqZWN0KiBjaGlsZCwgaW50IHgsIGludCB5KTsKKyAgICB2b2lkIHBsYWNlQ2hpbGQo
UmVuZGVyQm94KiBjaGlsZCwgaW50IHgsIGludCB5KTsKIAogcHJvdGVjdGVkOgotICAgIGludCBh
bGxvd2VkQ2hpbGRGbGV4KFJlbmRlck9iamVjdCogY2hpbGQsIGJvb2wgZXhwYW5kaW5nLCB1bnNp
Z25lZCBncm91cCk7CisgICAgaW50IGFsbG93ZWRDaGlsZEZsZXgoUmVuZGVyQm94KiBjaGlsZCwg
Ym9vbCBleHBhbmRpbmcsIHVuc2lnbmVkIGdyb3VwKTsKIAogICAgIGJvb2wgaGFzTXVsdGlwbGVM
aW5lcygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJveExpbmVzKCkgPT0gTVVMVElQTEU7IH0K
ICAgICBib29sIGlzVmVydGljYWwoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3hPcmllbnQo
KSA9PSBWRVJUSUNBTDsgfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5k
ZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMCw3ICs1MDAsNyBAQCBJ
bnRSZWN0IFJlbmRlckZsb3c6OmFic29sdXRlQ2xpcHBlZE92ZXJmCiAgICAgICAgIC8vIE5vdyBp
bnZhbGlkYXRlIGEgcmVjdGFuZ2xlLgogICAgICAgICBpbnQgb3cgPSBzdHlsZSgpID8gc3R5bGUo
KS0+b3V0bGluZVNpemUoKSA6IDA7CiAgICAgICAgIGlmIChpc0NvbXBhY3QoKSkKLSAgICAgICAg
ICAgIGxlZnQgLT0gbV94OworICAgICAgICAgICAgbGVmdCAtPSB4KCk7CiAgICAgICAgIAogICAg
ICAgICAvLyBXZSBuZWVkIHRvIGFkZCBpbiB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2Zmc2V0cyBv
ZiBhbnkgaW5saW5lcyAoaW5jbHVkaW5nIHVzKSB1cCB0byBvdXIKICAgICAgICAgLy8gY29udGFp
bmluZyBibG9jay4KQEAgLTU1Miw5ICs1NTIsOSBAQCBpbnQgUmVuZGVyRmxvdzo6bG93ZXN0UG9z
aXRpb24oYm9vbCBpbmNsCiB7CiAgICAgQVNTRVJUKCFpc0lubGluZUZsb3coKSk7CiAgICAgaWYg
KCFpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciAmJiAoaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzQ29u
dHJvbENsaXAoKSkpCi0gICAgICAgIHJldHVybiBpbmNsdWRlU2VsZiAmJiBtX3dpZHRoID4gMCA/
IG92ZXJmbG93SGVpZ2h0KGZhbHNlKSA6IDA7CisgICAgICAgIHJldHVybiBpbmNsdWRlU2VsZiAm
JiB3aWR0aCgpID4gMCA/IG92ZXJmbG93SGVpZ2h0KGZhbHNlKSA6IDA7CiAKLSAgICBpbnQgYm90
dG9tID0gaW5jbHVkZVNlbGYgJiYgbV93aWR0aCA+IDAgPyBtX2hlaWdodCA6IDA7CisgICAgaW50
IGJvdHRvbSA9IGluY2x1ZGVTZWxmICYmIHdpZHRoKCkgPiAwID8gaGVpZ2h0KCkgOiAwOwogICAg
IGlmICghaGFzQ29sdW1ucygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSB3
YXkgdG8gdXNlIHRoZSBsYXllciB0cmVlIHRvIGF2b2lkIHZpc2l0aW5nIGFsbCB0aGUga2lkcy4K
ICAgICAgICAgLy8gRm9yIG5vdywgd2UgaGF2ZSB0byBkZXNjZW5kIGludG8gYWxsIHRoZSBjaGls
ZHJlbiwgc2luY2Ugd2UgbWF5IGhhdmUgYSBodWdlIGFicyBkaXYgaW5zaWRlCkBAIC01NjIsNyAr
NTYyLDcgQEAgaW50IFJlbmRlckZsb3c6Omxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jbAogICAgICAg
ICAvLyB0aGUgYWJzIGRpdi4KICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGMgPSBmaXJzdENo
aWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoIWMtPmlz
RmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYy0+aXNUZXh0KCkgJiYgIWMtPmlzSW5saW5lRmxv
dygpKQotICAgICAgICAgICAgICAgIGJvdHRvbSA9IG1heChib3R0b20sIGMtPnlQb3MoKSArIGMt
Pmxvd2VzdFBvc2l0aW9uKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgYm90dG9tID0gbWF4KGJv
dHRvbSwgc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4oYyktPnkoKSArIGMtPmxvd2VzdFBvc2l0aW9u
KGZhbHNlKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU3NiwxNyArNTc2LDE3IEBAIGludCBS
ZW5kZXJGbG93OjpyaWdodG1vc3RQb3NpdGlvbihib29sIGkKIHsKICAgICBBU1NFUlQoIWlzSW5s
aW5lRmxvdygpKTsKICAgICBpZiAoIWluY2x1ZGVPdmVyZmxvd0ludGVyaW9yICYmIChoYXNPdmVy
Zmxvd0NsaXAoKSB8fCBoYXNDb250cm9sQ2xpcCgpKSkKLSAgICAgICAgcmV0dXJuIGluY2x1ZGVT
ZWxmICYmIG1faGVpZ2h0ID4gMCA/IG92ZXJmbG93V2lkdGgoZmFsc2UpIDogMDsKKyAgICAgICAg
cmV0dXJuIGluY2x1ZGVTZWxmICYmIGhlaWdodCgpID4gMCA/IG92ZXJmbG93V2lkdGgoZmFsc2Up
IDogMDsKIAotICAgIGludCByaWdodCA9IGluY2x1ZGVTZWxmICYmIG1faGVpZ2h0ID4gMCA/IG1f
d2lkdGggOiAwOworICAgIGludCByaWdodCA9IGluY2x1ZGVTZWxmICYmIGhlaWdodCgpID4gMCA/
IHdpZHRoKCkgOiAwOwogICAgIGlmICghaGFzQ29sdW1ucygpKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBDb21lIHVwIHdpdGggYSB3YXkgdG8gdXNlIHRoZSBsYXllciB0cmVlIHRvIGF2b2lkIHZpc2l0
aW5nIGFsbCB0aGUga2lkcy4KICAgICAgICAgLy8gRm9yIG5vdywgd2UgaGF2ZSB0byBkZXNjZW5k
IGludG8gYWxsIHRoZSBjaGlsZHJlbiwgc2luY2Ugd2UgbWF5IGhhdmUgYSBodWdlIGFicyBkaXYg
aW5zaWRlCiAgICAgICAgIC8vIGEgdGlueSByZWwgZGl2IGJ1cmllZCBzb21ld2hlcmUgZGVlcCBp
biBvdXIgY2hpbGQgdHJlZS4gIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGdldCB0bwogICAgICAg
ICAvLyB0aGUgYWJzIGRpdi4KICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGMgPSBmaXJzdENo
aWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoIWMtPmlz
RmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYy0+aXNUZXh0KCkgJiYgIWMtPmlzSW5saW5lRmxv
dygpKQotICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBjLT54UG9zKCkgKyBjLT5y
aWdodG1vc3RQb3NpdGlvbihmYWxzZSkpOworICAgICAgICAgICAgaWYgKCFjLT5pc0Zsb2F0aW5n
T3JQb3NpdGlvbmVkKCkgJiYgYy0+aXNCb3goKSAmJiAhYy0+aXNJbmxpbmVGbG93KCkpCisgICAg
ICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KGMp
LT54KCkgKyBjLT5yaWdodG1vc3RQb3NpdGlvbihmYWxzZSkpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC02MDAsMTcgKzYwMCwxNyBAQCBpbnQgUmVuZGVyRmxvdzo6bGVmdG1vc3RQb3NpdGlvbihi
b29sIGluCiB7CiAgICAgQVNTRVJUKCFpc0lubGluZUZsb3coKSk7CiAgICAgaWYgKCFpbmNsdWRl
T3ZlcmZsb3dJbnRlcmlvciAmJiAoaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzQ29udHJvbENsaXAo
KSkpCi0gICAgICAgIHJldHVybiBpbmNsdWRlU2VsZiAmJiBtX2hlaWdodCA+IDAgPyBvdmVyZmxv
d0xlZnQoZmFsc2UpIDogbV93aWR0aDsKKyAgICAgICAgcmV0dXJuIGluY2x1ZGVTZWxmICYmIGhl
aWdodCgpID4gMCA/IG92ZXJmbG93TGVmdChmYWxzZSkgOiB3aWR0aCgpOwogCi0gICAgaW50IGxl
ZnQgPSBpbmNsdWRlU2VsZiAmJiBtX2hlaWdodCA+IDAgPyAwIDogbV93aWR0aDsKKyAgICBpbnQg
bGVmdCA9IGluY2x1ZGVTZWxmICYmIGhlaWdodCgpID4gMCA/IDAgOiB3aWR0aCgpOwogICAgIGlm
ICghaGFzQ29sdW1ucygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSB3YXkg
dG8gdXNlIHRoZSBsYXllciB0cmVlIHRvIGF2b2lkIHZpc2l0aW5nIGFsbCB0aGUga2lkcy4KICAg
ICAgICAgLy8gRm9yIG5vdywgd2UgaGF2ZSB0byBkZXNjZW5kIGludG8gYWxsIHRoZSBjaGlsZHJl
biwgc2luY2Ugd2UgbWF5IGhhdmUgYSBodWdlIGFicyBkaXYgaW5zaWRlCiAgICAgICAgIC8vIGEg
dGlueSByZWwgZGl2IGJ1cmllZCBzb21ld2hlcmUgZGVlcCBpbiBvdXIgY2hpbGQgdHJlZS4gIElu
IHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGdldCB0bwogICAgICAgICAvLyB0aGUgYWJzIGRpdi4KICAg
ICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0
U2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoIWMtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQo
KSAmJiAhYy0+aXNUZXh0KCkgJiYgIWMtPmlzSW5saW5lRmxvdygpKQotICAgICAgICAgICAgICAg
IGxlZnQgPSBtaW4obGVmdCwgYy0+eFBvcygpICsgYy0+bGVmdG1vc3RQb3NpdGlvbihmYWxzZSkp
OworICAgICAgICAgICAgaWYgKCFjLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgYy0+aXNC
b3goKSAmJiAhYy0+aXNJbmxpbmVGbG93KCkpCisgICAgICAgICAgICAgICAgbGVmdCA9IG1pbihs
ZWZ0LCBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjKS0+eCgpICsgYy0+bGVmdG1vc3RQb3NpdGlv
bihmYWxzZSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02ODcsNyArNjg3LDcgQEAgSW50UmVj
dCBSZW5kZXJGbG93Ojpsb2NhbENhcmV0UmVjdChJbmxpbgogICAgICAgICAgICAgLy8gRklYTUU6
IHdoeSBjYWxsIGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoKSB0d2ljZSBoZXJlLCB0b28/CiAg
ICAgICAgICAgICBGbG9hdFBvaW50IGFic1JpZ2h0UG9pbnQgPSBsb2NhbFRvQWJzb2x1dGVGb3JD
b250ZW50KEZsb2F0UG9pbnQobXlSaWdodCwgMCkpOwogCi0gICAgICAgICAgICBpbnQgY29udGFp
bmVyUmlnaHQgPSBjb250YWluaW5nQmxvY2soKS0+eFBvcygpICsgY29udGFpbmluZ0Jsb2NrV2lk
dGgoKTsKKyAgICAgICAgICAgIGludCBjb250YWluZXJSaWdodCA9IGNvbnRhaW5pbmdCbG9jaygp
LT54KCkgKyBjb250YWluaW5nQmxvY2tXaWR0aCgpOwogICAgICAgICAgICAgRmxvYXRQb2ludCBh
YnNDb250YWluZXJQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludChj
b250YWluZXJSaWdodCwgMCkpOwogCiAgICAgICAgICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
ID0gYWJzQ29udGFpbmVyUG9pbnQueCgpIC0gYWJzUmlnaHRQb2ludC54KCk7CkBAIC03MTksMTMg
KzcxOSwxNCBAQCB2b2lkIFJlbmRlckZsb3c6OmFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoCiAgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZEZvY3VzUmluZ1JlY3QoSW50UmVjdCh0eCArIGN1
cnItPnhQb3MoKSwgdHkgKyBjdXJyLT55UG9zKCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdo
dCgpKSk7CiAKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgaWYgKCFjdXJy
LT5pc1RleHQoKSAmJiAhY3Vyci0+aXNMaXN0TWFya2VyKCkpIHsKKyAgICAgICAgICAgIGlmICgh
Y3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpICYmIGN1cnItPmlzQm94KCkp
IHsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJv
eCo+KGN1cnIpOwogICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9zOwogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1z
LgogICAgICAgICAgICAgICAgIGlmIChjdXJyLT5sYXllcigpKSAKICAgICAgICAgICAgICAgICAg
ICAgcG9zID0gY3Vyci0+bG9jYWxUb0Fic29sdXRlKCk7CiAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBwb3MgPSBGbG9hdFBvaW50KHR4ICsgY3Vyci0+eFBvcygpLCB0
eSArIGN1cnItPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQo
dHggKyBib3gtPngoKSwgdHkgKyBib3gtPnkoKSk7CiAgICAgICAgICAgICAgICAgY3Vyci0+YWRk
Rm9jdXNSaW5nUmVjdHMoZ3JhcGhpY3NDb250ZXh0LCBwb3MueCgpLCBwb3MueSgpKTsKICAgICAg
ICAgICAgIH0KICAgICB9CkBAIC03MzMsMTIgKzczNCwxMiBAQCB2b2lkIFJlbmRlckZsb3c6OmFk
ZEZvY3VzUmluZ1JlY3RzKEdyYXBoCiAgICAgaWYgKGNvbnRpbnVhdGlvbigpKSB7CiAgICAgICAg
IGlmIChpc0lubGluZSgpKQogICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFkZEZvY3VzUmlu
Z1JlY3RzKGdyYXBoaWNzQ29udGV4dCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHggLSBjb250YWluaW5nQmxvY2soKS0+eFBvcygpICsgY29udGludWF0
aW9uKCktPnhQb3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eSAtIGNvbnRhaW5pbmdCbG9jaygpLT55UG9zKCkgKyBjb250aW51YXRpb24oKS0+eVBv
cygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAt
IGNvbnRhaW5pbmdCbG9jaygpLT54KCkgKyBjb250aW51YXRpb24oKS0+eCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0gY29udGFpbmluZ0Jsb2Nr
KCktPnkoKSArIGNvbnRpbnVhdGlvbigpLT55KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBjb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVjdHMoZ3JhcGhpY3NDb250ZXh0LCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIHhQb3MoKSAr
IGNvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+eFBvcygpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geVBvcygpICsgY29udGludWF0
aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT55UG9zKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0geCgpICsgY29udGludWF0aW9uKCktPmNvbnRh
aW5pbmdCbG9jaygpLT54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHkgLSB5KCkgKyBjb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPnko
KSk7CiAgICAgfQogfQogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDQwMDc1KQor
KysgcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDgg
KzEyNiw4IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gQWRkIGluIG91ciBvZmZzZXRzLgotICAgIHR4ICs9IG1feDsK
LSAgICB0eSArPSBtX3k7CisgICAgdHggKz0geCgpOworICAgIHR5ICs9IG1fZnJhbWVSZWN0Lnko
KTsKIAogICAgIGludCByb3dzID0gZnJhbWVTZXQoKS0+dG90YWxSb3dzKCk7CiAgICAgaW50IGNv
bHMgPSBmcmFtZVNldCgpLT50b3RhbENvbHMoKTsKQEAgLTQ1Nyw4ICs0NTcsOCBAQCB2b2lkIFJl
bmRlckZyYW1lU2V0OjpsYXlvdXQoKQogICAgICAgICBvbGRCb3VuZHMgPSBhYnNvbHV0ZUNsaXBw
ZWRPdmVyZmxvd1JlY3QoKTsKIAogICAgIGlmICghcGFyZW50KCktPmlzRnJhbWVTZXQoKSAmJiAh
ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSkgewotICAgICAgICBtX3dpZHRoID0gdmlldygpLT52aWV3
V2lkdGgoKTsKLSAgICAgICAgbV9oZWlnaHQgPSB2aWV3KCktPnZpZXdIZWlnaHQoKTsKKyAgICAg
ICAgc2V0V2lkdGgodmlldygpLT52aWV3V2lkdGgoKSk7CisgICAgICAgIHNldEhlaWdodCh2aWV3
KCktPnZpZXdIZWlnaHQoKSk7CiAgICAgfQogCiAgICAgc2l6ZV90IGNvbHMgPSBmcmFtZVNldCgp
LT50b3RhbENvbHMoKTsKQEAgLTQ3MCw4ICs0NzAsOCBAQCB2b2lkIFJlbmRlckZyYW1lU2V0Ojps
YXlvdXQoKQogICAgIH0KIAogICAgIGludCBib3JkZXJUaGlja25lc3MgPSBmcmFtZVNldCgpLT5i
b3JkZXIoKTsKLSAgICBsYXlPdXRBeGlzKG1fcm93cywgZnJhbWVTZXQoKS0+cm93TGVuZ3Rocygp
LCBtX2hlaWdodCAtIChyb3dzIC0gMSkgKiBib3JkZXJUaGlja25lc3MpOwotICAgIGxheU91dEF4
aXMobV9jb2xzLCBmcmFtZVNldCgpLT5jb2xMZW5ndGhzKCksIG1fd2lkdGggLSAoY29scyAtIDEp
ICogYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBsYXlPdXRBeGlzKG1fcm93cywgZnJhbWVTZXQoKS0+
cm93TGVuZ3RocygpLCBoZWlnaHQoKSAtIChyb3dzIC0gMSkgKiBib3JkZXJUaGlja25lc3MpOwor
ICAgIGxheU91dEF4aXMobV9jb2xzLCBmcmFtZVNldCgpLT5jb2xMZW5ndGhzKCksIHdpZHRoKCkg
LSAoY29scyAtIDEpICogYm9yZGVyVGhpY2tuZXNzKTsKIAogICAgIHBvc2l0aW9uRnJhbWVzKCk7
CiAKQEAgLTQ5MSw3ICs0OTEsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlvdXQoKQogCiB2
b2lkIFJlbmRlckZyYW1lU2V0Ojpwb3NpdGlvbkZyYW1lcygpCiB7Ci0gICAgUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGls
ZEJveCgpOwogICAgIGlmICghY2hpbGQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTA0LDcgKzUw
NCw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzKCkKICAgICAgICAgaW50
IHhQb3MgPSAwOwogICAgICAgICBpbnQgaGVpZ2h0ID0gbV9yb3dzLm1fc2l6ZXNbcl07CiAgICAg
ICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29sczsgYysrKSB7Ci0gICAgICAgICAgICBjaGlsZC0+
c2V0UG9zKHhQb3MsIHlQb3MpOworICAgICAgICAgICAgY2hpbGQtPnNldExvY2F0aW9uKHhQb3Ms
IHlQb3MpOwogICAgICAgICAgICAgaW50IHdpZHRoID0gbV9jb2xzLm1fc2l6ZXNbY107CiAKICAg
ICAgICAgICAgIC8vIGhhcyB0byBiZSByZXNpemVkIGFuZCBpdHNlbGYgcmVzaXplIGl0cyBjb250
ZW50cwpAQCAtNTE3LDcgKzUxNyw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJh
bWVzKCkKIAogICAgICAgICAgICAgeFBvcyArPSB3aWR0aCArIGJvcmRlclRoaWNrbmVzczsKIAot
ICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTI1LDcgKzUyNSw3IEBAIHZv
aWQgUmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzKCkKICAgICB9CiAKICAgICAvLyBhbGwg
dGhlIHJlbWFpbmluZyBmcmFtZXMgYXJlIGhpZGRlbiB0byBhdm9pZCB1Z2x5IHNwdXJpb3VzIHVu
Zmxvd2VkIGZyYW1lcwotICAgIGZvciAoOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgeworICAgIGZvciAoOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3go
KSkgewogICAgICAgICBjaGlsZC0+c2V0V2lkdGgoMCk7CiAgICAgICAgIGNoaWxkLT5zZXRIZWln
aHQoMCk7CiAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dChmYWxzZSk7CkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
ckhUTUxDYW52YXMuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5kZXJIVE1M
Q2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjEgKzUwLDIxIEBAIHZvaWQgUmVuZGVy
SFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQYWkKIAogdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpj
YW52YXNTaXplQ2hhbmdlZCgpCiB7Ci0gICAgSW50U2l6ZSBzaXplID0gc3RhdGljX2Nhc3Q8SFRN
TENhbnZhc0VsZW1lbnQqPihub2RlKCkpLT5zaXplKCk7Ci0gICAgSW50U2l6ZSB6b29tZWRTaXpl
KHNpemUud2lkdGgoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSwgc2l6ZS5oZWlnaHQoKSAq
IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgSW50U2l6ZSBjYW52YXNTaXplID0gc3Rh
dGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihub2RlKCkpLT5zaXplKCk7CisgICAgSW50U2l6
ZSB6b29tZWRTaXplKGNhbnZhc1NpemUud2lkdGgoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSwgY2FudmFzU2l6ZS5oZWlnaHQoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAKLSAg
ICBpZiAoc2l6ZSA9PSBpbnRyaW5zaWNTaXplKCkpCisgICAgaWYgKGNhbnZhc1NpemUgPT0gaW50
cmluc2ljU2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRJbnRyaW5zaWNTaXplKHNp
emUpOworICAgIHNldEludHJpbnNpY1NpemUoY2FudmFzU2l6ZSk7CiAKICAgICBpZiAoIXByZWZX
aWR0aHNEaXJ0eSgpKQogICAgICAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7CiAKLSAgICBJ
bnRTaXplIG9sZFNpemUgPSBJbnRTaXplKG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBJbnRTaXpl
IG9sZFNpemUgPSBzaXplKCk7CiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwot
ICAgIGlmIChvbGRTaXplID09IEludFNpemUobV93aWR0aCwgbV9oZWlnaHQpKQorICAgIGlmIChv
bGRTaXplID09IHNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFzZWxmTmVlZHNM
YXlvdXQoKSkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsMjEgKzI4MSwyMSBAQCB2b2lk
IFJlbmRlckltYWdlOjppbWFnZUNoYW5nZWQoV3JhcHBlZEltCiAgICAgICAgIC8vIGxheW91dCB3
aGVuIHdlIGdldCBhZGRlZCBpbiB0byB0aGUgcmVuZGVyIHRyZWUgaGllcmFyY2h5IGxhdGVyLgog
ICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgICAgIC8vIGxldHMgc2Vl
IGlmIHdlIG5lZWQgdG8gcmVsYXlvdXQgYXQgYWxsLi4KLSAgICAgICAgICAgIGludCBvbGR3aWR0
aCA9IG1fd2lkdGg7Ci0gICAgICAgICAgICBpbnQgb2xkaGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAg
ICAgICAgICBpbnQgb2xkd2lkdGggPSB3aWR0aCgpOworICAgICAgICAgICAgaW50IG9sZGhlaWdo
dCA9IGhlaWdodCgpOwogICAgICAgICAgICAgaWYgKCFwcmVmV2lkdGhzRGlydHkoKSkKICAgICAg
ICAgICAgICAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7CiAgICAgICAgICAgICBjYWxjV2lk
dGgoKTsKICAgICAgICAgICAgIGNhbGNIZWlnaHQoKTsKIAotICAgICAgICAgICAgaWYgKGltYWdl
U2l6ZUNoYW5nZWQgfHwgbV93aWR0aCAhPSBvbGR3aWR0aCB8fCBtX2hlaWdodCAhPSBvbGRoZWln
aHQpIHsKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemVDaGFuZ2VkIHx8IHdpZHRoKCkgIT0gb2xk
d2lkdGggfHwgaGVpZ2h0KCkgIT0gb2xkaGVpZ2h0KSB7CiAgICAgICAgICAgICAgICAgc2hvdWxk
UmVwYWludCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmICghc2VsZk5lZWRzTGF5b3V0KCkp
CiAgICAgICAgICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBtX3dpZHRoID0gb2xkd2lkdGg7Ci0gICAgICAgICAgICBtX2hlaWdo
dCA9IG9sZGhlaWdodDsKKyAgICAgICAgICAgIHNldFdpZHRoKG9sZHdpZHRoKTsKKyAgICAgICAg
ICAgIHNldEhlaWdodChvbGRoZWlnaHQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zOTYsNyAr
Mzk2LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0
b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgICAg
ICBwYWludEN1c3RvbUhpZ2hsaWdodCh0eCAtIG1feCwgdHkgLSBtX3ksIHN0eWxlKCktPmhpZ2hs
aWdodCgpLCB0cnVlKTsKKyAgICAgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR4IC0geCgp
LCB0eSAtIG1fZnJhbWVSZWN0LnkoKSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOwogI2Vu
ZGlmCiAKICAgICAgICAgSW50U2l6ZSBjb250ZW50U2l6ZShjV2lkdGgsIGNIZWlnaHQpOwpAQCAt
NDI0LDggKzQyNCw4IEBAIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQK
ICAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIF94LCBfeSwgX3R4LCBfdHksIGhpdFRlc3RBY3Rpb24pOwogCiAgICAgaWYgKGluc2lk
ZSAmJiBlbGVtZW50KCkpIHsKLSAgICAgICAgaW50IHR4ID0gX3R4ICsgbV94OwotICAgICAgICBp
bnQgdHkgPSBfdHkgKyBtX3k7CisgICAgICAgIGludCB0eCA9IF90eCArIHgoKTsKKyAgICAgICAg
aW50IHR5ID0gX3R5ICsgbV9mcmFtZVJlY3QueSgpOwogICAgICAgICAKICAgICAgICAgSFRNTE1h
cEVsZW1lbnQqIG1hcCA9IGltYWdlTWFwKCk7CiAgICAgICAgIGlmIChtYXApIHsKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsMTQgKzI5MiwxNiBAQCB2b2lkIFJlbmRlcklubGluZTo6
YWJzb2x1dGVSZWN0cyhWZWN0b3I8CiAgICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4ICsg
Y3Vyci0+eFBvcygpLCB0eSArIGN1cnItPnlQb3MoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVp
Z2h0KCkpKTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWN1cnItPmlz
VGV4dCgpKQotICAgICAgICAgICAgY3Vyci0+YWJzb2x1dGVSZWN0cyhyZWN0cywgdHggKyBjdXJy
LT54UG9zKCksIHR5ICsgY3Vyci0+eVBvcygpLCBmYWxzZSk7CisgICAgICAgIGlmIChjdXJyLT5p
c0JveCgpKSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRl
ckJveCo+KGN1cnIpOworICAgICAgICAgICAgY3Vyci0+YWJzb2x1dGVSZWN0cyhyZWN0cywgdHgg
KyBib3gtPngoKSwgdHkgKyBib3gtPnkoKSwgZmFsc2UpOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgaWYgKGNvbnRpbnVhdGlvbigpICYmIHRvcExldmVsKQogICAgICAgICBjb250aW51YXRpb24o
KS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR4IC0gY29udGFpbmluZ0Jsb2NrKCktPnhQb3MoKSArIGNvbnRpbnVhdGlvbigpLT54
UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0gY29udGFp
bmluZ0Jsb2NrKCktPnlQb3MoKSArIGNvbnRpbnVhdGlvbigpLT55UG9zKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0gY29udGFpbmluZ0Jsb2NrKCktPngoKSAr
IGNvbnRpbnVhdGlvbigpLT54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5IC0gY29udGFpbmluZ0Jsb2NrKCktPnkoKSArIGNvbnRpbnVhdGlvbigpLT55KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExldmVsKTsKIH0KIApAQCAt
MzI0LDcgKzMyNiw3IEBAIGJvb2wgUmVuZGVySW5saW5lOjpyZXF1aXJlc0xheWVyKCkKICAgICBy
ZXR1cm4gaXNSZWxQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVudCgpIHx8IGhhc01hc2soKTsK
IH0KIAotaW50IFJlbmRlcklubGluZTo6d2lkdGgoKSBjb25zdAoraW50IFJlbmRlcklubGluZTo6
Ym91bmRpbmdCb3hXaWR0aCgpIGNvbnN0CiB7CiAgICAgLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiB0
aGUgbWluaW1hbCBsZWZ0IHNpZGUgYW5kIHRoZSBtYXhpbWFsIHJpZ2h0IHNpZGUuCiAgICAgaW50
IGxlZnRTaWRlID0gMDsKQEAgLTMzOSw3ICszNDEsNyBAQCBpbnQgUmVuZGVySW5saW5lOjp3aWR0
aCgpIGNvbnN0CiAgICAgcmV0dXJuIHJpZ2h0U2lkZSAtIGxlZnRTaWRlOwogfQogCi1pbnQgUmVu
ZGVySW5saW5lOjpoZWlnaHQoKSBjb25zdAoraW50IFJlbmRlcklubGluZTo6Ym91bmRpbmdCb3hI
ZWlnaHQoKSBjb25zdAogewogICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTI4OTcyMT4sIGZv
ciBhbiB1bmtub3duIHJlYXNvbiB0aGUgbGlua2VkIGxpc3QgaGVyZSBpcyBzb21ldGltZXMgaW5j
b25zaXN0ZW50LCBmaXJzdCBpcyBub24temVybyBhbmQgbGFzdCBpcyB6ZXJvLiAgV2UgaGF2ZSBi
ZWVuCiAgICAgLy8gdW5hYmxlIHRvIHJlcHJvZHVjZSB0aGlzIGF0IGFsbCAoYW5kIGNvbnNlcXVl
bnRseSB1bmFibGUgdG8gZmlndXJlIG90IHdoeSB0aGlzIGlzIGhhcHBlbmluZykuICBUaGUgYXNz
ZXJ0IHdpbGwgaG9wZWZ1bGx5IGNhdGNoIHRoZSBwcm9ibGVtIGluIGRlYnVnCkBAIC0zODUsMTQg
KzM4NywxNCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVySW5saW5lOjpwb3NpdGlvbkZvCiB7CiAg
ICAgLy8gVHJhbnNsYXRlIHRoZSBjb29yZHMgZnJvbSB0aGUgcHJlLWFub255bW91cyBibG9jayB0
byB0aGUgcG9zdC1hbm9ueW1vdXMgYmxvY2suCiAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFp
bmluZ0Jsb2NrKCk7Ci0gICAgaW50IHBhcmVudEJsb2NrWCA9IGNiLT54UG9zKCkgKyB4OwotICAg
IGludCBwYXJlbnRCbG9ja1kgPSBjYi0+eVBvcygpICsgeTsKKyAgICBpbnQgcGFyZW50QmxvY2tY
ID0gY2ItPngoKSArIHg7CisgICAgaW50IHBhcmVudEJsb2NrWSA9IGNiLT55KCkgKyB5OwogICAg
IGZvciAoUmVuZGVyRmxvdyogYyA9IGNvbnRpbnVhdGlvbigpOyBjOyBjID0gYy0+Y29udGludWF0
aW9uKCkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBjb250QmxvY2sgPSBjOworICAgICAgICBS
ZW5kZXJGbG93KiBjb250QmxvY2sgPSBjOwogICAgICAgICBpZiAoYy0+aXNJbmxpbmUoKSkKICAg
ICAgICAgICAgIGNvbnRCbG9jayA9IGMtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICBpZiAo
Yy0+aXNJbmxpbmUoKSB8fCBjLT5maXJzdENoaWxkKCkpCi0gICAgICAgICAgICByZXR1cm4gYy0+
cG9zaXRpb25Gb3JDb29yZGluYXRlcyhwYXJlbnRCbG9ja1ggLSBjb250QmxvY2stPnhQb3MoKSwg
cGFyZW50QmxvY2tZIC0gY29udEJsb2NrLT55UG9zKCkpOworICAgICAgICAgICAgcmV0dXJuIGMt
PnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMocGFyZW50QmxvY2tYIC0gY29udEJsb2NrLT54KCksIHBh
cmVudEJsb2NrWSAtIGNvbnRCbG9jay0+eSgpKTsKICAgICB9CiAKICAgICByZXR1cm4gUmVuZGVy
Rmxvdzo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4LCB5KTsKSW5kZXg6IHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlz
aW9uIDQwMDc1KQorKysgcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw4ICs1OSw4IEBAIHB1YmxpYzoKICAgICAvLyBvdmVycmlkZXMgUmVuZGVyT2JqZWN0CiAg
ICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKTsKIAotICAgIHZpcnR1YWwgaW50IHdpZHRo
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3Q7CisgICAgaW50IGJvdW5k
aW5nQm94V2lkdGgoKSBjb25zdDsKKyAgICBpbnQgYm91bmRpbmdCb3hIZWlnaHQoKSBjb25zdDsK
IAogICAgIC8vIHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldFdpZHRoL0hlaWdodC4gIE92ZXJyaWRk
ZW4gYnkgaW5saW5lcyAoUmVuZGVyRmxvdykgdG8gcmV0dXJuCiAgICAgLy8gdGhlIHJlbWFpbmlu
ZyB3aWR0aCBvbiBhIGdpdmVuIGxpbmUgKGFuZCB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGxpbmUp
LgpJbmRleDogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA0MDA3OCkKKysrIHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVUcmFuc2Zvcm0oKQogICAgIAogICAgIGlmIChoYXNUcmFuc2Zvcm0pIHsKICAg
ICAgICAgbV90cmFuc2Zvcm0tPnJlc2V0KCk7Ci0gICAgICAgIHJlbmRlcmVyKCktPnN0eWxlKCkt
PmFwcGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwgcmVuZGVyZXIoKS0+Ym9yZGVyQm94KCkuc2l6
ZSgpKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+c3R5bGUoKS0+YXBwbHlUcmFuc2Zvcm0oKm1fdHJh
bnNmb3JtLCByZW5kZXJlcigpLT5ib3JkZXJCb3hSZWN0KCkuc2l6ZSgpKTsKICAgICB9CiB9CiAK
QEAgLTM3NywyNyArMzc3LDI3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b24oKQogICAgIC8vIENsZWFyIG91ciBjYWNoZWQgY2xpcCByZWN0IGluZm9ybWF0aW9uLgogICAg
IGNsZWFyQ2xpcFJlY3RzKCk7CiAKLSAgICBpbnQgeCA9IHJlbmRlcmVyKCktPnhQb3MoKTsKLSAg
ICBpbnQgeSA9IHJlbmRlcmVyKCktPnlQb3MoKSAtIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJh
KCk7CisgICAgaW50IHggPSByZW5kZXJlcigpLT54KCk7CisgICAgaW50IHkgPSByZW5kZXJlcigp
LT55KCkgLSByZW5kZXJlcigpLT5pbnRyaW5zaWNQYWRkaW5nVG9wKCk7CiAKICAgICBpZiAoIXJl
bmRlcmVyKCktPmlzUG9zaXRpb25lZCgpICYmIHJlbmRlcmVyKCktPnBhcmVudCgpKSB7CiAgICAg
ICAgIC8vIFdlIG11c3QgYWRqdXN0IG91ciBwb3NpdGlvbiBieSB3YWxraW5nIHVwIHRoZSByZW5k
ZXIgdHJlZSBsb29raW5nIGZvciB0aGUKICAgICAgICAgLy8gbmVhcmVzdCBlbmNsb3Npbmcgb2Jq
ZWN0IHdpdGggYSBsYXllci4KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gcmVuZGVyZXIo
KS0+cGFyZW50KCk7CisgICAgICAgIFJlbmRlckJveCogY3VyciA9IHJlbmRlcmVyKCktPnBhcmVu
dEJveCgpOwogICAgICAgICB3aGlsZSAoY3VyciAmJiAhY3Vyci0+aGFzTGF5ZXIoKSkgewogICAg
ICAgICAgICAgaWYgKCFjdXJyLT5pc1RhYmxlUm93KCkpIHsKICAgICAgICAgICAgICAgICAvLyBS
b3dzIGFuZCBjZWxscyBzaGFyZSB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlICh0aGF0IG9mIHRo
ZSBzZWN0aW9uKS4KICAgICAgICAgICAgICAgICAvLyBPbWl0IHRoZW0gd2hlbiBjb21wdXRpbmcg
b3VyIHhwb3MveXBvcy4KLSAgICAgICAgICAgICAgICB4ICs9IGN1cnItPnhQb3MoKTsKLSAgICAg
ICAgICAgICAgICB5ICs9IGN1cnItPnlQb3MoKTsKKyAgICAgICAgICAgICAgICB4ICs9IGN1cnIt
PngoKTsKKyAgICAgICAgICAgICAgICB5ICs9IGN1cnItPnkoKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIGN1cnIgPSBjdXJy
LT5wYXJlbnRCb3goKTsKICAgICAgICAgfQotICAgICAgICB5ICs9IGN1cnItPmJvcmRlclRvcEV4
dHJhKCk7CisgICAgICAgIHkgKz0gY3Vyci0+aW50cmluc2ljUGFkZGluZ1RvcCgpOwogICAgICAg
ICBpZiAoY3Vyci0+aXNUYWJsZVJvdygpKSB7CiAgICAgICAgICAgICAvLyBQdXQgb3Vyc2VsdmVz
IGludG8gdGhlIHJvdyBjb29yZGluYXRlIHNwYWNlLgotICAgICAgICAgICAgeCAtPSBjdXJyLT54
UG9zKCk7Ci0gICAgICAgICAgICB5IC09IGN1cnItPnlQb3MoKTsKKyAgICAgICAgICAgIHggLT0g
Y3Vyci0+eCgpOworICAgICAgICAgICAgeSAtPSBjdXJyLT55KCk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTQyNiw3ICs0MjYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9uKCkKICAgICBzZXRQb3MoeCx5KTsKIAogICAgIHNldFdpZHRoKHJlbmRlcmVyKCktPndpZHRo
KCkpOwotICAgIHNldEhlaWdodChyZW5kZXJlcigpLT5oZWlnaHQoKSArIHJlbmRlcmVyKCktPmJv
cmRlclRvcEV4dHJhKCkgKyByZW5kZXJlcigpLT5ib3JkZXJCb3R0b21FeHRyYSgpKTsKKyAgICBz
ZXRIZWlnaHQocmVuZGVyZXIoKS0+aGVpZ2h0KCkgKyByZW5kZXJlcigpLT5pbnRyaW5zaWNQYWRk
aW5nVG9wKCkgKyByZW5kZXJlcigpLT5pbnRyaW5zaWNQYWRkaW5nQm90dG9tKCkpOwogCiAgICAg
aWYgKCFyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBpZiAocmVuZGVy
ZXIoKS0+b3ZlcmZsb3dXaWR0aCgpID4gcmVuZGVyZXIoKS0+d2lkdGgoKSkKQEAgLTExNzEsNyAr
MTE3MSw3IEBAIHN0YXRpYyBJbnRSZWN0IHJlc2l6ZXJDb3JuZXJSZWN0KGNvbnN0IFIKIAogYm9v
bCBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuICFzY3JvbGxDb3JuZXJSZWN0KHRoaXMsIHJlbmRlcmVyKCktPmJvcmRlckJveCgpKS5pc0Vt
cHR5KCk7CisgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KHRoaXMsIHJlbmRlcmVyKCktPmJv
cmRlckJveFJlY3QoKSkuaXNFbXB0eSgpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVj
dCkKQEAgLTExODksNyArMTE4OSw3IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJMYXll
cjo6Y3JlYXQKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0
b21TY3JvbGxiYXJTdHlsZSA9IHJlbmRlcmVyKCktPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2Rl
KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTQ1JP
TExCQVIpOwogICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0
ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIodGhpcywgb3JpZW50YXRp
b24sIHJlbmRlcmVyKCktPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCkp
OworICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJh
cih0aGlzLCBvcmllbnRhdGlvbiwgcmVuZGVyZXIoKS0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5v
ZGUoKS0+cmVuZGVyQm94KCkpOwogICAgIGVsc2UKICAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFy
OjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxi
YXIpOwogICAgIHJlbmRlcmVyKCktPmRvY3VtZW50KCktPnZpZXcoKS0+YWRkQ2hpbGQod2lkZ2V0
LmdldCgpKTsgICAgICAgIApAQCAtMTI3OSw3ICsxMjc5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
cG9zaXRpb25PdmVyZmxvd0NvbnRybwogICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgKCFy
ZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLT5zdHlsZSgpLT5yZXNp
emUoKSA9PSBSRVNJWkVfTk9ORSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBJbnRSZWN0
IGJvcmRlckJveCA9IHJlbmRlcmVyKCktPmJvcmRlckJveCgpOworICAgIEludFJlY3QgYm9yZGVy
Qm94ID0gcmVuZGVyZXIoKS0+Ym9yZGVyQm94UmVjdCgpOwogICAgIEludFJlY3Qgc2Nyb2xsQ29y
bmVyKHNjcm9sbENvcm5lclJlY3QodGhpcywgYm9yZGVyQm94KSk7CiAgICAgSW50UmVjdCBhYnNC
b3VuZHMoYm9yZGVyQm94LngoKSArIHR4LCBib3JkZXJCb3gueSgpICsgdHksIGJvcmRlckJveC53
aWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0KCkpOwogICAgIGlmIChtX3ZCYXIpCkBAIC0xMjk1LDkg
KzEyOTUsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oQmFyLT5oZWlnaHQoKSkpOwogICAg
IAogICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFJl
Y3Qoc2Nyb2xsQ29ybmVyKTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChz
Y3JvbGxDb3JuZXIpOwogICAgIGlmIChtX3Jlc2l6ZXIpCi0gICAgICAgIG1fcmVzaXplci0+c2V0
UmVjdChyZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBib3JkZXJCb3gpKTsKKyAgICAgICAgbV9yZXNp
emVyLT5zZXRGcmFtZVJlY3QocmVzaXplckNvcm5lclJlY3QodGhpcywgYm9yZGVyQm94KSk7CiB9
CiAKIGludCBSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGgoKQpAQCAtMTQ5Myw3ICsxNDkzLDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKAogCiB2b2lkIFJlbmRlckxh
eWVyOjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwg
aW50IHR5LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQogewotICAgIEludFJlY3QgY29ybmVy
UmVjdCA9IHNjcm9sbENvcm5lclJlY3QodGhpcywgcmVuZGVyZXIoKS0+Ym9yZGVyQm94KCkpOwor
ICAgIEludFJlY3QgY29ybmVyUmVjdCA9IHNjcm9sbENvcm5lclJlY3QodGhpcywgcmVuZGVyZXIo
KS0+Ym9yZGVyQm94UmVjdCgpKTsKICAgICBJbnRSZWN0IGFic1JlY3QgPSBJbnRSZWN0KGNvcm5l
clJlY3QueCgpICsgdHgsIGNvcm5lclJlY3QueSgpICsgdHksIGNvcm5lclJlY3Qud2lkdGgoKSwg
Y29ybmVyUmVjdC5oZWlnaHQoKSk7CiAgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdl
UmVjdCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTYsNyArMTUxNiw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGljc0MKICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUo
KS0+cmVzaXplKCkgPT0gUkVTSVpFX05PTkUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJl
Y3QgY29ybmVyUmVjdCA9IHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIHJlbmRlcmVyKCktPmJvcmRl
ckJveCgpKTsKKyAgICBJbnRSZWN0IGNvcm5lclJlY3QgPSByZXNpemVyQ29ybmVyUmVjdCh0aGlz
LCByZW5kZXJlcigpLT5ib3JkZXJCb3hSZWN0KCkpOwogICAgIEludFJlY3QgYWJzUmVjdCA9IElu
dFJlY3QoY29ybmVyUmVjdC54KCkgKyB0eCwgY29ybmVyUmVjdC55KCkgKyB0eSwgY29ybmVyUmVj
dC53aWR0aCgpLCBjb3JuZXJSZWN0LmhlaWdodCgpKTsKICAgICBpZiAoIWFic1JlY3QuaW50ZXJz
ZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcyNCw4ICsxNzI0LDggQEAg
UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvbwogICAgIGNhbGN1bGF0ZVJl
Y3RzKHJvb3RMYXllciwgcGFpbnREaXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBj
bGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0LCB0ZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgIGlu
dCB4ID0gbGF5ZXJCb3VuZHMueCgpOwogICAgIGludCB5ID0gbGF5ZXJCb3VuZHMueSgpOwotICAg
IGludCB0eCA9IHggLSByZW5kZXJlcigpLT54UG9zKCk7Ci0gICAgaW50IHR5ID0geSAtIHJlbmRl
cmVyKCktPnlQb3MoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCk7CisgICAgaW50IHR4
ID0geCAtIHJlbmRlcmVyKCktPngoKTsKKyAgICBpbnQgdHkgPSB5IC0gcmVuZGVyZXIoKS0+eSgp
ICsgcmVuZGVyZXIoKS0+aW50cmluc2ljUGFkZGluZ1RvcCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAvLyBFbnN1cmUgb3VyIGxpc3RzIGFyZSB1cC10by1kYXRlLgogICAg
IHVwZGF0ZVpPcmRlckxpc3RzKCk7CkBAIC0xOTQ4LDggKzE5NDgsOCBAQCBSZW5kZXJMYXllciog
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAgICAgLy8gTmV4dCB3ZSB3YW50IHRvIHNlZSBp
ZiB0aGUgbW91c2UgcG9zIGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBvZiB0aGUg
bGF5ZXIuCiAgICAgaWYgKGZnUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpICYmIAogICAgICAg
ICByZW5kZXJlcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFBvaW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLngoKSAtIHJlbmRlcmVyKCktPnhQ
b3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckJvdW5kcy55KCkgLSByZW5k
ZXJlcigpLT55UG9zKCkgKyByZW5kZXJlcigpLT5ib3JkZXJUb3BFeHRyYSgpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXllckJvdW5kcy54KCkgLSByZW5kZXJlcigpLT54KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueSgpIC0gcmVuZGVyZXIoKS0+
eSgpICsgcmVuZGVyZXIoKS0+aW50cmluc2ljUGFkZGluZ1RvcCgpLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBIaXRUZXN0RGVzY2VuZGFudHMpKSB7CiAgICAgICAgIC8vIEZvciBwb3Np
dGlvbmVkIGdlbmVyYXRlZCBjb250ZW50LCB3ZSBtaWdodCBzdGlsbCBub3QgaGF2ZSBhCiAgICAg
ICAgIC8vIG5vZGUgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIHRoZSBsYXllciBsZXZlbCwgc2luY2Ug
bm9uZSBvZgpAQCAtMTk3OCw4ICsxOTc4LDggQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpo
aXRUZXN0TGF5ZXIoUgogICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIGlz
IGluc2lkZSB0aGlzIGxheWVyIGJ1dCBub3QgYW55IG9mIGl0cyBjaGlsZHJlbi4KICAgICBpZiAo
YmdSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkgJiYKICAgICAgICAgcmVuZGVyZXIoKS0+aGl0
VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQb2ludCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsYXllckJvdW5kcy54KCkgLSByZW5kZXJlcigpLT54UG9zKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueSgpIC0gcmVuZGVyZXIoKS0+eVBvcygpICsg
cmVuZGVyZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXllckJvdW5kcy54KCkgLSByZW5kZXJlcigpLT54KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGF5ZXJCb3VuZHMueSgpIC0gcmVuZGVyZXIoKS0+eSgpICsgcmVuZGVyZXIoKS0+
aW50cmluc2ljUGFkZGluZ1RvcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdFRl
c3RTZWxmKSkgewogICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5vZGUoKSB8fCAhcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpKSB7CiAgICAgICAgICAgICBOb2RlKiBlID0gZW5jbG9zaW5nRWxl
bWVudCgpOwpAQCAtMjIxNywxNiArMjIxNywxNiBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpib3Vu
ZGluZ0JveChjb25zdCBSCiAgICAgICAgIGludCBsZWZ0ID0gZmlyc3RCb3gtPnhQb3MoKTsKICAg
ICAgICAgZm9yIChJbmxpbmVSdW5Cb3gqIGN1cnIgPSBmaXJzdEJveC0+bmV4dExpbmVCb3goKTsg
Y3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCiAgICAgICAgICAgICBsZWZ0ID0gbWlu
KGxlZnQsIGN1cnItPnhQb3MoKSk7Ci0gICAgICAgIHJlc3VsdCA9IEludFJlY3QobV94ICsgbGVm
dCwgbV95ICsgKHRvcCAtIHJlbmRlcmVyKCktPnlQb3MoKSksIHdpZHRoKCksIGJvdHRvbSAtIHRv
cCk7CisgICAgICAgIHJlc3VsdCA9IEludFJlY3QobV94ICsgbGVmdCwgbV95ICsgKHRvcCAtIHJl
bmRlcmVyKCktPnkoKSksIHdpZHRoKCksIGJvdHRvbSAtIHRvcCk7CiAgICAgfSBlbHNlIGlmIChy
ZW5kZXJlcigpLT5pc1RhYmxlUm93KCkpIHsKICAgICAgICAgLy8gT3VyIGJvdW5kaW5nIGJveCBp
cyBqdXN0IHRoZSB1bmlvbiBvZiBhbGwgb2Ygb3VyIGNlbGxzJyBib3JkZXIvb3ZlcmZsb3cgcmVj
dHMuCiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJlbmRlcmVyKCktPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAg
ICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSkgewotICAgICAgICAgICAgICAgIEludFJlY3Qg
YmJveCA9IGNoaWxkLT5ib3JkZXJCb3goKTsKLSAgICAgICAgICAgICAgICBiYm94Lm1vdmUoMCwg
Y2hpbGQtPmJvcmRlclRvcEV4dHJhKCkpOworICAgICAgICAgICAgICAgIEludFJlY3QgYmJveCA9
IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KGNoaWxkKS0+Ym9yZGVyQm94UmVjdCgpOworICAgICAg
ICAgICAgICAgIGJib3gubW92ZSgwLCBjaGlsZC0+aW50cmluc2ljUGFkZGluZ1RvcCgpKTsKICAg
ICAgICAgICAgICAgICByZXN1bHQudW5pdGUoYmJveCk7CiAgICAgICAgICAgICAgICAgSW50UmVj
dCBvdmVyZmxvd1JlY3QgPSByZW5kZXJlcigpLT5vdmVyZmxvd1JlY3QoZmFsc2UpOwotICAgICAg
ICAgICAgICAgIG92ZXJmbG93UmVjdC5tb3ZlKDAsIGNoaWxkLT5ib3JkZXJUb3BFeHRyYSgpKTsK
KyAgICAgICAgICAgICAgICBvdmVyZmxvd1JlY3QubW92ZSgwLCBjaGlsZC0+aW50cmluc2ljUGFk
ZGluZ1RvcCgpKTsKICAgICAgICAgICAgICAgICBpZiAoYmJveCAhPSBvdmVyZmxvd1JlY3QpCiAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZShvdmVyZmxvd1JlY3QpOwogICAgICAgICAg
ICAgfQpAQCAtMjIzNiw3ICsyMjM2LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdC
b3goY29uc3QgUgogICAgICAgICBpZiAocmVuZGVyZXIoKS0+aGFzTWFzaygpKQogICAgICAgICAg
ICAgcmVzdWx0ID0gcmVuZGVyZXIoKS0+bWFza0NsaXBSZWN0KCk7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgSW50UmVjdCBiYm94ID0gcmVuZGVyZXIoKS0+Ym9yZGVyQm94KCk7CisgICAg
ICAgICAgICBJbnRSZWN0IGJib3ggPSByZW5kZXJlcigpLT5ib3JkZXJCb3hSZWN0KCk7CiAgICAg
ICAgICAgICByZXN1bHQgPSBiYm94OwogICAgICAgICAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3Qg
PSByZW5kZXJlcigpLT5vdmVyZmxvd1JlY3QoZmFsc2UpOwogICAgICAgICAgICAgaWYgKGJib3gg
IT0gb3ZlcmZsb3dSZWN0KQpAQCAtMjI0NCwxMSArMjI0NCwxMSBAQCBJbnRSZWN0IFJlbmRlckxh
eWVyOjpib3VuZGluZ0JveChjb25zdCBSCiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBoYXZl
IHRvIGFkanVzdCB0aGUgeC95IG9mIHRoaXMgcmVzdWx0IHNvIHRoYXQgaXQgaXMgaW4gdGhlIGNv
b3JkaW5hdGUgc3BhY2Ugb2YgdGhlIGxheWVyLgotICAgICAgICAvLyBXZSBhbHNvIGhhdmUgdG8g
YWRkIGluIGJvcmRlclRvcEV4dHJhIGhlcmUsIHNpbmNlIGJvcmRlckJveCgpLCBpbiBvcmRlciB0
byBwbGF5IHdlbGwgd2l0aCBtZXRob2RzIGxpa2UKKyAgICAgICAgLy8gV2UgYWxzbyBoYXZlIHRv
IGFkZCBpbiBpbnRyaW5zaWNQYWRkaW5nVG9wIGhlcmUsIHNpbmNlIGJvcmRlckJveFJlY3QoKSwg
aW4gb3JkZXIgdG8gcGxheSB3ZWxsIHdpdGggbWV0aG9kcyBsaWtlCiAgICAgICAgIC8vIGZsb2F0
UmVjdCB0aGF0IGRlYWwgd2l0aCBjaGlsZCBjb250ZW50LCB1c2VzIGFuIG9yaWdpbiBvZiAoMCww
KSB0aGF0IGlzIGF0IHRoZSBjaGlsZCBjb250ZW50IGJveCAoc28KLSAgICAgICAgLy8gYm9yZGVy
IGJveCByZXR1cm5zIGEgeSBjb29yZCBvZiAtYm9yZGVyVG9wRXh0cmEoKS4gIFRoZSBsYXllciwg
aG93ZXZlciwgdXNlcyB0aGUgb3V0ZXIgYm94LiAgVGhpcyBpcyBhbGwKKyAgICAgICAgLy8gYm9y
ZGVyIGJveCByZXR1cm5zIGEgeSBjb29yZCBvZiAtaW50cmluc2ljUGFkZGluZ1RvcCgpLiAgVGhl
IGxheWVyLCBob3dldmVyLCB1c2VzIHRoZSBvdXRlciBib3guICBUaGlzIGlzIGFsbAogICAgICAg
ICAvLyByZWFsbHkgY29uZnVzaW5nLgotICAgICAgICByZXN1bHQubW92ZShtX3gsIG1feSArIHJl
bmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCkpOworICAgICAgICByZXN1bHQubW92ZShtX3gsIG1f
eSArIHJlbmRlcmVyKCktPmludHJpbnNpY1BhZGRpbmdUb3AoKSk7CiAgICAgfQogICAgIAogICAg
IC8vIENvbnZlcnQgdGhlIGJvdW5kaW5nIGJveCB0byBhbiBhYnNvbHV0ZSBwb3NpdGlvbi4gIFdl
IGNhbiBkbyB0aGlzIGVhc2lseSBieSBsb29raW5nIGF0IHRoZSBkZWx0YQpJbmRleDogcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OmNh
bGNIZWlnaHQoKQogICAgIGludCB0b0FkZCA9IHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0b20o
KSArIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCk7CiAgCiAgICAgaW50IGl0ZW1IZWlnaHQg
PSBSZW5kZXJMaXN0Qm94OjppdGVtSGVpZ2h0KCk7Ci0gICAgbV9oZWlnaHQgPSBpdGVtSGVpZ2h0
ICogc2l6ZSgpIC0gcm93U3BhY2luZyArIHRvQWRkOworICAgIHNldEhlaWdodChpdGVtSGVpZ2h0
ICogc2l6ZSgpIC0gcm93U3BhY2luZyArIHRvQWRkKTsKICAgICAKICAgICBSZW5kZXJCbG9jazo6
Y2FsY0hlaWdodCgpOwogICAgIApAQCAtMzY3LDkgKzM2Nyw5IEBAIGJvb2wgUmVuZGVyTGlzdEJv
eDo6aXNQb2ludEluT3ZlcmZsb3dDb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW50
UmVjdCB2ZXJ0UmVjdChfdHggKyB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIG1fdkJhci0+d2lk
dGgoKSwKLSAgICAgICAgICAgICAgICAgICBfdHkgKyBib3JkZXJUb3AoKSAtIGJvcmRlclRvcEV4
dHJhKCksCisgICAgICAgICAgICAgICAgICAgX3R5ICsgYm9yZGVyVG9wKCkgLSBpbnRyaW5zaWNQ
YWRkaW5nVG9wKCksCiAgICAgICAgICAgICAgICAgICAgbV92QmFyLT53aWR0aCgpLAotICAgICAg
ICAgICAgICAgICAgIGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4
dHJhKCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKKyAgICAgICAgICAgICAgICAg
ICBoZWlnaHQoKSArIGludHJpbnNpY1BhZGRpbmdUb3AoKSArIGludHJpbnNpY1BhZGRpbmdCb3R0
b20oKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkpOwogCiAgICAgaWYgKHZlcnRSZWN0
LmNvbnRhaW5zKF94LCBfeSkpIHsKICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIu
Z2V0KCkpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRl
cmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSwxMiArMjM1LDEy
IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OmxheW91dCgpCiB2b2lkIFJlbmRlckxpc3RJdGVtOjpw
b3NpdGlvbkxpc3RNYXJrZXIoKQogewogICAgIGlmIChtX21hcmtlciAmJiAhbV9tYXJrZXItPmlz
SW5zaWRlKCkgJiYgbV9tYXJrZXItPmlubGluZUJveFdyYXBwZXIoKSkgewotICAgICAgICBpbnQg
bWFya2VyT2xkWCA9IG1fbWFya2VyLT54UG9zKCk7CisgICAgICAgIGludCBtYXJrZXJPbGRYID0g
bV9tYXJrZXItPngoKTsKICAgICAgICAgaW50IHlPZmZzZXQgPSAwOwogICAgICAgICBpbnQgeE9m
ZnNldCA9IDA7Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvID0gbV9tYXJrZXItPnBhcmVu
dCgpOyBvICE9IHRoaXM7IG8gPSBvLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgeU9mZnNldCAr
PSBvLT55UG9zKCk7Ci0gICAgICAgICAgICB4T2Zmc2V0ICs9IG8tPnhQb3MoKTsKKyAgICAgICAg
Zm9yIChSZW5kZXJCb3gqIG8gPSBtX21hcmtlci0+cGFyZW50Qm94KCk7IG8gIT0gdGhpczsgbyA9
IG8tPnBhcmVudEJveCgpKSB7CisgICAgICAgICAgICB5T2Zmc2V0ICs9IG8tPnkoKTsKKyAgICAg
ICAgICAgIHhPZmZzZXQgKz0gby0+eCgpOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBhZGp1
c3RPdmVyZmxvdyA9IGZhbHNlOwpAQCAtMjY3LDEyICsyNjcsMTIgQEAgdm9pZCBSZW5kZXJMaXN0
SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKAogCiAgICAgICAgIGlmIChhZGp1c3RPdmVyZmxvdykg
ewogICAgICAgICAgICAgSW50UmVjdCBtYXJrZXJSZWN0KG1hcmtlclhQb3MgKyB4T2Zmc2V0LCB5
T2Zmc2V0LCBtX21hcmtlci0+d2lkdGgoKSwgbV9tYXJrZXItPmhlaWdodCgpKTsKLSAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogbyA9IG1fbWFya2VyOworICAgICAgICAgICAgUmVuZGVyQm94KiBv
ID0gbV9tYXJrZXI7CiAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgbyA9IG8tPnBh
cmVudCgpOworICAgICAgICAgICAgICAgIG8gPSBvLT5wYXJlbnRCb3goKTsKICAgICAgICAgICAg
ICAgICBpZiAoby0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJCbG9jayo+KG8pLT5hZGRWaXN1YWxPdmVyZmxvdyhtYXJrZXJSZWN0KTsKLSAg
ICAgICAgICAgICAgICBtYXJrZXJSZWN0Lm1vdmUoLW8tPnhQb3MoKSwgLW8tPnlQb3MoKSk7Cisg
ICAgICAgICAgICAgICAgbWFya2VyUmVjdC5tb3ZlKC1vLT54KCksIC1vLT55KCkpOwogICAgICAg
ICAgICAgfSB3aGlsZSAobyAhPSB0aGlzKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4MCw3ICsy
ODAsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxpc3RNYXJrZXIoCiAKIHZvaWQg
UmVuZGVyTGlzdEl0ZW06OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0
eSkKIHsKLSAgICBpZiAoIW1faGVpZ2h0KQorICAgIGlmICghaGVpZ2h0KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFJlbmRlckJsb2NrOjpwYWludChwYWludEluZm8sIHR4LCB0eSk7CkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDcgKzUzMCw3IEBAIHZvaWQg
UmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBJbnRSZWN0IG1hcmtlciA9
IGdldFJlbGF0aXZlTWFya2VyUmVjdCgpOwogICAgIG1hcmtlci5tb3ZlKHR4LCB0eSk7CiAKLSAg
ICBJbnRSZWN0IGJveCh0eCArIG1feCwgdHkgKyBtX3ksIG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAg
ICBJbnRSZWN0IGJveCh0eCArIHgoKSwgdHkgKyBtX2ZyYW1lUmVjdC55KCksIHdpZHRoKCksIGhl
aWdodCgpKTsKIAogICAgIGlmIChib3gueSgpID4gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgfHwg
Ym94LnkoKSArIGJveC5oZWlnaHQoKSA8IHBhaW50SW5mby5yZWN0LnkoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNjM2LDExICs2MzYsMTEgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpsYXlvdXQo
KQogICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5KCkpOwogCiAgICAgaWYgKGlzSW1hZ2UoKSkg
ewotICAgICAgICBtX3dpZHRoID0gbV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSkud2lkdGgoKTsKLSAgICAgICAgbV9oZWlnaHQgPSBtX2ltYWdlLT5pbWFn
ZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS5oZWlnaHQoKTsKKyAgICAgICAg
c2V0V2lkdGgobV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkud2lkdGgoKSk7CisgICAgICAgIHNldEhlaWdodChtX2ltYWdlLT5pbWFnZVNpemUodGhpcywg
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS5oZWlnaHQoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgbV93aWR0aCA9IG1pblByZWZXaWR0aCgpOwotICAgICAgICBtX2hlaWdodCA9IHN0eWxlKCkt
PmZvbnQoKS5oZWlnaHQoKTsKKyAgICAgICAgc2V0V2lkdGgobWluUHJlZldpZHRoKCkpOworICAg
ICAgICBzZXRIZWlnaHQoc3R5bGUoKS0+Zm9udCgpLmhlaWdodCgpKTsKICAgICB9CiAKICAgICBt
X21hcmdpbkxlZnQgPSBtX21hcmdpblJpZ2h0ID0gMDsKQEAgLTY2MSw3ICs2NjEsNyBAQCB2b2lk
IFJlbmRlckxpc3RNYXJrZXI6OmltYWdlQ2hhbmdlZChXcmFwCiAgICAgaWYgKG8gIT0gbV9pbWFn
ZS0+ZGF0YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV93aWR0aCAhPSBtX2ltYWdl
LT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS53aWR0aCgpIHx8IG1f
aGVpZ2h0ICE9IG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpLmhlaWdodCgpIHx8IG1faW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKKyAgICBpZiAod2lkdGgo
KSAhPSBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS53
aWR0aCgpIHx8IGhlaWdodCgpICE9IG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpLmhlaWdodCgpIHx8IG1faW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKICAg
ICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgZWxzZQogICAg
ICAgICByZXBhaW50KCk7CkBAIC04MjksNyArODI5LDcgQEAgYm9vbCBSZW5kZXJMaXN0TWFya2Vy
Ojppc0luc2lkZSgpIGNvbnN0CiBJbnRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OmdldFJlbGF0aXZl
TWFya2VyUmVjdCgpCiB7CiAgICAgaWYgKGlzSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIEludFJl
Y3QobV94LCBtX3ksIG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpLndpZHRoKCksIG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCkpLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoeCgpLCBtX2ZyYW1l
UmVjdC55KCksIG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpLndpZHRoKCksIG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpLmhlaWdodCgpKTsKIAogICAgIHN3aXRjaCAoc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgRElTQzoKQEAgLTgzOSw3ICs4MzksNyBAQCBJbnRSZWN0IFJlbmRl
ckxpc3RNYXJrZXI6OmdldFJlbGF0aXZlTWFyCiAgICAgICAgICAgICBjb25zdCBGb250JiBmb250
ID0gc3R5bGUoKS0+Zm9udCgpOwogICAgICAgICAgICAgaW50IGFzY2VudCA9IGZvbnQuYXNjZW50
KCk7CiAgICAgICAgICAgICBpbnQgYnVsbGV0V2lkdGggPSAoYXNjZW50ICogMiAvIDMgKyAxKSAv
IDI7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdChtX3ggKyAxLCBtX3kgKyAzICogKGFzY2Vu
dCAtIGFzY2VudCAqIDIgLyAzKSAvIDIsIGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCk7CisgICAg
ICAgICAgICByZXR1cm4gSW50UmVjdCh4KCkgKyAxLCBtX2ZyYW1lUmVjdC55KCkgKyAzICogKGFz
Y2VudCAtIGFzY2VudCAqIDIgLyAzKSAvIDIsIGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCk7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBMTk9ORToKICAgICAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CkBAIC04NjYsNyArODY2LDcgQEAgSW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxh
dGl2ZU1hcgogICAgICAgICAgICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgobV90ZXh0KTsK
ICAgICAgICAgICAgIGNvbnN0IFVDaGFyIHBlcmlvZFNwYWNlWzJdID0geyAnLicsICcgJyB9Owog
ICAgICAgICAgICAgaW50IHBlcmlvZFNwYWNlV2lkdGggPSBmb250LndpZHRoKFRleHRSdW4ocGVy
aW9kU3BhY2UsIDIpKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KG1feCwgbV95ICsgZm9u
dC5hc2NlbnQoKSwgaXRlbVdpZHRoICsgcGVyaW9kU3BhY2VXaWR0aCwgZm9udC5oZWlnaHQoKSk7
CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCh4KCksIG1fZnJhbWVSZWN0LnkoKSArIGZvbnQu
YXNjZW50KCksIGl0ZW1XaWR0aCArIHBlcmlvZFNwYWNlV2lkdGgsIGZvbnQuaGVpZ2h0KCkpOwog
ICAgIH0KIAogICAgIHJldHVybiBJbnRSZWN0KCk7CkBAIC04ODksNyArODg5LDcgQEAgSW50UmVj
dCBSZW5kZXJMaXN0TWFya2VyOjpzZWxlY3Rpb25SZWN0KAogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwogCiAgICAgUm9vdElubGluZUJveCogcm9vdCA9IGlubGluZUJveFdyYXBwZXIoKS0+cm9v
dCgpOwotICAgIEludFJlY3QgcmVjdCgwLCByb290LT5zZWxlY3Rpb25Ub3AoKSAtIHlQb3MoKSwg
d2lkdGgoKSwgcm9vdC0+c2VsZWN0aW9uSGVpZ2h0KCkpOworICAgIEludFJlY3QgcmVjdCgwLCBy
b290LT5zZWxlY3Rpb25Ub3AoKSAtIHkoKSwgd2lkdGgoKSwgcm9vdC0+c2VsZWN0aW9uSGVpZ2h0
KCkpOwogICAgICAgICAgICAgCiAgICAgaWYgKGNsaXBUb1Zpc2libGVDb250ZW50KQogICAgICAg
ICBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyZWN0KTsKSW5kZXg6IHJlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJ
KHJldmlzaW9uIDQwMDc1KQorKysgcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgYm9vbCBSZW5kZXJNYXJxdWVlOjppc0hvcml6b250
YWwoKSBjb25zdAogCiBpbnQgUmVuZGVyTWFycXVlZTo6Y29tcHV0ZVBvc2l0aW9uKEVNYXJxdWVl
RGlyZWN0aW9uIGRpciwgYm9vbCBzdG9wQXRDb250ZW50RWRnZSkKIHsKLSAgICBSZW5kZXJPYmpl
Y3QqIG8gPSBtX2xheWVyLT5yZW5kZXJlcigpOworICAgIFJlbmRlckJveCogbyA9IG1fbGF5ZXIt
PnJlbmRlcmVyKCk7CiAgICAgUmVuZGVyU3R5bGUqIHMgPSBvLT5zdHlsZSgpOwogICAgIGlmIChp
c0hvcml6b250YWwoKSkgewogICAgICAgICBib29sIGx0ciA9IHMtPmRpcmVjdGlvbigpID09IExU
UjsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlck1lZGlhLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVy
TWVkaWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTIgKzEwOSwxMiBAQCB2b2lkIFJlbmRl
ck1lZGlhOjpsYXlvdXQoKQogCiAgICAgUmVuZGVyUmVwbGFjZWQ6OmxheW91dCgpOwogCi0gICAg
UmVuZGVyT2JqZWN0KiBjb250cm9sc1JlbmRlcmVyID0gbV9jb250cm9sc1NoYWRvd1Jvb3QgPyBt
X2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSA6IDA7CisgICAgUmVuZGVyQm94KiBjb250
cm9sc1JlbmRlcmVyID0gbV9jb250cm9sc1NoYWRvd1Jvb3QgPyBtX2NvbnRyb2xzU2hhZG93Um9v
dC0+cmVuZGVyQm94KCkgOiAwOwogICAgIGlmICghY29udHJvbHNSZW5kZXJlcikKICAgICAgICAg
cmV0dXJuOwogICAgIEludFNpemUgbmV3U2l6ZSA9IGNvbnRlbnRCb3goKS5zaXplKCk7CiAgICAg
aWYgKG5ld1NpemUgIT0gb2xkU2l6ZSB8fCBjb250cm9sc1JlbmRlcmVyLT5uZWVkc0xheW91dCgp
KSB7Ci0gICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldFBvcyhib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CisgICAgICAgIGNvbnRyb2xz
UmVuZGVyZXItPnNldExvY2F0aW9uKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRl
clRvcCgpICsgcGFkZGluZ1RvcCgpKTsKICAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c3R5bGUo
KS0+c2V0SGVpZ2h0KExlbmd0aChuZXdTaXplLmhlaWdodCgpLCBGaXhlZCkpOwogICAgICAgICBj
b250cm9sc1JlbmRlcmVyLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgp
LCBGaXhlZCkpOwogICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5zZXROZWVkc0xheW91dCh0cnVl
LCBmYWxzZSk7CkBAIC00NDAsNyArNDQwLDcgQEAgaW50IFJlbmRlck1lZGlhOjpsb3dlc3RQb3Np
dGlvbihib29sIGluYwogICAgIGlmICghbV9jb250cm9sc1NoYWRvd1Jvb3QgfHwgIW1fY29udHJv
bHNTaGFkb3dSb290LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gYm90dG9tOwogICAgIAot
ICAgIHJldHVybiBtYXgoYm90dG9tLCAgbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkt
PnlQb3MoKSArIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpLT5sb3dlc3RQb3NpdGlv
bihpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgaW5jbHVkZVNlbGYpKTsKKyAgICByZXR1cm4gbWF4
KGJvdHRvbSwgIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJCb3goKS0+eSgpICsgbV9jb250
cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCktPmxvd2VzdFBvc2l0aW9uKGluY2x1ZGVPdmVyZmxv
d0ludGVyaW9yLCBpbmNsdWRlU2VsZikpOwogfQogCiBpbnQgUmVuZGVyTWVkaWE6OnJpZ2h0bW9z
dFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGJvb2wgaW5jbHVkZVNlbGYp
IGNvbnN0CkBAIC00NDksNyArNDQ5LDcgQEAgaW50IFJlbmRlck1lZGlhOjpyaWdodG1vc3RQb3Np
dGlvbihib29sIAogICAgIGlmICghbV9jb250cm9sc1NoYWRvd1Jvb3QgfHwgIW1fY29udHJvbHNT
aGFkb3dSb290LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gcmlnaHQ7CiAgICAgCi0gICAg
cmV0dXJuIG1heChyaWdodCwgbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCktPnhQb3Mo
KSArIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpLT5yaWdodG1vc3RQb3NpdGlvbihp
bmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgaW5jbHVkZVNlbGYpKTsKKyAgICByZXR1cm4gbWF4KHJp
Z2h0LCBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyQm94KCktPngoKSArIG1fY29udHJvbHNT
aGFkb3dSb290LT5yZW5kZXJlcigpLT5yaWdodG1vc3RQb3NpdGlvbihpbmNsdWRlT3ZlcmZsb3dJ
bnRlcmlvciwgaW5jbHVkZVNlbGYpKTsKIH0KIAogaW50IFJlbmRlck1lZGlhOjpsZWZ0bW9zdFBv
c2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGJvb2wgaW5jbHVkZVNlbGYpIGNv
bnN0CkBAIC00NTgsNyArNDU4LDcgQEAgaW50IFJlbmRlck1lZGlhOjpsZWZ0bW9zdFBvc2l0aW9u
KGJvb2wgaQogICAgIGlmICghbV9jb250cm9sc1NoYWRvd1Jvb3QgfHwgIW1fY29udHJvbHNTaGFk
b3dSb290LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gbGVmdDsKICAgICAKLSAgICByZXR1
cm4gbWluKGxlZnQsIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpLT54UG9zKCkgKyAg
bV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCktPmxlZnRtb3N0UG9zaXRpb24oaW5jbHVk
ZU92ZXJmbG93SW50ZXJpb3IsIGluY2x1ZGVTZWxmKSk7CisgICAgcmV0dXJuIG1pbihsZWZ0LCBt
X2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyQm94KCktPngoKSArICBtX2NvbnRyb2xzU2hhZG93
Um9vdC0+cmVuZGVyZXIoKS0+bGVmdG1vc3RQb3NpdGlvbihpbmNsdWRlT3ZlcmZsb3dJbnRlcmlv
ciwgaW5jbHVkZVNlbGYpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcmVu
ZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
TWVudUxpc3QuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5kZXJNZW51TGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw4ICsyMjQsOCBAQCBJbnRSZWN0IFJlbmRlck1l
bnVMaXN0Ojpjb250cm9sQ2xpcFJlY3QoCiAgICAgICAgICAgICAgICAgICAgY29udGVudFdpZHRo
KCksIAogICAgICAgICAgICAgICAgICAgIGNvbnRlbnRIZWlnaHQoKSk7CiAgICAgCi0gICAgSW50
UmVjdCBpbm5lckJveCh0eCArIG1faW5uZXJCbG9jay0+eFBvcygpICsgbV9pbm5lckJsb2NrLT5w
YWRkaW5nTGVmdCgpLCAKLSAgICAgICAgICAgICAgICAgICB0eSArIG1faW5uZXJCbG9jay0+eVBv
cygpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nVG9wKCksCisgICAgSW50UmVjdCBpbm5lckJveCh0
eCArIG1faW5uZXJCbG9jay0+eCgpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nTGVmdCgpLCAKKyAg
ICAgICAgICAgICAgICAgICB0eSArIG1faW5uZXJCbG9jay0+eSgpICsgbV9pbm5lckJsb2NrLT5w
YWRkaW5nVG9wKCksCiAgICAgICAgICAgICAgICAgICAgbV9pbm5lckJsb2NrLT5jb250ZW50V2lk
dGgoKSwgCiAgICAgICAgICAgICAgICAgICAgbV9pbm5lckJsb2NrLT5jb250ZW50SGVpZ2h0KCkp
OwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI5LDcgKzUyOSw3IEBAIGludCBSZW5k
ZXJPYmplY3Q6Om9mZnNldFRvcCgpIGNvbnN0CiAgICAgUmVuZGVyT2JqZWN0KiBvZmZzZXRQYXIg
PSBvZmZzZXRQYXJlbnQoKTsKICAgICBpZiAoIW9mZnNldFBhcikKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaW50IHkgPSB5UG9zKCkgLSBib3JkZXJUb3BFeHRyYSgpIC0gb2Zmc2V0UGFyLT5ib3Jk
ZXJUb3AoKTsKKyAgICBpbnQgeSA9IHlQb3MoKSAtIGludHJpbnNpY1BhZGRpbmdUb3AoKSAtIG9m
ZnNldFBhci0+Ym9yZGVyVG9wKCk7CiAgICAgaWYgKCFpc1Bvc2l0aW9uZWQoKSkgewogICAgICAg
ICBpZiAoaXNSZWxQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICB5ICs9IHN0YXRpY19jYXN0PGNv
bnN0IFJlbmRlckJveCo+KHRoaXMpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WSgpOwpAQCAtNjc2
LDcgKzY3Niw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpoYXNTdGF0aWNZKCkgY29uc3QKICAgICBy
ZXR1cm4gKHN0eWxlKCktPnRvcCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmJvdHRvbSgpLmlzQXV0
bygpKSB8fCBzdHlsZSgpLT50b3AoKS5pc1N0YXRpYygpOwogfQogCi12b2lkIFJlbmRlck9iamVj
dDo6bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJPYmplY3QqKQor
dm9pZCBSZW5kZXJPYmplY3Q6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQo
UmVuZGVyQm94KikKIHsKIH0KIApAQCAtMTcxNCw3ICsxNzE0LDcgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlUmVjdHMoVmVjdG9yPAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHggLSB4UG9zKCkgKyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9jaygpLT54UG9z
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAtIHlQb3MoKSArIGNv
bnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCktPnlQb3MoKSwgdG9wTGV2ZWwpOwogICAgIH0g
ZWxzZQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdo
dCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCkpKTsKKyAgICAgICAg
cmVjdHMuYXBwZW5kKEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSArIGludHJpbnNp
Y1BhZGRpbmdUb3AoKSArIGludHJpbnNpY1BhZGRpbmdCb3R0b20oKSkpOwogfQogCiBJbnRSZWN0
IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1z
KQpAQCAtMTc2Myw3ICsxNzYzLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlUXVhZHMo
VmVjdG9yPAogICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChsb2NhbFJl
Y3QpKTsKICAgICAgICAgY29udGludWF0aW9uLT5hYnNvbHV0ZVF1YWRzKHF1YWRzLCB0b3BMZXZl
bCk7CiAgICAgfSBlbHNlCi0gICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFk
KEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBi
b3JkZXJCb3R0b21FeHRyYSgpKSkpOworICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBpbnRyaW5zaWNQYWRk
aW5nVG9wKCkgKyBpbnRyaW5zaWNQYWRkaW5nQm90dG9tKCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVy
T2JqZWN0OjphZGRBYnNvbHV0ZVJlY3RGb3JMYXllcihJbnRSZWN0JiByZXN1bHQpCkBAIC0yNDMw
LDcgKzI0MzAsNyBAQCBGbG9hdFBvaW50IFJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlCiB7
CiAgICAgUmVuZGVyT2JqZWN0KiBvID0gcGFyZW50KCk7CiAgICAgaWYgKG8pIHsKLSAgICAgICAg
bG9jYWxQb2ludC5tb3ZlKDAuMGYsIHN0YXRpY19jYXN0PGZsb2F0PihvLT5ib3JkZXJUb3BFeHRy
YSgpKSk7CisgICAgICAgIGxvY2FsUG9pbnQubW92ZSgwLjBmLCBzdGF0aWNfY2FzdDxmbG9hdD4o
by0+aW50cmluc2ljUGFkZGluZ1RvcCgpKSk7CiAgICAgICAgIGlmIChvLT5oYXNPdmVyZmxvd0Ns
aXAoKSkKICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gby0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250
ZW50T2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiBvLT5sb2NhbFRvQWJzb2x1dGUobG9jYWxQb2lu
dCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMpOwpAQCAtMjQ0NCw3ICsyNDQ0LDcgQEAgRmxvYXRQb2lu
dCBSZW5kZXJPYmplY3Q6OmFic29sdXRlVG9Mb2NhbAogICAgIFJlbmRlck9iamVjdCogbyA9IHBh
cmVudCgpOwogICAgIGlmIChvKSB7CiAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG8t
PmFic29sdXRlVG9Mb2NhbChjb250YWluZXJQb2ludCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMpOwot
ICAgICAgICBsb2NhbFBvaW50Lm1vdmUoMC4wZiwgLXN0YXRpY19jYXN0PGZsb2F0PihvLT5ib3Jk
ZXJUb3BFeHRyYSgpKSk7CisgICAgICAgIGxvY2FsUG9pbnQubW92ZSgwLjBmLCAtc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG8tPmludHJpbnNpY1BhZGRpbmdUb3AoKSkpOwogICAgICAgICBpZiAoby0+aGFz
T3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgICAgICBsb2NhbFBvaW50ICs9IG8tPmxheWVyKCktPnNj
cm9sbGVkQ29udGVudE9mZnNldCgpOwogICAgICAgICByZXR1cm4gbG9jYWxQb2ludDsKQEAgLTI0
NTcsNyArMjQ1Nyw3IEBAIEZsb2F0UXVhZCBSZW5kZXJPYmplY3Q6OmxvY2FsVG9BYnNvbHV0ZVEK
ICAgICBSZW5kZXJPYmplY3QqIG8gPSBwYXJlbnQoKTsKICAgICBpZiAobykgewogICAgICAgICBG
bG9hdFF1YWQgcXVhZCA9IGxvY2FsUXVhZDsKLSAgICAgICAgcXVhZC5tb3ZlKDAuMGYsIHN0YXRp
Y19jYXN0PGZsb2F0PihvLT5ib3JkZXJUb3BFeHRyYSgpKSk7CisgICAgICAgIHF1YWQubW92ZSgw
LjBmLCBzdGF0aWNfY2FzdDxmbG9hdD4oby0+aW50cmluc2ljUGFkZGluZ1RvcCgpKSk7CiAgICAg
ICAgIGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgICAgIHF1YWQgLT0gby0+bGF5
ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiBvLT5sb2NhbFRv
QWJzb2x1dGVRdWFkKHF1YWQsIGZpeGVkKTsKQEAgLTI0NzEsNyArMjQ3MSw3IEBAIEludFNpemUg
UmVuZGVyT2JqZWN0OjpvZmZzZXRGcm9tQ29udGFpbmUKICAgICBBU1NFUlQobyA9PSBjb250YWlu
ZXIoKSk7CiAKICAgICBJbnRTaXplIG9mZnNldDsKLSAgICBvZmZzZXQuZXhwYW5kKDAsIG8tPmJv
cmRlclRvcEV4dHJhKCkpOworICAgIG9mZnNldC5leHBhbmQoMCwgby0+aW50cmluc2ljUGFkZGlu
Z1RvcCgpKTsKIAogICAgIGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgb2Zmc2V0
IC09IG8tPmxheWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwpJbmRleDogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaAko
cmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgSW5saW5lRmxvd0JveDsKIGNsYXNzIFBvc2l0aW9u
OwogY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBSZW5kZXJCbG9jazsKK2NsYXNzIFJlbmRlckJv
eDsKIGNsYXNzIFJlbmRlckZsb3c7CiBjbGFzcyBSZW5kZXJGcmFtZVNldDsKIGNsYXNzIFJlbmRl
ckxheWVyOwpAQCAtMzI5LDYgKzMzMCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzUG9zaXRpb25l
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb25lZDsgfSAvLyBhYnNvbHV0ZSBvciBmaXhlZCBw
b3NpdGlvbmluZwogICAgIGJvb2wgaXNSZWxQb3NpdGlvbmVkKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWxQb3NpdGlvbmVkOyB9IC8vIHJlbGF0aXZlIHBvc2l0aW9uaW5nCiAgICAgYm9vbCBpc1RleHQo
KSBjb25zdCAgeyByZXR1cm4gbV9pc1RleHQ7IH0KKyAgICBib29sIGlzQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0JveDsgfQogICAgIGJvb2wgaXNJbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX2lu
bGluZTsgfSAgLy8gaW5saW5lIG9iamVjdAogICAgIGJvb2wgaXNDb21wYWN0KCkgY29uc3QgeyBy
ZXR1cm4gc3R5bGUoKS0+ZGlzcGxheSgpID09IENPTVBBQ1Q7IH0gLy8gY29tcGFjdCBvYmplY3QK
ICAgICBib29sIGlzUnVuSW4oKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5kaXNwbGF5KCkgPT0g
UlVOX0lOOyB9IC8vIHJ1bi1pbiBvYmplY3QKQEAgLTM3MCw3ICszNzIsNiBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2hhc1RyYW5zZm9y
bTsgfQogICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkgJiYgc3R5bGUo
KS0+aGFzTWFzaygpOyB9Ci0gICAgdmlydHVhbCBJbnRSZWN0IG1hc2tDbGlwUmVjdCgpIHsgcmV0
dXJuIGJvcmRlckJveCgpOyB9CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpbmNsdWRlVmVydGljYWxT
Y3JvbGxiYXJTaXplKCkgY29uc3QgeyByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKHN0eWxl
KCktPm92ZXJmbG93WSgpID09IE9TQ1JPTEwgfHwgc3R5bGUoKS0+b3ZlcmZsb3dZKCkgPT0gT0FV
VE8pOyB9CkBAIC00MDIsNyArNDAzLDcgQEAgcHVibGljOgogICAgIFJlbmRlck9iamVjdCogY29u
dGFpbmVyKCkgY29uc3Q7CiAgICAgUmVuZGVyT2JqZWN0KiBob3ZlckFuY2VzdG9yKCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91
dChSZW5kZXJPYmplY3QqIGZsb2F0VG9SZW1vdmUgPSAwKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFy
a0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1v
dmUgPSAwKTsKICAgICB2b2lkIG1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KGJvb2wgc2No
ZWR1bGVSZWxheW91dCA9IHRydWUsIFJlbmRlck9iamVjdCogbmV3Um9vdCA9IDApOwogICAgIHZv
aWQgc2V0TmVlZHNMYXlvdXQoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzID0gdHJ1ZSk7CiAgICAg
dm9pZCBzZXRDaGlsZE5lZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cyA9IHRydWUp
OwpAQCAtNDIyLDcgKzQyMyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZsb2F0aW5nKGJvb2wg
YiA9IHRydWUpIHsgbV9mbG9hdGluZyA9IGI7IH0KICAgICB2b2lkIHNldElubGluZShib29sIGIg
PSB0cnVlKSB7IG1faW5saW5lID0gYjsgfQogICAgIHZvaWQgc2V0SGFzQm94RGVjb3JhdGlvbnMo
Ym9vbCBiID0gdHJ1ZSkgeyBtX3BhaW50QmFja2dyb3VuZCA9IGI7IH0KLSAgICB2b2lkIHNldFJl
bmRlclRleHQoKSB7IG1faXNUZXh0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0SXNUZXh0KCkgeyBt
X2lzVGV4dCA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzQm94KCkgeyBtX2lzQm94ID0gdHJ1ZTsg
fQogICAgIHZvaWQgc2V0UmVwbGFjZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX3JlcGxhY2VkID0gYjsg
fQogICAgIHZvaWQgc2V0SGFzT3ZlcmZsb3dDbGlwKGJvb2wgYiA9IHRydWUpIHsgbV9oYXNPdmVy
Zmxvd0NsaXAgPSBiOyB9CiAgICAgdm9pZCBzZXRIYXNMYXllcihib29sIGIgPSB0cnVlKSB7IG1f
aGFzTGF5ZXIgPSBiOyB9CkBAIC01NzYsMjYgKzU3OCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBpbnQgb3ZlcnJpZGVIZWlnaHQoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldE92ZXJyaWRlU2l6ZShpbnQgLypvdmVycmlkZVNpemUqLykgeyB9CiAKLSAgICAvLyBy
ZWxhdGl2ZSB0byBwYXJlbnQgbm9kZQotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3MoaW50IC8qeFBv
cyovLCBpbnQgLyp5UG9zKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRXaWR0aChpbnQgLyp3
aWR0aCovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SGVpZ2h0KGludCAvKmhlaWdodCovKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IHNldFBv
cyhyZWN0LngoKSwgcmVjdC55KCkpOyBzZXRXaWR0aChyZWN0LndpZHRoKCkpOyBzZXRIZWlnaHQo
cmVjdC5oZWlnaHQoKSk7IH0KLQotICAgIHZpcnR1YWwgaW50IHhQb3MoKSBjb25zdCB7IHJldHVy
biAwOyB9Ci0gICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQogICAg
IC8vIENvbnZlcnQgdGhlIGdpdmVuIGxvY2FsIHBvaW50IHRvIGFic29sdXRlIGNvb3JkaW5hdGVz
CiAgICAgLy8gRklYTUU6IFRlbXBvcmFyeS4gSWYgdXNlVHJhbnNmb3JtcyBpcyB0cnVlLCB0YWtl
IHRyYW5zZm9ybXMgaW50byBhY2NvdW50LiBFdmVudHVhbGx5IGxvY2FsVG9BYnNvbHV0ZSgpIHdp
bGwgYWx3YXlzIGJlIHRyYW5zZm9ybS1hd2FyZS4KICAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbG9j
YWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBm
aXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAgICAgdmly
dHVhbCBGbG9hdFBvaW50IGFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50LCBib29sIGZpeGVkID0g
ZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsKIAotICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgdXNlZCB0byBkZWFsIHdpdGggdGhlIGV4dHJhIHRvcCBzcGFjZSB0aGF0IGNh
biBvY2N1ciBpbiB0YWJsZSBjZWxscyAoY2FsbGVkIGJvcmRlclRvcEV4dHJhKS4KKyAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGVhbCB3aXRoIHRoZSBleHRyYSB0b3Agc3BhY2UgdGhh
dCBjYW4gb2NjdXIgaW4gdGFibGUgY2VsbHMgKGNhbGxlZCBpbnRyaW5zaWNQYWRkaW5nVG9wKS4K
ICAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhlIGNlbGwgZG8gbm90IGZhY3RvciB0aGlzIHNwYWNl
IGluLCBzbyB3ZSBoYXZlIHRvIGFkZCBpdCBpbi4gIEFueSBjb2RlIHRoYXQgd2FudHMgdG8KICAg
ICAvLyBhY2N1cmF0ZWx5IGRlYWwgd2l0aCB0aGUgY29udGVudHMgb2YgYSBjZWxsIG11c3QgY2Fs
bCB0aGlzIGZ1bmN0aW9uIGluc3RhZCBvZiBhYnNvbHV0ZVBvc2l0aW9uLgogICAgIEZsb2F0UG9p
bnQgbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBGbG9h
dFBvaW50KCksIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2Up
IGNvbnN0CiAgICAgewotICAgICAgICBsb2NhbFBvaW50Lm1vdmUoMC4wZiwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGJvcmRlclRvcEV4dHJhKCkpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3ZlKDAuMGYs
IHN0YXRpY19jYXN0PGZsb2F0PihpbnRyaW5zaWNQYWRkaW5nVG9wKCkpKTsKICAgICAgICAgcmV0
dXJuIGxvY2FsVG9BYnNvbHV0ZShsb2NhbFBvaW50LCBmaXhlZCwgdXNlVHJhbnNmb3Jtcyk7CiAg
ICAgfQogCkBAIC02MDUsMzAgKzU5OCw5IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm4gdGhlIG9m
ZnNldCBmcm9tIHRoZSBjb250YWluZXIoKSByZW5kZXJlciAoZXhjbHVkaW5nIHRyYW5zZm9ybXMp
CiAgICAgdmlydHVhbCBJbnRTaXplIG9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0Kikg
Y29uc3Q7CiAKLSAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IGFyZSB3aXRob3V0IG1hcmdpbnMgYnV0
IGluY2x1ZGUgcGFkZGluZ3MgYW5kIGJvcmRlcnMKLSAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVy
biAwOyB9Ci0KLSAgICB2aXJ0dWFsIEludFJlY3QgYm9yZGVyQm94KCkgY29uc3QgeyByZXR1cm4g
SW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7IH0KICAgICAvLyBCb3VuZHMgb2YgdGhl
IG91dGxpbmUgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gUmVzcGVjdHMgdHJhbnNmb3JtcwogICAg
IEludFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3Q7CiAKLSAgICAvLyBUaGUgaGVp
Z2h0IG9mIGEgYmxvY2sgd2hlbiB5b3UgaW5jbHVkZSBub3JtYWwgZmxvdyBvdmVyZmxvdyBzcGls
bGFnZSBvdXQgb2YgdGhlIGJvdHRvbQotICAgIC8vIG9mIHRoZSBibG9jayAoZS5nLiwgYSA8ZGl2
IHN0eWxlPSJoZWlnaHQ6MjVweCI+IHRoYXQgaGFzIGEgMTAwcHggdGFsbCBpbWFnZSBpbnNpZGUK
LSAgICAvLyBpdCB3b3VsZCBoYXZlIGFuIG92ZXJmbG93IGhlaWdodCBvZiBib3JkZXJUb3AoKSAr
IHBhZGRpbmdUb3AoKSArIDEwMHB4LgotICAgIHZpcnR1YWwgaW50IG92ZXJmbG93SGVpZ2h0KGJv
b2wgLyppbmNsdWRlSW50ZXJpb3IqLyA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIGhlaWdodCgpOyB9
Ci0gICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dXaWR0aChib29sIC8qaW5jbHVkZUludGVyaW9yKi8g
PSB0cnVlKSBjb25zdCB7IHJldHVybiB3aWR0aCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE92
ZXJmbG93SGVpZ2h0KGludCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE92ZXJmbG93V2lkdGgo
aW50KSB7IH0KLSAgICB2aXJ0dWFsIGludCBvdmVyZmxvd0xlZnQoYm9vbCAvKmluY2x1ZGVJbnRl
cmlvciovID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IG92ZXJm
bG93VG9wKGJvb2wgLyppbmNsdWRlSW50ZXJpb3IqLyA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KLSAgICB2aXJ0dWFsIEludFJlY3Qgb3ZlcmZsb3dSZWN0KGJvb2wgLyppbmNsdWRlSW50ZXJp
b3IqLyA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckJveCgpOyB9Ci0KLSAgICAvLyBJRSBl
eHRlbnNpb25zLiBVc2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXRXaWR0aC9IZWlnaHQuICBPdmVycmlk
ZGVuIGJ5IGlubGluZXMgKFJlbmRlckZsb3cpCi0gICAgLy8gdG8gcmV0dXJuIHRoZSByZW1haW5p
bmcgd2lkdGggb24gYSBnaXZlbiBsaW5lIChhbmQgdGhlIGhlaWdodCBvZiBhIHNpbmdsZSBsaW5l
KS4KLSAgICB2aXJ0dWFsIGludCBvZmZzZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoKCk7
IH0KLSAgICB2aXJ0dWFsIGludCBvZmZzZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBoZWlnaHQo
KSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpOyB9Ci0KICAgICAvLyBJ
RSBleHRlbnNpb25zLiAgQWxzbyBzdXBwb3J0ZWQgYnkgR2Vja28uICBXZSBvdmVycmlkZSBpbiBy
ZW5kZXIgZmxvdyB0byBnZXQgdGhlCiAgICAgLy8gbGVmdCBhbmQgdG9wIGNvcnJlY3QuIC1kd2gK
ICAgICB2aXJ0dWFsIGludCBvZmZzZXRMZWZ0KCkgY29uc3Q7CkBAIC02ODksMTUgKzY2MSwxNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgcGFkZGluZ0xlZnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGludCBwYWRkaW5nUmlnaHQoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgaW50IGludHJpbnNp
Y1BhZGRpbmdUb3AoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgaW50cmlu
c2ljUGFkZGluZ0JvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgIHZpcnR1YWwgaW50
IGJvcmRlclRvcCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCk7IH0K
ICAgICB2aXJ0dWFsIGludCBib3JkZXJCb3R0b20oKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5i
b3JkZXJCb3R0b21XaWR0aCgpOyB9Ci0gICAgdmlydHVhbCBpbnQgYm9yZGVyVG9wRXh0cmEoKSBj
b25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBpbnQgYm9yZGVyQm90dG9tRXh0cmEoKSBj
b25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBpbnQgYm9yZGVyTGVmdCgpIGNvbnN0IHsg
cmV0dXJuIHN0eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpOyB9CiAgICAgdmlydHVhbCBpbnQgYm9y
ZGVyUmlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCk7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgdW5z
aWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9v
bCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7Ci0KKyAgICAKICAgICB2aXJ0dWFsIHZvaWQg
YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BM
ZXZlbCA9IHRydWUpOwogICAgIC8vIEZJWE1FOiB1c2VUcmFuc2Zvcm1zIHNob3VsZCBnbyBhd2F5
IGV2ZW50dWFsbHkKICAgICBJbnRSZWN0IGFic29sdXRlQm91bmRpbmdCb3hSZWN0KGJvb2wgdXNl
VHJhbnNmb3JtcyA9IGZhbHNlKTsKQEAgLTk1OCw2ICs5MzEsNyBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBtX2lzQW5vbnltb3VzICAgICAgICAgICAgICAgOiAxOwogICAgIGJvb2wgbV9pc1RleHQg
ICAgICAgICAgICAgICAgICAgIDogMTsKKyAgICBib29sIG1faXNCb3ggICAgICAgICAgICAgICAg
ICAgICA6IDE7CiAgICAgYm9vbCBtX2lubGluZSAgICAgICAgICAgICAgICAgICAgOiAxOwogICAg
IGJvb2wgbV9yZXBsYWNlZCAgICAgICAgICAgICAgICAgIDogMTsKICAgICBib29sIG1faXNEcmFn
Z2luZyAgICAgICAgICAgICAgICA6IDE7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwCShyZXZpc2lvbiA0MDA3NSkK
KysrIHJlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTIgKzg4
LDExIEBAIHZvaWQgUmVuZGVyUGFydDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24oKQogICAgIGlmICgh
bV93aWRnZXQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbnQgd2lkdGgsIGhlaWdodDsK
ICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogICAgIGFic1Bvcy5t
b3ZlKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFkZGluZ1Rv
cCgpKTsKLSAgICB3aWR0aCA9IG1fd2lkdGggLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgp
IC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpOwotICAgIGhlaWdodCA9IG1faGVpZ2h0
IC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdC
b3R0b20oKTsKLSAgICBJbnRSZWN0IG5ld0JvdW5kcyhhYnNQb3MueCgpLCBhYnNQb3MueSgpLCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICBpbnQgdyA9IHdpZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBib3Jk
ZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpOworICAgIGludCBoID0g
aGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gcGFkZGluZ1RvcCgpIC0g
cGFkZGluZ0JvdHRvbSgpOworICAgIEludFJlY3QgbmV3Qm91bmRzKGFic1Bvcy54KCksIGFic1Bv
cy55KCksIHcsIGgpOwogICAgIGJvb2wgYm91bmRzQ2hhbmdlZCA9IG5ld0JvdW5kcyAhPSBtX3dp
ZGdldC0+ZnJhbWVSZWN0KCk7CiAgICAgaWYgKGJvdW5kc0NoYW5nZWQpIHsKICAgICAgICAgLy8g
VGhlIHdpZGdldCBjaGFuZ2VkIHBvc2l0aW9ucy4gIFVwZGF0ZSB0aGUgZnJhbWUgZ2VvbWV0cnku
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlclBhdGguY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5kZXJQYXRo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDkgKzE3Miw2IEBAIHZvaWQgUmVuZGVyUGF0aDo6
bGF5b3V0KCkKIAogICAgIG1fYWJzb2x1dGVCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxv
d1JlY3QoKTsKIAotICAgIHNldFdpZHRoKG1fYWJzb2x1dGVCb3VuZHMud2lkdGgoKSk7Ci0gICAg
c2V0SGVpZ2h0KG1fYWJzb2x1dGVCb3VuZHMuaGVpZ2h0KCkpOwotCiAgICAgaWYgKGNoZWNrRm9y
UmVwYWludCkKICAgICAgICAgcmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBv
bGRPdXRsaW5lQm94KTsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA0MDA3NSkK
KysrIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcg
Kzg1LDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6bGF5b3V0KCkKICAgICAgICAgb2xkT3V0bGlu
ZUJveCA9IGFic29sdXRlT3V0bGluZUJvdW5kcygpOwogICAgIH0KICAgICAKLSAgICBtX2hlaWdo
dCA9IG1pbmltdW1SZXBsYWNlZEhlaWdodCgpOworICAgIHNldEhlaWdodChtaW5pbXVtUmVwbGFj
ZWRIZWlnaHQoKSk7CiAgICAgCiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwpA
QCAtMTEwLDggKzExMCw4IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYg
cGEKICAgICBpZiAoIXNob3VsZFBhaW50KHBhaW50SW5mbywgdHgsIHR5KSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIHR4ICs9IG1feDsKLSAgICB0eSArPSBtX3k7CisgICAgdHggKz0geCgp
OworICAgIHR5ICs9IG1fZnJhbWVSZWN0LnkoKTsKICAgICAKICAgICBpZiAoaGFzQm94RGVjb3Jh
dGlvbnMoKSAmJiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSkgCiAgICAgICAgIHBhaW50Qm94
RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB0eCwgdHkpOwpAQCAtMTU5LDggKzE1OSw4IEBAIGJvb2wg
UmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50SW4KICAgICBpZiAoc3R5bGUoKS0+dmlz
aWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGludCBj
dXJyZW50VFggPSB0eCArIG1feDsKLSAgICBpbnQgY3VycmVudFRZID0gdHkgKyBtX3k7CisgICAg
aW50IGN1cnJlbnRUWCA9IHR4ICsgeCgpOworICAgIGludCBjdXJyZW50VFkgPSB0eSArIG1fZnJh
bWVSZWN0LnkoKTsKIAogICAgIC8vIEVhcmx5IGV4aXQgaWYgdGhlIGVsZW1lbnQgdG91Y2hlcyB0
aGUgZWRnZXMuCiAgICAgaW50IHRvcCA9IGN1cnJlbnRUWSArIG92ZXJmbG93VG9wKCk7CkBAIC0y
MTUsNyArMjE1LDcgQEAgdW5zaWduZWQgUmVuZGVyUmVwbGFjZWQ6OmNhcmV0TWF4UmVuZGVyZQog
ICAgIHJldHVybiAxOyAKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlclJlcGxhY2VkOjpwb3Np
dGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSkKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJS
ZXBsYWNlZDo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeFBvcywgaW50IHlQb3MpCiB7CiAg
ICAgSW5saW5lQm94KiBib3ggPSBpbmxpbmVCb3hXcmFwcGVyKCk7CiAgICAgaWYgKCFib3gpCkBA
IC0yMjgsMTkgKzIyOCwxOSBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyUmVwbGFjZWQ6OnBvc2l0
aW9uCiAgICAgaW50IHRvcCA9IHJvb3QtPnRvcE92ZXJmbG93KCk7CiAgICAgaW50IGJvdHRvbSA9
IHJvb3QtPm5leHRSb290Qm94KCkgPyByb290LT5uZXh0Um9vdEJveCgpLT50b3BPdmVyZmxvdygp
IDogcm9vdC0+Ym90dG9tT3ZlcmZsb3coKTsKIAotICAgIGlmICh5ICsgeVBvcygpIDwgdG9wKQor
ICAgIGlmICh5UG9zICsgeSgpIDwgdG9wKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KGVsZW1lbnQoKSwgY2FyZXRNaW5PZmZzZXQoKSwgRE9XTlNUUkVBTSk7IC8vIGNvb3JkaW5hdGVz
IGFyZSBhYm92ZQogICAgIAotICAgIGlmICh5ICsgeVBvcygpID49IGJvdHRvbSkKKyAgICBpZiAo
eVBvcyArIHkoKSA+PSBib3R0b20pCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxl
bWVudCgpLCBjYXJldE1heE9mZnNldCgpLCBET1dOU1RSRUFNKTsgLy8gY29vcmRpbmF0ZXMgYXJl
IGJlbG93CiAgICAgCiAgICAgaWYgKGVsZW1lbnQoKSkgewotICAgICAgICBpZiAoeCA8PSB3aWR0
aCgpIC8gMikKKyAgICAgICAgaWYgKHhQb3MgPD0gd2lkdGgoKSAvIDIpCiAgICAgICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnQoKSwgMCwgRE9XTlNUUkVBTSk7CiAgICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCAxLCBET1dOU1RSRUFNKTsKICAgICB9
CiAKLSAgICByZXR1cm4gUmVuZGVyQm94Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKHgsIHkpOwor
ICAgIHJldHVybiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeFBvcywgeVBvcyk7
CiB9CiAKIEludFJlY3QgUmVuZGVyUmVwbGFjZWQ6OnNlbGVjdGlvblJlY3QoYm9vbCBjbGlwVG9W
aXNpYmxlQ29udGVudCkKQEAgLTI2OCwxNCArMjY4LDE0IEBAIEludFJlY3QgUmVuZGVyUmVwbGFj
ZWQ6OmxvY2FsU2VsZWN0aW9uUmUKIAogICAgIGlmICghbV9pbmxpbmVCb3hXcmFwcGVyKQogICAg
ICAgICAvLyBXZSdyZSBhIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnQuICBKdXN0IHJldHVy
biBvdXIgb3duIGRpbWVuc2lvbnMuCi0gICAgICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHdpZHRo
KCksIGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCkpOwor
ICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSArIGludHJpbnNp
Y1BhZGRpbmdUb3AoKSArIGludHJpbnNpY1BhZGRpbmdCb3R0b20oKSk7CiAKICAgICBSZW5kZXJC
bG9jayogY2IgPSAgY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKCFjYikKICAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKICAgICAKICAgICBSb290SW5saW5lQm94KiByb290ID0gbV9pbmxpbmVC
b3hXcmFwcGVyLT5yb290KCk7Ci0gICAgcmV0dXJuIEludFJlY3QoMCwgcm9vdC0+c2VsZWN0aW9u
VG9wKCkgLSB5UG9zKCksIHdpZHRoKCksIHJvb3QtPnNlbGVjdGlvbkhlaWdodCgpKTsKKyAgICBy
ZXR1cm4gSW50UmVjdCgwLCByb290LT5zZWxlY3Rpb25Ub3AoKSAtIHkoKSwgd2lkdGgoKSwgcm9v
dC0+c2VsZWN0aW9uSGVpZ2h0KCkpOwogfQogCiB2b2lkIFJlbmRlclJlcGxhY2VkOjpzZXRTZWxl
Y3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzKQpAQCAtMzI3LDcgKzMyNyw3IEBAIHZvaWQgUmVu
ZGVyUmVwbGFjZWQ6OmFkanVzdE92ZXJmbG93Rm9yQm8KIHsKICAgICBJbnRSZWN0IG92ZXJmbG93
OwogICAgIGZvciAoU2hhZG93RGF0YSogYm94U2hhZG93ID0gc3R5bGUoKS0+Ym94U2hhZG93KCk7
IGJveFNoYWRvdzsgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KSB7Ci0gICAgICAgIEludFJl
Y3Qgc2hhZG93ID0gYm9yZGVyQm94KCk7CisgICAgICAgIEludFJlY3Qgc2hhZG93ID0gYm9yZGVy
Qm94UmVjdCgpOwogICAgICAgICBzaGFkb3cubW92ZShib3hTaGFkb3ctPngsIGJveFNoYWRvdy0+
eSk7CiAgICAgICAgIHNoYWRvdy5pbmZsYXRlKGJveFNoYWRvdy0+Ymx1cik7CiAgICAgICAgIG92
ZXJmbG93LnVuaXRlKHNoYWRvdyk7CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBSZW5kZXJSZXBs
YWNlZDo6YWRqdXN0T3ZlcmZsb3dGb3JCbwogICAgIGlmICghb3ZlcmZsb3cuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGlmICghZ092ZXJmbG93UmVjdE1hcCkKICAgICAgICAgICAgIGdPdmVyZmxvd1Jl
Y3RNYXAgPSBuZXcgT3ZlcmZsb3dSZWN0TWFwKCk7Ci0gICAgICAgIG92ZXJmbG93LnVuaXRlKGJv
cmRlckJveCgpKTsKKyAgICAgICAgb3ZlcmZsb3cudW5pdGUoYm9yZGVyQm94UmVjdCgpKTsKICAg
ICAgICAgZ092ZXJmbG93UmVjdE1hcC0+c2V0KHRoaXMsIG92ZXJmbG93KTsKICAgICAgICAgbV9o
YXNPdmVyZmxvdyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChtX2hhc092ZXJmbG93KSB7CkBAIC0z
ODYsNyArMzg2LDcgQEAgSW50UmVjdCBSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dSZWN0KGJvbwog
ICAgIGlmIChtX2hhc092ZXJmbG93KQogICAgICAgICByZXR1cm4gZ092ZXJmbG93UmVjdE1hcC0+
ZmluZCh0aGlzKS0+c2Vjb25kOwogCi0gICAgcmV0dXJuIGJvcmRlckJveCgpOworICAgIHJldHVy
biBib3JkZXJCb3hSZWN0KCk7CiB9CiAKIEludFJlY3QgUmVuZGVyUmVwbGFjZWQ6OmFic29sdXRl
Q2xpcHBlZE92ZXJmbG93UmVjdCgpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuY3BwCShyZXZpc2lvbiA0MDA3
NSkKKysrIHJlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTcgKzQyLDEzIEBAIFJlbmRlclJlcGxpY2E6On5SZW5kZXJSZXBsaWNhKCkKICAgICAKIHZvaWQg
UmVuZGVyUmVwbGljYTo6bGF5b3V0KCkKIHsKLSAgICBJbnRSZWN0IGJveCA9IHBhcmVudCgpLT5i
b3JkZXJCb3goKTsKLSAgICBtX3ggPSBib3gueCgpOwotICAgIG1feSA9IGJveC55KCk7Ci0gICAg
bV93aWR0aCA9IGJveC53aWR0aCgpOwotICAgIG1faGVpZ2h0ID0gYm94LmhlaWdodCgpOworICAg
IG1fZnJhbWVSZWN0ID0gcGFyZW50Qm94KCktPmJvcmRlckJveFJlY3QoKTsKICAgICBzZXROZWVk
c0xheW91dChmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyUmVwbGljYTo6Y2FsY1ByZWZXaWR0aHMo
KQogewotICAgIG1fbWluUHJlZldpZHRoID0gcGFyZW50KCktPndpZHRoKCk7CisgICAgbV9taW5Q
cmVmV2lkdGggPSBwYXJlbnRCb3goKS0+d2lkdGgoKTsKICAgICBtX21heFByZWZXaWR0aCA9IG1f
bWluUHJlZldpZHRoOwogICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CkBAIC02Miw4
ICs1OCw4IEBAIHZvaWQgUmVuZGVyUmVwbGljYTo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICBp
ZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5w
aGFzZSAhPSBQYWludFBoYXNlTWFzaykKICAgICAgICAgcmV0dXJuOwogIAotICAgIHR4ICs9IG1f
eDsKLSAgICB0eSArPSBtX3k7CisgICAgdHggKz0geCgpOworICAgIHR5ICs9IG1fZnJhbWVSZWN0
LnkoKTsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQp
CiAgICAgICAgIC8vIFR1cm4gYXJvdW5kIGFuZCBwYWludCB0aGUgcGFyZW50IGxheWVyLiBVc2Ug
dGVtcG9yYXJ5IGNsaXBSZWN0cywgc28gdGhhdCB0aGUgbGF5ZXIgZG9lc24ndCBlbmQgdXAgY2Fj
aGluZyBjbGlwIHJlY3RzCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiA0MDA3
NSkKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsOCArNDAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGZpcnN0Q2hp
bGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0KICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Q2hpbGQ7IH0KIAotICAgIHZp
cnR1YWwgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQotICAgIHZpcnR1YWwg
aW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisgICAgaW50IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX2hlaWdodDsgfQogCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1h
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAJKHJldmlz
aW9uIDQwMDc1KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmxheW91dCgpCiAgICAg
Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKICAgICAKICAgICAvLyBtaW5pbXVtIGhlaWdodAot
ICAgIG1faGVpZ2h0ID0gZXJyb3JPY2N1cnJlZCgpID8gaW50cmluc2ljU2l6ZSgpLmhlaWdodCgp
IDogMDsKKyAgICBzZXRIZWlnaHQoZXJyb3JPY2N1cnJlZCgpID8gaW50cmluc2ljU2l6ZSgpLmhl
aWdodCgpIDogMCk7CiAKICAgICBjYWxjV2lkdGgoKTsKICAgICBjYWxjSGVpZ2h0KCk7CkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmlu
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDggKzEyOSw4
IEBAIEludFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZUFic28KICAgICAvLyBCdXQg
ZG8gdGFrZSB0aGUgY29udGFpbmluZ0Jsb2NrcydzIGNvbnRhaW5lciBwb3NpdGlvbiBpbnRvIGFj
Y291bnQsIGllLiBTVkcgdGV4dCBpbiBzY3JvbGxhYmxlIDxkaXY+LgogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGh0bWxQYXJlbnRDdG0gPSByb290LT5SZW5kZXJDb250YWluZXI6OmFic29sdXRl
VHJhbnNmb3JtKCk7CiAKLSAgICBGbG9hdFJlY3QgZml4ZWRSZWN0KG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQocmVjdC54KCkgKyBhYnNQb3MueCgpIC0geFBvcygpIC0gaHRtbFBhcmVudEN0bS5lKCkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChyZWN0Lnko
KSArIGFic1Bvcy55KCkgLSB5UG9zKCkgLSBodG1sUGFyZW50Q3RtLmYoKSksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSk7CisgICAgRmxvYXRSZWN0IGZpeGVkUmVjdChuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KHJlY3QueCgpICsgYWJzUG9zLngoKSAtIChmaXJzdFRleHRCb3goKSA/IGZpcnN0
VGV4dEJveCgpLT54UG9zKCkgOiAwKSAtIGh0bWxQYXJlbnRDdG0uZSgpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocmVjdC55KCkgKyBhYnNQb3MueSgp
IC0gKGZpcnN0VGV4dEJveCgpID8gZmlyc3RUZXh0Qm94KCktPnlQb3MoKSA6IDApIC0gaHRtbFBh
cmVudEN0bS5mKCkpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogICAgIC8vIEZJWE1F
OiBicm9rZW4gd2l0aCBDU1MgdHJhbnNmb3JtcwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaXhlZFJlY3QpKTsKIH0KQEAgLTE1NSw3ICsx
NTUsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4dDo6cG9zCiAgICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCAwLCBET1dOU1RSRUFNKTsKIAogICAg
IFNWR1Jvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSB0ZXh0Qm94LT5zdmdSb290SW5saW5lQm94KCk7
Ci0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+b2JqZWN0KCkg
OiAwOworICAgIFJlbmRlckJsb2NrKiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+YmxvY2so
KSA6IDA7CiAKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihlbGVtZW50KCksIDAsIERPV05TVFJFQU0pOwpAQCAtMTYzLDcgKzE2Myw3IEBAIFZpc2libGVQ
b3NpdGlvbiBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3MKICAgICBpbnQgb2Zmc2V0ID0gMDsKIAog
ICAgIGZvciAoU1ZHSW5saW5lVGV4dEJveCogYm94ID0gdGV4dEJveDsgYm94OyBib3ggPSBzdGF0
aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oYm94LT5uZXh0VGV4dEJveCgpKSkgewotICAgICAg
ICBpZiAoYm94LT5zdmdDaGFyYWN0ZXJIaXRzUG9zaXRpb24oeCArIG9iamVjdC0+eFBvcygpLCB5
ICsgb2JqZWN0LT55UG9zKCksIG9mZnNldCkpIHsKKyAgICAgICAgaWYgKGJveC0+c3ZnQ2hhcmFj
dGVySGl0c1Bvc2l0aW9uKHggKyBvYmplY3QtPngoKSwgeSArIG9iamVjdC0+eSgpLCBvZmZzZXQp
KSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgYXQgdGhlIGVuZC9zdGFydCBvZiB0aGUg
Ym94LCBzdG9wIGxvb2tpbmcgZm9yIG90aGVyIHNlbGVjdGVkIGJveGVzLgogICAgICAgICAgICAg
aWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAgICAgICAgICAgICAgICAgaWYgKG9mZnNl
dCA8PSAoaW50KSBib3gtPmVuZCgpICsgMSkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTVkdSb290
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9u
IDQwMDc1KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsOCArMTAyLDggQEAgdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQogCiAgICAgbV9h
YnNvbHV0ZUJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwogICAgIFNWR1NW
R0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihlbGVtZW50KCkpOwot
ICAgIG1fd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KG1fd2lkdGggKiBzdmctPmN1cnJlbnRTY2Fs
ZSgpKTsKLSAgICBtX2hlaWdodCA9IHN0YXRpY19jYXN0PGludD4obV9oZWlnaHQgKiBzdmctPmN1
cnJlbnRTY2FsZSgpKTsKKyAgICBzZXRXaWR0aChzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKCkgKiBz
dmctPmN1cnJlbnRTY2FsZSgpKSk7CisgICAgc2V0SGVpZ2h0KHN0YXRpY19jYXN0PGludD4oaGVp
Z2h0KCkgKiBzdmctPmN1cnJlbnRTY2FsZSgpKSk7CiAgICAgCiAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBpZiAoc2VsZk5lZWRzTGF5b3V0KCkpIC8vIGVpdGhlciBib3VuZHMg
b3IgdHJhbnNmb3JtIGNoYW5nZWQsIGZvcmNlIGtpZHMgdG8gcmVsYXlvdXQKQEAgLTEyNSw3ICsx
MjUsNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmFwcGx5Q29udGVudFRyYW5zZm9yCiAgICAgLy8g
VHJhbnNsYXRlIGZyb20gcGFyZW50IG9mZnNldHMgKGh0bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0
aXZlIHRyYW5zZm9ybSAoc3ZnIHJlbmRlcmVycykKICAgICBJbnRQb2ludCBvcmlnaW47CiAgICAg
b3JpZ2luLm1vdmUocGFyZW50WCwgcGFyZW50WSk7Ci0gICAgb3JpZ2luLm1vdmUobV94LCBtX3kp
OworICAgIG9yaWdpbi5tb3ZlKHgoKSwgbV9mcmFtZVJlY3QueSgpKTsKICAgICBvcmlnaW4ubW92
ZShib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKTsKICAgICBvcmlnaW4ubW92ZShwYWRkaW5nTGVm
dCgpLCBwYWRkaW5nVG9wKCkpOwogCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBSZW5kZXJTVkdS
b290OjpwYWludChQYWludEluZm8mIHBhaQogCiAgICAgLy8gVGhpcyBzaG91bGQgb25seSBleGlz
dCBmb3IgPHN2Zz4gcmVuZGVyZXJzCiAgICAgaWYgKGhhc0JveERlY29yYXRpb25zKCkgJiYgKHBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpIAotICAgICAgICBwYWludEJveERlY29yYXRpb25zKHBh
aW50SW5mbywgbV94ICsgcGFyZW50WCwgbV95ICsgcGFyZW50WSk7CisgICAgICAgIHBhaW50Qm94
RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB4KCkgKyBwYXJlbnRYLCBtX2ZyYW1lUmVjdC55KCkgKyBw
YXJlbnRZKTsKIAogICAgIGlmICghZmlyc3RDaGlsZCgpKSB7CiAjaWYgRU5BQkxFKFNWR19GSUxU
RVJTKQpAQCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVRdWFk
cyhWZWN0b3IKIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1Jvb3Q6OmFic29sdXRlVHJh
bnNmb3JtKCkgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBSZW5kZXJD
b250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgY3RtLnRyYW5zbGF0ZShtX3gsIG1f
eSk7CisgICAgY3RtLnRyYW5zbGF0ZSh4KCksIG1fZnJhbWVSZWN0LnkoKSk7CiAgICAgU1ZHU1ZH
RWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KGVsZW1lbnQoKSk7CiAg
ICAgY3RtLnNjYWxlKHN2Zy0+Y3VycmVudFNjYWxlKCkpOwogICAgIGN0bS50cmFuc2xhdGUoc3Zn
LT5jdXJyZW50VHJhbnNsYXRlKCkueCgpLCBzdmctPmN1cnJlbnRUcmFuc2xhdGUoKS55KCkpOwpA
QCAtMzA4LDggKzMwOCw4IEBAIGJvb2wgUmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3Qg
SGkKICAgICBpZiAoIXZpZXdwb3J0KCkuaXNFbXB0eSgpCiAgICAgICAgICYmIHN0eWxlKCktPm92
ZXJmbG93WCgpID09IE9ISURERU4KICAgICAgICAgJiYgc3R5bGUoKS0+b3ZlcmZsb3dZKCkgPT0g
T0hJRERFTikgewotICAgICAgICBpbnQgdHggPSBtX3ggLSBfdHggKyBzeDsKLSAgICAgICAgaW50
IHR5ID0gbV95IC0gX3R5ICsgc3k7CisgICAgICAgIGludCB0eCA9IHgoKSAtIF90eCArIHN4Owor
ICAgICAgICBpbnQgdHkgPSBtX2ZyYW1lUmVjdC55KCkgLSBfdHkgKyBzeTsKIAogICAgICAgICAv
LyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KICAgICAgICAgSW50UmVj
dCBvdmVyZmxvd0JveCA9IG92ZXJmbG93UmVjdChmYWxzZSk7CkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVyU1ZHVFNwYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5j
cHAJKHJldmlzaW9uIDQwMDc1KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR1RTcGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmgi
CiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2lu
Y2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJTVkdSb290SW5saW5lQm94Lmgi
CiAKQEAgLTQyLDEzICs0MywxMyBAQCB2b2lkIFJlbmRlclNWR1RTcGFuOjphYnNvbHV0ZVJlY3Rz
KFZlY3RvCiAgICAgSW5saW5lUnVuQm94KiBmaXJzdEJveCA9IGZpcnN0TGluZUJveCgpOwogCiAg
ICAgU1ZHUm9vdElubGluZUJveCogcm9vdEJveCA9IGZpcnN0Qm94ID8gc3RhdGljX2Nhc3Q8U1ZH
SW5saW5lVGV4dEJveCo+KGZpcnN0Qm94KS0+c3ZnUm9vdElubGluZUJveCgpIDogMDsKLSAgICBS
ZW5kZXJPYmplY3QqIG9iamVjdCA9IHJvb3RCb3ggPyByb290Qm94LT5vYmplY3QoKSA6IDA7Cisg
ICAgUmVuZGVyQm94KiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+YmxvY2soKSA6IDA7CiAK
ICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHhSZWYgPSBvYmpl
Y3QtPnhQb3MoKSArIHhQb3MoKTsKLSAgICBpbnQgeVJlZiA9IG9iamVjdC0+eVBvcygpICsgeVBv
cygpOworICAgIGludCB4UmVmID0gb2JqZWN0LT54KCkgKyB4KCk7CisgICAgaW50IHlSZWYgPSBv
YmplY3QtPnkoKSArIHkoKTsKICAKICAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZpcnN0
Qm94OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewogICAgICAgICBGbG9hdFJl
Y3QgcmVjdCh4UmVmICsgY3Vyci0+eFBvcygpLCB5UmVmICsgY3Vyci0+eVBvcygpLCBjdXJyLT53
aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSk7CkBAIC02MiwxMyArNjMsMTMgQEAgdm9pZCBSZW5kZXJT
VkdUU3Bhbjo6YWJzb2x1dGVRdWFkcyhWZWN0bwogICAgIElubGluZVJ1bkJveCogZmlyc3RCb3gg
PSBmaXJzdExpbmVCb3goKTsKIAogICAgIFNWR1Jvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBmaXJz
dEJveCA/IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihmaXJzdEJveCktPnN2Z1Jvb3RJ
bmxpbmVCb3goKSA6IDA7Ci0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByb290Qm94ID8gcm9v
dEJveC0+b2JqZWN0KCkgOiAwOworICAgIFJlbmRlckJveCogb2JqZWN0ID0gcm9vdEJveCA/IHJv
b3RCb3gtPmJsb2NrKCkgOiAwOwogCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGludCB4UmVmID0gb2JqZWN0LT54UG9zKCkgKyB4UG9zKCk7Ci0gICAgaW50IHlSZWYg
PSBvYmplY3QtPnlQb3MoKSArIHlQb3MoKTsKKyAgICBpbnQgeFJlZiA9IG9iamVjdC0+eCgpICsg
eCgpOworICAgIGludCB5UmVmID0gb2JqZWN0LT55KCkgKyB5KCk7CiAgCiAgICAgZm9yIChJbmxp
bmVSdW5Cb3gqIGN1cnIgPSBmaXJzdEJveDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94
KCkpIHsKICAgICAgICAgRmxvYXRSZWN0IHJlY3QoeFJlZiArIGN1cnItPnhQb3MoKSwgeVJlZiAr
IGN1cnItPnlQb3MoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpOwpJbmRleDogcmVu
ZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJT
VkdUZXh0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0Ojps
YXlvdXQoKQogICAgIFNWR1RleHRFbGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dEVs
ZW1lbnQqPihlbGVtZW50KCkpOwogICAgIGludCB4T2Zmc2V0ID0gKGludCkodGV4dC0+eCgpLT5n
ZXRGaXJzdCgpLnZhbHVlKHRleHQpKTsKICAgICBpbnQgeU9mZnNldCA9IChpbnQpKHRleHQtPnko
KS0+Z2V0Rmlyc3QoKS52YWx1ZSh0ZXh0KSk7Ci0gICAgc2V0UG9zKHhPZmZzZXQsIHlPZmZzZXQp
OworICAgIHNldExvY2F0aW9uKHhPZmZzZXQsIHlPZmZzZXQpOwogICAgIAogICAgIGNhbGN1bGF0
ZUxvY2FsVHJhbnNmb3JtKCk7CiAKQEAgLTIzMSw3ICsyMzEsNyBAQCBGbG9hdFJlY3QgUmVuZGVy
U1ZHVGV4dDo6cmVsYXRpdmVCQm94KGJvCiAgICAgICAgIHJlcGFpbnRSZWN0LmluZmxhdGUoc3Ry
b2tlV2lkdGgpOwogICAgIH0KIAotICAgIHJlcGFpbnRSZWN0Lm1vdmUoeFBvcygpLCB5UG9zKCkp
OworICAgIHJlcGFpbnRSZWN0Lm1vdmUoeCgpLCB5KCkpOwogICAgIHJldHVybiByZXBhaW50UmVj
dDsKIH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCShyZXZpc2lvbiA0MDA3NSkKKysr
IHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5oIgogCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJTVkdJbmxpbmVU
ZXh0Qm94LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdSb290
SW5saW5lQm94LmgiCkBAIC04MiwxMyArODMsMTMgQEAgdm9pZCBSZW5kZXJTVkdUZXh0UGF0aDo6
YWJzb2x1dGVSZWN0cyhWZQogICAgIElubGluZVJ1bkJveCogZmlyc3RCb3ggPSBmaXJzdExpbmVC
b3goKTsKIAogICAgIFNWR1Jvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBmaXJzdEJveCA/IHN0YXRp
Y19jYXN0PFNWR0lubGluZVRleHRCb3gqPihmaXJzdEJveCktPnN2Z1Jvb3RJbmxpbmVCb3goKSA6
IDA7Ci0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+b2JqZWN0
KCkgOiAwOworICAgIFJlbmRlckJsb2NrKiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+Ymxv
Y2soKSA6IDA7CiAKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50
IHhSZWYgPSBvYmplY3QtPnhQb3MoKSArIHhQb3MoKTsKLSAgICBpbnQgeVJlZiA9IG9iamVjdC0+
eVBvcygpICsgeVBvcygpOworICAgIGludCB4UmVmID0gb2JqZWN0LT54KCkgKyB4KCk7CisgICAg
aW50IHlSZWYgPSBvYmplY3QtPnkoKSArIHkoKTsKIAogICAgIGZvciAoSW5saW5lUnVuQm94KiBj
dXJyID0gZmlyc3RCb3g7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKSB7CiAgICAg
ICAgIEZsb2F0UmVjdCByZWN0KHhSZWYgKyBjdXJyLT54UG9zKCksIHlSZWYgKyBjdXJyLT55UG9z
KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKTsKQEAgLTEwMiwxMyArMTAzLDEzIEBA
IHZvaWQgUmVuZGVyU1ZHVGV4dFBhdGg6OmFic29sdXRlUXVhZHMoVmUKICAgICBJbmxpbmVSdW5C
b3gqIGZpcnN0Qm94ID0gZmlyc3RMaW5lQm94KCk7CiAKICAgICBTVkdSb290SW5saW5lQm94KiBy
b290Qm94ID0gZmlyc3RCb3ggPyBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oZmlyc3RC
b3gpLT5zdmdSb290SW5saW5lQm94KCkgOiAwOwotICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0g
cm9vdEJveCA/IHJvb3RCb3gtPm9iamVjdCgpIDogMDsKKyAgICBSZW5kZXJCbG9jayogb2JqZWN0
ID0gcm9vdEJveCA/IHJvb3RCb3gtPmJsb2NrKCkgOiAwOwogCiAgICAgaWYgKCFvYmplY3QpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGludCB4UmVmID0gb2JqZWN0LT54UG9zKCkgKyB4UG9zKCk7
Ci0gICAgaW50IHlSZWYgPSBvYmplY3QtPnlQb3MoKSArIHlQb3MoKTsKKyAgICBpbnQgeFJlZiA9
IG9iamVjdC0+eCgpICsgeCgpOworICAgIGludCB5UmVmID0gb2JqZWN0LT55KCkgKyB5KCk7CiAK
ICAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94OyBjdXJyOyBjdXJyID0gY3Vy
ci0+bmV4dExpbmVCb3goKSkgewogICAgICAgICBGbG9hdFJlY3QgcmVjdCh4UmVmICsgY3Vyci0+
eFBvcygpLCB5UmVmICsgY3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQo
KSk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAJKHJldmlz
aW9uIDQwMDc1KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIGJvb2wgUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXI6Om5vZGVBdFAKICAgICAgICAgJiYgc3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT0hJ
RERFTgogICAgICAgICAmJiBzdHlsZSgpLT5vdmVyZmxvd1koKSA9PSBPSElEREVOKSB7CiAgICAg
ICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgotICAgICAgICBJ
bnRSZWN0IG92ZXJmbG93Qm94ID0gb3ZlcmZsb3dSZWN0KGZhbHNlKTsKKyAgICAgICAgSW50UmVj
dCBvdmVyZmxvd0JveCA9IEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAg
ICBvdmVyZmxvd0JveC5tb3ZlKF90eCwgX3R5KTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggY3RtID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRyYW5zZm9ybSgpOwogICAgICAgICBjdG0u
dHJhbnNsYXRlKHZpZXdwb3J0KCkueCgpLCB2aWV3cG9ydCgpLnkoKSk7CkluZGV4OiByZW5kZXJp
bmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3Vz
dG9tU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK1Bhc3NSZWZQdHI8U2Nyb2xs
YmFyPiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcihTY3JvbGxiYXJDbGll
bnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFJlbmRlckJveCog
cmVuZGVyZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJTY3JvbGxiYXIoY2xp
ZW50LCBvcmllbnRhdGlvbiwgcmVuZGVyZXIpKTsKIH0KIAotUmVuZGVyU2Nyb2xsYmFyOjpSZW5k
ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorUmVuZGVyU2Nyb2xsYmFyOjpS
ZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uLCBSZW5kZXJCb3gqIHJlbmRlcmVyKQogICAgIDogU2Nyb2xsYmFyKGNs
aWVudCwgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIsIFJlbmRlclNjcm9sbGJhclRoZW1l
OjpyZW5kZXJTY3JvbGxiYXJUaGVtZSgpKQogICAgICwgbV9vd25lcihyZW5kZXJlcikKIHsKQEAg
LTUwLDcgKzUwLDcgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXI6OnNldFBhcmVudChTY3JvbGxWaQog
ewogICAgIFNjcm9sbGJhcjo6c2V0UGFyZW50KHBhcmVudCk7CiAgICAgaWYgKCFwYXJlbnQpIHsK
LSAgICAgICAgLy8gRGVzdHJveSBhbGwgb2YgdGhlIHNjcm9sbGJhcidzIFJlbmRlck9iamVjdHMu
CisgICAgICAgIC8vIERlc3Ryb3kgYWxsIG9mIHRoZSBzY3JvbGxiYXIncyBSZW5kZXJCb3hlcy4K
ICAgICAgICAgdXBkYXRlU2Nyb2xsYmFyUGFydHModHJ1ZSk7CiAgICAgfQogfQpJbmRleDogcmVu
ZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJT
Y3JvbGxiYXIuaAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE3ICszMiwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRl
clNjcm9sbGJhclBhcnQ7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIAogY2xhc3MgUmVuZGVyU2Nyb2xs
YmFyIDogcHVibGljIFNjcm9sbGJhciB7CiBwcm90ZWN0ZWQ6Ci0gICAgUmVuZGVyU2Nyb2xsYmFy
KFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBSZW5kZXJPYmplY3QqKTsK
KyAgICBSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRp
b24sIFJlbmRlckJveCopOwogCiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFNjcm9sbGJhcjsK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZUN1c3RvbVNjcm9sbGJhcihT
Y3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgUmVuZGVyT2JqZWN0Kik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVDdXN0b21TY3JvbGxiYXIoU2Ny
b2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFJlbmRlckJveCopOwogICAgIHZp
cnR1YWwgflJlbmRlclNjcm9sbGJhcigpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChT
Y3JvbGxWaWV3Kik7CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBzdHlsZUNoYW5nZWQoKTsKIAotICAgIFJlbmRlck9iamVjdCogb3duaW5nUmVuZGVyZXIoKSBj
b25zdCB7IHJldHVybiBtX293bmVyOyB9CisgICAgUmVuZGVyQm94KiBvd25pbmdSZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7IH0KIAogICAgIHZvaWQgcGFpbnRQYXJ0KEdyYXBoaWNz
Q29udGV4dCosIFNjcm9sbGJhclBhcnQsIGNvbnN0IEludFJlY3QmKTsKIApAQCAtNzQsNyArNzQs
NyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFNjcm9sbGJhclBz
ZXVkb1N0eWxlKFNjcm9sbGJhclBhcnQsIFJlbmRlclN0eWxlOjpQc2V1ZG9JZCk7CiAgICAgdm9p
ZCB1cGRhdGVTY3JvbGxiYXJQYXJ0KFNjcm9sbGJhclBhcnQsIGJvb2wgZGVzdHJveSA9IGZhbHNl
KTsKIAotICAgIFJlbmRlck9iamVjdCogbV9vd25lcjsKKyAgICBSZW5kZXJCb3gqIG1fb3duZXI7
CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVuZGVyU2Nyb2xsYmFyUGFydCo+IG1fcGFydHM7CiB9
OwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysr
IHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
MTQgKzQ1LDE0IEBAIFJlbmRlclNjcm9sbGJhclBhcnQ6On5SZW5kZXJTY3JvbGxiYXJQYXIKIAog
dm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpsYXlvdXQoKQogewotICAgIHNldFBvcygwLCAwKTsg
Ly8gV2UgZG9uJ3Qgd29ycnkgYWJvdXQgcG9zaXRpb25pbmcgb3Vyc2VsdmVzLiAgV2UncmUganVz
dCBkZXRlcm1pbmluZyBvdXIgbWluaW11bSB3aWR0aC9oZWlnaHQuCisgICAgc2V0TG9jYXRpb24o
SW50UG9pbnQoKSk7IC8vIFdlIGRvbid0IHdvcnJ5IGFib3V0IHBvc2l0aW9uaW5nIG91cnNlbHZl
cy4gIFdlJ3JlIGp1c3QgZGV0ZXJtaW5pbmcgb3VyIG1pbmltdW0gd2lkdGgvaGVpZ2h0LgogICAg
IGlmIChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQog
ICAgICAgICBsYXlvdXRIb3Jpem9udGFsUGFydCgpOwogICAgIGVsc2UKICAgICAgICAgbGF5b3V0
VmVydGljYWxQYXJ0KCk7CiAKLSAgICBtX292ZXJmbG93V2lkdGggPSBtYXgobV93aWR0aCwgbV9v
dmVyZmxvd1dpZHRoKTsKLSAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1faGVpZ2h0LCBtX292
ZXJmbG93SGVpZ2h0KTsKKyAgICBtX292ZXJmbG93V2lkdGggPSBtYXgod2lkdGgoKSwgbV9vdmVy
Zmxvd1dpZHRoKTsKKyAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KGhlaWdodCgpLCBtX292ZXJm
bG93SGVpZ2h0KTsKICAgICAKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CkBAIC02MCwx
MSArNjAsMTEgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpsYXlvdXQoKQogdm9pZCBSZW5k
ZXJTY3JvbGxiYXJQYXJ0OjpsYXlvdXRIb3Jpem9udGFsUGFydCgpCiB7CiAgICAgaWYgKG1fcGFy
dCA9PSBTY3JvbGxiYXJCR1BhcnQpIHsKLSAgICAgICAgbV93aWR0aCA9IG1fc2Nyb2xsYmFyLT53
aWR0aCgpOworICAgICAgICBzZXRXaWR0aChtX3Njcm9sbGJhci0+d2lkdGgoKSk7CiAgICAgICAg
IGNvbXB1dGVTY3JvbGxiYXJIZWlnaHQoKTsKICAgICB9IGVsc2UgewogICAgICAgICBjb21wdXRl
U2Nyb2xsYmFyV2lkdGgoKTsKLSAgICAgICAgbV9oZWlnaHQgPSBtX3Njcm9sbGJhci0+aGVpZ2h0
KCk7CisgICAgICAgIHNldEhlaWdodChtX3Njcm9sbGJhci0+aGVpZ2h0KCkpOwogICAgIH0KIH0K
IApAQCAtNzIsOSArNzIsOSBAQCB2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OmxheW91dFZlcnRp
Y2FsCiB7CiAgICAgaWYgKG1fcGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpIHsKICAgICAgICAgY29t
cHV0ZVNjcm9sbGJhcldpZHRoKCk7Ci0gICAgICAgIG1faGVpZ2h0ID0gbV9zY3JvbGxiYXItPmhl
aWdodCgpOworICAgICAgICBzZXRIZWlnaHQobV9zY3JvbGxiYXItPmhlaWdodCgpKTsKICAgICB9
IGVsc2UgewotICAgICAgICBtX3dpZHRoID0gbV9zY3JvbGxiYXItPndpZHRoKCk7CisgICAgICAg
IHNldFdpZHRoKG1fc2Nyb2xsYmFyLT53aWR0aCgpKTsKICAgICAgICAgY29tcHV0ZVNjcm9sbGJh
ckhlaWdodCgpOwogICAgIH0gCiB9CkBAIC04OSwxMCArODksMTAgQEAgc3RhdGljIGludCBjYWxj
U2Nyb2xsYmFyVGhpY2tuZXNzVXNpbmcoYwogdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0Ojpjb21w
dXRlU2Nyb2xsYmFyV2lkdGgoKQogewogICAgIGludCB2aXNpYmxlU2l6ZSA9IG1fc2Nyb2xsYmFy
LT5vd25pbmdSZW5kZXJlcigpLT53aWR0aCgpIC0gbV9zY3JvbGxiYXItPm93bmluZ1JlbmRlcmVy
KCktPmJvcmRlckxlZnQoKSAtIG1fc2Nyb2xsYmFyLT5vd25pbmdSZW5kZXJlcigpLT5ib3JkZXJS
aWdodCgpOwotICAgIGludCB3aWR0aCA9IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2luZyhzdHls
ZSgpLT53aWR0aCgpLCB2aXNpYmxlU2l6ZSk7CisgICAgaW50IHcgPSBjYWxjU2Nyb2xsYmFyVGhp
Y2tuZXNzVXNpbmcoc3R5bGUoKS0+d2lkdGgoKSwgdmlzaWJsZVNpemUpOwogICAgIGludCBtaW5X
aWR0aCA9IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2luZyhzdHlsZSgpLT5taW5XaWR0aCgpLCB2
aXNpYmxlU2l6ZSk7Ci0gICAgaW50IG1heFdpZHRoID0gc3R5bGUoKS0+bWF4V2lkdGgoKS5pc1Vu
ZGVmaW5lZCgpID8gd2lkdGggOiBjYWxjU2Nyb2xsYmFyVGhpY2tuZXNzVXNpbmcoc3R5bGUoKS0+
bWF4V2lkdGgoKSwgdmlzaWJsZVNpemUpOwotICAgIG1fd2lkdGggPSBtYXgobWluV2lkdGgsIG1p
bihtYXhXaWR0aCwgd2lkdGgpKTsKKyAgICBpbnQgbWF4V2lkdGggPSBzdHlsZSgpLT5tYXhXaWR0
aCgpLmlzVW5kZWZpbmVkKCkgPyB3IDogY2FsY1Njcm9sbGJhclRoaWNrbmVzc1VzaW5nKHN0eWxl
KCktPm1heFdpZHRoKCksIHZpc2libGVTaXplKTsKKyAgICBzZXRXaWR0aChtYXgobWluV2lkdGgs
IG1pbihtYXhXaWR0aCwgdykpKTsKICAgICAKICAgICAvLyBCdXR0b25zIGFuZCB0cmFjayBwaWVj
ZXMgY2FuIGFsbCBoYXZlIG1hcmdpbnMgYWxvbmcgdGhlIGF4aXMgb2YgdGhlIHNjcm9sbGJhci4g
CiAgICAgbV9tYXJnaW5MZWZ0ID0gc3R5bGUoKS0+bWFyZ2luTGVmdCgpLmNhbGNNaW5WYWx1ZSh2
aXNpYmxlU2l6ZSk7CkBAIC0xMDIsMTAgKzEwMiwxMCBAQCB2b2lkIFJlbmRlclNjcm9sbGJhclBh
cnQ6OmNvbXB1dGVTY3JvbGxiCiB2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OmNvbXB1dGVTY3Jv
bGxiYXJIZWlnaHQoKQogewogICAgIGludCB2aXNpYmxlU2l6ZSA9IG1fc2Nyb2xsYmFyLT5vd25p
bmdSZW5kZXJlcigpLT5oZWlnaHQoKSAtICBtX3Njcm9sbGJhci0+b3duaW5nUmVuZGVyZXIoKS0+
Ym9yZGVyVG9wKCkgLSBtX3Njcm9sbGJhci0+b3duaW5nUmVuZGVyZXIoKS0+Ym9yZGVyQm90dG9t
KCk7Ci0gICAgaW50IGhlaWdodCA9IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2luZyhzdHlsZSgp
LT5oZWlnaHQoKSwgdmlzaWJsZVNpemUpOworICAgIGludCBoID0gY2FsY1Njcm9sbGJhclRoaWNr
bmVzc1VzaW5nKHN0eWxlKCktPmhlaWdodCgpLCB2aXNpYmxlU2l6ZSk7CiAgICAgaW50IG1pbkhl
aWdodCA9IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2luZyhzdHlsZSgpLT5taW5IZWlnaHQoKSwg
dmlzaWJsZVNpemUpOwotICAgIGludCBtYXhIZWlnaHQgPSBzdHlsZSgpLT5tYXhIZWlnaHQoKS5p
c1VuZGVmaW5lZCgpID8gaGVpZ2h0IDogY2FsY1Njcm9sbGJhclRoaWNrbmVzc1VzaW5nKHN0eWxl
KCktPm1heEhlaWdodCgpLCB2aXNpYmxlU2l6ZSk7Ci0gICAgbV9oZWlnaHQgPSBtYXgobWluSGVp
Z2h0LCBtaW4obWF4SGVpZ2h0LCBoZWlnaHQpKTsKKyAgICBpbnQgbWF4SGVpZ2h0ID0gc3R5bGUo
KS0+bWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IGggOiBjYWxjU2Nyb2xsYmFyVGhpY2tuZXNz
VXNpbmcoc3R5bGUoKS0+bWF4SGVpZ2h0KCksIHZpc2libGVTaXplKTsKKyAgICBzZXRIZWlnaHQo
bWF4KG1pbkhlaWdodCwgbWluKG1heEhlaWdodCwgaCkpKTsKIAogICAgIC8vIEJ1dHRvbnMgYW5k
IHRyYWNrIHBpZWNlcyBjYW4gYWxsIGhhdmUgbWFyZ2lucyBhbG9uZyB0aGUgYXhpcyBvZiB0aGUg
c2Nyb2xsYmFyLiAKICAgICBtX21hcmdpblRvcCA9IHN0eWxlKCktPm1hcmdpblRvcCgpLmNhbGNN
aW5WYWx1ZSh2aXNpYmxlU2l6ZSk7CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBSZW5kZXJTY3Jv
bGxiYXJQYXJ0OjppbWFnZUNoYW5nZWQoVwogdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpwYWlu
dEludG9SZWN0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsIGludCB0
eSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAvLyBNYWtlIHN1cmUgb3VyIGRpbWVuc2lv
bnMgbWF0Y2ggdGhlIHJlY3QuCi0gICAgc2V0UG9zKHJlY3QueCgpIC0gdHgsIHJlY3QueSgpIC0g
dHkpOworICAgIHNldExvY2F0aW9uKHJlY3QueCgpIC0gdHgsIHJlY3QueSgpIC0gdHkpOwogICAg
IHNldFdpZHRoKHJlY3Qud2lkdGgoKSk7CiAgICAgc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkpOwog
ICAgIHNldE92ZXJmbG93V2lkdGgobWF4KHJlY3Qud2lkdGgoKSwgb3ZlcmZsb3dXaWR0aCgpKSk7
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVy
U2xpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDkgKzEwNSw5IEBAIHZvaWQgSFRNTFNs
aWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW4KICAgICAgICAgICAgIEZsb2F0UG9pbnQgY3Vy
UG9pbnQgPSBzbGlkZXItPmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50KG1vdXNlRXZlbnQtPnBh
Z2VYKCksIG1vdXNlRXZlbnQtPnBhZ2VZKCkpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBp
bnQgbmV3UG9zaXRpb24gPSBzbGlkZXItPnBvc2l0aW9uRm9yT2Zmc2V0KAogICAgICAgICAgICAg
ICAgIEludFBvaW50KG1faW5pdGlhbFBvc2l0aW9uICsgY3VyUG9pbnQueCgpIC0gbV9pbml0aWFs
Q2xpY2tQb2ludC54KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgKHJlbmRlcmVyKCktPndp
ZHRoKCkgLyAyKSwgCisgICAgICAgICAgICAgICAgICAgICAgICArIChyZW5kZXJCb3goKS0+d2lk
dGgoKSAvIDIpLCAKICAgICAgICAgICAgICAgICAgICAgbV9pbml0aWFsUG9zaXRpb24gKyBjdXJQ
b2ludC55KCkgLSBtX2luaXRpYWxDbGlja1BvaW50LnkoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgKyAocmVuZGVyZXIoKS0+aGVpZ2h0KCkgLyAyKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgKyAocmVuZGVyQm94KCktPmhlaWdodCgpIC8gMikpKTsKICAgICAgICAgICAgIGlmIChzbGlk
ZXItPmN1cnJlbnRQb3NpdGlvbigpICE9IG5ld1Bvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAg
c2xpZGVyLT5zZXRDdXJyZW50UG9zaXRpb24obmV3UG9zaXRpb24pOwogICAgICAgICAgICAgICAg
IHNsaWRlci0+dmFsdWVDaGFuZ2VkKCk7CkBAIC0yMTMsMTIgKzIxMywxMiBAQCB2b2lkIFJlbmRl
clNsaWRlcjo6bGF5b3V0KCkKICAgICAKICAgICBpZiAobV90aHVtYiAmJiBtX3RodW1iLT5yZW5k
ZXJlcigpKSB7CiAgICAgICAgICAgICAKLSAgICAgICAgaW50IG9sZFdpZHRoID0gbV93aWR0aDsK
KyAgICAgICAgaW50IG9sZFdpZHRoID0gd2lkdGgoKTsKICAgICAgICAgY2FsY1dpZHRoKCk7Ci0g
ICAgICAgIGludCBvbGRIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgaW50IG9sZEhlaWdodCA9
IGhlaWdodCgpOwogICAgICAgICBjYWxjSGVpZ2h0KCk7CiAgICAgICAgIAotICAgICAgICBpZiAo
b2xkV2lkdGggIT0gbV93aWR0aCB8fCBvbGRIZWlnaHQgIT0gbV9oZWlnaHQpCisgICAgICAgIGlm
IChvbGRXaWR0aCAhPSB3aWR0aCgpIHx8IG9sZEhlaWdodCAhPSBoZWlnaHQoKSkKICAgICAgICAg
ICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOyAgCiAKICAgICAgICAgLy8gQWxsb3cgdGhlIHRo
ZW1lIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgdGh1bWIKQEAgLTI2OCw4ICsyNjgsOCBAQCBib29s
IFJlbmRlclNsaWRlcjo6bW91c2VFdmVudElzSW5UaHVtYihNCiAgICAgfSBlbHNlIAogI2VuZGlm
CiAgICAgewotICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX3RodW1iLT5yZW5kZXJl
cigpLT5hYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludChldnQtPnBhZ2VYKCksIGV2dC0+cGFnZVko
KSksIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgSW50UmVjdCB0aHVtYkJvdW5kcyA9IG1fdGh1bWIt
PnJlbmRlcmVyKCktPmJvcmRlckJveCgpOworICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQg
PSBtX3RodW1iLT5yZW5kZXJCb3goKS0+YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQoZXZ0LT5w
YWdlWCgpLCBldnQtPnBhZ2VZKCkpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIEludFJlY3QgdGh1
bWJCb3VuZHMgPSBtX3RodW1iLT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpOwogICAgICAg
ICByZXR1cm4gdGh1bWJCb3VuZHMuY29udGFpbnMocm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQp
KTsKICAgICB9CiB9CkBAIC0zNTEsOSArMzUxLDkgQEAgaW50IFJlbmRlclNsaWRlcjo6cG9zaXRp
b25Gb3JPZmZzZXQoY29ucwogICAgCiAgICAgaW50IHBvc2l0aW9uOwogICAgIGlmIChzdHlsZSgp
LT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBwb3NpdGlvbiA9
IHAueSgpIC0gbV90aHVtYi0+cmVuZGVyZXIoKS0+aGVpZ2h0KCkgLyAyOworICAgICAgICBwb3Np
dGlvbiA9IHAueSgpIC0gbV90aHVtYi0+cmVuZGVyQm94KCktPmhlaWdodCgpIC8gMjsKICAgICBl
bHNlCi0gICAgICAgIHBvc2l0aW9uID0gcC54KCkgLSBtX3RodW1iLT5yZW5kZXJlcigpLT53aWR0
aCgpIC8gMjsKKyAgICAgICAgcG9zaXRpb24gPSBwLngoKSAtIG1fdGh1bWItPnJlbmRlckJveCgp
LT53aWR0aCgpIC8gMjsKICAgICAKICAgICByZXR1cm4gbWF4KDAsIG1pbihwb3NpdGlvbiwgdHJh
Y2tTaXplKCkpKTsKIH0KQEAgLTM5NSw4ICszOTUsOCBAQCBpbnQgUmVuZGVyU2xpZGVyOjp0cmFj
a1NpemUoKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNl
KCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCgp
IC0gbV90aHVtYi0+cmVuZGVyZXIoKS0+aGVpZ2h0KCk7Ci0gICAgcmV0dXJuIGNvbnRlbnRXaWR0
aCgpIC0gbV90aHVtYi0+cmVuZGVyZXIoKS0+d2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRl
bnRIZWlnaHQoKSAtIG1fdGh1bWItPnJlbmRlckJveCgpLT5oZWlnaHQoKTsKKyAgICByZXR1cm4g
Y29udGVudFdpZHRoKCkgLSBtX3RodW1iLT5yZW5kZXJCb3goKS0+d2lkdGgoKTsKIH0KIAogdm9p
ZCBSZW5kZXJTbGlkZXI6OmZvcndhcmRFdmVudChFdmVudCogZXZ0KQpJbmRleDogcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxOSwxMiArMjE5LDEyIEBAIHZvaWQgUmVuZGVyVGFibGU6OmNhbGNXaWR0aCgp
CiAgICAgTGVuZ3RoVHlwZSB3aWR0aFR5cGUgPSBzdHlsZSgpLT53aWR0aCgpLnR5cGUoKTsKICAg
ICBpZiAod2lkdGhUeXBlID4gUmVsYXRpdmUgJiYgc3R5bGUoKS0+d2lkdGgoKS5pc1Bvc2l0aXZl
KCkpIHsKICAgICAgICAgLy8gUGVyY2VudCBvciBmaXhlZCB0YWJsZQotICAgICAgICBtX3dpZHRo
ID0gc3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlV2lkdGgpOwotICAgICAg
ICBtX3dpZHRoID0gbWF4KG1pblByZWZXaWR0aCgpLCBtX3dpZHRoKTsKKyAgICAgICAgc2V0V2lk
dGgoc3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlV2lkdGgpKTsKKyAgICAg
ICAgc2V0V2lkdGgobWF4KG1pblByZWZXaWR0aCgpLCB3aWR0aCgpKSk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgLy8gQW4gYXV0byB3aWR0aCB0YWJsZSBzaG91bGQgc2hyaW5rIHRvIGZpdCB3aXRo
aW4gdGhlIGxpbmUgd2lkdGggaWYgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIAogICAgICAgICAvLyBh
dm9pZCBvdmVybGFwcGluZyBmbG9hdHMuCi0gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gY2ItPmxp
bmVXaWR0aChtX3kpOworICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGNiLT5saW5lV2lkdGgobV9m
cmFtZVJlY3QueSgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFN1YnRyYWN0IG91dCBhbnkgZml4
ZWQgbWFyZ2lucyBmcm9tIG91ciBhdmFpbGFibGUgd2lkdGggZm9yIGF1dG8gd2lkdGggdGFibGVz
LgogICAgICAgICBpbnQgbWFyZ2luVG90YWwgPSAwOwpAQCAtMjM3LDEwICsyMzcsMTAgQEAgdm9p
ZCBSZW5kZXJUYWJsZTo6Y2FsY1dpZHRoKCkKICAgICAgICAgaW50IGF2YWlsQ29udGVudFdpZHRo
ID0gbWF4KDAsIGF2YWlsYWJsZVdpZHRoIC0gbWFyZ2luVG90YWwpOwogICAgICAgICAKICAgICAg
ICAgLy8gRW5zdXJlIHdlIGFyZW4ndCBiaWdnZXIgdGhhbiBvdXIgbWF4IHdpZHRoIG9yIHNtYWxs
ZXIgdGhhbiBvdXIgbWluIHdpZHRoLgotICAgICAgICBtX3dpZHRoID0gbWluKGF2YWlsQ29udGVu
dFdpZHRoLCBtYXhQcmVmV2lkdGgoKSk7CisgICAgICAgIHNldFdpZHRoKG1pbihhdmFpbENvbnRl
bnRXaWR0aCwgbWF4UHJlZldpZHRoKCkpKTsKICAgICB9CiAgICAgCi0gICAgbV93aWR0aCA9IG1h
eChtX3dpZHRoLCBtaW5QcmVmV2lkdGgoKSk7CisgICAgc2V0V2lkdGgobWF4KHdpZHRoKCksIG1p
blByZWZXaWR0aCgpKSk7CiAKICAgICAvLyBGaW5hbGx5LCB3aXRoIG91ciB0cnVlIHdpZHRoIGRl
dGVybWluZWQsIGNvbXB1dGUgb3VyIG1hcmdpbnMgZm9yIHJlYWwuCiAgICAgbV9tYXJnaW5SaWdo
dCA9IDA7CkBAIC0yNjUsMjQgKzI2NSwyNCBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQog
ICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7CiAgICAgfQog
ICAgIAotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMs
IEludFNpemUobV94LCBtX3kpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNo
ZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgbV9mcmFtZVJlY3QueSgpKSk7CiAKLSAgICBt
X2hlaWdodCA9IDA7CisgICAgc2V0SGVpZ2h0KDApOwogICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSAw
OwogICAgIG1fb3ZlcmZsb3dUb3AgPSAwOwogICAgIGluaXRNYXhNYXJnaW5WYWx1ZXMoKTsKICAg
ICAKLSAgICBpbnQgb2xkV2lkdGggPSBtX3dpZHRoOworICAgIGludCBvbGRXaWR0aCA9IHdpZHRo
KCk7CiAgICAgY2FsY1dpZHRoKCk7CiAKLSAgICBpZiAobV9jYXB0aW9uICYmIG1fd2lkdGggIT0g
b2xkV2lkdGgpCisgICAgaWYgKG1fY2FwdGlvbiAmJiB3aWR0aCgpICE9IG9sZFdpZHRoKQogICAg
ICAgICBtX2NhcHRpb24tPnNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKIAogICAgIC8vIEZJ
WE1FOiBUaGUgb3B0aW1pc2F0aW9uIGJlbG93IGRvZXNuJ3Qgd29yayBzaW5jZSB0aGUgaW50ZXJu
YWwgdGFibGUKICAgICAvLyBsYXlvdXQgY291bGQgaGF2ZSBjaGFuZ2VkLiAgd2UgbmVlZCB0byBh
ZGQgYSBmbGFnIHRvIHRoZSB0YWJsZQogICAgIC8vIGxheW91dCB0aGF0IHRlbGxzIHVzIGlmIHNv
bWV0aGluZyBoYXMgY2hhbmdlZCBpbiB0aGUgbWluIG1heAogICAgIC8vIGNhbGN1bGF0aW9ucyB0
byBkbyBpdCBjb3JyZWN0bHkuCi0vLyAgICAgaWYgKCBvbGRXaWR0aCAhPSBtX3dpZHRoIHx8IGNv
bHVtbnMuc2l6ZSgpICsgMSAhPSBjb2x1bW5Qb3Muc2l6ZSgpICkKKy8vICAgICBpZiAoIG9sZFdp
ZHRoICE9IHdpZHRoKCkgfHwgY29sdW1ucy5zaXplKCkgKyAxICE9IGNvbHVtblBvcy5zaXplKCkg
KQogICAgIG1fdGFibGVMYXlvdXQtPmxheW91dCgpOwogCiAgICAgc2V0Q2VsbFdpZHRocygpOwpA
QCAtMzA1LDcgKzMwNSw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBtX292ZXJmbG93V2lkdGggPSBtX3dpZHRoICsgKGNvbGxhcHNpbmcgPyBv
dXRlckJvcmRlclJpZ2h0KCkgLSBib3JkZXJSaWdodCgpIDogMCk7CisgICAgbV9vdmVyZmxvd1dp
ZHRoID0gd2lkdGgoKSArIChjb2xsYXBzaW5nID8gb3V0ZXJCb3JkZXJSaWdodCgpIC0gYm9yZGVy
UmlnaHQoKSA6IDApOwogICAgIG1fb3ZlcmZsb3dMZWZ0ID0gY29sbGFwc2luZyA/IGJvcmRlckxl
ZnQoKSAtIG91dGVyQm9yZGVyTGVmdCgpIDogMDsKIAogICAgIC8vIElmIGFueSB0YWJsZSBzZWN0
aW9uIG1vdmVkIHZlcnRpY2FsbHksIHdlIHdpbGwganVzdCByZXBhaW50IGV2ZXJ5dGhpbmcgZnJv
bSB0aGF0CkBAIC0zMTYsMjggKzMxNiwyOCBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQog
CiAgICAgLy8gRklYTUU6IENvbGxhcHNlIGNhcHRpb24gbWFyZ2luLgogICAgIGlmIChtX2NhcHRp
b24gJiYgbV9jYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9uU2lkZSgpICE9IENBUEJPVFRPTSkgewot
ICAgICAgICBJbnRSZWN0IGNhcHRpb25SZWN0KG1fY2FwdGlvbi0+eFBvcygpLCBtX2NhcHRpb24t
PnlQb3MoKSwgbV9jYXB0aW9uLT53aWR0aCgpLCBtX2NhcHRpb24tPmhlaWdodCgpKTsKKyAgICAg
ICAgSW50UmVjdCBjYXB0aW9uUmVjdChtX2NhcHRpb24tPngoKSwgbV9jYXB0aW9uLT55KCksIG1f
Y2FwdGlvbi0+d2lkdGgoKSwgbV9jYXB0aW9uLT5oZWlnaHQoKSk7CiAKLSAgICAgICAgbV9jYXB0
aW9uLT5zZXRQb3MobV9jYXB0aW9uLT5tYXJnaW5MZWZ0KCksIG1faGVpZ2h0KTsKKyAgICAgICAg
bV9jYXB0aW9uLT5zZXRMb2NhdGlvbihtX2NhcHRpb24tPm1hcmdpbkxlZnQoKSwgaGVpZ2h0KCkp
OwogICAgICAgICBpZiAoIXNlbGZOZWVkc0xheW91dCgpICYmIG1fY2FwdGlvbi0+Y2hlY2tGb3JS
ZXBhaW50RHVyaW5nTGF5b3V0KCkpCiAgICAgICAgICAgICBtX2NhcHRpb24tPnJlcGFpbnREdXJp
bmdMYXlvdXRJZk1vdmVkKGNhcHRpb25SZWN0KTsKIAotICAgICAgICBtX2hlaWdodCArPSBtX2Nh
cHRpb24tPmhlaWdodCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Ub3AoKSArIG1fY2FwdGlvbi0+bWFy
Z2luQm90dG9tKCk7Ci0gICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1fb3ZlcmZsb3dMZWZ0
LCBtX2NhcHRpb24tPnhQb3MoKSArIG1fY2FwdGlvbi0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSk7Ci0g
ICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lkdGgsIG1fY2FwdGlvbi0+
eFBvcygpICsgbV9jYXB0aW9uLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSk7Ci0gICAgICAgIG1fb3Zl
cmZsb3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgbV9jYXB0aW9uLT55UG9zKCkgKyBtX2NhcHRp
b24tPm92ZXJmbG93VG9wKGZhbHNlKSk7Ci0gICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgo
bV9vdmVyZmxvd0hlaWdodCwgbV9jYXB0aW9uLT55UG9zKCkgKyBtX2NhcHRpb24tPm92ZXJmbG93
SGVpZ2h0KGZhbHNlKSk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIG1fY2FwdGlvbi0+
aGVpZ2h0KCkgKyBtX2NhcHRpb24tPm1hcmdpblRvcCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Cb3R0
b20oKSk7CisgICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1fb3ZlcmZsb3dMZWZ0LCBtX2Nh
cHRpb24tPngoKSArIG1fY2FwdGlvbi0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSk7CisgICAgICAgIG1f
b3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lkdGgsIG1fY2FwdGlvbi0+eCgpICsgbV9j
YXB0aW9uLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSk7CisgICAgICAgIG1fb3ZlcmZsb3dUb3AgPSBt
aW4obV9vdmVyZmxvd1RvcCwgbV9jYXB0aW9uLT55KCkgKyBtX2NhcHRpb24tPm92ZXJmbG93VG9w
KGZhbHNlKSk7CisgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdo
dCwgbV9jYXB0aW9uLT55KCkgKyBtX2NhcHRpb24tPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSk7CiAK
LSAgICAgICAgaWYgKG1faGVpZ2h0ICE9IG9sZFRhYmxlVG9wKSB7CisgICAgICAgIGlmIChoZWln
aHQoKSAhPSBvbGRUYWJsZVRvcCkgewogICAgICAgICAgICAgc2VjdGlvbk1vdmVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIG1vdmVkU2VjdGlvblRvcCA9IG1pbihtX2hlaWdodCwgb2xkVGFibGVUb3Ap
OworICAgICAgICAgICAgbW92ZWRTZWN0aW9uVG9wID0gbWluKGhlaWdodCgpLCBvbGRUYWJsZVRv
cCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpbnQgYnBUb3AgPSBib3JkZXJUb3AoKSArIChj
b2xsYXBzaW5nID8gMCA6IHBhZGRpbmdUb3AoKSk7CiAgICAgaW50IGJwQm90dG9tID0gYm9yZGVy
Qm90dG9tKCkgKyAoY29sbGFwc2luZyA/IDAgOiBwYWRkaW5nQm90dG9tKCkpOwogICAgIAotICAg
IG1faGVpZ2h0ICs9IGJwVG9wOworICAgIHNldEhlaWdodChoZWlnaHQoKSArIGJwVG9wKTsKIAog
ICAgIGlmICghaXNQb3NpdGlvbmVkKCkpCiAgICAgICAgIGNhbGNIZWlnaHQoKTsKQEAgLTM2MSw3
ICszNjEsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogICAgIGlmICghbV9maXJzdEJv
ZHkgJiYgdGggPiBjYWxjdWxhdGVkSGVpZ2h0ICYmICFzdHlsZSgpLT5odG1sSGFja3MoKSkgewog
ICAgICAgICAvLyBDb21wbGV0ZWx5IGVtcHR5IHRhYmxlcyAod2l0aCBubyBzZWN0aW9ucyBvciBh
bnl0aGluZykgc2hvdWxkIGF0IGxlYXN0IGhvbm9yIHNwZWNpZmllZCBoZWlnaHQKICAgICAgICAg
Ly8gaW4gc3RyaWN0IG1vZGUuCi0gICAgICAgIG1faGVpZ2h0ICs9IHRoOworICAgICAgICBzZXRI
ZWlnaHQoaGVpZ2h0KCkgKyB0aCk7CiAgICAgfQogICAgIAogICAgIGludCBibCA9IGJvcmRlckxl
ZnQoKTsKQEAgLTM3MSwzOCArMzcxLDM4IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAg
ICAgLy8gcG9zaXRpb24gdGhlIHRhYmxlIHNlY3Rpb25zCiAgICAgUmVuZGVyVGFibGVTZWN0aW9u
KiBzZWN0aW9uID0gbV9oZWFkID8gbV9oZWFkIDogKG1fZmlyc3RCb2R5ID8gbV9maXJzdEJvZHkg
OiBtX2Zvb3QpOwogICAgIHdoaWxlIChzZWN0aW9uKSB7Ci0gICAgICAgIGlmICghc2VjdGlvbk1v
dmVkICYmIHNlY3Rpb24tPnlQb3MoKSAhPSBtX2hlaWdodCkgeworICAgICAgICBpZiAoIXNlY3Rp
b25Nb3ZlZCAmJiBzZWN0aW9uLT55KCkgIT0gaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIHNlY3Rp
b25Nb3ZlZCA9IHRydWU7Ci0gICAgICAgICAgICBtb3ZlZFNlY3Rpb25Ub3AgPSBtaW4obV9oZWln
aHQsIHNlY3Rpb24tPnlQb3MoKSkgKyBzZWN0aW9uLT5vdmVyZmxvd1RvcChmYWxzZSk7CisgICAg
ICAgICAgICBtb3ZlZFNlY3Rpb25Ub3AgPSBtaW4oaGVpZ2h0KCksIHNlY3Rpb24tPnkoKSkgKyBz
ZWN0aW9uLT5vdmVyZmxvd1RvcChmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgc2VjdGlvbi0+
c2V0UG9zKGJsLCBtX2hlaWdodCk7CisgICAgICAgIHNlY3Rpb24tPnNldExvY2F0aW9uKGJsLCBo
ZWlnaHQoKSk7CiAKLSAgICAgICAgbV9oZWlnaHQgKz0gc2VjdGlvbi0+aGVpZ2h0KCk7Ci0gICAg
ICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1fb3ZlcmZsb3dMZWZ0LCBzZWN0aW9uLT54UG9zKCkg
KyBzZWN0aW9uLT5vdmVyZmxvd0xlZnQoZmFsc2UpKTsKLSAgICAgICAgbV9vdmVyZmxvd1dpZHRo
ID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgc2VjdGlvbi0+eFBvcygpICsgc2VjdGlvbi0+b3ZlcmZs
b3dXaWR0aChmYWxzZSkpOwotICAgICAgICBtX292ZXJmbG93VG9wID0gbWluKG1fb3ZlcmZsb3dU
b3AsIHNlY3Rpb24tPnlQb3MoKSArIHNlY3Rpb24tPm92ZXJmbG93VG9wKGZhbHNlKSk7Ci0gICAg
ICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgc2VjdGlvbi0+eVBv
cygpICsgc2VjdGlvbi0+b3ZlcmZsb3dIZWlnaHQoZmFsc2UpKTsKKyAgICAgICAgc2V0SGVpZ2h0
KGhlaWdodCgpICsgc2VjdGlvbi0+aGVpZ2h0KCkpOworICAgICAgICBtX292ZXJmbG93TGVmdCA9
IG1pbihtX292ZXJmbG93TGVmdCwgc2VjdGlvbi0+eCgpICsgc2VjdGlvbi0+b3ZlcmZsb3dMZWZ0
KGZhbHNlKSk7CisgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lkdGgs
IHNlY3Rpb24tPngoKSArIHNlY3Rpb24tPm92ZXJmbG93V2lkdGgoZmFsc2UpKTsKKyAgICAgICAg
bV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9wLCBzZWN0aW9uLT55KCkgKyBzZWN0aW9u
LT5vdmVyZmxvd1RvcChmYWxzZSkpOworICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1f
b3ZlcmZsb3dIZWlnaHQsIHNlY3Rpb24tPnkoKSArIHNlY3Rpb24tPm92ZXJmbG93SGVpZ2h0KGZh
bHNlKSk7CiAgICAgICAgIHNlY3Rpb24gPSBzZWN0aW9uQmVsb3coc2VjdGlvbik7CiAgICAgfQog
Ci0gICAgbV9oZWlnaHQgKz0gYnBCb3R0b207CisgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgYnBC
b3R0b20pOwogCiAgICAgaWYgKG1fY2FwdGlvbiAmJiBtX2NhcHRpb24tPnN0eWxlKCktPmNhcHRp
b25TaWRlKCkgPT0gQ0FQQk9UVE9NKSB7Ci0gICAgICAgIEludFJlY3QgY2FwdGlvblJlY3QobV9j
YXB0aW9uLT54UG9zKCksIG1fY2FwdGlvbi0+eVBvcygpLCBtX2NhcHRpb24tPndpZHRoKCksIG1f
Y2FwdGlvbi0+aGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IGNhcHRpb25SZWN0KG1fY2FwdGlv
bi0+eCgpLCBtX2NhcHRpb24tPnkoKSwgbV9jYXB0aW9uLT53aWR0aCgpLCBtX2NhcHRpb24tPmhl
aWdodCgpKTsKIAotICAgICAgICBtX2NhcHRpb24tPnNldFBvcyhtX2NhcHRpb24tPm1hcmdpbkxl
ZnQoKSwgbV9oZWlnaHQpOworICAgICAgICBtX2NhcHRpb24tPnNldExvY2F0aW9uKG1fY2FwdGlv
bi0+bWFyZ2luTGVmdCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIGlmICghc2VsZk5lZWRzTGF5b3V0
KCkgJiYgbV9jYXB0aW9uLT5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkKICAgICAgICAg
ICAgIG1fY2FwdGlvbi0+cmVwYWludER1cmluZ0xheW91dElmTW92ZWQoY2FwdGlvblJlY3QpOwog
Ci0gICAgICAgIG1faGVpZ2h0ICs9IG1fY2FwdGlvbi0+aGVpZ2h0KCkgKyBtX2NhcHRpb24tPm1h
cmdpblRvcCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Cb3R0b20oKTsKLSAgICAgICAgbV9vdmVyZmxv
d0xlZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIG1fY2FwdGlvbi0+eFBvcygpICsgbV9jYXB0aW9u
LT5vdmVyZmxvd0xlZnQoZmFsc2UpKTsKLSAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1f
b3ZlcmZsb3dXaWR0aCwgbV9jYXB0aW9uLT54UG9zKCkgKyBtX2NhcHRpb24tPm92ZXJmbG93V2lk
dGgoZmFsc2UpKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbV9jYXB0aW9uLT5oZWln
aHQoKSArIG1fY2FwdGlvbi0+bWFyZ2luVG9wKCkgKyBtX2NhcHRpb24tPm1hcmdpbkJvdHRvbSgp
KTsKKyAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIG1fY2FwdGlv
bi0+eCgpICsgbV9jYXB0aW9uLT5vdmVyZmxvd0xlZnQoZmFsc2UpKTsKKyAgICAgICAgbV9vdmVy
Zmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgbV9jYXB0aW9uLT54KCkgKyBtX2NhcHRp
b24tPm92ZXJmbG93V2lkdGgoZmFsc2UpKTsKICAgICB9CiAKICAgICBpZiAoaXNQb3NpdGlvbmVk
KCkpCiAgICAgICAgIGNhbGNIZWlnaHQoKTsKIAotICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgo
bV9vdmVyZmxvd0hlaWdodCwgbV9oZWlnaHQpOworICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgo
bV9vdmVyZmxvd0hlaWdodCwgaGVpZ2h0KCkpOwogCiAgICAgLy8gdGFibGUgY2FuIGJlIGNvbnRh
aW5pbmcgYmxvY2sgb2YgcG9zaXRpb25lZCBlbGVtZW50cy4KICAgICAvLyBGSVhNRTogT25seSBw
YXNzIHRydWUgaWYgd2lkdGggb3IgaGVpZ2h0IGNoYW5nZWQuCkBAIC00MTEsOSArNDExLDkgQEAg
dm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKSB7
CiAgICAgICAgIGZvciAoU2hhZG93RGF0YSogYm94U2hhZG93ID0gc3R5bGUoKS0+Ym94U2hhZG93
KCk7IGJveFNoYWRvdzsgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KSB7CiAgICAgICAgICAg
ICBtX292ZXJmbG93TGVmdCA9IG1pbihtX292ZXJmbG93TGVmdCwgYm94U2hhZG93LT54IC0gYm94
U2hhZG93LT5ibHVyKTsKLSAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJm
bG93V2lkdGgsIG1fd2lkdGggKyBib3hTaGFkb3ctPnggKyBib3hTaGFkb3ctPmJsdXIpOworICAg
ICAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgd2lkdGgoKSAr
IGJveFNoYWRvdy0+eCArIGJveFNoYWRvdy0+Ymx1cik7CiAgICAgICAgICAgICBtX292ZXJmbG93
VG9wID0gbWluKG1fb3ZlcmZsb3dUb3AsIGJveFNoYWRvdy0+eSAtIGJveFNoYWRvdy0+Ymx1cik7
Ci0gICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIG1f
aGVpZ2h0ICsgYm94U2hhZG93LT55ICsgYm94U2hhZG93LT5ibHVyKTsKKyAgICAgICAgICAgIG1f
b3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgaGVpZ2h0KCkgKyBib3hTaGFk
b3ctPnkgKyBib3hTaGFkb3ctPmJsdXIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoaGFzUmVmbGVjdGlvbigpKSB7CkBAIC00NDcsOCArNDQ3LDggQEAgdm9pZCBSZW5kZXJUYWJs
ZTo6c2V0Q2VsbFdpZHRocygpCiAKIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICB0eCArPSB4UG9zKCk7Ci0gICAgdHkg
Kz0geVBvcygpOworICAgIHR4ICs9IHgoKTsKKyAgICB0eSArPSB5KCk7CiAKICAgICBQYWludFBo
YXNlIHBhaW50UGhhc2UgPSBwYWludEluZm8ucGhhc2U7CiAKQEAgLTExMjgsNyArMTEyOCw3IEBA
IGludCBSZW5kZXJUYWJsZTo6Z2V0QmFzZWxpbmVPZkZpcnN0TGluZUIKICAgICBpZiAoIWZpcnN0
Tm9uRW1wdHlTZWN0aW9uKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICByZXR1cm4gZmlyc3RO
b25FbXB0eVNlY3Rpb24tPnlQb3MoKSArIGZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5nZXRCYXNlbGlu
ZU9mRmlyc3RMaW5lQm94KCk7CisgICAgcmV0dXJuIGZpcnN0Tm9uRW1wdHlTZWN0aW9uLT55KCkg
KyBmaXJzdE5vbkVtcHR5U2VjdGlvbi0+Z2V0QmFzZWxpbmVPZkZpcnN0TGluZUJveCgpOwogfQog
CiBJbnRSZWN0IFJlbmRlclRhYmxlOjpnZXRPdmVyZmxvd0NsaXBSZWN0KGludCB0eCwgaW50IHR5
KQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMywxMCArMTIzLDEwIEBA
IHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjYWxjV2lkdGgoKQogewogfQogCi12b2lkIFJlbmRlclRh
YmxlQ2VsbDo6c2V0V2lkdGgoaW50IHdpZHRoKQordm9pZCBSZW5kZXJUYWJsZUNlbGw6OnNldFdp
ZHRoKGludCB3KQogewotICAgIGlmICh3aWR0aCAhPSBtX3dpZHRoKSB7Ci0gICAgICAgIG1fd2lk
dGggPSB3aWR0aDsKKyAgICBpZiAodyAhPSB3aWR0aCgpKSB7CisgICAgICAgIHNldFdpZHRoKHcp
OwogICAgICAgICBtX3dpZHRoQ2hhbmdlZCA9IHRydWU7CiAgICAgfQogfQpAQCAtMTc3LDggKzE3
Nyw4IEBAIEludFJlY3QgUmVuZGVyVGFibGVDZWxsOjphYnNvbHV0ZUNsaXBwZWQKICAgICAgICAg
fQogICAgIH0KICAgICBsZWZ0ID0gbWF4KGxlZnQsIC1vdmVyZmxvd0xlZnQoZmFsc2UpKTsKLSAg
ICB0b3AgPSBtYXgodG9wLCAtb3ZlcmZsb3dUb3AoZmFsc2UpIC0gYm9yZGVyVG9wRXh0cmEoKSk7
Ci0gICAgSW50UmVjdCByKC1sZWZ0LCAtYm9yZGVyVG9wRXh0cmEoKSAtIHRvcCwgbGVmdCArIG1h
eCh3aWR0aCgpICsgcmlnaHQsIG92ZXJmbG93V2lkdGgoZmFsc2UpKSwgYm9yZGVyVG9wRXh0cmEo
KSArIHRvcCArIG1heChoZWlnaHQoKSArIGJvdHRvbSArIGJvcmRlckJvdHRvbUV4dHJhKCksIG92
ZXJmbG93SGVpZ2h0KGZhbHNlKSkpOworICAgIHRvcCA9IG1heCh0b3AsIC1vdmVyZmxvd1RvcChm
YWxzZSkgLSBpbnRyaW5zaWNQYWRkaW5nVG9wKCkpOworICAgIEludFJlY3QgcigtbGVmdCwgLWlu
dHJpbnNpY1BhZGRpbmdUb3AoKSAtIHRvcCwgbGVmdCArIG1heCh3aWR0aCgpICsgcmlnaHQsIG92
ZXJmbG93V2lkdGgoZmFsc2UpKSwgaW50cmluc2ljUGFkZGluZ1RvcCgpICsgdG9wICsgbWF4KGhl
aWdodCgpICsgYm90dG9tICsgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpLCBvdmVyZmxvd0hlaWdo
dChmYWxzZSkpKTsKIAogICAgIGlmIChSZW5kZXJWaWV3KiB2ID0gdmlldygpKQogICAgICAgICBy
Lm1vdmUodi0+bGF5b3V0RGVsdGEoKSk7CkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBSZW5kZXJU
YWJsZUNlbGw6OmNvbXB1dGVBYnNvbHV0ZVJlcAogICAgIHIuc2V0WShyLnkoKSArIG1fdG9wRXh0
cmEpOwogICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7CiAgICAgaWYgKCghdiB8fCAhdi0+bGF5
b3V0U3RhdGVFbmFibGVkKCkpICYmIHBhcmVudCgpKQotICAgICAgICByLm1vdmUoLXBhcmVudCgp
LT54UG9zKCksIC1wYXJlbnQoKS0+eVBvcygpKTsgLy8gUm93cyBhcmUgaW4gdGhlIHNhbWUgY29v
cmRpbmF0ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRoZWlyIG9mZnNldCBpbi4KKyAgICAgICAgci5t
b3ZlKC1wYXJlbnRCb3goKS0+eCgpLCAtcGFyZW50Qm94KCktPnkoKSk7IC8vIFJvd3MgYXJlIGlu
IHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4u
CiAgICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KHIsIGZpeGVkKTsK
IH0KIApAQCAtMjAxLDcgKzIwMSw3IEBAIEZsb2F0UG9pbnQgUmVuZGVyVGFibGVDZWxsOjpsb2Nh
bFRvQWJzb2wKICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwogICAgIGlmICgoIXYgfHwgIXYt
PmxheW91dFN0YXRlRW5hYmxlZCgpKSAmJiBwYXJlbnQoKSkgewogICAgICAgICAvLyBSb3dzIGFy
ZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0
IGluLgotICAgICAgICBsb2NhbFBvaW50Lm1vdmUoLXBhcmVudCgpLT54UG9zKCksIC1wYXJlbnQo
KS0+eVBvcygpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3ZlKC1wYXJlbnRCb3goKS0+eCgpLCAt
cGFyZW50Qm94KCktPnkoKSk7CiAgICAgfQogICAgIHJldHVybiBSZW5kZXJCbG9jazo6bG9jYWxU
b0Fic29sdXRlKGxvY2FsUG9pbnQsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zKTsKIH0KQEAgLTIxMSw3
ICsyMTEsNyBAQCBGbG9hdFBvaW50IFJlbmRlclRhYmxlQ2VsbDo6YWJzb2x1dGVUb0xvCiAgICAg
RmxvYXRQb2ludCBsb2NhbFBvaW50ID0gUmVuZGVyQmxvY2s6OmFic29sdXRlVG9Mb2NhbChjb250
YWluZXJQb2ludCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMpOwogICAgIGlmIChwYXJlbnQoKSkgewog
ICAgICAgICAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyBhZGQg
dGhlaXIgb2Zmc2V0IGJhY2sgaW4uCi0gICAgICAgIGxvY2FsUG9pbnQubW92ZShwYXJlbnQoKS0+
eFBvcygpLCBwYXJlbnQoKS0+eVBvcygpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3ZlKHBhcmVu
dEJveCgpLT54KCksIHBhcmVudEJveCgpLT55KCkpOwogICAgIH0KICAgICByZXR1cm4gbG9jYWxQ
b2ludDsKIH0KQEAgLTIyMSw3ICsyMjEsNyBAQCBGbG9hdFF1YWQgUmVuZGVyVGFibGVDZWxsOjps
b2NhbFRvQWJzb2x1CiAgICAgRmxvYXRRdWFkIHF1YWQgPSBsb2NhbFF1YWQ7CiAgICAgaWYgKHBh
cmVudCgpKSB7CiAgICAgICAgIC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3Bh
Y2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCi0gICAgICAgIHF1YWQubW92ZSgtcGFy
ZW50KCktPnhQb3MoKSwgLXBhcmVudCgpLT55UG9zKCkpOworICAgICAgICBxdWFkLm1vdmUoLXBh
cmVudEJveCgpLT54KCksIC1wYXJlbnRCb3goKS0+eSgpKTsKICAgICB9CiAgICAgcmV0dXJuIFJl
bmRlckJsb2NrOjpsb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWQsIGZpeGVkKTsKIH0KQEAgLTYzMCwx
OCArNjMwLDE4IEBAIGludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZCb3R0b20oYm8KIAog
dm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSkKIHsKLSAgICB0eCArPSBtX3g7Ci0gICAgdHkgKz0gbV95OworICAgIHR4ICs9IHgo
KTsKKyAgICB0eSArPSBtX2ZyYW1lUmVjdC55KCk7CiAKICAgICAvLyBjaGVjayBpZiB3ZSBuZWVk
IHRvIGRvIGFueXRoaW5nIGF0IGFsbC4uLgogICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0bGlu
ZVNpemUocGFpbnRJbmZvLnBoYXNlKTsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZUNvbGxhcHNlZFRhYmxlQm9yZGVycyAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSkgewogICAgICAgICBpZiAodHkgLSB0YWJsZSgpLT5vdXRlckJvcmRlclRvcCgpID49
IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpICsgb3MgfHwKLSAgICAgICAgICAgICAgICB0eSArIG1f
dG9wRXh0cmEgKyBtX2hlaWdodCArIG1fYm90dG9tRXh0cmEgKyB0YWJsZSgpLT5vdXRlckJvcmRl
ckJvdHRvbSgpIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQorICAgICAgICAgICAgICAgIHR5
ICsgbV90b3BFeHRyYSArIGhlaWdodCgpICsgbV9ib3R0b21FeHRyYSArIHRhYmxlKCktPm91dGVy
Qm9yZGVyQm90dG9tKCkgPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGludCB3ID0gd2lkdGgoKTsKLSAgICAgICAgaW50IGggPSBoZWlnaHQo
KSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpOworICAgICAgICBpbnQg
aCA9IGhlaWdodCgpICsgaW50cmluc2ljUGFkZGluZ1RvcCgpICsgaW50cmluc2ljUGFkZGluZ0Jv
dHRvbSgpOwogICAgICAgICBwYWludENvbGxhcHNlZEJvcmRlcihwYWludEluZm8uY29udGV4dCwg
dHgsIHR5LCB3LCBoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAodHkgKyBvdmVyZmxvd1Rv
cChmYWxzZSkgPj0gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgKyBvcyB8fCB0eSArIG1fdG9wRXh0
cmEgKyBvdmVyZmxvd0hlaWdodChmYWxzZSkgKyBtX2JvdHRvbUV4dHJhIDw9IHBhaW50SW5mby5y
ZWN0LnkoKSAtIG9zKQpAQCAtODA3LDEzICs4MDcsMTMgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6
OnBhaW50QmFja2dyb3VuZHNCZQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYmFja2dyb3Vu
ZE9iamVjdCAhPSB0aGlzKSB7Ci0gICAgICAgIHR4ICs9IG1feDsKLSAgICAgICAgdHkgKz0gbV95
ICsgbV90b3BFeHRyYTsKKyAgICAgICAgdHggKz0geCgpOworICAgICAgICB0eSArPSBtX2ZyYW1l
UmVjdC55KCkgKyBtX3RvcEV4dHJhOwogICAgIH0KIAogICAgIGludCB3ID0gd2lkdGgoKTsKLSAg
ICBpbnQgaCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJh
KCk7Ci0gICAgdHkgLT0gYm9yZGVyVG9wRXh0cmEoKTsKKyAgICBpbnQgaCA9IGhlaWdodCgpICsg
aW50cmluc2ljUGFkZGluZ1RvcCgpICsgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpOworICAgIHR5
IC09IGludHJpbnNpY1BhZGRpbmdUb3AoKTsKIAogICAgIGludCBteSA9IG1heCh0eSwgcGFpbnRJ
bmZvLnJlY3QueSgpKTsKICAgICBpbnQgZW5kID0gbWluKHBhaW50SW5mby5yZWN0LmJvdHRvbSgp
LCB0eSArIGgpOwpAQCAtODQ1LDEwICs4NDUsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBh
aW50Qm94RGVjb3JhdGlvbgogICAgICAgICByZXR1cm47CiAKICAgICBpbnQgdyA9IHdpZHRoKCk7
Ci0gICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21F
eHRyYSgpOworICAgIGludCBoID0gaGVpZ2h0KCkgKyBpbnRyaW5zaWNQYWRkaW5nVG9wKCkgKyBp
bnRyaW5zaWNQYWRkaW5nQm90dG9tKCk7CiAgICAKICAgICBpZiAoc3R5bGUoKS0+Ym94U2hhZG93
KCkpCi0gICAgICAgIHBhaW50Qm94U2hhZG93KHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHkgLSBi
b3JkZXJUb3BFeHRyYSgpLCB3LCBoLCBzdHlsZSgpKTsKKyAgICAgICAgcGFpbnRCb3hTaGFkb3co
cGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSAtIGludHJpbnNpY1BhZGRpbmdUb3AoKSwgdywgaCwg
c3R5bGUoKSk7CiAgICAgCiAgICAgLy8gUGFpbnQgb3VyIGNlbGwgYmFja2dyb3VuZC4KICAgICBw
YWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChwYWludEluZm8sIHR4LCB0eSwgdGhpcyk7CkBAIC04
NTYsNyArODU2LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Qm94RGVjb3JhdGlvbgog
ICAgIGlmICghc3R5bGUoKS0+aGFzQm9yZGVyKCkgfHwgdGFibGVFbHQtPmNvbGxhcHNlQm9yZGVy
cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0eSAtPSBib3JkZXJUb3BFeHRyYSgpOworICAg
IHR5IC09IGludHJpbnNpY1BhZGRpbmdUb3AoKTsKICAgICBwYWludEJvcmRlcihwYWludEluZm8u
Y29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgpKTsKIH0KIApAQCAtODcwLDcgKzg3MCw3IEBA
IHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludE1hc2soUGFpbnRJbmYKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaW50IHcgPSB3aWR0aCgpOwotICAgIGludCBoID0gaGVpZ2h0KCkgKyBib3JkZXJU
b3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKKyAgICBpbnQgaCA9IGhlaWdodCgpICsg
aW50cmluc2ljUGFkZGluZ1RvcCgpICsgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpOwogICAgCiAg
ICAgaW50IG15ID0gbWF4KHR5LCBwYWludEluZm8ucmVjdC55KCkpOwogICAgIGludCBlbmQgPSBt
aW4ocGFpbnRJbmZvLnJlY3QuYm90dG9tKCksIHR5ICsgaCk7CkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5o
CShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTYsOSArOTYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludENvbGxhcHNl
ZEJvcmRlcihHcmFwaGljc0NvbnRleHQqLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7CiAg
ICAgdm9pZCBwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChQYWludEluZm8mLCBpbnQgdHgsIGlu
dCB0eSwgUmVuZGVyT2JqZWN0KiBiYWNrZ3JvdW5kT2JqZWN0KTsKIAotICAgIC8vIExpZSBhYm91
dCBwb3NpdGlvbiB0byBvdXRzaWRlIG9ic2VydmVycy4KLSAgICB2aXJ0dWFsIGludCB5UG9zKCkg
Y29uc3QgeyByZXR1cm4gbV95ICsgbV90b3BFeHRyYTsgfQotCiAgICAgdmlydHVhbCBJbnRSZWN0
IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRl
QWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKICAgICB2
aXJ0dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9
IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBm
YWxzZSkgY29uc3Q7CkBAIC0xMTAsOCArMTA3LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2Vs
bFRvcEV4dHJhKGludCBwKSB7IG1fdG9wRXh0cmEgPSBwOyB9CiAgICAgdm9pZCBzZXRDZWxsQm90
dG9tRXh0cmEoaW50IHApIHsgbV9ib3R0b21FeHRyYSA9IHA7IH0KIAotICAgIHZpcnR1YWwgaW50
IGJvcmRlclRvcEV4dHJhKCkgY29uc3QgeyByZXR1cm4gbV90b3BFeHRyYTsgfQotICAgIHZpcnR1
YWwgaW50IGJvcmRlckJvdHRvbUV4dHJhKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b21FeHRyYTsg
fQorICAgIHZpcnR1YWwgaW50IGludHJpbnNpY1BhZGRpbmdUb3AoKSBjb25zdCB7IHJldHVybiBt
X3RvcEV4dHJhOyB9CisgICAgdmlydHVhbCBpbnQgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIG1fYm90dG9tRXh0cmE7IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCBzdHlsZVdpbGxDaGFuZ2UoUmVuZGVyU3R5bGU6OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBuZXdTdHlsZSk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNpb24gNDAw
NzUpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5k
ZXIKICAgICBpZiAoIWVuc3VyZVJvd3MobV9jUm93ICsgMSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRlcmVyID0gY2hpbGQ7CisgICAgbV9ncmlkW21fY1Jv
d10ucm93UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVJvdyo+KGNoaWxkKTsKIAog
ICAgIGlmICghYmVmb3JlQ2hpbGQpIHsKICAgICAgICAgbV9ncmlkW21fY1Jvd10uaGVpZ2h0ID0g
Y2hpbGQtPnN0eWxlKCktPmhlaWdodCgpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIGJvb2wgUmVuZGVy
VGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKGludCAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBSZW5k
ZXJPYmplY3QqIHJvdykKK3ZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDZWxsKFJlbmRlclRh
YmxlQ2VsbCogY2VsbCwgUmVuZGVyVGFibGVSb3cqIHJvdykKIHsKICAgICBpbnQgclNwYW4gPSBj
ZWxsLT5yb3dTcGFuKCk7CiAgICAgaW50IGNTcGFuID0gY2VsbC0+Y29sU3BhbigpOwpAQCAtMjgz
LDcgKzI4Myw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzZXRDZWxsV2lkdGhzKCkKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZVB1c2hlci5kaWRQdXNoKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRlY2huaWNhbGx5LCB3ZSBzaG91bGQgYWxzbyBwdXNoIHN0YXRl
IGZvciB0aGUgcm93LCBidXQgc2luY2UKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJvd3Mg
ZG9uJ3QgcHVzaCBhIGNvb3JkaW5hdGUgdHJhbnNmb3JtLCB0aGF0J3Mgbm90IG5lY2Vzc2FyeS4K
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlUHVzaGVyLnB1c2godGhpcywgSW50U2l6ZSht
X3gsIG1feSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVQdXNoZXIucHVzaCh0aGlz
LCBJbnRTaXplKHgoKSwgbV9mcmFtZVJlY3QueSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgY2VsbC0+cmVwYWludCgpOwogICAgICAgICAgICAgICAgIH0K
QEAgLTMzMyw3ICszMzMsNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93SGVpZ2h0
KCkKICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlUHVzaGVyLmRpZFB1c2goKSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBUZWNobmljYWxseSwgd2Ugc2hvdWxkIGFsc28gcHVzaCBzdGF0ZSBm
b3IgdGhlIHJvdywgYnV0IHNpbmNlCiAgICAgICAgICAgICAgICAgICAgIC8vIHJvd3MgZG9uJ3Qg
cHVzaCBhIGNvb3JkaW5hdGUgdHJhbnNmb3JtLCB0aGF0J3Mgbm90IG5lY2Vzc2FyeS4KLSAgICAg
ICAgICAgICAgICAgICAgc3RhdGVQdXNoZXIucHVzaCh0aGlzLCBJbnRTaXplKG1feCwgbV95KSk7
CisgICAgICAgICAgICAgICAgICAgIHN0YXRlUHVzaGVyLnB1c2godGhpcywgSW50U2l6ZSh4KCks
IG1fZnJhbWVSZWN0LnkoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBj
ZWxsLT5zZXRPdmVycmlkZVNpemUoLTEpOwogICAgICAgICAgICAgICAgIGNlbGwtPnNldENoaWxk
TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwpAQCAtMzg0LDkgKzM4NCw5IEBAIGludCBSZW5kZXJU
YWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHQKICAgICBpbnQgdG90YWxSb3dzID0gbV9ncmlk
Um93czsKICAgICAKICAgICAvLyBTZXQgdGhlIHdpZHRoIG9mIG91ciBzZWN0aW9uIG5vdy4gIFRo
ZSByb3dzIHdpbGwgYWxzbyBiZSB0aGlzIHdpZHRoLgotICAgIG1fd2lkdGggPSB0YWJsZSgpLT5j
b250ZW50V2lkdGgoKTsKKyAgICBzZXRXaWR0aCh0YWJsZSgpLT5jb250ZW50V2lkdGgoKSk7CiAg
ICAgbV9vdmVyZmxvd0xlZnQgPSAwOwotICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1fd2lkdGg7Cisg
ICAgbV9vdmVyZmxvd1dpZHRoID0gd2lkdGgoKTsKICAgICBtX292ZXJmbG93VG9wID0gMDsKICAg
ICBtX292ZXJmbG93SGVpZ2h0ID0gMDsKICAgICBtX2hhc092ZXJmbG93aW5nQ2VsbCA9IGZhbHNl
OwpAQCAtNDU0LDEzICs0NTQsMTMgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93
cyhpbnQgdAogICAgIGludCB2c3BhY2luZyA9IHRhYmxlKCktPnZCb3JkZXJTcGFjaW5nKCk7CiAg
ICAgaW50IG5FZmZDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOwogCi0gICAgTGF5b3V0U3Rh
dGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZShtX3gsIG1feSkp
OworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIElu
dFNpemUoeCgpLCBtX2ZyYW1lUmVjdC55KCkpKTsKIAogICAgIGZvciAoaW50IHIgPSAwOyByIDwg
dG90YWxSb3dzOyByKyspIHsKICAgICAgICAgLy8gU2V0IHRoZSByb3cncyB4L3kgcG9zaXRpb24g
YW5kIHdpZHRoL2hlaWdodC4KLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcm93UmVuZGVyZXIg
PSBtX2dyaWRbcl0ucm93UmVuZGVyZXIpIHsKLSAgICAgICAgICAgIHJvd1JlbmRlcmVyLT5zZXRQ
b3MoMCwgbV9yb3dQb3Nbcl0pOwotICAgICAgICAgICAgcm93UmVuZGVyZXItPnNldFdpZHRoKG1f
d2lkdGgpOworICAgICAgICBpZiAoUmVuZGVyVGFibGVSb3cqIHJvd1JlbmRlcmVyID0gbV9ncmlk
W3JdLnJvd1JlbmRlcmVyKSB7CisgICAgICAgICAgICByb3dSZW5kZXJlci0+c2V0TG9jYXRpb24o
MCwgbV9yb3dQb3Nbcl0pOworICAgICAgICAgICAgcm93UmVuZGVyZXItPnNldFdpZHRoKHdpZHRo
KCkpOwogICAgICAgICAgICAgcm93UmVuZGVyZXItPnNldEhlaWdodChtX3Jvd1Bvc1tyICsgMV0g
LSBtX3Jvd1Bvc1tyXSAtIHZzcGFjaW5nKTsKICAgICAgICAgfQogCkBAIC01NDMsOCArNTQzLDgg
QEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdAogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGludCBvbGRUZSA9IGNlbGwtPmJvcmRlclRvcEV4dHJhKCk7Ci0gICAgICAgICAgICBpbnQg
b2xkQmUgPSBjZWxsLT5ib3JkZXJCb3R0b21FeHRyYSgpOworICAgICAgICAgICAgaW50IG9sZFRl
ID0gY2VsbC0+aW50cmluc2ljUGFkZGluZ1RvcCgpOworICAgICAgICAgICAgaW50IG9sZEJlID0g
Y2VsbC0+aW50cmluc2ljUGFkZGluZ0JvdHRvbSgpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaW50IGJlID0gckhlaWdodCAtIGNlbGwtPmhlaWdodCgpIC0gdGU7CiAgICAgICAgICAg
ICBjZWxsLT5zZXRDZWxsVG9wRXh0cmEodGUpOwpAQCAtNTUyLDE3ICs1NTIsMTcgQEAgaW50IFJl
bmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdAogICAgICAgICAgICAgaWYgKCh0ZSAh
PSBvbGRUZSB8fCBiZSA+IG9sZEJlKSAmJiAhdGFibGUoKS0+c2VsZk5lZWRzTGF5b3V0KCkgJiYg
Y2VsbC0+Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpCiAgICAgICAgICAgICAgICAgY2Vs
bC0+cmVwYWludCgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBJbnRSZWN0IG9sZENlbGxS
ZWN0KGNlbGwtPnhQb3MoKSwgY2VsbC0+eVBvcygpIC0gY2VsbC0+Ym9yZGVyVG9wRXh0cmEoKSAs
IGNlbGwtPndpZHRoKCksIGNlbGwtPmhlaWdodCgpKTsKKyAgICAgICAgICAgIEludFJlY3Qgb2xk
Q2VsbFJlY3QoY2VsbC0+eCgpLCBjZWxsLT55KCkgLSBjZWxsLT5pbnRyaW5zaWNQYWRkaW5nVG9w
KCkgLCBjZWxsLT53aWR0aCgpLCBjZWxsLT5oZWlnaHQoKSk7CiAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkgewotICAgICAgICAgICAgICAgIGNl
bGwtPnNldFBvcyh0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKVtuRWZmQ29sc10gLSB0YWJsZSgp
LT5jb2x1bW5Qb3NpdGlvbnMoKVt0YWJsZSgpLT5jb2xUb0VmZkNvbChjZWxsLT5jb2woKSArIGNl
bGwtPmNvbFNwYW4oKSldICsgaHNwYWNpbmcsIG1fcm93UG9zW3JpbmR4XSk7CisgICAgICAgICAg
ICAgICAgY2VsbC0+c2V0TG9jYXRpb24odGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKClbbkVmZkNv
bHNdIC0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKClbdGFibGUoKS0+Y29sVG9FZmZDb2woY2Vs
bC0+Y29sKCkgKyBjZWxsLT5jb2xTcGFuKCkpXSArIGhzcGFjaW5nLCBtX3Jvd1Bvc1tyaW5keF0p
OwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgY2VsbC0+c2V0UG9zKHRhYmxl
KCktPmNvbHVtblBvc2l0aW9ucygpW2NdICsgaHNwYWNpbmcsIG1fcm93UG9zW3JpbmR4XSk7Cisg
ICAgICAgICAgICAgICAgY2VsbC0+c2V0TG9jYXRpb24odGFibGUoKS0+Y29sdW1uUG9zaXRpb25z
KClbY10gKyBoc3BhY2luZywgbV9yb3dQb3NbcmluZHhdKTsKIAotICAgICAgICAgICAgbV9vdmVy
Zmxvd0xlZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIGNlbGwtPnhQb3MoKSArIGNlbGwtPm92ZXJm
bG93TGVmdChmYWxzZSkpOwotICAgICAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3Zl
cmZsb3dXaWR0aCwgY2VsbC0+eFBvcygpICsgY2VsbC0+b3ZlcmZsb3dXaWR0aChmYWxzZSkpOwot
ICAgICAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9wLCBjZWxsLT55UG9z
KCkgKyBjZWxsLT5vdmVyZmxvd1RvcChmYWxzZSkpOwotICAgICAgICAgICAgbV9vdmVyZmxvd0hl
aWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBjZWxsLT55UG9zKCkgKyBjZWxsLT5vdmVyZmxv
d0hlaWdodChmYWxzZSkpOworICAgICAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4obV9vdmVy
Zmxvd0xlZnQsIGNlbGwtPngoKSArIGNlbGwtPm92ZXJmbG93TGVmdChmYWxzZSkpOworICAgICAg
ICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgY2VsbC0+eCgpICsg
Y2VsbC0+b3ZlcmZsb3dXaWR0aChmYWxzZSkpOworICAgICAgICAgICAgbV9vdmVyZmxvd1RvcCA9
IG1pbihtX292ZXJmbG93VG9wLCBjZWxsLT55KCkgKyBjZWxsLT5vdmVyZmxvd1RvcChmYWxzZSkp
OworICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBj
ZWxsLT55KCkgKyBjZWxsLT5vdmVyZmxvd0hlaWdodChmYWxzZSkpOwogICAgICAgICAgICAgbV9o
YXNPdmVyZmxvd2luZ0NlbGwgfD0gY2VsbC0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSB8fCBjZWxsLT5v
dmVyZmxvd1dpZHRoKGZhbHNlKSA+IGNlbGwtPndpZHRoKCkgfHwgY2VsbC0+b3ZlcmZsb3dUb3Ao
ZmFsc2UpIHx8IGNlbGwtPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSA+IGNlbGwtPmhlaWdodCgpOwog
CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2VsbCBtb3ZlZCwgd2UgaGF2ZSB0byByZXBhaW50IGl0
IGFzIHdlbGwgYXMgYW55IGZsb2F0aW5nL3Bvc2l0aW9uZWQKQEAgLTU3NSw5ICs1NzUsOSBAQCBp
bnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKGludCB0CiAKICAgICBzdGF0ZVB1c2hl
ci5wb3AoKTsKIAotICAgIG1faGVpZ2h0ID0gbV9yb3dQb3NbdG90YWxSb3dzXTsKLSAgICBtX292
ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIG1faGVpZ2h0KTsKLSAgICByZXR1
cm4gbV9oZWlnaHQ7CisgICAgc2V0SGVpZ2h0KG1fcm93UG9zW3RvdGFsUm93c10pOworICAgIG1f
b3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgaGVpZ2h0KCkpOworICAgIHJl
dHVybiBoZWlnaHQoKTsKIH0KIAogaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bG93ZXN0UG9zaXRp
b24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgYm9vbCBpbmNsdWRlU2VsZikgY29uc3QK
QEAgLTU4OSw3ICs1ODksNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsb3dlc3RQb3NpdGlv
bihiCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHJvdyA9IGZpcnN0Q2hpbGQoKTsgcm93OyByb3cg
PSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNlbGwg
PSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgICAgIGlmIChjZWxsLT5pc1RhYmxlQ2VsbCgpKQotICAgICAgICAgICAgICAgIGJv
dHRvbSA9IG1heChib3R0b20sIGNlbGwtPnlQb3MoKSArIGNlbGwtPmxvd2VzdFBvc2l0aW9uKGZh
bHNlKSk7CisgICAgICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwgc3RhdGljX2Nhc3Q8
UmVuZGVyVGFibGVDZWxsKj4oY2VsbCktPnkoKSArIGNlbGwtPmxvd2VzdFBvc2l0aW9uKGZhbHNl
KSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02MDUsNyArNjA1LDcgQEAgaW50IFJlbmRl
clRhYmxlU2VjdGlvbjo6cmlnaHRtb3N0UG9zaXRpbwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBy
b3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGluZygpKSB7CiAgICAg
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxsID0gcm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNl
bGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2VsbC0+aXNUYWJs
ZUNlbGwoKSkKLSAgICAgICAgICAgICAgICByaWdodCA9IG1heChyaWdodCwgY2VsbC0+eFBvcygp
ICsgY2VsbC0+cmlnaHRtb3N0UG9zaXRpb24oZmFsc2UpKTsKKyAgICAgICAgICAgICAgICByaWdo
dCA9IG1heChyaWdodCwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oY2VsbCktPngoKSAr
IGNlbGwtPnJpZ2h0bW9zdFBvc2l0aW9uKGZhbHNlKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
CkBAIC02MjEsNyArNjIxLDcgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGVmdG1vc3RQb3Np
dGlvbgogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93
ID0gcm93LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxs
ID0gcm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7
CiAgICAgICAgICAgICBpZiAoY2VsbC0+aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgICAgICAgICBs
ZWZ0ID0gbWluKGxlZnQsIGNlbGwtPnhQb3MoKSArIGNlbGwtPmxlZnRtb3N0UG9zaXRpb24oZmFs
c2UpKTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHN0YXRpY19jYXN0PFJlbmRl
clRhYmxlQ2VsbCo+KGNlbGwpLT54KCkgKyBjZWxsLT5sZWZ0bW9zdFBvc2l0aW9uKGZhbHNlKSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC04NTEsNyArODUxLDcgQEAgaW50IFJlbmRlclRh
YmxlU2VjdGlvbjo6Z2V0QmFzZWxpbmVPZkZpcgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Zmlyc3RSb3ctPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9
IGZpcnN0Um93LT5hdChpKS5jZWxsOwogICAgICAgICBpZiAoY2VsbCkKLSAgICAgICAgICAgIGZp
cnN0TGluZUJhc2VsaW5lID0gbWF4KGZpcnN0TGluZUJhc2VsaW5lLCBjZWxsLT55UG9zKCkgKyBj
ZWxsLT5wYWRkaW5nVG9wKCkgKyBjZWxsLT5ib3JkZXJUb3AoKSArIGNlbGwtPmNvbnRlbnRIZWln
aHQoKSk7CisgICAgICAgICAgICBmaXJzdExpbmVCYXNlbGluZSA9IG1heChmaXJzdExpbmVCYXNl
bGluZSwgY2VsbC0+eSgpICsgY2VsbC0+cGFkZGluZ1RvcCgpICsgY2VsbC0+Ym9yZGVyVG9wKCkg
KyBjZWxsLT5jb250ZW50SGVpZ2h0KCkpOwogICAgIH0KIAogICAgIHJldHVybiBmaXJzdExpbmVC
YXNlbGluZTsKQEAgLTg3MSw4ICs4NzEsOCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFp
bnQoUGFpbnRJbmZvCiAgICAgaWYgKCF0b3RhbFJvd3MgfHwgIXRvdGFsQ29scykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgdHggKz0gbV94OwotICAgIHR5ICs9IG1feTsKKyAgICB0eCArPSB4KCk7
CisgICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwogCiAgICAgLy8gQ2hlY2sgd2hpY2ggcm93cyBh
bmQgY29scyBhcmUgdmlzaWJsZSBhbmQgb25seSBwYWludCB0aGVzZS4KICAgICAvLyBGSVhNRTog
Q291bGQgdXNlIGEgYmluYXJ5IHNlYXJjaCBoZXJlLgpAQCAtOTkyLDExICs5OTIsMTMgQEAgdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlY2FsY0NlbGxzKCkKICAgICAgICAgICAgIG1fY0NvbCA9
IDA7CiAgICAgICAgICAgICBpZiAoIWVuc3VyZVJvd3MobV9jUm93ICsgMSkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2dyaWRbbV9jUm93XS5yb3dSZW5kZXJlciA9IHJv
dzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVuZGVyVGFibGVSb3cqIHRhYmxlUm93ID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVSb3cqPihyb3cpOworICAgICAgICAgICAgbV9ncmlkW21f
Y1Jvd10ucm93UmVuZGVyZXIgPSB0YWJsZVJvdzsKIAogICAgICAgICAgICAgZm9yIChSZW5kZXJP
YmplY3QqIGNlbGwgPSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRT
aWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNUYWJsZUNlbGwoKSkKLSAg
ICAgICAgICAgICAgICAgICAgYWRkQ2VsbChzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNlbGwqPihj
ZWxsKSwgcm93KTsKKyAgICAgICAgICAgICAgICAgICAgYWRkQ2VsbChzdGF0aWNfY2FzdDxSZW5k
ZXJUYWJsZUNlbGwqPihjZWxsKSwgdGFibGVSb3cpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMTA1NiwyMCArMTA1OCwyMCBAQCBSZW5kZXJPYmplY3QqIFJlbmRlclRhYmxl
U2VjdGlvbjo6cmVtb3ZlCiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlclRhYmxlU2Vj
dGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
biBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGlu
dCB5UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgLy8g
VGFibGUgc2VjdGlvbnMgY2Fubm90IGV2ZXIgYmUgaGl0IHRlc3RlZC4gIEVmZmVjdGl2ZWx5IHRo
ZXkgZG8gbm90IGV4aXN0LgogICAgIC8vIEp1c3QgZm9yd2FyZCB0byBvdXIgY2hpbGRyZW4gYWx3
YXlzLgotICAgIHR4ICs9IG1feDsKLSAgICB0eSArPSBtX3k7CisgICAgdHggKz0geCgpOworICAg
IHR5ICs9IG1fZnJhbWVSZWN0LnkoKTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsK
ICAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgdG8gc2tpcCBvdmVyIGlubGluZSBmbG93cywgc2lu
Y2UgdGhleSBjYW4gc2hvdyB1cCBpbnNpZGUgdGFibGUgcm93cwogICAgICAgICAvLyBhdCB0aGUg
bW9tZW50IChhIGRlbW90ZWQgaW5saW5lIDxmb3JtPiBmb3IgZXhhbXBsZSkuIElmIHdlIGV2ZXIg
aW1wbGVtZW50IGEKICAgICAgICAgLy8gdGFibGUtc3BlY2lmaWMgaGl0LXRlc3QgbWV0aG9kICh3
aGljaCB3ZSBzaG91bGQgZG8gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYW55d2F5KSwKICAgICAg
ICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCi0gICAgICAgIGlmICghY2hpbGQt
Pmhhc0xheWVyKCkgJiYgIWNoaWxkLT5pc0lubGluZUZsb3coKSAmJiBjaGlsZC0+bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGFjdGlvbikpIHsKLSAgICAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwor
ICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmICFjaGlsZC0+aXNJbmxpbmVGbG93KCkg
JiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5
LCBhY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50
UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkocmV2aXNpb24gNDAw
NzUpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyVGFibGVD
ZWxsOworY2xhc3MgUmVuZGVyVGFibGVSb3c7CiAKIGNsYXNzIFJlbmRlclRhYmxlU2VjdGlvbiA6
IHB1YmxpYyBSZW5kZXJDb250YWluZXIgewogcHVibGljOgpAQCAtNDksNyArNTAsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGludCBnZXRCYXNlbGluZU9mRmlyc3RMaW5lQm94KCkgY29uc3Q7
CiAKLSAgICB2b2lkIGFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiwgUmVuZGVyT2JqZWN0KiByb3cp
OworICAgIHZvaWQgYWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqLCBSZW5kZXJUYWJsZVJvdyogcm93
KTsKIAogICAgIHZvaWQgc2V0Q2VsbFdpZHRocygpOwogICAgIGludCBjYWxjUm93SGVpZ2h0KCk7
CkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0cnVjdCBSb3dTdHJ1Y3QgewogICAg
ICAgICBSb3cqIHJvdzsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByb3dSZW5kZXJlcjsKKyAgICAg
ICAgUmVuZGVyVGFibGVSb3cqIHJvd1JlbmRlcmVyOwogICAgICAgICBpbnQgYmFzZWxpbmU7CiAg
ICAgICAgIExlbmd0aCBoZWlnaHQ7CiAgICAgfTsKQEAgLTc3LDkgKzc4LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgYXBwZW5kQ29sdW1uKGludCBwb3MpOwogICAgIHZvaWQgc3BsaXRDb2x1bW4oaW50
IHBvcywgaW50IG5ld1NpemUpOwogCi0gICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dXaWR0aChib29s
IGluY2x1ZGVJbnRlcmlvciA9IHRydWUpIGNvbnN0IHsgcmV0dXJuICghaW5jbHVkZUludGVyaW9y
ICYmIGhhc092ZXJmbG93Q2xpcCgpKSA/IG1fd2lkdGggOiBtX292ZXJmbG93V2lkdGg7IH0KKyAg
ICB2aXJ0dWFsIGludCBvdmVyZmxvd1dpZHRoKGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkg
Y29uc3QgeyByZXR1cm4gKCFpbmNsdWRlSW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkpID8g
d2lkdGgoKSA6IG1fb3ZlcmZsb3dXaWR0aDsgfQogICAgIHZpcnR1YWwgaW50IG92ZXJmbG93TGVm
dChib29sIGluY2x1ZGVJbnRlcmlvciA9IHRydWUpIGNvbnN0IHsgcmV0dXJuICghaW5jbHVkZUlu
dGVyaW9yICYmIGhhc092ZXJmbG93Q2xpcCgpKSA/IDAgOiBtX292ZXJmbG93TGVmdDsgfQotICAg
IHZpcnR1YWwgaW50IG92ZXJmbG93SGVpZ2h0KGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkg
Y29uc3QgeyByZXR1cm4gKCFpbmNsdWRlSW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkpID8g
bV9oZWlnaHQgOiBtX292ZXJmbG93SGVpZ2h0OyB9CisgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dI
ZWlnaHQoYm9vbCBpbmNsdWRlSW50ZXJpb3IgPSB0cnVlKSBjb25zdCB7IHJldHVybiAoIWluY2x1
ZGVJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkgPyBoZWlnaHQoKSA6IG1fb3ZlcmZsb3dI
ZWlnaHQ7IH0KICAgICB2aXJ0dWFsIGludCBvdmVyZmxvd1RvcChib29sIGluY2x1ZGVJbnRlcmlv
ciA9IHRydWUpIGNvbnN0IHsgcmV0dXJuICghaW5jbHVkZUludGVyaW9yICYmIGhhc092ZXJmbG93
Q2xpcCgpKSA/IDAgOiBtX292ZXJmbG93VG9wOyB9CiAKICAgICB2aXJ0dWFsIGludCBsb3dlc3RQ
b3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKSBj
b25zdDsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIFJlbmRlclRleHQ6OlJl
bmRlclRleHQoTm9kZSogbm9kZSwgUGFzc1IKICAgICAgLCBtX2lzQWxsQVNDSUkoY2hhcmFjdGVy
c0FyZUFsbEFTQ0lJKG1fdGV4dC5nZXQoKSkpCiB7CiAgICAgQVNTRVJUKG1fdGV4dCk7Ci0gICAg
c2V0UmVuZGVyVGV4dCgpOworICAgIHNldElzVGV4dCgpOwogICAgIG1fdGV4dCA9IGRvY3VtZW50
KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PihtX3RleHQpKTsKIAogICAgIHZpZXcoKS0+ZnJhbWVWaWV3KCktPnNldElzVmlzdWFsbHlOb25F
bXB0eSgpOwpAQCAtNzM1LDcgKzczNSw3IEBAIGJvb2wgUmVuZGVyVGV4dDo6Y29udGFpbnNPbmx5
V2hpdGVzcGFjZSgKICAgICByZXR1cm4gY3VyclBvcyA+PSAoZnJvbSArIGxlbik7CiB9CiAKLWlu
dCBSZW5kZXJUZXh0OjptaW5YUG9zKCkgY29uc3QKK2ludCBSZW5kZXJUZXh0Ojpib3VuZGluZ0Jv
eFgoKSBjb25zdAogewogICAgIGlmICghbV9maXJzdFRleHRCb3gpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtNzQ3LDE2ICs3NDcsMjggQEAgaW50IFJlbmRlclRleHQ6Om1pblhQb3MoKSBjb25zdAog
ICAgIHJldHVybiBtaW5YUG9zOwogfQogCi1pbnQgUmVuZGVyVGV4dDo6eFBvcygpIGNvbnN0Citp
bnQgUmVuZGVyVGV4dDo6Ym91bmRpbmdCb3hZKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZmlyc3RU
ZXh0Qm94KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgbm90
IHVzZSBhbiBhcmJpdHJhcnkgdmFsdWUgbGlrZSB0aGlzLiAgUGVyaGFwcyB3ZSBzaG91bGQgdXNl
IElOVF9NQVguCisgICAgaW50IG1pbllQb3MgPSA2NjY2NjY2OworICAgIGZvciAoSW5saW5lVGV4
dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgp
KQorICAgICAgICBtaW5ZUG9zID0gbWluKG1pbllQb3MsIHN0YXRpY19jYXN0PGludD4oYm94LT5t
X3kpKTsKKyAgICByZXR1cm4gbWluWVBvczsKK30KKworaW50IFJlbmRlclRleHQ6OmZpcnN0UnVu
WCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZmlyc3RUZXh0Qm94ID8gbV9maXJzdFRleHRCb3gt
Pm1feCA6IDA7CiB9CiAKLWludCBSZW5kZXJUZXh0Ojp5UG9zKCkgY29uc3QKK2ludCBSZW5kZXJU
ZXh0OjpmaXJzdFJ1blkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZpcnN0VGV4dEJveCA/IG1f
Zmlyc3RUZXh0Qm94LT5tX3kgOiAwOwogfQotCisgICAgCiB2b2lkIFJlbmRlclRleHQ6OnNldFNl
bGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQogewogICAgIElubGluZVRleHRCb3gq
IGJveDsKQEAgLTk3Myw3ICs5ODUsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFRleHQoUGFzc1Jl
ZlB0cjxTdHJpCiAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAK
LWludCBSZW5kZXJUZXh0OjpoZWlnaHQoKSBjb25zdAoraW50IFJlbmRlclRleHQ6OmJvdW5kaW5n
Qm94SGVpZ2h0KCkgY29uc3QKIHsKICAgICBpbnQgcmV0dmFsID0gMDsKICAgICBpZiAoZmlyc3RU
ZXh0Qm94KCkpCkBAIC0xMDY1LDcgKzEwNzcsNyBAQCB1bnNpZ25lZCBpbnQgUmVuZGVyVGV4dDo6
d2lkdGgodW5zaWduZWQgCiAgICAgcmV0dXJuIHc7CiB9CiAKLWludCBSZW5kZXJUZXh0Ojp3aWR0
aCgpIGNvbnN0CitpbnQgUmVuZGVyVGV4dDo6Ym91bmRpbmdCb3hXaWR0aCgpIGNvbnN0CiB7CiAg
ICAgLy8gRklYTUU6IHdlIHNob3VsZCBub3QgdXNlIGFuIGFyYml0cmFyeSB2YWx1ZSBsaWtlIHRo
aXMuICBQZXJoYXBzIHdlIHNob3VsZCB1c2UgSU5UX01BWC4KICAgICBpbnQgbWlueCA9IDEwMDAw
MDAwMDsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyVGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdW5zaWduZWQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250
JiwgaW50IHhQb3MpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgd2lkdGgodW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgbGVuLCBpbnQgeFBvcywgYm9vbCBmaXJzdExpbmUgPSBmYWxzZSkgY29u
c3Q7Ci0gICAgdmlydHVhbCBpbnQgd2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBoZWln
aHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUs
IGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKIApAQCAtODUsMTIgKzgzLDE2IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NYXhXLCBpbnQm
IGVuZE1heFcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1pblcsIGludCYgbWF4
VywgYm9vbCYgc3RyaXBGcm9udFNwYWNlcyk7CiAKLSAgICAvLyByZXR1cm5zIHRoZSBtaW5pbXVt
IHggcG9zaXRpb24gb2YgYWxsIHJ1bnMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudC4KLSAgICAvLyBk
ZWZhdWx0cyB0byAwLgotICAgIGludCBtaW5YUG9zKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0
aGUgbGVmdG1vc3QgKGFuZCB0b3Btb3N0KSBwb3NpdGlvbiBvZiB0aGUgYm91bmRpbmcgYm94IHRo
YXQgZW5jbG9zZXMgYWxsIHRleHQgcnVucworICAgIGludCBib3VuZGluZ0JveFgoKSBjb25zdDsK
KyAgICBpbnQgYm91bmRpbmdCb3hZKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRoZSB3aWR0
aCBhbmQgaGVpZ2h0IG9mIHRoZSBib3VuZGluZyBib3ggdGhhdCBlbmNsb3NlcyBhbGwgdGV4dCBy
dW5zLgorICAgIGludCBib3VuZGluZ0JveFdpZHRoKCkgY29uc3Q7CisgICAgaW50IGJvdW5kaW5n
Qm94SGVpZ2h0KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGludCB4UG9zKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBpbnQgeVBvcygpIGNvbnN0OworICAgIGludCBmaXJzdFJ1blgoKSBjb25zdDsKKyAg
ICBpbnQgZmlyc3RSdW5ZKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFBvc2l0
aW9uSGludChib29sIGZpcnN0TGluZSkgY29uc3Q7CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsMTIgKzEyNiwxMiBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sOjpjcmVhdGVTdWJ0cmVlSWZOCiAKIGludCBSZW5kZXJUZXh0Q29udHJvbDo6dGV4dEJsb2Nr
SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9oZWlnaHQgLSBwYWRkaW5nVG9wKCkgLSBw
YWRkaW5nQm90dG9tKCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpOworICAgIHJldHVy
biBoZWlnaHQoKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKSAtIGJvcmRlclRvcCgp
IC0gYm9yZGVyQm90dG9tKCk7CiB9CiAKIGludCBSZW5kZXJUZXh0Q29udHJvbDo6dGV4dEJsb2Nr
V2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBtX3dpZHRoIC0gcGFkZGluZ0xlZnQoKSAtIHBh
ZGRpbmdSaWdodCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKQorICAgIHJldHVybiB3
aWR0aCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpIC0gYm9yZGVyTGVmdCgpIC0g
Ym9yZGVyUmlnaHQoKQogICAgICAgICAgICAtIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5wYWRk
aW5nTGVmdCgpIC0gbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPnBhZGRpbmdSaWdodCgpOwogfQog
CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0U2VsZWN0aW9u
UmFuZwogCiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKLSAgICBpZiAoc3R5bGUo
KS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCAhbV9pbm5lclRleHQgfHwgIW1faW5uZXJUZXh0
LT5yZW5kZXJlcigpIHx8ICFtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+aGVpZ2h0KCkpIHsKKyAg
ICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCAhbV9pbm5lclRleHQgfHwg
IW1faW5uZXJUZXh0LT5yZW5kZXJlcigpIHx8ICFtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPmhl
aWdodCgpKSB7CiAgICAgICAgIGNhY2hlU2VsZWN0aW9uKHN0YXJ0LCBlbmQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtNDE4LDI1ICs0MTgsMjUgQEAgaW50IFJlbmRlclRleHRDb250cm9s
OjpzY3JvbGxiYXJUaGlja25lcwogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjYWxjSGVpZ2h0
KCkKIHsKLSAgICBtX2hlaWdodCA9IG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5ib3JkZXJUb3Ao
KSArIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5ib3JkZXJCb3R0b20oKSArCi0gICAgICAgICAg
ICAgICBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+cGFkZGluZ1RvcCgpICsgbV9pbm5lclRleHQt
PnJlbmRlcmVyKCktPnBhZGRpbmdCb3R0b20oKSArCi0gICAgICAgICAgICAgICBtX2lubmVyVGV4
dC0+cmVuZGVyZXIoKS0+bWFyZ2luVG9wKCkgKyBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+bWFy
Z2luQm90dG9tKCk7CisgICAgc2V0SGVpZ2h0KG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5ib3Jk
ZXJUb3AoKSArIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5ib3JkZXJCb3R0b20oKSArCisgICAg
ICAgICAgICAgIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5wYWRkaW5nVG9wKCkgKyBtX2lubmVy
VGV4dC0+cmVuZGVyZXIoKS0+cGFkZGluZ0JvdHRvbSgpICsKKyAgICAgICAgICAgICAgbV9pbm5l
clRleHQtPnJlbmRlcmVyKCktPm1hcmdpblRvcCgpICsgbV9pbm5lclRleHQtPnJlbmRlcmVyKCkt
Pm1hcmdpbkJvdHRvbSgpKTsKIAogICAgIGFkanVzdENvbnRyb2xIZWlnaHRCYXNlZE9uTGluZUhl
aWdodChtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+bGluZUhlaWdodCh0cnVlLCB0cnVlKSk7Ci0g
ICAgbV9oZWlnaHQgKz0gcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpICsgYm9yZGVyVG9w
KCkgKyBib3JkZXJCb3R0b20oKTsKKyAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBwYWRkaW5nVG9w
KCkgKyBwYWRkaW5nQm90dG9tKCkgKyBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKTsKIAog
ICAgIC8vIFdlIGFyZSBhYmxlIHRvIGhhdmUgYSBob3Jpem9udGFsIHNjcm9sbGJhciBpZiB0aGUg
b3ZlcmZsb3cgc3R5bGUgaXMgc2Nyb2xsLCBvciBpZiBpdHMgYXV0byBhbmQgdGhlcmUncyBubyB3
b3JkIHdyYXAuCiAgICAgaWYgKG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVy
Zmxvd1goKSA9PSBPU0NST0xMIHx8ICAobV9pbm5lclRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCkt
Pm92ZXJmbG93WCgpID09IE9BVVRPICYmIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgp
LT53b3JkV3JhcCgpID09IE5vcm1hbFdvcmRXcmFwKSkKLSAgICAgICAgbV9oZWlnaHQgKz0gc2Ny
b2xsYmFyVGhpY2tuZXNzKCk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIHNjcm9sbGJh
clRoaWNrbmVzcygpKTsKIAogICAgIFJlbmRlckJsb2NrOjpjYWxjSGVpZ2h0KCk7CiB9CiAKLXZv
aWQgUmVuZGVyVGV4dENvbnRyb2w6OmhpdElubmVyVGV4dEJsb2NrKEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyVGV4dENvbnRy
b2w6OmhpdElubmVyVGV4dEJsb2NrKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGlu
dCB5UG9zLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG1faW5u
ZXJUZXh0LmdldCgpKTsKLSAgICByZXN1bHQuc2V0TG9jYWxQb2ludChJbnRQb2ludCh4IC0gdHgg
LSBtX3ggLSBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+eFBvcygpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHkgLSB0eSAtIG1feSAtIG1faW5uZXJUZXh0LT5yZW5kZXJlcigp
LT55UG9zKCkpKTsKKyAgICByZXN1bHQuc2V0TG9jYWxQb2ludChJbnRQb2ludCh4UG9zIC0gdHgg
LSB4KCkgLSBtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPngoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB5UG9zIC0gdHkgLSB5KCkgLSBtX2lubmVyVGV4dC0+cmVuZGVyQm94
KCktPnkoKSkpOwogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpmb3J3YXJkRXZlbnQoRXZl
bnQqIGV2ZW50KQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE0ICs1NCwxNCBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lOjpzdWJ0cmVlCiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmU6OmxheW91dCgpCiB7Ci0gICAgaW50IG9sZEhlaWdodCA9IG1faGVpZ2h0OworICAgIGludCBv
bGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBjYWxjSGVpZ2h0KCk7CiAKLSAgICBpbnQgb2xkV2lk
dGggPSBtX3dpZHRoOworICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7CiAgICAgY2FsY1dpZHRo
KCk7CiAKLSAgICBib29sIHJlbGF5b3V0Q2hpbGRyZW4gPSBvbGRIZWlnaHQgIT0gbV9oZWlnaHQg
fHwgb2xkV2lkdGggIT0gbV93aWR0aDsKLSAgICBSZW5kZXJPYmplY3QqIGlubmVyVGV4dFJlbmRl
cmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOworICAgIGJvb2wgcmVsYXlvdXRD
aGlsZHJlbiA9IG9sZEhlaWdodCAhPSBoZWlnaHQoKSB8fCBvbGRXaWR0aCAhPSB3aWR0aCgpOwor
ICAgIFJlbmRlckJveCogaW5uZXJUZXh0UmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJl
bmRlckJveCgpOwogCiAgICAgLy8gU2V0IHRoZSB0ZXh0IGJsb2NrIGhlaWdodAogICAgIGludCBk
ZXNpcmVkSGVpZ2h0ID0gdGV4dEJsb2NrSGVpZ2h0KCk7CkBAIC0xMDQsNyArMTA0LDcgQEAgaW50
IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpwcmVmZXJyZQogCiB2b2lkIFJlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lOjphZGp1c3RDb250cm9sSGVpZ2h0QmFzZWRPbkxpbmVIZWlnaHQoaW50
IGxpbmVIZWlnaHQpCiB7Ci0gICAgbV9oZWlnaHQgKz0gbGluZUhlaWdodCAqIHN0YXRpY19jYXN0
PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihub2RlKCkpLT5yb3dzKCk7CisgICAgc2V0SGVpZ2h0KGhl
aWdodCgpICsgbGluZUhlaWdodCAqIHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihu
b2RlKCkpLT5yb3dzKCkpOwogfQogCiBpbnQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmJh
c2VsaW5lUG9zaXRpb24oYm9vbCwgYm9vbCkgY29uc3QKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMjkg
KzIwMCwyOSBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoCiAgICAg
ICAgIEludFJlY3QgY29udGVudHNSZWN0ID0gY29udGVudEJveCgpOwogCiAgICAgICAgIC8vIENv
bnZlcnQgdGhlIHJlY3QgaW50byB0aGUgY29vcmRzIHVzZWQgZm9yIHBhaW50aW5nIHRoZSBjb250
ZW50Ci0gICAgICAgIGNvbnRlbnRzUmVjdC5tb3ZlKHR4ICsgeFBvcygpLCB0eSArIHlQb3MoKSk7
CisgICAgICAgIGNvbnRlbnRzUmVjdC5tb3ZlKHR4ICsgeCgpLCB0eSArIHkoKSk7CiAgICAgICAg
IHRoZW1lKCktPnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IodGhpcywgcGFpbnRJbmZvLCBjb250ZW50
c1JlY3QpOwogICAgIH0KIH0KIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxh
eW91dCgpCiB7Ci0gICAgaW50IG9sZEhlaWdodCA9IG1faGVpZ2h0OworICAgIGludCBvbGRIZWln
aHQgPSBoZWlnaHQoKTsKICAgICBjYWxjSGVpZ2h0KCk7CiAKLSAgICBpbnQgb2xkV2lkdGggPSBt
X3dpZHRoOworICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7CiAgICAgY2FsY1dpZHRoKCk7CiAK
LSAgICBib29sIHJlbGF5b3V0Q2hpbGRyZW4gPSBvbGRIZWlnaHQgIT0gbV9oZWlnaHQgfHwgb2xk
V2lkdGggIT0gbV93aWR0aDsKKyAgICBib29sIHJlbGF5b3V0Q2hpbGRyZW4gPSBvbGRIZWlnaHQg
IT0gaGVpZ2h0KCkgfHwgb2xkV2lkdGggIT0gd2lkdGgoKTsKIAotICAgIFJlbmRlck9iamVjdCog
aW5uZXJUZXh0UmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7Ci0gICAg
UmVuZGVyT2JqZWN0KiBpbm5lckJsb2NrUmVuZGVyZXIgPSBtX2lubmVyQmxvY2sgPyBtX2lubmVy
QmxvY2stPnJlbmRlcmVyKCkgOiAwOworICAgIFJlbmRlckJveCogaW5uZXJUZXh0UmVuZGVyZXIg
PSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpOworICAgIFJlbmRlckJveCogaW5uZXJC
bG9ja1JlbmRlcmVyID0gbV9pbm5lckJsb2NrID8gbV9pbm5lckJsb2NrLT5yZW5kZXJCb3goKSA6
IDA7CiAKICAgICAvLyBTZXQgdGhlIHRleHQgYmxvY2sgaGVpZ2h0CiAgICAgaW50IGRlc2lyZWRI
ZWlnaHQgPSB0ZXh0QmxvY2tIZWlnaHQoKTsKICAgICBpbnQgY3VycmVudEhlaWdodCA9IGlubmVy
VGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKIAotICAgIGlmIChtX2lubmVyQmxvY2sgfHwgY3VycmVu
dEhlaWdodCA+IG1faGVpZ2h0KSB7CisgICAgaWYgKG1faW5uZXJCbG9jayB8fCBjdXJyZW50SGVp
Z2h0ID4gaGVpZ2h0KCkpIHsKICAgICAgICAgaWYgKGRlc2lyZWRIZWlnaHQgIT0gY3VycmVudEhl
aWdodCkKICAgICAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogICAgICAgICBpbm5l
clRleHRSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChkZXNpcmVkSGVpZ2h0LCBG
aXhlZCkpOwpAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpsYXlvdXQKICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVu
Z3RoKGRlc2lyZWRXaWR0aCwgRml4ZWQpKTsKIAogICAgIGlmIChtX2lubmVyQmxvY2spIHsKLSAg
ICAgICAgaW50IGlubmVyQmxvY2tXaWR0aCA9IG1fd2lkdGggLSBwYWRkaW5nTGVmdCgpIC0gcGFk
ZGluZ1JpZ2h0KCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpOworICAgICAgICBpbnQg
aW5uZXJCbG9ja1dpZHRoID0gd2lkdGgoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQo
KSAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCk7CiAgICAgICAgIGlmIChpbm5lckJsb2Nr
V2lkdGggIT0gaW5uZXJCbG9ja1JlbmRlcmVyLT53aWR0aCgpKQogICAgICAgICAgICAgcmVsYXlv
dXRDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS0+
c2V0V2lkdGgoTGVuZ3RoKGlubmVyQmxvY2tXaWR0aCwgRml4ZWQpKTsKQEAgLTI1NCwxMiArMjU0
LDEyIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQKICAgICAvLyBE
b24ndCBkbyB0aGlzIGZvciBzZWFyY2ggZmllbGRzLCBzaW5jZSB3ZSBkb24ndCBob25vciBoZWln
aHQgZm9yIHRoZW0KICAgICBpZiAoIW1faW5uZXJCbG9jaykgewogICAgICAgICBjdXJyZW50SGVp
Z2h0ID0gaW5uZXJUZXh0UmVuZGVyZXItPmhlaWdodCgpOwotICAgICAgICBpZiAoY3VycmVudEhl
aWdodCA8IG1faGVpZ2h0KQotICAgICAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnNldFBvcyhp
bm5lclRleHRSZW5kZXJlci0+eFBvcygpLCAobV9oZWlnaHQgLSBjdXJyZW50SGVpZ2h0KSAvIDIp
OworICAgICAgICBpZiAoY3VycmVudEhlaWdodCA8IGhlaWdodCgpKQorICAgICAgICAgICAgaW5u
ZXJUZXh0UmVuZGVyZXItPnNldExvY2F0aW9uKGlubmVyVGV4dFJlbmRlcmVyLT54KCksIChoZWln
aHQoKSAtIGN1cnJlbnRIZWlnaHQpIC8gMik7CiAgICAgfQogfQogCi1ib29sIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGludCB4UG9zLCBpbnQgeVBvcywgaW50IHR4LCBpbnQgdHksIEhpdFRl
c3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICAvLyBJZiB3ZSdyZSB3aXRoaW4gdGhlIHRl
eHQgY29udHJvbCwgd2Ugd2FudCB0byBhY3QgYXMgaWYgd2UndmUgaGl0IHRoZSBpbm5lciB0ZXh0
IGJsb2NrIGVsZW1lbnQsIGluIGNhc2UgdGhlIHBvaW50CiAgICAgLy8gd2FzIG9uIHRoZSBjb250
cm9sIGJ1dCBub3Qgb24gdGhlIGlubmVyIGVsZW1lbnQgKHNlZSBSYWRhciA0NjE3ODQxKS4KQEAg
LTI2NywzNyArMjY3LDM3IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2Rl
QXQKICAgICAvLyBJbiBhIHNlYXJjaCBmaWVsZCwgd2Ugd2FudCB0byBhY3QgYXMgaWYgd2UndmUg
aGl0IHRoZSByZXN1bHRzIGJsb2NrIGlmIHdlJ3JlIHRvIHRoZSBsZWZ0IG9mIHRoZSBpbm5lciB0
ZXh0IGJsb2NrLAogICAgIC8vIGFuZCBhY3QgYXMgaWYgd2UndmUgaGl0IHRoZSBjbG9zZSBibG9j
ayBpZiB3ZSdyZSB0byB0aGUgcmlnaHQgb2YgdGhlIGlubmVyIHRleHQgYmxvY2suCiAKLSAgICBp
ZiAoIVJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHks
IHR4LCB0eSwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCB0eCwgdHksIGhpdFRlc3RBY3Rp
b24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocmVzdWx0LmlubmVyTm9kZSgp
ICE9IGVsZW1lbnQoKSAmJiByZXN1bHQuaW5uZXJOb2RlKCkgIT0gbV9pbm5lckJsb2NrLmdldCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBoaXRJbm5lclRleHRCbG9jayhyZXN1bHQs
IHgsIHksIHR4LCB0eSk7CisgICAgaGl0SW5uZXJUZXh0QmxvY2socmVzdWx0LCB4UG9zLCB5UG9z
LCB0eCwgdHkpOwogCiAgICAgaWYgKCFtX2lubmVyQmxvY2spCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgTm9kZSogaW5uZXJOb2RlID0gMDsKLSAgICBSZW5kZXJPYmplY3QqIGlubmVyQmxv
Y2tSZW5kZXJlciA9IG1faW5uZXJCbG9jay0+cmVuZGVyZXIoKTsKLSAgICBSZW5kZXJPYmplY3Qq
IGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOworICAg
IFJlbmRlckJveCogaW5uZXJCbG9ja1JlbmRlcmVyID0gbV9pbm5lckJsb2NrLT5yZW5kZXJCb3go
KTsKKyAgICBSZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgp
LT5yZW5kZXJCb3goKTsKIAogICAgIEludFBvaW50IGxvY2FsUG9pbnQgPSByZXN1bHQubG9jYWxQ
b2ludCgpOwotICAgIGxvY2FsUG9pbnQubW92ZSgtaW5uZXJCbG9ja1JlbmRlcmVyLT54UG9zKCks
IC1pbm5lckJsb2NrUmVuZGVyZXItPnlQb3MoKSk7CisgICAgbG9jYWxQb2ludC5tb3ZlKC1pbm5l
ckJsb2NrUmVuZGVyZXItPngoKSwgLWlubmVyQmxvY2tSZW5kZXJlci0+eSgpKTsKIAotICAgIGlu
dCB0ZXh0TGVmdCA9IHR4ICsgbV94ICsgaW5uZXJCbG9ja1JlbmRlcmVyLT54UG9zKCkgKyBpbm5l
clRleHRSZW5kZXJlci0+eFBvcygpOwotICAgIGlmIChtX3Jlc3VsdHNCdXR0b24gJiYgbV9yZXN1
bHRzQnV0dG9uLT5yZW5kZXJlcigpICYmIHggPCB0ZXh0TGVmdCkKKyAgICBpbnQgdGV4dExlZnQg
PSB0eCArIHgoKSArIGlubmVyQmxvY2tSZW5kZXJlci0+eCgpICsgaW5uZXJUZXh0UmVuZGVyZXIt
PngoKTsKKyAgICBpZiAobV9yZXN1bHRzQnV0dG9uICYmIG1fcmVzdWx0c0J1dHRvbi0+cmVuZGVy
ZXIoKSAmJiB4UG9zIDwgdGV4dExlZnQpCiAgICAgICAgIGlubmVyTm9kZSA9IG1fcmVzdWx0c0J1
dHRvbi5nZXQoKTsKIAogICAgIGlmICghaW5uZXJOb2RlKSB7CiAgICAgICAgIGludCB0ZXh0Umln
aHQgPSB0ZXh0TGVmdCArIGlubmVyVGV4dFJlbmRlcmVyLT53aWR0aCgpOwotICAgICAgICBpZiAo
bV9jYW5jZWxCdXR0b24gJiYgbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVyKCkgJiYgeCA+IHRleHRS
aWdodCkKKyAgICAgICAgaWYgKG1fY2FuY2VsQnV0dG9uICYmIG1fY2FuY2VsQnV0dG9uLT5yZW5k
ZXJlcigpICYmIHhQb3MgPiB0ZXh0UmlnaHQpCiAgICAgICAgICAgICBpbm5lck5vZGUgPSBtX2Nh
bmNlbEJ1dHRvbi5nZXQoKTsKICAgICB9CiAKICAgICBpZiAoaW5uZXJOb2RlKSB7CiAgICAgICAg
IHJlc3VsdC5zZXRJbm5lck5vZGUoaW5uZXJOb2RlKTsKLSAgICAgICAgbG9jYWxQb2ludC5tb3Zl
KC1pbm5lck5vZGUtPnJlbmRlcmVyKCktPnhQb3MoKSwgLWlubmVyTm9kZS0+cmVuZGVyZXIoKS0+
eVBvcygpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3ZlKC1pbm5lck5vZGUtPnJlbmRlckJveCgp
LT54KCksIC1pbm5lck5vZGUtPnJlbmRlckJveCgpLT55KCkpOwogICAgIH0KIAogICAgIHJlc3Vs
dC5zZXRMb2NhbFBvaW50KGxvY2FsUG9pbnQpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIGJvb2wgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXQKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmZvcndhcmRFdmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgUmVuZGVyT2Jq
ZWN0KiBpbm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsK
KyAgICBSZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5y
ZW5kZXJCb3goKTsKIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVy
RXZlbnQpIHsKICAgICAgICAgaWYgKGlubmVyVGV4dFJlbmRlcmVyKSB7CkBAIC0zMjQsOSArMzI0
LDkgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvcndhcgogICAgIH0KIAog
ICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGlubmVyVGV4dFJlbmRlcmVyLT5hYnNvbHV0ZVRv
TG9jYWwoRmxvYXRQb2ludChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWCgp
LCBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWSgpKSwgZmFsc2UsIHRydWUp
OwotICAgIGlmIChtX3Jlc3VsdHNCdXR0b24gJiYgbG9jYWxQb2ludC54KCkgPCBpbm5lclRleHRS
ZW5kZXJlci0+Ym9yZGVyQm94KCkueCgpKQorICAgIGlmIChtX3Jlc3VsdHNCdXR0b24gJiYgbG9j
YWxQb2ludC54KCkgPCBpbm5lclRleHRSZW5kZXJlci0+Ym9yZGVyQm94UmVjdCgpLngoKSkKICAg
ICAgICAgbV9yZXN1bHRzQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLSAgICBl
bHNlIGlmIChtX2NhbmNlbEJ1dHRvbiAmJiBsb2NhbFBvaW50LngoKSA+IGlubmVyVGV4dFJlbmRl
cmVyLT5ib3JkZXJCb3goKS5yaWdodCgpKQorICAgIGVsc2UgaWYgKG1fY2FuY2VsQnV0dG9uICYm
IGxvY2FsUG9pbnQueCgpID4gaW5uZXJUZXh0UmVuZGVyZXItPmJvcmRlckJveFJlY3QoKS5yaWdo
dCgpKQogICAgICAgICBtX2NhbmNlbEJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7
CiAgICAgZWxzZQogICAgICAgICBSZW5kZXJUZXh0Q29udHJvbDo6Zm9yd2FyZEV2ZW50KGV2ZW50
KTsKQEAgLTM3OSwxMiArMzc5LDEyIEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OnRleHRCbG8KIHsKICAgICBpbnQgd2lkdGggPSBSZW5kZXJUZXh0Q29udHJvbDo6dGV4dEJsb2Nr
V2lkdGgoKTsKIAotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlc3VsdHNSZW5kZXJlciA9IG1fcmVz
dWx0c0J1dHRvbiA/IG1fcmVzdWx0c0J1dHRvbi0+cmVuZGVyZXIoKSA6IDApIHsKKyAgICBpZiAo
UmVuZGVyQm94KiByZXN1bHRzUmVuZGVyZXIgPSBtX3Jlc3VsdHNCdXR0b24gPyBtX3Jlc3VsdHNC
dXR0b24tPnJlbmRlckJveCgpIDogMCkgewogICAgICAgICByZXN1bHRzUmVuZGVyZXItPmNhbGNX
aWR0aCgpOwogICAgICAgICB3aWR0aCAtPSByZXN1bHRzUmVuZGVyZXItPndpZHRoKCkgKyByZXN1
bHRzUmVuZGVyZXItPm1hcmdpbkxlZnQoKSArIHJlc3VsdHNSZW5kZXJlci0+bWFyZ2luUmlnaHQo
KTsKICAgICB9CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBjYW5jZWxSZW5kZXJlciA9IG1fY2Fu
Y2VsQnV0dG9uID8gbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVyKCkgOiAwKSB7CisgICAgaWYgKFJl
bmRlckJveCogY2FuY2VsUmVuZGVyZXIgPSBtX2NhbmNlbEJ1dHRvbiA/IG1fY2FuY2VsQnV0dG9u
LT5yZW5kZXJCb3goKSA6IDApIHsKICAgICAgICAgY2FuY2VsUmVuZGVyZXItPmNhbGNXaWR0aCgp
OwogICAgICAgICB3aWR0aCAtPSBjYW5jZWxSZW5kZXJlci0+d2lkdGgoKSArIGNhbmNlbFJlbmRl
cmVyLT5tYXJnaW5MZWZ0KCkgKyBjYW5jZWxSZW5kZXJlci0+bWFyZ2luUmlnaHQoKTsKICAgICB9
CkBAIC00MTMsMjUgKzQxMywyNSBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpw
cmVmZXJyCiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphZGp1c3RDb250cm9s
SGVpZ2h0QmFzZWRPbkxpbmVIZWlnaHQoaW50IGxpbmVIZWlnaHQpCiB7Ci0gICAgaWYgKFJlbmRl
ck9iamVjdCogcmVzdWx0c1JlbmRlcmVyID0gbV9yZXN1bHRzQnV0dG9uID8gbV9yZXN1bHRzQnV0
dG9uLT5yZW5kZXJlcigpIDogMCkgeworICAgIGlmIChSZW5kZXJCb3gqIHJlc3VsdHNSZW5kZXJl
ciA9IG1fcmVzdWx0c0J1dHRvbiA/IG1fcmVzdWx0c0J1dHRvbi0+cmVuZGVyQm94KCkgOiAwKSB7
CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ocmVzdWx0c1JlbmRlcmVyKS0+Y2Fs
Y0hlaWdodCgpOwotICAgICAgICBtX2hlaWdodCA9IG1heChtX2hlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlc3VsdHNSZW5kZXJl
ci0+Ym9yZGVyQm90dG9tKCkgKwotICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzUmVuZGVy
ZXItPnBhZGRpbmdUb3AoKSArIHJlc3VsdHNSZW5kZXJlci0+cGFkZGluZ0JvdHRvbSgpICsKLSAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5tYXJnaW5Ub3AoKSArIHJlc3Vs
dHNSZW5kZXJlci0+bWFyZ2luQm90dG9tKCkpOworICAgICAgICBzZXRIZWlnaHQobWF4KGhlaWdo
dCgpLAorICAgICAgICAgICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5ib3JkZXJUb3AoKSArIHJl
c3VsdHNSZW5kZXJlci0+Ym9yZGVyQm90dG9tKCkgKworICAgICAgICAgICAgICAgICAgcmVzdWx0
c1JlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyByZXN1bHRzUmVuZGVyZXItPnBhZGRpbmdCb3R0b20o
KSArCisgICAgICAgICAgICAgICAgICByZXN1bHRzUmVuZGVyZXItPm1hcmdpblRvcCgpICsgcmVz
dWx0c1JlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSkpOwogICAgICAgICBsaW5lSGVpZ2h0ID0gbWF4
KGxpbmVIZWlnaHQsIHJlc3VsdHNSZW5kZXJlci0+aGVpZ2h0KCkpOwogICAgIH0KIAotICAgIGlm
IChSZW5kZXJPYmplY3QqIGNhbmNlbFJlbmRlcmVyID0gbV9jYW5jZWxCdXR0b24gPyBtX2NhbmNl
bEJ1dHRvbi0+cmVuZGVyZXIoKSA6IDApIHsKKyAgICBpZiAoUmVuZGVyQm94KiBjYW5jZWxSZW5k
ZXJlciA9IG1fY2FuY2VsQnV0dG9uID8gbV9jYW5jZWxCdXR0b24tPnJlbmRlckJveCgpIDogMCkg
ewogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNhbmNlbFJlbmRlcmVyKS0+Y2Fs
Y0hlaWdodCgpOwotICAgICAgICBtX2hlaWdodCA9IG1heChtX2hlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgY2FuY2VsUmVuZGVyZXItPmJvcmRlclRvcCgpICsgY2FuY2VsUmVuZGVyZXIt
PmJvcmRlckJvdHRvbSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsUmVuZGVyZXIt
PnBhZGRpbmdUb3AoKSArIGNhbmNlbFJlbmRlcmVyLT5wYWRkaW5nQm90dG9tKCkgKwotICAgICAg
ICAgICAgICAgICAgICAgICBjYW5jZWxSZW5kZXJlci0+bWFyZ2luVG9wKCkgKyBjYW5jZWxSZW5k
ZXJlci0+bWFyZ2luQm90dG9tKCkpOworICAgICAgICBzZXRIZWlnaHQobWF4KGhlaWdodCgpLAor
ICAgICAgICAgICAgICAgICAgY2FuY2VsUmVuZGVyZXItPmJvcmRlclRvcCgpICsgY2FuY2VsUmVu
ZGVyZXItPmJvcmRlckJvdHRvbSgpICsKKyAgICAgICAgICAgICAgICAgIGNhbmNlbFJlbmRlcmVy
LT5wYWRkaW5nVG9wKCkgKyBjYW5jZWxSZW5kZXJlci0+cGFkZGluZ0JvdHRvbSgpICsKKyAgICAg
ICAgICAgICAgICAgIGNhbmNlbFJlbmRlcmVyLT5tYXJnaW5Ub3AoKSArIGNhbmNlbFJlbmRlcmVy
LT5tYXJnaW5Cb3R0b20oKSkpOwogICAgICAgICBsaW5lSGVpZ2h0ID0gbWF4KGxpbmVIZWlnaHQs
IGNhbmNlbFJlbmRlcmVyLT5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAgbV9oZWlnaHQgKz0gbGlu
ZUhlaWdodDsKKyAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBsaW5lSGVpZ2h0KTsKIH0KIAogdm9p
ZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVN1YnRyZWVJZk5lZWRlZCgpCkBA
IC02OTUsNyArNjk1LDcgQEAgaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50
UAogewogICAgIGludCBwYWRkaW5nID0gcGFkZGluZ0xlZnQoKTsKIAotICAgIGlmIChSZW5kZXJP
YmplY3QqIHJlc3VsdHNSZW5kZXJlciA9IG1fcmVzdWx0c0J1dHRvbiA/IG1fcmVzdWx0c0J1dHRv
bi0+cmVuZGVyZXIoKSA6IDApCisgICAgaWYgKFJlbmRlckJveCogcmVzdWx0c1JlbmRlcmVyID0g
bV9yZXN1bHRzQnV0dG9uID8gbV9yZXN1bHRzQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApCiAgICAg
ICAgIHBhZGRpbmcgKz0gcmVzdWx0c1JlbmRlcmVyLT53aWR0aCgpOwogCiAgICAgcmV0dXJuIHBh
ZGRpbmc7CkBAIC03MDUsNyArNzA1LDcgQEAgaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6Y2xpZW50UAogewogICAgIGludCBwYWRkaW5nID0gcGFkZGluZ1JpZ2h0KCk7CiAKLSAgICBp
ZiAoUmVuZGVyT2JqZWN0KiBjYW5jZWxSZW5kZXJlciA9IG1fY2FuY2VsQnV0dG9uID8gbV9jYW5j
ZWxCdXR0b24tPnJlbmRlcmVyKCkgOiAwKQorICAgIGlmIChSZW5kZXJCb3gqIGNhbmNlbFJlbmRl
cmVyID0gbV9jYW5jZWxCdXR0b24gPyBtX2NhbmNlbEJ1dHRvbi0+cmVuZGVyQm94KCkgOiAwKQog
ICAgICAgICBwYWRkaW5nICs9IGNhbmNlbFJlbmRlcmVyLT53aWR0aCgpOwogCiAgICAgcmV0dXJu
IHBhZGRpbmc7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDkgKzM3MSwxMSBAQCBib29s
IFJlbmRlclRoZW1lOjpwYWludERlY29yYXRpb25zKFJlbmRlCiAjaWYgRU5BQkxFKFZJREVPKQog
Ym9vbCBSZW5kZXJUaGVtZTo6aGl0VGVzdE1lZGlhQ29udHJvbFBhcnQoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBJbnRQb2ludCYgYWJzUG9pbnQpCiB7Ci0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50
ID0gby0+YWJzb2x1dGVUb0xvY2FsKGFic1BvaW50LCBmYWxzZSwgdHJ1ZSk7ICAvLyByZXNwZWN0
IHRyYW5zZm9ybXMKKyAgICBpZiAoIW8tPmlzQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBvLT5ib3JkZXJCb3goKS5jb250YWlucyhyb3VuZGVkSW50UG9pbnQobG9j
YWxQb2ludCkpOworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG8tPmFic29sdXRlVG9Mb2Nh
bChhYnNQb2ludCwgZmFsc2UsIHRydWUpOyAgLy8gcmVzcGVjdCB0cmFuc2Zvcm1zCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG8pLT5ib3JkZXJCb3hSZWN0KCkuY29udGFpbnMo
cm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKIH0KICNlbmRpZgogCkBAIC00ODAsMTAgKzQ4
MiwxMyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCCiAKIGludCBS
ZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0
CiB7CisgICAgaWYgKCFvLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gMDsKKwogI2lmIFVTRShO
RVdfVEhFTUUpCi0gICAgcmV0dXJuIG8tPmhlaWdodCgpICsgby0+bWFyZ2luVG9wKCkgKyBtX3Ro
ZW1lLT5iYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkp
ICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBSZW5kZXJCb3gqPihvKS0+aGVpZ2h0KCkgKyBvLT5tYXJnaW5Ub3AoKSArIG1fdGhlbWUt
PmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50KG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkgKiBv
LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAjZWxzZQotICAgIHJldHVybiBvLT5oZWlnaHQo
KSArIG8tPm1hcmdpblRvcCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJC
b3gqPihvKS0+aGVpZ2h0KCkgKyBvLT5tYXJnaW5Ub3AoKTsKICNlbmRpZgogfQogCkluZGV4OiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCShyZXZpc2lvbiA0MDA3NykKKysrIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI1NCw2ICsxMjU0LDkgQEAgdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTm9kZSogaW5w
dXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIGlmICghaW5wdXQtPnJl
bmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHNldFNlYXJj
aENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJjaEZpZWxkQ2Vs
bCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CkBAIC0xMjY0LDcgKzEyNjcsNyBAQCBib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAKICAgICBmbG9hdCB6b29tTGV2ZWwg
PSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKLSAgICBGbG9hdFJlY3QgbG9jYWxCb3Vu
ZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5k
ZXJlcigpLT5ib3JkZXJCb3goKSldOworICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFy
Y2ggY2FuY2VsQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5i
b3JkZXJCb3hSZWN0KCkpXTsKICAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVj
dChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOwogCiAgICAgRmxvYXRSZWN0
IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7CkBAIC0xMzI4LDYgKzEzMzEsOSBAQCB2b2lkIFJl
bmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlCiBib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTm9kZSog
aW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIGlmICghaW5wdXQt
PnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHNldFNl
YXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJjaEZpZWxk
Q2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CkBAIC0xMzM1LDcgKzEzNDEsNyBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgaWYgKFtzZWFyY2ggc2Vh
cmNoTWVudVRlbXBsYXRlXSAhPSBuaWwpCiAgICAgICAgIFtzZWFyY2ggc2V0U2VhcmNoTWVudVRl
bXBsYXRlOm5pbF07CiAKLSAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJj
aEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJlcigpLT5ib3JkZXJCb3go
KSldOworICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVj
dEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsK
ICAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIo
KSwgbywgbG9jYWxCb3VuZHMsIHIpOwogCiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0g
ZHJhd1dpdGhGcmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+
ZG9jdW1lbnRWaWV3KCldOwpAQCAtMTM1NSw2ICsxMzYxLDkgQEAgdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0U2VhcmNoRmllbGRSZQogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIGlucHV0
ID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoIWlucHV0LT5yZW5k
ZXJlcigpLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBzZXRTZWFyY2hD
ZWxsU3RhdGUoaW5wdXQtPnJlbmRlcmVyKCksIHIpOwogCiAgICAgTlNTZWFyY2hGaWVsZENlbGwq
IHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOwpAQCAtMTM2Niw3ICsxMzc1LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlcwogCiAgICAgZmxvYXQgem9vbUxldmVsID0g
by0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCi0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRz
ID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVy
ZXIoKS0+Ym9yZGVyQm94KCkpXTsKKyAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNo
IHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9y
ZGVyQm94UmVjdCgpKV07CiAgICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3Qo
aW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKICAgICAKICAgICBJbnRSZWN0
IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7CkBAIC0xNTk0LDEwICsxNjAzLDEzIEBAIFN0cmlu
ZyBSZW5kZXJUaGVtZU1hYzo6ZXh0cmFNZWRpYUNvbnRyb2wKIAogYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6aGl0VGVzdE1lZGlhQ29udHJvbFBhcnQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRQb2lu
dCYgYWJzUG9pbnQpCiB7CisgICAgaWYgKCFvLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAogICAgIGlmIChtZWRpYUNvbnRyb2xsZXJUaGVtZSgpID09IE1lZGlhQ29u
dHJvbGxlclRoZW1lUVQpIHsKICAgICAgICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKTsKICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gby0+YWJzb2x1
dGVUb0xvY2FsKGFic1BvaW50LCBmYWxzZSwgdHJ1ZSk7ICAvLyByZXNwZWN0IHRyYW5zZm9ybXMK
LSAgICAgICAgcmV0dXJuIHdrSGl0VGVzdE1lZGlhVUlQYXJ0KHBhcnQgLSBNZWRpYUZ1bGxzY3Jl
ZW5CdXR0b25QYXJ0LCBNZWRpYUNvbnRyb2xsZXJUaGVtZVFULCBDR1JlY3Qoby0+Ym9yZGVyQm94
KCkpLCBDR1BvaW50KGxvY2FsUG9pbnQpKTsKKyAgICAgICAgcmV0dXJuIHdrSGl0VGVzdE1lZGlh
VUlQYXJ0KHBhcnQgLSBNZWRpYUZ1bGxzY3JlZW5CdXR0b25QYXJ0LCBNZWRpYUNvbnRyb2xsZXJU
aGVtZVFULCBDR1JlY3Qoc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obyktPmJvcmRlckJveFJlY3Qo
KSksIENHUG9pbnQobG9jYWxQb2ludCkpOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHJldHVy
biBSZW5kZXJUaGVtZTo6aGl0VGVzdE1lZGlhQ29udHJvbFBhcnQobywgYWJzUG9pbnQpOwpJbmRl
eDogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsMTUgQEAgc3Rh
dGljIFRleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgSW50UmVjdCByKG8ueFBvcygpLCBvLnlQb3MoKSwgby53aWR0aCgpLCBvLmhlaWdodCgp
KTsKKyAgICBJbnRSZWN0IHI7CisgICAgaWYgKG8uaXNUZXh0KCkpIHsKKyAgICAgICAgLy8gRklY
TUU6IFdvdWxkIGJlIGJldHRlciB0byBkdW1wIHRoZSBib3VuZGluZyBib3ggeCBhbmQgeSByYXRo
ZXIgdGhhbiB0aGUgZmlyc3QgcnVuJ3MgeCBhbmQgeSwgYnV0IHRoYXQgd291bGQgaW52b2x2ZSB1
cGRhdGluZworICAgICAgICAvLyBtYW55IHRlc3QgcmVzdWx0cy4KKyAgICAgICAgY29uc3QgUmVu
ZGVyVGV4dCYgdGV4dCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRleHQmPihvKTsKKyAgICAg
ICAgciA9IEludFJlY3QodGV4dC5maXJzdFJ1blgoKSwgdGV4dC5maXJzdFJ1blkoKSwgdGV4dC5i
b3VuZGluZ0JveFdpZHRoKCksIHRleHQuYm91bmRpbmdCb3hIZWlnaHQoKSk7CisgICAgfSBlbHNl
IGlmIChvLmlzQm94KCkpCisgICAgICAgIHIgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCb3gm
PihvKS5mcmFtZVJlY3QoKTsKKwogICAgIHRzIDw8ICIgIiA8PCByOwogCiAgICAgaWYgKCEoby5p
c1RleHQoKSAmJiAhby5pc0JSKCkpKSB7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiA0MDA3NSkK
KysrIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTMgKzUw
LDYgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2RlLCBGcmFtZQogCiAgICAgLy8g
aW5pdCBSZW5kZXJPYmplY3QgYXR0cmlidXRlcwogICAgIHNldElubGluZShmYWxzZSk7Ci0KLSAg
ICAvLyB0cnkgdG8gY29udHJhaW4gdGhlIHdpZHRoIHRvIHRoZSB2aWV3cyB3aWR0aAotICAgIG1f
d2lkdGggPSAwOwotICAgIG1faGVpZ2h0ID0gMDsKLSAgICBtX21pblByZWZXaWR0aCA9IDA7Ci0g
ICAgbV9tYXhQcmVmV2lkdGggPSAwOwotCiAgICAgc2V0UHJlZldpZHRoc0RpcnR5KHRydWUsIGZh
bHNlKTsKICAgICAKICAgICBzZXRQb3NpdGlvbmVkKHRydWUpOyAvLyB0byAwLDAgOikKQEAgLTcz
LDEzICs2NiwxMyBAQCBSZW5kZXJWaWV3Ojp+UmVuZGVyVmlldygpCiB2b2lkIFJlbmRlclZpZXc6
OmNhbGNIZWlnaHQoKQogewogICAgIGlmICghcHJpbnRpbmcoKSAmJiBtX2ZyYW1lVmlldykKLSAg
ICAgICAgbV9oZWlnaHQgPSB2aWV3SGVpZ2h0KCk7CisgICAgICAgIHNldEhlaWdodCh2aWV3SGVp
Z2h0KCkpOwogfQogCiB2b2lkIFJlbmRlclZpZXc6OmNhbGNXaWR0aCgpCiB7CiAgICAgaWYgKCFw
cmludGluZygpICYmIG1fZnJhbWVWaWV3KQotICAgICAgICBtX3dpZHRoID0gdmlld1dpZHRoKCk7
CisgICAgICAgIHNldFdpZHRoKHZpZXdXaWR0aCgpKTsKICAgICBtX21hcmdpbkxlZnQgPSAwOwog
ICAgIG1fbWFyZ2luUmlnaHQgPSAwOwogfQpAQCAtOTYsMTAgKzg5LDEwIEBAIHZvaWQgUmVuZGVy
Vmlldzo6Y2FsY1ByZWZXaWR0aHMoKQogdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogewogICAg
IGlmIChwcmludGluZygpKQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRo
ID0gbV93aWR0aDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IHdp
ZHRoKCk7CiAKICAgICAvLyBVc2UgY2FsY1dpZHRoL0hlaWdodCB0byBnZXQgdGhlIG5ldyB3aWR0
aC9oZWlnaHQsIHNpbmNlIHRoaXMgd2lsbCB0YWtlIHRoZSBmdWxsIHBhZ2Ugem9vbSBmYWN0b3Ig
aW50byBhY2NvdW50LgotICAgIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiA9ICFwcmludGluZygpICYm
ICghbV9mcmFtZVZpZXcgfHwgbV93aWR0aCAhPSB2aWV3V2lkdGgoKSB8fCBtX2hlaWdodCAhPSB2
aWV3SGVpZ2h0KCkpOworICAgIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiA9ICFwcmludGluZygpICYm
ICghbV9mcmFtZVZpZXcgfHwgd2lkdGgoKSAhPSB2aWV3V2lkdGgoKSB8fCBoZWlnaHQoKSAhPSB2
aWV3SGVpZ2h0KCkpOwogICAgIGlmIChyZWxheW91dENoaWxkcmVuKSB7CiAgICAgICAgIHNldENo
aWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CkBAIC0xMTgsOCArMTExLDggQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogICAgICAg
ICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CiAKICAgICAvLyBFbnN1cmUgdGhhdCBkb2NXaWR0aCgp
ID49IHdpZHRoKCkgYW5kIGRvY0hlaWdodCgpID49IGhlaWdodCgpLgotICAgIHNldE92ZXJmbG93
V2lkdGgobV93aWR0aCk7Ci0gICAgc2V0T3ZlcmZsb3dIZWlnaHQobV9oZWlnaHQpOworICAgIHNl
dE92ZXJmbG93V2lkdGgod2lkdGgoKSk7CisgICAgc2V0T3ZlcmZsb3dIZWlnaHQoaGVpZ2h0KCkp
OwogCiAgICAgc2V0T3ZlcmZsb3dXaWR0aChkb2NXaWR0aCgpKTsKICAgICBzZXRPdmVyZmxvd0hl
aWdodChkb2NIZWlnaHQoKSk7CkBAIC01MTQsNyArNTA3LDcgQEAgdm9pZCBSZW5kZXJWaWV3Ojpy
ZW1vdmVXaWRnZXQoUmVuZGVyT2JqZQogSW50UmVjdCBSZW5kZXJWaWV3Ojp2aWV3UmVjdCgpIGNv
bnN0CiB7CiAgICAgaWYgKHByaW50aW5nKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KDAsIDAs
IG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgd2lkdGgo
KSwgaGVpZ2h0KCkpOwogICAgIGlmIChtX2ZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIG1fZnJh
bWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwpAQCAt
NTIyLDcgKzUxNSw3IEBAIEludFJlY3QgUmVuZGVyVmlldzo6dmlld1JlY3QoKSBjb25zdAogCiBp
bnQgUmVuZGVyVmlldzo6ZG9jSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpbnQgaCA9IG1faGVpZ2h0
OworICAgIGludCBoID0gaGVpZ2h0KCk7CiAgICAgaW50IGxvd2VzdFBvcyA9IGxvd2VzdFBvc2l0
aW9uKCk7CiAgICAgaWYgKGxvd2VzdFBvcyA+IGgpCiAgICAgICAgIGggPSBsb3dlc3RQb3M7CkBA
IC01MzEsNyArNTI0LDcgQEAgaW50IFJlbmRlclZpZXc6OmRvY0hlaWdodCgpIGNvbnN0CiAgICAg
Ly8gSW5zdGVhZCBvZiB0aGlzIGRoIGNvbXB1dGF0aW9uIHdlIHNob3VsZCBrZWVwIHRoZSByZXN1
bHQKICAgICAvLyB3aGVuIHdlIGNhbGwgUmVuZGVyQmxvY2s6OmxheW91dC4KICAgICBpbnQgZGgg
PSAwOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjID0gZmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+
bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKFJlbmRlckJveCogYyA9IGZpcnN0Q2hpbGRCb3goKTsg
YzsgYyA9IGMtPm5leHRTaWJsaW5nQm94KCkpCiAgICAgICAgIGRoICs9IGMtPmhlaWdodCgpICsg
Yy0+bWFyZ2luVG9wKCkgKyBjLT5tYXJnaW5Cb3R0b20oKTsKIAogICAgIGlmIChkaCA+IGgpCkBA
IC01NDIsMTIgKzUzNSwxMiBAQCBpbnQgUmVuZGVyVmlldzo6ZG9jSGVpZ2h0KCkgY29uc3QKIAog
aW50IFJlbmRlclZpZXc6OmRvY1dpZHRoKCkgY29uc3QKIHsKLSAgICBpbnQgdyA9IG1fd2lkdGg7
CisgICAgaW50IHcgPSB3aWR0aCgpOwogICAgIGludCByaWdodG1vc3RQb3MgPSByaWdodG1vc3RQ
b3NpdGlvbigpOwogICAgIGlmIChyaWdodG1vc3RQb3MgPiB3KQogICAgICAgICB3ID0gcmlnaHRt
b3N0UG9zOwogCi0gICAgZm9yIChSZW5kZXJPYmplY3QgKmMgPSBmaXJzdENoaWxkKCk7IGM7IGMg
PSBjLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIGMgPSBmaXJzdENoaWxk
Qm94KCk7IGM7IGMgPSBjLT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAgIGludCBkdyA9IGMt
PndpZHRoKCkgKyBjLT5tYXJnaW5MZWZ0KCkgKyBjLT5tYXJnaW5SaWdodCgpOwogICAgICAgICBp
ZiAoZHcgPiB3KQogICAgICAgICAgICAgdyA9IGR3OwpAQCAtNTc4LDcgKzU3MSw3IEBAIGludCBS
ZW5kZXJWaWV3Ojp2aWV3V2lkdGgoKSBjb25zdAogCiAvLyBUaGUgaWRlYSBoZXJlIGlzIHRvIHRh
a2UgaW50byBhY2NvdW50IHdoYXQgb2JqZWN0IGlzIG1vdmluZyB0aGUgcGFnaW5hdGlvbiBwb2lu
dCwgYW5kCiAvLyB0aHVzIGNob29zZSB0aGUgYmVzdCBwbGFjZSB0byBjaG9wIGl0Lgotdm9pZCBS
ZW5kZXJWaWV3OjpzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJlbmRlck9iamVjdCogZm9yUmVu
ZGVyZXIsIGJvb2wgZm9yY2VkQnJlYWspCit2b2lkIFJlbmRlclZpZXc6OnNldEJlc3RUcnVuY2F0
ZWRBdChpbnQgeSwgUmVuZGVyQm94KiBmb3JSZW5kZXJlciwgYm9vbCBmb3JjZWRCcmVhaykKIHsK
ICAgICAvLyBOb2JvZHkgZWxzZSBjYW4gc2V0IGEgcGFnZSBicmVhayBvbmNlIHdlIGhhdmUgYSBm
b3JjZWQgYnJlYWsuCiAgICAgaWYgKG1fZm9yY2VkUGFnZUJyZWFrKQpAQCAtNTkyLDkgKzU4NSw4
IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KGludCAKICAgICB9CiAKICAg
ICAvLyBwcmVmZXIgdGhlIHdpZGVzdCBvYmplY3Qgd2hvIHRyaWVzIHRvIG1vdmUgdGhlIHBhZ2lu
YXRpb24gcG9pbnQKLSAgICBpbnQgd2lkdGggPSBmb3JSZW5kZXJlci0+d2lkdGgoKTsKLSAgICBp
ZiAod2lkdGggPiBtX3RydW5jYXRvcldpZHRoKSB7Ci0gICAgICAgIG1fdHJ1bmNhdG9yV2lkdGgg
PSB3aWR0aDsKKyAgICBpZiAoZm9yUmVuZGVyZXItPndpZHRoKCkgPiBtX3RydW5jYXRvcldpZHRo
KSB7CisgICAgICAgIG1fdHJ1bmNhdG9yV2lkdGggPSBmb3JSZW5kZXJlci0+d2lkdGgoKTsKICAg
ICAgICAgbV9iZXN0VHJ1bmNhdGVkQXQgPSB5OwogICAgIH0KIH0KSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNp
b24gNDAwNzUpCisrKyByZW5kZXJpbmcvUmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFByaW50SW1hZ2VzKGJvb2wgZW5hYmxl
KSB7IG1fcHJpbnRJbWFnZXMgPSBlbmFibGU7IH0KICAgICBib29sIHByaW50SW1hZ2VzKCkgY29u
c3QgeyByZXR1cm4gbV9wcmludEltYWdlczsgfQogICAgIHZvaWQgc2V0VHJ1bmNhdGVkQXQoaW50
IHkpIHsgbV90cnVuY2F0ZWRBdCA9IHk7IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90cnVuY2F0b3JX
aWR0aCA9IDA7IG1fZm9yY2VkUGFnZUJyZWFrID0gZmFsc2U7IH0KLSAgICB2b2lkIHNldEJlc3RU
cnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyT2JqZWN0ICpmb3JSZW5kZXJlciwgYm9vbCBmb3JjZWRC
cmVhayA9IGZhbHNlKTsKKyAgICB2b2lkIHNldEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVy
Qm94KiBmb3JSZW5kZXJlciwgYm9vbCBmb3JjZWRCcmVhayA9IGZhbHNlKTsKICAgICBpbnQgYmVz
dFRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV9iZXN0VHJ1bmNhdGVkQXQ7IH0KIAogICAg
IGludCB0cnVuY2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJ1bmNhdGVkQXQ7IH0KSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsOCArMTcyLDggQEAgdm9pZCBSZW5kZXJXaWRnZXQ6
OnBhaW50KFBhaW50SW5mbyYgcGFpbgogICAgIGlmICghc2hvdWxkUGFpbnQocGFpbnRJbmZvLCB0
eCwgdHkpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0eCArPSBtX3g7Ci0gICAgdHkgKz0gbV95
OworICAgIHR4ICs9IHgoKTsKKyAgICB0eSArPSBtX2ZyYW1lUmVjdC55KCk7CiAKICAgICBpZiAo
aGFzQm94RGVjb3JhdGlvbnMoKSAmJiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSkKICAgICAg
ICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CkBAIC0xODgsNyArMTg4
LDcgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbgogCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSAmJiAh
cGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcGFpbnRDdXN0
b21IaWdobGlnaHQodHggLSBtX3gsIHR5IC0gbV95LCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1
ZSk7CisgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR4IC0geCgpLCB0eSAtIG1fZnJhbWVS
ZWN0LnkoKSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOwogI2VuZGlmCiAKICAgICBpZiAo
bV93aWRnZXQpIHsKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHZvaWQgUmVuZGVyV2lkZ2V0Ojp1cGRh
dGVXaWRnZXRQb3NpdGlvbigKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0
ZSgpOwogICAgIGFic1Bvcy5tb3ZlKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRl
clRvcCgpICsgcGFkZGluZ1RvcCgpKTsKIAotICAgIGludCB3aWR0aCA9IG1fd2lkdGggLSBib3Jk
ZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgp
OwotICAgIGludCBoZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9t
KCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7CisgICAgaW50IHcgPSB3aWR0aCgp
IC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5n
UmlnaHQoKTsKKyAgICBpbnQgaCA9IGhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0
b20oKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKTsKIAotICAgIEludFJlY3QgbmV3
Qm91bmRzKGFic1Bvcy54KCksIGFic1Bvcy55KCksIHdpZHRoLCBoZWlnaHQpOworICAgIEludFJl
Y3QgbmV3Qm91bmRzKGFic1Bvcy54KCksIGFic1Bvcy55KCksIHcsIGgpOwogICAgIEludFJlY3Qg
b2xkQm91bmRzKG1fd2lkZ2V0LT5mcmFtZVJlY3QoKSk7CiAgICAgaWYgKG5ld0JvdW5kcyAhPSBv
bGRCb3VuZHMpIHsKICAgICAgICAgLy8gVGhlIHdpZGdldCBjaGFuZ2VkIHBvc2l0aW9ucy4gIFVw
ZGF0ZSB0aGUgZnJhbWUgZ2VvbWV0cnkuCkluZGV4OiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzI5LDcgKzMyOSw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0KICAgICAgICAgcmV0dXJuIHRzOwogCiAgICAgVmVjdG9yPFNWR1Rl
eHRDaHVuaz4mIGNodW5rcyA9IGNvbnN0X2Nhc3Q8VmVjdG9yPFNWR1RleHRDaHVuaz4mID4oYm94
LT5zdmdUZXh0Q2h1bmtzKCkpOwotICAgIHRzIDw8ICIgYXQgKCIgPDwgdGV4dC54UG9zKCkgPDwg
IiwiIDw8IHRleHQueVBvcygpIDw8ICIpIHNpemUgIiA8PCBib3gtPndpZHRoKCkgPDwgIngiIDw8
IGJveC0+aGVpZ2h0KCkgPDwgIiBjb250YWlucyAiIDw8IGNodW5rcy5zaXplKCkgPDwgIiBjaHVu
ayhzKSI7CisgICAgdHMgPDwgIiBhdCAoIiA8PCB0ZXh0LngoKSA8PCAiLCIgPDwgdGV4dC55KCkg
PDwgIikgc2l6ZSAiIDw8IGJveC0+d2lkdGgoKSA8PCAieCIgPDwgYm94LT5oZWlnaHQoKSA8PCAi
IGNvbnRhaW5zICIgPDwgY2h1bmtzLnNpemUoKSA8PCAiIGNodW5rKHMpIjsKIAogICAgIGlmICh0
ZXh0LnBhcmVudCgpICYmICh0ZXh0LnBhcmVudCgpLT5zdHlsZSgpLT5jb2xvcigpICE9IHRleHQu
c3R5bGUoKS0+Y29sb3IoKSkpCiAgICAgICAgIHRzIDw8ICIgW2NvbG9yPSIgPDwgdGV4dC5zdHls
ZSgpLT5jb2xvcigpLm5hbWUoKSA8PCAiXSI7CkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCB3cml0
ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyUwogICAgICAgICAgICAgdHMgPDwgIiB7IiA8
PCB0YWdOYW1lIDw8ICJ9IjsKICAgICB9CiAKLSAgICB0cyA8PCAiIGF0ICgiIDw8IHRleHQueFBv
cygpIDw8ICIsIiA8PCB0ZXh0LnlQb3MoKSA8PCAiKSBzaXplICIgPDwgdGV4dC53aWR0aCgpIDw8
ICJ4IiA8PCB0ZXh0LmhlaWdodCgpIDw8ICJcbiI7CisgICAgdHMgPDwgIiBhdCAoIiA8PCB0ZXh0
LmZpcnN0UnVuWCgpIDw8ICIsIiA8PCB0ZXh0LmZpcnN0UnVuWSgpIDw8ICIpIHNpemUgIiA8PCB0
ZXh0LmJvdW5kaW5nQm94V2lkdGgoKSA8PCAieCIgPDwgdGV4dC5ib3VuZGluZ0JveEhlaWdodCgp
IDw8ICJcbiI7CiAgICAgd3JpdGVTVkdJbmxpbmVUZXh0KHRzLCB0ZXh0LCBpbmRlbnQpOwogfQog
CkluZGV4OiByZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIHJlbmRlcmlu
Zy9TVkdSb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSb290LmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5oIgogI2luY2x1ZGUgIlNWR0lu
bGluZVRleHRCb3guaCIKQEAgLTg4Nyw3ICs4ODgsNyBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6
OmNvbXB1dGVQZXJDaGFyYWN0CiAgICAgLy8gRmluYWxseSB0aGUgdG9wIGxlZnQgcG9zaXRpb24g
b2Ygb3VyIGJveCBpcyBrbm93bi4KICAgICAvLyBQcm9wb2dhdGUgdGhpcyBrbm93bmxlZGdlIHRv
IG91ciBSZW5kZXJTVkdUZXh0IHBhcmVudC4KICAgICBGbG9hdFBvaW50IHRvcExlZnQgPSB0b3BM
ZWZ0UG9zaXRpb25PZkNoYXJhY3RlclJhbmdlKG1fc3ZnQ2hhcnMpOwotICAgIG9iamVjdCgpLT5z
ZXRQb3MoKGludCkgZmxvb3JmKHRvcExlZnQueCgpKSwgKGludCkgZmxvb3JmKHRvcExlZnQueSgp
KSk7CisgICAgYmxvY2soKS0+c2V0TG9jYXRpb24oKGludCkgZmxvb3JmKHRvcExlZnQueCgpKSwg
KGludCkgZmxvb3JmKHRvcExlZnQueSgpKSk7CiAKICAgICAvLyBMYXlvdXQgYWxsIElubGluZVRl
eHQvRmxvdyBib3hlcwogICAgIC8vIEJFV0FSRTogVGhpcyByZXF1aXJlcyB0aGUgcm9vdCB0b3Av
bGVmdCBwb3NpdGlvbiB0byBiZSBzZXQgY29ycmVjdGx5IGJlZm9yZSEKQEAgLTEwMzgsMTAgKzEw
MzksMTAgQEAgdm9pZCBTVkdSb290SW5saW5lQm94OjpsYXlvdXRJbmxpbmVCb3hlcwogICAgICAg
ICAgICAgaW50IG1pblkgPSBlbmNsb3NlZFN0cmluZ1JlY3QueSgpOwogICAgICAgICAgICAgaW50
IG1heFkgPSBtaW5ZICsgZW5jbG9zZWRTdHJpbmdSZWN0LmhlaWdodCgpOwogCi0gICAgICAgICAg
ICBjdXJyLT5zZXRYUG9zKG1pblggLSBvYmplY3QoKS0+eFBvcygpKTsKKyAgICAgICAgICAgIGN1
cnItPnNldFhQb3MobWluWCAtIGJsb2NrKCktPngoKSk7CiAgICAgICAgICAgICBjdXJyLT5zZXRX
aWR0aChlbmNsb3NlZFN0cmluZ1JlY3Qud2lkdGgoKSk7CiAKLSAgICAgICAgICAgIGN1cnItPnNl
dFlQb3MobWluWSAtIG9iamVjdCgpLT55UG9zKCkpOworICAgICAgICAgICAgY3Vyci0+c2V0WVBv
cyhtaW5ZIC0gYmxvY2soKS0+eSgpKTsKICAgICAgICAgICAgIGN1cnItPnNldEJhc2VsaW5lKGZv
bnQuYXNjZW50KCkpOwogICAgICAgICAgICAgY3Vyci0+c2V0SGVpZ2h0KGVuY2xvc2VkU3RyaW5n
UmVjdC5oZWlnaHQoKSk7CiAKQEAgLTEwNzEsMTAgKzEwNzIsMTAgQEAgdm9pZCBTVkdSb290SW5s
aW5lQm94OjpsYXlvdXRJbmxpbmVCb3hlcwogICAgIAogICAgICAgICAgICAgbGF5b3V0SW5saW5l
Qm94ZXMoZmxvd0JveCwgaXQsIG1pblgsIG1heFgsIG1pblksIG1heFkpOwogCi0gICAgICAgICAg
ICBjdXJyLT5zZXRYUG9zKG1pblggLSBvYmplY3QoKS0+eFBvcygpKTsKKyAgICAgICAgICAgIGN1
cnItPnNldFhQb3MobWluWCAtIGJsb2NrKCktPngoKSk7CiAgICAgICAgICAgICBjdXJyLT5zZXRX
aWR0aChtYXhYIC0gbWluWCk7CiAKLSAgICAgICAgICAgIGN1cnItPnNldFlQb3MobWluWSAtIG9i
amVjdCgpLT55UG9zKCkpOworICAgICAgICAgICAgY3Vyci0+c2V0WVBvcyhtaW5ZIC0gYmxvY2so
KS0+eSgpKTsKICAgICAgICAgICAgIGN1cnItPnNldEJhc2VsaW5lKGZvbnQuYXNjZW50KCkpOwog
ICAgICAgICAgICAgY3Vyci0+c2V0SGVpZ2h0KG1heFkgLSBtaW5ZKTsKIApAQCAtMTA5MywxMCAr
MTA5NCwxMCBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dElubGluZUJveGVzCiAgICAg
fQogCiAgICAgaWYgKHN0YXJ0LT5pc1Jvb3RJbmxpbmVCb3goKSkgewotICAgICAgICBpbnQgdG9w
ID0gbG93WSAtIG9iamVjdCgpLT55UG9zKCk7Ci0gICAgICAgIGludCBib3R0b20gPSBoaWdoWSAt
IG9iamVjdCgpLT55UG9zKCk7CisgICAgICAgIGludCB0b3AgPSBsb3dZIC0gYmxvY2soKS0+eSgp
OworICAgICAgICBpbnQgYm90dG9tID0gaGlnaFkgLSBibG9jaygpLT55KCk7CiAKLSAgICAgICAg
c3RhcnQtPnNldFhQb3MobG93WCAtIG9iamVjdCgpLT54UG9zKCkpOworICAgICAgICBzdGFydC0+
c2V0WFBvcyhsb3dYIC0gYmxvY2soKS0+eCgpKTsKICAgICAgICAgc3RhcnQtPnNldFlQb3ModG9w
KTsKIAogICAgICAgICBzdGFydC0+c2V0V2lkdGgoaGlnaFggLSBsb3dYKTsKSW5kZXg6IHN2Zy9T
VkdMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdMZW5ndGguY3BwCShyZXZpc2lvbiA0
MDA3NSkKKysrIHN2Zy9TVkdMZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsOCArMzAx
LDExIEBAIGZsb2F0IFNWR0xlbmd0aDo6UGVyY2VudGFnZU9mVmlld3BvcnQoZmwKICAgICAgICAg
fQogICAgIH0gZWxzZSBpZiAoY29udGV4dC0+cGFyZW50KCkgJiYgIWNvbnRleHQtPnBhcmVudCgp
LT5pc1NWR0VsZW1lbnQoKSkgewogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGNvbnRleHQtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIHdpZHRoID0gcmVuZGVyZXItPndp
ZHRoKCk7Ci0gICAgICAgICAgICBoZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCk7CisgICAgICAg
ICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gq
IGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAg
ICB3aWR0aCA9IGJveC0+d2lkdGgoKTsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBib3gtPmhl
aWdodCgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26902</attachid>
            <date>2009-01-21 12:49:40 -0800</date>
            <delta_ts>2009-01-21 16:09:15 -0800</delta_ts>
            <desc>Compiles.  Crashes, but at least it compiles. :)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>398372</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC03MzQsNiArNzM0LDEwIEBAIF9fWk5LN1dlYkNvcmUxMklj
b25EYXRhYmFzZTEyZGF0YWJhc2VQYXQKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFzZTI0c2hv
dWxkU3RvcFRocmVhZEFjdGl2aXR5RXYKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFzZTlpc0Vu
YWJsZWRFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNsb3NpbmdMYXllckV2Citf
X1pOSzdXZWJDb3JlMTBSZW5kZXJUZXh0MTZib3VuZGluZ0JveFdpZHRoRXYKK19fWk5LN1dlYkNv
cmUxMFJlbmRlclRleHQxN2JvdW5kaW5nQm94SGVpZ2h0RXYKK19fWk5LN1dlYkNvcmUxMFJlbmRl
clRleHQ5Zmlyc3RSdW5YRXYKK19fWk5LN1dlYkNvcmUxMFJlbmRlclRleHQ5Zmlyc3RSdW5ZRXYK
IF9fWk5LN1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjRkYXRhRXYKIF9fWk5LN1dlYkNvcmUxMlNoYXJl
ZEJ1ZmZlcjRzaXplRXYKIF9fWk5LN1dlYkNvcmUxMlRleHRFbmNvZGluZzZkZWNvZGVFUEtjbWJS
YgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShy
ZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJlY3QuaCIKLSNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJTaGFk
b3dWYWx1ZS5oIgogI2luY2x1ZGUgIldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCiAKQEAgLTM5
NSw3ICszOTUsMTEgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldEJvcmRlclJhZAog
CiBzdGF0aWMgSW50UmVjdCBzaXppbmdCb3goUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAg
ICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8g
cmVuZGVyZXItPmNvbnRlbnRCb3goKSA6IHJlbmRlcmVyLT5ib3JkZXJCb3goKTsKKyAgICBpZiAo
IXJlbmRlcmVyLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIAorICAg
IFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocmVuZGVyZXIpOworICAg
IHJldHVybiBib3gtPnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm94LT5j
b250ZW50Qm94UmVjdCgpIDogYm94LT5ib3JkZXJCb3hSZWN0KCk7CiB9CiAKIHN0YXRpYyBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFRyYW5zZm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQpJbmRleDogV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVk
ZSAiTXV0YXRpb25FdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJl
bmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgpAQCAtNjkxLDEwICs2OTIsMTIgQEAgYm9vbCBDb250YWluZXJOb2RlOjpn
ZXRVcHBlckxlZnRDb3JuZXIoRgogICAgICAgICB9IGVsc2UgaWYgKChvLT5pc1RleHQoKSAmJiAh
by0+aXNCUigpKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsKICAgICAgICAgICAgIHBvaW50ID0gby0+
Y29udGFpbmVyKCktPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAgICAgICAgICAgaWYgKG8tPmlzVGV4
dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4obyktPmZpcnN0VGV4dEJveCgpKSB7Ci0g
ICAgICAgICAgICAgICAgcG9pbnQubW92ZShzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pLT5t
aW5YUG9zKCksCisgICAgICAgICAgICAgICAgcG9pbnQubW92ZShzdGF0aWNfY2FzdDxSZW5kZXJU
ZXh0ICo+KG8pLT5ib3VuZGluZ0JveFgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlclRleHQgKj4obyktPmZpcnN0VGV4dEJveCgpLT5yb290KCktPnRvcE92
ZXJmbG93KCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcG9pbnQubW92
ZShvLT54UG9zKCksIG8tPnlQb3MoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obyk7CisgICAg
ICAgICAgICAgICAgcG9pbnQubW92ZShib3gtPngoKSwgYm94LT55KCkpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC03MTcsOSAr
NzIwLDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcigKICAgICBS
ZW5kZXJPYmplY3QgKm8gPSByZW5kZXJlcigpOwogICAgIGlmICghby0+aXNJbmxpbmUoKSB8fCBv
LT5pc1JlcGxhY2VkKCkpCiAgICAgeworICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19j
YXN0PFJlbmRlckJveCo+KG8pOwogICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0ZSgp
OwotICAgICAgICBwb2ludC5tb3ZlKG8tPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgby0+
aGVpZ2h0KCkgKyBvLT5ib3JkZXJUb3BFeHRyYSgpICsgby0+Ym9yZGVyQm90dG9tRXh0cmEoKSk7
CisgICAgICAgIHBvaW50Lm1vdmUoYm94LT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgIGJv
eC0+aGVpZ2h0KCkgKyBib3gtPmludHJpbnNpY1BhZGRpbmdUb3AoKSArIGJveC0+aW50cmluc2lj
UGFkZGluZ0JvdHRvbSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC03NDEs
MTMgKzc0NSwxMyBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRDb3JuZXIoCiAg
ICAgICAgIH0KICAgICAgICAgaWYgKG8tPmlzVGV4dCgpIHx8IG8tPmlzUmVwbGFjZWQoKSkgewog
ICAgICAgICAgICAgcG9pbnQgPSBvLT5jb250YWluZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7Ci0g
ICAgICAgICAgICBpbnQgeE9mZnNldDsKLSAgICAgICAgICAgIGlmIChvLT5pc1RleHQoKSkKLSAg
ICAgICAgICAgICAgICB4T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+bWlu
WFBvcygpICsgby0+d2lkdGgoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4
T2Zmc2V0ID0gby0+eFBvcygpICsgby0+d2lkdGgoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgcG9pbnQubW92ZSh4T2Zmc2V0LCBvLT55UG9zKCkgKyBvLT5oZWlnaHQoKSk7CisgICAgICAg
ICAgICBpZiAoby0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG8pOworICAgICAgICAgICAgICAgIHBvaW50Lm1v
dmUodGV4dC0+Ym91bmRpbmdCb3hYKCkgKyB0ZXh0LT5ib3VuZGluZ0JveFdpZHRoKCksIHRleHQt
PmJvdW5kaW5nQm94SGVpZ2h0KCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG8pOworICAgICAg
ICAgICAgICAgIHBvaW50Lm1vdmUoYm94LT54KCkgKyBib3gtPndpZHRoKCksIGJveC0+eSgpICsg
Ym94LT5oZWlnaHQoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNyArMjc0LDcgQEAgc3Rh
dGljIGludCBhZGp1c3RGb3JBYnNvbHV0ZVpvb20oaW50IHZhbAogaW50IEVsZW1lbnQ6Om9mZnNl
dExlZnQoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmQgPSByZW5kZXJlcigpKQorICAg
IGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3goKSkKICAgICAgICAgcmV0dXJuIGFkanVz
dEZvckxvY2FsWm9vbShyZW5kLT5vZmZzZXRMZWZ0KCksIHJlbmQpOwogICAgIHJldHVybiAwOwog
fQpAQCAtMjgyLDcgKzI4Miw3IEBAIGludCBFbGVtZW50OjpvZmZzZXRMZWZ0KCkKIGludCBFbGVt
ZW50OjpvZmZzZXRUb3AoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmQgPSByZW5kZXJl
cigpKQorICAgIGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3goKSkKICAgICAgICAgcmV0
dXJuIGFkanVzdEZvckxvY2FsWm9vbShyZW5kLT5vZmZzZXRUb3AoKSwgcmVuZCk7CiAgICAgcmV0
dXJuIDA7CiB9CkBAIC0yOTAsNyArMjkwLDcgQEAgaW50IEVsZW1lbnQ6Om9mZnNldFRvcCgpCiBp
bnQgRWxlbWVudDo6b2Zmc2V0V2lkdGgoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmQg
PSByZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3goKSkKICAg
ICAgICAgcmV0dXJuIGFkanVzdEZvckFic29sdXRlWm9vbShyZW5kLT5vZmZzZXRXaWR0aCgpLCBy
ZW5kKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTI5OCw3ICsyOTgsNyBAQCBpbnQgRWxlbWVudDo6
b2Zmc2V0V2lkdGgoKQogaW50IEVsZW1lbnQ6Om9mZnNldEhlaWdodCgpCiB7CiAgICAgZG9jdW1l
bnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKFJl
bmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlckJveCogcmVuZCA9
IHJlbmRlckJveCgpKQogICAgICAgICByZXR1cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29tKHJlbmQt
Pm9mZnNldEhlaWdodCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTMwNiw3ICszMDYs
NyBAQCBpbnQgRWxlbWVudDo6b2Zmc2V0SGVpZ2h0KCkKIEVsZW1lbnQqIEVsZW1lbnQ6Om9mZnNl
dFBhcmVudCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisg
ICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgpKQogICAgICAgICBpZiAoUmVuZGVy
T2JqZWN0KiBvZmZzZXRQYXJlbnQgPSByZW5kLT5vZmZzZXRQYXJlbnQoKSkKICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ob2Zmc2V0UGFyZW50LT5lbGVtZW50KCkpOwog
ICAgIHJldHVybiAwOwpAQCAtMzE2LDcgKzMxNiw3IEBAIGludCBFbGVtZW50OjpjbGllbnRMZWZ0
KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKIAotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmQgPSByZW5kZXJlcigpKQorICAgIGlm
IChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3goKSkKICAgICAgICAgcmV0dXJuIGFkanVzdEZv
ckFic29sdXRlWm9vbShyZW5kLT5jbGllbnRMZWZ0KCksIHJlbmQpOwogICAgIHJldHVybiAwOwog
fQpAQCAtMzI1LDcgKzMyNSw3IEBAIGludCBFbGVtZW50OjpjbGllbnRUb3AoKQogewogICAgIGRv
Y3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAg
aWYgKFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlckJveCog
cmVuZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZXR1cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29t
KHJlbmQtPmNsaWVudFRvcCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTM0NCw3ICsz
NDQsNyBAQCBpbnQgRWxlbWVudDo6Y2xpZW50V2lkdGgoKQogICAgIH0KICAgICAKIAotICAgIGlm
IChSZW5kZXJPYmplY3QqIHJlbmQgPSByZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJCb3gqIHJl
bmQgPSByZW5kZXJCb3goKSkKICAgICAgICAgcmV0dXJuIGFkanVzdEZvckFic29sdXRlWm9vbShy
ZW5kLT5jbGllbnRXaWR0aCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTM2Myw3ICsz
NjMsNyBAQCBpbnQgRWxlbWVudDo6Y2xpZW50SGVpZ2h0KCkKICAgICAgICAgICAgIHJldHVybiB2
aWV3LT5sYXlvdXRIZWlnaHQoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKFJlbmRlck9iamVjdCog
cmVuZCA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgp
KQogICAgICAgICByZXR1cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29tKHJlbmQtPmNsaWVudEhlaWdo
dCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTM3MSw3ICszNzEsNyBAQCBpbnQgRWxl
bWVudDo6Y2xpZW50SGVpZ2h0KCkKIGludCBFbGVtZW50OjpzY3JvbGxMZWZ0KCkKIHsKICAgICBk
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBp
ZiAoUmVuZGVyT2JqZWN0KiByZW5kID0gcmVuZGVyZXIoKSkKKyAgICBpZiAoUmVuZGVyQm94KiBy
ZW5kID0gcmVuZGVyQm94KCkpCiAgICAgICAgIHJldHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20o
cmVuZC0+c2Nyb2xsTGVmdCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTM3OSw3ICsz
NzksNyBAQCBpbnQgRWxlbWVudDo6c2Nyb2xsTGVmdCgpCiBpbnQgRWxlbWVudDo6c2Nyb2xsVG9w
KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kID0gcmVuZGVyZXIoKSkKKyAgICBpZiAo
UmVuZGVyQm94KiByZW5kID0gcmVuZGVyQm94KCkpCiAgICAgICAgIHJldHVybiBhZGp1c3RGb3JB
YnNvbHV0ZVpvb20ocmVuZC0+c2Nyb2xsVG9wKCksIHJlbmQpOwogICAgIHJldHVybiAwOwogfQpA
QCAtMzg3LDIxICszODcsMjEgQEAgaW50IEVsZW1lbnQ6OnNjcm9sbFRvcCgpCiB2b2lkIEVsZW1l
bnQ6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCog
cmVuZCA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgp
KQogICAgICAgICByZW5kLT5zZXRTY3JvbGxMZWZ0KHN0YXRpY19jYXN0PGludD4obmV3TGVmdCAq
IHJlbmQtPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnNl
dFNjcm9sbFRvcChpbnQgbmV3VG9wKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmQgPSBy
ZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3goKSkKICAgICAg
ICAgcmVuZC0+c2V0U2Nyb2xsVG9wKHN0YXRpY19jYXN0PGludD4obmV3VG9wICogcmVuZC0+c3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiB9CiAKIGludCBFbGVtZW50OjpzY3JvbGxXaWR0aCgp
CiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJl
bmRlckJveCogcmVuZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZXR1cm4gYWRqdXN0Rm9yQWJz
b2x1dGVab29tKHJlbmQtPnNjcm9sbFdpZHRoKCksIHJlbmQpOwogICAgIHJldHVybiAwOwogfQpA
QCAtNDA5LDcgKzQwOSw3IEBAIGludCBFbGVtZW50OjpzY3JvbGxXaWR0aCgpCiBpbnQgRWxlbWVu
dDo6c2Nyb2xsSGVpZ2h0KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kID0gcmVuZGVy
ZXIoKSkKKyAgICBpZiAoUmVuZGVyQm94KiByZW5kID0gcmVuZGVyQm94KCkpCiAgICAgICAgIHJl
dHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20ocmVuZC0+c2Nyb2xsSGVpZ2h0KCksIHJlbmQpOwog
ICAgIHJldHVybiAwOwogfQpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9kb20v
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3NiwxNCArNTc2LDE3IEBAIGJvb2wgTm9kZTo6
c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdAogICAgIHJldHVybiBpc0NvbnRlbnRFZGl0YWJs
ZSgpOwogfQogCitSZW5kZXJCb3gqIE5vZGU6OnJlbmRlckJveCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFtX3JlbmRlcmVyIHx8IG1fcmVuZGVyZXItPmlzQm94KCkpOworICAgIHJldHVybiBtX3Jl
bmRlcmVyICYmIG1fcmVuZGVyZXItPmlzQm94KCkgPyBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJC
b3gqIGNvbnN0PihtX3JlbmRlcmVyKSA6IDA7Cit9CisKIEludFJlY3QgTm9kZTo6Z2V0UmVjdCgp
IGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMKLSAgICBpZiAo
cmVuZGVyZXIoKSkgewotICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHJlbmRlcmVyKCktPmxv
Y2FsVG9BYnNvbHV0ZSgpOwotICAgICAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQo
YWJzUG9zKSwKLSAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZShyZW5kZXJlcigpLT53aWR0
aCgpLCByZW5kZXJlcigpLT5oZWlnaHQoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCkg
KyByZW5kZXJlcigpLT5ib3JkZXJCb3R0b21FeHRyYSgpKSk7Ci0gICAgfQorICAgIGlmIChyZW5k
ZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJl
Y3QoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA0MDA3NSkKKysr
IFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBjbGFz
cyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBR
dWFsaWZpZWROYW1lOwogY2xhc3MgUmVuZGVyQXJlbmE7CitjbGFzcyBSZW5kZXJCb3g7CiBjbGFz
cyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFN0cmluZ0J1aWxkZXI7
CkBAIC0zNzQsNiArMzc1LDEwIEBAIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3QqIHByZXZpb3Vz
UmVuZGVyZXIoKTsKICAgICB2b2lkIHNldFJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
IHsgbV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9CiAgICAgCisgICAgLy8gVXNlIHdpdGggY2F1dGlv
bi4gRG9lcyBubyB0eXBlIGNoZWNraW5nLiAgTW9zdGx5IGEgY29udmVuaWVuY2UgbWV0aG9kIGZv
ciBzaGFkb3cgbm9kZXMgb2YgZm9ybSBjb250cm9scywgd2hlcmUgd2Uga25vdyBleGFjdGx5Cisg
ICAgLy8gd2hhdCBraW5kIG9mIHJlbmRlcmVyIHdlIG1hZGUuCisgICAgUmVuZGVyQm94KiByZW5k
ZXJCb3goKSBjb25zdDsKKyAgICAKICAgICB2b2lkIGNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21p
Y1N0cmluZyYgcHJlZml4LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRP
Zihjb25zdCBOb2RlKikgY29uc3Q7CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBOb2RlKikgY29u
c3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vUG9zaXRpb24uY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHN0YXRpYyBib29sIGVu
ZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIC8vIFRoZXJlIGlzIGEgVmlzaWJsZVBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBpbmxpbmUt
YmxvY2sgY29udGFpbmVyLgotICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2Vk
KCkgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhub2RlKSAmJiBub2RlLT5yZW5kZXJlcigp
LT5oZWlnaHQoKSAhPSAwICYmICFub2RlLT5maXJzdENoaWxkKCk7CisgICAgcmV0dXJuIG5vZGUt
PnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG5v
ZGUpICYmIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG5vZGUtPnJlbmRlcmVyKCkpLT5oZWlnaHQo
KSAhPSAwICYmICFub2RlLT5maXJzdENoaWxkKCk7CiB9CiAKIHN0YXRpYyBOb2RlKiBlbmNsb3Np
bmdWaXN1YWxCb3VuZGFyeShOb2RlKiBub2RlKQpAQCAtNTM2LDkgKzUzNiwxMSBAQCBib29sIFBv
c2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0RlCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBz
dG9wID0gcmVuZGVyZXItPm5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOwogICAgIGZvciAo
UmVuZGVyT2JqZWN0ICpvID0gcmVuZGVyZXItPmZpcnN0Q2hpbGQoKTsgbyAmJiBvICE9IHN0b3A7
IG8gPSBvLT5uZXh0SW5QcmVPcmRlcigpKQotICAgICAgICBpZiAoby0+ZWxlbWVudCgpICYmIG8t
PmhlaWdodCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAKKyAgICAg
ICAgaWYgKG8tPmVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKChvLT5pc1RleHQoKSAmJiBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obyktPmJvdW5kaW5nQm94SGVpZ2h0KCkpIHx8CisgICAg
ICAgICAgICAgICAgKG8tPmlzQm94KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obyktPmhl
aWdodCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIApAQCAtNTY5LDcgKzU3MSw3IEBAIGJvb2wgUG9zaXRpb246OmlzQ2Fu
ZGlkYXRlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIChvZmZzZXQoKSA9PSAwIHx8IG9mZnNldCgp
ID09IG1heERlZXBPZmZzZXQobm9kZSgpKSkgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUo
KS0+cGFyZW50KCkpOwogCiAgICAgaWYgKCFub2RlKCktPmhhc1RhZ05hbWUoaHRtbFRhZykgJiYg
cmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgIWhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2Vu
ZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSAmJgotICAgICAgIChyZW5kZXJlci0+aGVpZ2h0KCkg
fHwgbm9kZSgpLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkKKyAgICAgICAoc3RhdGljX2Nhc3Q8UmVu
ZGVyQm94Kj4ocmVuZGVyZXIpLT5oZWlnaHQoKSB8fCBub2RlKCktPmhhc1RhZ05hbWUoYm9keVRh
ZykpKQogICAgICAgICByZXR1cm4gb2Zmc2V0KCkgPT0gMCAmJiAhbm9kZUlzVXNlclNlbGVjdE5v
bmUobm9kZSgpKTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2RvbS9Q
b3NpdGlvbkl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0
ZXJhdG9yLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlBvc2l0
aW9uSXRlcmF0b3IuaCIKIAogI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE1MSw3ICsxNTEsNyBAQCBib29sIFBvc2l0aW9u
SXRlcmF0b3I6OmlzQ2FuZGlkYXRlKCkgY29uCiAgICAgICAgIHJldHVybiAoYXRTdGFydE9mTm9k
ZSgpIHx8IGF0RW5kT2ZOb2RlKCkpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUo
bV9wYXJlbnQtPnBhcmVudCgpKTsKIAogICAgIGlmICghbV9wYXJlbnQtPmhhc1RhZ05hbWUoaHRt
bFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgIVBvc2l0aW9uOjpoYXNSZW5kZXJl
ZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChyZW5kZXJlcikgJiYKLSAgICAgICAo
cmVuZGVyZXItPmhlaWdodCgpIHx8IG1fcGFyZW50LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkKKyAg
ICAgICAoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihyZW5kZXJlciktPmhlaWdodCgpIHx8IG1f
cGFyZW50LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkKICAgICAgICAgcmV0dXJuIGF0U3RhcnRPZk5v
ZGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fcGFyZW50KTsKICAgICAK
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUg
IlJlbW92ZU5vZGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQuaCIKICNpbmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIgorI2lu
Y2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQu
aCIKICNpbmNsdWRlICJTcGxpdEVsZW1lbnRDb21tYW5kLmgiCiAjaW5jbHVkZSAiU3BsaXRUZXh0
Tm9kZUNvbW1hbmQuaCIKQEAgLTU5MCw3ICs1OTEsOCBAQCBQYXNzUmVmUHRyPE5vZGU+IENvbXBv
c2l0ZUVkaXRDb21tYW5kOjphCiAgICAgCiAgICAgLy8gYXBwZW5kIHRoZSBwbGFjZWhvbGRlciB0
byBtYWtlIHN1cmUgaXQgZm9sbG93cwogICAgIC8vIGFueSB1bnJlbmRlcmVkIGJsb2NrcwotICAg
IGlmIChyZW5kZXJlci0+aGVpZ2h0KCkgPT0gMCB8fCAocmVuZGVyZXItPmlzTGlzdEl0ZW0oKSAm
JiByZW5kZXJlci0+aXNFbXB0eSgpKSkKKyAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJCbG9jayo+KHJlbmRlcmVyKTsKKyAgICBpZiAoYmxvY2stPmhlaWdodCgpID09
IDAgfHwgKGJsb2NrLT5pc0xpc3RJdGVtKCkgJiYgYmxvY2stPmlzRW1wdHkoKSkpCiAgICAgICAg
IHJldHVybiBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKGNvbnRhaW5lcik7CiAKICAgICByZXR1cm4g
MDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAiTm9kZS5oIgog
I2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZUNvbW1hbmQuaCIKLSNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJT
ZWxlY3Rpb25Db250cm9sbGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcxLDcgKzcx
LDExIEBAIHN0YXRpYyBib29sIGlzRGVsZXRhYmxlRWxlbWVudChjb25zdCBOb2QKICAgICBjb25z
dCB1bnNpZ25lZCBtaW5pbXVtVmlzaWJsZUJvcmRlcnMgPSAzOwogCiAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCByZW5k
ZXJlci0+d2lkdGgoKSA8IG1pbmltdW1XaWR0aCB8fCByZW5kZXJlci0+aGVpZ2h0KCkgPCBtaW5p
bXVtSGVpZ2h0KQorICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJl
bmRlckJveCo+KHJlbmRlcmVyKTsKKyAgICBpZiAoYm94LT53aWR0aCgpIDwgbWluaW11bVdpZHRo
IHx8IGJveC0+aGVpZ2h0KCkgPCBtaW5pbXVtSGVpZ2h0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAocmVuZGVyZXItPmlzVGFibGUoKSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5o
IgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiVGV4dC5o
IgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgpAQCAtMzU3LDcgKzM1OCw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSgKICAgICAgICAgLy8gbWFrZSBzdXJlIGVt
cHR5IGNlbGwgaGFzIHNvbWUgaGVpZ2h0CiAgICAgICAgIHVwZGF0ZUxheW91dCgpOwogICAgICAg
ICBSZW5kZXJPYmplY3QgKnIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAociAmJiBy
LT5pc1RhYmxlQ2VsbCgpICYmIHItPmNvbnRlbnRIZWlnaHQoKSA8PSAwKQorICAgICAgICBpZiAo
ciAmJiByLT5pc1RhYmxlQ2VsbCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ2VsbCo+KHIp
LT5jb250ZW50SGVpZ2h0KCkgPD0gMCkKICAgICAgICAgICAgIGluc2VydEJsb2NrUGxhY2Vob2xk
ZXIoUG9zaXRpb24obm9kZSwwKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA3MSw3ICsyMDcxLDcgQEAgYm9vbCBFZGl0b3I6Omluc2lkZVZp
c2libGVBcmVhKGNvbnN0IEludAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEludFJlY3Qg
cmVjdEluUGFnZUNvb3JkcyA9IGNvbnRhaW5lci0+Z2V0T3ZlcmZsb3dDbGlwUmVjdCgwLCAwKTsK
LSAgICBJbnRSZWN0IHJlY3RJbkZyYW1lQ29vcmRzID0gSW50UmVjdChyZW5kZXJlci0+eFBvcygp
ICogLTEsIHJlbmRlcmVyLT55UG9zKCkgKiAtMSwKKyAgICBJbnRSZWN0IHJlY3RJbkZyYW1lQ29v
cmRzID0gSW50UmVjdChyZW5kZXJlci0+eCgpICogLTEsIHJlbmRlcmVyLT55KCkgKiAtMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RJblBhZ2VDb29yZHMud2lkdGgo
KSwgcmVjdEluUGFnZUNvb3Jkcy5oZWlnaHQoKSk7CiAKICAgICByZXR1cm4gcmVjdEluRnJhbWVD
b29yZHMuY29udGFpbnMocG9pbnQpOwpAQCAtMjA5Nyw3ICsyMDk3LDcgQEAgYm9vbCBFZGl0b3I6
Omluc2lkZVZpc2libGVBcmVhKFJhbmdlKiByYQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IEludFJlY3QgcmVjdEluUGFnZUNvb3JkcyA9IGNvbnRhaW5lci0+Z2V0T3ZlcmZsb3dDbGlwUmVj
dCgwLCAwKTsKLSAgICBJbnRSZWN0IHJlY3RJbkZyYW1lQ29vcmRzID0gSW50UmVjdChyZW5kZXJl
ci0+eFBvcygpICogLTEsIHJlbmRlcmVyLT55UG9zKCkgKiAtMSwKKyAgICBJbnRSZWN0IHJlY3RJ
bkZyYW1lQ29vcmRzID0gSW50UmVjdChyZW5kZXJlci0+eCgpICogLTEsIHJlbmRlcmVyLT55KCkg
KiAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RJblBhZ2VDb29y
ZHMud2lkdGgoKSwgcmVjdEluUGFnZUNvb3Jkcy5oZWlnaHQoKSk7CiAgICAgSW50UmVjdCByZXN1
bHRSZWN0ID0gcmFuZ2UtPmJvdW5kaW5nQm94KCk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDE0ICsyMjUsMTQgQEAgc3RhdGljIGlu
dCB2ZXJ0aWNhbFNjcm9sbERpc3RhbmNlKEZyYW1lKgogICAgIGlmICghZm9jdXNlZE5vZGUpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBmb2N1c2VkTm9k
ZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQorICAgIGlmICghcmVuZGVyZXIgfHwg
IXJlbmRlcmVyLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1
cm4gMDsKICAgICBpZiAoIShzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCB8fCBzdHlsZS0+
b3ZlcmZsb3dZKCkgPT0gT0FVVE8gfHwgcmVuZGVyZXItPmlzVGV4dEFyZWEoKSkpCiAgICAgICAg
IHJldHVybiAwOwotICAgIGludCBoZWlnaHQgPSByZW5kZXJlci0+Y2xpZW50SGVpZ2h0KCk7Cisg
ICAgaW50IGhlaWdodCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmRlcmVyKS0+Y2xpZW50
SGVpZ2h0KCk7CiAgICAgcmV0dXJuIG1heCgoaGVpZ2h0ICsgMSkgLyAyLCBoZWlnaHQgLSBjQW1v
dW50VG9LZWVwV2hlblBhZ2luZyk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTMgKzEwNywxNiBAQCBib29sIEhUTUxBbmNob3JF
bGVtZW50Ojppc0tleWJvYXJkRm9jdXNhCiAgICAgaWYgKCFkb2N1bWVudCgpLT5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+dGFic1RvTGlua3MoZXZlbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoIXJlbmRlcmVyKCkpCisgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJl
cigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gQmVmb3Jl
IGNhbGxpbmcgYWJzb2x1dGVSZWN0cywgY2hlY2sgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSB0
aGUgcmVuZGVyZXIKICAgICAvLyBvciBvbmUgb2YgdGhlIGNvbnRpbnVhdGlvbnMgaXMgbm9uLWVt
cHR5LCBzaW5jZSB0aGlzIGlzIGEgZmFzdGVyIGNoZWNrIGFuZAogICAgIC8vIGFsbW9zdCBhbHdh
eXMgcmV0dXJucyB0cnVlLgotICAgIGZvciAoUmVuZGVyT2JqZWN0KiByID0gcmVuZGVyZXIoKTsg
cjsgciA9IHItPnZpcnR1YWxDb250aW51YXRpb24oKSkKKyAgICBSZW5kZXJCb3gqIGJveCA9IHN0
YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmRlcmVyKCkpOworICAgIGlmIChib3gtPndpZHRoKCkg
PiAwICYmIGJveC0+aGVpZ2h0KCkgPiAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBmb3Ig
KFJlbmRlckZsb3cqIHIgPSBib3gtPnZpcnR1YWxDb250aW51YXRpb24oKTsgcjsgciA9IHItPmNv
bnRpbnVhdGlvbigpKQogICAgICAgICBpZiAoci0+d2lkdGgoKSA+IDAgJiYgci0+aGVpZ2h0KCkg
PiAwKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsOCArMTU1LDggQEAgdm9pZCBIVE1MQ2Fu
dmFzRWxlbWVudDo6d2lsbERyYXcoY29uc3QgRgogewogICAgIG1faW1hZ2VCdWZmZXItPmNsZWFy
SW1hZ2UoKTsKICAgICAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBybyA9IHJlbmRlcmVyKCkpIHsK
LSAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gcm8tPmNvbnRlbnRCb3goKTsKKyAgICBpZiAo
UmVuZGVyQm94KiBybyA9IHJlbmRlckJveCgpKSB7CisgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVj
dCA9IHJvLT5jb250ZW50Qm94UmVjdCgpOwogICAgICAgICBGbG9hdFJlY3QgciA9IG1hcFJlY3Qo
cmVjdCwgRmxvYXRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpLCBk
ZXN0UmVjdCk7CiAgICAgICAgIHIuaW50ZXJzZWN0KGRlc3RSZWN0KTsKICAgICAgICAgaWYgKG1f
ZGlydHlSZWN0LmNvbnRhaW5zKHIpKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksNyBAQCBib29sIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxlCiB7CiAgICAgaWYgKGRpc2FibGVkKCkg
fHwgIXJlbmRlcmVyKCkgfHwgCiAgICAgICAgIChyZW5kZXJlcigpLT5zdHlsZSgpICYmIHJlbmRl
cmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB8fCAKLSAgICAgICAgcmVu
ZGVyZXIoKS0+d2lkdGgoKSA9PSAwIHx8IHJlbmRlcmVyKCktPmhlaWdodCgpID09IDApCisgICAg
ICAgICFyZW5kZXJlcigpLT5pc0JveCgpIHx8IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmRl
cmVyKCkpLT53aWR0aCgpID09IDAgfHwgc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocmVuZGVyZXIo
KSktPmhlaWdodCgpID09IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkocmV2aXNpb24g
NDAwNzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTEsNyArMzExLDcgQEAgaW50IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjp3aWR0
aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIGRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiByZW5kZXJlcigp
LT53aWR0aCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihyZW5kZXJlcigp
KS0+d2lkdGgoKTsKIH0KIAogaW50IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpoZWlnaHQoKSBjb25z
dApAQCAtMzIwLDcgKzMyMCw3IEBAIGludCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6aGVpZ2h0KCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCktPmhl
aWdodCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihyZW5kZXJlcigpKS0+
aGVpZ2h0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElt
YWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgaW50IEhUTUxJ
bWFnZUVsZW1lbnQ6OndpZHRoKGJvb2wgaWdub3JlUAogICAgIGVsc2UKICAgICAgICAgZG9jdW1l
bnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKLSAgICByZXR1cm4gcmVuZGVyZXIoKSA/IHJlbmRlcmVy
KCktPmNvbnRlbnRXaWR0aCgpIDogMDsKKyAgICByZXR1cm4gcmVuZGVyQm94KCkgPyByZW5kZXJC
b3goKS0+Y29udGVudFdpZHRoKCkgOiAwOwogfQogCiBpbnQgSFRNTEltYWdlRWxlbWVudDo6aGVp
Z2h0KGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKSBjb25zdApAQCAtMjUwLDcgKzI1MCw3
IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQoYm9vbCBpZ25vcmUKICAgICBlbHNlCiAg
ICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogCi0gICAgcmV0dXJuIHJlbmRlcmVy
KCkgPyByZW5kZXJlcigpLT5jb250ZW50SGVpZ2h0KCkgOiAwOworICAgIHJldHVybiByZW5kZXJC
b3goKSA/IHJlbmRlckJveCgpLT5jb250ZW50SGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgSFRNTElt
YWdlRWxlbWVudDo6bmF0dXJhbFdpZHRoKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYwLDEy
ICsyNzYwLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd05vZGVIaWdobGkKICAg
ICBpZiAoIW1faGlnaGxpZ2h0ZWROb2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gbV9oaWdobGlnaHRlZE5vZGUtPnJlbmRlcmVyKCk7CisgICAgUmVu
ZGVyQm94KiByZW5kZXJlciA9IG1faGlnaGxpZ2h0ZWROb2RlLT5yZW5kZXJCb3goKTsKICAgICBG
cmFtZSogY29udGFpbmluZ0ZyYW1lID0gbV9oaWdobGlnaHRlZE5vZGUtPmRvY3VtZW50KCktPmZy
YW1lKCk7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhY29udGFpbmluZ0ZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSByZW5kZXJlci0+Y29udGVudEJveCgp
OworICAgIEludFJlY3QgY29udGVudEJveCA9IHJlbmRlcmVyLT5jb250ZW50Qm94UmVjdCgpOwog
CiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhZGQgbWV0aG9kcyB0byBSZW5kZXJPYmplY3QgdG8g
b2J0YWluIHRoZXNlIHJlY3RzPwogICAgIEludFJlY3QgcGFkZGluZ0JveChjb250ZW50Qm94Lngo
KSAtIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLCBjb250ZW50Qm94LnkoKSAtIHJlbmRlcmVyLT5w
YWRkaW5nVG9wKCksCkluZGV4OiBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3NywxMiArMTE3NywxMiBAQCBib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liCiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIC8vIGNoZWNrIGZvciBvbmUtZGltZW5zaW9uYWwgaW1hZ2UKLSAgICAgICAgaWYg
KG1fcmVuZGVyZXItPmhlaWdodCgpIDw9IDEgfHwgbV9yZW5kZXJlci0+d2lkdGgoKSA8PSAxKQor
ICAgICAgICBSZW5kZXJJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KG1f
cmVuZGVyZXIpOworICAgICAgICBpZiAoaW1hZ2UtPmhlaWdodCgpIDw9IDEgfHwgaW1hZ2UtPndp
ZHRoKCkgPD0gMSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICAgICAg
Ly8gY2hlY2sgd2hldGhlciByZW5kZXJlZCBpbWFnZSB3YXMgc3RyZXRjaGVkIGZyb20gb25lLWRp
bWVuc2lvbmFsIGZpbGUgaW1hZ2UKICAgICAgICAgaWYgKGlzTmF0aXZlSW1hZ2UoKSkgewotICAg
ICAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPiht
X3JlbmRlcmVyKTsKICAgICAgICAgICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkgewogICAg
ICAgICAgICAgICAgIEludFNpemUgaW1hZ2VTaXplID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmlt
YWdlU2l6ZShpbWFnZS0+dmlldygpLT56b29tRmFjdG9yKCkpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBpbWFnZVNpemUuaGVpZ2h0KCkgPD0gMSB8fCBpbWFnZVNpemUud2lkdGgoKSA8PSAxOwpJ
bmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCwxMiArMjg4LDEyIEBAIFBhc3NSZWZQdHI8
U2Nyb2xsYmFyPiBGcmFtZVZpZXc6OmNyZWF0ZVMKICAgICAvLyBUcnkgdGhlIDxib2R5PiBlbGVt
ZW50IGZpcnN0IGFzIGEgc2Nyb2xsYmFyIHNvdXJjZS4KICAgICBFbGVtZW50KiBib2R5ID0gZG9j
LT5ib2R5KCk7CiAgICAgaWYgKGJvZHkgJiYgYm9keS0+cmVuZGVyZXIoKSAmJiBib2R5LT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0NST0xMQkFSKSkK
LSAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRo
aXMsIG9yaWVudGF0aW9uLCBib2R5LT5yZW5kZXJlcigpKTsKKyAgICAgICAgcmV0dXJuIFJlbmRl
clNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBib2R5
LT5yZW5kZXJCb3goKSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIDxib2R5PiBkaWRuJ3QgaGF2ZSBh
IGN1c3RvbSBzdHlsZSwgdGhlbiB0aGUgcm9vdCBlbGVtZW50IG1pZ2h0LgogICAgIEVsZW1lbnQq
IGRvY0VsZW1lbnQgPSBkb2MtPmRvY3VtZW50RWxlbWVudCgpOwogICAgIGlmIChkb2NFbGVtZW50
ICYmIGRvY0VsZW1lbnQtPnJlbmRlcmVyKCkgJiYgZG9jRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+aGFzUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNDUk9MTEJBUikpCi0gICAgICAgIHJl
dHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcih0aGlzLCBvcmllbnRh
dGlvbiwgZG9jRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgICAgIHJldHVybiBSZW5kZXJTY3Jv
bGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgZG9jRWxlbWVu
dC0+cmVuZGVyQm94KCkpOwogICAgICAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGFuIG93bmluZyBp
ZnJhbWUvZnJhbWUgZWxlbWVudCwgdGhlbiBpdCBjYW4gc2V0IHRoZSBjdXN0b20gc2Nyb2xsYmFy
IGFsc28uCiAgICAgUmVuZGVyUGFydCogZnJhbWVSZW5kZXJlciA9IG1fZnJhbWUtPm93bmVyUmVu
ZGVyZXIoKTsKQEAgLTEwOTUsNyArMTA5NSw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVEYXNo
Ym9hcmRSZWdpb25zKCkKICAgICBpZiAoIWRvY3VtZW50LT5oYXNEYXNoYm9hcmRSZWdpb25zKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8RGFzaGJvYXJkUmVnaW9uVmFsdWU+IG5ld1Jl
Z2lvbnM7Ci0gICAgZG9jdW1lbnQtPnJlbmRlcmVyKCktPmNvbGxlY3REYXNoYm9hcmRSZWdpb25z
KG5ld1JlZ2lvbnMpOworICAgIGRvY3VtZW50LT5yZW5kZXJCb3goKS0+Y29sbGVjdERhc2hib2Fy
ZFJlZ2lvbnMobmV3UmVnaW9ucyk7CiAgICAgaWYgKG5ld1JlZ2lvbnMgPT0gZG9jdW1lbnQtPmRh
c2hib2FyZFJlZ2lvbnMoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGRvY3VtZW50LT5zZXREYXNo
Ym9hcmRSZWdpb25zKG5ld1JlZ2lvbnMpOwpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9B
bmltYXRpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkJhc2UuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRp
b24vQW5pbWF0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBz
dGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGCiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICAvLyBDb252ZXJ0IHRoZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGludG8g
bWF0cmljZXMKLSAgICAgICAgSW50U2l6ZSBzaXplID0gYW5pbS0+cmVuZGVyZXIoKS0+Ym9yZGVy
Qm94KCkuc2l6ZSgpOworICAgICAgICBJbnRTaXplIHNpemUgPSBhbmltLT5yZW5kZXJlcigpLT5p
c0JveCgpID8gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4oYW5pbS0+cmVuZGVyZXIoKSktPmJvcmRl
ckJveFJlY3QoKS5zaXplKCkgOiBJbnRTaXplKCk7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGZyb21UOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1Q7CiAgICAgICAgIGZy
b20uYXBwbHkoc2l6ZSwgZnJvbVQpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5j
cHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBJbnRSZWN0IEhpdFRlc3RSZXN1
bHQ6OmltYWdlUmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFpbWFnZSgpKQogICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwotICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+cmVuZGVyZXIo
KS0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2Rl
LT5yZW5kZXJCb3goKS0+YWJzb2x1dGVDb250ZW50Qm94KCk7CiB9CiAKIEtVUkwgSGl0VGVzdFJl
c3VsdDo6YWJzb2x1dGVJbWFnZVVSTCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5j
cHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQu
aCIKICNpbmNsdWRlICJJbmxpbmVGbG93Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIK
KyNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC04NCw2ICs4NSwxMiBAQCB2b2lkIElubGluZUJveDo6c2hv
d1RyZWVGb3JUaGlzKCkgY29uc3QKIH0KICNlbmRpZgogCitSZW5kZXJCb3gqIElubGluZUJveDo6
cmVuZGVyQm94KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9vYmplY3QtPmlzQm94KCkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihtX29iamVjdCk7Cit9CisKIGludCBJbmxp
bmVCb3g6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QgCiB7IAogICAgIHJldHVybiBtX29iamVjdC0+
Y2FyZXRNaW5PZmZzZXQoKTsgCkBAIC0xMjksOCArMTM2LDEwIEBAIHZvaWQgSW5saW5lQm94Ojph
ZGp1c3RQb3NpdGlvbihpbnQgZHgsIGkKIHsKICAgICBtX3ggKz0gZHg7CiAgICAgbV95ICs9IGR5
OwotICAgIGlmIChtX29iamVjdC0+aXNSZXBsYWNlZCgpIHx8IG1fb2JqZWN0LT5pc0JSKCkpCi0g
ICAgICAgIG1fb2JqZWN0LT5zZXRQb3MobV9vYmplY3QtPnhQb3MoKSArIGR4LCBtX29iamVjdC0+
eVBvcygpICsgZHkpOworICAgIGlmIChtX29iamVjdC0+aXNSZXBsYWNlZCgpKSB7CisgICAgICAg
IFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obV9vYmplY3QpOworICAg
ICAgICBib3gtPm1vdmUoZHgsIGR5KTsKKyAgICB9CiB9CiAKIHZvaWQgSW5saW5lQm94OjpwYWlu
dChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CitjbGFzcyBSZW5kZXJCb3g7CiBj
bGFzcyBSb290SW5saW5lQm94OwogCiBzdHJ1Y3QgSGl0VGVzdFJlcXVlc3Q7CkBAIC0yMzksNiAr
MjQwLDkgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgdmlzaWJsZVRvSGl0VGVzdGluZygpIGNv
bnN0IHsgcmV0dXJuIG9iamVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAm
JiBvYmplY3QoKS0+c3R5bGUoKS0+cG9pbnRlckV2ZW50cygpICE9IFBFX05PTkU7IH0KICAgICAK
KyAgICAvLyBVc2Ugd2l0aCBjYXV0aW9uISBUaGUgdHlwZSBpcyBub3QgY2hlY2tlZCEKKyAgICBS
ZW5kZXJCb3gqIHJlbmRlckJveCgpIGNvbnN0OworCiBwdWJsaWM6CiAgICAgUmVuZGVyT2JqZWN0
KiBtX29iamVjdDsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlz
aW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyNSw3ICszMjUsNyBAQCBpbnQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hl
c0hvcml6b250YWxsCiAgICAgICAgICAgICAgICAgICAgIC8vIE91ciBvZmZzZXQgdGhhdCB3ZSBj
YWNoZSBuZWVkcyB0byBiZSBmcm9tIHRoZSBlZGdlIG9mIHRoZSByaWdodCBib3JkZXIgYm94IGFu
ZAogICAgICAgICAgICAgICAgICAgICAvLyBub3QgdGhlIGxlZnQgYm9yZGVyIGJveC4gIFdlIGhh
dmUgdG8gc3VidHJhY3QgfHh8IGZyb20gdGhlIHdpZHRoIG9mIHRoZSBibG9jawogICAgICAgICAg
ICAgICAgICAgICAvLyAod2hpY2ggY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIHJvb3QgbGluZSBi
b3gpLgotICAgICAgICAgICAgICAgICAgICBjdXJyLT5zZXRYUG9zKHJvb3QoKS0+b2JqZWN0KCkt
PndpZHRoKCkteCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnItPnNldFhQb3Mocm9vdCgpLT5i
bG9jaygpLT53aWR0aCgpLXgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgcG9z
aXRpb25lZCBvYmplY3QgaGFzIG5vIGVmZmVjdCBvbiB0aGUgd2lkdGguCiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoY3Vyci0+b2JqZWN0KCktPmlzSW5saW5lRmxvdygpKSB7CkBAIC0z
NDEsOCArMzQxLDggQEAgaW50IElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbAog
ICAgICAgICAgICAgfSBlbHNlIGlmICghY3Vyci0+b2JqZWN0KCktPmlzQ29tcGFjdCgpICYmICgh
Y3Vyci0+b2JqZWN0KCktPmlzTGlzdE1hcmtlcigpIHx8IHN0YXRpY19jYXN0PFJlbmRlckxpc3RN
YXJrZXIqPihjdXJyLT5vYmplY3QoKSktPmlzSW5zaWRlKCkpKSB7CiAgICAgICAgICAgICAgICAg
eCArPSBjdXJyLT5vYmplY3QoKS0+bWFyZ2luTGVmdCgpOwogICAgICAgICAgICAgICAgIGN1cnIt
PnNldFhQb3MoeCk7Ci0gICAgICAgICAgICAgICAgbGVmdFBvc2l0aW9uID0gbWluKHggKyBjdXJy
LT5vYmplY3QoKS0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSwgbGVmdFBvc2l0aW9uKTsKLSAgICAgICAg
ICAgICAgICByaWdodFBvc2l0aW9uID0gbWF4KHggKyBjdXJyLT5vYmplY3QoKS0+b3ZlcmZsb3dX
aWR0aChmYWxzZSksIHJpZ2h0UG9zaXRpb24pOworICAgICAgICAgICAgICAgIGxlZnRQb3NpdGlv
biA9IG1pbih4ICsgY3Vyci0+cmVuZGVyQm94KCktPm92ZXJmbG93TGVmdChmYWxzZSksIGxlZnRQ
b3NpdGlvbik7CisgICAgICAgICAgICAgICAgcmlnaHRQb3NpdGlvbiA9IG1heCh4ICsgY3Vyci0+
cmVuZGVyQm94KCktPm92ZXJmbG93V2lkdGgoZmFsc2UpLCByaWdodFBvc2l0aW9uKTsKICAgICAg
ICAgICAgICAgICB4ICs9IGN1cnItPndpZHRoKCkgKyBjdXJyLT5vYmplY3QoKS0+bWFyZ2luUmln
aHQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzU1LDcgKzM1NSw3IEBAIGludCBJ
bmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGwKICAgICByZXR1cm4geDsKIH0KIAot
dm9pZCBJbmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxv
Y2spCitpbnQgSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMoaW50IGhlaWdodE9m
QmxvY2spCiB7CiAgICAgaW50IG1heFBvc2l0aW9uVG9wID0gMDsKICAgICBpbnQgbWF4UG9zaXRp
b25Cb3R0b20gPSAwOwpAQCAtMzg5LDYgKzM4OSw4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6dmVy
dGljYWxseUFsaWduQm94ZXMKICAgICAgICAgc2hyaW5rQm94ZXNXaXRoTm9UZXh0Q2hpbGRyZW4o
dG9wUG9zaXRpb24sIGJvdHRvbVBvc2l0aW9uKTsKICAgICAKICAgICBoZWlnaHRPZkJsb2NrICs9
IG1heEhlaWdodDsKKyAgICAKKyAgICByZXR1cm4gaGVpZ2h0T2ZCbG9jazsKIH0KIAogdm9pZCBJ
bmxpbmVGbG93Qm94OjphZGp1c3RNYXhBc2NlbnRBbmREZXNjZW50KGludCYgbWF4QXNjZW50LCBp
bnQmIG1heERlc2NlbnQsCkBAIC01MjIsOCArNTI0LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpw
bGFjZUJveGVzVmVydGljYWxseQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY3Vy
ci0+b2JqZWN0KCktPmhhc1JlZmxlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIG92ZXJmbG93
VG9wID0gbWluKG92ZXJmbG93VG9wLCBjdXJyLT5vYmplY3QoKS0+cmVmbGVjdGlvbkJveCgpLnko
KSk7Ci0gICAgICAgICAgICAgICAgb3ZlcmZsb3dCb3R0b20gPSBtYXgob3ZlcmZsb3dCb3R0b20s
IGN1cnItPm9iamVjdCgpLT5yZWZsZWN0aW9uQm94KCkuYm90dG9tKCkpOworICAgICAgICAgICAg
ICAgIG92ZXJmbG93VG9wID0gbWluKG92ZXJmbG93VG9wLCBjdXJyLT5yZW5kZXJCb3goKS0+cmVm
bGVjdGlvbkJveCgpLnkoKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3dCb3R0b20gPSBtYXgo
b3ZlcmZsb3dCb3R0b20sIGN1cnItPnJlbmRlckJveCgpLT5yZWZsZWN0aW9uQm94KCkuYm90dG9t
KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVGbG93
Qm94KCkpIHsKQEAgLTUzNSw4ICs1MzcsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94
ZXNWZXJ0aWNhbGx5CiAgICAgICAgIH0gZWxzZSBpZiAoIWN1cnItPm9iamVjdCgpLT5pc0JSKCkp
IHsKICAgICAgICAgICAgIG5ld1kgKz0gY3Vyci0+b2JqZWN0KCktPm1hcmdpblRvcCgpOwogICAg
ICAgICAgICAgbmV3SGVpZ2h0ID0gY3Vyci0+aGVpZ2h0KCkgLSAoY3Vyci0+b2JqZWN0KCktPm1h
cmdpblRvcCgpICsgY3Vyci0+b2JqZWN0KCktPm1hcmdpbkJvdHRvbSgpKTsKLSAgICAgICAgICAg
IG92ZXJmbG93VG9wID0gY3Vyci0+b2JqZWN0KCktPm92ZXJmbG93VG9wKGZhbHNlKTsKLSAgICAg
ICAgICAgIG92ZXJmbG93Qm90dG9tID0gY3Vyci0+b2JqZWN0KCktPm92ZXJmbG93SGVpZ2h0KGZh
bHNlKSAtIG5ld0hlaWdodDsKKyAgICAgICAgICAgIG92ZXJmbG93VG9wID0gY3Vyci0+cmVuZGVy
Qm94KCktPm92ZXJmbG93VG9wKGZhbHNlKTsKKyAgICAgICAgICAgIG92ZXJmbG93Qm90dG9tID0g
Y3Vyci0+cmVuZGVyQm94KCktPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSAtIG5ld0hlaWdodDsKICAg
ICAgICAgfQogCiAgICAgICAgIGN1cnItPnNldFlQb3MobmV3WSk7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoK
ICAgICBpbnQgZ2V0Rmxvd1NwYWNpbmdXaWR0aCgpOwogICAgIGJvb2wgb25FbmRDaGFpbihSZW5k
ZXJPYmplY3QqIGVuZE9iamVjdCk7CiAgICAgdmlydHVhbCBpbnQgcGxhY2VCb3hlc0hvcml6b250
YWxseShpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgYm9vbCYg
bmVlZHNXb3JkU3BhY2luZyk7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRpY2FsbHlBbGlnbkJveGVz
KGludCYgaGVpZ2h0T2ZCbG9jayk7CisgICAgdmlydHVhbCBpbnQgdmVydGljYWxseUFsaWduQm94
ZXMoaW50IGhlaWdodE9mQmxvY2spOwogICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxCb3hIZWlnaHRz
KGludCYgbWF4UG9zaXRpb25Ub3AsIGludCYgbWF4UG9zaXRpb25Cb3R0b20sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2VudCwg
Ym9vbCBzdHJpY3RNb2RlKTsKICAgICB2b2lkIGFkanVzdE1heEFzY2VudEFuZERlc2NlbnQoaW50
JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2VudCwKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckFwcGxldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXBw
bGV0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcHBs
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMCArNjYsMTAgQEAgdm9pZCBSZW5kZXJBcHBs
ZXQ6OmNyZWF0ZVdpZGdldElmTmVjZXNzYQogICAgIC8vIEluIG9yZGVyIHRvIHdvcmsgYXJvdW5k
IHRoaXMgcHJvYmxlbSBhbmQgaGF2ZSBhIGNvcnJlY3Qgc2l6ZSBmcm9tIHRoZSBzdGFydCwgd2Ug
d2lsbAogICAgIC8vIHVzZSBmaXhlZCB3aWR0aHMvaGVpZ2h0cyBmcm9tIHRoZSBzdHlsZSBzeXN0
ZW0gd2hlbiB3ZSBjYW4sIHNpbmNlIHRoZSB3aWRnZXQgbWlnaHQKICAgICAvLyBub3QgaGF2ZSBh
biBhY2N1cmF0ZSBtX3dpZHRoL21faGVpZ2h0LgotICAgIGludCB3aWR0aCA9IHN0eWxlKCktPndp
ZHRoKCkuaXNGaXhlZCgpID8gc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpIDogCi0gICAgICAgIG1f
d2lkdGggLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBh
ZGRpbmdSaWdodCgpOwotICAgIGludCBoZWlnaHQgPSBzdHlsZSgpLT5oZWlnaHQoKS5pc0ZpeGVk
KCkgPyBzdHlsZSgpLT5oZWlnaHQoKS52YWx1ZSgpIDoKLSAgICAgICAgbV9oZWlnaHQgLSBib3Jk
ZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gcGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgp
OworICAgIGludCBjb250ZW50V2lkdGggPSBzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSA/IHN0
eWxlKCktPndpZHRoKCkudmFsdWUoKSA6IAorICAgICAgICB3aWR0aCgpIC0gYm9yZGVyTGVmdCgp
IC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQoKTsKKyAgICBp
bnQgY29udGVudEhlaWdodCA9IHN0eWxlKCktPmhlaWdodCgpLmlzRml4ZWQoKSA/IHN0eWxlKCkt
PmhlaWdodCgpLnZhbHVlKCkgOgorICAgICAgICBoZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9y
ZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7CiAgICAgZm9yIChO
b2RlKiBjaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHBhcmFtVGFn
KSkgewogICAgICAgICAgICAgSFRNTFBhcmFtRWxlbWVudCogcCA9IHN0YXRpY19jYXN0PEhUTUxQ
YXJhbUVsZW1lbnQqPihjaGlsZCk7CkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgUmVuZGVyQXBwbGV0
OjpjcmVhdGVXaWRnZXRJZk5lY2Vzc2EKIAogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkt
PmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKLSAgICBzZXRXaWRnZXQoZnJhbWUtPmxvYWRl
cigpLT5jcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KEludFNpemUod2lkdGgsIGhlaWdodCksIGVsZW1l
bnQsIG1fYXJncykpOworICAgIHNldFdpZGdldChmcmFtZS0+bG9hZGVyKCktPmNyZWF0ZUphdmFB
cHBsZXRXaWRnZXQoSW50U2l6ZShjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQpLCBlbGVtZW50
LCBtX2FyZ3MpKTsKIH0KIAogdm9pZCBSZW5kZXJBcHBsZXQ6OmxheW91dCgpCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIyLDEwICs0MjIsMTAgQEAg
aW50IFJlbmRlckJsb2NrOjpvdmVyZmxvd0hlaWdodChib29sIGluYwogICAgICAgICBpbnQgc2hh
ZG93SGVpZ2h0ID0gMDsKICAgICAgICAgZm9yIChTaGFkb3dEYXRhKiBib3hTaGFkb3cgPSBzdHls
ZSgpLT5ib3hTaGFkb3coKTsgYm94U2hhZG93OyBib3hTaGFkb3cgPSBib3hTaGFkb3ctPm5leHQp
CiAgICAgICAgICAgICBzaGFkb3dIZWlnaHQgPSBtYXgoYm94U2hhZG93LT55ICsgYm94U2hhZG93
LT5ibHVyLCBzaGFkb3dIZWlnaHQpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gbV9oZWlnaHQgKyBz
aGFkb3dIZWlnaHQ7CisgICAgICAgIGludCBpbmZsYXRlZEhlaWdodCA9IGhlaWdodCgpICsgc2hh
ZG93SGVpZ2h0OwogICAgICAgICBpZiAoaGFzUmVmbGVjdGlvbigpKQotICAgICAgICAgICAgaGVp
Z2h0ID0gbWF4KGhlaWdodCwgcmVmbGVjdGlvbkJveCgpLmJvdHRvbSgpKTsKLSAgICAgICAgcmV0
dXJuIGhlaWdodDsKKyAgICAgICAgICAgIGluZmxhdGVkSGVpZ2h0ID0gbWF4KGluZmxhdGVkSGVp
Z2h0LCByZWZsZWN0aW9uQm94KCkuYm90dG9tKCkpOworICAgICAgICByZXR1cm4gaW5mbGF0ZWRI
ZWlnaHQ7CiAgICAgfQogICAgIHJldHVybiBtX292ZXJmbG93SGVpZ2h0OwogfQpAQCAtNDM2LDEw
ICs0MzYsMTAgQEAgaW50IFJlbmRlckJsb2NrOjpvdmVyZmxvd1dpZHRoKGJvb2wgaW5jbAogICAg
ICAgICBpbnQgc2hhZG93V2lkdGggPSAwOwogICAgICAgICBmb3IgKFNoYWRvd0RhdGEqIGJveFNo
YWRvdyA9IHN0eWxlKCktPmJveFNoYWRvdygpOyBib3hTaGFkb3c7IGJveFNoYWRvdyA9IGJveFNo
YWRvdy0+bmV4dCkKICAgICAgICAgICAgIHNoYWRvd1dpZHRoID0gbWF4KGJveFNoYWRvdy0+eCAr
IGJveFNoYWRvdy0+Ymx1ciwgc2hhZG93V2lkdGgpOwotICAgICAgICBpbnQgd2lkdGggPSBtX3dp
ZHRoICsgc2hhZG93V2lkdGg7CisgICAgICAgIGludCBpbmZsYXRlZFdpZHRoID0gd2lkdGgoKSAr
IHNoYWRvd1dpZHRoOwogICAgICAgICBpZiAoaGFzUmVmbGVjdGlvbigpKQotICAgICAgICAgICAg
d2lkdGggPSBtYXgod2lkdGgsIHJlZmxlY3Rpb25Cb3goKS5yaWdodCgpKTsKLSAgICAgICAgcmV0
dXJuIHdpZHRoOworICAgICAgICAgICAgaW5mbGF0ZWRXaWR0aCA9IG1heChpbmZsYXRlZFdpZHRo
LCByZWZsZWN0aW9uQm94KCkucmlnaHQoKSk7CisgICAgICAgIHJldHVybiBpbmZsYXRlZFdpZHRo
OwogICAgIH0KICAgICByZXR1cm4gbV9vdmVyZmxvd1dpZHRoOwogfQpAQCAtNDc1LDcgKzQ3NSw3
IEBAIGludCBSZW5kZXJCbG9jazo6b3ZlcmZsb3dUb3AoYm9vbCBpbmNsdWQKIEludFJlY3QgUmVu
ZGVyQmxvY2s6Om92ZXJmbG93UmVjdChib29sIGluY2x1ZGVJbnRlcmlvcikgY29uc3QKIHsKICAg
ICBpZiAoIWluY2x1ZGVJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICBJ
bnRSZWN0IGJveCA9IGJvcmRlckJveCgpOworICAgICAgICBJbnRSZWN0IGJveCA9IGJvcmRlckJv
eFJlY3QoKTsKICAgICAgICAgaW50IHNoYWRvd0xlZnQgPSAwOwogICAgICAgICBpbnQgc2hhZG93
UmlnaHQgPSAwOwogICAgICAgICBpbnQgc2hhZG93VG9wID0gMDsKQEAgLTUwOCwxMCArNTA4LDEw
IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6Om92ZXJmbG93UmVjdChib29sIGkKICAgICB9CiAKICAg
ICBpZiAoIWluY2x1ZGVJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0
dXJuIGJvcmRlckJveCgpOworICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogICAgIGlu
dCBsID0gb3ZlcmZsb3dMZWZ0KGluY2x1ZGVJbnRlcmlvcik7Ci0gICAgaW50IHQgPSBtaW4ob3Zl
cmZsb3dUb3AoaW5jbHVkZUludGVyaW9yKSwgLWJvcmRlclRvcEV4dHJhKCkpOwotICAgIHJldHVy
biBJbnRSZWN0KGwsIHQsIG92ZXJmbG93V2lkdGgoaW5jbHVkZUludGVyaW9yKSAtIGwsIG1heChv
dmVyZmxvd0hlaWdodChpbmNsdWRlSW50ZXJpb3IpLCBoZWlnaHQoKSArIGJvcmRlckJvdHRvbUV4
dHJhKCkpIC0gdCk7CisgICAgaW50IHQgPSBtaW4ob3ZlcmZsb3dUb3AoaW5jbHVkZUludGVyaW9y
KSwgLWludHJpbnNpY1BhZGRpbmdUb3AoKSk7CisgICAgcmV0dXJuIEludFJlY3QobCwgdCwgb3Zl
cmZsb3dXaWR0aChpbmNsdWRlSW50ZXJpb3IpIC0gbCwgbWF4KG92ZXJmbG93SGVpZ2h0KGluY2x1
ZGVJbnRlcmlvciksIGhlaWdodCgpICsgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpKSAtIHQpOwog
fQogCiBib29sIFJlbmRlckJsb2NrOjppc1NlbGZDb2xsYXBzaW5nQmxvY2soKSBjb25zdApAQCAt
NTIyLDcgKzUyMiw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzU2VsZkNvbGxhcHNpbmdCbG9jaygK
ICAgICAvLyAoYykgaGF2ZSBib3JkZXIvcGFkZGluZywKICAgICAvLyAoZCkgaGF2ZSBhIG1pbi1o
ZWlnaHQKICAgICAvLyAoZSkgaGF2ZSBzcGVjaWZpZWQgdGhhdCBvbmUgb2Ygb3VyIG1hcmdpbnMg
Y2FuJ3QgY29sbGFwc2UgdXNpbmcgYSBDU1MgZXh0ZW5zaW9uCi0gICAgaWYgKG1faGVpZ2h0ID4g
MCB8fAorICAgIGlmIChoZWlnaHQoKSA+IDAgfHwKICAgICAgICAgaXNUYWJsZSgpIHx8IChib3Jk
ZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgp
KSAhPSAwIHx8CiAgICAgICAgIHN0eWxlKCktPm1pbkhlaWdodCgpLmlzUG9zaXRpdmUoKSB8fCAK
ICAgICAgICAgc3R5bGUoKS0+bWFyZ2luVG9wQ29sbGFwc2UoKSA9PSBNU0VQQVJBVEUgfHwgc3R5
bGUoKS0+bWFyZ2luQm90dG9tQ29sbGFwc2UoKSA9PSBNU0VQQVJBVEUpCkBAIC01NzAsOCArNTcw
LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkKICAgICAvLyBJdCdzIHNhZmUgdG8gY2hl
Y2sgZm9yIGNvbnRyb2wgY2xpcCBoZXJlLCBzaW5jZSBjb250cm9scyBjYW4gbmV2ZXIgYmUgdGFi
bGUgY2VsbHMuCiAgICAgaWYgKGhhc0NvbnRyb2xDbGlwKCkpIHsKICAgICAgICAgLy8gQmVjYXVz
ZSBvZiB0aGUgbGlnaHR3ZWlnaHQgY2xpcCwgdGhlcmUgY2FuIG5ldmVyIGJlIGFueSBvdmVyZmxv
dyBmcm9tIGNoaWxkcmVuLgotICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtX3dpZHRoOwotICAg
ICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAgIG1fb3ZlcmZsb3dXaWR0
aCA9IHdpZHRoKCk7CisgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBoZWlnaHQoKTsKICAgICAg
ICAgbV9vdmVyZmxvd0xlZnQgPSAwOwogICAgICAgICBtX292ZXJmbG93VG9wID0gMDsKICAgICB9
CkBAIC01OTUsMjQgKzU5NSwyNSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5CiAgICAgICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsK
ICAgICB9CiAKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0
aGlzLCBJbnRTaXplKHhQb3MoKSwgeVBvcygpKSwgbV9oYXNDb2x1bW5zIHx8IGhhc1RyYW5zZm9y
bSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7CisgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRl
UHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIHkoKSksIG1faGFzQ29sdW1ucyB8fCBo
YXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkpOwogCi0gICAgaW50IG9sZFdpZHRoID0g
bV93aWR0aDsKKyAgICBpbnQgb2xkV2lkdGggPSB3aWR0aCgpOwogICAgIGludCBvbGRDb2x1bW5X
aWR0aCA9IGRlc2lyZWRDb2x1bW5XaWR0aCgpOwogCiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2Fs
Y0NvbHVtbldpZHRoKCk7CiAKLSAgICBtX292ZXJmbG93V2lkdGggPSBtX3dpZHRoOworICAgIG1f
b3ZlcmZsb3dXaWR0aCA9IHdpZHRoKCk7CiAgICAgbV9vdmVyZmxvd0xlZnQgPSAwOwogCi0gICAg
aWYgKG9sZFdpZHRoICE9IG1fd2lkdGggfHwgb2xkQ29sdW1uV2lkdGggIT0gZGVzaXJlZENvbHVt
bldpZHRoKCkpCisgICAgaWYgKG9sZFdpZHRoICE9IHdpZHRoKCkgfHwgb2xkQ29sdW1uV2lkdGgg
IT0gZGVzaXJlZENvbHVtbldpZHRoKCkpCiAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVl
OwogCiAgICAgY2xlYXJGbG9hdHMoKTsKIAotICAgIGludCBwcmV2aW91c0hlaWdodCA9IG1faGVp
Z2h0OwotICAgIG1faGVpZ2h0ID0gMDsKKyAgICBpbnQgcHJldmlvdXNIZWlnaHQgPSBoZWlnaHQo
KTsKKyAgICBzZXRIZWlnaHQoMCk7CisKICAgICBtX292ZXJmbG93SGVpZ2h0ID0gMDsKIAogICAg
IC8vIFdlIHVzZSBmb3VyIHZhbHVlcywgbWF4VG9wUG9zLCBtYXhQb3NOZWcsIG1heEJvdHRvbVBv
cywgYW5kIG1heEJvdHRvbU5lZywgdG8gdHJhY2sKQEAgLTY1OCwyNSArNjU5LDI1IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKIAogICAgIC8vIEV4cGFuZCBvdXIg
aW50cmluc2ljIGhlaWdodCB0byBlbmNvbXBhc3MgZmxvYXRzLgogICAgIGludCB0b0FkZCA9IGJv
cmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCgpOwotICAgIGlmIChmbG9hdEJvdHRvbSgpID4gKG1faGVpZ2h0IC0gdG9BZGQpICYmIChpc0lu
bGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpIHx8IGlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSB8fCBo
YXNPdmVyZmxvd0NsaXAoKSB8fAorICAgIGlmIChmbG9hdEJvdHRvbSgpID4gKGhlaWdodCgpIC0g
dG9BZGQpICYmIChpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpIHx8IGlzRmxvYXRpbmdPclBv
c2l0aW9uZWQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc0ZsZXhpYmxlQm94KCkgfHwg
bV9oYXNDb2x1bW5zKSkpCi0gICAgICAgIG1faGVpZ2h0ID0gZmxvYXRCb3R0b20oKSArIHRvQWRk
OworICAgICAgICBzZXRIZWlnaHQoZmxvYXRCb3R0b20oKSArIHRvQWRkKTsKICAgICAKICAgICAv
LyBOb3cgbGF5IG91dCBvdXIgY29sdW1ucyB3aXRoaW4gdGhpcyBpbnRyaW5zaWMgaGVpZ2h0LCBz
aW5jZSB0aGV5IGNhbiBzbGlnaHRseSBhZmZlY3QgdGhlIGludHJpbnNpYyBoZWlnaHQgYXMKICAg
ICAvLyB3ZSBhZGp1c3QgZm9yIGNsZWFuIGNvbHVtbiBicmVha3MuCiAgICAgaW50IHNpbmdsZUNv
bHVtbkJvdHRvbSA9IGxheW91dENvbHVtbnMoKTsKIAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbmV3
IGhlaWdodC4KLSAgICBpbnQgb2xkSGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgaW50IG9sZEhlaWdo
dCA9IGhlaWdodCgpOwogICAgIGNhbGNIZWlnaHQoKTsKLSAgICBpZiAob2xkSGVpZ2h0ICE9IG1f
aGVpZ2h0KSB7Ci0gICAgICAgIGlmIChvbGRIZWlnaHQgPiBtX2hlaWdodCAmJiBtYXhGbG9hdEJv
dHRvbSA+IG1faGVpZ2h0ICYmICFjaGlsZHJlbklubGluZSgpKSB7CisgICAgaWYgKG9sZEhlaWdo
dCAhPSBoZWlnaHQoKSkgeworICAgICAgICBpZiAob2xkSGVpZ2h0ID4gaGVpZ2h0KCkgJiYgbWF4
RmxvYXRCb3R0b20gPiBoZWlnaHQoKSAmJiAhY2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAg
ICAgLy8gT25lIG9mIG91ciBjaGlsZHJlbidzIGZsb2F0cyBtYXkgaGF2ZSBiZWNvbWUgYW4gb3Zl
cmhhbmdpbmcgZmxvYXQgZm9yIHVzLiBXZSBuZWVkIHRvIGxvb2sgZm9yIGl0LgogICAgICAgICAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNC
bG9ja0Zsb3coKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkgewogICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9j
ayo+KGNoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5mbG9hdEJvdHRvbSgp
ICsgYmxvY2stPnlQb3MoKSA+IG1faGVpZ2h0KQotICAgICAgICAgICAgICAgICAgICAgICAgYWRk
T3ZlcmhhbmdpbmdGbG9hdHMoYmxvY2ssIC1ibG9jay0+eFBvcygpLCAtYmxvY2stPnlQb3MoKSwg
ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmZsb2F0Qm90dG9tKCkgKyBi
bG9jay0+eSgpID4gaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRPdmVyaGFu
Z2luZ0Zsb2F0cyhibG9jaywgLWJsb2NrLT54KCksIC1ibG9jay0+eSgpLCBmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02ODQsMTkgKzY4NSwx
OSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgIGxh
eW91dENvbHVtbnMoc2luZ2xlQ29sdW1uQm90dG9tKTsKIAogICAgICAgICAvLyBJZiB0aGUgYmxv
Y2sgZ290IGV4cGFuZGVkIGluIHNpemUsIHRoZW4gaW5jcmVhc2Ugb3VyIG92ZXJmbG93aGVpZ2h0
IHRvIG1hdGNoLgotICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA+IG1faGVpZ2h0KQorICAg
ICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA+IGhlaWdodCgpKQogICAgICAgICAgICAgbV9vdmVy
Zmxvd0hlaWdodCAtPSB0b0FkZDsKLSAgICAgICAgaWYgKG1fb3ZlcmZsb3dIZWlnaHQgPCBtX2hl
aWdodCkKLSAgICAgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAg
aWYgKG1fb3ZlcmZsb3dIZWlnaHQgPCBoZWlnaHQoKSkKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dI
ZWlnaHQgPSBoZWlnaHQoKTsKICAgICB9Ci0gICAgaWYgKHByZXZpb3VzSGVpZ2h0ICE9IG1faGVp
Z2h0KQorICAgIGlmIChwcmV2aW91c0hlaWdodCAhPSBoZWlnaHQoKSkKICAgICAgICAgcmVsYXlv
dXRDaGlsZHJlbiA9IHRydWU7CiAKICAgICAvLyBTb21lIGNsYXNzZXMgb2Ygb2JqZWN0cyAoZmxv
YXRzIGFuZCBmaWVsZHNldHMgd2l0aCBubyBzcGVjaWZpZWQgaGVpZ2h0cyBhbmQgdGFibGUgY2Vs
bHMpIGV4cGFuZCB0byBlbmNvbXBhc3MKICAgICAvLyBvdmVyaGFuZ2luZyBmbG9hdHMuCiAgICAg
aWYgKGhhc092ZXJoYW5naW5nRmxvYXRzKCkgJiYgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5n
RmxvYXRzKCkpIHsKLSAgICAgICAgbV9oZWlnaHQgPSBmbG9hdEJvdHRvbSgpOwotICAgICAgICBt
X2hlaWdodCArPSBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKTsKKyAgICAgICAgc2V0
SGVpZ2h0KGZsb2F0Qm90dG9tKCkpOworICAgICAgICBzZXRIZWlnaHQoYm9yZGVyQm90dG9tKCkg
KyBwYWRkaW5nQm90dG9tKCkpOwogICAgIH0KIAogICAgIGlmICgoaXNDZWxsIHx8IGlzSW5saW5l
KCkgfHwgaXNGbG9hdGluZ09yUG9zaXRpb25lZCgpIHx8IGlzUm9vdCgpKSAmJiAhaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgIWhhc0NvbnRyb2xDbGlwKCkpCkBAIC03MDcsMTUgKzcwOCwxNSBAQCB2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgcG9zaXRpb25MaXN0TWFy
a2VyKCk7CiAKICAgICAvLyBBbHdheXMgZW5zdXJlIG91ciBvdmVyZmxvdyB3aWR0aC9oZWlnaHQg
YXJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIG91ciB3aWR0aC9oZWlnaHQuCi0gICAgbV9vdmVyZmxv
d1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgbV93aWR0aCk7Ci0gICAgbV9vdmVyZmxvd0hl
aWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBtX2hlaWdodCk7CisgICAgbV9vdmVyZmxvd1dp
ZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgd2lkdGgoKSk7CisgICAgbV9vdmVyZmxvd0hlaWdo
dCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBoZWlnaHQoKSk7CiAKICAgICBpZiAoIWhhc092ZXJm
bG93Q2xpcCgpKSB7CiAgICAgICAgIGZvciAoU2hhZG93RGF0YSogYm94U2hhZG93ID0gc3R5bGUo
KS0+Ym94U2hhZG93KCk7IGJveFNoYWRvdzsgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KSB7
CiAgICAgICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1pbihtX292ZXJmbG93TGVmdCwgYm94U2hh
ZG93LT54IC0gYm94U2hhZG93LT5ibHVyKTsKLSAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9
IG1heChtX292ZXJmbG93V2lkdGgsIG1fd2lkdGggKyBib3hTaGFkb3ctPnggKyBib3hTaGFkb3ct
PmJsdXIpOworICAgICAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0
aCwgd2lkdGgoKSArIGJveFNoYWRvdy0+eCArIGJveFNoYWRvdy0+Ymx1cik7CiAgICAgICAgICAg
ICBtX292ZXJmbG93VG9wID0gbWluKG1fb3ZlcmZsb3dUb3AsIGJveFNoYWRvdy0+eSAtIGJveFNo
YWRvdy0+Ymx1cik7Ci0gICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZs
b3dIZWlnaHQsIG1faGVpZ2h0ICsgYm94U2hhZG93LT55ICsgYm94U2hhZG93LT5ibHVyKTsKKyAg
ICAgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgaGVpZ2h0
KCkgKyBib3hTaGFkb3ctPnkgKyBib3hTaGFkb3ctPmJsdXIpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAoaGFzUmVmbGVjdGlvbigpKSB7CkBAIC03NTIsNyArNzUzLDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgICAgICAgICAgcmVwYWlu
dFJlY3Quc2V0WSh5KTsKIAogICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyByZWN0IHRv
IHNwaWxsIG91dCBvZiBvdXIgb3ZlcmZsb3cgYm94LgotICAgICAgICAgICAgcmVwYWludFJlY3Qu
aW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQpKTsKKyAgICAgICAgICAg
IHJlcGFpbnRSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSk7
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHJlY3QgaXMgc3RpbGwgbm9u
LWVtcHR5IGFmdGVyIGludGVyc2VjdGluZyBmb3Igb3ZlcmZsb3cgYWJvdmUKQEAgLTc3NSw3ICs3
NzYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQb3NpdGlvbmVkQmxvY2soCiAgICAgfQog
CiAgICAgaWYgKGNoaWxkLT5oYXNTdGF0aWNZKCkpIHsKLSAgICAgICAgaW50IHkgPSBtX2hlaWdo
dDsKKyAgICAgICAgaW50IHkgPSBoZWlnaHQoKTsKICAgICAgICAgaWYgKCFtYXJnaW5JbmZvLmNh
bkNvbGxhcHNlV2l0aFRvcCgpKSB7CiAgICAgICAgICAgICBjaGlsZC0+Y2FsY1ZlcnRpY2FsTWFy
Z2lucygpOwogICAgICAgICAgICAgaW50IG1hcmdpblRvcCA9IGNoaWxkLT5tYXJnaW5Ub3AoKTsK
QEAgLTgxMCwxNSArODExLDE1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZsb2F0aW5nQmxv
Y2soY28KICAgICAvLyBodHRwOi8vd3d3LmhpeGllLmNoL3Rlc3RzL2FkaG9jL2Nzcy9ib3gvYmxv
Y2svbWFyZ2luLWNvbGxhcHNlLzA0Ni5odG1sIGZvcgogICAgIC8vIGFuIGV4YW1wbGUgb2YgdGhp
cyBzY2VuYXJpby4KICAgICBpbnQgbWFyZ2luT2Zmc2V0ID0gbWFyZ2luSW5mby5jYW5Db2xsYXBz
ZVdpdGhUb3AoKSA/IDAgOiBtYXJnaW5JbmZvLm1hcmdpbigpOwotICAgIG1faGVpZ2h0ICs9IG1h
cmdpbk9mZnNldDsKKyAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBtYXJnaW5PZmZzZXQpOwogICAg
IHBvc2l0aW9uTmV3RmxvYXRzKCk7Ci0gICAgbV9oZWlnaHQgLT0gbWFyZ2luT2Zmc2V0OworICAg
IHNldEhlaWdodChoZWlnaHQoKSAtIG1hcmdpbk9mZnNldCk7CiB9CiAKLVJlbmRlck9iamVjdCog
UmVuZGVyQmxvY2s6OmhhbmRsZVNwZWNpYWxDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25z
dCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBDb21wYWN0SW5mbyYgY29tcGFjdEluZm8sIGJvb2wm
IGhhbmRsZWQpCitSZW5kZXJCb3gqIFJlbmRlckJsb2NrOjpoYW5kbGVTcGVjaWFsQ2hpbGQoUmVu
ZGVyQm94KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgQ29tcGFjdEluZm8m
IGNvbXBhY3RJbmZvLCBib29sJiBoYW5kbGVkKQogewogICAgIC8vIEhhbmRsZSBwb3NpdGlvbmVk
IGNoaWxkcmVuIGZpcnN0LgotICAgIFJlbmRlck9iamVjdCogbmV4dCA9IGhhbmRsZVBvc2l0aW9u
ZWRDaGlsZChjaGlsZCwgbWFyZ2luSW5mbywgaGFuZGxlZCk7CisgICAgUmVuZGVyQm94KiBuZXh0
ID0gaGFuZGxlUG9zaXRpb25lZENoaWxkKGNoaWxkLCBtYXJnaW5JbmZvLCBoYW5kbGVkKTsKICAg
ICBpZiAoaGFuZGxlZCkgcmV0dXJuIG5leHQ7CiAgICAgCiAgICAgLy8gSGFuZGxlIGZsb2F0aW5n
IGNoaWxkcmVuIG5leHQuCkBAIC04MzQsMzEgKzgzNSwzMSBAQCBSZW5kZXJPYmplY3QqIFJlbmRl
ckJsb2NrOjpoYW5kbGVTcGVjaWFsCiB9CiAKIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJCbG9jazo6
aGFuZGxlUG9zaXRpb25lZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbklu
Zm8mIG1hcmdpbkluZm8sIGJvb2wmIGhhbmRsZWQpCitSZW5kZXJCb3gqIFJlbmRlckJsb2NrOjpo
YW5kbGVQb3NpdGlvbmVkQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYg
bWFyZ2luSW5mbywgYm9vbCYgaGFuZGxlZCkKIHsKICAgICBpZiAoY2hpbGQtPmlzUG9zaXRpb25l
ZCgpKSB7CiAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICBjaGlsZC0+Y29udGFpbmlu
Z0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRPYmplY3QoY2hpbGQpOwogICAgICAgICBhZGp1c3RQ
b3NpdGlvbmVkQmxvY2soY2hpbGQsIG1hcmdpbkluZm8pOwotICAgICAgICByZXR1cm4gY2hpbGQt
Pm5leHRTaWJsaW5nKCk7CisgICAgICAgIHJldHVybiBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsK
ICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJCbG9jazo6
aGFuZGxlRmxvYXRpbmdDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZv
JiBtYXJnaW5JbmZvLCBib29sJiBoYW5kbGVkKQorUmVuZGVyQm94KiBSZW5kZXJCbG9jazo6aGFu
ZGxlRmxvYXRpbmdDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBtYXJn
aW5JbmZvLCBib29sJiBoYW5kbGVkKQogewogICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZygpKSB7
CiAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdChj
aGlsZCk7CiAgICAgICAgIGFkanVzdEZsb2F0aW5nQmxvY2sobWFyZ2luSW5mbyk7Ci0gICAgICAg
IHJldHVybiBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkLT5uZXh0
U2libGluZ0JveCgpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gMDsKIH0KIAotUmVuZGVyT2Jq
ZWN0KiBSZW5kZXJCbG9jazo6aGFuZGxlQ29tcGFjdENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQs
IENvbXBhY3RJbmZvJiBjb21wYWN0SW5mbywgYm9vbCYgaGFuZGxlZCkKK1JlbmRlckJveCogUmVu
ZGVyQmxvY2s6OmhhbmRsZUNvbXBhY3RDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBDb21wYWN0SW5m
byYgY29tcGFjdEluZm8sIGJvb2wmIGhhbmRsZWQpCiB7CiAgICAgLy8gRklYTUU6IFdlIG9ubHkg
ZGVhbCB3aXRoIG9uZSBjb21wYWN0IGF0IGEgdGltZS4gIEl0IGlzIHVuY2xlYXIgd2hhdCBzaG91
bGQgYmUKICAgICAvLyBkb25lIGlmIG11bHRpcGxlIGNvbnRpZ3VvdXMgY29tcGFjdHMgYXJlIGVu
Y291bnRlcmVkLiAgRm9yIG5vdyB3ZSBhc3N1bWUgdGhhdApAQCAtODgxLDEyICs4ODIsMTIgQEAg
UmVuZGVyT2JqZWN0KiBSZW5kZXJCbG9jazo6aGFuZGxlQ29tcGFjdAogICAgICAgICAgICAgICAg
IC8vIFRoZSBjb21wYWN0IHdpbGwgZml0IGluIHRoZSBtYXJnaW4uCiAgICAgICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgY29tcGFjdEluZm8uc2V0KGNoaWxkLCBj
dXJyKTsKLSAgICAgICAgICAgICAgICBjaGlsZC0+c2V0UG9zKDAsMCk7IC8vIFRoaXMgcG9zaXRp
b24gd2lsbCBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNvbXBhY3QncworICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KGNoaWxkKS0+c2V0TG9jYXRpb24oSW50UG9pbnQo
KSk7IC8vIFRoaXMgcG9zaXRpb24gd2lsbCBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNvbXBh
Y3QncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVzaXJlZCBwb3Np
dGlvbiBhbmQgdGhlIGxpbmUgYm94IGZvciB0aGUgY29tcGFjdCB3aWxsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBwaWNrIHRoYXQgcG9zaXRpb24gdXAuCiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBjaGlsZC4KLSAgICAgICAg
ICAgICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAg
ICAgICAgICAgICBSZW5kZXJCb3gqIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKICAg
ICAgICAgICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGQpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIC8vIE5vdyBpbnNlcnQgdGhlIGNoaWxkIHVuZGVyIHxjdXJyfC4KQEAg
LTkwMCwyNCArOTAxLDI0IEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OmhhbmRsZUNvbXBh
Y3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0Q29tcGFjdElm
TmVlZGVkKFJlbmRlck9iamVjdCogY2hpbGQsIENvbXBhY3RJbmZvJiBjb21wYWN0SW5mbykKK3Zv
aWQgUmVuZGVyQmxvY2s6Omluc2VydENvbXBhY3RJZk5lZWRlZChSZW5kZXJCb3gqIGNoaWxkLCBD
b21wYWN0SW5mbyYgY29tcGFjdEluZm8pCiB7CiAgICAgaWYgKGNvbXBhY3RJbmZvLm1hdGNoZXMo
Y2hpbGQpKSB7CiAgICAgICAgIC8vIFdlIGhhdmUgYSBjb21wYWN0IGNoaWxkIHRvIHNxdWVlemUg
aW4uCi0gICAgICAgIFJlbmRlck9iamVjdCogY29tcGFjdENoaWxkID0gY29tcGFjdEluZm8uY29t
cGFjdCgpOworICAgICAgICBSZW5kZXJCb3gqIGNvbXBhY3RDaGlsZCA9IGNvbXBhY3RJbmZvLmNv
bXBhY3QoKTsKICAgICAgICAgaW50IGNvbXBhY3RYUG9zID0gYm9yZGVyTGVmdCgpICsgcGFkZGlu
Z0xlZnQoKSArIGNvbXBhY3RDaGlsZC0+bWFyZ2luTGVmdCgpOwogICAgICAgICBpZiAoc3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gUlRMKSB7CiAgICAgICAgICAgICBjb21wYWN0Q2hpbGQtPmNhbGNX
aWR0aCgpOyAvLyBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSBvZiB0aGUgY2FwcGVkIG1heHdpZHRo
CiAgICAgICAgICAgICBjb21wYWN0WFBvcyA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gcGFk
ZGluZ1JpZ2h0KCkgLSBtYXJnaW5SaWdodCgpIC0KICAgICAgICAgICAgICAgICBjb21wYWN0Q2hp
bGQtPndpZHRoKCkgLSBjb21wYWN0Q2hpbGQtPm1hcmdpblJpZ2h0KCk7CiAgICAgICAgIH0KLSAg
ICAgICAgY29tcGFjdFhQb3MgLT0gY2hpbGQtPnhQb3MoKTsgLy8gUHV0IGNvbXBhY3RYUG9zIGlu
dG8gdGhlIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgY29tcGFjdENoaWxkLT5z
ZXRQb3MoY29tcGFjdFhQb3MsIGNvbXBhY3RDaGlsZC0+eVBvcygpKTsgLy8gU2V0IHRoZSB4IHBv
c2l0aW9uLgorICAgICAgICBjb21wYWN0WFBvcyAtPSBjaGlsZC0+eCgpOyAvLyBQdXQgY29tcGFj
dFhQb3MgaW50byB0aGUgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLgorICAgICAgICBjb21wYWN0
Q2hpbGQtPnNldExvY2F0aW9uKGNvbXBhY3RYUG9zLCBjb21wYWN0Q2hpbGQtPnkoKSk7IC8vIFNl
dCB0aGUgeCBwb3NpdGlvbi4KICAgICAgICAgY29tcGFjdEluZm8uY2xlYXIoKTsKICAgICB9CiB9
CiAKLVJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OmhhbmRsZVJ1bkluQ2hpbGQoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCwgYm9vbCYgaGFuZGxlZCkKK1JlbmRlckJveCogUmVuZGVyQmxvY2s6OmhhbmRs
ZVJ1bkluQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgYm9vbCYgaGFuZGxlZCkKIHsKICAgICAvLyBT
ZWUgaWYgd2UgaGF2ZSBhIHJ1bi1pbiBlbGVtZW50IHdpdGggaW5saW5lIGNoaWxkcmVuLiAgSWYg
dGhlCiAgICAgLy8gY2hpbGRyZW4gYXJlbid0IGlubGluZSwgdGhlbiBqdXN0IHRyZWF0IHRoZSBy
dW4taW4gYXMgYSBub3JtYWwKQEAgLTkzMiwxMCArOTMzLDEwIEBAIFJlbmRlck9iamVjdCogUmVu
ZGVyQmxvY2s6OmhhbmRsZVJ1bkluQ2gKICAgICAgICAgICAgIC8vIHBvc2l0aW9uLgogICAgICAg
ICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICBjaGlsZC0+c2V0SW5saW5lKHRydWUp
OwotICAgICAgICAgICAgY2hpbGQtPnNldFBvcygwLDApOworICAgICAgICAgICAgY2hpbGQtPnNl
dExvY2F0aW9uKDAsMCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUg
Y2hpbGQuCi0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKTsKKyAgICAgICAgICAgIFJlbmRlckJveCogbmV4dCA9IGNoaWxkLT5uZXh0U2libGluZ0Jv
eCgpOwogICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgLy8gTm93IGluc2VydCB0aGUgY2hpbGQgdW5kZXIgfGN1cnJ8LgpAQCAtOTQ2
LDcgKzk0Nyw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OmhhbmRsZVJ1bkluQ2gKICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKFJlbmRl
ck9iamVjdCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIGludCB5UG9zRXN0aW1hdGUp
Cit2b2lkIFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94KiBjaGlsZCwgTWFy
Z2luSW5mbyYgbWFyZ2luSW5mbywgaW50IHlQb3NFc3RpbWF0ZSkKIHsKICAgICAvLyBHZXQgb3Vy
IG1heCBwb3MgYW5kIG5lZyB0b3AgbWFyZ2lucy4KICAgICBpbnQgcG9zVG9wID0gY2hpbGQtPm1h
eFRvcE1hcmdpbih0cnVlKTsKQEAgLTk5MSw3ICs5OTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpj
b2xsYXBzZU1hcmdpbnMoUmVuZGVyCiAgICAgaWYgKG1hcmdpbkluZm8ucXVpcmtDb250YWluZXIo
KSAmJiBtYXJnaW5JbmZvLmF0VG9wT2ZCbG9jaygpICYmIChwb3NUb3AgLSBuZWdUb3ApKQogICAg
ICAgICBtYXJnaW5JbmZvLnNldFRvcFF1aXJrKHRvcFF1aXJrKTsKIAotICAgIGludCB5cG9zID0g
bV9oZWlnaHQ7CisgICAgaW50IHlwb3MgPSBoZWlnaHQoKTsKICAgICBpZiAoY2hpbGQtPmlzU2Vs
ZkNvbGxhcHNpbmdCbG9jaygpKSB7CiAgICAgICAgIC8vIFRoaXMgY2hpbGQgaGFzIG5vIGhlaWdo
dC4gIFdlIG5lZWQgdG8gY29tcHV0ZSBvdXIKICAgICAgICAgLy8gcG9zaXRpb24gYmVmb3JlIHdl
IGNvbGxhcHNlIHRoZSBjaGlsZCdzIG1hcmdpbnMgdG9nZXRoZXIsCkBAIC0xMDEwLDIwICsxMDEx
LDIwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXIKICAgICAgICAg
ICAgIC8vIGlzIGNvcnJlY3QsIHNpbmNlIGl0IGNvdWxkIGhhdmUgb3ZlcmZsb3dpbmcgY29udGVu
dAogICAgICAgICAgICAgLy8gdGhhdCBuZWVkcyB0byBiZSBwb3NpdGlvbmVkIGNvcnJlY3RseSAo
ZS5nLiwgYSBibG9jayB0aGF0CiAgICAgICAgICAgICAvLyBoYWQgYSBzcGVjaWZpZWQgaGVpZ2h0
IG9mIDAgYnV0IHRoYXQgYWN0dWFsbHkgaGFkIHN1YmNvbnRlbnQpLgotICAgICAgICAgICAgeXBv
cyA9IG1faGVpZ2h0ICsgY29sbGFwc2VkVG9wUG9zIC0gY29sbGFwc2VkVG9wTmVnOworICAgICAg
ICAgICAgeXBvcyA9IGhlaWdodCgpICsgY29sbGFwc2VkVG9wUG9zIC0gY29sbGFwc2VkVG9wTmVn
OwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5U
b3BDb2xsYXBzZSgpID09IE1TRVBBUkFURSkgewotICAgICAgICAgICAgbV9oZWlnaHQgKz0gbWFy
Z2luSW5mby5tYXJnaW4oKSArIGNoaWxkLT5tYXJnaW5Ub3AoKTsKLSAgICAgICAgICAgIHlwb3Mg
PSBtX2hlaWdodDsKKyAgICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIG1hcmdpbkluZm8u
bWFyZ2luKCkgKyBjaGlsZC0+bWFyZ2luVG9wKCkpOworICAgICAgICAgICAgeXBvcyA9IGhlaWdo
dCgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCFtYXJnaW5JbmZvLmF0VG9wT2ZCbG9j
aygpIHx8CiAgICAgICAgICAgICAoIW1hcmdpbkluZm8uY2FuQ29sbGFwc2VUb3BXaXRoQ2hpbGRy
ZW4oKQogICAgICAgICAgICAgICYmICghc3R5bGUoKS0+aHRtbEhhY2tzKCkgfHwgIW1hcmdpbklu
Zm8ucXVpcmtDb250YWluZXIoKSB8fCAhbWFyZ2luSW5mby50b3BRdWlyaygpKSkpIHsKICAgICAg
ICAgICAgIC8vIFdlJ3JlIGNvbGxhcHNpbmcgd2l0aCBhIHByZXZpb3VzIHNpYmxpbmcncyBtYXJn
aW5zIGFuZCBub3QKICAgICAgICAgICAgIC8vIHdpdGggdGhlIHRvcCBvZiB0aGUgYmxvY2suCi0g
ICAgICAgICAgICBtX2hlaWdodCArPSBtYXgobWFyZ2luSW5mby5wb3NNYXJnaW4oKSwgcG9zVG9w
KSAtIG1heChtYXJnaW5JbmZvLm5lZ01hcmdpbigpLCBuZWdUb3ApOwotICAgICAgICAgICAgeXBv
cyA9IG1faGVpZ2h0OworICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbWF4KG1hcmdp
bkluZm8ucG9zTWFyZ2luKCksIHBvc1RvcCkgLSBtYXgobWFyZ2luSW5mby5uZWdNYXJnaW4oKSwg
bmVnVG9wKSk7CisgICAgICAgICAgICB5cG9zID0gaGVpZ2h0KCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBtYXJnaW5JbmZvLnNldFBvc01hcmdpbihjaGlsZC0+bWF4Qm90dG9tTWFyZ2luKHRydWUp
KTsKQEAgLTEwMzYsNyArMTAzNyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lu
cyhSZW5kZXIKICAgICB9CiAKICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNpemUoMCwg
eVBvc0VzdGltYXRlIC0geXBvcykpOwotICAgIGNoaWxkLT5zZXRQb3MoY2hpbGQtPnhQb3MoKSwg
eXBvcyk7CisgICAgY2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54KCksIHlwb3MpOwogICAgIGlm
ICh5cG9zICE9IHlQb3NFc3RpbWF0ZSkgewogICAgICAgICBpZiAoY2hpbGQtPnNocmlua1RvQXZv
aWRGbG9hdHMoKSkKICAgICAgICAgICAgIC8vIFRoZSBjaGlsZCdzIHdpZHRoIGRlcGVuZHMgb24g
dGhlIGxpbmUgd2lkdGguCkBAIC0xMDUzLDcgKzEwNTQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpj
b2xsYXBzZU1hcmdpbnMoUmVuZGVyCiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpjbGVh
ckZsb2F0c0lmTmVlZGVkKFJlbmRlck9iamVjdCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbklu
Zm8sIGludCBvbGRUb3BQb3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJnaW4pCit2b2lkIFJlbmRl
ckJsb2NrOjpjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8m
IG1hcmdpbkluZm8sIGludCBvbGRUb3BQb3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJnaW4pCiB7
CiAgICAgaW50IGhlaWdodEluY3JlYXNlID0gZ2V0Q2xlYXJEZWx0YShjaGlsZCk7CiAgICAgaWYg
KCFoZWlnaHRJbmNyZWFzZSkKQEAgLTEwNjEsNyArMTA2Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmNsZWFyRmxvYXRzSWZOZWVkZWQoUmUKIAogICAgIC8vIFRoZSBjaGlsZCBuZWVkcyB0byBiZSBs
b3dlcmVkLiAgTW92ZSB0aGUgY2hpbGQgc28gdGhhdCBpdCBqdXN0IGNsZWFycyB0aGUgZmxvYXQu
CiAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRTaXplKDAsIC1oZWlnaHRJbmNyZWFzZSkp
OwotICAgIGNoaWxkLT5zZXRQb3MoY2hpbGQtPnhQb3MoKSwgY2hpbGQtPnlQb3MoKSArIGhlaWdo
dEluY3JlYXNlKTsKKyAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hpbGQtPngoKSwgY2hpbGQtPnko
KSArIGhlaWdodEluY3JlYXNlKTsKIAogICAgIGlmIChjaGlsZC0+aXNTZWxmQ29sbGFwc2luZ0Js
b2NrKCkpIHsKICAgICAgICAgLy8gRm9yIHNlbGYtY29sbGFwc2luZyBibG9ja3MgdGhhdCBjbGVh
ciwgdGhleSBjYW4gc3RpbGwgY29sbGFwc2UgdGhlaXIKQEAgLTEwNzEsNyArMTA3Miw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzSWZOZWVkZWQoUmUKICAgICAgICAgbWFyZ2luSW5m
by5zZXROZWdNYXJnaW4obWF4KGNoaWxkLT5tYXhUb3BNYXJnaW4oZmFsc2UpLCBjaGlsZC0+bWF4
Qm90dG9tTWFyZ2luKGZhbHNlKSkpOwogICAgICAgICAKICAgICAgICAgLy8gQWRqdXN0IG91ciBo
ZWlnaHQgc3VjaCB0aGF0IHdlIGFyZSByZWFkeSB0byBiZSBjb2xsYXBzZWQgd2l0aCBzdWJzZXF1
ZW50IHNpYmxpbmdzLgotICAgICAgICBtX2hlaWdodCA9IGNoaWxkLT55UG9zKCkgLSBtYXgoMCwg
bWFyZ2luSW5mby5tYXJnaW4oKSk7CisgICAgICAgIHNldEhlaWdodChjaGlsZC0+eSgpIC0gbWF4
KDAsIG1hcmdpbkluZm8ubWFyZ2luKCkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFNldCBhIGZs
YWcgdGhhdCB3ZSBjbGVhcmVkIGEgZmxvYXQgc28gdGhhdCB3ZSBrbm93IGJvdGggdG8gaW5jcmVh
c2UgdGhlIGhlaWdodCBvZiB0aGUgYmxvY2sKICAgICAgICAgLy8gdG8gY29tcGVuc2F0ZSBmb3Ig
dGhlIGNsZWFyIGFuZCB0byBhdm9pZCBjb2xsYXBzaW5nIG91ciBtYXJnaW5zIHdpdGggdGhlIHBh
cmVudCBibG9jaydzCkBAIC0xMDc5LDcgKzEwODAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVh
ckZsb2F0c0lmTmVlZGVkKFJlCiAgICAgICAgIG1hcmdpbkluZm8uc2V0U2VsZkNvbGxhcHNpbmdC
bG9ja0NsZWFyZWRGbG9hdCh0cnVlKTsKICAgICB9IGVsc2UKICAgICAgICAgLy8gSW5jcmVhc2Ug
b3VyIGhlaWdodCBieSB0aGUgYW1vdW50IHdlIGhhZCB0byBjbGVhci4KLSAgICAgICAgbV9oZWln
aHQgKz0gaGVpZ2h0SW5jcmVhc2U7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGhlaWdo
dEluY3JlYXNlKTsKICAgICAKICAgICBpZiAobWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhUb3Ao
KSkgewogICAgICAgICAvLyBXZSBjYW4gbm8gbG9uZ2VyIGNvbGxhcHNlIHdpdGggdGhlIHRvcCBv
ZiB0aGUgYmxvY2sgc2luY2UgYSBjbGVhcgpAQCAtMTEwOSw3ICsxMTEwLDcgQEAgaW50IFJlbmRl
ckJsb2NrOjplc3RpbWF0ZVZlcnRpY2FsUG9zaXRpbwogewogICAgIC8vIEZJWE1FOiBXZSBuZWVk
IHRvIGVsaW1pbmF0ZSB0aGUgZXN0aW1hdGlvbiBvZiB2ZXJ0aWNhbCBwb3NpdGlvbiwgYmVjYXVz
ZSB3aGVuIGl0J3Mgd3Jvbmcgd2Ugc29tZXRpbWVzIHRyaWdnZXIgYSBwYXRob2xvZ2ljYWwKICAg
ICAvLyByZWxheW91dCBpZiB0aGVyZSBhcmUgaW50cnVkaW5nIGZsb2F0cy4KLSAgICBpbnQgeVBv
c0VzdGltYXRlID0gbV9oZWlnaHQ7CisgICAgaW50IHlQb3NFc3RpbWF0ZSA9IGhlaWdodCgpOwog
ICAgIGlmICghbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhUb3AoKSkgewogICAgICAgICBpbnQg
Y2hpbGRNYXJnaW5Ub3AgPSBjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkgPyBjaGlsZC0+bWFyZ2lu
VG9wKCkgOiBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luVG9wKCk7CiAgICAgICAgIHlQb3NFc3RpbWF0
ZSArPSBtYXgobWFyZ2luSW5mby5tYXJnaW4oKSwgY2hpbGRNYXJnaW5Ub3ApOwpAQCAtMTExNyw3
ICsxMTE4LDcgQEAgaW50IFJlbmRlckJsb2NrOjplc3RpbWF0ZVZlcnRpY2FsUG9zaXRpbwogICAg
IHJldHVybiB5UG9zRXN0aW1hdGU7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmRldGVybWluZUhv
cml6b250YWxQb3NpdGlvbihSZW5kZXJPYmplY3QqIGNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6
ZGV0ZXJtaW5lSG9yaXpvbnRhbFBvc2l0aW9uKFJlbmRlckJveCogY2hpbGQpCiB7CiAgICAgaWYg
KHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewogICAgICAgICBpbnQgeFBvcyA9IGJvcmRl
ckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CkBAIC0xMTI4LDcgKzExMjksNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpkZXRlcm1pbmVIb3Jpem9udGFsUG9zCiAgICAgICAgIC8vIFNvbWUgb2JqZWN0cyAo
ZS5nLiwgdGFibGVzLCBob3Jpem9udGFsIHJ1bGVzLCBvdmVyZmxvdzphdXRvIGJsb2NrcykgYXZv
aWQgZmxvYXRzLiAgVGhleSBuZWVkCiAgICAgICAgIC8vIHRvIHNoaWZ0IG92ZXIgYXMgbmVjZXNz
YXJ5IHRvIGRvZGdlIGFueSBmbG9hdHMgdGhhdCBtaWdodCBnZXQgaW4gdGhlIHdheS4KICAgICAg
ICAgaWYgKGNoaWxkLT5hdm9pZHNGbG9hdHMoKSkgewotICAgICAgICAgICAgaW50IGxlZnRPZmYg
PSBsZWZ0T2Zmc2V0KG1faGVpZ2h0KTsKKyAgICAgICAgICAgIGludCBsZWZ0T2ZmID0gbGVmdE9m
ZnNldChoZWlnaHQoKSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+dGV4dEFsaWduKCkgIT0g
V0VCS0lUX0NFTlRFUiAmJiBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpLnR5cGUoKSAhPSBB
dXRvKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5tYXJnaW5MZWZ0KCkgPCAwKQogICAg
ICAgICAgICAgICAgICAgICBsZWZ0T2ZmICs9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7CkBAIC0xMTQw
LDE3ICsxMTQxLDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRldGVybWluZUhvcml6b250YWxQb3MK
ICAgICAgICAgICAgICAgICAvLyB3aWR0aCBjb21wdXRhdGlvbiB3aWxsIHRha2UgaW50byBhY2Nv
dW50IHRoZSBkZWx0YSBiZXR3ZWVuIHxsZWZ0T2ZmfCBhbmQgfHhQb3N8CiAgICAgICAgICAgICAg
ICAgLy8gc28gdGhhdCB3ZSBjYW4ganVzdCBwYXNzIHRoZSBjb250ZW50IHdpZHRoIGluIGRpcmVj
dGx5IHRvIHRoZSB8Y2FsY0hvcml6b250YWxNYXJnaW5zfAogICAgICAgICAgICAgICAgIC8vIGZ1
bmN0aW9uLgotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KGNoaWxkKS0+
Y2FsY0hvcml6b250YWxNYXJnaW5zKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCksIGNoaWxk
LT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpLCBsaW5lV2lkdGgoY2hpbGQtPnlQb3MoKSkpOworICAg
ICAgICAgICAgICAgIGNoaWxkLT5jYWxjSG9yaXpvbnRhbE1hcmdpbnMoY2hpbGQtPnN0eWxlKCkt
Pm1hcmdpbkxlZnQoKSwgY2hpbGQtPnN0eWxlKCktPm1hcmdpblJpZ2h0KCksIGxpbmVXaWR0aChj
aGlsZC0+eSgpKSk7CiAgICAgICAgICAgICAgICAgY2hQb3MgPSBsZWZ0T2ZmICsgY2hpbGQtPm1h
cmdpbkxlZnQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB2aWV3KCktPmFk
ZExheW91dERlbHRhKEludFNpemUoY2hpbGQtPnhQb3MoKSAtIGNoUG9zLCAwKSk7Ci0gICAgICAg
IGNoaWxkLT5zZXRQb3MoY2hQb3MsIGNoaWxkLT55UG9zKCkpOworICAgICAgICB2aWV3KCktPmFk
ZExheW91dERlbHRhKEludFNpemUoY2hpbGQtPngoKSAtIGNoUG9zLCAwKSk7CisgICAgICAgIGNo
aWxkLT5zZXRMb2NhdGlvbihjaFBvcywgY2hpbGQtPnkoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgaW50IHhQb3MgPSBtX3dpZHRoIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdSaWdodCgpIC0g
dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOworICAgICAgICBpbnQgeFBvcyA9IHdpZHRoKCkgLSBi
b3JkZXJSaWdodCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7
CiAgICAgICAgIGludCBjaFBvcyA9IHhQb3MgLSAoY2hpbGQtPndpZHRoKCkgKyBjaGlsZC0+bWFy
Z2luUmlnaHQoKSk7CiAgICAgICAgIGlmIChjaGlsZC0+YXZvaWRzRmxvYXRzKCkpIHsKLSAgICAg
ICAgICAgIGludCByaWdodE9mZiA9IHJpZ2h0T2Zmc2V0KG1faGVpZ2h0KTsKKyAgICAgICAgICAg
IGludCByaWdodE9mZiA9IHJpZ2h0T2Zmc2V0KGhlaWdodCgpKTsKICAgICAgICAgICAgIGlmIChz
dHlsZSgpLT50ZXh0QWxpZ24oKSAhPSBXRUJLSVRfQ0VOVEVSICYmIGNoaWxkLT5zdHlsZSgpLT5t
YXJnaW5SaWdodCgpLnR5cGUoKSAhPSBBdXRvKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxk
LT5tYXJnaW5SaWdodCgpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgcmlnaHRPZmYgLT0gY2hp
bGQtPm1hcmdpblJpZ2h0KCk7CkBAIC0xMTYxLDEyICsxMTYyLDEyIEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmRldGVybWluZUhvcml6b250YWxQb3MKICAgICAgICAgICAgICAgICAvLyB3aWR0aCBjb21w
dXRhdGlvbiB3aWxsIHRha2UgaW50byBhY2NvdW50IHRoZSBkZWx0YSBiZXR3ZWVuIHxyaWdodE9m
ZnwgYW5kIHx4UG9zfAogICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGp1c3QgcGFz
cyB0aGUgY29udGVudCB3aWR0aCBpbiBkaXJlY3RseSB0byB0aGUgfGNhbGNIb3Jpem9udGFsTWFy
Z2luc3wKICAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJCb3gqPihjaGlsZCktPmNhbGNIb3Jpem9udGFsTWFyZ2lucyhjaGlsZC0+
c3R5bGUoKS0+bWFyZ2luTGVmdCgpLCBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKSwgbGlu
ZVdpZHRoKGNoaWxkLT55UG9zKCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5k
ZXJCb3gqPihjaGlsZCktPmNhbGNIb3Jpem9udGFsTWFyZ2lucyhjaGlsZC0+c3R5bGUoKS0+bWFy
Z2luTGVmdCgpLCBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKSwgbGluZVdpZHRoKGNoaWxk
LT55KCkpKTsKICAgICAgICAgICAgICAgICBjaFBvcyA9IHJpZ2h0T2ZmIC0gY2hpbGQtPm1hcmdp
blJpZ2h0KCkgLSBjaGlsZC0+d2lkdGgoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNpemUoY2hpbGQtPnhQb3MoKSAtIGNoUG9z
LCAwKSk7Ci0gICAgICAgIGNoaWxkLT5zZXRQb3MoY2hQb3MsIGNoaWxkLT55UG9zKCkpOworICAg
ICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNpemUoY2hpbGQtPngoKSAtIGNoUG9zLCAw
KSk7CisgICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaFBvcywgY2hpbGQtPnkoKSk7CiAgICAg
fQogfQogCkBAIC0xMjA1LDE3ICsxMjA2LDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmhhbmRsZUJv
dHRvbU9mQmxvY2soaW4KICAgICAvLyBJZiB3ZSBjYW4ndCBjb2xsYXBzZSB3aXRoIGNoaWxkcmVu
IHRoZW4gZ28gYWhlYWQgYW5kIGFkZCBpbiB0aGUgYm90dG9tIG1hcmdpbi4KICAgICBpZiAoIW1h
cmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoQm90dG9tKCkgJiYgIW1hcmdpbkluZm8uY2FuQ29sbGFw
c2VXaXRoVG9wKCkKICAgICAgICAgJiYgKCFzdHlsZSgpLT5odG1sSGFja3MoKSB8fCAhbWFyZ2lu
SW5mby5xdWlya0NvbnRhaW5lcigpIHx8ICFtYXJnaW5JbmZvLmJvdHRvbVF1aXJrKCkpKQotICAg
ICAgICBtX2hlaWdodCArPSBtYXJnaW5JbmZvLm1hcmdpbigpOworICAgICAgICBzZXRIZWlnaHQo
aGVpZ2h0KCkgKyBtYXJnaW5JbmZvLm1hcmdpbigpKTsKICAgICAgICAgCiAgICAgLy8gTm93IGFk
ZCBpbiBvdXIgYm90dG9tIGJvcmRlci9wYWRkaW5nLgotICAgIG1faGVpZ2h0ICs9IGJvdHRvbTsK
KyAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBib3R0b20pOwogCiAgICAgLy8gTmVnYXRpdmUgbWFy
Z2lucyBjYW4gY2F1c2Ugb3VyIGhlaWdodCB0byBzaHJpbmsgYmVsb3cgb3VyIG1pbmltYWwgaGVp
Z2h0IChib3JkZXIvcGFkZGluZykuCiAgICAgLy8gSWYgdGhpcyBoYXBwZW5zLCBlbnN1cmUgdGhh
dCB0aGUgY29tcHV0ZWQgaGVpZ2h0IGlzIGluY3JlYXNlZCB0byB0aGUgbWluaW1hbCBoZWlnaHQu
Ci0gICAgbV9oZWlnaHQgPSBtYXgobV9oZWlnaHQsIHRvcCArIGJvdHRvbSk7CisgICAgc2V0SGVp
Z2h0KG1heChoZWlnaHQoKSwgdG9wICsgYm90dG9tKSk7CiAKICAgICAvLyBBbHdheXMgbWFrZSBz
dXJlIG91ciBvdmVyZmxvdyBoZWlnaHQgaXMgYXQgbGVhc3Qgb3VyIGhlaWdodC4KLSAgICBtX292
ZXJmbG93SGVpZ2h0ID0gbWF4KG1faGVpZ2h0LCBtX292ZXJmbG93SGVpZ2h0KTsKKyAgICBtX292
ZXJmbG93SGVpZ2h0ID0gbWF4KGhlaWdodCgpLCBtX292ZXJmbG93SGVpZ2h0KTsKIAogICAgIC8v
IFVwZGF0ZSBvdXIgYm90dG9tIGNvbGxhcHNlZCBtYXJnaW4gaW5mby4KICAgICBzZXRDb2xsYXBz
ZWRCb3R0b21NYXJnaW4obWFyZ2luSW5mbyk7CkBAIC0xMjQ0LDcgKzEyNDUsOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvCiAgICAgaW50IHRvcCA9IGJvcmRlclRv
cCgpICsgcGFkZGluZ1RvcCgpOwogICAgIGludCBib3R0b20gPSBib3JkZXJCb3R0b20oKSArIHBh
ZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKIAotICAgIG1faGVp
Z2h0ID0gbV9vdmVyZmxvd0hlaWdodCA9IHRvcDsKKyAgICBtX292ZXJmbG93SGVpZ2h0ID0gdG9w
OworICAgIHNldEhlaWdodChtX292ZXJmbG93SGVpZ2h0KTsKIAogICAgIC8vIFRoZSBtYXJnaW4g
c3RydWN0IGNhY2hlcyBhbGwgb3VyIGN1cnJlbnQgbWFyZ2luIGNvbGxhcHNpbmcgc3RhdGUuICBU
aGUgY29tcGFjdCBzdHJ1Y3QgY2FjaGVzIHN0YXRlIHdoZW4gd2UgZW5jb3VudGVyIGNvbXBhY3Rz
LAogICAgIE1hcmdpbkluZm8gbWFyZ2luSW5mbyh0aGlzLCB0b3AsIGJvdHRvbSk7CkBAIC0xMjU3
LDEwICsxMjU5LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8K
ICAgICBpbnQgcHJldmlvdXNGbG9hdEJvdHRvbSA9IDA7CiAgICAgbWF4RmxvYXRCb3R0b20gPSAw
OwogCi0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJC
b3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOwogICAgIHdoaWxlIChjaGlsZCkgewogICAgICAg
ICBpZiAobGVnZW5kID09IGNoaWxkKSB7Ci0gICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpOworICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIHRoZSBsZWdlbmQsIHNpbmNlIGl0IGhhcyBh
bHJlYWR5IGJlZW4gcG9zaXRpb25lZCB1cCBpbiB0aGUgZmllbGRzZXQncyBib3JkZXIuCiAgICAg
ICAgIH0KIApAQCAtMTI4MCw3ICsxMjgyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0Qmxv
Y2tDaGlsZHJlbihibwogICAgICAgICAvLyBIYW5kbGUgdGhlIGZvdXIgdHlwZXMgb2Ygc3BlY2lh
bCBlbGVtZW50cyBmaXJzdC4gIFRoZXNlIGluY2x1ZGUgcG9zaXRpb25lZCBjb250ZW50LCBmbG9h
dGluZyBjb250ZW50LCBjb21wYWN0cyBhbmQKICAgICAgICAgLy8gcnVuLWlucy4gIFdoZW4gd2Ug
ZW5jb3VudGVyIHRoZXNlIGZvdXIgdHlwZXMgb2Ygb2JqZWN0cywgd2UgZG9uJ3QgYWN0dWFsbHkg
bGF5IHRoZW0gb3V0IGFzIG5vcm1hbCBmbG93IGJsb2Nrcy4KICAgICAgICAgYm9vbCBoYW5kbGVk
ID0gZmFsc2U7Ci0gICAgICAgIFJlbmRlck9iamVjdCogbmV4dCA9IGhhbmRsZVNwZWNpYWxDaGls
ZChjaGlsZCwgbWFyZ2luSW5mbywgY29tcGFjdEluZm8sIGhhbmRsZWQpOworICAgICAgICBSZW5k
ZXJCb3gqIG5leHQgPSBoYW5kbGVTcGVjaWFsQ2hpbGQoY2hpbGQsIG1hcmdpbkluZm8sIGNvbXBh
Y3RJbmZvLCBoYW5kbGVkKTsKICAgICAgICAgaWYgKGhhbmRsZWQpIHsKICAgICAgICAgICAgIGNo
aWxkID0gbmV4dDsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTMwMSwxMyArMTMwMywxMyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvCiAgICAgICAgIGludCB5
UG9zRXN0aW1hdGUgPSBlc3RpbWF0ZVZlcnRpY2FsUG9zaXRpb24oY2hpbGQsIG1hcmdpbkluZm8p
OwogCiAgICAgICAgIC8vIENhY2hlIG91ciBvbGQgcmVjdCBzbyB0aGF0IHdlIGNhbiBkaXJ0eSB0
aGUgcHJvcGVyIHJlcGFpbnQgcmVjdHMgaWYgdGhlIGNoaWxkIG1vdmVzLgotICAgICAgICBJbnRS
ZWN0IG9sZFJlY3QoY2hpbGQtPnhQb3MoKSwgY2hpbGQtPnlQb3MoKSAsIGNoaWxkLT53aWR0aCgp
LCBjaGlsZC0+aGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IG9sZFJlY3QoY2hpbGQtPngoKSwg
Y2hpbGQtPnkoKSAsIGNoaWxkLT53aWR0aCgpLCBjaGlsZC0+aGVpZ2h0KCkpOwogI2lmbmRlZiBO
REVCVUcKICAgICAgICAgSW50U2l6ZSBvbGRMYXlvdXREZWx0YSA9IHZpZXcoKS0+bGF5b3V0RGVs
dGEoKTsKICNlbmRpZgogICAgICAgICAvLyBHbyBhaGVhZCBhbmQgcG9zaXRpb24gdGhlIGNoaWxk
IGFzIHRob3VnaCBpdCBkaWRuJ3QgY29sbGFwc2Ugd2l0aCB0aGUgdG9wLgotICAgICAgICB2aWV3
KCktPmFkZExheW91dERlbHRhKEludFNpemUoMCwgY2hpbGQtPnlQb3MoKSAtIHlQb3NFc3RpbWF0
ZSkpOwotICAgICAgICBjaGlsZC0+c2V0UG9zKGNoaWxkLT54UG9zKCksIHlQb3NFc3RpbWF0ZSk7
CisgICAgICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZSgwLCBjaGlsZC0+eSgpIC0g
eVBvc0VzdGltYXRlKSk7CisgICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+eCgpLCB5
UG9zRXN0aW1hdGUpOwogCiAgICAgICAgIGJvb2wgbWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0cyA9
IGZhbHNlOwogICAgICAgICBpZiAoeVBvc0VzdGltYXRlICE9IG9sZFJlY3QueSgpICYmICFjaGls
ZC0+YXZvaWRzRmxvYXRzKCkgJiYgY2hpbGQtPmNvbnRhaW5zRmxvYXRzKCkpCkBAIC0xMzE2LDcg
KzEzMTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvCiAgICAg
ICAgICAgICAvLyBJZiBhbiBlbGVtZW50IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoZSBwcmVzZW5j
ZSBvZiBmbG9hdHMsIHRoZW4gYWx3YXlzIG1hcmsgaXQgZm9yCiAgICAgICAgICAgICAvLyBsYXlv
dXQuCiAgICAgICAgICAgICBpbnQgZmIgPSBtYXgocHJldmlvdXNGbG9hdEJvdHRvbSwgZmxvYXRC
b3R0b20oKSk7Ci0gICAgICAgICAgICBpZiAoZmIgPiBtX2hlaWdodCB8fCBmYiA+IHlQb3NFc3Rp
bWF0ZSkKKyAgICAgICAgICAgIGlmIChmYiA+IGhlaWdodCgpIHx8IGZiID4geVBvc0VzdGltYXRl
KQogICAgICAgICAgICAgICAgIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSB0cnVlOwogICAg
ICAgICB9CiAKQEAgLTEzNDcsMjUgKzEzNDksMjUgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
QmxvY2tDaGlsZHJlbihibwogICAgICAgICBkZXRlcm1pbmVIb3Jpem9udGFsUG9zaXRpb24oY2hp
bGQpOwogCiAgICAgICAgIC8vIFVwZGF0ZSBvdXIgaGVpZ2h0IG5vdyB0aGF0IHRoZSBjaGlsZCBo
YXMgYmVlbiBwbGFjZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24uCi0gICAgICAgIG1faGVpZ2h0
ICs9IGNoaWxkLT5oZWlnaHQoKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgY2hpbGQt
PmhlaWdodCgpKTsKICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5Cb3R0b21Db2xs
YXBzZSgpID09IE1TRVBBUkFURSkgewotICAgICAgICAgICAgbV9oZWlnaHQgKz0gY2hpbGQtPm1h
cmdpbkJvdHRvbSgpOworICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgY2hpbGQtPm1h
cmdpbkJvdHRvbSgpKTsKICAgICAgICAgICAgIG1hcmdpbkluZm8uY2xlYXJNYXJnaW4oKTsKICAg
ICAgICAgfQogICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIG92ZXJoYW5naW5nIGZsb2F0cyB0
aGF0IGludHJ1ZGUgaW50byBmb2xsb3dpbmcgc2libGluZ3MgKG9yIHBvc3NpYmx5IG91dAogICAg
ICAgICAvLyBvZiB0aGlzIGJsb2NrKSwgdGhlbiB0aGUgcGFyZW50IGdldHMgbm90aWZpZWQgb2Yg
dGhlIGZsb2F0cyBub3cuCi0gICAgICAgIG1heEZsb2F0Qm90dG9tID0gbWF4KG1heEZsb2F0Qm90
dG9tLCBhZGRPdmVyaGFuZ2luZ0Zsb2F0cyhzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayAqPihjaGls
ZCksIC1jaGlsZC0+eFBvcygpLCAtY2hpbGQtPnlQb3MoKSwgIWNoaWxkTmVlZGVkTGF5b3V0KSk7
CisgICAgICAgIG1heEZsb2F0Qm90dG9tID0gbWF4KG1heEZsb2F0Qm90dG9tLCBhZGRPdmVyaGFu
Z2luZ0Zsb2F0cyhzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKSwgLWNoaWxkLT54KCks
IC1jaGlsZC0+eSgpLCAhY2hpbGROZWVkZWRMYXlvdXQpKTsKIAogICAgICAgICAvLyBVcGRhdGUg
b3VyIG92ZXJmbG93IGluIGNhc2UgdGhlIGNoaWxkIHNwaWxscyBvdXQgdGhlIGJsb2NrLgotICAg
ICAgICBtX292ZXJmbG93VG9wID0gbWluKG1fb3ZlcmZsb3dUb3AsIGNoaWxkLT55UG9zKCkgKyBj
aGlsZC0+b3ZlcmZsb3dUb3AoZmFsc2UpKTsKLSAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1h
eChtX292ZXJmbG93SGVpZ2h0LCBtX2hlaWdodCArIGNoaWxkLT5vdmVyZmxvd0hlaWdodChmYWxz
ZSkgLSBjaGlsZC0+aGVpZ2h0KCkpOwotICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgoY2hp
bGQtPnhQb3MoKSArIGNoaWxkLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSwgbV9vdmVyZmxvd1dpZHRo
KTsKLSAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4oY2hpbGQtPnhQb3MoKSArIGNoaWxkLT5v
dmVyZmxvd0xlZnQoZmFsc2UpLCBtX292ZXJmbG93TGVmdCk7CisgICAgICAgIG1fb3ZlcmZsb3dU
b3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgY2hpbGQtPnkoKSArIGNoaWxkLT5vdmVyZmxvd1RvcChm
YWxzZSkpOworICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQs
IGhlaWdodCgpICsgY2hpbGQtPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSAtIGNoaWxkLT5oZWlnaHQo
KSk7CisgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChjaGlsZC0+eCgpICsgY2hpbGQtPm92
ZXJmbG93V2lkdGgoZmFsc2UpLCBtX292ZXJmbG93V2lkdGgpOworICAgICAgICBtX292ZXJmbG93
TGVmdCA9IG1pbihjaGlsZC0+eCgpICsgY2hpbGQtPm92ZXJmbG93TGVmdChmYWxzZSksIG1fb3Zl
cmZsb3dMZWZ0KTsKICAgICAgICAgCiAgICAgICAgIC8vIEluc2VydCBvdXIgY29tcGFjdCBpbnRv
IHRoZSBibG9jayBtYXJnaW4gaWYgd2UgaGF2ZSBvbmUuCiAgICAgICAgIGluc2VydENvbXBhY3RJ
Zk5lZWRlZChjaGlsZCwgY29tcGFjdEluZm8pOwogCi0gICAgICAgIEludFNpemUgY2hpbGRPZmZz
ZXQoY2hpbGQtPnhQb3MoKSAtIG9sZFJlY3QueCgpLCBjaGlsZC0+eVBvcygpIC0gb2xkUmVjdC55
KCkpOworICAgICAgICBJbnRTaXplIGNoaWxkT2Zmc2V0KGNoaWxkLT54KCkgLSBvbGRSZWN0Lngo
KSwgY2hpbGQtPnkoKSAtIG9sZFJlY3QueSgpKTsKICAgICAgICAgaWYgKGNoaWxkT2Zmc2V0Lndp
ZHRoKCkgfHwgY2hpbGRPZmZzZXQuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIHZpZXcoKS0+YWRk
TGF5b3V0RGVsdGEoY2hpbGRPZmZzZXQpOwogCkBAIC0xMzgwLDcgKzEzODIsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvCiAgICAgICAgICAgICBjaGlsZC0+cmVw
YWludCgpOwogCiAgICAgICAgIEFTU0VSVChvbGRMYXlvdXREZWx0YSA9PSB2aWV3KCktPmxheW91
dERlbHRhKCkpOwotICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAg
ICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpOwogICAgIH0KIAogICAgIC8vIE5vdyBk
byB0aGUgaGFuZGxpbmcgb2YgdGhlIGJvdHRvbSBvZiB0aGUgYmxvY2ssIGFkZGluZyBpbiBvdXIg
Ym90dG9tIGJvcmRlci9wYWRkaW5nIGFuZApAQCAtMTM5Myw3ICsxMzk1LDcgQEAgYm9vbCBSZW5k
ZXJCbG9jazo6bGF5b3V0T25seVBvc2l0aW9uZWRPYgogICAgIGlmICghcG9zQ2hpbGROZWVkc0xh
eW91dCgpIHx8IG5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSB8fCBzZWxmTmVlZHNMYXlvdXQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRl
UHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4UG9zKCksIHlQb3MoKSksIG1faGFzQ29sdW1u
cyB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkpOworICAgIExheW91dFN0YXRl
TWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBt
X2hhc0NvbHVtbnMgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKIAogICAg
IGlmIChuZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpKSB7CiAgICAgICAgIHRyeUxheW91
dERvaW5nUG9zaXRpb25lZE1vdmVtZW50T25seSgpOwpAQCAtMTQxNiw3ICsxNDE4LDcgQEAgYm9v
bCBSZW5kZXJCbG9jazo6bGF5b3V0T25seVBvc2l0aW9uZWRPYgogdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0UG9zaXRpb25lZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuKQogewogICAgIGlm
IChtX3Bvc2l0aW9uZWRPYmplY3RzKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcjsKKyAgICAg
ICAgUmVuZGVyQm94KiByOwogICAgICAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmpl
Y3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25lZE9iamVj
dHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgciA9ICppdDsKQEAg
LTE0NDMsNyArMTQ0NSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmpl
Y3QKIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtQb3NpdGlvbmVkT2JqZWN0c0ZvckxheW91dCgpCiB7
CiAgICAgaWYgKG1fcG9zaXRpb25lZE9iamVjdHMpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBy
OworICAgICAgICBSZW5kZXJCb3gqIHI7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1fcG9zaXRp
b25lZE9iamVjdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlv
bmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICByID0g
Kml0OwpAQCAtMTQ3Miw3ICsxNDc0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJo
YW5naW5nRmxvYQogICAgICAgICAgICAgLy8gT25seSByZXBhaW50IHRoZSBvYmplY3QgaWYgaXQg
aXMgb3ZlcmhhbmdpbmcsIGlzIG5vdCBpbiBpdHMgb3duIGxheWVyLCBhbmQKICAgICAgICAgICAg
IC8vIGlzIG91ciByZXNwb25zaWJpbGl0eSB0byBwYWludCAobV9zaG91bGRQYWludCBpcyBzZXQp
LiBXaGVuIHBhaW50QWxsRGVzY2VuZGFudHMgaXMgdHJ1ZSwgdGhlIGxhdHRlcgogICAgICAgICAg
ICAgLy8gY29uZGl0aW9uIGlzIHJlcGxhY2VkIHdpdGggYmVpbmcgYSBkZXNjZW5kYW50IG9mIHVz
LgotICAgICAgICAgICAgaWYgKHItPm1fYm90dG9tID4gbV9oZWlnaHQgJiYgKHBhaW50QWxsRGVz
Y2VuZGFudHMgJiYgci0+bV9yZW5kZXJlci0+aXNEZXNjZW5kYW50T2YodGhpcykgfHwgci0+bV9z
aG91bGRQYWludCkgJiYgIXItPm1fcmVuZGVyZXItPmhhc0xheWVyKCkpIHsgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoci0+bV9ib3R0b20gPiBoZWlnaHQoKSAmJiAocGFpbnRBbGxE
ZXNjZW5kYW50cyAmJiByLT5tX3JlbmRlcmVyLT5pc0Rlc2NlbmRhbnRPZih0aGlzKSB8fCByLT5t
X3Nob3VsZFBhaW50KSAmJiAhci0+bV9yZW5kZXJlci0+aGFzTGF5ZXIoKSkgeyAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICByLT5tX3JlbmRlcmVyLT5yZXBhaW50KCk7CiAgICAgICAg
ICAgICAgICAgci0+bV9yZW5kZXJlci0+cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKCk7CiAgICAg
ICAgICAgICB9CkBAIC0xNDgzLDggKzE0ODUsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZXBhaW50
T3ZlcmhhbmdpbmdGbG9hCiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICB0eCArPSBtX3g7Ci0gICAgdHkgKz0gbV95
OworICAgIHR4ICs9IHgoKTsKKyAgICB0eSArPSBtX2ZyYW1lUmVjdC55KCk7CiAgICAgCiAgICAg
UGFpbnRQaGFzZSBwaGFzZSA9IHBhaW50SW5mby5waGFzZTsKIApAQCAtMTYxOSwxMiArMTYyMSwx
MiBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAgICAgaW5mby5w
YWludGluZ1Jvb3QgPSBwYWludGluZ1Jvb3RGb3JDaGlsZHJlbihwYWludEluZm8pOwogICAgIGJv
b2wgaXNQcmludGluZyA9IGRvY3VtZW50KCktPnByaW50aW5nKCk7CiAKLSAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKSB7ICAgICAgICAKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENo
aWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7ICAgICAg
ICAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMsIGFuZCBp
ZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwuCiAgICAgICAgIGlmIChpc1ByaW50aW5nICYmICFj
aGlsZHJlbklubGluZSgpICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9PSBQ
QkFMV0FZUyAmJgotICAgICAgICAgICAgaW5Sb290QmxvY2tDb250ZXh0KCkgJiYgKHR5ICsgY2hp
bGQtPnlQb3MoKSkgPiBwYWludEluZm8ucmVjdC55KCkgJiYgCi0gICAgICAgICAgICAodHkgKyBj
aGlsZC0+eVBvcygpKSA8IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7Ci0gICAgICAgICAgICB2
aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIGNoaWxkLT55UG9zKCksIHRoaXMsIHRydWUp
OworICAgICAgICAgICAgaW5Sb290QmxvY2tDb250ZXh0KCkgJiYgKHR5ICsgY2hpbGQtPnkoKSkg
PiBwYWludEluZm8ucmVjdC55KCkgJiYgCisgICAgICAgICAgICAodHkgKyBjaGlsZC0+eSgpKSA8
IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7CisgICAgICAgICAgICB2aWV3KCktPnNldEJlc3RU
cnVuY2F0ZWRBdCh0eSArIGNoaWxkLT55KCksIHRoaXMsIHRydWUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTE2MzMsOSArMTYzNSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKIAogICAgICAgICAvLyBDaGVjayBmb3IgcGFnZS1icmVh
ay1hZnRlcjogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgogICAgICAg
ICBpZiAoaXNQcmludGluZyAmJiAhY2hpbGRyZW5JbmxpbmUoKSAmJiBjaGlsZC0+c3R5bGUoKS0+
cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUyAmJiAKLSAgICAgICAgICAgIGluUm9vdEJsb2Nr
Q29udGV4dCgpICYmICh0eSArIGNoaWxkLT55UG9zKCkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFp
bnRJbmZvLnJlY3QueSgpICYmIAotICAgICAgICAgICAgKHR5ICsgY2hpbGQtPnlQb3MoKSArIGNo
aWxkLT5oZWlnaHQoKSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgewotICAgICAgICAgICAg
dmlldygpLT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkgKyBjaGlsZC0+eVBvcygpICsgY2hpbGQtPmhl
aWdodCgpICsgbWF4KDAsIGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5Cb3R0b20oKSksIHRoaXMsIHRy
dWUpOworICAgICAgICAgICAgaW5Sb290QmxvY2tDb250ZXh0KCkgJiYgKHR5ICsgY2hpbGQtPnko
KSArIGNoaWxkLT5oZWlnaHQoKSkgPiBwYWludEluZm8ucmVjdC55KCkgJiYgCisgICAgICAgICAg
ICAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpKSA8IHBhaW50SW5mby5yZWN0LmJv
dHRvbSgpKSB7CisgICAgICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIGNo
aWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkgKyBtYXgoMCwgY2hpbGQtPmNvbGxhcHNlZE1hcmdp
bkJvdHRvbSgpKSwgdGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xNzEyLDcgKzE3MTQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVj
dChQYWludEluZm8mCiAKICAgICAvLyA1LiBwYWludCBvdXRsaW5lLgogICAgIGlmICghaW5saW5l
RmxvdyAmJiAocGFpbnRQaGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludFBoYXNlID09
IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgJiYgaGFzT3V0bGluZSgpICYmIHN0eWxlKCktPnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFKQotICAgICAgICBSZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZShw
YWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSwgc3R5bGUoKSk7Cisg
ICAgICAgIFJlbmRlckJveDo6cGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHks
IHdpZHRoKCksIGhlaWdodCgpLCBzdHlsZSgpKTsKIAogICAgIC8vIDYuIHBhaW50IGNvbnRpbnVh
dGlvbiBvdXRsaW5lcy4KICAgICBpZiAoIWlubGluZUZsb3cgJiYgKHBhaW50UGhhc2UgPT0gUGFp
bnRQaGFzZU91dGxpbmUgfHwgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcykp
IHsKQEAgLTE3MjEsOCArMTcyMyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBh
aW50SW5mbyYKICAgICAgICAgICAgIGlmICghaW5saW5lRmxvdy0+aGFzTGF5ZXIoKSkKICAgICAg
ICAgICAgICAgICBjb250YWluaW5nQmxvY2soKS0+YWRkQ29udGludWF0aW9uV2l0aE91dGxpbmUo
aW5saW5lRmxvdyk7CiAgICAgICAgICAgICBlbHNlIGlmICghaW5saW5lRmxvdy0+Zmlyc3RMaW5l
Qm94KCkpCi0gICAgICAgICAgICAgICAgaW5saW5lRmxvdy0+cGFpbnRPdXRsaW5lKHBhaW50SW5m
by5jb250ZXh0LCB0eCAtIHhQb3MoKSArIGlubGluZUZsb3ctPmNvbnRhaW5pbmdCbG9jaygpLT54
UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geVBv
cygpICsgaW5saW5lRmxvdy0+Y29udGFpbmluZ0Jsb2NrKCktPnlQb3MoKSk7CisgICAgICAgICAg
ICAgICAgaW5saW5lRmxvdy0+cGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCB0eCAtIHgo
KSArIGlubGluZUZsb3ctPmNvbnRhaW5pbmdCbG9jaygpLT54KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geSgpICsgaW5saW5lRmxvdy0+Y29udGFpbmlu
Z0Jsb2NrKCktPnkoKSk7CiAgICAgICAgIH0KICAgICAgICAgcGFpbnRDb250aW51YXRpb25PdXRs
aW5lcyhwYWludEluZm8sIHR4LCB0eSk7CiAgICAgfQpAQCAtMTc0OCw4ICsxNzUwLDggQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMoUGFpbnRJbmZvJgogICAgICAgICBpZiAoci0+bV9z
aG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJlci0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAg
UGFpbnRJbmZvIGN1cnJlbnRQYWludEluZm8ocGFpbnRJbmZvKTsKICAgICAgICAgICAgIGN1cnJl
bnRQYWludEluZm8ucGhhc2UgPSBwcmVzZXJ2ZVBoYXNlID8gcGFpbnRJbmZvLnBoYXNlIDogUGFp
bnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKLSAgICAgICAgICAgIGludCBjdXJyZW50VFggPSB0eCAr
IHItPm1fbGVmdCAtIHItPm1fcmVuZGVyZXItPnhQb3MoKSArIHItPm1fcmVuZGVyZXItPm1hcmdp
bkxlZnQoKTsKLSAgICAgICAgICAgIGludCBjdXJyZW50VFkgPSB0eSArIHItPm1fdG9wIC0gci0+
bV9yZW5kZXJlci0+eVBvcygpICsgci0+bV9yZW5kZXJlci0+bWFyZ2luVG9wKCk7CisgICAgICAg
ICAgICBpbnQgY3VycmVudFRYID0gdHggKyByLT5tX2xlZnQgLSByLT5tX3JlbmRlcmVyLT54KCkg
KyByLT5tX3JlbmRlcmVyLT5tYXJnaW5MZWZ0KCk7CisgICAgICAgICAgICBpbnQgY3VycmVudFRZ
ID0gdHkgKyByLT5tX3RvcCAtIHItPm1fcmVuZGVyZXItPnkoKSArIHItPm1fcmVuZGVyZXItPm1h
cmdpblRvcCgpOwogICAgICAgICAgICAgci0+bV9yZW5kZXJlci0+cGFpbnQoY3VycmVudFBhaW50
SW5mbywgY3VycmVudFRYLCBjdXJyZW50VFkpOwogICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVBo
YXNlKSB7CiAgICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IFBhaW50UGhh
c2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7CkBAIC0xODI5LDggKzE4MzEsOCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpwYWludENvbnRpbnVhdGlvbk91dGxpCiAgICAgICAgIFJlbmRlckZsb3cqIGZsb3cg
PSAqaXQ7CiAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGZsb3ctPmNvbnRhaW5pbmdCbG9j
aygpOwogICAgICAgICBmb3IgKCA7IGJsb2NrICYmIGJsb2NrICE9IHRoaXM7IGJsb2NrID0gYmxv
Y2stPmNvbnRhaW5pbmdCbG9jaygpKSB7Ci0gICAgICAgICAgICB0eCArPSBibG9jay0+eFBvcygp
OwotICAgICAgICAgICAgdHkgKz0gYmxvY2stPnlQb3MoKTsKKyAgICAgICAgICAgIHR4ICs9IGJs
b2NrLT54KCk7CisgICAgICAgICAgICB0eSArPSBibG9jay0+eSgpOwogICAgICAgICB9CiAgICAg
ICAgIEFTU0VSVChibG9jayk7ICAgCiAgICAgICAgIGZsb3ctPnBhaW50T3V0bGluZShpbmZvLmNv
bnRleHQsIHR4LCB0eSk7CkBAIC0xOTAwLDcgKzE5MDIsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9j
azo6c2VsZWN0aW9uR2FwUmVjdHMoCiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAg
ICBhYnNDb250ZW50UG9pbnQgLT0gbGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAK
LSAgICBpbnQgbGFzdFRvcCA9IC1ib3JkZXJUb3BFeHRyYSgpOworICAgIGludCBsYXN0VG9wID0g
LWludHJpbnNpY1BhZGRpbmdUb3AoKTsKICAgICBpbnQgbGFzdExlZnQgPSBsZWZ0U2VsZWN0aW9u
T2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwogICAgIGludCBsYXN0UmlnaHQgPSByaWdodFNlbGVjdGlv
bk9mZnNldCh0aGlzLCBsYXN0VG9wKTsKICAgICAKQEAgLTE5MTAsNyArMTkxMiw3IEBAIEdhcFJl
Y3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBSZWN0cygKIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAg
ICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgJiYgcGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgIGludCBsYXN0VG9wID0gLWJvcmRlclRvcEV4
dHJhKCk7CisgICAgICAgIGludCBsYXN0VG9wID0gLWludHJpbnNpY1BhZGRpbmdUb3AoKTsKICAg
ICAgICAgaW50IGxhc3RMZWZ0ID0gbGVmdFNlbGVjdGlvbk9mZnNldCh0aGlzLCBsYXN0VG9wKTsK
ICAgICAgICAgaW50IGxhc3RSaWdodCA9IHJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RU
b3ApOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwpAQCAtMTkxOSwxNSArMTky
MSwxNSBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQYWludEluCiAgICAgfQog
fQogCi1zdGF0aWMgdm9pZCBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMoY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8qIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIExpc3RIYXNoU2V0PFJl
bmRlck9iamVjdCo+KiBwb3NpdGlvbmVkT2JqZWN0cykKK3N0YXRpYyB2b2lkIGNsaXBPdXRQb3Np
dGlvbmVkT2JqZWN0cyhjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyogcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSwgTGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj4qIHBvc2l0aW9uZWRPYmplY3Rz
KQogewogICAgIGlmICghcG9zaXRpb25lZE9iamVjdHMpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBMaXN0SGFzaFNldDxSZW5kZXJPYmplY3QqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcG9z
aXRpb25lZE9iamVjdHMtPmVuZCgpOwotICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVuZGVyT2JqZWN0
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHIgPSAqaXQ7Ci0gICAgICAgIHBh
aW50SW5mby0+Y29udGV4dC0+Y2xpcE91dChJbnRSZWN0KHR4ICsgci0+eFBvcygpLCB0eSArIHIt
PnlQb3MoKSwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkpKTsKKyAgICBMaXN0SGFzaFNldDxSZW5k
ZXJCb3gqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwor
ICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcG9z
aXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5k
ZXJCb3gqIHIgPSAqaXQ7CisgICAgICAgIHBhaW50SW5mby0+Y29udGV4dC0+Y2xpcE91dChJbnRS
ZWN0KHR4ICsgci0+eCgpLCB0eSArIHItPnkoKSwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkpKTsK
ICAgICB9CiB9CiAKQEAgLTE5NDEsNyArMTk0Myw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpm
aWxsU2VsZWN0aW9uR2FwcygKICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50
SW5mbywgdHgsIHR5LCBtX3Bvc2l0aW9uZWRPYmplY3RzKTsKICAgICAgICAgaWYgKGlzQm9keSgp
IHx8IGlzUm9vdCgpKSAvLyBUaGUgPGJvZHk+IG11c3QgbWFrZSBzdXJlIHRvIGV4YW1pbmUgaXRz
IGNvbnRhaW5pbmdCbG9jaydzIHBvc2l0aW9uZWQgb2JqZWN0cy4KICAgICAgICAgICAgIGZvciAo
UmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7IGNiICYmICFjYi0+aXNSZW5kZXJW
aWV3KCk7IGNiID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICAgICAgICAgIGNsaXBP
dXRQb3NpdGlvbmVkT2JqZWN0cyhwYWludEluZm8sIGNiLT54UG9zKCksIGNiLT55UG9zKCksIGNi
LT5tX3Bvc2l0aW9uZWRPYmplY3RzKTsKKyAgICAgICAgICAgICAgICBjbGlwT3V0UG9zaXRpb25l
ZE9iamVjdHMocGFpbnRJbmZvLCBjYi0+eCgpLCBjYi0+eSgpLCBjYi0+bV9wb3NpdGlvbmVkT2Jq
ZWN0cyk7CiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgZm9y
IChEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGlu
Z09iamVjdHMpOyBpdC5jdXJyZW50KCk7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdCogciA9IGl0LmN1cnJlbnQoKTsKQEAgLTE5NzMsNyArMTk3NSw3IEBAIEdhcFJlY3Rz
IFJlbmRlckJsb2NrOjpmaWxsU2VsZWN0aW9uR2FwcygKIAogICAgIC8vIEdvIGFoZWFkIGFuZCBm
aWxsIHRoZSB2ZXJ0aWNhbCBnYXAgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbSBvZiBvdXIgYmxv
Y2sgaWYgdGhlIHNlbGVjdGlvbiBleHRlbmRzIHBhc3Qgb3VyIGJsb2NrLgogICAgIGlmIChyb290
QmxvY2sgPT0gdGhpcyAmJiAobV9zZWxlY3Rpb25TdGF0ZSAhPSBTZWxlY3Rpb25Cb3RoICYmIG1f
c2VsZWN0aW9uU3RhdGUgIT0gU2VsZWN0aW9uRW5kKSkKLSAgICAgICAgcmVzdWx0LnVuaXRlQ2Vu
dGVyKGZpbGxWZXJ0aWNhbFNlbGVjdGlvbkdhcChsYXN0VG9wLCBsYXN0TGVmdCwgbGFzdFJpZ2h0
LCB0eSArIGhlaWdodCgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSwKKyAgICAgICAgcmVzdWx0LnVu
aXRlQ2VudGVyKGZpbGxWZXJ0aWNhbFNlbGVjdGlvbkdhcChsYXN0VG9wLCBsYXN0TGVmdCwgbGFz
dFJpZ2h0LCB0eSArIGhlaWdodCgpICsgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RCbG9jaywg
YmxvY2tYLCBibG9ja1ksIHBhaW50SW5mbykpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0y
MDM1LDEwICsyMDM3LDEwIEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpmaWxsQmxvY2tTZWxlY3Rp
b24KICAgICBHYXBSZWN0cyByZXN1bHQ7CiAKICAgICAvLyBHbyBhaGVhZCBhbmQganVtcCByaWdo
dCB0byB0aGUgZmlyc3QgYmxvY2sgY2hpbGQgdGhhdCBjb250YWlucyBzb21lIHNlbGVjdGVkIG9i
amVjdHMuCi0gICAgUmVuZGVyT2JqZWN0KiBjdXJyOwotICAgIGZvciAoY3VyciA9IGZpcnN0Q2hp
bGQoKTsgY3VyciAmJiBjdXJyLT5zZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5vbmU7IGN1
cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7IH0KKyAgICBSZW5kZXJCb3gqIGN1cnI7CisgICAg
Zm9yIChjdXJyID0gZmlyc3RDaGlsZEJveCgpOyBjdXJyICYmIGN1cnItPnNlbGVjdGlvblN0YXRl
KCkgPT0gU2VsZWN0aW9uTm9uZTsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nQm94KCkpIHsgfQog
Ci0gICAgZm9yIChib29sIHNhd1NlbGVjdGlvbkVuZCA9IGZhbHNlOyBjdXJyICYmICFzYXdTZWxl
Y3Rpb25FbmQ7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChib29sIHNh
d1NlbGVjdGlvbkVuZCA9IGZhbHNlOyBjdXJyICYmICFzYXdTZWxlY3Rpb25FbmQ7IGN1cnIgPSBj
dXJyLT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAgIFNlbGVjdGlvblN0YXRlIGNoaWxkU3Rh
dGUgPSBjdXJyLT5zZWxlY3Rpb25TdGF0ZSgpOwogICAgICAgICBpZiAoY2hpbGRTdGF0ZSA9PSBT
ZWxlY3Rpb25Cb3RoIHx8IGNoaWxkU3RhdGUgPT0gU2VsZWN0aW9uRW5kKQogICAgICAgICAgICAg
c2F3U2VsZWN0aW9uRW5kID0gdHJ1ZTsKQEAgLTIwNjEsNyArMjA2Myw3IEBAIEdhcFJlY3RzIFJl
bmRlckJsb2NrOjpmaWxsQmxvY2tTZWxlY3Rpb24KICAgICAgICAgICAgIGlmIChjaGlsZFN0YXRl
ID09IFNlbGVjdGlvbkVuZCB8fCBjaGlsZFN0YXRlID09IFNlbGVjdGlvbkluc2lkZSkKICAgICAg
ICAgICAgICAgICAvLyBGaWxsIHRoZSBnYXAgYWJvdmUgdGhlIG9iamVjdC4KICAgICAgICAgICAg
ICAgICByZXN1bHQudW5pdGVDZW50ZXIoZmlsbFZlcnRpY2FsU2VsZWN0aW9uR2FwKGxhc3RUb3As
IGxhc3RMZWZ0LCBsYXN0UmlnaHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgKyBjdXJyLT55UG9zKCksIHJvb3RCbG9jaywg
YmxvY2tYLCBibG9ja1ksIHBhaW50SW5mbykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgKyBjdXJyLT55KCksIHJvb3RCbG9j
aywgYmxvY2tYLCBibG9ja1ksIHBhaW50SW5mbykpOwogCiAgICAgICAgICAgICAvLyBPbmx5IGZp
bGwgc2lkZSBnYXBzIGZvciBvYmplY3RzIHRoYXQgcGFpbnQgdGhlaXIgb3duIHNlbGVjdGlvbiBp
ZiB3ZSBrbm93IGZvciBzdXJlIHRoZSBzZWxlY3Rpb24gaXMgZ29pbmcgdG8gZXh0ZW5kIGFsbCB0
aGUgd2F5ICpwYXN0KgogICAgICAgICAgICAgLy8gb3VyIG9iamVjdC4gIFdlIGtub3cgdGhpcyBp
ZiB0aGUgc2VsZWN0aW9uIGRpZCBub3QgZW5kIGluc2lkZSBvdXIgb2JqZWN0LgpAQCAtMjA3Mywx
OSArMjA3NSwxOSBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6ZmlsbEJsb2NrU2VsZWN0aW9uCiAg
ICAgICAgICAgICBnZXRIb3Jpem9udGFsU2VsZWN0aW9uR2FwSW5mbyhjaGlsZFN0YXRlLCBsZWZ0
R2FwLCByaWdodEdhcCk7CiAKICAgICAgICAgICAgIGlmIChsZWZ0R2FwKQotICAgICAgICAgICAg
ICAgIHJlc3VsdC51bml0ZUxlZnQoZmlsbExlZnRTZWxlY3Rpb25HYXAodGhpcywgY3Vyci0+eFBv
cygpLCBjdXJyLT55UG9zKCksIGN1cnItPmhlaWdodCgpLCByb290QmxvY2ssIGJsb2NrWCwgYmxv
Y2tZLCB0eCwgdHksIHBhaW50SW5mbykpOworICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUxl
ZnQoZmlsbExlZnRTZWxlY3Rpb25HYXAodGhpcywgY3Vyci0+eCgpLCBjdXJyLT55KCksIGN1cnIt
PmhlaWdodCgpLCByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHksIHBhaW50SW5mbykp
OwogICAgICAgICAgICAgaWYgKHJpZ2h0R2FwKQotICAgICAgICAgICAgICAgIHJlc3VsdC51bml0
ZVJpZ2h0KGZpbGxSaWdodFNlbGVjdGlvbkdhcCh0aGlzLCBjdXJyLT54UG9zKCkgKyBjdXJyLT53
aWR0aCgpLCBjdXJyLT55UG9zKCksIGN1cnItPmhlaWdodCgpLCByb290QmxvY2ssIGJsb2NrWCwg
YmxvY2tZLCB0eCwgdHksIHBhaW50SW5mbykpOworICAgICAgICAgICAgICAgIHJlc3VsdC51bml0
ZVJpZ2h0KGZpbGxSaWdodFNlbGVjdGlvbkdhcCh0aGlzLCBjdXJyLT54KCkgKyBjdXJyLT53aWR0
aCgpLCBjdXJyLT55KCksIGN1cnItPmhlaWdodCgpLCByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZ
LCB0eCwgdHksIHBhaW50SW5mbykpOwogCiAgICAgICAgICAgICAvLyBVcGRhdGUgbGFzdFRvcCB0
byBiZSBqdXN0IHVuZGVybmVhdGggdGhlIG9iamVjdC4gIGxhc3RMZWZ0IGFuZCBsYXN0UmlnaHQg
ZXh0ZW5kIGFzIGZhciBhcwogICAgICAgICAgICAgLy8gdGhleSBjYW4gd2l0aG91dCBidW1waW5n
IGludG8gZmxvYXRpbmcgb3IgcG9zaXRpb25lZCBvYmplY3RzLiAgSWRlYWxseSB0aGV5IHdpbGwg
Z28gcmlnaHQgdXAKICAgICAgICAgICAgIC8vIHRvIHRoZSBib3JkZXIgb2YgdGhlIHJvb3Qgc2Vs
ZWN0aW9uIGJsb2NrLgotICAgICAgICAgICAgbGFzdFRvcCA9ICh0eSAtIGJsb2NrWSkgKyAoY3Vy
ci0+eVBvcygpICsgY3Vyci0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgbGFzdExlZnQgPSBsZWZ0
U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+eVBvcygpICsgY3Vyci0+aGVpZ2h0KCkp
OwotICAgICAgICAgICAgbGFzdFJpZ2h0ID0gcmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2Nr
LCBjdXJyLT55UG9zKCkgKyBjdXJyLT5oZWlnaHQoKSk7CisgICAgICAgICAgICBsYXN0VG9wID0g
KHR5IC0gYmxvY2tZKSArIChjdXJyLT55KCkgKyBjdXJyLT5oZWlnaHQoKSk7CisgICAgICAgICAg
ICBsYXN0TGVmdCA9IGxlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBjdXJyLT55KCkgKyBj
dXJyLT5oZWlnaHQoKSk7CisgICAgICAgICAgICBsYXN0UmlnaHQgPSByaWdodFNlbGVjdGlvbk9m
ZnNldChyb290QmxvY2ssIGN1cnItPnkoKSArIGN1cnItPmhlaWdodCgpKTsKICAgICAgICAgfSBl
bHNlIGlmIChjaGlsZFN0YXRlICE9IFNlbGVjdGlvbk5vbmUpCiAgICAgICAgICAgICAvLyBXZSBt
dXN0IGJlIGEgYmxvY2sgdGhhdCBoYXMgc29tZSBzZWxlY3RlZCBvYmplY3QgaW5zaWRlIGl0LiAg
R28gYWhlYWQgYW5kIHJlY3VyLgotICAgICAgICAgICAgcmVzdWx0LnVuaXRlKHN0YXRpY19jYXN0
PFJlbmRlckJsb2NrKj4oY3VyciktPmZpbGxTZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywgYmxvY2tY
LCBibG9ja1ksIHR4ICsgY3Vyci0+eFBvcygpLCB0eSArIGN1cnItPnlQb3MoKSwgCisgICAgICAg
ICAgICByZXN1bHQudW5pdGUoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjdXJyKS0+ZmlsbFNl
bGVjdGlvbkdhcHMocm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHggKyBjdXJyLT54KCksIHR5
ICsgY3Vyci0+eSgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VG9wLCBsYXN0TGVmdCwgbGFz
dFJpZ2h0LCBwYWludEluZm8pKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIxNjUs
MTkgKzIxNjcsMTkgQEAgdm9pZCBSZW5kZXJCbG9jazo6Z2V0SG9yaXpvbnRhbFNlbGVjdGlvbgog
ICAgICAgICAgICAgICAgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kICYmICFs
dHIpOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmxlZnRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxv
Y2sqIHJvb3RCbG9jaywgaW50IHkpCitpbnQgUmVuZGVyQmxvY2s6OmxlZnRTZWxlY3Rpb25PZmZz
ZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IHlQb3MpCiB7Ci0gICAgaW50IGxlZnQgPSBs
ZWZ0T2Zmc2V0KHkpOworICAgIGludCBsZWZ0ID0gbGVmdE9mZnNldCh5UG9zKTsKICAgICBpZiAo
bGVmdCA9PSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKSB7CiAgICAgICAgIGlmIChyb290
QmxvY2sgIT0gdGhpcykKICAgICAgICAgICAgIC8vIFRoZSBib3JkZXIgY2FuIHBvdGVudGlhbGx5
IGJlIGZ1cnRoZXIgZXh0ZW5kZWQgYnkgb3VyIGNvbnRhaW5pbmdCbG9jaygpLgotICAgICAgICAg
ICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5sZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9j
aywgeSArIHlQb3MoKSk7CisgICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPmxl
ZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCB5UG9zICsgeSgpKTsKICAgICAgICAgcmV0dXJu
IGxlZnQ7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBSZW5kZXJCbG9jayogY2IgPSB0aGlz
OwogICAgICAgICB3aGlsZSAoY2IgIT0gcm9vdEJsb2NrKSB7Ci0gICAgICAgICAgICBsZWZ0ICs9
IGNiLT54UG9zKCk7CisgICAgICAgICAgICBsZWZ0ICs9IGNiLT54KCk7CiAgICAgICAgICAgICBj
YiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxODUsMzUg
KzIxODcsMzUgQEAgaW50IFJlbmRlckJsb2NrOjpsZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbgogICAg
IHJldHVybiBsZWZ0OwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OnJpZ2h0U2VsZWN0aW9uT2Zmc2V0
KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGludCB5KQoraW50IFJlbmRlckJsb2NrOjpyaWdodFNl
bGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgeVBvcykKIHsKLSAgICBp
bnQgcmlnaHQgPSByaWdodE9mZnNldCh5KTsKKyAgICBpbnQgcmlnaHQgPSByaWdodE9mZnNldCh5
UG9zKTsKICAgICBpZiAocmlnaHQgPT0gKGNvbnRlbnRXaWR0aCgpICsgKGJvcmRlckxlZnQoKSAr
IHBhZGRpbmdMZWZ0KCkpKSkgewogICAgICAgICBpZiAocm9vdEJsb2NrICE9IHRoaXMpCiAgICAg
ICAgICAgICAvLyBUaGUgYm9yZGVyIGNhbiBwb3RlbnRpYWxseSBiZSBmdXJ0aGVyIGV4dGVuZGVk
IGJ5IG91ciBjb250YWluaW5nQmxvY2soKS4KLSAgICAgICAgICAgIHJldHVybiBjb250YWluaW5n
QmxvY2soKS0+cmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCB5ICsgeVBvcygpKTsKKyAg
ICAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2soKS0+cmlnaHRTZWxlY3Rpb25PZmZzZXQo
cm9vdEJsb2NrLCB5UG9zICsgeSgpKTsKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIH0KICAg
ICBlbHNlIHsKICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gdGhpczsKICAgICAgICAgd2hpbGUg
KGNiICE9IHJvb3RCbG9jaykgewotICAgICAgICAgICAgcmlnaHQgKz0gY2ItPnhQb3MoKTsKKyAg
ICAgICAgICAgIHJpZ2h0ICs9IGNiLT54KCk7CiAgICAgICAgICAgICBjYiA9IGNiLT5jb250YWlu
aW5nQmxvY2soKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmlnaHQ7CiB9CiAKLXZv
aWQgUmVuZGVyQmxvY2s6Omluc2VydFBvc2l0aW9uZWRPYmplY3QoUmVuZGVyT2JqZWN0ICpvKQor
dm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqIG8pCiB7
CiAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0IG9mIHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBh
bGVhZHkgaGF2ZSBvbmUKICAgICBpZiAoIW1fcG9zaXRpb25lZE9iamVjdHMpCi0gICAgICAgIG1f
cG9zaXRpb25lZE9iamVjdHMgPSBuZXcgTGlzdEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj47CisgICAg
ICAgIG1fcG9zaXRpb25lZE9iamVjdHMgPSBuZXcgTGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj47CiAK
ICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzLT5hZGQobyk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6
OnJlbW92ZVBvc2l0aW9uZWRPYmplY3QoUmVuZGVyT2JqZWN0ICpvKQordm9pZCBSZW5kZXJCbG9j
azo6cmVtb3ZlUG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqIG8pCiB7CiAgICAgaWYgKG1fcG9z
aXRpb25lZE9iamVjdHMpCiAgICAgICAgIG1fcG9zaXRpb25lZE9iamVjdHMtPnJlbW92ZShvKTsK
QEAgLTIyMjQsMTEgKzIyMjYsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25l
ZE9iamVjdAogICAgIGlmICghbV9wb3NpdGlvbmVkT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIFJlbmRlck9iamVjdCogcjsKKyAgICBSZW5kZXJCb3gqIHI7CiAgICAgCiAgICAg
SXRlcmF0b3IgZW5kID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+ZW5kKCk7CiAgICAgCi0gICAgVmVj
dG9yPFJlbmRlck9iamVjdCosIDE2PiBkZWFkT2JqZWN0czsKKyAgICBWZWN0b3I8UmVuZGVyQm94
KiwgMTY+IGRlYWRPYmplY3RzOwogCiAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25l
ZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICByID0gKml0OwpA
QCAtMjI1Miw3ICsyMjU0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25lZE9i
amVjdAogICAgICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzLT5yZW1vdmUoZGVhZE9iamVjdHMuYXQo
aSkpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJP
YmplY3QgKm8pCit2b2lkIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJC
b3gqIG8pCiB7CiAgICAgQVNTRVJUKG8tPmlzRmxvYXRpbmcoKSk7CiAKQEAgLTIyODYsNyArMjI4
OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFIKICAgICBtX2Zs
b2F0aW5nT2JqZWN0cy0+YXBwZW5kKG5ld09iaik7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnJl
bW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlck9iamVjdCAqbykKK3ZvaWQgUmVuZGVyQmxvY2s6OnJl
bW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHsKICAgICBpZiAobV9mbG9hdGluZ09i
amVjdHMpIHsKICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVj
dD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKQEAgLTIzMjEsNyArMjMyMyw3IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgbGFzdEZsb2F0ID0gbV9mbG9h
dGluZ09iamVjdHMtPmdldFByZXYoKTsKICAgICB9CiAKLSAgICBpbnQgeSA9IG1faGVpZ2h0Owor
ICAgIGludCB5ID0gaGVpZ2h0KCk7CiAgICAgCiAgICAgLy8gVGhlIGZsb2F0IGNhbm5vdCBzdGFy
dCBhYm92ZSB0aGUgeSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBwb3NpdGlvbmVkIGZsb2F0LgogICAg
IGlmIChsYXN0RmxvYXQpCkBAIC0yMzM2LDcgKzIzMzgsNyBAQCBib29sIFJlbmRlckJsb2NrOjpw
b3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIFJlbmRlck9iamVjdCogbyA9IGYtPm1fcmVuZGVyZXI7CisgICAgICAgIFJlbmRlckJv
eCogbyA9IGYtPm1fcmVuZGVyZXI7CiAgICAgICAgIGludCBfaGVpZ2h0ID0gby0+aGVpZ2h0KCkg
KyBvLT5tYXJnaW5Ub3AoKSArIG8tPm1hcmdpbkJvdHRvbSgpOwogCiAgICAgICAgIGludCBybyA9
IHJpZ2h0T2Zmc2V0KCk7IC8vIENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0LgpAQCAtMjM0
NSw3ICsyMzQ3LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAg
ICAgICBpZiAocm8gLSBsbyA8IGZ3aWR0aCkKICAgICAgICAgICAgIGZ3aWR0aCA9IHJvIC0gbG87
IC8vIE5ldmVyIGxvb2sgZm9yIG1vcmUgdGhhbiB3aGF0IHdpbGwgYmUgYXZhaWxhYmxlLgogICAg
ICAgICAKLSAgICAgICAgSW50UmVjdCBvbGRSZWN0KG8tPnhQb3MoKSwgby0+eVBvcygpICwgby0+
d2lkdGgoKSwgby0+aGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IG9sZFJlY3Qoby0+eCgpLCBv
LT55KCkgLCBvLT53aWR0aCgpLCBvLT5oZWlnaHQoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
by0+c3R5bGUoKS0+Y2xlYXIoKSAmIENMRUZUKQogICAgICAgICAgICAgeSA9IG1heChsZWZ0Qm90
dG9tKCksIHkpOwpAQCAtMjM2Miw3ICsyMzY0LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRp
b25OZXdGbG9hdHMoKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZnggPSBtYXgoMCwgZngp
OwogICAgICAgICAgICAgZi0+bV9sZWZ0ID0gZng7Ci0gICAgICAgICAgICBvLT5zZXRQb3MoZngg
KyBvLT5tYXJnaW5MZWZ0KCksIHkgKyBvLT5tYXJnaW5Ub3AoKSk7CisgICAgICAgICAgICBvLT5z
ZXRMb2NhdGlvbihmeCArIG8tPm1hcmdpbkxlZnQoKSwgeSArIG8tPm1hcmdpblRvcCgpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGludCBoZWlnaHRSZW1haW5pbmdMZWZ0ID0gMTsK
ICAgICAgICAgICAgIGludCBoZWlnaHRSZW1haW5pbmdSaWdodCA9IDE7CkBAIC0yMzcyLDcgKzIz
NzQsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgICAg
ICAgICAgZnggPSByaWdodFJlbE9mZnNldCh5LCBybywgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdS
aWdodCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmLT5tX2xlZnQgPSBmeCAtIGYtPm1f
d2lkdGg7Ci0gICAgICAgICAgICBvLT5zZXRQb3MoZnggLSBvLT5tYXJnaW5SaWdodCgpIC0gby0+
d2lkdGgoKSwgeSArIG8tPm1hcmdpblRvcCgpKTsKKyAgICAgICAgICAgIG8tPnNldExvY2F0aW9u
KGZ4IC0gby0+bWFyZ2luUmlnaHQoKSAtIG8tPndpZHRoKCksIHkgKyBvLT5tYXJnaW5Ub3AoKSk7
CiAgICAgICAgIH0KIAogICAgICAgICBmLT5tX3RvcCA9IHk7CkBAIC0yNDA1LDggKzI0MDcsOCBA
QCB2b2lkIFJlbmRlckJsb2NrOjpuZXdMaW5lKEVDbGVhciBjbGVhcikKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAobV9oZWlnaHQgPCBuZXdZKQot
ICAgICAgICBtX2hlaWdodCA9IG5ld1k7CisgICAgaWYgKGhlaWdodCgpIDwgbmV3WSkKKyAgICAg
ICAgc2V0SGVpZ2h0KG5ld1kpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGRQZXJjZW50SGVp
Z2h0RGVzY2VuZGFudChSZW5kZXJCb3gqIGRlc2NlbmRhbnQpCkBAIC0yNjAzLDcgKzI2MDUsNyBA
QCBpbnQgUmVuZGVyQmxvY2s6Omxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jCiAgICAgICAgIGJvdHRv
bSA9IG1heChib3R0b20sIG1fb3ZlcmZsb3dIZWlnaHQgKyByZWxhdGl2ZU9mZnNldCk7CiAgICAg
ICAgIAogICAgIGlmIChtX3Bvc2l0aW9uZWRPYmplY3RzKSB7Ci0gICAgICAgIFJlbmRlck9iamVj
dCogcjsKKyAgICAgICAgUmVuZGVyQm94KiByOwogICAgICAgICBJdGVyYXRvciBlbmQgPSBtX3Bv
c2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9z
aXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAg
ciA9ICppdDsKQEAgLTI2MTMsOCArMjYxNSw4IEBAIGludCBSZW5kZXJCbG9jazo6bG93ZXN0UG9z
aXRpb24oYm9vbCBpbmMKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdvcmsgZm9y
IG92ZXJmbG93IHNlY3Rpb25zIHRvby4KICAgICAgICAgICAgICAgICAvLyBJZiBhIHBvc2l0aW9u
ZWQgb2JqZWN0IGxpZXMgY29tcGxldGVseSB0byB0aGUgbGVmdCBvZiB0aGUgcm9vdCBpdCB3aWxs
IGJlIHVucmVhY2hhYmxlIHZpYSBzY3JvbGxpbmcuCiAgICAgICAgICAgICAgICAgLy8gVGhlcmVm
b3JlIHdlIHNob3VsZCBub3QgYWxsb3cgaXQgdG8gY29udHJpYnV0ZSB0byB0aGUgbG93ZXN0IHBv
c2l0aW9uLgotICAgICAgICAgICAgICAgIGlmICghaXNSZW5kZXJWaWV3KCkgfHwgci0+eFBvcygp
ICsgci0+d2lkdGgoKSA+IDAgfHwgci0+eFBvcygpICsgci0+cmlnaHRtb3N0UG9zaXRpb24oZmFs
c2UpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgbHAgPSByLT55UG9zKCkgKyByLT5s
b3dlc3RQb3NpdGlvbihmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1JlbmRlclZpZXco
KSB8fCByLT54KCkgKyByLT53aWR0aCgpID4gMCB8fCByLT54KCkgKyByLT5yaWdodG1vc3RQb3Np
dGlvbihmYWxzZSkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBscCA9IHItPnkoKSAr
IHItPmxvd2VzdFBvc2l0aW9uKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgYm90dG9tID0g
bWF4KGJvdHRvbSwgbHAgKyByZWxhdGl2ZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpAQCAtMjY2MCw3ICsyNjYyLDcgQEAgaW50IFJlbmRlckJsb2NrOjpyaWdodG1v
c3RQb3NpdGlvbihib29sIAogICAgICAgICByaWdodCA9IG1heChyaWdodCwgbV9vdmVyZmxvd1dp
ZHRoICsgcmVsYXRpdmVPZmZzZXQpOwogCiAgICAgaWYgKG1fcG9zaXRpb25lZE9iamVjdHMpIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiByOworICAgICAgICBSZW5kZXJCb3gqIHI7CiAgICAgICAg
IEl0ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwogICAgICAgICBmb3Ig
KEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKSA7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICAgICAgciA9ICppdDsKQEAgLTI2NzAsOCArMjY3Miw4IEBAIGludCBS
ZW5kZXJCbG9jazo6cmlnaHRtb3N0UG9zaXRpb24oYm9vbCAKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHdvcmsgZm9yIG92ZXJmbG93IHNlY3Rpb25zIHRvby4KICAgICAgICAgICAg
ICAgICAvLyBJZiBhIHBvc2l0aW9uZWQgb2JqZWN0IGxpZXMgY29tcGxldGVseSBhYm92ZSB0aGUg
cm9vdCBpdCB3aWxsIGJlIHVucmVhY2hhYmxlIHZpYSBzY3JvbGxpbmcuCiAgICAgICAgICAgICAg
ICAgLy8gVGhlcmVmb3JlIHdlIHNob3VsZCBub3QgYWxsb3cgaXQgdG8gY29udHJpYnV0ZSB0byB0
aGUgcmlnaHRtb3N0IHBvc2l0aW9uLgotICAgICAgICAgICAgICAgIGlmICghaXNSZW5kZXJWaWV3
KCkgfHwgci0+eVBvcygpICsgci0+aGVpZ2h0KCkgPiAwIHx8IHItPnlQb3MoKSArIHItPmxvd2Vz
dFBvc2l0aW9uKGZhbHNlKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJwID0gci0+
eFBvcygpICsgci0+cmlnaHRtb3N0UG9zaXRpb24oZmFsc2UpOworICAgICAgICAgICAgICAgIGlm
ICghaXNSZW5kZXJWaWV3KCkgfHwgci0+eSgpICsgci0+aGVpZ2h0KCkgPiAwIHx8IHItPnkoKSAr
IHItPmxvd2VzdFBvc2l0aW9uKGZhbHNlKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW50
IHJwID0gci0+eCgpICsgci0+cmlnaHRtb3N0UG9zaXRpb24oZmFsc2UpOwogICAgICAgICAgICAg
ICAgICAgICByaWdodCA9IG1heChyaWdodCwgcnAgKyByZWxhdGl2ZU9mZnNldCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjcyMiw3ICsyNzI0LDcgQEAgaW50IFJlbmRl
ckJsb2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICBsZWZ0ID0gbWluKGxlZnQs
IG1fb3ZlcmZsb3dMZWZ0ICsgcmVsYXRpdmVPZmZzZXQpOwogCiAgICAgaWYgKG1fcG9zaXRpb25l
ZE9iamVjdHMpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByOworICAgICAgICBSZW5kZXJCb3gq
IHI7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwog
ICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICByID0gKml0OwpAQCAtMjczMiw4ICsyNzM0
LDggQEAgaW50IFJlbmRlckJsb2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd29yayBmb3Igb3ZlcmZsb3cgc2VjdGlvbnMgdG9vLgog
ICAgICAgICAgICAgICAgIC8vIElmIGEgcG9zaXRpb25lZCBvYmplY3QgbGllcyBjb21wbGV0ZWx5
IGFib3ZlIHRoZSByb290IGl0IHdpbGwgYmUgdW5yZWFjaGFibGUgdmlhIHNjcm9sbGluZy4KICAg
ICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUgd2Ugc2hvdWxkIG5vdCBhbGxvdyBpdCB0byBjb250
cmlidXRlIHRvIHRoZSBsZWZ0bW9zdCBwb3NpdGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoIWlz
UmVuZGVyVmlldygpIHx8IHItPnlQb3MoKSArIHItPmhlaWdodCgpID4gMCB8fCByLT55UG9zKCkg
KyByLT5sb3dlc3RQb3NpdGlvbihmYWxzZSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlu
dCBscCA9IHItPnhQb3MoKSArIHItPmxlZnRtb3N0UG9zaXRpb24oZmFsc2UpOworICAgICAgICAg
ICAgICAgIGlmICghaXNSZW5kZXJWaWV3KCkgfHwgci0+eSgpICsgci0+aGVpZ2h0KCkgPiAwIHx8
IHItPnkoKSArIHItPmxvd2VzdFBvc2l0aW9uKGZhbHNlKSA+IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgaW50IGxwID0gci0+eCgpICsgci0+bGVmdG1vc3RQb3NpdGlvbihmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgbHAgKyByZWxhdGl2ZU9mZnNldCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjgzNywyNCArMjgzOSwyNCBAQCB2
b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cygpCiAgICAgLy8gb3V0IG9mIGZsb3cgKGxpa2Ug
ZmxvYXRpbmcvcG9zaXRpb25lZCBlbGVtZW50cyksIGFuZCB3ZSBhbHNvIHNraXAgb3ZlciBhbnkg
b2JqZWN0cyB0aGF0IG1heSBoYXZlIHNoaWZ0ZWQKICAgICAvLyB0byBhdm9pZCBmbG9hdHMuCiAg
ICAgYm9vbCBwYXJlbnRIYXNGbG9hdHMgPSBmYWxzZTsKLSAgICBSZW5kZXJPYmplY3QgKnByZXYg
PSBwcmV2aW91c1NpYmxpbmcoKTsKKyAgICBSZW5kZXJCb3gqIHByZXYgPSBwcmV2aW91c1NpYmxp
bmdCb3goKTsKICAgICB3aGlsZSAocHJldiAmJiAoIXByZXYtPmlzUmVuZGVyQmxvY2soKSB8fCBw
cmV2LT5hdm9pZHNGbG9hdHMoKSB8fCBwcmV2LT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpKSB7
CiAgICAgICAgIGlmIChwcmV2LT5pc0Zsb2F0aW5nKCkpCiAgICAgICAgICAgICBwYXJlbnRIYXNG
bG9hdHMgPSB0cnVlOwotICAgICAgICAgcHJldiA9IHByZXYtPnByZXZpb3VzU2libGluZygpOwor
ICAgICAgICAgcHJldiA9IHByZXYtPnByZXZpb3VzU2libGluZ0JveCgpOwogICAgIH0KIAogICAg
IC8vIEZpcnN0IGFkZCBpbiBmbG9hdHMgZnJvbSB0aGUgcGFyZW50LgotICAgIGludCBvZmZzZXQg
PSBtX3k7CisgICAgaW50IG9mZnNldCA9IG1fZnJhbWVSZWN0LnkoKTsKICAgICBpZiAocGFyZW50
SGFzRmxvYXRzKQogICAgICAgICBhZGRJbnRydWRpbmdGbG9hdHMoc3RhdGljX2Nhc3Q8UmVuZGVy
QmxvY2sgKj4ocGFyZW50KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50KCkt
PmJvcmRlckxlZnQoKSArIHBhcmVudCgpLT5wYWRkaW5nTGVmdCgpLCBvZmZzZXQpOwogCiAgICAg
aW50IHhvZmZzZXQgPSAwOwogICAgIGlmIChwcmV2KQotICAgICAgICBvZmZzZXQgLT0gcHJldi0+
eVBvcygpOworICAgICAgICBvZmZzZXQgLT0gcHJldi0+eSgpOwogICAgIGVsc2UgewotICAgICAg
ICBwcmV2ID0gcGFyZW50KCk7CisgICAgICAgIHByZXYgPSBwYXJlbnRCb3goKTsKICAgICAgICAg
eG9mZnNldCArPSBwcmV2LT5ib3JkZXJMZWZ0KCkgKyBwcmV2LT5wYWRkaW5nTGVmdCgpOwogICAg
IH0KIApAQCAtMjkxNiw3ICsyOTE4LDcgQEAgaW50IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2lu
Z0Zsb2F0cyhSZQogICAgIEludFJlY3QgZmxvYXRzT3ZlcmZsb3dSZWN0OwogICAgIERlcHJlY2F0
ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCpjaGlsZC0+bV9mbG9hdGluZ09i
amVjdHMpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3QqIHI7IChyID0gaXQuY3VycmVudCgpKTsg
KytpdCkgewotICAgICAgICBpbnQgYm90dG9tID0gY2hpbGQtPnlQb3MoKSArIHItPm1fYm90dG9t
OworICAgICAgICBpbnQgYm90dG9tID0gY2hpbGQtPnkoKSArIHItPm1fYm90dG9tOwogICAgICAg
ICBsb3dlc3RGbG9hdEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdEJvdHRvbSwgYm90dG9tKTsKIAog
ICAgICAgICBpZiAoYm90dG9tID4gaGVpZ2h0KCkpIHsKQEAgLTMwMjksNyArMzAzMSw3IEBAIGJv
b2wgUmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQoUmVuZGVyT2IKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JM
YXlvdXQoUmVuZGVyT2JqZWN0KiBmbG9hdFRvUmVtb3ZlKQordm9pZCBSZW5kZXJCbG9jazo6bWFy
a0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1v
dmUpCiB7CiAgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVlKTsKIApAQCAtMzA0Niw3ICszMDQ4
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aAogICAgIH0KIH0K
IAotaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlck9iamVjdCAqY2hpbGQpCitp
bnQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCkKIHsKICAgICAv
LyBUaGVyZSBpcyBubyBuZWVkIHRvIGNvbXB1dGUgY2xlYXJhbmNlIGlmIHdlIGhhdmUgbm8gZmxv
YXRzLgogICAgIGlmICghY29udGFpbnNGbG9hdHMoKSkKQEAgLTMwNzQsMTEgKzMwNzYsMTEgQEAg
aW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlck9iagogICAgIC8vIHRvIGZpdCkg
YW5kIG5vdCBhbGwgKHdlIHNob3VsZCBiZSB1c2luZyBuZXh0RmxvYXRCb3R0b21CZWxvdyBhbmQg
bG9vcGluZykuCiAgICAgLy8gRG8gbm90IGFsbG93IHRhYmxlcyB0byB3cmFwIGluIHF1aXJrcyBv
ciBldmVuIGluIGFsbW9zdCBzdHJpY3QgbW9kZSAKICAgICAvLyAoZWJheSBvbiB0aGUgUExULCBm
aW5hbmNlLnlhaG9vLmNvbSBpbiB0aGUgcmVhbCB3b3JsZCwgdmVyc2lvbnRyYWNrZXIuY29tIGZv
cmNlcyBldmVuIGFsbW9zdCBzdHJpY3QgbW9kZSBub3QgdG8gd29yaykKLSAgICBpbnQgcmVzdWx0
ID0gY2xlYXJTZXQgPyBtYXgoMCwgYm90dG9tIC0gY2hpbGQtPnlQb3MoKSkgOiAwOworICAgIGlu
dCByZXN1bHQgPSBjbGVhclNldCA/IG1heCgwLCBib3R0b20gLSBjaGlsZC0+eSgpKSA6IDA7CiAg
ICAgaWYgKCFyZXN1bHQgJiYgY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkLT5zdHlsZSgp
LT53aWR0aCgpLmlzRml4ZWQoKSAmJiAKLSAgICAgICAgY2hpbGQtPm1pblByZWZXaWR0aCgpID4g
bGluZVdpZHRoKGNoaWxkLT55UG9zKCkpICYmIGNoaWxkLT5taW5QcmVmV2lkdGgoKSA8PSBhdmFp
bGFibGVXaWR0aCgpICYmIAorICAgICAgICBjaGlsZC0+bWluUHJlZldpZHRoKCkgPiBsaW5lV2lk
dGgoY2hpbGQtPnkoKSkgJiYgY2hpbGQtPm1pblByZWZXaWR0aCgpIDw9IGF2YWlsYWJsZVdpZHRo
KCkgJiYgCiAgICAgICAgIGRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgpKSAgIAotICAgICAgICBy
ZXN1bHQgPSBtYXgoMCwgZmxvYXRCb3R0b20oKSAtIGNoaWxkLT55UG9zKCkpOworICAgICAgICBy
ZXN1bHQgPSBtYXgoMCwgZmxvYXRCb3R0b20oKSAtIGNoaWxkLT55KCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKQEAgLTMxMDQsOCArMzEwNiw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFQKIHsKICAgICBib29sIGlubGluZUZsb3cgPSBpc0lubGluZUZsb3co
KTsKIAotICAgIGludCB0eCA9IF90eCArIG1feDsKLSAgICBpbnQgdHkgPSBfdHkgKyBtX3kgKyBi
b3JkZXJUb3BFeHRyYSgpOworICAgIGludCB0eCA9IF90eCArIHgoKTsKKyAgICBpbnQgdHkgPSBf
dHkgKyB5KCk7CiAKICAgICBpZiAoIWlubGluZUZsb3cgJiYgIWlzUmVuZGVyVmlldygpKSB7CiAg
ICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgpAQCAtMzE1
MCw4ICszMTUyLDggQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAog
ICAgICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQo
Km1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAgICAgICAgIGZvciAoaXQudG9MYXN0KCk7IChvID0g
aXQuY3VycmVudCgpKTsgLS1pdCkgewogICAgICAgICAgICAgICAgIGlmIChvLT5tX3Nob3VsZFBh
aW50ICYmICFvLT5tX3JlbmRlcmVyLT5oYXNMYXllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGludCB4b2Zmc2V0ID0gc2Nyb2xsZWRYICsgby0+bV9sZWZ0ICsgby0+bV9yZW5kZXJlci0+bWFy
Z2luTGVmdCgpIC0gby0+bV9yZW5kZXJlci0+eFBvcygpOwotICAgICAgICAgICAgICAgICAgICBp
bnQgeW9mZnNldCA9ICBzY3JvbGxlZFkgKyBvLT5tX3RvcCArIG8tPm1fcmVuZGVyZXItPm1hcmdp
blRvcCgpIC0gby0+bV9yZW5kZXJlci0+eVBvcygpOworICAgICAgICAgICAgICAgICAgICBpbnQg
eG9mZnNldCA9IHNjcm9sbGVkWCArIG8tPm1fbGVmdCArIG8tPm1fcmVuZGVyZXItPm1hcmdpbkxl
ZnQoKSAtIG8tPm1fcmVuZGVyZXItPngoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHlvZmZz
ZXQgPSAgc2Nyb2xsZWRZICsgby0+bV90b3AgKyBvLT5tX3JlbmRlcmVyLT5tYXJnaW5Ub3AoKSAt
IG8tPm1fcmVuZGVyZXItPnkoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG8tPm1fcmVuZGVy
ZXItPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBJbnRQb2ludChfeCwgX3kpLCB4b2Zmc2V0LCB5
b2Zmc2V0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIEludFBvaW50KF94IC0geG9mZnNldCwgX3kgLSB5b2Zmc2V0KSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxNjMsOCArMzE2NSw4IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQKIAogICAgIC8vIE5vdyBoaXQgdGVzdCBv
dXIgYmFja2dyb3VuZAogICAgIGlmICghaW5saW5lRmxvdyAmJiAoaGl0VGVzdEFjdGlvbiA9PSBI
aXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxv
Y2tCYWNrZ3JvdW5kKSkgewotICAgICAgICBpbnQgdG9wRXh0cmEgPSBib3JkZXJUb3BFeHRyYSgp
OwotICAgICAgICBJbnRSZWN0IGJvdW5kc1JlY3QodHgsIHR5IC0gdG9wRXh0cmEsIG1fd2lkdGgs
IG1faGVpZ2h0ICsgdG9wRXh0cmEgKyBib3JkZXJCb3R0b21FeHRyYSgpKTsKKyAgICAgICAgaW50
IHRvcEV4dHJhID0gaW50cmluc2ljUGFkZGluZ1RvcCgpOworICAgICAgICBJbnRSZWN0IGJvdW5k
c1JlY3QodHgsIHR5IC0gdG9wRXh0cmEsIHdpZHRoKCksIGhlaWdodCgpICsgdG9wRXh0cmEgKyBp
bnRyaW5zaWNQYWRkaW5nQm90dG9tKCkpOwogICAgICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGlu
ZygpICYmIGJvdW5kc1JlY3QuY29udGFpbnMoX3gsIF95KSkgewogICAgICAgICAgICAgdXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0gdHgsIF95IC0gdHkgKyB0b3BFeHRy
YSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjc0LDcgKzMyNzYsNyBAQCBWaXNp
YmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yCiAgICAgICAgIHJldHVybiBSZW5k
ZXJGbG93Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKHgsIHkpOyAKIAogICAgIGludCB0b3AgPSBi
b3JkZXJUb3AoKTsKLSAgICBpbnQgYm90dG9tID0gdG9wICsgYm9yZGVyVG9wRXh0cmEoKSArIHBh
ZGRpbmdUb3AoKSArIGNvbnRlbnRIZWlnaHQoKSArIHBhZGRpbmdCb3R0b20oKSArIGJvcmRlckJv
dHRvbUV4dHJhKCk7CisgICAgaW50IGJvdHRvbSA9IHRvcCArIGludHJpbnNpY1BhZGRpbmdUb3Ao
KSArIHBhZGRpbmdUb3AoKSArIGNvbnRlbnRIZWlnaHQoKSArIHBhZGRpbmdCb3R0b20oKSArIGlu
dHJpbnNpY1BhZGRpbmdCb3R0b20oKTsKIAogICAgIGludCBsZWZ0ID0gYm9yZGVyTGVmdCgpOwog
ICAgIGludCByaWdodCA9IGxlZnQgKyBwYWRkaW5nTGVmdCgpICsgY29udGVudFdpZHRoKCkgKyBw
YWRkaW5nUmlnaHQoKTsKQEAgLTMzMDAsOCArMzMwMiw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5k
ZXJCbG9jazo6cG9zaXRpb25Gb3IKIAogICAgICAgICBpZiAoeSA8IHRvcCB8fCAoaXNFZGl0YWJs
ZVJvb3QgJiYgKHkgPCBib3R0b20gJiYgeCA8IGxlZnQpKSkgewogICAgICAgICAgICAgaWYgKCFp
c0VkaXRhYmxlUm9vdCkKLSAgICAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjID0gZmly
c3RDaGlsZCgpKSB7IC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBtYWtlIGFueSBzZW5zZS4g
IFRoaXMgY2hpbGQgY291bGQgYmUgYW4gaW5saW5lIG9yIGEgcG9zaXRpb25lZCBlbGVtZW50IG9y
IGEgZmxvYXQgb3IgYSBjb21wYWN0LCBldGMuCi0gICAgICAgICAgICAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBwID0gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhjb250ZW50c1ggLSBjLT54UG9z
KCksIGNvbnRlbnRzWSAtIGMtPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgaWYgKFJlbmRlckJv
eCogYyA9IGZpcnN0Q2hpbGRCb3goKSkgeyAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgbWFr
ZSBhbnkgc2Vuc2UuICBUaGlzIGNoaWxkIGNvdWxkIGJlIGFuIGlubGluZSBvciBhIHBvc2l0aW9u
ZWQgZWxlbWVudCBvciBhIGZsb2F0IG9yIGEgY29tcGFjdCwgZXRjLgorICAgICAgICAgICAgICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IGMtPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoY29udGVu
dHNYIC0gYy0+eCgpLCBjb250ZW50c1kgLSBjLT55KCkpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAocC5pc05vdE51bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTMzMTYsOCArMzMxOCw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5k
ZXJCbG9jazo6cG9zaXRpb25Gb3IKIAogICAgICAgICBpZiAoeSA+PSBib3R0b20gfHwgKGlzRWRp
dGFibGVSb290ICYmICh5ID49IHRvcCAmJiB4ID49IHJpZ2h0KSkpIHsKICAgICAgICAgICAgIGlm
ICghaXNFZGl0YWJsZVJvb3QpCi0gICAgICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogYyA9
IGxhc3RDaGlsZCgpKSB7IC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBtYWtlIGFueSBzZW5z
ZS4gIFRoaXMgY2hpbGQgY291bGQgYmUgYW4gaW5saW5lIG9yIGEgcG9zaXRpb25lZCBlbGVtZW50
IG9yIGEgZmxvYXQgb3IgYSBjb21wYWN0LCBlY3QuCi0gICAgICAgICAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBwID0gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhjb250ZW50c1ggLSBjLT54
UG9zKCksIGNvbnRlbnRzWSAtIGMtPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgaWYgKFJlbmRl
ckJveCogYyA9IGxhc3RDaGlsZEJveCgpKSB7IC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBt
YWtlIGFueSBzZW5zZS4gIFRoaXMgY2hpbGQgY291bGQgYmUgYW4gaW5saW5lIG9yIGEgcG9zaXRp
b25lZCBlbGVtZW50IG9yIGEgZmxvYXQgb3IgYSBjb21wYWN0LCBlY3QuCisgICAgICAgICAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhjb250
ZW50c1ggLSBjLT54KCksIGNvbnRlbnRzWSAtIGMtPnkoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChwLmlzTm90TnVsbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMzM2NCwyMCArMzM2NiwyMCBAQCBWaXNpYmxlUG9zaXRpb24g
UmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yCiAgICAgfQogICAgIAogICAgIC8vIFNlZSBpZiBhbnkg
Y2hpbGQgYmxvY2tzIGV4aXN0IGF0IHRoaXMgeSBjb29yZGluYXRlLgotICAgIGlmIChmaXJzdENo
aWxkKCkgJiYgY29udGVudHNZIDwgZmlyc3RDaGlsZCgpLT55UG9zKCkpCisgICAgaWYgKGZpcnN0
Q2hpbGRCb3goKSAmJiBjb250ZW50c1kgPCBmaXJzdENoaWxkQm94KCktPnkoKSkKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbihuLCAwLCBET1dOU1RSRUFNKTsKLSAgICBmb3IgKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBmaXJzdENoaWxkKCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJl
bmRlcmVyLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIHJlbmRlcmVyID0g
Zmlyc3RDaGlsZEJveCgpOyByZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5kZXJlci0+bmV4dFNpYmxp
bmdCb3goKSkgewogICAgICAgICBpZiAocmVuZGVyZXItPmhlaWdodCgpID09IDAgfHwgcmVuZGVy
ZXItPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHJlbmRlcmVyLT5pc0Zsb2F0
aW5nT3JQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVuZGVy
T2JqZWN0KiBuZXh0ID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCk7CisgICAgICAgIFJlbmRlckJv
eCogbmV4dCA9IHJlbmRlcmVyLT5uZXh0U2libGluZ0JveCgpOwogICAgICAgICB3aGlsZSAobmV4
dCAmJiBuZXh0LT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICBuZXh0ID0g
bmV4dC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5leHQgPSBuZXh0LT5uZXh0U2libGlu
Z0JveCgpOwogICAgICAgICBpZiAobmV4dCkgCi0gICAgICAgICAgICBib3R0b20gPSBuZXh0LT55
UG9zKCk7CisgICAgICAgICAgICBib3R0b20gPSBuZXh0LT55KCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGJvdHRvbSA9IHRvcCArIHNjcm9sbEhlaWdodCgpOwotICAgICAgICBpZiAoY29u
dGVudHNZID49IHJlbmRlcmVyLT55UG9zKCkgJiYgY29udGVudHNZIDwgYm90dG9tKQotICAgICAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKGNvbnRlbnRzWCAt
IHJlbmRlcmVyLT54UG9zKCksIGNvbnRlbnRzWSAtIHJlbmRlcmVyLT55UG9zKCkpOworICAgICAg
ICBpZiAoY29udGVudHNZID49IHJlbmRlcmVyLT55KCkgJiYgY29udGVudHNZIDwgYm90dG9tKQor
ICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKGNvbnRl
bnRzWCAtIHJlbmRlcmVyLT54KCksIGNvbnRlbnRzWSAtIHJlbmRlcmVyLT55KCkpOwogICAgIH0K
ICAgICAKICAgICByZXR1cm4gUmVuZGVyRmxvdzo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4LCB5
KTsKQEAgLTMzODUsNyArMzM4Nyw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9jazo6cG9z
aXRpb25Gb3IKIAogdm9pZCBSZW5kZXJCbG9jazo6b2Zmc2V0Rm9yQ29udGVudHMoaW50JiB0eCwg
aW50JiB0eSkgY29uc3QKIHsKLSAgICB0eSAtPSBib3JkZXJUb3BFeHRyYSgpOworICAgIHR5IC09
IGludHJpbnNpY1BhZGRpbmdUb3AoKTsKICAgICAKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkp
CiAgICAgICAgIG1fbGF5ZXItPmFkZFNjcm9sbGVkQ29udGVudE9mZnNldCh0eCwgdHkpOwpAQCAt
MzU5NSwxNCArMzU5NywxNCBAQCBpbnQgUmVuZGVyQmxvY2s6OmxheW91dENvbHVtbnMoaW50IGVu
ZE9mCiAgICAgICAgICAgICBjb2xDb3VudCsrOwogICAgIH0KIAotICAgIG1fb3ZlcmZsb3dXaWR0
aCA9IG1heChtX3dpZHRoLCBjdXJyWCAtIGNvbEdhcCk7CisgICAgbV9vdmVyZmxvd1dpZHRoID0g
bWF4KHdpZHRoKCksIGN1cnJYIC0gY29sR2FwKTsKICAgICBtX292ZXJmbG93TGVmdCA9IG1pbigw
LCBjdXJyWCArIGRlc2lyZWRDb2x1bW5XaWR0aCArIGNvbEdhcCk7CiAKICAgICBtX292ZXJmbG93
SGVpZ2h0ID0gbWF4Q29sQm90dG9tOwogICAgIGludCB0b0FkZCA9IGJvcmRlckJvdHRvbSgpICsg
cGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwogICAgICAgICAK
ICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCkKLSAgICAgICAgbV9oZWlnaHQgPSBtX292
ZXJmbG93SGVpZ2h0ICsgdG9BZGQ7CisgICAgICAgIHNldEhlaWdodChtX292ZXJmbG93SGVpZ2h0
ICsgdG9BZGQpOwogCiAgICAgdi0+c2V0UHJpbnRSZWN0KEludFJlY3QoKSk7CiAgICAgdi0+c2V0
VHJ1bmNhdGVkQXQoMCk7CkBAIC00MjUxLDExICs0MjUzLDExIEBAIGludCBSZW5kZXJCbG9jazo6
Z2V0QmFzZWxpbmVPZkZpcnN0TGluZUIKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgp
OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBmb3IgKFJlbmRl
ckJveCogY3VyciA9IGZpcnN0Q2hpbGRCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJs
aW5nQm94KCkpIHsKICAgICAgICAgICAgIGlmICghY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRpb25l
ZCgpKSB7CiAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IGN1cnItPmdldEJhc2VsaW5lT2ZG
aXJzdExpbmVCb3goKTsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IC0xKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3Vyci0+eVBvcygpICsgcmVzdWx0OyAvLyBUcmFuc2xhdGUg
dG8gb3VyIGNvb3JkaW5hdGUgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJy
LT55KCkgKyByZXN1bHQ7IC8vIFRyYW5zbGF0ZSB0byBvdXIgY29vcmRpbmF0ZSBzcGFjZS4KICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQyNzcsMTIgKzQyNzksMTIgQEAgaW50
IFJlbmRlckJsb2NrOjpnZXRCYXNlbGluZU9mTGFzdExpbmVCbwogICAgIH0KICAgICBlbHNlIHsK
ICAgICAgICAgYm9vbCBoYXZlTm9ybWFsRmxvd0NoaWxkID0gZmFsc2U7Ci0gICAgICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjdXJyID0gbGFzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2
aW91c1NpYmxpbmcoKSkgeworICAgICAgICBmb3IgKFJlbmRlckJveCogY3VyciA9IGxhc3RDaGls
ZEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKICAgICAg
ICAgICAgIGlmICghY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAg
ICAgICAgaGF2ZU5vcm1hbEZsb3dDaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaW50IHJl
c3VsdCA9IGN1cnItPmdldEJhc2VsaW5lT2ZMYXN0TGluZUJveCgpOwogICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyLT55UG9z
KCkgKyByZXN1bHQ7IC8vIFRyYW5zbGF0ZSB0byBvdXIgY29vcmRpbmF0ZSBzcGFjZS4KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnItPnkoKSArIHJlc3VsdDsgLy8gVHJhbnNsYXRlIHRv
IG91ciBjb29yZGluYXRlIHNwYWNlLgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IGlmICghaGF2ZU5vcm1hbEZsb3dDaGlsZCAmJiBoYXNMaW5lSWZFbXB0eSgpKQpAQCAtNDUwMCwx
OCArNDUwMiwxOCBAQCBpbnQgZ2V0SGVpZ2h0Rm9yTGluZUNvdW50KFJlbmRlckJsb2NrKiBiCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyA9IDA7Ci0gICAgICAgICAgICBm
b3IgKFJlbmRlck9iamVjdCogb2JqID0gYmxvY2stPmZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBv
YmotPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCogbm9ybWFsRmxvd0No
aWxkV2l0aG91dExpbmVzID0gMDsKKyAgICAgICAgICAgIGZvciAoUmVuZGVyQm94KiBvYmogPSBi
bG9jay0+Zmlyc3RDaGlsZEJveCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmdCb3goKSkg
ewogICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGVja0xpbmVzKG9iaikpIHsKICAgICAgICAg
ICAgICAgICAgICAgaW50IHJlc3VsdCA9IGdldEhlaWdodEZvckxpbmVDb3VudChzdGF0aWNfY2Fz
dDxSZW5kZXJCbG9jayo+KG9iaiksIGwsIGZhbHNlLCBjb3VudCk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0ICsgb2JqLT55UG9zKCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay0+Ym9yZGVyQm90dG9t
KCkgKyBibG9jay0+cGFkZGluZ0JvdHRvbSgpKSA6IDApOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdCArIG9iai0+eSgpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxvY2stPmJv
cmRlckJvdHRvbSgpICsgYmxvY2stPnBhZGRpbmdCb3R0b20oKSkgOiAwKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIW9iai0+aXNGbG9hdGluZ09yUG9zaXRp
b25lZCgpICYmICFvYmotPmlzQ29tcGFjdCgpICYmICFvYmotPmlzUnVuSW4oKSkKICAgICAgICAg
ICAgICAgICAgICAgbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzID0gb2JqOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyAmJiBsID09
IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcy0+
eVBvcygpICsgbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzLT5oZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzLT55KCkgKyBub3JtYWxG
bG93Q2hpbGRXaXRob3V0TGluZXMtPmhlaWdodCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApA
QCAtNDU1OSwxNCArNDU2MSwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJG
aXQoaW50CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBmb3IgKFJlbmRlck9iamVjdCogb2JqID0gZmlyc3RDaGlsZCgpOyBvYmo7IG9iaiA9IG9i
ai0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgZm9yIChSZW5kZXJCb3gqIG9iaiA9IGZp
cnN0Q2hpbGRCb3goKTsgb2JqOyBvYmogPSBvYmotPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIW9iai0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChvYmotPmlzQmxvY2tGbG93KCkgJiYgIW9iai0+aGFzT3ZlcmZsb3dD
bGlwKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+
KG9iaiktPmFkanVzdEZvckJvcmRlckZpdCh4ICsgb2JqLT54UG9zKCksIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ob2JqKS0+
YWRqdXN0Rm9yQm9yZGVyRml0KHggKyBvYmotPngoKSwgbGVmdCwgcmlnaHQpOwogICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChvYmotPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxF
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgYSByZXBsYWNlZCBlbGVtZW50
IG9yIHNvbWUga2luZCBvZiBub24tYmxvY2stZmxvdyBvYmplY3QuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHggKyBvYmotPnhQb3MoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByaWdodCA9IG1heChyaWdodCwgeCArIG9iai0+eFBvcygpICsgb2JqLT53aWR0
aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgeCArIG9iai0+
eCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCB4ICsgb2Jq
LT54KCkgKyBvYmotPndpZHRoKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDU3OCw3ICs0NTgwLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KGludAogICAgICAgICAgICAgZm9yICg7IChyID0gaXQu
Y3VycmVudCgpKTsgKytpdCkgewogICAgICAgICAgICAgICAgIC8vIE9ubHkgZXhhbWluZSB0aGUg
b2JqZWN0IGlmIG91ciBtX3Nob3VsZFBhaW50IGZsYWcgaXMgc2V0LgogICAgICAgICAgICAgICAg
IGlmIChyLT5tX3Nob3VsZFBhaW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBmbG9hdExl
ZnQgPSByLT5tX2xlZnQgLSByLT5tX3JlbmRlcmVyLT54UG9zKCkgKyByLT5tX3JlbmRlcmVyLT5t
YXJnaW5MZWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIGludCBmbG9hdExlZnQgPSByLT5tX2xl
ZnQgLSByLT5tX3JlbmRlcmVyLT54KCkgKyByLT5tX3JlbmRlcmVyLT5tYXJnaW5MZWZ0KCk7CiAg
ICAgICAgICAgICAgICAgICAgIGludCBmbG9hdFJpZ2h0ID0gZmxvYXRMZWZ0ICsgci0+bV9yZW5k
ZXJlci0+d2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCBmbG9h
dExlZnQpOwogICAgICAgICAgICAgICAgICAgICByaWdodCA9IG1heChyaWdodCwgZmxvYXRSaWdo
dCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDggKzEx
Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbiwgaW50JiByZXBhaW50VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20pOwogCiAgICAg
dm9pZCBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwotICAg
IHZvaWQgaW5zZXJ0UG9zaXRpb25lZE9iamVjdChSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHJl
bW92ZVBvc2l0aW9uZWRPYmplY3QoUmVuZGVyT2JqZWN0Kik7CisgICAgdm9pZCBpbnNlcnRQb3Np
dGlvbmVkT2JqZWN0KFJlbmRlckJveCopOworICAgIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVj
dChSZW5kZXJCb3gqKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVjdHMo
UmVuZGVyQmxvY2sqKTsKIAogICAgIHZvaWQgYWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoUmVu
ZGVyQm94Kik7CkBAIC0xMjgsMTMgKzEyOCwxMyBAQCBwdWJsaWM6CiAKICAgICAvLyB0aGUgaW1w
bGVtZW50YXRpb24gb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaXMgaW4gYmlkaS5jcHAKICAg
ICBzdHJ1Y3QgRmxvYXRXaXRoUmVjdCB7Ci0gICAgICAgIEZsb2F0V2l0aFJlY3QoUmVuZGVyT2Jq
ZWN0KiBmKQorICAgICAgICBGbG9hdFdpdGhSZWN0KFJlbmRlckJveCogZikKICAgICAgICAgICAg
IDogb2JqZWN0KGYpCi0gICAgICAgICAgICAsIHJlY3QoSW50UmVjdChmLT54UG9zKCkgLSBmLT5t
YXJnaW5MZWZ0KCksIGYtPnlQb3MoKSAtIGYtPm1hcmdpblRvcCgpLCBmLT53aWR0aCgpICsgZi0+
bWFyZ2luTGVmdCgpICsgZi0+bWFyZ2luUmlnaHQoKSwgZi0+aGVpZ2h0KCkgKyBmLT5tYXJnaW5U
b3AoKSArIGYtPm1hcmdpbkJvdHRvbSgpKSkKKyAgICAgICAgICAgICwgcmVjdChJbnRSZWN0KGYt
PngoKSAtIGYtPm1hcmdpbkxlZnQoKSwgZi0+eSgpIC0gZi0+bWFyZ2luVG9wKCksIGYtPndpZHRo
KCkgKyBmLT5tYXJnaW5MZWZ0KCkgKyBmLT5tYXJnaW5SaWdodCgpLCBmLT5oZWlnaHQoKSArIGYt
Pm1hcmdpblRvcCgpICsgZi0+bWFyZ2luQm90dG9tKCkpKQogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdDsKKyAgICAgICAgUmVuZGVyQm94KiBvYmpl
Y3Q7CiAgICAgICAgIEludFJlY3QgcmVjdDsKICAgICB9OwogCkBAIC0xNjksMTUgKzE2OSwxNSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFNlbGVjdGlvbihQYWludEluZm8mLCBpbnQgdHgsIGlu
dCB0eSk7CiAgICAgdm9pZCBwYWludENhcmV0KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBD
YXJldFR5cGUpOwogCi0gICAgdm9pZCBpbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJPYmplY3Qq
KTsKLSAgICB2b2lkIHJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlck9iamVjdCopOworICAgIHZv
aWQgaW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94Kik7CisgICAgdm9pZCByZW1vdmVGbG9h
dGluZ09iamVjdChSZW5kZXJCb3gqKTsKIAogICAgIC8vIENhbGxlZCBmcm9tIGxpbmVXaWR0aCwg
dG8gcG9zaXRpb24gdGhlIGZsb2F0cyBhZGRlZCBpbiB0aGUgbGFzdCBsaW5lLgogICAgIC8vIFJl
dHVybnMgdHVyZSBpZiBhbmQgb25seSBpZiBpdCBoYXMgcG9zaXRpb25lZCBhbnkgZmxvYXRzLgog
ICAgIGJvb2wgcG9zaXRpb25OZXdGbG9hdHMoKTsKICAgICB2b2lkIGNsZWFyRmxvYXRzKCk7Ci0g
ICAgaW50IGdldENsZWFyRGVsdGEoUmVuZGVyT2JqZWN0KiBjaGlsZCk7Ci0gICAgdmlydHVhbCB2
b2lkIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyT2JqZWN0KiBm
bG9hdFRvUmVtb3ZlID0gMCk7CisgICAgaW50IGdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGls
ZCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlv
dXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlID0gMCk7CiAgICAgdm9pZCBtYXJrUG9zaXRpb25l
ZE9iamVjdHNGb3JMYXlvdXQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjb250YWluc0Zsb2F0cygp
IHsgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0
eSgpOyB9CkBAIC0xODUsNyArMTg1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGF2
b2lkc0Zsb2F0cygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGhhc092ZXJoYW5naW5nRmxv
YXRzKCkgeyByZXR1cm4gIWhhc0NvbHVtbnMoKSAmJiBmbG9hdEJvdHRvbSgpID4gbV9oZWlnaHQ7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzT3ZlcmhhbmdpbmdGbG9hdHMoKSB7IHJldHVybiAhaGFz
Q29sdW1ucygpICYmIGZsb2F0Qm90dG9tKCkgPiBoZWlnaHQoKTsgfQogICAgIHZvaWQgYWRkSW50
cnVkaW5nRmxvYXRzKFJlbmRlckJsb2NrKiBwcmV2LCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQp
OwogICAgIGludCBhZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGludCB4
b2Zmc2V0LCBpbnQgeW9mZnNldCwgYm9vbCBtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzKTsKIApA
QCAtMzUyLDcgKzM1Miw3IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBUeXBlIHR5cGUoKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CiAKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiBtX3JlbmRlcmVyOworICAgICAgICBSZW5kZXJCb3gqIG1fcmVuZGVyZXI7CiAgICAgICAgIGlu
dCBtX3RvcDsKICAgICAgICAgaW50IG1fYm90dG9tOwogICAgICAgICBpbnQgbV9sZWZ0OwpAQCAt
MzY1LDE4ICszNjUsMTggQEAgcHJvdGVjdGVkOgogICAgIC8vIFRoZSBmb2xsb3dpbmcgaGVscGVy
IGZ1bmN0aW9ucyBhbmQgc3RydWN0cyBhcmUgdXNlZCBieSBsYXlvdXRCbG9ja0NoaWxkcmVuLgog
ICAgIGNsYXNzIENvbXBhY3RJbmZvIHsKICAgICAgICAgLy8gQSBjb21wYWN0IGNoaWxkIHRoYXQg
bmVlZHMgdG8gYmUgY29sbGFwc2VkIGludG8gdGhlIG1hcmdpbiBvZiB0aGUgZm9sbG93aW5nIGJs
b2NrLgotICAgICAgICBSZW5kZXJPYmplY3QqIG1fY29tcGFjdDsKKyAgICAgICAgUmVuZGVyQm94
KiBtX2NvbXBhY3Q7CiAKICAgICAgICAgLy8gVGhlIGJsb2NrIHdpdGggdGhlIG9wZW4gbWFyZ2lu
IHRoYXQgdGhlIGNvbXBhY3QgY2hpbGQgaXMgZ29pbmcgdG8gcGxhY2UgaXRzZWxmIHdpdGhpbi4K
ICAgICAgICAgUmVuZGVyT2JqZWN0KiBtX2Jsb2NrOwogCiAgICAgcHVibGljOgotICAgICAgICBS
ZW5kZXJPYmplY3QqIGNvbXBhY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbXBhY3Q7IH0KKyAgICAg
ICAgUmVuZGVyQm94KiBjb21wYWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb21wYWN0OyB9CiAgICAg
ICAgIFJlbmRlck9iamVjdCogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CiAgICAg
ICAgIGJvb2wgbWF0Y2hlcyhSZW5kZXJPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBtX2Nv
bXBhY3QgJiYgbV9ibG9jayA9PSBjaGlsZDsgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKSB7IHNl
dCgwLCAwKTsgfQotICAgICAgICB2b2lkIHNldChSZW5kZXJPYmplY3QqIGMsIFJlbmRlck9iamVj
dCogYikgeyBtX2NvbXBhY3QgPSBjOyBtX2Jsb2NrID0gYjsgfQorICAgICAgICB2b2lkIHNldChS
ZW5kZXJCb3gqIGMsIFJlbmRlck9iamVjdCogYikgeyBtX2NvbXBhY3QgPSBjOyBtX2Jsb2NrID0g
YjsgfQogCiAgICAgICAgIENvbXBhY3RJbmZvKCkgeyBjbGVhcigpOyB9CiAgICAgfTsKQEAgLTQ0
OSwyNCArNDQ5LDI0IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRqdXN0UG9zaXRpb25lZEJs
b2NrKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICB2b2lkIGFk
anVzdEZsb2F0aW5nQmxvY2soY29uc3QgTWFyZ2luSW5mbyYpOwotICAgIFJlbmRlck9iamVjdCog
aGFuZGxlU3BlY2lhbENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8m
LCBDb21wYWN0SW5mbyYsIGJvb2wmIGhhbmRsZWQpOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxl
RmxvYXRpbmdDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiwgYm9v
bCYgaGFuZGxlZCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBoYW5kbGVQb3NpdGlvbmVkQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYsIGJvb2wmIGhhbmRsZWQpOwotICAg
IFJlbmRlck9iamVjdCogaGFuZGxlQ29tcGFjdENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIENv
bXBhY3RJbmZvJiwgYm9vbCYgaGFuZGxlZCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBoYW5kbGVSdW5J
bkNoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIGJvb2wmIGhhbmRsZWQpOwotICAgIHZvaWQgY29s
bGFwc2VNYXJnaW5zKFJlbmRlck9iamVjdCogY2hpbGQsIE1hcmdpbkluZm8mLCBpbnQgeVBvc0Vz
dGltYXRlKTsKLSAgICB2b2lkIGNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyT2JqZWN0KiBjaGls
ZCwgTWFyZ2luSW5mbyYsIGludCBvbGRUb3BQb3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJnaW4p
OwotICAgIHZvaWQgaW5zZXJ0Q29tcGFjdElmTmVlZGVkKFJlbmRlck9iamVjdCogY2hpbGQsIENv
bXBhY3RJbmZvJik7CisgICAgUmVuZGVyQm94KiBoYW5kbGVTcGVjaWFsQ2hpbGQoUmVuZGVyQm94
KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYsIENvbXBhY3RJbmZvJiwgYm9vbCYgaGFuZGxlZCk7
CisgICAgUmVuZGVyQm94KiBoYW5kbGVGbG9hdGluZ0NoaWxkKFJlbmRlckJveCogY2hpbGQsIGNv
bnN0IE1hcmdpbkluZm8mLCBib29sJiBoYW5kbGVkKTsKKyAgICBSZW5kZXJCb3gqIGhhbmRsZVBv
c2l0aW9uZWRDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiwgYm9vbCYg
aGFuZGxlZCk7CisgICAgUmVuZGVyQm94KiBoYW5kbGVDb21wYWN0Q2hpbGQoUmVuZGVyQm94KiBj
aGlsZCwgQ29tcGFjdEluZm8mLCBib29sJiBoYW5kbGVkKTsKKyAgICBSZW5kZXJCb3gqIGhhbmRs
ZVJ1bkluQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgYm9vbCYgaGFuZGxlZCk7CisgICAgdm9pZCBj
b2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYsIGludCB5UG9zRXN0
aW1hdGUpOworICAgIHZvaWQgY2xlYXJGbG9hdHNJZk5lZWRlZChSZW5kZXJCb3gqIGNoaWxkLCBN
YXJnaW5JbmZvJiwgaW50IG9sZFRvcFBvc01hcmdpbiwgaW50IG9sZFRvcE5lZ01hcmdpbik7Cisg
ICAgdm9pZCBpbnNlcnRDb21wYWN0SWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgQ29tcGFjdElu
Zm8mKTsKICAgICBpbnQgZXN0aW1hdGVWZXJ0aWNhbFBvc2l0aW9uKFJlbmRlck9iamVjdCogY2hp
bGQsIGNvbnN0IE1hcmdpbkluZm8mKTsKLSAgICB2b2lkIGRldGVybWluZUhvcml6b250YWxQb3Np
dGlvbihSZW5kZXJPYmplY3QqIGNoaWxkKTsKKyAgICB2b2lkIGRldGVybWluZUhvcml6b250YWxQ
b3NpdGlvbihSZW5kZXJCb3gqIGNoaWxkKTsKICAgICB2b2lkIGhhbmRsZUJvdHRvbU9mQmxvY2so
aW50IHRvcCwgaW50IGJvdHRvbSwgTWFyZ2luSW5mbyYpOwogICAgIHZvaWQgc2V0Q29sbGFwc2Vk
Qm90dG9tTWFyZ2luKGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICAvLyBFbmQgaGVscGVyIGZ1bmN0
aW9ucyBhbmQgc3RydWN0cyB1c2VkIGJ5IGxheW91dEJsb2NrQ2hpbGRyZW4uCiAKIHByaXZhdGU6
Ci0gICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZW5kZXJPYmplY3QqPjo6Y29uc3RfaXRlcmF0b3Ig
SXRlcmF0b3I7CisgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZW5kZXJCb3gqPjo6Y29uc3RfaXRl
cmF0b3IgSXRlcmF0b3I7CiAgICAgRGVwcmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+KiBt
X2Zsb2F0aW5nT2JqZWN0czsKLSAgICBMaXN0SGFzaFNldDxSZW5kZXJPYmplY3QqPiogbV9wb3Np
dGlvbmVkT2JqZWN0czsKKyAgICBMaXN0SGFzaFNldDxSZW5kZXJCb3gqPiogbV9wb3NpdGlvbmVk
T2JqZWN0czsKICAgICAgICAgIAogICAgIC8vIEFsbG9jYXRlZCBvbmx5IHdoZW4gc29tZSBvZiB0
aGVzZSBmaWVsZHMgaGF2ZSBub24tZGVmYXVsdCB2YWx1ZXMKICAgICBzdHJ1Y3QgTWF4TWFyZ2lu
IHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3
IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRmxleGlibGVCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTYwLDEwICs2MSw2IEBAIGJvb2wgUmVuZGVyQm94Ojpz
X2hhZE92ZXJmbG93Q2xpcCA9IGZhbHMKIAogUmVuZGVyQm94OjpSZW5kZXJCb3goTm9kZSogbm9k
ZSkKICAgICA6IFJlbmRlck9iamVjdChub2RlKQotICAgICwgbV93aWR0aCgwKQotICAgICwgbV9o
ZWlnaHQoMCkKLSAgICAsIG1feCgwKQotICAgICwgbV95KDApCiAgICAgLCBtX21hcmdpbkxlZnQo
MCkKICAgICAsIG1fbWFyZ2luUmlnaHQoMCkKICAgICAsIG1fbWFyZ2luVG9wKDApCkBAIC03Myw2
ICs3MCw3IEBAIFJlbmRlckJveDo6UmVuZGVyQm94KE5vZGUqIG5vZGUpCiAgICAgLCBtX2xheWVy
KDApCiAgICAgLCBtX2lubGluZUJveFdyYXBwZXIoMCkKIHsKKyAgICBzZXRJc0JveCgpOwogfQog
CiBSZW5kZXJCb3g6On5SZW5kZXJCb3goKQpAQCAtMjE0LDYgKzIxMiwyNjMgQEAgdm9pZCBSZW5k
ZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFJlbmRlclN0eQogICAgICAgICBkb2N1bWVudCgpLT5zZXRU
ZXh0Q29sb3Ioc3R5bGUoKS0+Y29sb3IoKSk7CiB9CiAKKworaW50IFJlbmRlckJveDo6b2Zmc2V0
TGVmdCgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBvZmZzZXRQYXIgPSBvZmZzZXRQYXJlbnQo
KTsKKyAgICBpZiAoIW9mZnNldFBhcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaW50IHhQb3Mg
PSB4KCkgLSBvZmZzZXRQYXItPmJvcmRlckxlZnQoKTsKKyAgICBpZiAoIWlzUG9zaXRpb25lZCgp
KSB7CisgICAgICAgIGlmIChpc1JlbFBvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIHhQb3MgKz0g
cmVsYXRpdmVQb3NpdGlvbk9mZnNldFgoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjdXJyID0g
cGFyZW50KCk7CisgICAgICAgIHdoaWxlIChjdXJyICYmIGN1cnIgIT0gb2Zmc2V0UGFyKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBhcmUgd2Ugc3VwcG9zZWQgdG8gZG8gaW5zaWRlIFNW
RyBjb250ZW50PworICAgICAgICAgICAgaWYgKGN1cnItPmlzQm94KCkpCisgICAgICAgICAgICAg
ICAgeFBvcyArPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjdXJyKS0+eCgpOworICAgICAgICAg
ICAgY3VyciA9IGN1cnItPnBhcmVudCgpOworICAgICAgICB9CisgICAgICAgIGlmIChvZmZzZXRQ
YXItPmlzQm9keSgpICYmICFvZmZzZXRQYXItPmlzUmVsUG9zaXRpb25lZCgpICYmICFvZmZzZXRQ
YXItPmlzUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgeFBvcyArPSBvZmZzZXRQYXItPngoKTsK
KyAgICB9CisgICAgcmV0dXJuIHhQb3M7Cit9CisKK2ludCBSZW5kZXJCb3g6Om9mZnNldFRvcCgp
IGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBvZmZzZXRQYXIgPSBvZmZzZXRQYXJlbnQoKTsKKyAg
ICBpZiAoIW9mZnNldFBhcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaW50IHlQb3MgPSBtX2Zy
YW1lUmVjdC55KCkgLSBvZmZzZXRQYXItPmJvcmRlclRvcCgpOworICAgIGlmICghaXNQb3NpdGlv
bmVkKCkpIHsKKyAgICAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgeVBv
cyArPSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WSgpOworICAgICAgICBSZW5kZXJPYmplY3QqIGN1
cnIgPSBwYXJlbnQoKTsKKyAgICAgICAgd2hpbGUgKGN1cnIgJiYgY3VyciAhPSBvZmZzZXRQYXIp
IHsKKyAgICAgICAgICAgIGlmIChjdXJyLT5pc0JveCgpICYmICFjdXJyLT5pc1RhYmxlUm93KCkp
CisgICAgICAgICAgICAgICAgeVBvcyArPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjdXJyKS0+
eSgpOworICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOworICAgICAgICB9CisgICAg
ICAgIGlmIChvZmZzZXRQYXItPmlzQm9keSgpICYmICFvZmZzZXRQYXItPmlzUmVsUG9zaXRpb25l
ZCgpICYmICFvZmZzZXRQYXItPmlzUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgeVBvcyArPSBv
ZmZzZXRQYXItPnkoKTsKKyAgICB9CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK1JlbmRlckJveCog
UmVuZGVyQm94OjpvZmZzZXRQYXJlbnQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBJdCBmZWVs
cyBsaWtlIHRoaXMgZnVuY3Rpb24gY291bGQgYWxtb3N0IGJlIHdyaXR0ZW4gdXNpbmcgY29udGFp
bmluZyBibG9ja3MuCisgICAgaWYgKGlzQm9keSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGJvb2wgc2tpcFRhYmxlcyA9IGlzUG9zaXRpb25lZCgpIHx8IGlzUmVsUG9zaXRpb25lZCgpOwor
ICAgIGZsb2F0IGN1cnJab29tID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIFJlbmRl
ck9iamVjdCogY3VyciA9IHBhcmVudCgpOworICAgIHdoaWxlIChjdXJyICYmICghY3Vyci0+ZWxl
bWVudCgpIHx8CisgICAgICAgICAgICAgICAgICAgICghY3Vyci0+aXNQb3NpdGlvbmVkKCkgJiYg
IWN1cnItPmlzUmVsUG9zaXRpb25lZCgpICYmICFjdXJyLT5pc0JvZHkoKSkpKSB7CisgICAgICAg
IE5vZGUqIGVsZW1lbnQgPSBjdXJyLT5lbGVtZW50KCk7CisgICAgICAgIGlmICghc2tpcFRhYmxl
cyAmJiBlbGVtZW50KSB7CisgICAgICAgICAgICBib29sIGlzVGFibGVFbGVtZW50ID0gZWxlbWVu
dC0+aGFzVGFnTmFtZSh0YWJsZVRhZykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKHRkVGFnKSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUodGhUYWcpOworCisjaWYgRU5BQkxFKFdN
TCkKKyAgICAgICAgICAgIGlmICghaXNUYWJsZUVsZW1lbnQgJiYgZWxlbWVudC0+aXNXTUxFbGVt
ZW50KCkpCisgICAgICAgICAgICAgICAgaXNUYWJsZUVsZW1lbnQgPSBlbGVtZW50LT5oYXNUYWdO
YW1lKFdNTE5hbWVzOjp0YWJsZVRhZykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoV01MTmFtZXM6OnRkVGFnKTsKKyNlbmRpZgorCisgICAg
ICAgICAgICBpZiAoaXNUYWJsZUVsZW1lbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBmbG9hdCBuZXdab29tID0gY3Vyci0+c3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpOworICAgICAgICBpZiAoY3Vyclpvb20gIT0gbmV3Wm9vbSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjdXJyWm9vbSA9IG5ld1pvb207CisgICAgICAgIGN1cnIgPSBjdXJyLT5w
YXJlbnQoKTsKKyAgICB9CisgICAgcmV0dXJuIGN1cnItPmlzQm94KCkgPyBzdGF0aWNfY2FzdDxS
ZW5kZXJCb3gqPihjdXJyKSA6IDA7Cit9CisKKy8vIE1vcmUgSUUgZXh0ZW5zaW9ucy4gIGNsaWVu
dFdpZHRoIGFuZCBjbGllbnRIZWlnaHQgcmVwcmVzZW50IHRoZSBpbnRlcmlvciBvZiBhbiBvYmpl
Y3QKKy8vIGV4Y2x1ZGluZyBib3JkZXIgYW5kIHNjcm9sbGJhci4KK2ludCBSZW5kZXJCb3g6OmNs
aWVudFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2lkdGgoKSAtIGJvcmRlckxlZnQoKSAt
IGJvcmRlclJpZ2h0KCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7Cit9CisKK2ludCBSZW5k
ZXJCb3g6OmNsaWVudEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlaWdodCgpIC0gYm9y
ZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsK
K30KKworLy8gc2Nyb2xsV2lkdGgvc2Nyb2xsSGVpZ2h0IHdpbGwgYmUgdGhlIHNhbWUgYXMgY2xp
ZW50V2lkdGgvY2xpZW50SGVpZ2h0IHVubGVzcyB0aGUKKy8vIG9iamVjdCBoYXMgb3ZlcmZsb3c6
aGlkZGVuL3Njcm9sbC9hdXRvIHNwZWNpZmllZCBhbmQgYWxzbyBoYXMgb3ZlcmZsb3cuCitpbnQg
UmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc092ZXJmbG93
Q2xpcCgpID8gbV9sYXllci0+c2Nyb2xsV2lkdGgoKSA6IG92ZXJmbG93V2lkdGgoKTsKK30KKwor
aW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzT3Zl
cmZsb3dDbGlwKCkgPyBtX2xheWVyLT5zY3JvbGxIZWlnaHQoKSA6IG92ZXJmbG93SGVpZ2h0KCk7
Cit9CisKK2ludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdAoreworICAgIHJldHVybiBo
YXNPdmVyZmxvd0NsaXAoKSA/IG1fbGF5ZXItPnNjcm9sbFhPZmZzZXQoKSA6IDA7Cit9CisKK2lu
dCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc092ZXJmbG93
Q2xpcCgpID8gbV9sYXllci0+c2Nyb2xsWU9mZnNldCgpIDogMDsKK30KKwordm9pZCBSZW5kZXJC
b3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCit7CisgICAgaWYgKGhhc092ZXJmbG93Q2xp
cCgpKQorICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1hPZmZzZXQobmV3TGVmdCk7Cit9CisKK3Zv
aWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKK3sKKyAgICBpZiAoaGFzT3Zl
cmZsb3dDbGlwKCkpCisgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWU9mZnNldChuZXdUb3ApOwor
fQorCit2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
LCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCkKK3sKKyAgICAvLyBGb3IgYmxvY2tzIGlu
c2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5zIHNvIHRoYXQgd2Ug
cnVuIHJpZ2h0IHVwIHRvIHRoZQorICAgIC8vIGlubGluZSBib3hlcyBhYm92ZSBhbmQgYmVsb3cg
dXMgKHRodXMgZ2V0dGluZyBtZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0gYSBzaW5nbGUgaXJyZWd1
bGFyCisgICAgLy8gc2hhcGUpLgorICAgIFJlbmRlckZsb3cqIGNvbnRpbnVhdGlvbiA9IHZpcnR1
YWxDb250aW51YXRpb24oKTsKKyAgICBpZiAodG9wTGV2ZWwgJiYgY29udGludWF0aW9uKSB7Cisg
ICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSAtIGNvbGxhcHNlZE1hcmdpblRvcCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLCBoZWlnaHQoKSArIGNvbGxh
cHNlZE1hcmdpblRvcCgpICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCkpKTsKKyAgICAgICAgY29u
dGludWF0aW9uLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHggLSB4KCkgKyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9jaygpLT54
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAtIHkoKSArIGNvbnRp
bnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCktPnkoKSwgdG9wTGV2ZWwpOworICAgIH0gZWxzZQor
ICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpICsg
aW50cmluc2ljUGFkZGluZ1RvcCgpICsgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpKSk7Cit9CisK
K3ZvaWQgUmVuZGVyQm94OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywg
Ym9vbCB0b3BMZXZlbCkKK3sKKyAgICAvLyBGb3IgYmxvY2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBn
byBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5zIHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRo
ZQorICAgIC8vIGlubGluZSBib3hlcyBhYm92ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGluZyBt
ZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0gYSBzaW5nbGUgaXJyZWd1bGFyCisgICAgLy8gc2hhcGUp
LgorICAgIFJlbmRlckZsb3cqIGNvbnRpbnVhdGlvbiA9IHZpcnR1YWxDb250aW51YXRpb24oKTsK
KyAgICBpZiAodG9wTGV2ZWwgJiYgY29udGludWF0aW9uKSB7CisgICAgICAgIEZsb2F0UmVjdCBs
b2NhbFJlY3QoMCwgLWNvbGxhcHNlZE1hcmdpblRvcCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpZHRoKCksIGhlaWdodCgpICsgY29sbGFwc2VkTWFyZ2luVG9wKCkgKyBjb2xsYXBz
ZWRNYXJnaW5Cb3R0b20oKSk7CisgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVR
dWFkKGxvY2FsUmVjdCkpOworICAgICAgICBjb250aW51YXRpb24tPmFic29sdXRlUXVhZHMocXVh
ZHMsIHRvcExldmVsKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpICsgaW50cmluc2lj
UGFkZGluZ1RvcCgpICsgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpKSkpOworfQorCitJbnRSZWN0
IFJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJl
Y3QgPSBjb250ZW50Qm94UmVjdCgpOworICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fi
c29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOworICAgIHJlY3QubW92ZShhYnNQb3MueCgp
LCBhYnNQb3MueSgpKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworRmxvYXRRdWFkIFJlbmRlckJv
eDo6YWJzb2x1dGVDb250ZW50UXVhZCgpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gY29u
dGVudEJveFJlY3QoKTsKKyAgICByZXR1cm4gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
cmVjdCkpOworfQorCisKK0ludFJlY3QgUmVuZGVyQm94OjphYnNvbHV0ZU91dGxpbmVCb3VuZHMo
KSBjb25zdAoreworICAgIEludFJlY3QgYm94ID0gYm9yZGVyQm94UmVjdCgpOworICAgIGFkanVz
dFJlY3RGb3JPdXRsaW5lQW5kU2hhZG93KGJveCk7CisKKyAgICBGbG9hdFF1YWQgYWJzT3V0bGlu
ZVF1YWQgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3gpKTsKKyAgICBib3ggPSBh
YnNPdXRsaW5lUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgIGJveC5tb3ZlKHZpZXco
KS0+bGF5b3V0RGVsdGEoKSk7CisKKyAgICByZXR1cm4gYm94OworfQorCit2b2lkIFJlbmRlckJv
eDo6YWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGlu
dCB0eCwgaW50IHR5KQoreworICAgIC8vIEZvciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdv
IGFoZWFkIGFuZCBpbmNsdWRlIG1hcmdpbnMgc28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhl
CisgICAgLy8gaW5saW5lIGJveGVzIGFib3ZlIGFuZCBiZWxvdyB1cyAodGh1cyBnZXR0aW5nIG1l
cmdlZCB3aXRoIHRoZW0gdG8gZm9ybSBhIHNpbmdsZSBpcnJlZ3VsYXIKKyAgICAvLyBzaGFwZSku
CisgICAgUmVuZGVyRmxvdyogY29udGludWF0aW9uID0gdmlydHVhbENvbnRpbnVhdGlvbigpOwor
ICAgIGlmIChjb250aW51YXRpb24pIHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRGb2N1
c1JpbmdSZWN0KEludFJlY3QodHgsIHR5IC0gY29sbGFwc2VkTWFyZ2luVG9wKCksIHdpZHRoKCks
IGhlaWdodCgpICsgY29sbGFwc2VkTWFyZ2luVG9wKCkgKyBjb2xsYXBzZWRNYXJnaW5Cb3R0b20o
KSkpOworICAgICAgICBjb250aW51YXRpb24tPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIHgoKSAr
IGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCktPngoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eSAtIHkoKSArIGNvbnRpbnVhdGlvbi0+Y29udGFpbmlu
Z0Jsb2NrKCktPnkoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRk
Rm9jdXNSaW5nUmVjdChJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKK30KKwor
CitJbnRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGlvbkJveCgpIGNvbnN0Cit7CisgICAgSW50UmVj
dCByZXN1bHQ7CisgICAgaWYgKCFzdHlsZSgpLT5ib3hSZWZsZWN0KCkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgSW50UmVjdCBib3ggPSBib3JkZXJCb3hSZWN0KCk7CisgICAgcmVzdWx0
ID0gYm94OworICAgIHN3aXRjaCAoc3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5kaXJlY3Rpb24oKSkg
eworICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxvdzoKKyAgICAgICAgICAgIHJlc3VsdC5tb3Zl
KDAsIGJveC5oZWlnaHQoKSArIHJlZmxlY3Rpb25PZmZzZXQoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSZWZsZWN0aW9uQWJvdmU6CisgICAgICAgICAgICByZXN1bHQubW92
ZSgwLCAtYm94LmhlaWdodCgpIC0gcmVmbGVjdGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFJlZmxlY3Rpb25MZWZ0OgorICAgICAgICAgICAgcmVzdWx0Lm1v
dmUoLWJveC53aWR0aCgpIC0gcmVmbGVjdGlvbk9mZnNldCgpLCAwKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFJlZmxlY3Rpb25SaWdodDoKKyAgICAgICAgICAgIHJlc3VsdC5t
b3ZlKGJveC53aWR0aCgpICsgcmVmbGVjdGlvbk9mZnNldCgpLCAwKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQgUmVuZGVyQm94OjpyZWZs
ZWN0aW9uT2Zmc2V0KCkgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlKCktPmJveFJlZmxlY3QoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHN0eWxlKCktPmJveFJlZmxlY3QoKS0+ZGlyZWN0
aW9uKCkgPT0gUmVmbGVjdGlvbkxlZnQgfHwgc3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5kaXJlY3Rp
b24oKSA9PSBSZWZsZWN0aW9uUmlnaHQpCisgICAgICAgIHJldHVybiBzdHlsZSgpLT5ib3hSZWZs
ZWN0KCktPm9mZnNldCgpLmNhbGNWYWx1ZShib3JkZXJCb3hSZWN0KCkud2lkdGgoKSk7CisgICAg
cmV0dXJuIHN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCkuY2FsY1ZhbHVlKGJvcmRlckJv
eFJlY3QoKS5oZWlnaHQoKSk7Cit9CisKK0ludFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0ZWRSZWN0
KGNvbnN0IEludFJlY3QmIHIpIGNvbnN0Cit7CisgICAgaWYgKCFzdHlsZSgpLT5ib3hSZWZsZWN0
KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBJbnRSZWN0IGJveCA9IGJvcmRl
ckJveFJlY3QoKTsKKyAgICBJbnRSZWN0IHJlc3VsdCA9IHI7CisgICAgc3dpdGNoIChzdHlsZSgp
LT5ib3hSZWZsZWN0KCktPmRpcmVjdGlvbigpKSB7CisgICAgICAgIGNhc2UgUmVmbGVjdGlvbkJl
bG93OgorICAgICAgICAgICAgcmVzdWx0LnNldFkoYm94LmJvdHRvbSgpICsgcmVmbGVjdGlvbk9m
ZnNldCgpICsgKGJveC5ib3R0b20oKSAtIHIuYm90dG9tKCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFJlZmxlY3Rpb25BYm92ZToKKyAgICAgICAgICAgIHJlc3VsdC5zZXRZ
KGJveC55KCkgLSByZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3guaGVpZ2h0KCkgKyAoYm94LmJvdHRv
bSgpIC0gci5ib3R0b20oKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVm
bGVjdGlvbkxlZnQ6CisgICAgICAgICAgICByZXN1bHQuc2V0WChib3gueCgpIC0gcmVmbGVjdGlv
bk9mZnNldCgpIC0gYm94LndpZHRoKCkgKyAoYm94LnJpZ2h0KCkgLSByLnJpZ2h0KCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlZmxlY3Rpb25SaWdodDoKKyAgICAgICAg
ICAgIHJlc3VsdC5zZXRYKGJveC5yaWdodCgpICsgcmVmbGVjdGlvbk9mZnNldCgpICsgKGJveC5y
aWdodCgpIC0gci5yaWdodCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogaW50IFJlbmRlckJveDo6bWluUHJlZldpZHRoKCkgY29uc3QKIHsK
ICAgICBpZiAocHJlZldpZHRoc0RpcnR5KCkpCkBAIC0yNTQsMjIgKzUwOSwxMiBAQCB2b2lkIFJl
bmRlckJveDo6c2V0T3ZlcnJpZGVTaXplKGludCBzKQogCiBpbnQgUmVuZGVyQm94OjpvdmVycmlk
ZVdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcnJpZGVTaXplKCkgPyBvdmVycmlk
ZVNpemUoKSA6IG1fd2lkdGg7CisgICAgcmV0dXJuIGhhc092ZXJyaWRlU2l6ZSgpID8gb3ZlcnJp
ZGVTaXplKCkgOiB3aWR0aCgpOwogfQogCiBpbnQgUmVuZGVyQm94OjpvdmVycmlkZUhlaWdodCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJyaWRlU2l6ZSgpID8gb3ZlcnJpZGVTaXplKCkg
OiBtX2hlaWdodDsKLX0KLQotdm9pZCBSZW5kZXJCb3g6OnNldFBvcyhpbnQgeFBvcywgaW50IHlQ
b3MpCi17Ci0gICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGRvbid0IG1vdmUg
YXQgYWxsLgotICAgIGlmICh4UG9zID09IG1feCAmJiB5UG9zID09IG1feSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV94ID0geFBvczsKLSAgICBtX3kgPSB5UG9zOworICAgIHJldHVybiBoYXNP
dmVycmlkZVNpemUoKSA/IG92ZXJyaWRlU2l6ZSgpIDogaGVpZ2h0KCk7CiB9CiAKIGludCBSZW5k
ZXJCb3g6OmNhbGNCb3JkZXJCb3hXaWR0aChpbnQgd2lkdGgpIGNvbnN0CkBAIC0zMDMsMTAgKzU0
OCwxMCBAQCBpbnQgUmVuZGVyQm94OjpjYWxjQ29udGVudEJveEhlaWdodChpbnQgCiB9CiAKIC8v
IEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlckJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rp
b24pCiB7Ci0gICAgdHggKz0gbV94OwotICAgIHR5ICs9IG1feTsKKyAgICB0eCArPSB4KCk7Cisg
ICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CkBAIC0zMTQsMTYgKzU1OSwxNiBAQCBib29sIFJl
bmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzCiAgICAgICAgIC8vIGF0IHRoZSBtb21l
bnQgKGEgZGVtb3RlZCBpbmxpbmUgPGZvcm0+IGZvciBleGFtcGxlKS4gSWYgd2UgZXZlciBpbXBs
ZW1lbnQgYQogICAgICAgICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQtdGVzdCBtZXRob2QgKHdoaWNo
IHdlIHNob3VsZCBkbyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbnl3YXkpLAogICAgICAgICAv
LyB0aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KLSAgICAgICAgaWYgKCFjaGlsZC0+aGFz
TGF5ZXIoKSAmJiAhY2hpbGQtPmlzSW5saW5lRmxvdygpICYmIGNoaWxkLT5ub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CisgICAg
ICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgIWNoaWxkLT5pc0lubGluZUZsb3coKSAmJiBj
aGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCB0eCwgdHksIGFj
dGlvbikpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2lu
dCh4UG9zIC0gdHgsIHlQb3MgLSB0eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1
cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAv
LyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBpcyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBs
aWtlIGltYWdlcykuCi0gICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0g
SGl0VGVzdEZvcmVncm91bmQgJiYgSW50UmVjdCh0eCwgdHksIG1fd2lkdGgsIG1faGVpZ2h0KS5j
b250YWlucyh4LCB5KSkgewotICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50
UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYm
IGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwg
aGVpZ2h0KCkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKSB7CisgICAgICAgIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0eSkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTMzNCw4ICs1NzksOCBAQCBib29sIFJlbmRlckJveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzCiAKIHZvaWQgUmVuZGVyQm94OjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgdHggKz0gbV94OwotICAgIHR5
ICs9IG1feTsKKyAgICB0eCArPSB4KCk7CisgICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwogCiAg
ICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4gSnVzdCBwYXNzIHBhaW50IHRocm91Z2ggdG8g
dGhlIGNoaWxkcmVuCiAgICAgUGFpbnRJbmZvIGNoaWxkSW5mbyhwYWludEluZm8pOwpAQCAtNDAx
LDggKzY0Niw4IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJveERlY29yYXRpb25zKFBhaW4KICAg
ICB9CiAKICAgICBpbnQgdyA9IHdpZHRoKCk7Ci0gICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRl
clRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpOwotICAgIHR5IC09IGJvcmRlclRvcEV4
dHJhKCk7CisgICAgaW50IGggPSBoZWlnaHQoKSArIGludHJpbnNpY1BhZGRpbmdUb3AoKSArIGlu
dHJpbnNpY1BhZGRpbmdCb3R0b20oKTsKKyAgICB0eSAtPSBpbnRyaW5zaWNQYWRkaW5nVG9wKCk7
CiAKICAgICAvLyBib3JkZXItZml0IGNhbiBhZGp1c3Qgd2hlcmUgd2UgcGFpbnQgb3VyIGJvcmRl
ciBhbmQgYmFja2dyb3VuZC4gIElmIHNldCwgd2Ugc251Z2x5IGZpdCBvdXIgbGluZSBib3ggZGVz
Y2VuZGFudHMuICAoVGhlIGlDaGF0CiAgICAgLy8gYmFsbG9vbiBsYXlvdXQgaXMgYW4gZXhhbXBs
ZSBvZiB0aGlzKS4KQEAgLTQ0Myw4ICs2ODgsOCBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRNYXNr
KFBhaW50SW5mbyYgcGFpCiAgICAgICAgIHJldHVybjsKIAogICAgIGludCB3ID0gd2lkdGgoKTsK
LSAgICBpbnQgaCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4
dHJhKCk7Ci0gICAgdHkgLT0gYm9yZGVyVG9wRXh0cmEoKTsKKyAgICBpbnQgaCA9IGhlaWdodCgp
ICsgaW50cmluc2ljUGFkZGluZ1RvcCgpICsgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpOworICAg
IHR5IC09IGludHJpbnNpY1BhZGRpbmdUb3AoKTsKIAogICAgIC8vIGJvcmRlci1maXQgY2FuIGFk
anVzdCB3aGVyZSB3ZSBwYWludCBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kLiAgSWYgc2V0LCB3
ZSBzbnVnbHkgZml0IG91ciBsaW5lIGJveCBkZXNjZW5kYW50cy4gIChUaGUgaUNoYXQKICAgICAv
LyBiYWxsb29uIGxheW91dCBpcyBhbiBleGFtcGxlIG9mIHRoaXMpLgpAQCAtNDg5LDcgKzczNCw3
IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludE1hc2tJbWFnZXMoY29uc3QgUGEKIAogSW50UmVjdCBS
ZW5kZXJCb3g6Om1hc2tDbGlwUmVjdCgpCiB7Ci0gICAgSW50UmVjdCBiYm94ID0gYm9yZGVyQm94
KCk7CisgICAgSW50UmVjdCBiYm94ID0gYm9yZGVyQm94UmVjdCgpOwogICAgIGlmIChzdHlsZSgp
LT5tYXNrQm94SW1hZ2UoKS5pbWFnZSgpKQogICAgICAgICByZXR1cm4gYmJveDsKICAgICAKQEAg
LTYwNiw3ICs4NTEsNyBAQCBib29sIFJlbmRlckJveDo6cmVwYWludExheWVyUmVjdHNGb3JJbWFn
CiAgICAgICAgICAgICAgICAgICAgICAgICBtYXgobGF5ZXJSZW5kZXJlci0+aGVpZ2h0KCkgKyBs
YXllclJlbmRlcmVyLT5tYXJnaW5Ub3AoKSArIGxheWVyUmVuZGVyZXItPm1hcmdpbkJvdHRvbSgp
ICsgbGF5ZXJSZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyBsYXllclJlbmRlcmVyLT5ib3JkZXJCb3R0
b20oKSwgcmgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICBsYXllclJlbmRlcmVyID0gdGhpczsKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJSZWN0
ID0gYm9yZGVyQm94KCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyUmVjdCA9IGJvcmRl
ckJveFJlY3QoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTg4Nywx
MCArMTEzMiwxMCBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQoaW50CiAg
ICAgUm9vdElubGluZUJveCogciA9IGJveFdyYXAgPyBib3hXcmFwLT5yb290KCkgOiAwOwogICAg
IGlmIChyKSB7CiAgICAgICAgIEZsb2F0UmVjdCByb290UmVjdCh0eCArIHItPnhQb3MoKSwgdHkg
KyByLT5zZWxlY3Rpb25Ub3AoKSwgci0+d2lkdGgoKSwgci0+c2VsZWN0aW9uSGVpZ2h0KCkpOwot
ICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KHR4ICsgbV94LCByb290UmVjdC55KCksIHdpZHRo
KCksIHJvb3RSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdCh0eCAr
IHgoKSwgcm9vdFJlY3QueSgpLCB3aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSk7CiAgICAgICAg
IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQobm9kZSgpLCB0
eXBlLCBpbWFnZVJlY3QsIHJvb3RSZWN0LCBiZWhpbmRUZXh0LCBmYWxzZSk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIHdpZHRo
KCksIGhlaWdodCgpKTsKKyAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdCh0eCArIHgoKSwgdHkg
KyBtX2ZyYW1lUmVjdC55KCksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAgcGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpLT5wYWludEN1c3RvbUhpZ2hsaWdodChub2RlKCksIHR5cGUsIGltYWdl
UmVjdCwgaW1hZ2VSZWN0LCBiZWhpbmRUZXh0LCBmYWxzZSk7CiAgICAgfQogfQpAQCAtOTA3LDgg
KzExNTIsOCBAQCBJbnRSZWN0IFJlbmRlckJveDo6Z2V0T3ZlcmZsb3dDbGlwUmVjdChpCiAKICAg
ICBpbnQgY2xpcFggPSB0eCArIGJMZWZ0OwogICAgIGludCBjbGlwWSA9IHR5ICsgYlRvcDsKLSAg
ICBpbnQgY2xpcFdpZHRoID0gbV93aWR0aCAtIGJMZWZ0IC0gYm9yZGVyUmlnaHQoKTsKLSAgICBp
bnQgY2xpcEhlaWdodCA9IG1faGVpZ2h0IC0gYlRvcCAtIGJvcmRlckJvdHRvbSgpICsgYm9yZGVy
VG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7CisgICAgaW50IGNsaXBXaWR0aCA9IHdp
ZHRoKCkgLSBiTGVmdCAtIGJvcmRlclJpZ2h0KCk7CisgICAgaW50IGNsaXBIZWlnaHQgPSBoZWln
aHQoKSAtIGJUb3AgLSBib3JkZXJCb3R0b20oKSArIGludHJpbnNpY1BhZGRpbmdUb3AoKSArIGlu
dHJpbnNpY1BhZGRpbmdCb3R0b20oKTsKIAogICAgIC8vIFN1YnRyYWN0IG91dCBzY3JvbGxiYXJz
IGlmIHdlIGhhdmUgdGhlbS4KICAgICBpZiAobV9sYXllcikgewpAQCAtOTIzLDI2ICsxMTY4LDI2
IEBAIEludFJlY3QgUmVuZGVyQm94OjpnZXRDbGlwUmVjdChpbnQgdHgsIGkKIHsKICAgICBpbnQg
Y2xpcFggPSB0eDsKICAgICBpbnQgY2xpcFkgPSB0eTsKLSAgICBpbnQgY2xpcFdpZHRoID0gbV93
aWR0aDsKLSAgICBpbnQgY2xpcEhlaWdodCA9IG1faGVpZ2h0OworICAgIGludCBjbGlwV2lkdGgg
PSB3aWR0aCgpOworICAgIGludCBjbGlwSGVpZ2h0ID0gaGVpZ2h0KCk7CiAKICAgICBpZiAoIXN0
eWxlKCktPmNsaXBMZWZ0KCkuaXNBdXRvKCkpIHsKLSAgICAgICAgaW50IGMgPSBzdHlsZSgpLT5j
bGlwTGVmdCgpLmNhbGNWYWx1ZShtX3dpZHRoKTsKKyAgICAgICAgaW50IGMgPSBzdHlsZSgpLT5j
bGlwTGVmdCgpLmNhbGNWYWx1ZSh3aWR0aCgpKTsKICAgICAgICAgY2xpcFggKz0gYzsKICAgICAg
ICAgY2xpcFdpZHRoIC09IGM7CiAgICAgfQogCiAgICAgaWYgKCFzdHlsZSgpLT5jbGlwUmlnaHQo
KS5pc0F1dG8oKSkKLSAgICAgICAgY2xpcFdpZHRoIC09IG1fd2lkdGggLSBzdHlsZSgpLT5jbGlw
UmlnaHQoKS5jYWxjVmFsdWUobV93aWR0aCk7CisgICAgICAgIGNsaXBXaWR0aCAtPSB3aWR0aCgp
IC0gc3R5bGUoKS0+Y2xpcFJpZ2h0KCkuY2FsY1ZhbHVlKHdpZHRoKCkpOwogCiAgICAgaWYgKCFz
dHlsZSgpLT5jbGlwVG9wKCkuaXNBdXRvKCkpIHsKLSAgICAgICAgaW50IGMgPSBzdHlsZSgpLT5j
bGlwVG9wKCkuY2FsY1ZhbHVlKG1faGVpZ2h0KTsKKyAgICAgICAgaW50IGMgPSBzdHlsZSgpLT5j
bGlwVG9wKCkuY2FsY1ZhbHVlKGhlaWdodCgpKTsKICAgICAgICAgY2xpcFkgKz0gYzsKICAgICAg
ICAgY2xpcEhlaWdodCAtPSBjOwogICAgIH0KIAogICAgIGlmICghc3R5bGUoKS0+Y2xpcEJvdHRv
bSgpLmlzQXV0bygpKQotICAgICAgICBjbGlwSGVpZ2h0IC09IG1faGVpZ2h0IC0gc3R5bGUoKS0+
Y2xpcEJvdHRvbSgpLmNhbGNWYWx1ZShtX2hlaWdodCk7CisgICAgICAgIGNsaXBIZWlnaHQgLT0g
aGVpZ2h0KCkgLSBzdHlsZSgpLT5jbGlwQm90dG9tKCkuY2FsY1ZhbHVlKGhlaWdodCgpKTsKIAog
ICAgIHJldHVybiBJbnRSZWN0KGNsaXBYLCBjbGlwWSwgY2xpcFdpZHRoLCBjbGlwSGVpZ2h0KTsK
IH0KQEAgLTk1Myw3ICsxMTk4LDcgQEAgaW50IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrV2lk
dGgoKSBjbwogICAgIGlmICghY2IpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChzaHJpbmtU
b0F2b2lkRmxvYXRzKCkpCi0gICAgICAgIHJldHVybiBjYi0+bGluZVdpZHRoKG1feSk7CisgICAg
ICAgIHJldHVybiBjYi0+bGluZVdpZHRoKG1fZnJhbWVSZWN0LnkoKSk7CiAgICAgcmV0dXJuIGNi
LT5hdmFpbGFibGVXaWR0aCgpOwogfQogCkBAIC0xMDAwLDcgKzEyNDUsNyBAQCBGbG9hdFBvaW50
IFJlbmRlckJveDo6bG9jYWxUb0Fic29sdXRlKEZsCiAgICAgICAgIGlmICh2LT5sYXlvdXRTdGF0
ZUVuYWJsZWQoKSkgewogICAgICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+
bGF5b3V0U3RhdGUoKTsKICAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUt
Pm1fb2Zmc2V0OwotICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZChtX3gsIG1feSk7CisgICAgICAg
ICAgICBvZmZzZXQuZXhwYW5kKHgoKSwgbV9mcmFtZVJlY3QueSgpKTsKICAgICAgICAgICAgIGxv
Y2FsUG9pbnQgKz0gb2Zmc2V0OwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkg
PT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBtX2xheWVyKQogICAgICAgICAgICAgICAgIGxvY2FsUG9p
bnQgKz0gbV9sYXllci0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOwpAQCAtMTA0Myw3ICsxMjg4
LDcgQEAgRmxvYXRQb2ludCBSZW5kZXJCb3g6OmFic29sdXRlVG9Mb2NhbChGbAogCiAgICAgICAg
IC8vIFRha2UgaW50byBhY2NvdW50IHNwYWNlIGFib3ZlIGEgdmVydGljYWxseSBhbGlnbmVkIHRh
YmxlIGNlbGwKICAgICAgICAgLy8gKHNlZSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KCkpCi0g
ICAgICAgIGxvY2FsUG9pbnQubW92ZSgwLjBmLCAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvcmRlclRv
cEV4dHJhKCkpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3ZlKDAuMGYsIC1zdGF0aWNfY2FzdDxm
bG9hdD4oaW50cmluc2ljUGFkZGluZ1RvcCgpKSk7CiAKICAgICAgICAgbG9jYWxQb2ludCAtPSBv
ZmZzZXRGcm9tQ29udGFpbmVyKG8pOwogCkBAIC0xMDczLDcgKzEzMTgsNyBAQCBGbG9hdFF1YWQg
UmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1dGVRdWFkCiAKICAgICAgICAgLy8gVGFrZSBpbnRvIGFj
Y291bnQgc3BhY2UgYWJvdmUgYSB2ZXJ0aWNhbGx5IGFsaWduZWQgdGFibGUgY2VsbAogICAgICAg
ICAvLyAoc2VlIGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoKSkKLSAgICAgICAgcXVhZC5tb3Zl
KDAuMGYsIHN0YXRpY19jYXN0PGZsb2F0PihvLT5ib3JkZXJUb3BFeHRyYSgpKSk7CisgICAgICAg
IHF1YWQubW92ZSgwLjBmLCBzdGF0aWNfY2FzdDxmbG9hdD4oby0+aW50cmluc2ljUGFkZGluZ1Rv
cCgpKSk7CiAKICAgICAgICAgcmV0dXJuIG8tPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZCwgZml4
ZWQpOwogICAgIH0KQEAgLTEwOTMsMTEgKzEzMzgsMTEgQEAgSW50U2l6ZSBSZW5kZXJCb3g6Om9m
ZnNldEZyb21Db250YWluZXIoUgogICAgICAgICBSZW5kZXJCbG9jayogY2I7CiAgICAgICAgIGlm
IChvLT5pc0Jsb2NrRmxvdygpICYmIHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gQWJzb2x1dGVQb3Np
dGlvbiAmJiBzdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24KICAgICAgICAgICAg
ICAgICAmJiAoY2IgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG8pKS0+aGFzQ29sdW1ucygp
KSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHJlY3QobV94LCBtX3ksIDEsIDEpOworICAgICAgICAg
ICAgSW50UmVjdCByZWN0KHgoKSwgbV9mcmFtZVJlY3QueSgpLCAxLCAxKTsKICAgICAgICAgICAg
IGNiLT5hZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZWN0KTsKICAgICAgICAgICAgIG9mZnNldC5leHBh
bmQocmVjdC54KCksIHJlY3QueSgpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvZmZz
ZXQuZXhwYW5kKG1feCwgbV95KTsKKyAgICAgICAgICAgIG9mZnNldC5leHBhbmQoeCgpLCBtX2Zy
YW1lUmVjdC55KCkpOwogICAgIH0KIAogICAgIGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkKQEAg
LTExNDQsOCArMTM4OSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpwb3NpdGlvbihJbmxpbmVCb3gqIGJv
eCkKICAgICAgICAgYm94LT5yZW1vdmUoKTsKICAgICAgICAgYm94LT5kZXN0cm95KHJlbmRlckFy
ZW5hKCkpOwogICAgIH0gZWxzZSBpZiAoaXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgIG1feCA9IGJv
eC0+eFBvcygpOwotICAgICAgICBtX3kgPSBib3gtPnlQb3MoKTsKKyAgICAgICAgc2V0TG9jYXRp
b24oYm94LT54UG9zKCksIGJveC0+eVBvcygpKTsKICAgICAgICAgbV9pbmxpbmVCb3hXcmFwcGVy
ID0gYm94OwogICAgIH0KIH0KQEAgLTExOTUsNyArMTQzOSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpj
b21wdXRlQWJzb2x1dGVSZXBhaW50UmUKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlv
bigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbV9sYXllcikKICAgICAgICAgICAgICAgICByZWN0
Lm1vdmUobV9sYXllci0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpKTsKIAotICAgICAgICAgICAg
cmVjdC5tb3ZlKG1feCwgbV95KTsKKyAgICAgICAgICAgIHJlY3QubW92ZSh4KCksIG1fZnJhbWVS
ZWN0LnkoKSk7CiAgICAgICAgICAgICByZWN0Lm1vdmUobGF5b3V0U3RhdGUtPm1fb2Zmc2V0KTsK
ICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jbGlwcGVkKQogICAgICAgICAgICAgICAg
IHJlY3QuaW50ZXJzZWN0KGxheW91dFN0YXRlLT5tX2NsaXBSZWN0KTsKQEAgLTEyMTEsNyArMTQ1
NSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmUKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSW50UG9pbnQgdG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsKLSAgICB0
b3BMZWZ0Lm1vdmUobV94LCBtX3kpOworICAgIHRvcExlZnQubW92ZSh4KCksIG1fZnJhbWVSZWN0
LnkoKSk7CiAKICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKQog
ICAgICAgICBmaXhlZCA9IHRydWU7CkBAIC0xMjMzLDcgKzE0NzcsNyBAQCB2b2lkIFJlbmRlckJv
eDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlCiAgICAgICAgIHJlY3QgPSBtX2xheWVyLT50cmFu
c2Zvcm0oKS0+bWFwUmVjdChyZWN0KTsKICAgICAgICAgLy8gRklYTUU6IHRoaXMgY2xvYmJlcnMg
dG9wTGVmdCBhZGp1c3RtZW50IGRvbmUgZm9yIG11bHRpY29sIGFib3ZlCiAgICAgICAgIHRvcExl
ZnQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgIHRvcExlZnQubW92ZShtX3gsIG1feSk7Cisg
ICAgICAgIHRvcExlZnQubW92ZSh4KCksIG1fZnJhbWVSZWN0LnkoKSk7CiAgICAgfQogCiAgICAg
aWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbikKQEAgLTEyNjcsMjQg
KzE1MTEsMTcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZQogCiB2
b2lkIFJlbmRlckJveDo6cmVwYWludER1cmluZ0xheW91dElmTW92ZWQoY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKLSAgICBpbnQgbmV3WCA9IG1feDsKLSAgICBpbnQgbmV3WSA9IG1feTsKLSAgICBp
bnQgbmV3V2lkdGggPSBtX3dpZHRoOwotICAgIGludCBuZXdIZWlnaHQgPSBtX2hlaWdodDsKKyAg
ICBpbnQgbmV3WCA9IHgoKTsKKyAgICBpbnQgbmV3WSA9IG1fZnJhbWVSZWN0LnkoKTsKKyAgICBp
bnQgbmV3V2lkdGggPSB3aWR0aCgpOworICAgIGludCBuZXdIZWlnaHQgPSBoZWlnaHQoKTsKICAg
ICBpZiAocmVjdC54KCkgIT0gbmV3WCB8fCByZWN0LnkoKSAhPSBuZXdZKSB7CiAgICAgICAgIC8v
IFRoZSBjaGlsZCBtb3ZlZC4gIEludmFsaWRhdGUgdGhlIG9iamVjdCdzIG9sZCBhbmQgbmV3IHBv
c2l0aW9ucy4gIFdlIGhhdmUgdG8gZG8gdGhpcwogICAgICAgICAvLyBzaW5jZSB0aGUgb2JqZWN0
IG1heSBub3QgaGF2ZSBnb3R0ZW4gYSBsYXlvdXQuCi0gICAgICAgIG1feCA9IHJlY3QueCgpOwot
ICAgICAgICBtX3kgPSByZWN0LnkoKTsKLSAgICAgICAgbV93aWR0aCA9IHJlY3Qud2lkdGgoKTsK
LSAgICAgICAgbV9oZWlnaHQgPSByZWN0LmhlaWdodCgpOworICAgICAgICBtX2ZyYW1lUmVjdCA9
IHJlY3Q7CiAgICAgICAgIHJlcGFpbnQoKTsKICAgICAgICAgcmVwYWludE92ZXJoYW5naW5nRmxv
YXRzKHRydWUpOwotCi0gICAgICAgIG1feCA9IG5ld1g7Ci0gICAgICAgIG1feSA9IG5ld1k7Ci0g
ICAgICAgIG1fd2lkdGggPSBuZXdXaWR0aDsKLSAgICAgICAgbV9oZWlnaHQgPSBuZXdIZWlnaHQ7
CisgICAgICAgIG1fZnJhbWVSZWN0ID0gSW50UmVjdChuZXdYLCBuZXdZLCBuZXdXaWR0aCwgbmV3
SGVpZ2h0KTsKICAgICAgICAgcmVwYWludCgpOwogICAgICAgICByZXBhaW50T3ZlcmhhbmdpbmdG
bG9hdHModHJ1ZSk7CiAgICAgfQpAQCAtMTMyOSw3ICsxNTY2LDcgQEAgdm9pZCBSZW5kZXJCb3g6
OmNhbGNXaWR0aCgpCiAgICAgLy8gd2lkdGguICBVc2UgdGhlIHdpZHRoIGZyb20gdGhlIHN0eWxl
IGNvbnRleHQuCiAgICAgaWYgKGhhc092ZXJyaWRlU2l6ZSgpICYmICBwYXJlbnQoKS0+c3R5bGUo
KS0+Ym94T3JpZW50KCkgPT0gSE9SSVpPTlRBTAogICAgICAgICAgICAgJiYgcGFyZW50KCktPmlz
RmxleGlibGVCb3goKSAmJiBwYXJlbnQoKS0+aXNGbGV4aW5nQ2hpbGRyZW4oKSkgewotICAgICAg
ICBtX3dpZHRoID0gb3ZlcnJpZGVTaXplKCk7CisgICAgICAgIHNldFdpZHRoKG92ZXJyaWRlU2l6
ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTMzNyw3ICsxNTc0LDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OmNhbGNXaWR0aCgpCiAgICAgYm9vbCBzdHJldGNoaW5nID0gKHBhcmVudCgp
LT5zdHlsZSgpLT5ib3hBbGlnbigpID09IEJTVFJFVENIKTsKICAgICBib29sIHRyZWF0QXNSZXBs
YWNlZCA9IHNob3VsZENhbGN1bGF0ZVNpemVBc1JlcGxhY2VkKCkgJiYgKCFpblZlcnRpY2FsQm94
IHx8ICFzdHJldGNoaW5nKTsKIAotICAgIExlbmd0aCB3aWR0aCA9ICh0cmVhdEFzUmVwbGFjZWQp
ID8gTGVuZ3RoKGNhbGNSZXBsYWNlZFdpZHRoKCksIEZpeGVkKSA6IHN0eWxlKCktPndpZHRoKCk7
CisgICAgTGVuZ3RoIHcgPSAodHJlYXRBc1JlcGxhY2VkKSA/IExlbmd0aChjYWxjUmVwbGFjZWRX
aWR0aCgpLCBGaXhlZCkgOiBzdHlsZSgpLT53aWR0aCgpOwogCiAgICAgUmVuZGVyQmxvY2sqIGNi
ID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaW50IGNvbnRhaW5lcldpZHRoID0gbWF4KDAsIGNv
bnRhaW5pbmdCbG9ja1dpZHRoKCkpOwpAQCAtMTM1MCw0MiArMTU4Nyw0MiBAQCB2b2lkIFJlbmRl
ckJveDo6Y2FsY1dpZHRoKCkKICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWFyZ2luTGVmdC5jYWxj
TWluVmFsdWUoY29udGFpbmVyV2lkdGgpOwogICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWFyZ2lu
UmlnaHQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldpZHRoKTsKICAgICAgICAgaWYgKHRyZWF0QXNS
ZXBsYWNlZCkKLSAgICAgICAgICAgIG1fd2lkdGggPSBtYXgod2lkdGgudmFsdWUoKSArIGJvcmRl
ckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCks
IG1pblByZWZXaWR0aCgpKTsKKyAgICAgICAgICAgIHNldFdpZHRoKG1heCh3LnZhbHVlKCkgKyBi
b3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdo
dCgpLCBtaW5QcmVmV2lkdGgoKSkpOwogCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAv
LyBXaWR0aCBjYWxjdWxhdGlvbnMKICAgICBpZiAodHJlYXRBc1JlcGxhY2VkKQotICAgICAgICBt
X3dpZHRoID0gd2lkdGgudmFsdWUoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBw
YWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCk7CisgICAgICAgIHNldFdpZHRoKHcudmFsdWUo
KSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGlu
Z1JpZ2h0KCkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBDYWxjdWxhdGUgV2lkdGgKLSAgICAg
ICAgbV93aWR0aCA9IGNhbGNXaWR0aFVzaW5nKFdpZHRoLCBjb250YWluZXJXaWR0aCk7CisgICAg
ICAgIHNldFdpZHRoKGNhbGNXaWR0aFVzaW5nKFdpZHRoLCBjb250YWluZXJXaWR0aCkpOwogCiAg
ICAgICAgIC8vIENhbGN1bGF0ZSBNYXhXaWR0aAogICAgICAgICBpZiAoIXN0eWxlKCktPm1heFdp
ZHRoKCkuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgaW50IG1heFcgPSBjYWxjV2lkdGhV
c2luZyhNYXhXaWR0aCwgY29udGFpbmVyV2lkdGgpOwotICAgICAgICAgICAgaWYgKG1fd2lkdGgg
PiBtYXhXKSB7Ci0gICAgICAgICAgICAgICAgbV93aWR0aCA9IG1heFc7Ci0gICAgICAgICAgICAg
ICAgd2lkdGggPSBzdHlsZSgpLT5tYXhXaWR0aCgpOworICAgICAgICAgICAgaWYgKHdpZHRoKCkg
PiBtYXhXKSB7CisgICAgICAgICAgICAgICAgc2V0V2lkdGgobWF4Vyk7CisgICAgICAgICAgICAg
ICAgdyA9IHN0eWxlKCktPm1heFdpZHRoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBDYWxjdWxhdGUgTWluV2lkdGgKICAgICAgICAgaW50IG1pblcgPSBjYWxjV2lk
dGhVc2luZyhNaW5XaWR0aCwgY29udGFpbmVyV2lkdGgpOwotICAgICAgICBpZiAobV93aWR0aCA8
IG1pblcpIHsKLSAgICAgICAgICAgIG1fd2lkdGggPSBtaW5XOwotICAgICAgICAgICAgd2lkdGgg
PSBzdHlsZSgpLT5taW5XaWR0aCgpOworICAgICAgICBpZiAod2lkdGgoKSA8IG1pblcpIHsKKyAg
ICAgICAgICAgIHNldFdpZHRoKG1pblcpOworICAgICAgICAgICAgdyA9IHN0eWxlKCktPm1pbldp
ZHRoKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoc3RyZXRjaGVzVG9NaW5JbnRyaW5z
aWNXaWR0aCgpKSB7Ci0gICAgICAgIG1fd2lkdGggPSBtYXgobV93aWR0aCwgbWluUHJlZldpZHRo
KCkpOwotICAgICAgICB3aWR0aCA9IExlbmd0aChtX3dpZHRoLCBGaXhlZCk7CisgICAgICAgIHNl
dFdpZHRoKG1heCh3aWR0aCgpLCBtaW5QcmVmV2lkdGgoKSkpOworICAgICAgICB3ID0gTGVuZ3Ro
KHdpZHRoKCksIEZpeGVkKTsKICAgICB9CiAKICAgICAvLyBNYXJnaW4gY2FsY3VsYXRpb25zCi0g
ICAgaWYgKHdpZHRoLmlzQXV0bygpKSB7CisgICAgaWYgKHcuaXNBdXRvKCkpIHsKICAgICAgICAg
bV9tYXJnaW5MZWZ0ID0gbWFyZ2luTGVmdC5jYWxjTWluVmFsdWUoY29udGFpbmVyV2lkdGgpOwog
ICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWFyZ2luUmlnaHQuY2FsY01pblZhbHVlKGNvbnRhaW5l
cldpZHRoKTsKICAgICB9IGVsc2UgewpAQCAtMTM5NCwxOCArMTYzMSwxOCBAQCB2b2lkIFJlbmRl
ckJveDo6Y2FsY1dpZHRoKCkKICAgICAgICAgY2FsY0hvcml6b250YWxNYXJnaW5zKG1hcmdpbkxl
ZnQsIG1hcmdpblJpZ2h0LCBjb250YWluZXJXaWR0aCk7CiAgICAgfQogCi0gICAgaWYgKGNvbnRh
aW5lcldpZHRoICYmIGNvbnRhaW5lcldpZHRoICE9IChtX3dpZHRoICsgbV9tYXJnaW5MZWZ0ICsg
bV9tYXJnaW5SaWdodCkKKyAgICBpZiAoY29udGFpbmVyV2lkdGggJiYgY29udGFpbmVyV2lkdGgg
IT0gKHdpZHRoKCkgKyBtX21hcmdpbkxlZnQgKyBtX21hcmdpblJpZ2h0KQogICAgICAgICAgICAg
JiYgIWlzRmxvYXRpbmcoKSAmJiAhaXNJbmxpbmUoKSAmJiAhY2ItPmlzRmxleGlibGVCb3goKSkg
ewogICAgICAgICBpZiAoY2ItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikKLSAgICAgICAg
ICAgIG1fbWFyZ2luUmlnaHQgPSBjb250YWluZXJXaWR0aCAtIG1fd2lkdGggLSBtX21hcmdpbkxl
ZnQ7CisgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gY29udGFpbmVyV2lkdGggLSB3aWR0aCgp
IC0gbV9tYXJnaW5MZWZ0OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX21hcmdpbkxlZnQg
PSBjb250YWluZXJXaWR0aCAtIG1fd2lkdGggLSBtX21hcmdpblJpZ2h0OworICAgICAgICAgICAg
bV9tYXJnaW5MZWZ0ID0gY29udGFpbmVyV2lkdGggLSB3aWR0aCgpIC0gbV9tYXJnaW5SaWdodDsK
ICAgICB9CiB9CiAKIGludCBSZW5kZXJCb3g6OmNhbGNXaWR0aFVzaW5nKFdpZHRoVHlwZSB3aWR0
aFR5cGUsIGludCBjdykKIHsKLSAgICBpbnQgd2lkdGggPSBtX3dpZHRoOworICAgIGludCB3aWR0
aFJlc3VsdCA9IHdpZHRoKCk7CiAgICAgTGVuZ3RoIHc7CiAgICAgaWYgKHdpZHRoVHlwZSA9PSBX
aWR0aCkKICAgICAgICAgdyA9IHN0eWxlKCktPndpZHRoKCk7CkBAIC0xNDE4LDE2ICsxNjU1LDE2
IEBAIGludCBSZW5kZXJCb3g6OmNhbGNXaWR0aFVzaW5nKFdpZHRoVHlwZSAKICAgICAgICAgaW50
IG1hcmdpbkxlZnQgPSBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkuY2FsY01pblZhbHVlKGN3KTsKICAg
ICAgICAgaW50IG1hcmdpblJpZ2h0ID0gc3R5bGUoKS0+bWFyZ2luUmlnaHQoKS5jYWxjTWluVmFs
dWUoY3cpOwogICAgICAgICBpZiAoY3cpCi0gICAgICAgICAgICB3aWR0aCA9IGN3IC0gbWFyZ2lu
TGVmdCAtIG1hcmdpblJpZ2h0OworICAgICAgICAgICAgd2lkdGhSZXN1bHQgPSBjdyAtIG1hcmdp
bkxlZnQgLSBtYXJnaW5SaWdodDsKIAogICAgICAgICBpZiAoc2l6ZXNUb0ludHJpbnNpY1dpZHRo
KHdpZHRoVHlwZSkpIHsKLSAgICAgICAgICAgIHdpZHRoID0gbWF4KHdpZHRoLCBtaW5QcmVmV2lk
dGgoKSk7Ci0gICAgICAgICAgICB3aWR0aCA9IG1pbih3aWR0aCwgbWF4UHJlZldpZHRoKCkpOwor
ICAgICAgICAgICAgd2lkdGhSZXN1bHQgPSBtYXgod2lkdGhSZXN1bHQsIG1pblByZWZXaWR0aCgp
KTsKKyAgICAgICAgICAgIHdpZHRoUmVzdWx0ID0gbWluKHdpZHRoUmVzdWx0LCBtYXhQcmVmV2lk
dGgoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgd2lkdGggPSBjYWxjQm9yZGVy
Qm94V2lkdGgody5jYWxjVmFsdWUoY3cpKTsKKyAgICAgICAgd2lkdGhSZXN1bHQgPSBjYWxjQm9y
ZGVyQm94V2lkdGgody5jYWxjVmFsdWUoY3cpKTsKIAotICAgIHJldHVybiB3aWR0aDsKKyAgICBy
ZXR1cm4gd2lkdGhSZXN1bHQ7CiB9CiAKIGJvb2wgUmVuZGVyQm94OjpzaXplc1RvSW50cmluc2lj
V2lkdGgoV2lkdGhUeXBlIHdpZHRoVHlwZSkgY29uc3QKQEAgLTE0NzAsMjAgKzE3MDcsMjAgQEAg
dm9pZCBSZW5kZXJCb3g6OmNhbGNIb3Jpem9udGFsTWFyZ2lucyhjbwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKChtYXJnaW5MZWZ0LmlzQXV0bygpICYmIG1hcmdpblJpZ2h0Lmlz
QXV0bygpICYmIG1fd2lkdGggPCBjb250YWluZXJXaWR0aCkKKyAgICBpZiAoKG1hcmdpbkxlZnQu
aXNBdXRvKCkgJiYgbWFyZ2luUmlnaHQuaXNBdXRvKCkgJiYgd2lkdGgoKSA8IGNvbnRhaW5lcldp
ZHRoKQogICAgICAgICAgICAgfHwgKCFtYXJnaW5MZWZ0LmlzQXV0bygpICYmICFtYXJnaW5SaWdo
dC5pc0F1dG8oKSAmJiBjb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS0+dGV4dEFsaWduKCkgPT0g
V0VCS0lUX0NFTlRFUikpIHsKLSAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWF4KDAsIChjb250YWlu
ZXJXaWR0aCAtIG1fd2lkdGgpIC8gMik7Ci0gICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjb250YWlu
ZXJXaWR0aCAtIG1fd2lkdGggLSBtX21hcmdpbkxlZnQ7Ci0gICAgfSBlbHNlIGlmICgobWFyZ2lu
UmlnaHQuaXNBdXRvKCkgJiYgbV93aWR0aCA8IGNvbnRhaW5lcldpZHRoKQorICAgICAgICBtX21h
cmdpbkxlZnQgPSBtYXgoMCwgKGNvbnRhaW5lcldpZHRoIC0gd2lkdGgoKSkgLyAyKTsKKyAgICAg
ICAgbV9tYXJnaW5SaWdodCA9IGNvbnRhaW5lcldpZHRoIC0gd2lkdGgoKSAtIG1fbWFyZ2luTGVm
dDsKKyAgICB9IGVsc2UgaWYgKChtYXJnaW5SaWdodC5pc0F1dG8oKSAmJiB3aWR0aCgpIDwgY29u
dGFpbmVyV2lkdGgpCiAgICAgICAgICAgICB8fCAoIW1hcmdpbkxlZnQuaXNBdXRvKCkgJiYgY29u
dGFpbmluZ0Jsb2NrKCktPnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCAmJiBjb250YWluaW5n
QmxvY2soKS0+c3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gV0VCS0lUX0xFRlQpKSB7CiAgICAgICAg
IG1fbWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKLSAg
ICAgICAgbV9tYXJnaW5SaWdodCA9IGNvbnRhaW5lcldpZHRoIC0gbV93aWR0aCAtIG1fbWFyZ2lu
TGVmdDsKLSAgICB9IGVsc2UgaWYgKChtYXJnaW5MZWZ0LmlzQXV0bygpICYmIG1fd2lkdGggPCBj
b250YWluZXJXaWR0aCkKKyAgICAgICAgbV9tYXJnaW5SaWdodCA9IGNvbnRhaW5lcldpZHRoIC0g
d2lkdGgoKSAtIG1fbWFyZ2luTGVmdDsKKyAgICB9IGVsc2UgaWYgKChtYXJnaW5MZWZ0LmlzQXV0
bygpICYmIHdpZHRoKCkgPCBjb250YWluZXJXaWR0aCkKICAgICAgICAgICAgIHx8ICghbWFyZ2lu
UmlnaHQuaXNBdXRvKCkgJiYgY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCktPmRpcmVjdGlvbigp
ID09IExUUiAmJiBjb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gV0VC
S0lUX1JJR0hUKSkgewogICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWFyZ2luUmlnaHQuY2FsY1Zh
bHVlKGNvbnRhaW5lcldpZHRoKTsKLSAgICAgICAgbV9tYXJnaW5MZWZ0ID0gY29udGFpbmVyV2lk
dGggLSBtX3dpZHRoIC0gbV9tYXJnaW5SaWdodDsKKyAgICAgICAgbV9tYXJnaW5MZWZ0ID0gY29u
dGFpbmVyV2lkdGggLSB3aWR0aCgpIC0gbV9tYXJnaW5SaWdodDsKICAgICB9IGVsc2UgewotICAg
ICAgICAvLyBUaGlzIG1ha2VzIGF1dG8gbWFyZ2lucyAwIGlmIHdlIGZhaWxlZCBhIG1fd2lkdGgg
PCBjb250YWluZXJXaWR0aCB0ZXN0IGFib3ZlIChjc3MyLjEsIDEwLjMuMykuCisgICAgICAgIC8v
IFRoaXMgbWFrZXMgYXV0byBtYXJnaW5zIDAgaWYgd2UgZmFpbGVkIGEgd2lkdGgoKSA8IGNvbnRh
aW5lcldpZHRoIHRlc3QgYWJvdmUgKGNzczIuMSwgMTAuMy4zKS4KICAgICAgICAgbV9tYXJnaW5M
ZWZ0ID0gbWFyZ2luTGVmdC5jYWxjTWluVmFsdWUoY29udGFpbmVyV2lkdGgpOwogICAgICAgICBt
X21hcmdpblJpZ2h0ID0gbWFyZ2luUmlnaHQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldpZHRoKTsK
ICAgICB9CkBAIC0xNTI1LDMwICsxNzYyLDMwIEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjSGVpZ2h0
KCkKICAgICAgICAgLy8gQmxvY2sgY2hpbGRyZW4gb2YgaG9yaXpvbnRhbCBmbGV4aWJsZSBib3hl
cyBmaWxsIHRoZSBoZWlnaHQgb2YgdGhlIGJveC4KICAgICAgICAgaWYgKGguaXNBdXRvKCkgJiYg
cGFyZW50KCktPmlzRmxleGlibGVCb3goKSAmJiBwYXJlbnQoKS0+c3R5bGUoKS0+Ym94T3JpZW50
KCkgPT0gSE9SSVpPTlRBTAogICAgICAgICAgICAgICAgICYmIHBhcmVudCgpLT5pc1N0cmV0Y2hp
bmdDaGlsZHJlbigpKSB7Ci0gICAgICAgICAgICBoID0gTGVuZ3RoKHBhcmVudCgpLT5jb250ZW50
SGVpZ2h0KCkgLSBtYXJnaW5Ub3AoKSAtIG1hcmdpbkJvdHRvbSgpIC0KKyAgICAgICAgICAgIGgg
PSBMZW5ndGgocGFyZW50Qm94KCktPmNvbnRlbnRIZWlnaHQoKSAtIG1hcmdpblRvcCgpIC0gbWFy
Z2luQm90dG9tKCkgLQogICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJUb3AoKSAtIHBhZGRp
bmdUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gcGFkZGluZ0JvdHRvbSgpLCBGaXhlZCk7CiAgICAg
ICAgICAgICBjaGVja01pbk1heEhlaWdodCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAg
aW50IGhlaWdodDsKKyAgICAgICAgaW50IGhlaWdodFJlc3VsdDsKICAgICAgICAgaWYgKGNoZWNr
TWluTWF4SGVpZ2h0KSB7Ci0gICAgICAgICAgICBoZWlnaHQgPSBjYWxjSGVpZ2h0VXNpbmcoc3R5
bGUoKS0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYgKGhlaWdodCA9PSAtMSkKLSAgICAgICAg
ICAgICAgICBoZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGNh
bGNIZWlnaHRVc2luZyhzdHlsZSgpLT5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAoaGVpZ2h0
UmVzdWx0ID09IC0xKQorICAgICAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGhlaWdodCgpOwog
ICAgICAgICAgICAgaW50IG1pbkggPSBjYWxjSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bWluSGVpZ2h0
KCkpOyAvLyBMZWF2ZSBhcyAtMSBpZiB1bnNldC4KLSAgICAgICAgICAgIGludCBtYXhIID0gc3R5
bGUoKS0+bWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IGhlaWdodCA6IGNhbGNIZWlnaHRVc2lu
ZyhzdHlsZSgpLT5tYXhIZWlnaHQoKSk7CisgICAgICAgICAgICBpbnQgbWF4SCA9IHN0eWxlKCkt
Pm1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBoZWlnaHRSZXN1bHQgOiBjYWxjSGVpZ2h0VXNp
bmcoc3R5bGUoKS0+bWF4SGVpZ2h0KCkpOwogICAgICAgICAgICAgaWYgKG1heEggPT0gLTEpCi0g
ICAgICAgICAgICAgICAgbWF4SCA9IGhlaWdodDsKLSAgICAgICAgICAgIGhlaWdodCA9IG1pbiht
YXhILCBoZWlnaHQpOwotICAgICAgICAgICAgaGVpZ2h0ID0gbWF4KG1pbkgsIGhlaWdodCk7Cisg
ICAgICAgICAgICAgICAgbWF4SCA9IGhlaWdodFJlc3VsdDsKKyAgICAgICAgICAgIGhlaWdodFJl
c3VsdCA9IG1pbihtYXhILCBoZWlnaHRSZXN1bHQpOworICAgICAgICAgICAgaGVpZ2h0UmVzdWx0
ID0gbWF4KG1pbkgsIGhlaWdodFJlc3VsdCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
Ly8gVGhlIG9ubHkgdGltZXMgd2UgZG9uJ3QgY2hlY2sgbWluL21heCBoZWlnaHQgYXJlIHdoZW4g
YSBmaXhlZCBsZW5ndGggaGFzCiAgICAgICAgICAgICAvLyBiZWVuIGdpdmVuIGFzIGFuIG92ZXJy
aWRlLiAgSnVzdCB1c2UgdGhhdC4gIFRoZSB2YWx1ZSBoYXMgYWxyZWFkeSBiZWVuIGFkanVzdGVk
CiAgICAgICAgICAgICAvLyBmb3IgYm94LXNpemluZy4KLSAgICAgICAgICAgIGhlaWdodCA9IGgu
dmFsdWUoKSArIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nVG9wKCkgKyBw
YWRkaW5nQm90dG9tKCk7CisgICAgICAgICAgICBoZWlnaHRSZXN1bHQgPSBoLnZhbHVlKCkgKyBi
b3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRv
bSgpOwogCi0gICAgICAgIG1faGVpZ2h0ID0gaGVpZ2h0OwotICAgIH0KKyAgICAgICAgICAgIHNl
dEhlaWdodChoZWlnaHRSZXN1bHQpOworICAgICAgICB9CiAKICAgICAvLyBXaW5JRSBxdWlyazog
VGhlIDxodG1sPiBibG9jayBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBjYW52YXMgaW4gcXVpcmtz
IG1vZGUuICBUaGUgPGJvZHk+IGFsd2F5cyBmaWxscyB0aGUKICAgICAvLyA8aHRtbD4gYmxvY2sg
aW4gcXVpcmtzIG1vZGUuICBPbmx5IGFwcGx5IHRoaXMgcXVpcmsgaWYgdGhlIGJsb2NrIGlzIG5v
cm1hbCBmbG93IGFuZCBubyBoZWlnaHQKQEAgLTE1NTcsMTIgKzE3OTQsMTIgQEAgdm9pZCBSZW5k
ZXJCb3g6OmNhbGNIZWlnaHQoKQogICAgICAgICBpbnQgbWFyZ2lucyA9IGNvbGxhcHNlZE1hcmdp
blRvcCgpICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCk7CiAgICAgICAgIGludCB2aXNIZWlnaHQg
PSB2aWV3KCktPnZpZXdIZWlnaHQoKTsKICAgICAgICAgaWYgKGlzUm9vdCgpKQotICAgICAgICAg
ICAgbV9oZWlnaHQgPSBtYXgobV9oZWlnaHQsIHZpc0hlaWdodCAtIG1hcmdpbnMpOworICAgICAg
ICAgICAgc2V0SGVpZ2h0KG1heChoZWlnaHQoKSwgdmlzSGVpZ2h0IC0gbWFyZ2lucykpOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIGludCBtYXJnaW5zQm9yZGVyc1BhZGRpbmcgPSBtYXJn
aW5zICsgcGFyZW50KCktPm1hcmdpblRvcCgpICsgcGFyZW50KCktPm1hcmdpbkJvdHRvbSgpCiAg
ICAgICAgICAgICAgICAgKyBwYXJlbnQoKS0+Ym9yZGVyVG9wKCkgKyBwYXJlbnQoKS0+Ym9yZGVy
Qm90dG9tKCkKICAgICAgICAgICAgICAgICArIHBhcmVudCgpLT5wYWRkaW5nVG9wKCkgKyBwYXJl
bnQoKS0+cGFkZGluZ0JvdHRvbSgpOwotICAgICAgICAgICAgbV9oZWlnaHQgPSBtYXgobV9oZWln
aHQsIHZpc0hlaWdodCAtIG1hcmdpbnNCb3JkZXJzUGFkZGluZyk7CisgICAgICAgICAgICBzZXRI
ZWlnaHQobWF4KGhlaWdodCgpLCB2aXNIZWlnaHQgLSBtYXJnaW5zQm9yZGVyc1BhZGRpbmcpKTsK
ICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2MzMsNyArMTg3MCw3IEBAIGludCBSZW5kZXJCb3g6
OmNhbGNQZXJjZW50YWdlSGVpZ2h0KGNvbnMKICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkKICAg
ICAgICAgICAgIHJlc3VsdCA9IGNiLT5jYWxjQ29udGVudEJveEhlaWdodChyZXN1bHQpOwogICAg
IH0gZWxzZSBpZiAoY2ItPmlzUmVuZGVyVmlldygpIHx8IChjYi0+aXNCb2R5KCkgJiYgc3R5bGUo
KS0+aHRtbEhhY2tzKCkpIHx8IGlzUG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQpIHsKLSAg
ICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyB0byBhZmZlY3QgdGhlIGJsb2NrJyBtX2hlaWdodCBt
ZW1iZXIgdmFyaWFibGUsIHNpbmNlIHRoaXMKKyAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyB0
byBhZmZlY3QgdGhlIGJsb2NrJyBoZWlnaHQoKSBtZW1iZXIgdmFyaWFibGUsIHNpbmNlIHRoaXMK
ICAgICAgICAgLy8gY2FuIGdldCBjYWxsZWQgd2hpbGUgdGhlIGJsb2NrIGlzIHN0aWxsIGxheWlu
ZyBvdXQgaXRzIGtpZHMuCiAgICAgICAgIGludCBvbGRIZWlnaHQgPSBjYi0+aGVpZ2h0KCk7CiAg
ICAgICAgIGNiLT5jYWxjSGVpZ2h0KCk7CkBAIC0xNzE0LDcgKzE5NTEsNyBAQCBpbnQgUmVuZGVy
Qm94OjpjYWxjUmVwbGFjZWRIZWlnaHRVc2luZyhMCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNh
bGNDb250ZW50Qm94SGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUobmV3SGVpZ2h0KSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBhdmFpbGFibGVIZWlnaHQgPSBp
c1Bvc2l0aW9uZWQoKSA/IGNvbnRhaW5pbmdCbG9ja0hlaWdodEZvclBvc2l0aW9uZWQoY2IpIDog
Y2ItPmF2YWlsYWJsZUhlaWdodCgpOworICAgICAgICAgICAgaW50IGF2YWlsYWJsZUhlaWdodCA9
IGlzUG9zaXRpb25lZCgpID8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0Rm9yUG9zaXRpb25lZChjYikg
OiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjYiktPmF2YWlsYWJsZUhlaWdodCgpOwogCiAgICAg
ICAgICAgICAvLyBJdCBpcyBuZWNlc3NhcnkgdG8gdXNlIHRoZSBib3JkZXItYm94IHRvIG1hdGNo
IFdpbklFJ3MgYnJva2VuCiAgICAgICAgICAgICAvLyBib3ggbW9kZWwuICBUaGlzIGlzIGVzc2Vu
dGlhbCBmb3Igc2l6aW5nIGluc2lkZQpAQCAtMTgzNywxMiArMjA3NCwxOSBAQCBpbnQgUmVuZGVy
Qm94Ojpjb250YWluaW5nQmxvY2tXaWR0aEZvclBvCiAgICAgICAgIHJldHVybiBtYXgoMCwgKGZy
b21SaWdodCAtIGZyb21MZWZ0KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9j
ay0+d2lkdGgoKSAtIGNvbnRhaW5pbmdCbG9jay0+Ym9yZGVyTGVmdCgpIC0gY29udGFpbmluZ0Js
b2NrLT5ib3JkZXJSaWdodCgpIC0gY29udGFpbmluZ0Jsb2NrLT52ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlckJveCo+KGNvbnRhaW5p
bmdCbG9jayktPndpZHRoKCkgLSBjb250YWluaW5nQmxvY2stPmJvcmRlckxlZnQoKSAtIGNvbnRh
aW5pbmdCbG9jay0+Ym9yZGVyUmlnaHQoKSAtIGNvbnRhaW5pbmdCbG9jay0+dmVydGljYWxTY3Jv
bGxiYXJXaWR0aCgpOwogfQogCiBpbnQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tIZWlnaHRG
b3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmluZ0Jsb2NrKSBjb25zdAog
ewotICAgIHJldHVybiBjb250YWluaW5nQmxvY2stPmhlaWdodCgpIC0gY29udGFpbmluZ0Jsb2Nr
LT5ib3JkZXJUb3AoKSAtIGNvbnRhaW5pbmdCbG9jay0+Ym9yZGVyQm90dG9tKCk7CisgICAgaW50
IGhlaWdodFJlc3VsdDsKKyAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlcklubGluZSgp
KSB7CisgICAgICAgIEFTU0VSVChjb250YWluaW5nQmxvY2stPmlzUmVsUG9zaXRpb25lZCgpKTsK
KyAgICAgICAgaGVpZ2h0UmVzdWx0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVySW5saW5lKj4o
Y29udGFpbmluZ0Jsb2NrKS0+Ym91bmRpbmdCb3hIZWlnaHQoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgaGVpZ2h0UmVzdWx0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94Kj4oY29udGFpbmlu
Z0Jsb2NrKS0+aGVpZ2h0KCk7CisgICAgCisgICAgcmV0dXJuIGhlaWdodFJlc3VsdCAtIGNvbnRh
aW5pbmdCbG9jay0+Ym9yZGVyVG9wKCkgLSBjb250YWluaW5nQmxvY2stPmJvcmRlckJvdHRvbSgp
OwogfQogCiB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpCkBAIC0xODY3
LDcgKzIxMTEsNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpCiAg
ICAgLy8gTk9URTogJ3N0YXRpYycgaXMgbm90IGEgbGVnYWwgdmFsdWUgZm9yICdsZWZ0JyBvciAn
cmlnaHQnIGFzIG9mIENTUyAyLjEuCiAKICAgICAvLyBGSVhNRSAzOiBDYW4gcGVyaGFwcyBvcHRp
bWl6ZSBvdXQgY2FzZXMgd2hlbiBtYXgtd2lkdGgvbWluLXdpZHRoIGFyZSBncmVhdGVyCi0gICAg
Ly8gdGhhbiBvciBsZXNzIHRoYW4gdGhlIGNvbXB1dGVkIG1fd2lkdGguICBCZSBjYXJlZnVsIG9m
IGJveC1zaXppbmcgYW5kCisgICAgLy8gdGhhbiBvciBsZXNzIHRoYW4gdGhlIGNvbXB1dGVkIHdp
ZHRoKCkuICBCZSBjYXJlZnVsIG9mIGJveC1zaXppbmcgYW5kCiAgICAgLy8gcGVyY2VudGFnZSBp
c3N1ZXMuCiAKICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhc2VkIG9mZiBvZiB0aGUgVzNDIFdv
cmtpbmcgRHJhZnQgZnJvbSBBcHJpbCAxMSwgMjAwNiBvZgpAQCAtMTkyMywyNCArMjE2NywyOCBA
QCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpCiAgICAgICAgIGlmIChj
b250YWluZXJEaXJlY3Rpb24gPT0gTFRSKSB7CiAgICAgICAgICAgICAvLyAnc3RhdGljWCcgc2hv
dWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50Lgog
ICAgICAgICAgICAgaW50IHN0YXRpY1Bvc2l0aW9uID0gc3RhdGljWCgpIC0gY29udGFpbmVyQmxv
Y2stPmJvcmRlckxlZnQoKTsKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBwbyA9IHBh
cmVudCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFyZW50KCkpCi0g
ICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gcG8tPnhQb3MoKTsKKyAgICAgICAgICAg
IGZvciAoUmVuZGVyQm94KiBwbyA9IHBhcmVudEJveCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJC
bG9jazsgcG8gPSBwby0+cGFyZW50Qm94KCkpCisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRp
b24gKz0gcG8tPngoKTsKICAgICAgICAgICAgIGxlZnQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bv
c2l0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcG8g
PSBwYXJlbnQoKTsKKyAgICAgICAgICAgIFJlbmRlckJveCogcG8gPSBwYXJlbnRCb3goKTsKICAg
ICAgICAgICAgIC8vICdzdGF0aWNYJyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91
Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQuCiAgICAgICAgICAgICBpbnQgc3RhdGljUG9zaXRpb24g
PSBzdGF0aWNYKCkgKyBjb250YWluZXJXaWR0aCArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJSaWdo
dCgpIC0gcG8tPndpZHRoKCk7Ci0gICAgICAgICAgICBmb3IgKDsgcG8gJiYgcG8gIT0gY29udGFp
bmVyQmxvY2s7IHBvID0gcG8tPnBhcmVudCgpKQotICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0
aW9uIC09IHBvLT54UG9zKCk7CisgICAgICAgICAgICBmb3IgKDsgcG8gJiYgcG8gIT0gY29udGFp
bmVyQmxvY2s7IHBvID0gcG8tPnBhcmVudEJveCgpKQorICAgICAgICAgICAgICAgIHN0YXRpY1Bv
c2l0aW9uIC09IHBvLT54KCk7CiAgICAgICAgICAgICByaWdodC5zZXRWYWx1ZShGaXhlZCwgc3Rh
dGljUG9zaXRpb24pOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQ2FsY3VsYXRlIGNvbnN0
cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAnd2lkdGgnIGNhc2UuCisgICAgaW50IHdpZHRoUmVz
dWx0OworICAgIGludCB4UmVzdWx0OwogICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMo
c3R5bGUoKS0+d2lkdGgoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoLCBib3JkZXJzUGx1
c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LCByaWdodCwg
bWFyZ2luTGVmdCwgbWFyZ2luUmlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3dpZHRoLCBtX21hcmdpbkxlZnQsIG1fbWFyZ2luUmlnaHQsIG1feCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aFJlc3VsdCwgbV9tYXJnaW5MZWZ0LCBtX21hcmdp
blJpZ2h0LCB4UmVzdWx0KTsKKyAgICBzZXRXaWR0aCh3aWR0aFJlc3VsdCk7CisgICAgc2V0WCh4
UmVzdWx0KTsKIAogICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBm
b3IgJ21heC13aWR0aCcgY2FzZS4KICAgICBpZiAoIXN0eWxlKCktPm1heFdpZHRoKCkuaXNVbmRl
ZmluZWQoKSkgewpAQCAtMTk1NCwxMSArMjIwMiwxMSBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fi
c29sdXRlSG9yaXpvbnRhbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1heFdpZHRoLCBtYXhNYXJnaW5MZWZ0LCBtYXhNYXJnaW5SaWdo
dCwgbWF4WFBvcyk7CiAKLSAgICAgICAgaWYgKG1fd2lkdGggPiBtYXhXaWR0aCkgewotICAgICAg
ICAgICAgbV93aWR0aCA9IG1heFdpZHRoOworICAgICAgICBpZiAod2lkdGgoKSA+IG1heFdpZHRo
KSB7CisgICAgICAgICAgICBzZXRXaWR0aChtYXhXaWR0aCk7CiAgICAgICAgICAgICBtX21hcmdp
bkxlZnQgPSBtYXhNYXJnaW5MZWZ0OwogICAgICAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1heE1h
cmdpblJpZ2h0OwotICAgICAgICAgICAgbV94ID0gbWF4WFBvczsKKyAgICAgICAgICAgIG1fZnJh
bWVSZWN0LnNldFgobWF4WFBvcyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE5NzQsMjIgKzIy
MjIsMjUgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwoKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBt
YXJnaW5SaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0
aCwgbWluTWFyZ2luTGVmdCwgbWluTWFyZ2luUmlnaHQsIG1pblhQb3MpOwogCi0gICAgICAgIGlm
IChtX3dpZHRoIDwgbWluV2lkdGgpIHsKLSAgICAgICAgICAgIG1fd2lkdGggPSBtaW5XaWR0aDsK
KyAgICAgICAgaWYgKHdpZHRoKCkgPCBtaW5XaWR0aCkgeworICAgICAgICAgICAgc2V0V2lkdGgo
bWluV2lkdGgpOwogICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWluTWFyZ2luTGVmdDsKICAg
ICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtaW5NYXJnaW5SaWdodDsKLSAgICAgICAgICAgIG1f
eCA9IG1pblhQb3M7CisgICAgICAgICAgICBtX2ZyYW1lUmVjdC5zZXRYKG1pblhQb3MpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSAm
JiBtX3dpZHRoIDwgbWluUHJlZldpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmcpCisgICAgaWYg
KHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSAmJiB3aWR0aCgpIDwgbWluUHJlZldpZHRo
KCkgLSBib3JkZXJzUGx1c1BhZGRpbmcpIHsKICAgICAgICAgY2FsY0Fic29sdXRlSG9yaXpvbnRh
bFZhbHVlcyhMZW5ndGgobWluUHJlZldpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmcsIEZpeGVk
KSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5M
ZWZ0LCBtYXJnaW5SaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3dpZHRoLCBtX21hcmdpbkxlZnQsIG1fbWFyZ2luUmlnaHQsIG1feCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhSZXN1bHQsIG1fbWFyZ2luTGVmdCwgbV9tYXJn
aW5SaWdodCwgeFJlc3VsdCk7CisgICAgICAgIHNldFdpZHRoKHdpZHRoUmVzdWx0KTsKKyAgICAg
ICAgc2V0WCh4UmVzdWx0KTsKKyAgICB9CiAKLSAgICAvLyBQdXQgbV93aWR0aCBpbnRvIGNvcnJl
Y3QgZm9ybS4KLSAgICBtX3dpZHRoICs9IGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICAvLyBQdXQg
d2lkdGgoKSBpbnRvIGNvcnJlY3QgZm9ybS4KKyAgICBzZXRXaWR0aCh3aWR0aCgpICsgYm9yZGVy
c1BsdXNQYWRkaW5nKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250
YWxWYWx1ZXMoTGVuZ3RoIHdpZHRoLCBjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lckJsb2Nr
LCBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiwKQEAgLTIyMTEsMjAgKzI0NjIsMjIg
QEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsKCkKICAgICBpZiAodG9wLmlz
QXV0bygpICYmIGJvdHRvbS5pc0F1dG8oKSkgewogICAgICAgICAvLyBzdGF0aWNZIHNob3VsZCBh
bHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlvdXQgb2YgdGhlIHBhcmVudCgpCiAgICAg
ICAgIGludCBzdGF0aWNUb3AgPSBzdGF0aWNZKCkgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyVG9w
KCk7Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOyBwbyAmJiBwbyAh
PSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFyZW50KCkpIHsKKyAgICAgICAgZm9yIChSZW5k
ZXJCb3gqIHBvID0gcGFyZW50Qm94KCk7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9
IHBvLT5wYXJlbnRCb3goKSkgewogICAgICAgICAgICAgaWYgKCFwby0+aXNUYWJsZVJvdygpKQot
ICAgICAgICAgICAgICAgIHN0YXRpY1RvcCArPSBwby0+eVBvcygpOworICAgICAgICAgICAgICAg
IHN0YXRpY1RvcCArPSBwby0+eSgpOwogICAgICAgICB9CiAgICAgICAgIHRvcC5zZXRWYWx1ZShG
aXhlZCwgc3RhdGljVG9wKTsKICAgICB9CiAKIAotICAgIGludCBoZWlnaHQ7IC8vIE5lZWRlZCB0
byBjb21wdXRlIG92ZXJmbG93LgorICAgIGludCBoOyAvLyBOZWVkZWQgdG8gY29tcHV0ZSBvdmVy
Zmxvdy4KKyAgICBpbnQgeTsKIAogICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9u
IHZhbHVlcyBmb3IgJ2hlaWdodCcgY2FzZS4KICAgICBjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVl
cyhzdHlsZSgpLT5oZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckhlaWdodCwgYm9y
ZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCwgYm90
dG9tLCBtYXJnaW5Ub3AsIG1hcmdpbkJvdHRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQsIG1fbWFyZ2luVG9wLCBtX21hcmdpbkJvdHRvbSwgbV95KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoLCBtX21hcmdpblRvcCwgbV9tYXJnaW5Cb3R0b20sIHkp
OworICAgIHNldFkoeSk7CiAKICAgICAvLyBBdm9pZCBkb2luZyBhbnkgd29yayBpbiB0aGUgY29t
bW9uIGNhc2UgKHdoZXJlIHRoZSB2YWx1ZXMgb2YgbWluLWhlaWdodCBhbmQgbWF4LWhlaWdodCBh
cmUgdGhlaXIgZGVmYXVsdHMpLgogICAgIC8vIHNlZSBGSVhNRSAzCkBAIC0yMjQwLDExICsyNDkz
LDExIEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbCgpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCwgYm90dG9tLCBtYXJnaW5Ub3AsIG1hcmdpbkJv
dHRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0LCBtYXhN
YXJnaW5Ub3AsIG1heE1hcmdpbkJvdHRvbSwgbWF4WVBvcyk7CiAKLSAgICAgICAgaWYgKGhlaWdo
dCA+IG1heEhlaWdodCkgewotICAgICAgICAgICAgaGVpZ2h0ID0gbWF4SGVpZ2h0OworICAgICAg
ICBpZiAoaCA+IG1heEhlaWdodCkgeworICAgICAgICAgICAgaCA9IG1heEhlaWdodDsKICAgICAg
ICAgICAgIG1fbWFyZ2luVG9wID0gbWF4TWFyZ2luVG9wOwogICAgICAgICAgICAgbV9tYXJnaW5C
b3R0b20gPSBtYXhNYXJnaW5Cb3R0b207Ci0gICAgICAgICAgICBtX3kgPSBtYXhZUG9zOworICAg
ICAgICAgICAgbV9mcmFtZVJlY3Quc2V0WShtYXhZUG9zKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMjI1OSwxOSArMjUxMiwxOSBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGlj
YWwoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AsIGJvdHRvbSwgbWFy
Z2luVG9wLCBtYXJnaW5Cb3R0b20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1pbkhlaWdodCwgbWluTWFyZ2luVG9wLCBtaW5NYXJnaW5Cb3R0b20sIG1pbllQb3MpOwogCi0g
ICAgICAgIGlmIChoZWlnaHQgPCBtaW5IZWlnaHQpIHsKLSAgICAgICAgICAgIGhlaWdodCA9IG1p
bkhlaWdodDsKKyAgICAgICAgaWYgKGggPCBtaW5IZWlnaHQpIHsKKyAgICAgICAgICAgIGggPSBt
aW5IZWlnaHQ7CiAgICAgICAgICAgICBtX21hcmdpblRvcCA9IG1pbk1hcmdpblRvcDsKICAgICAg
ICAgICAgIG1fbWFyZ2luQm90dG9tID0gbWluTWFyZ2luQm90dG9tOwotICAgICAgICAgICAgbV95
ID0gbWluWVBvczsKKyAgICAgICAgICAgIG1fZnJhbWVSZWN0LnNldFkobWluWVBvcyk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBTZXQgZmluYWwgaGVpZ2h0IHZhbHVlLgotICAgIG1faGVp
Z2h0ID0gaGVpZ2h0ICsgYm9yZGVyc1BsdXNQYWRkaW5nOworICAgIHNldEhlaWdodChoICsgYm9y
ZGVyc1BsdXNQYWRkaW5nKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRp
Y2FsVmFsdWVzKExlbmd0aCBoZWlnaHQsIGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyQmxv
Y2ssCit2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoTGVuZ3RoIGgs
IGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyQmxvY2ssCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGNvbnRhaW5lckhlaWdodCwgY29uc3Qg
aW50IGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBMZW5ndGggdG9wLCBjb25zdCBMZW5ndGggYm90dG9tLCBjb25zdCBM
ZW5ndGggbWFyZ2luVG9wLCBjb25zdCBMZW5ndGggbWFyZ2luQm90dG9tLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgaGVpZ2h0VmFsdWUsIGludCYgbWFy
Z2luVG9wVmFsdWUsIGludCYgbWFyZ2luQm90dG9tVmFsdWUsIGludCYgeVBvcykKQEAgLTIyODAs
MTcgKzI1MzMsMTcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdQog
ICAgIC8vIGNvbnZlcnRlZCB0byB0aGUgc3RhdGljIHBvc2l0aW9uIGluIGNhbGNBYnNvbHV0ZVZl
cnRpY2FsKCkKICAgICBBU1NFUlQoISh0b3AuaXNBdXRvKCkgJiYgYm90dG9tLmlzQXV0bygpKSk7
CiAKLSAgICBpbnQgY29udGVudEhlaWdodCA9IG1faGVpZ2h0IC0gYm9yZGVyc1BsdXNQYWRkaW5n
OworICAgIGludCBjb250ZW50SGVpZ2h0ID0gaGVpZ2h0KCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7
CiAKICAgICBpbnQgdG9wVmFsdWUgPSAwOwogCi0gICAgYm9vbCBoZWlnaHRJc0F1dG8gPSBoZWln
aHQuaXNBdXRvKCk7CisgICAgYm9vbCBoZWlnaHRJc0F1dG8gPSBoLmlzQXV0bygpOwogICAgIGJv
b2wgdG9wSXNBdXRvID0gdG9wLmlzQXV0bygpOwogICAgIGJvb2wgYm90dG9tSXNBdXRvID0gYm90
dG9tLmlzQXV0bygpOwogCiAgICAgLy8gSGVpZ2h0IGlzIG5ldmVyIHVuc29sdmVkIGZvciB0YWJs
ZXMuCiAgICAgaWYgKGlzVGFibGUoKSkgewotICAgICAgICBoZWlnaHQuc2V0VmFsdWUoRml4ZWQs
IGNvbnRlbnRIZWlnaHQpOworICAgICAgICBoLnNldFZhbHVlKEZpeGVkLCBjb250ZW50SGVpZ2h0
KTsKICAgICAgICAgaGVpZ2h0SXNBdXRvID0gZmFsc2U7CiAgICAgfQogCkBAIC0yMzA2LDcgKzI1
NTksNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxWYWx1CiAgICAgICAg
IC8vIE5PVEU6ICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNvbHZlIGZvciAnYm90dG9tJyBpbiB0
aGUgb3ZlciBjb25zdHJhaW5lZAogICAgICAgICAvLyBjYXNlIGJlY2F1c2UgdGhlIHZhbHVlIGlz
IG5vdCB1c2VkIGZvciBhbnkgZnVydGhlciBjYWxjdWxhdGlvbnMuCiAKLSAgICAgICAgaGVpZ2h0
VmFsdWUgPSBjYWxjQ29udGVudEJveEhlaWdodChoZWlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lckhl
aWdodCkpOworICAgICAgICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGguY2Fs
Y1ZhbHVlKGNvbnRhaW5lckhlaWdodCkpOwogICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxjVmFs
dWUoY29udGFpbmVySGVpZ2h0KTsKIAogICAgICAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2Ug
PSBjb250YWluZXJIZWlnaHQgLSAodG9wVmFsdWUgKyBoZWlnaHRWYWx1ZSArIGJvdHRvbS5jYWxj
VmFsdWUoY29udGFpbmVySGVpZ2h0KSArIGJvcmRlcnNQbHVzUGFkZGluZyk7CkBAIC0yMzczLDcg
KzI2MjYsNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxWYWx1CiAgICAg
ICAgICAgICBoZWlnaHRWYWx1ZSA9IGNvbnRlbnRIZWlnaHQ7CiAgICAgICAgIH0gZWxzZSBpZiAo
dG9wSXNBdXRvICYmICFoZWlnaHRJc0F1dG8gJiYgIWJvdHRvbUlzQXV0bykgewogICAgICAgICAg
ICAgLy8gUlVMRSA0OiAoc29sdmUgb2YgdG9wKQotICAgICAgICAgICAgaGVpZ2h0VmFsdWUgPSBj
YWxjQ29udGVudEJveEhlaWdodChoZWlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkpOwor
ICAgICAgICAgICAgaGVpZ2h0VmFsdWUgPSBjYWxjQ29udGVudEJveEhlaWdodChoLmNhbGNWYWx1
ZShjb250YWluZXJIZWlnaHQpKTsKICAgICAgICAgICAgIHRvcFZhbHVlID0gYXZhaWxhYmxlU3Bh
Y2UgLSAoaGVpZ2h0VmFsdWUgKyBib3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkpOwog
ICAgICAgICB9IGVsc2UgaWYgKCF0b3BJc0F1dG8gJiYgaGVpZ2h0SXNBdXRvICYmICFib3R0b21J
c0F1dG8pIHsKICAgICAgICAgICAgIC8vIFJVTEUgNTogKHNvbHZlIG9mIGhlaWdodCkKQEAgLTIz
ODEsNyArMjYzNCw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHUK
ICAgICAgICAgICAgIGhlaWdodFZhbHVlID0gbWF4KDAsIGF2YWlsYWJsZVNwYWNlIC0gKHRvcFZh
bHVlICsgYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpKSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoIXRvcElzQXV0byAmJiAhaGVpZ2h0SXNBdXRvICYmIGJvdHRvbUlzQXV0bykgewogICAg
ICAgICAgICAgLy8gUlVMRSA2OiAobm8gbmVlZCBzb2x2ZSBvZiBib3R0b20pCi0gICAgICAgICAg
ICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUoY29u
dGFpbmVySGVpZ2h0KSk7CisgICAgICAgICAgICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94
SGVpZ2h0KGguY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkpOwogICAgICAgICAgICAgdG9wVmFs
dWUgPSB0b3AuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0yNDIyLDggKzI2NzUsOCBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRh
bFJlCiAgICAgLy8gTk9URTogVGhpcyB2YWx1ZSBvZiB3aWR0aCBpcyBGSU5BTCBpbiB0aGF0IHRo
ZSBtaW4vbWF4IHdpZHRoIGNhbGN1bGF0aW9ucwogICAgIC8vIGFyZSBkZWFsdCB3aXRoIGluIGNh
bGNSZXBsYWNlZFdpZHRoKCkuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0ZXBzIHRvIHByb2R1Y2UK
ICAgICAvLyBjb3JyZWN0IG1heC9taW4gaW4gdGhlIG5vbi1yZXBsYWNlZCB2ZXJzaW9uLCBhcmUg
bm90IG5lY2Vzc2FyeS4KLSAgICBtX3dpZHRoID0gY2FsY1JlcGxhY2VkV2lkdGgoKSArIGJvcmRl
ckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCk7
Ci0gICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyV2lkdGggLSBtX3dpZHRo
OworICAgIHNldFdpZHRoKGNhbGNSZXBsYWNlZFdpZHRoKCkgKyBib3JkZXJMZWZ0KCkgKyBib3Jk
ZXJSaWdodCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpKTsKKyAgICBjb25zdCBp
bnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJXaWR0aCAtIHdpZHRoKCk7CiAKICAgICAvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKlwKICAgICAgKiAyLiBJZiBib3RoICdsZWZ0JyBhbmQgJ3JpZ2h0JyBoYXZl
IHRoZSB2YWx1ZSAnYXV0bycsIHRoZW4gaWYgJ2RpcmVjdGlvbicKQEAgLTI0MzYsMTUgKzI2ODks
MTUgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxSZQogICAgICAgICBp
ZiAoY29udGFpbmVyRGlyZWN0aW9uID09IExUUikgewogICAgICAgICAgICAgLy8gJ3N0YXRpY1gn
IHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlvdXQgb2YgdGhlIHBhcmVu
dC4KICAgICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9IHN0YXRpY1goKSAtIGNvbnRhaW5l
ckJsb2NrLT5ib3JkZXJMZWZ0KCk7Ci0gICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogcG8g
PSBwYXJlbnQoKTsgcG8gJiYgcG8gIT0gY29udGFpbmVyQmxvY2s7IHBvID0gcG8tPnBhcmVudCgp
KQotICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uICs9IHBvLT54UG9zKCk7CisgICAgICAg
ICAgICBmb3IgKFJlbmRlckJveCogcG8gPSBwYXJlbnRCb3goKTsgcG8gJiYgcG8gIT0gY29udGFp
bmVyQmxvY2s7IHBvID0gcG8tPnBhcmVudEJveCgpKQorICAgICAgICAgICAgICAgIHN0YXRpY1Bv
c2l0aW9uICs9IHBvLT54KCk7CiAgICAgICAgICAgICBsZWZ0LnNldFZhbHVlKEZpeGVkLCBzdGF0
aWNQb3NpdGlvbik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IHBvID0gcGFyZW50KCk7CisgICAgICAgICAgICBSZW5kZXJCb3gqIHBvID0gcGFyZW50Qm94KCk7
CiAgICAgICAgICAgICAvLyAnc3RhdGljWCcgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0
aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50LgogICAgICAgICAgICAgaW50IHN0YXRpY1Bvc2l0
aW9uID0gc3RhdGljWCgpICsgY29udGFpbmVyV2lkdGggKyBjb250YWluZXJCbG9jay0+Ym9yZGVy
UmlnaHQoKSAtIHBvLT53aWR0aCgpOwotICAgICAgICAgICAgZm9yICg7IHBvICYmIHBvICE9IGNv
bnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQoKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNQ
b3NpdGlvbiAtPSBwby0+eFBvcygpOworICAgICAgICAgICAgZm9yICg7IHBvICYmIHBvICE9IGNv
bnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnRCb3goKSkKKyAgICAgICAgICAgICAgICBzdGF0
aWNQb3NpdGlvbiAtPSBwby0+eCgpOwogICAgICAgICAgICAgcmlnaHQuc2V0VmFsdWUoRml4ZWQs
IHN0YXRpY1Bvc2l0aW9uKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI1NDEsNyArMjc5NCw3IEBA
IHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsUmUKICAgICBcKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KICAgICAvLyBOT1RFOiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBzb2x2ZSBmb3Ig
J3JpZ2h0JyB3aGVuIHRoZSBkaXJlY3Rpb24gaXMKICAgICAvLyBMVFIgYmVjYXVzZSB0aGUgdmFs
dWUgaXMgbm90IHVzZWQuCi0gICAgaW50IHRvdGFsV2lkdGggPSBtX3dpZHRoICsgbGVmdFZhbHVl
ICsgcmlnaHRWYWx1ZSArICBtX21hcmdpbkxlZnQgKyBtX21hcmdpblJpZ2h0OworICAgIGludCB0
b3RhbFdpZHRoID0gd2lkdGgoKSArIGxlZnRWYWx1ZSArIHJpZ2h0VmFsdWUgKyAgbV9tYXJnaW5M
ZWZ0ICsgbV9tYXJnaW5SaWdodDsKICAgICBpZiAodG90YWxXaWR0aCA+IGNvbnRhaW5lcldpZHRo
ICYmIChjb250YWluZXJEaXJlY3Rpb24gPT0gUlRMKSkKICAgICAgICAgbGVmdFZhbHVlID0gY29u
dGFpbmVyV2lkdGggLSAodG90YWxXaWR0aCAtIGxlZnRWYWx1ZSk7CiAKQEAgLTI1NTYsMTIgKzI4
MDksMTIgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxSZQogICAgICAg
ICBJbmxpbmVGbG93Qm94KiBmaXJzdExpbmUgPSBmbG93LT5maXJzdExpbmVCb3goKTsKICAgICAg
ICAgSW5saW5lRmxvd0JveCogbGFzdExpbmUgPSBmbG93LT5sYXN0TGluZUJveCgpOwogICAgICAg
ICBpZiAoZmlyc3RMaW5lICYmIGxhc3RMaW5lICYmIGZpcnN0TGluZSAhPSBsYXN0TGluZSkgewot
ICAgICAgICAgICAgbV94ID0gbGVmdFZhbHVlICsgbV9tYXJnaW5MZWZ0ICsgbGFzdExpbmUtPmJv
cmRlckxlZnQoKSArIChsYXN0TGluZS0+eFBvcygpIC0gZmlyc3RMaW5lLT54UG9zKCkpOworICAg
ICAgICAgICAgbV9mcmFtZVJlY3Quc2V0WChsZWZ0VmFsdWUgKyBtX21hcmdpbkxlZnQgKyBsYXN0
TGluZS0+Ym9yZGVyTGVmdCgpICsgKGxhc3RMaW5lLT54UG9zKCkgLSBmaXJzdExpbmUtPnhQb3Mo
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbV94ID0g
bGVmdFZhbHVlICsgbV9tYXJnaW5MZWZ0ICsgY29udGFpbmVyQmxvY2stPmJvcmRlckxlZnQoKTsK
KyAgICBtX2ZyYW1lUmVjdC5zZXRYKGxlZnRWYWx1ZSArIG1fbWFyZ2luTGVmdCArIGNvbnRhaW5l
ckJsb2NrLT5ib3JkZXJMZWZ0KCkpOwogfQogCiB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRl
VmVydGljYWxSZXBsYWNlZCgpCkBAIC0yNTkxLDggKzI4NDQsOCBAQCB2b2lkIFJlbmRlckJveDo6
Y2FsY0Fic29sdXRlVmVydGljYWxSZXBsCiAgICAgLy8gTk9URTogVGhpcyB2YWx1ZSBvZiBoZWln
aHQgaXMgRklOQUwgaW4gdGhhdCB0aGUgbWluL21heCBoZWlnaHQgY2FsY3VsYXRpb25zCiAgICAg
Ly8gYXJlIGRlYWx0IHdpdGggaW4gY2FsY1JlcGxhY2VkSGVpZ2h0KCkuICBUaGlzIG1lYW5zIHRo
YXQgdGhlIHN0ZXBzIHRvIHByb2R1Y2UKICAgICAvLyBjb3JyZWN0IG1heC9taW4gaW4gdGhlIG5v
bi1yZXBsYWNlZCB2ZXJzaW9uLCBhcmUgbm90IG5lY2Vzc2FyeS4KLSAgICBtX2hlaWdodCA9IGNh
bGNSZXBsYWNlZEhlaWdodCgpICsgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSArIHBhZGRp
bmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKTsKLSAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2Ug
PSBjb250YWluZXJIZWlnaHQgLSBtX2hlaWdodDsKKyAgICBzZXRIZWlnaHQoY2FsY1JlcGxhY2Vk
SGVpZ2h0KCkgKyBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ1RvcCgpICsg
cGFkZGluZ0JvdHRvbSgpKTsKKyAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWlu
ZXJIZWlnaHQgLSBoZWlnaHQoKTsKIAogICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAogICAgICAqIDIu
IElmIGJvdGggJ3RvcCcgYW5kICdib3R0b20nIGhhdmUgdGhlIHZhbHVlICdhdXRvJywgcmVwbGFj
ZSAndG9wJwpAQCAtMjYwMiw5ICsyODU1LDkgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0
ZVZlcnRpY2FsUmVwbAogICAgIGlmICh0b3AuaXNBdXRvKCkgJiYgYm90dG9tLmlzQXV0bygpKSB7
CiAgICAgICAgIC8vIHN0YXRpY1kgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0aHJvdWdo
IGxheW91dCBvZiB0aGUgcGFyZW50KCkuCiAgICAgICAgIGludCBzdGF0aWNUb3AgPSBzdGF0aWNZ
KCkgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyVG9wKCk7Ci0gICAgICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBwbyA9IHBhcmVudCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+
cGFyZW50KCkpIHsKKyAgICAgICAgZm9yIChSZW5kZXJCb3gqIHBvID0gcGFyZW50Qm94KCk7IHBv
ICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnRCb3goKSkgewogICAgICAg
ICAgICAgaWYgKCFwby0+aXNUYWJsZVJvdygpKQotICAgICAgICAgICAgICAgIHN0YXRpY1RvcCAr
PSBwby0+eVBvcygpOworICAgICAgICAgICAgICAgIHN0YXRpY1RvcCArPSBwby0+eSgpOwogICAg
ICAgICB9CiAgICAgICAgIHRvcC5zZXRWYWx1ZShGaXhlZCwgc3RhdGljVG9wKTsKICAgICB9CkBA
IC0yNjkzLDcgKzI5NDYsNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxS
ZXBsCiAgICAgLy8gb3Igbm90LgogCiAgICAgLy8gVXNlIGNvbXB1dGVkIHZhbHVlcyB0byBjYWxj
dWxhdGUgdGhlIHZlcnRpY2FsIHBvc2l0aW9uLgotICAgIG1feSA9IHRvcFZhbHVlICsgbV9tYXJn
aW5Ub3AgKyBjb250YWluZXJCbG9jay0+Ym9yZGVyVG9wKCk7CisgICAgbV9mcmFtZVJlY3Quc2V0
WSh0b3BWYWx1ZSArIG1fbWFyZ2luVG9wICsgY29udGFpbmVyQmxvY2stPmJvcmRlclRvcCgpKTsK
IH0KIAogSW50UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCBp
bnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQpAQCAtMjcwNSwxMSAr
Mjk1OCwxMSBAQCBJbnRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5saW5lCiAKICAg
ICAvLyBGSVhNRTogV2hhdCBhYm91dCBib3JkZXIgYW5kIHBhZGRpbmc/CiAgICAgY29uc3QgaW50
IGNhcmV0V2lkdGggPSAxOwotICAgIEludFJlY3QgcmVjdCh4UG9zKCksIHlQb3MoKSwgY2FyZXRX
aWR0aCwgbV9oZWlnaHQpOworICAgIEludFJlY3QgcmVjdCh4KCksIHkoKSwgY2FyZXRXaWR0aCwg
aGVpZ2h0KCkpOwogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gYm94ID8gYm94LT5kaXJl
Y3Rpb24oKSA6IHN0eWxlKCktPmRpcmVjdGlvbigpOwogCiAgICAgaWYgKCghY2FyZXRPZmZzZXQp
IF4gKGRpcmVjdGlvbiA9PSBMVFIpKQotICAgICAgICByZWN0Lm1vdmUoSW50U2l6ZShtX3dpZHRo
IC0gY2FyZXRXaWR0aCwgMCkpOworICAgICAgICByZWN0Lm1vdmUoSW50U2l6ZSh3aWR0aCgpIC0g
Y2FyZXRXaWR0aCwgMCkpOwogCiAgICAgaWYgKGJveCkgewogICAgICAgICBSb290SW5saW5lQm94
KiByb290Qm94ID0gYm94LT5yb290KCk7CkBAIC0yNzMxLDE4ICsyOTg0LDE4IEBAIEludFJlY3Qg
UmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmUKICAgICAgICAgcmVjdC5zZXRIZWlnaHQo
Zm9udEhlaWdodCk7CiAKICAgICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQotICAgICAgICAq
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0geFBvcygpICsgbV93aWR0aCAtIHJlY3QucmlnaHQoKTsK
KyAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IHgoKSArIHdpZHRoKCkgLSByZWN0LnJp
Z2h0KCk7CiAKICAgICAvLyBNb3ZlIHRvIGxvY2FsIGNvb3JkcwotICAgIHJlY3QubW92ZSgteFBv
cygpLCAteVBvcygpKTsKKyAgICByZWN0Lm1vdmUoLXgoKSwgLXkoKSk7CiAgICAgcmV0dXJuIHJl
Y3Q7CiB9CiAKIGludCBSZW5kZXJCb3g6Omxvd2VzdFBvc2l0aW9uKGJvb2wgLyppbmNsdWRlT3Zl
cmZsb3dJbnRlcmlvciovLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdAogewotICAgIGlmICghaW5j
bHVkZVNlbGYgfHwgIW1fd2lkdGgpCisgICAgaWYgKCFpbmNsdWRlU2VsZiB8fCAhd2lkdGgoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaW50IGJvdHRvbSA9IG1faGVpZ2h0OworICAgIGludCBi
b3R0b20gPSBoZWlnaHQoKTsKICAgICBpZiAoaXNSZWxQb3NpdGlvbmVkKCkpCiAgICAgICAgIGJv
dHRvbSArPSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WSgpOwogICAgIHJldHVybiBib3R0b207CkBA
IC0yNzUwLDkgKzMwMDMsOSBAQCBpbnQgUmVuZGVyQm94Ojpsb3dlc3RQb3NpdGlvbihib29sIC8q
aW5jCiAKIGludCBSZW5kZXJCb3g6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgLyppbmNsdWRlT3Zl
cmZsb3dJbnRlcmlvciovLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdAogewotICAgIGlmICghaW5j
bHVkZVNlbGYgfHwgIW1faGVpZ2h0KQorICAgIGlmICghaW5jbHVkZVNlbGYgfHwgIWhlaWdodCgp
KQogICAgICAgICByZXR1cm4gMDsKLSAgICBpbnQgcmlnaHQgPSBtX3dpZHRoOworICAgIGludCBy
aWdodCA9IHdpZHRoKCk7CiAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQogICAgICAgICByaWdo
dCArPSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpOwogICAgIHJldHVybiByaWdodDsKQEAgLTI3
NjAsMTIgKzMwMTMsMjEgQEAgaW50IFJlbmRlckJveDo6cmlnaHRtb3N0UG9zaXRpb24oYm9vbCAv
KgogCiBpbnQgUmVuZGVyQm94OjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgLyppbmNsdWRlT3ZlcmZs
b3dJbnRlcmlvciovLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdAogewotICAgIGlmICghaW5jbHVk
ZVNlbGYgfHwgIW1faGVpZ2h0KQotICAgICAgICByZXR1cm4gbV93aWR0aDsKKyAgICBpZiAoIWlu
Y2x1ZGVTZWxmIHx8ICFoZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHdpZHRoKCk7CiAgICAgaW50
IGxlZnQgPSAwOwogICAgIGlmIChpc1JlbFBvc2l0aW9uZWQoKSkKICAgICAgICAgbGVmdCArPSBy
ZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpOwogICAgIHJldHVybiBsZWZ0OwogfQogCisjaWYgRU5B
QkxFKFNWRykKKworVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyQm94Ojpsb2NhbFRyYW5zZm9y
bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KDEsIDAsIDAsIDEs
IHgoKSwgeSgpKTsKK30KKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotICAgIGVudW0gV2lkdGhUeXBlIHsgV2lkdGgsIE1pbldpZHRoLCBNYXhX
aWR0aCB9OworZW51bSBXaWR0aFR5cGUgeyBXaWR0aCwgTWluV2lkdGgsIE1heFdpZHRoIH07CiAK
IGNsYXNzIFJlbmRlckJveCA6IHB1YmxpYyBSZW5kZXJPYmplY3QgewogcHVibGljOgpAQCAtMzYs
NiArMzYsMTAxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJCb3giOyB9CiAKKyAgICBpbnQgeCgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWVSZWN0LngoKTsgfQorICAgIGludCB5KCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZVJlY3QueSgpICsgaW50cmluc2ljUGFkZGluZ1RvcCgpOyB9IC8vIEZJWE1FOiBOZWVkIHRv
IGRlYWwgd2l0aCB0aGUgaW50cmluc2ljUGFkZGluZ1RvcCgpIGxpZSBpbiBhIHNhbmUgd2F5Lgor
ICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LndpZHRoKCk7IH0KKyAg
ICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0KKyAg
ICAKKyAgICB2b2lkIHNldFgoaW50IHgpIHsgbV9mcmFtZVJlY3Quc2V0WCh4KTsgfQorICAgIHZv
aWQgc2V0WShpbnQgeSkgeyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9CisgICAgdm9pZCBzZXRXaWR0
aChpbnQgd2lkdGgpIHsgbV9mcmFtZVJlY3Quc2V0V2lkdGgod2lkdGgpOyB9CisgICAgdm9pZCBz
ZXRIZWlnaHQoaW50IGhlaWdodCkgeyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsgfQor
ICAgIAorICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Qu
bG9jYXRpb24oKTsgfSAvLyBGSVhNRTogQmUgYXdhcmUgdGhhdCB0aGlzIGlzIG5vdCBlcXVpdmFs
ZW50IHRvIHgoKSwgeSgpIGJlY2F1c2Ugb2YgeSgpJ3MgaW50cmluc2ljUGFkZGluZ1RvcCgpIGxp
ZSEKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5zaXplKCk7
IH0KKworICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKSB7IHNl
dExvY2F0aW9uKGxvY2F0aW9uLngoKSwgbG9jYXRpb24ueSgpKTsgfQorICAgIHZvaWQgc2V0TG9j
YXRpb24oaW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgLy8gT3B0aW1pemUgZm9yIHRoZSBj
YXNlIHdoZXJlIHdlIGRvbid0IG1vdmUgYXQgYWxsLgorICAgICAgICBpZiAoeCA9PSBtX2ZyYW1l
UmVjdC54KCkgJiYgeSA9PSBtX2ZyYW1lUmVjdC55KCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1fZnJhbWVSZWN0LnNldFgoeCk7CisgICAgICAgIG1fZnJhbWVSZWN0LnNldFkoeSk7
CisgICAgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSB7IG1fZnJhbWVS
ZWN0LnNldFNpemUoc2l6ZSk7IH0KKyAgICB2b2lkIG1vdmUoaW50IGR4LCBpbnQgZHkpIHsgbV9m
cmFtZVJlY3QubW92ZShkeCwgZHkpOyB9CisKKyAgICBJbnRSZWN0IGZyYW1lUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkgeyBtX2ZyYW1lUmVjdCA9IHJlY3Q7IH0KKworICAgIEludFJlY3QgYm9yZGVy
Qm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoMCwgLWludHJpbnNpY1BhZGRpbmdUb3Ao
KSwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBpbnRyaW5zaWNQYWRkaW5nVG9wKCkgKyBpbnRyaW5zaWNQ
YWRkaW5nQm90dG9tKCkpOyB9CisgICAgCisgICAgLy8gVGhlIGNvbnRlbnQgYXJlYSBvZiB0aGUg
Ym94IChleGNsdWRlcyBwYWRkaW5nIGFuZCBib3JkZXIpLgorICAgIEludFJlY3QgY29udGVudEJv
eFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0
KCksIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpLCBjb250ZW50V2lkdGgoKSwgY29udGVudEhl
aWdodCgpKTsgfQorICAgIC8vIFRoZSBjb250ZW50IGJveCBpbiBhYnNvbHV0ZSBjb29yZHMuIEln
bm9yZXMgdHJhbnNmb3Jtcy4KKyAgICBJbnRSZWN0IGFic29sdXRlQ29udGVudEJveCgpIGNvbnN0
OworICAgIC8vIFRoZSBjb250ZW50IGJveCBjb252ZXJ0ZWQgdG8gYWJzb2x1dGUgY29vcmRzICh0
YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQpLgorICAgIEZsb2F0UXVhZCBhYnNvbHV0ZUNv
bnRlbnRRdWFkKCkgY29uc3Q7CisKKyAgICAvLyBCb3VuZHMgb2YgdGhlIG91dGxpbmUgYm94IGlu
IGFic29sdXRlIGNvb3Jkcy4gUmVzcGVjdHMgdHJhbnNmb3JtcworICAgIHZpcnR1YWwgSW50UmVj
dCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9j
dXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHkpOworCisgICAgLy8g
VXNlIHRoaXMgd2l0aCBjYXV0aW9uISBObyB0eXBlIGNoZWNraW5nIGlzIGRvbmUhCisgICAgUmVu
ZGVyQm94KiBwcmV2aW91c1NpYmxpbmdCb3goKSBjb25zdCB7IEFTU0VSVCghcHJldmlvdXNTaWJs
aW5nKCkgfHwgcHJldmlvdXNTaWJsaW5nKCktPmlzQm94KCkpOyByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVuZGVyQm94Kj4ocHJldmlvdXNTaWJsaW5nKCkpOyB9CisgICAgUmVuZGVyQm94KiBuZXh0U2li
bGluZ0JveCgpIGNvbnN0IHsgQVNTRVJUKCFuZXh0U2libGluZygpIHx8IG5leHRTaWJsaW5nKCkt
PmlzQm94KCkpOyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obmV4dFNpYmxpbmcoKSk7
IH0KKyAgICBSZW5kZXJCb3gqIHBhcmVudEJveCgpIGNvbnN0IHsgQVNTRVJUKCFwYXJlbnQoKSB8
fCBwYXJlbnQoKS0+aXNCb3goKSk7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihwYXJl
bnQoKSk7IH0KKworICAgIC8vIFRoZSBoZWlnaHQgb2YgYSBibG9jayB3aGVuIHlvdSBpbmNsdWRl
IG5vcm1hbCBmbG93IG92ZXJmbG93IHNwaWxsYWdlIG91dCBvZiB0aGUgYm90dG9tCisgICAgLy8g
b2YgdGhlIGJsb2NrIChlLmcuLCBhIDxkaXYgc3R5bGU9ImhlaWdodDoyNXB4Ij4gdGhhdCBoYXMg
YSAxMDBweCB0YWxsIGltYWdlIGluc2lkZQorICAgIC8vIGl0IHdvdWxkIGhhdmUgYW4gb3ZlcmZs
b3cgaGVpZ2h0IG9mIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgMTAwcHguCisgICAgdmly
dHVhbCBpbnQgb3ZlcmZsb3dIZWlnaHQoYm9vbCAvKmluY2x1ZGVJbnRlcmlvciovID0gdHJ1ZSkg
Y29uc3QgeyByZXR1cm4gaGVpZ2h0KCk7IH0KKyAgICB2aXJ0dWFsIGludCBvdmVyZmxvd1dpZHRo
KGJvb2wgLyppbmNsdWRlSW50ZXJpb3IqLyA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIHdpZHRoKCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcmZsb3dIZWlnaHQoaW50KSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0T3ZlcmZsb3dXaWR0aChpbnQpIHsgfQorICAgIHZpcnR1YWwgaW50IG92ZXJm
bG93TGVmdChib29sIC8qaW5jbHVkZUludGVyaW9yKi8gPSB0cnVlKSBjb25zdCB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dUb3AoYm9vbCAvKmluY2x1ZGVJbnRlcmlvciov
ID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgSW50UmVjdCBvdmVyZmxv
d1JlY3QoYm9vbCAvKmluY2x1ZGVJbnRlcmlvciovID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gYm9y
ZGVyQm94UmVjdCgpOyB9CisKKyAgICBpbnQgY29udGVudFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
Y2xpZW50V2lkdGgoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQoKTsgfQorICAgIGlu
dCBjb250ZW50SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gY2xpZW50SGVpZ2h0KCkgLSBwYWRkaW5n
VG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7IH0KKworICAgIC8vIElFIGV4dGVuc2lvbnMuIFVzZWQg
dG8gY2FsY3VsYXRlIG9mZnNldFdpZHRoL0hlaWdodC4gIE92ZXJyaWRkZW4gYnkgaW5saW5lcyAo
UmVuZGVyRmxvdykKKyAgICAvLyB0byByZXR1cm4gdGhlIHJlbWFpbmluZyB3aWR0aCBvbiBhIGdp
dmVuIGxpbmUgKGFuZCB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGxpbmUpLgorICAgIGludCBvZmZz
ZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoKCk7IH0KKyAgICBpbnQgb2Zmc2V0SGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gaGVpZ2h0KCkgKyBpbnRyaW5zaWNQYWRkaW5nVG9wKCkgKyBpbnRy
aW5zaWNQYWRkaW5nQm90dG9tKCk7IH0KKyAgICB2aXJ0dWFsIGludCBvZmZzZXRMZWZ0KCkgY29u
c3Q7IC8vIFdlIG92ZXJyaWRlIGluIHJlbmRlciBmbG93IHRvIGdldCB0aGUgbGVmdCBhbmQgdG9w
IGNvcnJlY3QuIC1kdworICAgIHZpcnR1YWwgaW50IG9mZnNldFRvcCgpIGNvbnN0OworICAgIHZp
cnR1YWwgUmVuZGVyQm94KiBvZmZzZXRQYXJlbnQoKSBjb25zdDsKKworICAgIC8vIE1vcmUgSUUg
ZXh0ZW5zaW9ucy4gIGNsaWVudFdpZHRoIGFuZCBjbGllbnRIZWlnaHQgcmVwcmVzZW50IHRoZSBp
bnRlcmlvciBvZiBhbiBvYmplY3QKKyAgICAvLyBleGNsdWRpbmcgYm9yZGVyIGFuZCBzY3JvbGxi
YXIuICBjbGllbnRMZWZ0L1RvcCBhcmUganVzdCB0aGUgYm9yZGVyTGVmdFdpZHRoIGFuZCBib3Jk
ZXJUb3BXaWR0aC4KKyAgICBpbnQgY2xpZW50TGVmdCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxl
ZnQoKTsgfQorICAgIGludCBjbGllbnRUb3AoKSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKTsg
fQorICAgIGludCBjbGllbnRXaWR0aCgpIGNvbnN0OworICAgIGludCBjbGllbnRIZWlnaHQoKSBj
b25zdDsKKworICAgIC8vIHNjcm9sbFdpZHRoL3Njcm9sbEhlaWdodCB3aWxsIGJlIHRoZSBzYW1l
IGFzIGNsaWVudFdpZHRoL2NsaWVudEhlaWdodCB1bmxlc3MgdGhlCisgICAgLy8gb2JqZWN0IGhh
cyBvdmVyZmxvdzpoaWRkZW4vc2Nyb2xsL2F1dG8gc3BlY2lmaWVkIGFuZCBhbHNvIGhhcyBvdmVy
Zmxvdy4KKyAgICAvLyBzY3JvbGxMZWZ0L1RvcCByZXR1cm4gdGhlIGN1cnJlbnQgc2Nyb2xsIHBv
c2l0aW9uLiAgVGhlc2UgbWV0aG9kcyBhcmUgdmlydHVhbCBzbyB0aGF0IG9iamVjdHMgbGlrZQor
ICAgIC8vIHRleHRhcmVhcyBjYW4gc2Nyb2xsIHNoYWRvdyBjb250ZW50IChidXQgcHJldGVuZCB0
aGF0IHRoZXkgYXJlIHRoZSBvYmplY3RzIHRoYXQgYXJlCisgICAgLy8gc2Nyb2xsaW5nKS4KKyAg
ICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xs
VG9wKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
b2xsTGVmdChpbnQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxUb3AoaW50KTsKKworICAg
IHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50
IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVh
ZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgCisgICAg
SW50UmVjdCByZWZsZWN0aW9uQm94KCkgY29uc3Q7CisgICAgaW50IHJlZmxlY3Rpb25PZmZzZXQo
KSBjb25zdDsKKyAgICAvLyBHaXZlbiBhIHJlY3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUg
c3BhY2UsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVjdCBpbiB0aGUgcmVmbGVjdGlvbi4K
KyAgICBJbnRSZWN0IHJlZmxlY3RlZFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OworCiAgICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKQEAgLTU1
LDIyICsxNTAsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJbnRTaXplIG9mZnNldEZyb21D
b250YWluZXIoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGludCB4UG9zKCkg
Y29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0IHsgcmV0
dXJuIG1feTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3MoaW50IHgsIGludCB5KTsKLQotICAg
IHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQotICAgIHZpcnR1
YWwgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0SGVpZ2h0KGludCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0KLQogICAg
IHZpcnR1YWwgaW50IG1hcmdpblRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luVG9wOyB9CiAg
ICAgdmlydHVhbCBpbnQgbWFyZ2luQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5Cb3R0
b207IH0KICAgICB2aXJ0dWFsIGludCBtYXJnaW5MZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9tYXJn
aW5MZWZ0OyB9CiAgICAgdmlydHVhbCBpbnQgbWFyZ2luUmlnaHQoKSBjb25zdCB7IHJldHVybiBt
X21hcmdpblJpZ2h0OyB9CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgYm9yZGVyQm94KCkgY29uc3Qg
eyByZXR1cm4gSW50UmVjdCgwLCAtYm9yZGVyVG9wRXh0cmEoKSwgd2lkdGgoKSwgaGVpZ2h0KCkg
KyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSk7IH0KLQogICAgIGludCBj
YWxjQm9yZGVyQm94V2lkdGgoaW50IHdpZHRoKSBjb25zdDsKICAgICBpbnQgY2FsY0JvcmRlckJv
eEhlaWdodChpbnQgaGVpZ2h0KSBjb25zdDsKICAgICBpbnQgY2FsY0NvbnRlbnRCb3hXaWR0aChp
bnQgd2lkdGgpIGNvbnN0OwpAQCAtMTMyLDYgKzIxNiw4IEBAIHB1YmxpYzoKIAogICAgIGludCBj
YWxjUGVyY2VudGFnZUhlaWdodChjb25zdCBMZW5ndGgmIGhlaWdodCk7CiAKKyAgICAvLyBCbG9j
ayBmbG93cyBzdWJjbGFzcyBhdmFpbGFibGVXaWR0aCB0byBoYW5kbGUgbXVsdGkgY29sdW1uIGxh
eW91dCAoc2hyaW5raW5nIHRoZSB3aWR0aCBhdmFpbGFibGUgdG8gY2hpbGRyZW4gd2hlbiBsYXlp
bmcgb3V0LikKKyAgICB2aXJ0dWFsIGludCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IGNvbnRlbnRXaWR0aCgpOyB9CiAgICAgdmlydHVhbCBpbnQgYXZhaWxhYmxlSGVpZ2h0KCkgY29u
c3Q7CiAgICAgaW50IGF2YWlsYWJsZUhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYpIGNvbnN0Owog
CkBAIC0xNjUsMTcgKzI1MSwyMSBAQCBwdWJsaWM6CiAgICAgLy8gdGhhdCBqdXN0IHVwZGF0ZXMg
dGhlIG9iamVjdCdzIHBvc2l0aW9uLgogICAgIHZpcnR1YWwgdm9pZCB0cnlMYXlvdXREb2luZ1Bv
c2l0aW9uZWRNb3ZlbWVudE9ubHkoKQogICAgIHsKLSAgICAgICAgaW50IG9sZFdpZHRoID0gbV93
aWR0aDsKKyAgICAgICAgaW50IG9sZFdpZHRoID0gd2lkdGgoKTsKICAgICAgICAgY2FsY1dpZHRo
KCk7CiAgICAgICAgIC8vIElmIHdlIHNocmluayB0byBmaXQgb3VyIHdpZHRoIG1heSBoYXZlIGNo
YW5nZWQsIHNvIHdlIHN0aWxsIG5lZWQgZnVsbCBsYXlvdXQuCi0gICAgICAgIGlmIChvbGRXaWR0
aCAhPSBtX3dpZHRoKQorICAgICAgICBpZiAob2xkV2lkdGggIT0gd2lkdGgoKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgY2FsY0hlaWdodCgpOwogICAgICAgICBzZXROZWVkc0xheW91
dChmYWxzZSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBJbnRSZWN0IG1hc2tDbGlwUmVjdCgpOwor
ICAgIEludFJlY3QgbWFza0NsaXBSZWN0KCk7CiAgICAgCisjaWYgRU5BQkxFKFNWRykKKyAgICB2
aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CisjZW5k
aWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoUmVuZGVy
U3R5bGU6OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CiAgICAgdmlydHVhbCB2
b2lkIHN0eWxlRGlkQ2hhbmdlKFJlbmRlclN0eWxlOjpEaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpOwpAQCAtMjIyLDEyICszMTIsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCBjYWxjUHJlZldpZHRocygpID0gMDsKIAogcHJvdGVjdGVkOgotICAgIC8vIFRoZSB3aWR0aC9o
ZWlnaHQgb2YgdGhlIGNvbnRlbnRzICsgYm9yZGVycyArIHBhZGRpbmcuCi0gICAgaW50IG1fd2lk
dGg7Ci0gICAgaW50IG1faGVpZ2h0OwotCi0gICAgaW50IG1feDsKLSAgICBpbnQgbV95OworICAg
IC8vIFRoZSB3aWR0aC9oZWlnaHQgb2YgdGhlIGNvbnRlbnRzICsgYm9yZGVycyArIHBhZGRpbmcu
ICBUaGUgeC95IGxvY2F0aW9uIGlzIHJlbGF0aXZlIHRvIG91ciBjb250YWluZXIgKHdoaWNoIGlz
IG5vdCBhbHdheXMgb3VyIHBhcmVudCkuCisgICAgSW50UmVjdCBtX2ZyYW1lUmVjdDsKIAogICAg
IGludCBtX21hcmdpbkxlZnQ7CiAgICAgaW50IG1fbWFyZ2luUmlnaHQ7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJ1dHRvbi5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQnV0dG9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIHZv
aWQgUmVuZGVyQnV0dG9uOjp1cGRhdGVCZWZvcmVBZnRlckNvbnQKIEludFJlY3QgUmVuZGVyQnV0
dG9uOjpjb250cm9sQ2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpIGNvbnN0CiB7CiAgICAgLy8gQ2xp
cCB0byB0aGUgcGFkZGluZyBib3ggdG8gYXQgbGVhc3QgZ2l2ZSBjb250ZW50IHRoZSBleHRyYSBw
YWRkaW5nIHNwYWNlLgotICAgIHJldHVybiBJbnRSZWN0KHR4ICsgYm9yZGVyTGVmdCgpLCB0eSAr
IGJvcmRlclRvcCgpLCBtX3dpZHRoIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwgbV9o
ZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKKyAgICByZXR1cm4gSW50UmVj
dCh0eCArIGJvcmRlckxlZnQoKSwgdHkgKyBib3JkZXJUb3AoKSwgd2lkdGgoKSAtIGJvcmRlckxl
ZnQoKSAtIGJvcmRlclJpZ2h0KCksIGhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0
b20oKSk7CiB9CiAKIHZvaWQgUmVuZGVyQnV0dG9uOjp0aW1lckZpcmVkKFRpbWVyPFJlbmRlckJ1
dHRvbj4qKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwCShyZXZpc2lv
biA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6bGF5b3V0
KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKLSAgICBMYXlvdXRTdGF0ZU1haW50
YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKG1feCwgbV95KSk7CisgICAg
TGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4
KCksIG1fZnJhbWVSZWN0LnkoKSkpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG1fZmly
c3RDaGlsZDsKICAgICB3aGlsZSAoY2hpbGQpIHsKQEAgLTU4MCw3ICs1ODAsNyBAQCB2b2lkIFJl
bmRlckNvbnRhaW5lcjo6cmVtb3ZlTGVmdG92ZXJBbm9uCiAgICAgY2hpbGQtPmRlc3Ryb3koKTsK
IH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlckNvbnRhaW5lcjo6cG9zaXRpb25Gb3JDb29yZGlu
YXRlcyhpbnQgeCwgaW50IHkpCitWaXNpYmxlUG9zaXRpb24gUmVuZGVyQ29udGFpbmVyOjpwb3Np
dGlvbkZvckNvb3JkaW5hdGVzKGludCB4UG9zLCBpbnQgeVBvcykKIHsKICAgICAvLyBubyBjaGls
ZHJlbi4uLnJldHVybiB0aGlzIHJlbmRlciBvYmplY3QncyBlbGVtZW50LCBpZiB0aGVyZSBpcyBv
bmUsIGFuZCBvZmZzZXQgMAogICAgIGlmICghbV9maXJzdENoaWxkKQpAQCAtNTkwLDggKzU5MCw4
IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJDb250YWluZXI6OnBvc2l0aW8KICAgICAgICAgaW50
IHJpZ2h0ID0gY29udGVudFdpZHRoKCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkg
KyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgICAgICBpbnQgYm90dG9tID0gY29u
dGVudEhlaWdodCgpICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBib3JkZXJCb3R0b20o
KSArIHBhZGRpbmdCb3R0b20oKTsKICAgICAgICAgCi0gICAgICAgIGlmICh4IDwgMCB8fCB4ID4g
cmlnaHQgfHwgeSA8IDAgfHwgeSA+IGJvdHRvbSkgewotICAgICAgICAgICAgaWYgKHggPD0gcmln
aHQgLyAyKQorICAgICAgICBpZiAoeFBvcyA8IDAgfHwgeFBvcyA+IHJpZ2h0IHx8IHlQb3MgPCAw
IHx8IHlQb3MgPiBib3R0b20pIHsKKyAgICAgICAgICAgIGlmICh4UG9zIDw9IHJpZ2h0IC8gMikK
ICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGVsZW1lbnQo
KSwgMCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oUG9zaXRpb24oZWxlbWVudCgpLCBtYXhEZWVwT2Zmc2V0KGVsZW1lbnQoKSkpKTsK
QEAgLTYwMCw1NSArNjAwLDYwIEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJDb250YWluZXI6OnBv
c2l0aW8KIAogICAgIC8vIFBhc3Mgb2ZmIHRvIHRoZSBjbG9zZXN0IGNoaWxkLgogICAgIGludCBt
aW5EaXN0ID0gSU5UX01BWDsKLSAgICBSZW5kZXJPYmplY3QqIGNsb3Nlc3RSZW5kZXJlciA9IDA7
Ci0gICAgaW50IG5ld1ggPSB4OwotICAgIGludCBuZXdZID0geTsKKyAgICBSZW5kZXJCb3gqIGNs
b3Nlc3RSZW5kZXJlciA9IDA7CisgICAgaW50IG5ld1ggPSB4UG9zOworICAgIGludCBuZXdZID0g
eVBvczsKICAgICBpZiAoaXNUYWJsZVJvdygpKSB7Ci0gICAgICAgIG5ld1ggKz0geFBvcygpOwot
ICAgICAgICBuZXdZICs9IHlQb3MoKTsKKyAgICAgICAgbmV3WCArPSB4KCk7CisgICAgICAgIG5l
d1kgKz0geSgpOwogICAgIH0KLSAgICBmb3IgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2Zp
cnN0Q2hpbGQ7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0U2libGluZygpKSB7
Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmZpcnN0Q2hpbGQoKSAmJiAhcmVuZGVyZXItPmlzSW5s
aW5lKCkgJiYgIXJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpIAotICAgICAgICAgICAgfHwgcmVuZGVy
ZXItPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QgPSBtX2ZpcnN0Q2hpbGQ7IHJlbmRlck9iamVjdDsgcmVuZGVyT2Jq
ZWN0ID0gcmVuZGVyT2JqZWN0LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghcmVuZGVy
T2JqZWN0LT5maXJzdENoaWxkKCkgJiYgIXJlbmRlck9iamVjdC0+aXNJbmxpbmUoKSAmJiAhcmVu
ZGVyT2JqZWN0LT5pc0Jsb2NrRmxvdygpIAorICAgICAgICAgICAgfHwgcmVuZGVyT2JqZWN0LT5z
dHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAKLSAgICAgICAgaW50IHRvcCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsg
KGlzVGFibGVSb3coKSA/IDAgOiByZW5kZXJlci0+eVBvcygpKTsKKyAgICAgICAgaWYgKCFyZW5k
ZXJPYmplY3QtPmlzQm94KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAg
ICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihyZW5kZXJP
YmplY3QpOworCisgICAgICAgIGludCB0b3AgPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSAr
IChpc1RhYmxlUm93KCkgPyAwIDogcmVuZGVyZXItPnkoKSk7CiAgICAgICAgIGludCBib3R0b20g
PSB0b3AgKyByZW5kZXJlci0+Y29udGVudEhlaWdodCgpOwotICAgICAgICBpbnQgbGVmdCA9IGJv
cmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gMCA6IHJlbmRlcmVy
LT54UG9zKCkpOworICAgICAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0
KCkgKyAoaXNUYWJsZVJvdygpID8gMCA6IHJlbmRlcmVyLT54KCkpOwogICAgICAgICBpbnQgcmln
aHQgPSBsZWZ0ICsgcmVuZGVyZXItPmNvbnRlbnRXaWR0aCgpOwogICAgICAgICAKLSAgICAgICAg
aWYgKHggPD0gcmlnaHQgJiYgeCA+PSBsZWZ0ICYmIHkgPD0gdG9wICYmIHkgPj0gYm90dG9tKSB7
CisgICAgICAgIGlmICh4UG9zIDw9IHJpZ2h0ICYmIHhQb3MgPj0gbGVmdCAmJiB5UG9zIDw9IHRv
cCAmJiB5UG9zID49IGJvdHRvbSkgewogICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1RhYmxl
Um93KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3Jk
aW5hdGVzKHggKyBuZXdYIC0gcmVuZGVyZXItPnhQb3MoKSwgeSArIG5ld1kgLSByZW5kZXJlci0+
eVBvcygpKTsKLSAgICAgICAgICAgIHJldHVybiByZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGlu
YXRlcyh4IC0gcmVuZGVyZXItPnhQb3MoKSwgeSAtIHJlbmRlcmVyLT55UG9zKCkpOworICAgICAg
ICAgICAgICAgIHJldHVybiByZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4UG9zICsg
bmV3WCAtIHJlbmRlcmVyLT54KCksIHlQb3MgKyBuZXdZIC0gcmVuZGVyZXItPnkoKSk7CisgICAg
ICAgICAgICByZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeFBvcyAtIHJl
bmRlcmVyLT54KCksIHlQb3MgLSByZW5kZXJlci0+eSgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIEZpbmQgdGhlIGRpc3RhbmNlIGZyb20gKHgsIHkpIHRvIHRoZSBib3guICBTcGxpdCB0aGUg
c3BhY2UgYXJvdW5kIHRoZSBib3ggaW50byA4IHBpZWNlcwogICAgICAgICAvLyBhbmQgdXNlIGEg
ZGlmZmVyZW50IGNvbXBhcmUgZGVwZW5kaW5nIG9uIHdoaWNoIHBpZWNlICh4LCB5KSBpcyBpbi4K
ICAgICAgICAgSW50UG9pbnQgY21wOwotICAgICAgICBpZiAoeCA+IHJpZ2h0KSB7Ci0gICAgICAg
ICAgICBpZiAoeSA8IHRvcCkKKyAgICAgICAgaWYgKHhQb3MgPiByaWdodCkgeworICAgICAgICAg
ICAgaWYgKHlQb3MgPCB0b3ApCiAgICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQocmlnaHQs
IHRvcCk7Ci0gICAgICAgICAgICBlbHNlIGlmICh5ID4gYm90dG9tKQorICAgICAgICAgICAgZWxz
ZSBpZiAoeVBvcyA+IGJvdHRvbSkKICAgICAgICAgICAgICAgICBjbXAgPSBJbnRQb2ludChyaWdo
dCwgYm90dG9tKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjbXAgPSBJbnRQ
b2ludChyaWdodCwgeSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeCA8IGxlZnQpIHsKLSAgICAgICAg
ICAgIGlmICh5IDwgdG9wKQorICAgICAgICAgICAgICAgIGNtcCA9IEludFBvaW50KHJpZ2h0LCB5
UG9zKTsKKyAgICAgICAgfSBlbHNlIGlmICh4UG9zIDwgbGVmdCkgeworICAgICAgICAgICAgaWYg
KHlQb3MgPCB0b3ApCiAgICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQobGVmdCwgdG9wKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKHkgPiBib3R0b20pCisgICAgICAgICAgICBlbHNlIGlmICh5
UG9zID4gYm90dG9tKQogICAgICAgICAgICAgICAgIGNtcCA9IEludFBvaW50KGxlZnQsIGJvdHRv
bSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQobGVm
dCwgeSk7CisgICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQobGVmdCwgeVBvcyk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoeSA8IHRvcCkKLSAgICAgICAgICAgICAgICBj
bXAgPSBJbnRQb2ludCh4LCB0b3ApOworICAgICAgICAgICAgaWYgKHlQb3MgPCB0b3ApCisgICAg
ICAgICAgICAgICAgY21wID0gSW50UG9pbnQoeFBvcywgdG9wKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBjbXAgPSBJbnRQb2ludCh4LCBib3R0b20pOworICAgICAgICAgICAg
ICAgIGNtcCA9IEludFBvaW50KHhQb3MsIGJvdHRvbSk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGludCB4MW1pbnVzeDIgPSBjbXAueCgpIC0geDsKLSAgICAgICAgaW50IHkxbWludXN5
MiA9IGNtcC55KCkgLSB5OworICAgICAgICBpbnQgeDFtaW51c3gyID0gY21wLngoKSAtIHhQb3M7
CisgICAgICAgIGludCB5MW1pbnVzeTIgPSBjbXAueSgpIC0geVBvczsKICAgICAgICAgCiAgICAg
ICAgIGludCBkaXN0ID0geDFtaW51c3gyICogeDFtaW51c3gyICsgeTFtaW51c3kyICogeTFtaW51
c3kyOwogICAgICAgICBpZiAoZGlzdCA8IG1pbkRpc3QpIHsKQEAgLTY1OCw3ICs2NjMsNyBAQCBW
aXNpYmxlUG9zaXRpb24gUmVuZGVyQ29udGFpbmVyOjpwb3NpdGlvCiAgICAgfQogICAgIAogICAg
IGlmIChjbG9zZXN0UmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBjbG9zZXN0UmVuZGVyZXItPnBv
c2l0aW9uRm9yQ29vcmRpbmF0ZXMobmV3WCAtIGNsb3Nlc3RSZW5kZXJlci0+eFBvcygpLCBuZXdZ
IC0gY2xvc2VzdFJlbmRlcmVyLT55UG9zKCkpOworICAgICAgICByZXR1cm4gY2xvc2VzdFJlbmRl
cmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKG5ld1ggLSBjbG9zZXN0UmVuZGVyZXItPngoKSwg
bmV3WSAtIGNsb3Nlc3RSZW5kZXJlci0+eSgpKTsKICAgICAKICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKGVsZW1lbnQoKSwgMCwgRE9XTlNUUkVBTSk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb250YWluZXIuaAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTAgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4g
bV9maXJzdENoaWxkOyB9CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9CiAKKyAgICAvLyBVc2UgdGhpcyB3aXRoIGNhdXRp
b24hIE5vIHR5cGUgY2hlY2tpbmcgaXMgZG9uZSEKKyAgICBSZW5kZXJCb3gqIGZpcnN0Q2hpbGRC
b3goKSBjb25zdCB7IEFTU0VSVCghZmlyc3RDaGlsZCgpIHx8IGZpcnN0Q2hpbGQtPmlzQm94KCkp
OyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obV9maXJzdENoaWxkKTsgfQorICAgIFJl
bmRlckJveCogbGFzdENoaWxkQm94KCkgY29uc3QgeyBBU1NFUlQoIWxhc3RDaGlsZCgpIHx8IGxh
c3RDaGlsZC0+aXNCb3goKSk7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihtX2xhc3RD
aGlsZCk7IH0KKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQo
UmVuZGVyT2JqZWN0Kik7CkBAIC02NSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgYWRkTGluZUJveFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gVUlOVF9NQVgsIGJvb2wgdXNlU2VsZWN0aW9uSGVp
Z2h0ID0gZmFsc2UpOwogICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0QWJzb2x1dGVMaW5lQm94UXVh
ZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAsIHVuc2lnbmVk
IGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsK
IAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBSZW5kZXJPYmplY3QqIG1fZmlyc3RDaGlsZDsK
ICAgICBSZW5kZXJPYmplY3QqIG1fbGFzdENoaWxkOwogfTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZpZWxkc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGaWVsZHNldC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmllbGRzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIFJlbmRl
ckZpZWxkc2V0OjpSZW5kZXJGaWVsZHNldChOb2RlKiBlbGUKIHZvaWQgUmVuZGVyRmllbGRzZXQ6
OmNhbGNQcmVmV2lkdGhzKCkKIHsKICAgICBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMoKTsK
LSAgICBpZiAoUmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCkpIHsKKyAgICBpZiAo
UmVuZGVyQm94KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCkpIHsKICAgICAgICAgaW50IGxlZ2VuZE1p
bldpZHRoID0gbGVnZW5kLT5taW5QcmVmV2lkdGgoKTsKIAogICAgICAgICBMZW5ndGggbGVnZW5k
TWFyZ2luTGVmdCA9IGxlZ2VuZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpOwpAQCAtNjYsNyArNjYs
NyBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpjYWxjUHJlZldpZHRocygpCiAKIFJlbmRlck9iamVj
dCogUmVuZGVyRmllbGRzZXQ6OmxheW91dExlZ2VuZChib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiB7
Ci0gICAgUmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCk7CisgICAgUmVuZGVyQm94
KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCk7CiAgICAgaWYgKGxlZ2VuZCkgewogICAgICAgICBpZiAo
cmVsYXlvdXRDaGlsZHJlbikKICAgICAgICAgICAgIGxlZ2VuZC0+c2V0TmVlZHNMYXlvdXQodHJ1
ZSk7CkBAIC03OSwxOCArNzksMTggQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6bGF5
b3V0TGVnZQogICAgICAgICAgICAgICAgICAgICB4UG9zID0gYm9yZGVyTGVmdCgpICsgcGFkZGlu
Z0xlZnQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBDRU5URVI6Ci0gICAgICAgICAgICAgICAgICAgIHhQb3MgPSAobV93aWR0aCAtIGxlZ2VuZC0+
d2lkdGgoKSkgLyAyOworICAgICAgICAgICAgICAgICAgICB4UG9zID0gKHdpZHRoKCkgLSBsZWdl
bmQtPndpZHRoKCkpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgeFBvcyA9IG1fd2lkdGggLSBwYWRk
aW5nUmlnaHQoKSAtIGJvcmRlclJpZ2h0KCkgLSBsZWdlbmQtPndpZHRoKCkgLSBsZWdlbmQtPm1h
cmdpblJpZ2h0KCk7CisgICAgICAgICAgICAgICAgICAgIHhQb3MgPSB3aWR0aCgpIC0gcGFkZGlu
Z1JpZ2h0KCkgLSBib3JkZXJSaWdodCgpIC0gbGVnZW5kLT53aWR0aCgpIC0gbGVnZW5kLT5tYXJn
aW5SaWdodCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
c3dpdGNoIChsZWdlbmQtPnN0eWxlKCktPnRleHRBbGlnbigpKSB7CiAgICAgICAgICAgICAgICAg
Y2FzZSBSSUdIVDoKLSAgICAgICAgICAgICAgICAgICAgeFBvcyA9IG1fd2lkdGggLSBwYWRkaW5n
UmlnaHQoKSAtIGJvcmRlclJpZ2h0KCkgLSBsZWdlbmQtPndpZHRoKCk7CisgICAgICAgICAgICAg
ICAgICAgIHhQb3MgPSB3aWR0aCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSBib3JkZXJSaWdodCgpIC0g
bGVnZW5kLT53aWR0aCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIENFTlRFUjoKLSAgICAgICAgICAgICAgICAgICAgeFBvcyA9IChtX3dpZHRoIC0g
bGVnZW5kLT53aWR0aCgpKSAvIDI7CisgICAgICAgICAgICAgICAgICAgIHhQb3MgPSAod2lkdGgo
KSAtIGxlZ2VuZC0+d2lkdGgoKSkgLyAyOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICB4UG9zID0gYm9yZGVy
TGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIGxlZ2VuZC0+bWFyZ2luTGVmdCgpOwpAQCAtOTgsMTMg
Kzk4LDEzIEBAIFJlbmRlck9iamVjdCogUmVuZGVyRmllbGRzZXQ6OmxheW91dExlZ2UKICAgICAg
ICAgfQogICAgICAgICBpbnQgYiA9IGJvcmRlclRvcCgpOwogICAgICAgICBpbnQgaCA9IGxlZ2Vu
ZC0+aGVpZ2h0KCk7Ci0gICAgICAgIGxlZ2VuZC0+c2V0UG9zKHhQb3MsIG1heCgoYi1oKS8yLCAw
KSk7Ci0gICAgICAgIG1faGVpZ2h0ID0gbWF4KGIsaCkgKyBwYWRkaW5nVG9wKCk7CisgICAgICAg
IGxlZ2VuZC0+c2V0TG9jYXRpb24oeFBvcywgbWF4KChiLWgpLzIsIDApKTsKKyAgICAgICAgc2V0
SGVpZ2h0KG1heChiLGgpICsgcGFkZGluZ1RvcCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGxlZ2Vu
ZDsKIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZCgpIGNvbnN0
CitSZW5kZXJCb3gqIFJlbmRlckZpZWxkc2V0OjpmaW5kTGVnZW5kKCkgY29uc3QKIHsKICAgICBm
b3IgKFJlbmRlck9iamVjdCogbGVnZW5kID0gZmlyc3RDaGlsZCgpOyBsZWdlbmQ7IGxlZ2VuZCA9
IGxlZ2VuZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIWxlZ2VuZC0+aXNGbG9hdGlu
Z09yUG9zaXRpb25lZCgpICYmIGxlZ2VuZC0+ZWxlbWVudCgpICYmCkBAIC0xMTMsNyArMTEzLDcg
QEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZAogICAgICAgICAgICAg
fHwgbGVnZW5kLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoV01MTmFtZXM6Omluc2VydGVkTGVnZW5k
VGFnKQogI2VuZGlmCiAgICAgICAgICAgICkKLSAgICAgICAgICAgIHJldHVybiBsZWdlbmQ7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obGVnZW5kKTsKICAgICB9
CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xMjEsMTUgKzEyMSwxNSBAQCBSZW5kZXJPYmplY3QqIFJl
bmRlckZpZWxkc2V0OjpmaW5kTGVnZW5kCiB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJveERl
Y29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBp
bnQgdyA9IHdpZHRoKCk7Ci0gICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkg
KyBib3JkZXJCb3R0b21FeHRyYSgpOwotICAgIFJlbmRlck9iamVjdCogbGVnZW5kID0gZmluZExl
Z2VuZCgpOworICAgIGludCBoID0gaGVpZ2h0KCkgKyBpbnRyaW5zaWNQYWRkaW5nVG9wKCkgKyBp
bnRyaW5zaWNQYWRkaW5nQm90dG9tKCk7CisgICAgUmVuZGVyQm94KiBsZWdlbmQgPSBmaW5kTGVn
ZW5kKCk7CiAgICAgaWYgKCFsZWdlbmQpCiAgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6cGFp
bnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CiAKLSAgICBpbnQgeU9mZiA9IChs
ZWdlbmQtPnlQb3MoKSA+IDApID8gMCA6IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVyVG9wKCkp
IC8gMjsKLSAgICBpbnQgbGVnZW5kQm90dG9tID0gdHkgKyBsZWdlbmQtPnlQb3MoKSArIGxlZ2Vu
ZC0+aGVpZ2h0KCk7CisgICAgaW50IHlPZmYgPSAobGVnZW5kLT55KCkgPiAwKSA/IDAgOiAobGVn
ZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7CisgICAgaW50IGxlZ2VuZEJvdHRvbSA9
IHR5ICsgbGVnZW5kLT55KCkgKyBsZWdlbmQtPmhlaWdodCgpOwogICAgIGggLT0geU9mZjsKLSAg
ICB0eSArPSB5T2ZmIC0gYm9yZGVyVG9wRXh0cmEoKTsKKyAgICB0eSArPSB5T2ZmIC0gaW50cmlu
c2ljUGFkZGluZ1RvcCgpOwogCiAgICAgaW50IG15ID0gbWF4KHR5LCBwYWludEluZm8ucmVjdC55
KCkpOwogICAgIGludCBlbmQgPSBtaW4ocGFpbnRJbmZvLnJlY3QuYm90dG9tKCksIHR5ICsgaCk7
CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0
aW9ucwogCiAgICAgLy8gU2F2ZSB0aW1lIGJ5IG5vdCBzYXZpbmcgYW5kIHJlc3RvcmluZyB0aGUg
R3JhcGhpY3NDb250ZXh0IGluIHRoZSBzdHJhaWdodCBib3JkZXIgY2FzZQogICAgIGlmICghc3R5
bGUoKS0+aGFzQm9yZGVyUmFkaXVzKCkpCi0gICAgICAgIHJldHVybiBwYWludEJvcmRlck1pbnVz
TGVnZW5kKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIGxlZ2VuZC0+
eFBvcygpLCBsZWdlbmQtPndpZHRoKCksIGxlZ2VuZEJvdHRvbSk7CisgICAgICAgIHJldHVybiBw
YWludEJvcmRlck1pbnVzTGVnZW5kKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0
eWxlKCksIGxlZ2VuZC0+eCgpLCBsZWdlbmQtPndpZHRoKCksIGxlZ2VuZEJvdHRvbSk7CiAgICAg
CiAgICAgLy8gV2UgaGF2ZSByb3VuZGVkIGJvcmRlcnMsIGNyZWF0ZSBhIGNsaXBwaW5nIHJlZ2lv
biAKICAgICAvLyBhcm91bmQgdGhlIGxlZ2VuZCBhbmQgcGFpbnQgdGhlIGJvcmRlciBhcyBub3Jt
YWwKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJveERlY29y
YXRpb25zCiAgICAgaW50IGNsaXBUb3AgPSB0eTsKICAgICBpbnQgY2xpcEhlaWdodCA9IG1heChz
dGF0aWNfY2FzdDxpbnQ+KHN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCkpLCBsZWdlbmQtPmhlaWdo
dCgpKTsKIAotICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcE91dChJbnRSZWN0KHR4ICsgbGVnZW5k
LT54UG9zKCksIGNsaXBUb3AsCisgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwT3V0KEludFJlY3Qo
dHggKyBsZWdlbmQtPngoKSwgY2xpcFRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZ2VuZC0+d2lkdGgoKSwgY2xpcEhlaWdodCkpOwogICAgIHBhaW50Qm9yZGVy
KHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIHRydWUsIHRydWUpOwog
CkBAIC0xNjcsMTQgKzE2NywxNCBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludE1hc2soUGFp
bnRJbmZvCiAgICAgICAgIHJldHVybjsKIAogICAgIGludCB3ID0gd2lkdGgoKTsKLSAgICBpbnQg
aCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7Ci0g
ICAgUmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCk7CisgICAgaW50IGggPSBoZWln
aHQoKSArIGludHJpbnNpY1BhZGRpbmdUb3AoKSArIGludHJpbnNpY1BhZGRpbmdCb3R0b20oKTsK
KyAgICBSZW5kZXJCb3gqIGxlZ2VuZCA9IGZpbmRMZWdlbmQoKTsKICAgICBpZiAoIWxlZ2VuZCkK
ICAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwYWludE1hc2socGFpbnRJbmZvLCB0eCwgdHkp
OwogCi0gICAgaW50IHlPZmYgPSAobGVnZW5kLT55UG9zKCkgPiAwKSA/IDAgOiAobGVnZW5kLT5o
ZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7CisgICAgaW50IHlPZmYgPSAobGVnZW5kLT55KCkg
PiAwKSA/IDAgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7CiAgICAgaCAt
PSB5T2ZmOwotICAgIHR5ICs9IHlPZmYgLSBib3JkZXJUb3BFeHRyYSgpOworICAgIHR5ICs9IHlP
ZmYgLSBpbnRyaW5zaWNQYWRkaW5nVG9wKCk7CiAKICAgICBpbnQgbXkgPSBtYXgodHksIHBhaW50
SW5mby5yZWN0LnkoKSk7CiAgICAgaW50IGVuZCA9IG1pbihwYWludEluZm8ucmVjdC5ib3R0b20o
KSwgdHkgKyBoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaAkocmV2aXNpb24g
NDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZXhwYW5kc1Rv
RW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aGVpZ2h0
KCkuaXNBdXRvKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFJlbmRlck9iamVjdCogZmluZExl
Z2VuZCgpIGNvbnN0OworICAgIFJlbmRlckJveCogZmluZExlZ2VuZCgpIGNvbnN0OwogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFJlbmRlclN0eWxlOjpEaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRhdGVG
cm9tCiAKIGludCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6bWF4RmlsZW5hbWVXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1heCgwLCBjb250ZW50V2lkdGgoKSAtIG1fYnV0dG9uLT5yZW5k
ZXJlcigpLT53aWR0aCgpIC0gYWZ0ZXJCdXR0b25TcGFjaW5nCisgICAgcmV0dXJuIG1heCgwLCBj
b250ZW50V2lkdGgoKSAtIG1fYnV0dG9uLT5yZW5kZXJCb3goKS0+d2lkdGgoKSAtIGFmdGVyQnV0
dG9uU3BhY2luZwogICAgICAgICAtIChtX2ZpbGVDaG9vc2VyLT5pY29uKCkgPyBpY29uV2lkdGgg
KyBpY29uRmlsZW5hbWVTcGFjaW5nIDogMCkpOwogfQogCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9p
ZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogICAgICAgICAKICAgICAgICAg
Ly8gRGV0ZXJtaW5lIHdoZXJlIHRoZSBmaWxlbmFtZSBzaG91bGQgYmUgcGxhY2VkCiAgICAgICAg
IGludCBjb250ZW50TGVmdCA9IHR4ICsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKLSAg
ICAgICAgaW50IGJ1dHRvbkFuZEljb25XaWR0aCA9IG1fYnV0dG9uLT5yZW5kZXJlcigpLT53aWR0
aCgpICsgYWZ0ZXJCdXR0b25TcGFjaW5nCisgICAgICAgIGludCBidXR0b25BbmRJY29uV2lkdGgg
PSBtX2J1dHRvbi0+cmVuZGVyQm94KCktPndpZHRoKCkgKyBhZnRlckJ1dHRvblNwYWNpbmcKICAg
ICAgICAgICAgICsgKG1fZmlsZUNob29zZXItPmljb24oKSA/IGljb25XaWR0aCArIGljb25GaWxl
bmFtZVNwYWNpbmcgOiAwKTsKICAgICAgICAgaW50IHRleHRYOwogICAgICAgICBpZiAoc3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQpAQCAtMjEzLDkgKzIxMyw5IEBAIHZvaWQgUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMKICAgICAgICAgICAgIGludCBpY29uWSA9IHR5ICsg
Ym9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyAoY29udGVudEhlaWdodCgpIC0gaWNvbkhlaWdo
dCkgLyAyOwogICAgICAgICAgICAgaW50IGljb25YOwogICAgICAgICAgICAgaWYgKHN0eWxlKCkt
PmRpcmVjdGlvbigpID09IExUUikKLSAgICAgICAgICAgICAgICBpY29uWCA9IGNvbnRlbnRMZWZ0
ICsgbV9idXR0b24tPnJlbmRlcmVyKCktPndpZHRoKCkgKyBhZnRlckJ1dHRvblNwYWNpbmc7Cisg
ICAgICAgICAgICAgICAgaWNvblggPSBjb250ZW50TGVmdCArIG1fYnV0dG9uLT5yZW5kZXJCb3go
KS0+d2lkdGgoKSArIGFmdGVyQnV0dG9uU3BhY2luZzsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBpY29uWCA9IGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRoKCkgLSBtX2J1dHRv
bi0+cmVuZGVyZXIoKS0+d2lkdGgoKSAtIGFmdGVyQnV0dG9uU3BhY2luZyAtIGljb25XaWR0aDsK
KyAgICAgICAgICAgICAgICBpY29uWCA9IGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRoKCkgLSBt
X2J1dHRvbi0+cmVuZGVyQm94KCktPndpZHRoKCkgLSBhZnRlckJ1dHRvblNwYWNpbmcgLSBpY29u
V2lkdGg7CiAKICAgICAgICAgICAgIC8vIERyYXcgdGhlIGZpbGUgaWNvbgogICAgICAgICAgICAg
bV9maWxlQ2hvb3Nlci0+aWNvbigpLT5wYWludChwYWludEluZm8uY29udGV4dCwgSW50UmVjdChp
Y29uWCwgaWNvblksIGljb25XaWR0aCwgaWNvbkhlaWdodCkpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDExICs0
NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGxhc3RPcmRpbmFsID0gMTsgCiAgICAgICAgIGlmICgh
Zm9yd2FyZCkgewogICAgICAgICAgICAgLy8gTm8gY2hvaWNlLCBzaW5jZSB3ZSdyZSBnb2luZyBi
YWNrd2FyZHMsIHdlIGhhdmUgdG8gZmluZCBvdXQgdGhlIGhpZ2hlc3Qgb3JkaW5hbCB1cCBmcm9u
dC4KLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBib3gtPmZpcnN0Q2hpbGQoKTsK
KyAgICAgICAgICAgIFJlbmRlckJveCogY2hpbGQgPSBib3gtPmZpcnN0Q2hpbGRCb3goKTsKICAg
ICAgICAgICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+c3R5
bGUoKS0+Ym94T3JkaW5hbEdyb3VwKCkgPiBsYXN0T3JkaW5hbCkKICAgICAgICAgICAgICAgICAg
ICAgbGFzdE9yZGluYWwgPSBjaGlsZC0+c3R5bGUoKS0+Ym94T3JkaW5hbEdyb3VwKCk7Ci0gICAg
ICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAg
ICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIApAQCAtNjEsMjkgKzYxLDI4IEBAIHB1YmxpYzoKICAgICAgICAgY3VycmVu
dE9yZGluYWwgPSBmb3J3YXJkID8gMCA6IGxhc3RPcmRpbmFsKzE7CiAgICAgfQogCi0gICAgUmVu
ZGVyT2JqZWN0KiBmaXJzdCgpIHsKKyAgICBSZW5kZXJCb3gqIGZpcnN0KCkgewogICAgICAgICBy
ZXNldCgpOwogICAgICAgICByZXR1cm4gbmV4dCgpOwogICAgIH0KICAgICAKLSAgICBSZW5kZXJP
YmplY3QqIG5leHQoKSB7Ci0KKyAgICBSZW5kZXJCb3gqIG5leHQoKSB7CiAgICAgICAgIGRvIHsg
CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnQpIHsKICAgICAgICAgICAgICAgICBpZiAoZm9yd2Fy
ZCkgewogICAgICAgICAgICAgICAgICAgICBjdXJyZW50T3JkaW5hbCsrOyAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGN1cnJlbnRPcmRpbmFsID4gbGFzdE9yZGluYWwpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGJveC0+
Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gYm94LT5maXJzdENo
aWxkQm94KCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudE9yZGluYWwtLTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRPcmRpbmFs
ID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAg
ICAgICAgY3VycmVudCA9IGJveC0+bGFzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnQgPSBib3gtPmxhc3RDaGlsZEJveCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjdXJyZW50ID0gZm9yd2Fy
ZCA/IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkgOiBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsK
KyAgICAgICAgICAgICAgICBjdXJyZW50ID0gZm9yd2FyZCA/IGN1cnJlbnQtPm5leHRTaWJsaW5n
Qm94KCkgOiBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmdCb3goKTsKICAgICAgICAgICAgIGlmIChj
dXJyZW50ICYmIGN1cnJlbnQtPnN0eWxlKCktPmJveE9yZGluYWxHcm91cCgpID4gbGFzdE9yZGlu
YWwpCiAgICAgICAgICAgICAgICAgbGFzdE9yZGluYWwgPSBjdXJyZW50LT5zdHlsZSgpLT5ib3hP
cmRpbmFsR3JvdXAoKTsKICAgICAgICAgfSB3aGlsZSAoIWN1cnJlbnQgfHwgY3VycmVudC0+c3R5
bGUoKS0+Ym94T3JkaW5hbEdyb3VwKCkgIT0gY3VycmVudE9yZGluYWwgfHwKQEAgLTkzLDcgKzky
LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFJlbmRlckZsZXhpYmxlQm94KiBib3g7Ci0g
ICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50OworICAgIFJlbmRlckJveCogY3VycmVudDsKICAgICBi
b29sIGZvcndhcmQ7CiAgICAgdW5zaWduZWQgaW50IGN1cnJlbnRPcmRpbmFsOwogICAgIHVuc2ln
bmVkIGludCBsYXN0T3JkaW5hbDsKQEAgLTExMiwxMyArMTExLDEwIEBAIFJlbmRlckZsZXhpYmxl
Qm94Ojp+UmVuZGVyRmxleGlibGVCb3goKQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxj
SG9yaXpvbnRhbFByZWZXaWR0aHMoKQogewotICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJz
dENoaWxkKCk7Ci0gICAgd2hpbGUgKGNoaWxkKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxk
ID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3go
KSkgewogICAgICAgICAvLyBwb3NpdGlvbmVkIGNoaWxkcmVuIGRvbid0IGFmZmVjdCB0aGUgbWlu
bWF4d2lkdGgKLSAgICAgICAgaWYgKGNoaWxkLT5pc1Bvc2l0aW9uZWQoKSB8fCBjaGlsZC0+c3R5
bGUoKS0+dmlzaWJpbGl0eSgpID09IENPTExBUFNFKSB7Ci0gICAgICAgICAgICBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpOworICAgICAgICBpZiAoY2hpbGQtPmlzUG9zaXRpb25lZCgpIHx8
IGNoaWxkLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gQ09MTEFQU0UpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQogCiAgICAgICAgIC8vIEEgbWFyZ2luIGJhc2ljYWxseSBoYXMg
dGhyZWUgdHlwZXM6IGZpeGVkLCBwZXJjZW50YWdlLCBhbmQgYXV0byAodmFyaWFibGUpLgogICAg
ICAgICAvLyBBdXRvIGFuZCBwZXJjZW50YWdlIG1hcmdpbnMgc2ltcGx5IGJlY29tZSAwIHdoZW4g
Y29tcHV0aW5nIG1pbi9tYXggd2lkdGguCkBAIC0xMzQsMjEgKzEzMCwxNSBAQCB2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjpjYWxjSG9yaXpvbnRhbFByCiAKICAgICAgICAgbV9taW5QcmVmV2lkdGgg
Kz0gY2hpbGQtPm1pblByZWZXaWR0aCgpICsgbWFyZ2luOwogICAgICAgICBtX21heFByZWZXaWR0
aCArPSBjaGlsZC0+bWF4UHJlZldpZHRoKCkgKyBtYXJnaW47Ci0KLSAgICAgICAgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICB9ICAgIAogfQogCiB2b2lkIFJlbmRlckZsZXhpYmxl
Qm94OjpjYWxjVmVydGljYWxQcmVmV2lkdGhzKCkKIHsKLSAgICBSZW5kZXJPYmplY3QgKmNoaWxk
ID0gZmlyc3RDaGlsZCgpOwotICAgIHdoaWxlKGNoaWxkICE9IDApCi0gICAgeworICAgIGZvciAo
UmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgLy8gUG9zaXRpb25lZCBjaGlsZHJlbiBhbmQg
Y29sbGFwc2VkIGNoaWxkcmVuIGRvbid0IGFmZmVjdCB0aGUgbWluL21heCB3aWR0aAotICAgICAg
ICBpZiAoY2hpbGQtPmlzUG9zaXRpb25lZCgpIHx8IGNoaWxkLT5zdHlsZSgpLT52aXNpYmlsaXR5
KCkgPT0gQ09MTEFQU0UpIHsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCk7CisgICAgICAgIGlmIChjaGlsZC0+aXNQb3NpdGlvbmVkKCkgfHwgY2hpbGQtPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSA9PSBDT0xMQVBTRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9CiAKICAgICAgICAgLy8gQSBtYXJnaW4gYmFzaWNhbGx5IGhhcyB0aHJlZSB0eXBlczogZml4
ZWQsIHBlcmNlbnRhZ2UsIGFuZCBhdXRvICh2YXJpYWJsZSkuCiAgICAgICAgIC8vIEF1dG8vcGVy
Y2VudGFnZSBtYXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNvbXB1dGluZyBtaW4vbWF4IHdp
ZHRoLgpAQCAtMTY2LDggKzE1Niw2IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNWZXJ0
aWNhbFByZWYKICAgICAgICAgCiAgICAgICAgIHcgPSBjaGlsZC0+bWF4UHJlZldpZHRoKCkgKyBt
YXJnaW47CiAgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KHcsIG1fbWF4UHJlZldpZHRoKTsK
LQotICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgIH0gICAgCiB9CiAK
QEAgLTIyMCwyMSArMjA4LDIxIEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2Nr
KGJvb2wKICAgICAgICAgb2xkT3V0bGluZUJveCA9IGFic29sdXRlT3V0bGluZUJvdW5kcygpOwog
ICAgIH0KIAotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRo
aXMsIEludFNpemUobV94LCBtX3kpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkp
OworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIElu
dFNpemUoeCgpLCBtX2ZyYW1lUmVjdC55KCkpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0
aW9uKCkpOwogCi0gICAgaW50IHByZXZpb3VzV2lkdGggPSBtX3dpZHRoOwotICAgIGludCBwcmV2
aW91c0hlaWdodCA9IG1faGVpZ2h0OworICAgIGludCBwcmV2aW91c1dpZHRoID0gd2lkdGgoKTsK
KyAgICBpbnQgcHJldmlvdXNIZWlnaHQgPSBoZWlnaHQoKTsKICAgICAKICAgICBjYWxjV2lkdGgo
KTsKICAgICBjYWxjSGVpZ2h0KCk7Ci0gICAgbV9vdmVyZmxvd1dpZHRoID0gbV93aWR0aDsKKyAg
ICBtX292ZXJmbG93V2lkdGggPSB3aWR0aCgpOwogCi0gICAgaWYgKHByZXZpb3VzV2lkdGggIT0g
bV93aWR0aCB8fCBwcmV2aW91c0hlaWdodCAhPSBtX2hlaWdodCB8fAorICAgIGlmIChwcmV2aW91
c1dpZHRoICE9IHdpZHRoKCkgfHwgcHJldmlvdXNIZWlnaHQgIT0gaGVpZ2h0KCkgfHwKICAgICAg
ICAgKHBhcmVudCgpLT5pc0ZsZXhpYmxlQm94KCkgJiYgcGFyZW50KCktPnN0eWxlKCktPmJveE9y
aWVudCgpID09IEhPUklaT05UQUwgJiYKICAgICAgICAgIHBhcmVudCgpLT5zdHlsZSgpLT5ib3hB
bGlnbigpID09IEJTVFJFVENIKSkKICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CiAK
LSAgICBtX2hlaWdodCA9IDA7CisgICAgc2V0SGVpZ2h0KDApOwogICAgIG1fb3ZlcmZsb3dIZWln
aHQgPSAwOwogICAgIG1fZmxleGluZ0NoaWxkcmVuID0gbV9zdHJldGNoaW5nQ2hpbGRyZW4gPSBm
YWxzZTsKIApAQCAtMjUzLDIxICsyNDEsMjEgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5
b3V0QmxvY2soYm9vbAogICAgIGVsc2UKICAgICAgICAgbGF5b3V0VmVydGljYWxCb3gocmVsYXlv
dXRDaGlsZHJlbik7CiAKLSAgICBpbnQgb2xkSGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgaW50IG9s
ZEhlaWdodCA9IGhlaWdodCgpOwogICAgIGNhbGNIZWlnaHQoKTsKLSAgICBpZiAob2xkSGVpZ2h0
ICE9IG1faGVpZ2h0KSB7CisgICAgaWYgKG9sZEhlaWdodCAhPSBoZWlnaHQoKSkgewogICAgICAg
ICAvLyBJZiB0aGUgYmxvY2sgZ290IGV4cGFuZGVkIGluIHNpemUsIHRoZW4gaW5jcmVhc2Ugb3Vy
IG92ZXJmbG93aGVpZ2h0IHRvIG1hdGNoLgotICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA+
IG1faGVpZ2h0KQorICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA+IGhlaWdodCgpKQogICAg
ICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCAtPSAoYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90
dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpOwotICAgICAgICBpZiAobV9vdmVy
Zmxvd0hlaWdodCA8IG1faGVpZ2h0KQotICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1f
aGVpZ2h0OworICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA8IGhlaWdodCgpKQorICAgICAg
ICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IGhlaWdodCgpOwogICAgIH0KLSAgICBpZiAocHJldmlv
dXNIZWlnaHQgIT0gbV9oZWlnaHQpCisgICAgaWYgKHByZXZpb3VzSGVpZ2h0ICE9IGhlaWdodCgp
KQogICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKIAogICAgIGxheW91dFBvc2l0aW9u
ZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRyZW4gfHwgaXNSb290KCkpOwogCi0gICAgaWYgKCFpc0Zs
b2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgbV9oZWlnaHQgPT0gMCkgeworICAgIGlmICghaXNGbG9h
dGluZ09yUG9zaXRpb25lZCgpICYmIGhlaWdodCgpID09IDApIHsKICAgICAgICAgLy8gV2UgYXJl
IGEgYmxvY2sgd2l0aCBubyBib3JkZXIgYW5kIHBhZGRpbmcgYW5kIGEgY29tcHV0ZWQgaGVpZ2h0
CiAgICAgICAgIC8vIG9mIDAuICBUaGUgQ1NTIHNwZWMgc3RhdGVzIHRoYXQgemVyby1oZWlnaHQg
YmxvY2tzIGNvbGxhcHNlIHRoZWlyIG1hcmdpbnMKICAgICAgICAgLy8gdG9nZXRoZXIuCkBAIC0y
ODYsMTUgKzI3NCwxNSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29s
CiAgICAgfQogCiAgICAgLy8gQWx3YXlzIGVuc3VyZSBvdXIgb3ZlcmZsb3cgd2lkdGggaXMgYXQg
bGVhc3QgYXMgbGFyZ2UgYXMgb3VyIHdpZHRoLgotICAgIGlmIChtX292ZXJmbG93V2lkdGggPCBt
X3dpZHRoKQotICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtX3dpZHRoOworICAgIGlmIChtX292
ZXJmbG93V2lkdGggPCB3aWR0aCgpKQorICAgICAgICBtX292ZXJmbG93V2lkdGggPSB3aWR0aCgp
OwogCiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBmb3IgKFNoYWRvd0Rh
dGEqIGJveFNoYWRvdyA9IHN0eWxlKCktPmJveFNoYWRvdygpOyBib3hTaGFkb3c7IGJveFNoYWRv
dyA9IGJveFNoYWRvdy0+bmV4dCkgewogICAgICAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4o
bV9vdmVyZmxvd0xlZnQsIGJveFNoYWRvdy0+eCAtIGJveFNoYWRvdy0+Ymx1cik7Ci0gICAgICAg
ICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgobV9vdmVyZmxvd1dpZHRoLCBtX3dpZHRoICsgYm94
U2hhZG93LT54ICsgYm94U2hhZG93LT5ibHVyKTsKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0
aCA9IG1heChtX292ZXJmbG93V2lkdGgsIHdpZHRoKCkgKyBib3hTaGFkb3ctPnggKyBib3hTaGFk
b3ctPmJsdXIpOwogICAgICAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9w
LCBib3hTaGFkb3ctPnkgLSBib3hTaGFkb3ctPmJsdXIpOwotICAgICAgICAgICAgbV9vdmVyZmxv
d0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBtX2hlaWdodCArIGJveFNoYWRvdy0+eSAr
IGJveFNoYWRvdy0+Ymx1cik7CisgICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1f
b3ZlcmZsb3dIZWlnaHQsIGhlaWdodCgpICsgYm94U2hhZG93LT55ICsgYm94U2hhZG93LT5ibHVy
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGhhc1JlZmxlY3Rpb24oKSkgewpA
QCAtMzMyLDExICszMjAsMTEgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpv
bnRhbAogICAgIHVuc2lnbmVkIGludCBsb3dlc3RGbGV4R3JvdXAgPSAwOwogICAgIGJvb2wgaGF2
ZUZsZXggPSBmYWxzZTsKICAgICBpbnQgcmVtYWluaW5nU3BhY2UgPSAwOwotICAgIG1fb3ZlcmZs
b3dIZWlnaHQgPSBtX2hlaWdodDsKKyAgICBtX292ZXJmbG93SGVpZ2h0ID0gaGVpZ2h0KCk7CiAK
ICAgICAvLyBUaGUgZmlyc3Qgd2FsayBvdmVyIG91ciBraWRzIGlzIHRvIGZpbmQgb3V0IGlmIHdl
IGhhdmUgYW55IGZsZXhpYmxlIGNoaWxkcmVuLgogICAgIEZsZXhCb3hJdGVyYXRvciBpdGVyYXRv
cih0aGlzKTsKLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOworICAg
IFJlbmRlckJveCogY2hpbGQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7
CiAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGNoaWxkIGZsZXhlcy4KICAgICAgICAg
aWYgKCFjaGlsZC0+aXNQb3NpdGlvbmVkKCkgJiYgY2hpbGQtPnN0eWxlKCktPmJveEZsZXgoKSA+
IDAuMGYpIHsKQEAgLTM2MSw4ICszNDksOCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlv
dXRIb3Jpem9udGFsCiAgICAgLy8gdGhlaXIgcHJlZmVycmVkIHdpZHRocy4gIFRoZSBzZWNvbmQg
cGFzcyBoYW5kbGVzIGZsZXhpbmcgdGhlIGNoaWxkcmVuLgogICAgIGRvIHsKICAgICAgICAgLy8g
UmVzZXQgb3VyIGhlaWdodC4KLSAgICAgICAgbV9oZWlnaHQgPSB5UG9zOwotICAgICAgICBtX292
ZXJmbG93SGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAgIHNldEhlaWdodCh5UG9zKTsKKyAgICAg
ICAgbV9vdmVyZmxvd0hlaWdodCA9IGhlaWdodCgpOwogICAgICAgICB4UG9zID0gYm9yZGVyTGVm
dCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgLy8gT3VyIGZp
cnN0IHBhc3MgaXMgZG9uZSB3aXRob3V0IGZsZXhpbmcuICBXZSBzaW1wbHkgbGF5IHRoZSBjaGls
ZHJlbgpAQCAtNDAwLDI4ICszODgsMjggQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0
SG9yaXpvbnRhbAogICAgICAgICAgICAgICAgIG1heERlc2NlbnQgPSBtYXgobWF4RGVzY2VudCwg
ZGVzY2VudCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gTm93IHVwZGF0
ZSBvdXIgaGVpZ2h0LgotICAgICAgICAgICAgICAgIG1faGVpZ2h0ID0gbWF4KHlQb3MgKyBtYXhB
c2NlbnQgKyBtYXhEZXNjZW50LCBtX2hlaWdodCk7CisgICAgICAgICAgICAgICAgc2V0SGVpZ2h0
KG1heCh5UG9zICsgbWF4QXNjZW50ICsgbWF4RGVzY2VudCwgaGVpZ2h0KCkpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2hlaWdodCA9IG1heCht
X2hlaWdodCwgeVBvcyArIGNoaWxkLT5tYXJnaW5Ub3AoKSArIGNoaWxkLT5oZWlnaHQoKSArIGNo
aWxkLT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAgICAgICAgICAgc2V0SGVpZ2h0KG1heChoZWln
aHQoKSwgeVBvcyArIGNoaWxkLT5tYXJnaW5Ub3AoKSArIGNoaWxkLT5oZWlnaHQoKSArIGNoaWxk
LT5tYXJnaW5Cb3R0b20oKSkpOwogCiAgICAgICAgICAgICBjaGlsZCA9IGl0ZXJhdG9yLm5leHQo
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFpdGVyYXRvci5maXJzdCgpICYm
IGhhc0xpbmVJZkVtcHR5KCkpCi0gICAgICAgICAgICBtX2hlaWdodCArPSBsaW5lSGVpZ2h0KHRy
dWUsIHRydWUpOworICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbGluZUhlaWdodCh0
cnVlLCB0cnVlKSk7CiAgICAgICAgIAotICAgICAgICBtX2hlaWdodCArPSB0b0FkZDsKKyAgICAg
ICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgdG9BZGQpOwogCiAgICAgICAgIC8vIEFsd2F5cyBtYWtl
IHN1cmUgb3VyIG92ZXJmbG93aGVpZ2h0IGlzIGF0IGxlYXN0IG91ciBoZWlnaHQuCi0gICAgICAg
IGlmIChtX292ZXJmbG93SGVpZ2h0IDwgbV9oZWlnaHQpCi0gICAgICAgICAgICBtX292ZXJmbG93
SGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAgIGlmIChtX292ZXJmbG93SGVpZ2h0IDwgaGVpZ2h0
KCkpCisgICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgICAgIAot
ICAgICAgICBvbGRIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgb2xkSGVpZ2h0ID0gaGVpZ2h0
KCk7CiAgICAgICAgIGNhbGNIZWlnaHQoKTsKIAogICAgICAgICByZWxheW91dENoaWxkcmVuID0g
ZmFsc2U7Ci0gICAgICAgIGlmIChvbGRIZWlnaHQgIT0gbV9oZWlnaHQpCisgICAgICAgIGlmIChv
bGRIZWlnaHQgIT0gaGVpZ2h0KCkpCiAgICAgICAgICAgICBoZWlnaHRTcGVjaWZpZWQgPSB0cnVl
OwogICAgICAgICAKICAgICAgICAgLy8gTm93IHRoYXQgb3VyIGhlaWdodCBpcyBhY3R1YWxseSBr
bm93biwgd2UgY2FuIHBsYWNlIG91ciBib3hlcy4KQEAgLTQ3OCw3ICs0NjYsNyBAQCB2b2lkIFJl
bmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsCiAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyQmxvY2sqPihjaGlsZCktPmFkZFZpc3VhbE92ZXJmbG93KHN0YXRpY19jYXN0
PFJlbmRlckJsb2NrKj4oY2hpbGQpLT5mbG9hdFJlY3QoKSk7CiAKICAgICAgICAgICAgIG1fb3Zl
cmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgY2hpbGRZICsgY2hpbGQtPm92ZXJm
bG93SGVpZ2h0KGZhbHNlKSk7Ci0gICAgICAgICAgICBtX292ZXJmbG93VG9wID0gbWluKG1fb3Zl
cmZsb3dUb3AsIGNoaWxkLT55UG9zKCkgKyBjaGlsZC0+b3ZlcmZsb3dUb3AoZmFsc2UpKTsKKyAg
ICAgICAgICAgIG1fb3ZlcmZsb3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgY2hpbGQtPnkoKSAr
IGNoaWxkLT5vdmVyZmxvd1RvcChmYWxzZSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB4
UG9zICs9IGNoaWxkLT53aWR0aCgpICsgY2hpbGQtPm1hcmdpblJpZ2h0KCk7CiAgICAgCkBAIC02
MTksNyArNjA3LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbAog
ICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdTcGFjZSAtPSAocmVtYWluaW5nU3BhY2UvdG90
YWxDaGlsZHJlbik7CiAgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hpbGRyZW4tLTsKIAotICAg
ICAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGlsZC0+eFBvcygpK29mZnNldCwg
Y2hpbGQtPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNo
aWxkLT54KCkrb2Zmc2V0LCBjaGlsZC0+eSgpKTsKICAgICAgICAgICAgICAgICAgICAgY2hpbGQg
PSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAt
NjM0LDcgKzYyMiw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWwK
ICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBw
bGFjZUNoaWxkKGNoaWxkLCBjaGlsZC0+eFBvcygpK29mZnNldCwgY2hpbGQtPnlQb3MoKSk7Cisg
ICAgICAgICAgICAgICAgcGxhY2VDaGlsZChjaGlsZCwgY2hpbGQtPngoKStvZmZzZXQsIGNoaWxk
LT55KCkpOwogICAgICAgICAgICAgICAgIGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC02NDYsMjAgKzYzNCwyMCBAQCB2b2lkIFJlbmRlckZsZXhp
YmxlQm94OjpsYXlvdXRIb3Jpem9udGFsCiAgICAgfQogICAgIAogICAgIGlmIChjaGlsZCkgewot
ICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1pbihjaGlsZC0+eFBvcygpICsgY2hpbGQtPm92ZXJm
bG93TGVmdChmYWxzZSksIG1fb3ZlcmZsb3dMZWZ0KTsKKyAgICAgICAgbV9vdmVyZmxvd0xlZnQg
PSBtaW4oY2hpbGQtPngoKSArIGNoaWxkLT5vdmVyZmxvd0xlZnQoZmFsc2UpLCBtX292ZXJmbG93
TGVmdCk7CiAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQgPSBjaGlsZDsKKyAgICAg
ICAgUmVuZGVyQm94KiBsYXN0Q2hpbGQgPSBjaGlsZDsKICAgICAgICAgd2hpbGUgKChjaGlsZCA9
IGl0ZXJhdG9yLm5leHQoKSkpIHsKICAgICAgICAgICAgIGlmICghY2hpbGQtPmlzUG9zaXRpb25l
ZCgpKQogICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9IGNoaWxkOwogICAgICAgICB9Ci0gICAg
ICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChsYXN0Q2hpbGQtPnhQb3MoKSArIGxhc3RDaGlsZC0+
b3ZlcmZsb3dXaWR0aChmYWxzZSksIG1fb3ZlcmZsb3dXaWR0aCk7CisgICAgICAgIG1fb3ZlcmZs
b3dXaWR0aCA9IG1heChsYXN0Q2hpbGQtPngoKSArIGxhc3RDaGlsZC0+b3ZlcmZsb3dXaWR0aChm
YWxzZSksIG1fb3ZlcmZsb3dXaWR0aCk7CiAgICAgfQogICAgIAogICAgIC8vIFNvIHRoYXQgdGhl
IGNhbGNIZWlnaHQgaW4gbGF5b3V0QmxvY2soKSBrbm93cyB0byByZWxheW91dCBwb3NpdGlvbmVk
IG9iamVjdHMgYmVjYXVzZSBvZgogICAgIC8vIGEgaGVpZ2h0IGNoYW5nZSwgd2UgcmV2ZXJ0IG91
ciBoZWlnaHQgYmFjayB0byB0aGUgaW50cmluc2ljIGhlaWdodCBiZWZvcmUgcmV0dXJuaW5nLgog
ICAgIGlmIChoZWlnaHRTcGVjaWZpZWQpCi0gICAgICAgIG1faGVpZ2h0ID0gb2xkSGVpZ2h0Owor
ICAgICAgICBzZXRIZWlnaHQob2xkSGVpZ2h0KTsKIH0KIAogdm9pZCBSZW5kZXJGbGV4aWJsZUJv
eDo6bGF5b3V0VmVydGljYWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKQpAQCAtNjY3LDcgKzY1
NSw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICBpbnQg
eFBvcyA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IHlQb3MgPSBib3Jk
ZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKICAgICBpZiggc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0g
UlRMICkKLSAgICAgICAgeFBvcyA9IG1fd2lkdGggLSBwYWRkaW5nUmlnaHQoKSAtIGJvcmRlclJp
Z2h0KCk7CisgICAgICAgIHhQb3MgPSB3aWR0aCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSBib3JkZXJS
aWdodCgpOwogICAgIGludCB0b0FkZCA9IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgp
ICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwogICAgIGJvb2wgaGVpZ2h0U3BlY2lmaWVk
ID0gZmFsc2U7CiAgICAgaW50IG9sZEhlaWdodCA9IDA7CkBAIC02NzksNyArNjY3LDcgQEAgdm9p
ZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwogICAgIAogICAgIC8vIFRoZSBm
aXJzdCB3YWxrIG92ZXIgb3VyIGtpZHMgaXMgdG8gZmluZCBvdXQgaWYgd2UgaGF2ZSBhbnkgZmxl
eGlibGUgY2hpbGRyZW4uCiAgICAgRmxleEJveEl0ZXJhdG9yIGl0ZXJhdG9yKHRoaXMpOwotICAg
IFJlbmRlck9iamVjdCAqY2hpbGQgPSBpdGVyYXRvci5uZXh0KCk7CisgICAgUmVuZGVyQm94KiBj
aGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIHRoaXMgY2hpbGQgZmxleGVzLgogICAgICAgICBpZiAoIWNoaWxkLT5p
c1Bvc2l0aW9uZWQoKSAmJiBjaGlsZC0+c3R5bGUoKS0+Ym94RmxleCgpID4gMC4wZikgewpAQCAt
ODA4LDkgKzc5Niw5IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8K
ICAgICAvLyBPdXIgZmlyc3QgcGFzcyBpcyBkb25lIHdpdGhvdXQgZmxleGluZy4gIFdlIHNpbXBs
eSBsYXkgdGhlIGNoaWxkcmVuCiAgICAgLy8gb3V0IHdpdGhpbiB0aGUgYm94LgogICAgIGRvIHsK
LSAgICAgICAgbV9oZWlnaHQgPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKLSAgICAgICAg
aW50IG1pbkhlaWdodCA9IG1faGVpZ2h0ICsgdG9BZGQ7Ci0gICAgICAgIG1fb3ZlcmZsb3dIZWln
aHQgPSBtX2hlaWdodDsKKyAgICAgICAgc2V0SGVpZ2h0KGJvcmRlclRvcCgpICsgcGFkZGluZ1Rv
cCgpKTsKKyAgICAgICAgaW50IG1pbkhlaWdodCA9IGhlaWdodCgpICsgdG9BZGQ7CisgICAgICAg
IG1fb3ZlcmZsb3dIZWlnaHQgPSBoZWlnaHQoKTsKIAogICAgICAgICBjaGlsZCA9IGl0ZXJhdG9y
LmZpcnN0KCk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewpAQCAtODI4LDcgKzgxNiw3IEBAIHZv
aWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoaWxkLT5zZXRTdGF0aWNYKGJvcmRlclJpZ2h0KCkrcGFkZGluZ1JpZ2h0KCkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmhhc1N0YXRpY1ko
KSkKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnNldFN0YXRpY1kobV9oZWlnaHQpOworICAg
ICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0U3RhdGljWShoZWlnaHQoKSk7CiAgICAgICAgICAg
ICAgICAgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9IApAQCAtODM3LDcgKzgyNSw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVC
b3g6OmxheW91dFZlcnRpY2FsQm8KICAgICAgICAgICAgIGNoaWxkLT5jYWxjVmVydGljYWxNYXJn
aW5zKCk7CiAgICAgCiAgICAgICAgICAgICAvLyBBZGQgaW4gdGhlIGNoaWxkJ3MgbWFyZ2luVG9w
IHRvIG91ciBoZWlnaHQuCi0gICAgICAgICAgICBtX2hlaWdodCArPSBjaGlsZC0+bWFyZ2luVG9w
KCk7CisgICAgICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBjaGlsZC0+bWFyZ2luVG9wKCkp
OwogICAgIAogICAgICAgICAgICAgLy8gTm93IGRvIGEgbGF5b3V0LgogICAgICAgICAgICAgY2hp
bGQtPmxheW91dElmTmVlZGVkKCk7CkBAIC04NjQsMzkgKzg1MiwzOSBAQCB2b2lkIFJlbmRlckZs
ZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAg
ICAgICAvLyBQbGFjZSB0aGUgY2hpbGQuCi0gICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBj
aGlsZFgsIG1faGVpZ2h0KTsKLSAgICAgICAgICAgIG1faGVpZ2h0ICs9IGNoaWxkLT5oZWlnaHQo
KSArIGNoaWxkLT5tYXJnaW5Cb3R0b20oKTsKKyAgICAgICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQs
IGNoaWxkWCwgaGVpZ2h0KCkpOworICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgY2hp
bGQtPmhlaWdodCgpICsgY2hpbGQtPm1hcmdpbkJvdHRvbSgpKTsKICAgICAKICAgICAgICAgICAg
IGlmIChjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlckJsb2NrKj4oY2hpbGQpLT5hZGRWaXN1YWxPdmVyZmxvdyhzdGF0aWNfY2FzdDxSZW5k
ZXJCbG9jayo+KGNoaWxkKS0+ZmxvYXRSZWN0KCkpOwogCiAgICAgICAgICAgICAvLyBTZWUgaWYg
dGhpcyBjaGlsZCBoYXMgbWFkZSBvdXIgb3ZlcmZsb3cgbmVlZCB0byBncm93LgotICAgICAgICAg
ICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KGNoaWxkLT54UG9zKCkgKyBjaGlsZC0+b3ZlcmZsb3dX
aWR0aChmYWxzZSksIG1fb3ZlcmZsb3dXaWR0aCk7Ci0gICAgICAgICAgICBtX292ZXJmbG93TGVm
dCA9IG1pbihjaGlsZC0+eFBvcygpICsgY2hpbGQtPm92ZXJmbG93TGVmdChmYWxzZSksIG1fb3Zl
cmZsb3dMZWZ0KTsKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChjaGlsZC0+eCgp
ICsgY2hpbGQtPm92ZXJmbG93V2lkdGgoZmFsc2UpLCBtX292ZXJmbG93V2lkdGgpOworICAgICAg
ICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4oY2hpbGQtPngoKSArIGNoaWxkLT5vdmVyZmxvd0xl
ZnQoZmFsc2UpLCBtX292ZXJmbG93TGVmdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNo
aWxkID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICB9CiAKLSAgICAgICAgeVBvcyA9IG1faGVp
Z2h0OworICAgICAgICB5UG9zID0gaGVpZ2h0KCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWl0
ZXJhdG9yLmZpcnN0KCkgJiYgaGFzTGluZUlmRW1wdHkoKSkKLSAgICAgICAgICAgIG1faGVpZ2h0
ICs9IGxpbmVIZWlnaHQodHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0
KCkgKyBsaW5lSGVpZ2h0KHRydWUsIHRydWUpKTsKICAgICAKLSAgICAgICAgbV9oZWlnaHQgKz0g
dG9BZGQ7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIHRvQWRkKTsKIAogICAgICAgICAv
LyBOZWdhdGl2ZSBtYXJnaW5zIGNhbiBjYXVzZSBvdXIgaGVpZ2h0IHRvIHNocmluayBiZWxvdyBv
dXIgbWluaW1hbCBoZWlnaHQgKGJvcmRlci9wYWRkaW5nKS4KICAgICAgICAgLy8gSWYgdGhpcyBo
YXBwZW5zLCBlbnN1cmUgdGhhdCB0aGUgY29tcHV0ZWQgaGVpZ2h0IGlzIGluY3JlYXNlZCB0byB0
aGUgbWluaW1hbCBoZWlnaHQuCi0gICAgICAgIGlmIChtX2hlaWdodCA8IG1pbkhlaWdodCkKLSAg
ICAgICAgICAgIG1faGVpZ2h0ID0gbWluSGVpZ2h0OworICAgICAgICBpZiAoaGVpZ2h0KCkgPCBt
aW5IZWlnaHQpCisgICAgICAgICAgICBzZXRIZWlnaHQobWluSGVpZ2h0KTsKIAogICAgICAgICAv
LyBBbHdheXMgbWFrZSBzdXJlIG91ciBvdmVyZmxvd2hlaWdodCBpcyBhdCBsZWFzdCBvdXIgaGVp
Z2h0LgotICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA8IG1faGVpZ2h0KQotICAgICAgICAg
ICAgbV9vdmVyZmxvd0hlaWdodCA9IG1faGVpZ2h0OworICAgICAgICBpZiAobV9vdmVyZmxvd0hl
aWdodCA8IGhlaWdodCgpKQorICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IGhlaWdodCgp
OwogCiAgICAgICAgIC8vIE5vdyB3ZSBoYXZlIHRvIGNhbGMgb3VyIGhlaWdodCwgc28gd2Uga25v
dyBob3cgbXVjaCBzcGFjZSB3ZSBoYXZlIHJlbWFpbmluZy4KLSAgICAgICAgb2xkSGVpZ2h0ID0g
bV9oZWlnaHQ7CisgICAgICAgIG9sZEhlaWdodCA9IGhlaWdodCgpOwogICAgICAgICBjYWxjSGVp
Z2h0KCk7Ci0gICAgICAgIGlmIChvbGRIZWlnaHQgIT0gbV9oZWlnaHQpCisgICAgICAgIGlmIChv
bGRIZWlnaHQgIT0gaGVpZ2h0KCkpCiAgICAgICAgICAgICBoZWlnaHRTcGVjaWZpZWQgPSB0cnVl
OwogCiAgICAgICAgIHJlbWFpbmluZ1NwYWNlID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkg
KyBjb250ZW50SGVpZ2h0KCkgLSB5UG9zOwpAQCAtMTAyOCw3ICsxMDE2LDcgQEAgdm9pZCBSZW5k
ZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwogICAgICAgICAgICAgICAgICAgICBvZmZz
ZXQgKz0gcmVtYWluaW5nU3BhY2UvdG90YWxDaGlsZHJlbjsKICAgICAgICAgICAgICAgICAgICAg
cmVtYWluaW5nU3BhY2UgLT0gKHJlbWFpbmluZ1NwYWNlL3RvdGFsQ2hpbGRyZW4pOwogICAgICAg
ICAgICAgICAgICAgICB0b3RhbENoaWxkcmVuLS07Ci0gICAgICAgICAgICAgICAgICAgIHBsYWNl
Q2hpbGQoY2hpbGQsIGNoaWxkLT54UG9zKCksIGNoaWxkLT55UG9zKCkrb2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgcGxhY2VDaGlsZChjaGlsZCwgY2hpbGQtPngoKSwgY2hpbGQtPnkoKStv
ZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMDQzLDcgKzEwMzEsNyBAQCB2b2lk
IFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAgICAgICAgICAgICAgICAg
IGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGxhY2VDaGlsZChjaGlsZCwgY2hp
bGQtPnhQb3MoKSwgY2hpbGQtPnlQb3MoKStvZmZzZXQpOworICAgICAgICAgICAgICAgIHBsYWNl
Q2hpbGQoY2hpbGQsIGNoaWxkLT54KCksIGNoaWxkLT55KCkrb2Zmc2V0KTsKICAgICAgICAgICAg
ICAgICBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMTA1NSwyOCArMTA0MywyOCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0
aWNhbEJvCiAgICAgfQogICAgIAogICAgIGlmIChjaGlsZCkgewotICAgICAgICBtX292ZXJmbG93
VG9wID0gbWluKGNoaWxkLT55UG9zKCkgKyBjaGlsZC0+b3ZlcmZsb3dUb3AoZmFsc2UpLCBtX292
ZXJmbG93VG9wKTsKKyAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihjaGlsZC0+eSgpICsgY2hp
bGQtPm92ZXJmbG93VG9wKGZhbHNlKSwgbV9vdmVyZmxvd1RvcCk7CiAKLSAgICAgICAgUmVuZGVy
T2JqZWN0KiBsYXN0Q2hpbGQgPSBjaGlsZDsKKyAgICAgICAgUmVuZGVyQm94KiBsYXN0Q2hpbGQg
PSBjaGlsZDsKICAgICAgICAgd2hpbGUgKChjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkpIHsKICAg
ICAgICAgICAgIGlmICghY2hpbGQtPmlzUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIGxh
c3RDaGlsZCA9IGNoaWxkOwogICAgICAgICB9Ci0gICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBt
YXgobGFzdENoaWxkLT55UG9zKCkgKyBsYXN0Q2hpbGQtPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSwg
bV9vdmVyZmxvd0hlaWdodCk7CisgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobGFzdENo
aWxkLT55KCkgKyBsYXN0Q2hpbGQtPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSwgbV9vdmVyZmxvd0hl
aWdodCk7CiAgICAgfQogCiAgICAgLy8gU28gdGhhdCB0aGUgY2FsY0hlaWdodCBpbiBsYXlvdXRC
bG9jaygpIGtub3dzIHRvIHJlbGF5b3V0IHBvc2l0aW9uZWQgb2JqZWN0cyBiZWNhdXNlIG9mCiAg
ICAgLy8gYSBoZWlnaHQgY2hhbmdlLCB3ZSByZXZlcnQgb3VyIGhlaWdodCBiYWNrIHRvIHRoZSBp
bnRyaW5zaWMgaGVpZ2h0IGJlZm9yZSByZXR1cm5pbmcuCiAgICAgaWYgKGhlaWdodFNwZWNpZmll
ZCkKLSAgICAgICAgbV9oZWlnaHQgPSBvbGRIZWlnaHQ7IAorICAgICAgICBzZXRIZWlnaHQob2xk
SGVpZ2h0KTsgCiB9CiAKLXZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnBsYWNlQ2hpbGQoUmVuZGVy
T2JqZWN0KiBjaGlsZCwgaW50IHgsIGludCB5KQordm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6cGxh
Y2VDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgSW50UmVjdCBv
bGRSZWN0KGNoaWxkLT54UG9zKCksIGNoaWxkLT55UG9zKCkgLCBjaGlsZC0+d2lkdGgoKSwgY2hp
bGQtPmhlaWdodCgpKTsKKyAgICBJbnRSZWN0IG9sZFJlY3QoY2hpbGQtPngoKSwgY2hpbGQtPnko
KSAsIGNoaWxkLT53aWR0aCgpLCBjaGlsZC0+aGVpZ2h0KCkpOwogCiAgICAgLy8gUGxhY2UgdGhl
IGNoaWxkLgotICAgIGNoaWxkLT5zZXRQb3MoeCwgeSk7CisgICAgY2hpbGQtPnNldExvY2F0aW9u
KHgsIHkpOwogCiAgICAgLy8gSWYgdGhlIGNoaWxkIG1vdmVkLCB3ZSBoYXZlIHRvIHJlcGFpbnQg
aXQgYXMgd2VsbCBhcyBhbnkgZmxvYXRpbmcvcG9zaXRpb25lZAogICAgIC8vIGRlc2NlbmRhbnRz
LiAgQW4gZXhjZXB0aW9uIGlzIGlmIHdlIG5lZWQgYSBsYXlvdXQuICBJbiB0aGlzIGNhc2UsIHdl
IGtub3cgd2UncmUgZ29pbmcgdG8KQEAgLTEwODUsNyArMTA3Myw3IEBAIHZvaWQgUmVuZGVyRmxl
eGlibGVCb3g6OnBsYWNlQ2hpbGQoUmVuZGUKICAgICAgICAgY2hpbGQtPnJlcGFpbnREdXJpbmdM
YXlvdXRJZk1vdmVkKG9sZFJlY3QpOwogfQogCi1pbnQgUmVuZGVyRmxleGlibGVCb3g6OmFsbG93
ZWRDaGlsZEZsZXgoUmVuZGVyT2JqZWN0KiBjaGlsZCwgYm9vbCBleHBhbmRpbmcsIHVuc2lnbmVk
IGludCBncm91cCkKK2ludCBSZW5kZXJGbGV4aWJsZUJveDo6YWxsb3dlZENoaWxkRmxleChSZW5k
ZXJCb3gqIGNoaWxkLCBib29sIGV4cGFuZGluZywgdW5zaWduZWQgaW50IGdyb3VwKQogewogICAg
IGlmIChjaGlsZC0+aXNQb3NpdGlvbmVkKCkgfHwgY2hpbGQtPnN0eWxlKCktPmJveEZsZXgoKSA9
PSAwLjBmIHx8IGNoaWxkLT5zdHlsZSgpLT5ib3hGbGV4R3JvdXAoKSAhPSBncm91cCkKICAgICAg
ICAgcmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHJl
dmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNGbGV4aW5nQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2ZsZXhpbmdDaGlsZHJlbjsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc1N0cmV0Y2hpbmdDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyZXRjaGluZ0NoaWxkcmVuOyB9CiAKLSAgICB2b2lkIHBsYWNlQ2hpbGQoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCwgaW50IHgsIGludCB5KTsKKyAgICB2b2lkIHBsYWNlQ2hpbGQoUmVuZGVyQm94
KiBjaGlsZCwgaW50IHgsIGludCB5KTsKIAogcHJvdGVjdGVkOgotICAgIGludCBhbGxvd2VkQ2hp
bGRGbGV4KFJlbmRlck9iamVjdCogY2hpbGQsIGJvb2wgZXhwYW5kaW5nLCB1bnNpZ25lZCBncm91
cCk7CisgICAgaW50IGFsbG93ZWRDaGlsZEZsZXgoUmVuZGVyQm94KiBjaGlsZCwgYm9vbCBleHBh
bmRpbmcsIHVuc2lnbmVkIGdyb3VwKTsKIAogICAgIGJvb2wgaGFzTXVsdGlwbGVMaW5lcygpIGNv
bnN0IHsgcmV0dXJuIHN0eWxlKCktPmJveExpbmVzKCkgPT0gTVVMVElQTEU7IH0KICAgICBib29s
IGlzVmVydGljYWwoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3hPcmllbnQoKSA9PSBWRVJU
SUNBTDsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHJldmlzaW9uIDQwMDc1KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
MCw3ICs1MDAsNyBAQCBJbnRSZWN0IFJlbmRlckZsb3c6OmFic29sdXRlQ2xpcHBlZE92ZXJmCiAg
ICAgICAgIC8vIE5vdyBpbnZhbGlkYXRlIGEgcmVjdGFuZ2xlLgogICAgICAgICBpbnQgb3cgPSBz
dHlsZSgpID8gc3R5bGUoKS0+b3V0bGluZVNpemUoKSA6IDA7CiAgICAgICAgIGlmIChpc0NvbXBh
Y3QoKSkKLSAgICAgICAgICAgIGxlZnQgLT0gbV94OworICAgICAgICAgICAgbGVmdCAtPSB4KCk7
CiAgICAgICAgIAogICAgICAgICAvLyBXZSBuZWVkIHRvIGFkZCBpbiB0aGUgcmVsYXRpdmUgcG9z
aXRpb24gb2Zmc2V0cyBvZiBhbnkgaW5saW5lcyAoaW5jbHVkaW5nIHVzKSB1cCB0byBvdXIKICAg
ICAgICAgLy8gY29udGFpbmluZyBibG9jay4KQEAgLTU1Miw5ICs1NTIsOSBAQCBpbnQgUmVuZGVy
Rmxvdzo6bG93ZXN0UG9zaXRpb24oYm9vbCBpbmNsCiB7CiAgICAgQVNTRVJUKCFpc0lubGluZUZs
b3coKSk7CiAgICAgaWYgKCFpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciAmJiAoaGFzT3ZlcmZsb3dD
bGlwKCkgfHwgaGFzQ29udHJvbENsaXAoKSkpCi0gICAgICAgIHJldHVybiBpbmNsdWRlU2VsZiAm
JiBtX3dpZHRoID4gMCA/IG92ZXJmbG93SGVpZ2h0KGZhbHNlKSA6IDA7CisgICAgICAgIHJldHVy
biBpbmNsdWRlU2VsZiAmJiB3aWR0aCgpID4gMCA/IG92ZXJmbG93SGVpZ2h0KGZhbHNlKSA6IDA7
CiAKLSAgICBpbnQgYm90dG9tID0gaW5jbHVkZVNlbGYgJiYgbV93aWR0aCA+IDAgPyBtX2hlaWdo
dCA6IDA7CisgICAgaW50IGJvdHRvbSA9IGluY2x1ZGVTZWxmICYmIHdpZHRoKCkgPiAwID8gaGVp
Z2h0KCkgOiAwOwogICAgIGlmICghaGFzQ29sdW1ucygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBD
b21lIHVwIHdpdGggYSB3YXkgdG8gdXNlIHRoZSBsYXllciB0cmVlIHRvIGF2b2lkIHZpc2l0aW5n
IGFsbCB0aGUga2lkcy4KICAgICAgICAgLy8gRm9yIG5vdywgd2UgaGF2ZSB0byBkZXNjZW5kIGlu
dG8gYWxsIHRoZSBjaGlsZHJlbiwgc2luY2Ugd2UgbWF5IGhhdmUgYSBodWdlIGFicyBkaXYgaW5z
aWRlCkBAIC01NjIsNyArNTYyLDcgQEAgaW50IFJlbmRlckZsb3c6Omxvd2VzdFBvc2l0aW9uKGJv
b2wgaW5jbAogICAgICAgICAvLyB0aGUgYWJzIGRpdi4KICAgICAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
ICAgICBpZiAoIWMtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYy0+aXNUZXh0KCkgJiYg
IWMtPmlzSW5saW5lRmxvdygpKQotICAgICAgICAgICAgICAgIGJvdHRvbSA9IG1heChib3R0b20s
IGMtPnlQb3MoKSArIGMtPmxvd2VzdFBvc2l0aW9uKGZhbHNlKSk7CisgICAgICAgICAgICAgICAg
Ym90dG9tID0gbWF4KGJvdHRvbSwgc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4oYyktPnkoKSArIGMt
Pmxvd2VzdFBvc2l0aW9uKGZhbHNlKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU3NiwxNyAr
NTc2LDE3IEBAIGludCBSZW5kZXJGbG93OjpyaWdodG1vc3RQb3NpdGlvbihib29sIGkKIHsKICAg
ICBBU1NFUlQoIWlzSW5saW5lRmxvdygpKTsKICAgICBpZiAoIWluY2x1ZGVPdmVyZmxvd0ludGVy
aW9yICYmIChoYXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNDb250cm9sQ2xpcCgpKSkKLSAgICAgICAg
cmV0dXJuIGluY2x1ZGVTZWxmICYmIG1faGVpZ2h0ID4gMCA/IG92ZXJmbG93V2lkdGgoZmFsc2Up
IDogMDsKKyAgICAgICAgcmV0dXJuIGluY2x1ZGVTZWxmICYmIGhlaWdodCgpID4gMCA/IG92ZXJm
bG93V2lkdGgoZmFsc2UpIDogMDsKIAotICAgIGludCByaWdodCA9IGluY2x1ZGVTZWxmICYmIG1f
aGVpZ2h0ID4gMCA/IG1fd2lkdGggOiAwOworICAgIGludCByaWdodCA9IGluY2x1ZGVTZWxmICYm
IGhlaWdodCgpID4gMCA/IHdpZHRoKCkgOiAwOwogICAgIGlmICghaGFzQ29sdW1ucygpKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSB3YXkgdG8gdXNlIHRoZSBsYXllciB0cmVl
IHRvIGF2b2lkIHZpc2l0aW5nIGFsbCB0aGUga2lkcy4KICAgICAgICAgLy8gRm9yIG5vdywgd2Ug
aGF2ZSB0byBkZXNjZW5kIGludG8gYWxsIHRoZSBjaGlsZHJlbiwgc2luY2Ugd2UgbWF5IGhhdmUg
YSBodWdlIGFicyBkaXYgaW5zaWRlCiAgICAgICAgIC8vIGEgdGlueSByZWwgZGl2IGJ1cmllZCBz
b21ld2hlcmUgZGVlcCBpbiBvdXIgY2hpbGQgdHJlZS4gIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRv
IGdldCB0bwogICAgICAgICAvLyB0aGUgYWJzIGRpdi4KICAgICAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAg
ICAgICBpZiAoIWMtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYy0+aXNUZXh0KCkgJiYg
IWMtPmlzSW5saW5lRmxvdygpKQotICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBj
LT54UG9zKCkgKyBjLT5yaWdodG1vc3RQb3NpdGlvbihmYWxzZSkpOworICAgICAgICAgICAgaWYg
KCFjLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgYy0+aXNCb3goKSAmJiAhYy0+aXNJbmxp
bmVGbG93KCkpCisgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHN0YXRpY19jYXN0
PFJlbmRlckJveCo+KGMpLT54KCkgKyBjLT5yaWdodG1vc3RQb3NpdGlvbihmYWxzZSkpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC02MDAsMTcgKzYwMCwxNyBAQCBpbnQgUmVuZGVyRmxvdzo6bGVm
dG1vc3RQb3NpdGlvbihib29sIGluCiB7CiAgICAgQVNTRVJUKCFpc0lubGluZUZsb3coKSk7CiAg
ICAgaWYgKCFpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciAmJiAoaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
aGFzQ29udHJvbENsaXAoKSkpCi0gICAgICAgIHJldHVybiBpbmNsdWRlU2VsZiAmJiBtX2hlaWdo
dCA+IDAgPyBvdmVyZmxvd0xlZnQoZmFsc2UpIDogbV93aWR0aDsKKyAgICAgICAgcmV0dXJuIGlu
Y2x1ZGVTZWxmICYmIGhlaWdodCgpID4gMCA/IG92ZXJmbG93TGVmdChmYWxzZSkgOiB3aWR0aCgp
OwogCi0gICAgaW50IGxlZnQgPSBpbmNsdWRlU2VsZiAmJiBtX2hlaWdodCA+IDAgPyAwIDogbV93
aWR0aDsKKyAgICBpbnQgbGVmdCA9IGluY2x1ZGVTZWxmICYmIGhlaWdodCgpID4gMCA/IDAgOiB3
aWR0aCgpOwogICAgIGlmICghaGFzQ29sdW1ucygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBDb21l
IHVwIHdpdGggYSB3YXkgdG8gdXNlIHRoZSBsYXllciB0cmVlIHRvIGF2b2lkIHZpc2l0aW5nIGFs
bCB0aGUga2lkcy4KICAgICAgICAgLy8gRm9yIG5vdywgd2UgaGF2ZSB0byBkZXNjZW5kIGludG8g
YWxsIHRoZSBjaGlsZHJlbiwgc2luY2Ugd2UgbWF5IGhhdmUgYSBodWdlIGFicyBkaXYgaW5zaWRl
CiAgICAgICAgIC8vIGEgdGlueSByZWwgZGl2IGJ1cmllZCBzb21ld2hlcmUgZGVlcCBpbiBvdXIg
Y2hpbGQgdHJlZS4gIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGdldCB0bwogICAgICAgICAvLyB0
aGUgYWJzIGRpdi4KICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGMgPSBmaXJzdENoaWxkKCk7
IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoIWMtPmlzRmxvYXRp
bmdPclBvc2l0aW9uZWQoKSAmJiAhYy0+aXNUZXh0KCkgJiYgIWMtPmlzSW5saW5lRmxvdygpKQot
ICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgYy0+eFBvcygpICsgYy0+bGVmdG1vc3RQ
b3NpdGlvbihmYWxzZSkpOworICAgICAgICAgICAgaWYgKCFjLT5pc0Zsb2F0aW5nT3JQb3NpdGlv
bmVkKCkgJiYgYy0+aXNCb3goKSAmJiAhYy0+aXNJbmxpbmVGbG93KCkpCisgICAgICAgICAgICAg
ICAgbGVmdCA9IG1pbihsZWZ0LCBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjKS0+eCgpICsgYy0+
bGVmdG1vc3RQb3NpdGlvbihmYWxzZSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02ODcsNyAr
Njg3LDcgQEAgSW50UmVjdCBSZW5kZXJGbG93Ojpsb2NhbENhcmV0UmVjdChJbmxpbgogICAgICAg
ICAgICAgLy8gRklYTUU6IHdoeSBjYWxsIGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoKSB0d2lj
ZSBoZXJlLCB0b28/CiAgICAgICAgICAgICBGbG9hdFBvaW50IGFic1JpZ2h0UG9pbnQgPSBsb2Nh
bFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQobXlSaWdodCwgMCkpOwogCi0gICAgICAg
ICAgICBpbnQgY29udGFpbmVyUmlnaHQgPSBjb250YWluaW5nQmxvY2soKS0+eFBvcygpICsgY29u
dGFpbmluZ0Jsb2NrV2lkdGgoKTsKKyAgICAgICAgICAgIGludCBjb250YWluZXJSaWdodCA9IGNv
bnRhaW5pbmdCbG9jaygpLT54KCkgKyBjb250YWluaW5nQmxvY2tXaWR0aCgpOwogICAgICAgICAg
ICAgRmxvYXRQb2ludCBhYnNDb250YWluZXJQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRl
bnQoRmxvYXRQb2ludChjb250YWluZXJSaWdodCwgMCkpOwogCiAgICAgICAgICAgICAqZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lID0gYWJzQ29udGFpbmVyUG9pbnQueCgpIC0gYWJzUmlnaHRQb2ludC54
KCk7CkBAIC03MTksMjYgKzcxOSwyNyBAQCB2b2lkIFJlbmRlckZsb3c6OmFkZEZvY3VzUmluZ1Jl
Y3RzKEdyYXBoCiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZEZvY3VzUmluZ1JlY3Qo
SW50UmVjdCh0eCArIGN1cnItPnhQb3MoKSwgdHkgKyBjdXJyLT55UG9zKCksIGN1cnItPndpZHRo
KCksIGN1cnItPmhlaWdodCgpKSk7CiAKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIg
PSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKQotICAgICAg
ICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSAmJiAhY3Vyci0+aXNMaXN0TWFya2VyKCkpIHsKKyAg
ICAgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpICYm
IGN1cnItPmlzQm94KCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRp
Y19jYXN0PFJlbmRlckJveCo+KGN1cnIpOwogICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9z
OwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkg
d2l0aCB0cmFuc2Zvcm1zLgogICAgICAgICAgICAgICAgIGlmIChjdXJyLT5sYXllcigpKSAKICAg
ICAgICAgICAgICAgICAgICAgcG9zID0gY3Vyci0+bG9jYWxUb0Fic29sdXRlKCk7CiAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwb3MgPSBGbG9hdFBvaW50KHR4ICsg
Y3Vyci0+eFBvcygpLCB0eSArIGN1cnItPnlQb3MoKSk7Ci0gICAgICAgICAgICAgICAgY3Vyci0+
YWRkRm9jdXNSaW5nUmVjdHMoZ3JhcGhpY3NDb250ZXh0LCBwb3MueCgpLCBwb3MueSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcG9zID0gRmxvYXRQb2ludCh0eCArIGJveC0+eCgpLCB0eSArIGJv
eC0+eSgpKTsKKyAgICAgICAgICAgICAgICBib3gtPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNz
Q29udGV4dCwgcG9zLngoKSwgcG9zLnkoKSk7CiAgICAgICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKGNvbnRpbnVhdGlvbigpKSB7CiAgICAgICAgIGlmIChpc0lubGluZSgpKQogICAgICAgICAg
ICAgY29udGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggLSBjb250YWlu
aW5nQmxvY2soKS0+eFBvcygpICsgY29udGludWF0aW9uKCktPnhQb3MoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAtIGNvbnRhaW5pbmdCbG9jaygp
LT55UG9zKCkgKyBjb250aW51YXRpb24oKS0+eVBvcygpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIGNvbnRhaW5pbmdCbG9jaygpLT54KCkgKyBj
b250aW51YXRpb24oKS0+eCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5IC0gY29udGFpbmluZ0Jsb2NrKCktPnkoKSArIGNvbnRpbnVhdGlvbigpLT55
KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250aW51YXRpb24oKS0+YWRkRm9jdXNS
aW5nUmVjdHMoZ3JhcGhpY3NDb250ZXh0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eCAtIHhQb3MoKSArIGNvbnRpbnVhdGlvbigpLT5jb250YWluaW5n
QmxvY2soKS0+eFBvcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5IC0geVBvcygpICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT55
UG9zKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4
IC0geCgpICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT54KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSB5KCkgKyBjb250aW51
YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPnkoKSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDggKzEy
Niw4IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gQWRkIGluIG91ciBvZmZzZXRzLgotICAgIHR4ICs9IG1feDsKLSAg
ICB0eSArPSBtX3k7CisgICAgdHggKz0geCgpOworICAgIHR5ICs9IG1fZnJhbWVSZWN0LnkoKTsK
IAogICAgIGludCByb3dzID0gZnJhbWVTZXQoKS0+dG90YWxSb3dzKCk7CiAgICAgaW50IGNvbHMg
PSBmcmFtZVNldCgpLT50b3RhbENvbHMoKTsKQEAgLTQ1Nyw4ICs0NTcsOCBAQCB2b2lkIFJlbmRl
ckZyYW1lU2V0OjpsYXlvdXQoKQogICAgICAgICBvbGRCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRP
dmVyZmxvd1JlY3QoKTsKIAogICAgIGlmICghcGFyZW50KCktPmlzRnJhbWVTZXQoKSAmJiAhZG9j
dW1lbnQoKS0+cHJpbnRpbmcoKSkgewotICAgICAgICBtX3dpZHRoID0gdmlldygpLT52aWV3V2lk
dGgoKTsKLSAgICAgICAgbV9oZWlnaHQgPSB2aWV3KCktPnZpZXdIZWlnaHQoKTsKKyAgICAgICAg
c2V0V2lkdGgodmlldygpLT52aWV3V2lkdGgoKSk7CisgICAgICAgIHNldEhlaWdodCh2aWV3KCkt
PnZpZXdIZWlnaHQoKSk7CiAgICAgfQogCiAgICAgc2l6ZV90IGNvbHMgPSBmcmFtZVNldCgpLT50
b3RhbENvbHMoKTsKQEAgLTQ3MCw4ICs0NzAsOCBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlv
dXQoKQogICAgIH0KIAogICAgIGludCBib3JkZXJUaGlja25lc3MgPSBmcmFtZVNldCgpLT5ib3Jk
ZXIoKTsKLSAgICBsYXlPdXRBeGlzKG1fcm93cywgZnJhbWVTZXQoKS0+cm93TGVuZ3RocygpLCBt
X2hlaWdodCAtIChyb3dzIC0gMSkgKiBib3JkZXJUaGlja25lc3MpOwotICAgIGxheU91dEF4aXMo
bV9jb2xzLCBmcmFtZVNldCgpLT5jb2xMZW5ndGhzKCksIG1fd2lkdGggLSAoY29scyAtIDEpICog
Ym9yZGVyVGhpY2tuZXNzKTsKKyAgICBsYXlPdXRBeGlzKG1fcm93cywgZnJhbWVTZXQoKS0+cm93
TGVuZ3RocygpLCBoZWlnaHQoKSAtIChyb3dzIC0gMSkgKiBib3JkZXJUaGlja25lc3MpOworICAg
IGxheU91dEF4aXMobV9jb2xzLCBmcmFtZVNldCgpLT5jb2xMZW5ndGhzKCksIHdpZHRoKCkgLSAo
Y29scyAtIDEpICogYm9yZGVyVGhpY2tuZXNzKTsKIAogICAgIHBvc2l0aW9uRnJhbWVzKCk7CiAK
QEAgLTQ5MSw3ICs0OTEsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlvdXQoKQogCiB2b2lk
IFJlbmRlckZyYW1lU2V0Ojpwb3NpdGlvbkZyYW1lcygpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJv
eCgpOwogICAgIGlmICghY2hpbGQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTA0LDcgKzUwNCw3
IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzKCkKICAgICAgICAgaW50IHhQ
b3MgPSAwOwogICAgICAgICBpbnQgaGVpZ2h0ID0gbV9yb3dzLm1fc2l6ZXNbcl07CiAgICAgICAg
IGZvciAoaW50IGMgPSAwOyBjIDwgY29sczsgYysrKSB7Ci0gICAgICAgICAgICBjaGlsZC0+c2V0
UG9zKHhQb3MsIHlQb3MpOworICAgICAgICAgICAgY2hpbGQtPnNldExvY2F0aW9uKHhQb3MsIHlQ
b3MpOwogICAgICAgICAgICAgaW50IHdpZHRoID0gbV9jb2xzLm1fc2l6ZXNbY107CiAKICAgICAg
ICAgICAgIC8vIGhhcyB0byBiZSByZXNpemVkIGFuZCBpdHNlbGYgcmVzaXplIGl0cyBjb250ZW50
cwpAQCAtNTE3LDcgKzUxNyw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVz
KCkKIAogICAgICAgICAgICAgeFBvcyArPSB3aWR0aCArIGJvcmRlclRoaWNrbmVzczsKIAotICAg
ICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTI1LDcgKzUyNSw3IEBAIHZvaWQg
UmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzKCkKICAgICB9CiAKICAgICAvLyBhbGwgdGhl
IHJlbWFpbmluZyBmcmFtZXMgYXJlIGhpZGRlbiB0byBhdm9pZCB1Z2x5IHNwdXJpb3VzIHVuZmxv
d2VkIGZyYW1lcwotICAgIGZvciAoOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgeworICAgIGZvciAoOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkg
ewogICAgICAgICBjaGlsZC0+c2V0V2lkdGgoMCk7CiAgICAgICAgIGNoaWxkLT5zZXRIZWlnaHQo
MCk7CiAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dChmYWxzZSk7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjgg
KzQzLDI4IEBAIFJlbmRlckhUTUxDYW52YXM6OlJlbmRlckhUTUxDYW52YXMoSFRNTEMKIAogdm9p
ZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSkKIHsKLSAgICBJbnRSZWN0IHJlY3QgPSBjb250ZW50Qm94KCk7CisgICAg
SW50UmVjdCByZWN0ID0gY29udGVudEJveFJlY3QoKTsKICAgICByZWN0Lm1vdmUodHgsIHR5KTsK
ICAgICBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KG5vZGUoKSktPnBhaW50KHBhaW50
SW5mby5jb250ZXh0LCByZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpjYW52YXNT
aXplQ2hhbmdlZCgpCiB7Ci0gICAgSW50U2l6ZSBzaXplID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZh
c0VsZW1lbnQqPihub2RlKCkpLT5zaXplKCk7Ci0gICAgSW50U2l6ZSB6b29tZWRTaXplKHNpemUu
d2lkdGgoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSwgc2l6ZS5oZWlnaHQoKSAqIHN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgSW50U2l6ZSBjYW52YXNTaXplID0gc3RhdGljX2Nh
c3Q8SFRNTENhbnZhc0VsZW1lbnQqPihub2RlKCkpLT5zaXplKCk7CisgICAgSW50U2l6ZSB6b29t
ZWRTaXplKGNhbnZhc1NpemUud2lkdGgoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSwgY2Fu
dmFzU2l6ZS5oZWlnaHQoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAKLSAgICBpZiAo
c2l6ZSA9PSBpbnRyaW5zaWNTaXplKCkpCisgICAgaWYgKGNhbnZhc1NpemUgPT0gaW50cmluc2lj
U2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRJbnRyaW5zaWNTaXplKHNpemUpOwor
ICAgIHNldEludHJpbnNpY1NpemUoY2FudmFzU2l6ZSk7CiAKICAgICBpZiAoIXByZWZXaWR0aHNE
aXJ0eSgpKQogICAgICAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7CiAKLSAgICBJbnRTaXpl
IG9sZFNpemUgPSBJbnRTaXplKG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBJbnRTaXplIG9sZFNp
emUgPSBzaXplKCk7CiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwotICAgIGlm
IChvbGRTaXplID09IEludFNpemUobV93aWR0aCwgbV9oZWlnaHQpKQorICAgIGlmIChvbGRTaXpl
ID09IHNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFzZWxmTmVlZHNMYXlvdXQo
KSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEs
MjEgKzI4MSwyMSBAQCB2b2lkIFJlbmRlckltYWdlOjppbWFnZUNoYW5nZWQoV3JhcHBlZEltCiAg
ICAgICAgIC8vIGxheW91dCB3aGVuIHdlIGdldCBhZGRlZCBpbiB0byB0aGUgcmVuZGVyIHRyZWUg
aGllcmFyY2h5IGxhdGVyLgogICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAg
ICAgICAgIC8vIGxldHMgc2VlIGlmIHdlIG5lZWQgdG8gcmVsYXlvdXQgYXQgYWxsLi4KLSAgICAg
ICAgICAgIGludCBvbGR3aWR0aCA9IG1fd2lkdGg7Ci0gICAgICAgICAgICBpbnQgb2xkaGVpZ2h0
ID0gbV9oZWlnaHQ7CisgICAgICAgICAgICBpbnQgb2xkd2lkdGggPSB3aWR0aCgpOworICAgICAg
ICAgICAgaW50IG9sZGhlaWdodCA9IGhlaWdodCgpOwogICAgICAgICAgICAgaWYgKCFwcmVmV2lk
dGhzRGlydHkoKSkKICAgICAgICAgICAgICAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7CiAg
ICAgICAgICAgICBjYWxjV2lkdGgoKTsKICAgICAgICAgICAgIGNhbGNIZWlnaHQoKTsKIAotICAg
ICAgICAgICAgaWYgKGltYWdlU2l6ZUNoYW5nZWQgfHwgbV93aWR0aCAhPSBvbGR3aWR0aCB8fCBt
X2hlaWdodCAhPSBvbGRoZWlnaHQpIHsKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemVDaGFuZ2Vk
IHx8IHdpZHRoKCkgIT0gb2xkd2lkdGggfHwgaGVpZ2h0KCkgIT0gb2xkaGVpZ2h0KSB7CiAgICAg
ICAgICAgICAgICAgc2hvdWxkUmVwYWludCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmICgh
c2VsZk5lZWRzTGF5b3V0KCkpCiAgICAgICAgICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRy
dWUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX3dpZHRoID0gb2xkd2lkdGg7Ci0g
ICAgICAgICAgICBtX2hlaWdodCA9IG9sZGhlaWdodDsKKyAgICAgICAgICAgIHNldFdpZHRoKG9s
ZHdpZHRoKTsKKyAgICAgICAgICAgIHNldEhlaWdodChvbGRoZWlnaHQpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0zMDQsMTEgKzMwNCwxMSBAQCB2b2lkIFJlbmRlckltYWdlOjppbWFnZUNoYW5n
ZWQoV3JhcHBlZEltCiAgICAgICAgIGlmIChyZWN0KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW1h
Z2UgY2hhbmdlZCByZWN0IGlzIGluIHNvdXJjZSBpbWFnZSBjb29yZGluYXRlcyAocHJlLXpvb21p
bmcpLAogICAgICAgICAgICAgLy8gc28gbWFwIGZyb20gdGhlIGJvdW5kcyBvZiB0aGUgaW1hZ2Ug
dG8gdGhlIGNvbnRlbnRzQm94LgotICAgICAgICAgICAgcmVwYWludFJlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KG1hcFJlY3QoKnJlY3QsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlU2l6ZSgx
LjBmKSksIGNvbnRlbnRCb3goKSkpOworICAgICAgICAgICAgcmVwYWludFJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KG1hcFJlY3QoKnJlY3QsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlU2l6
ZSgxLjBmKSksIGNvbnRlbnRCb3hSZWN0KCkpKTsKICAgICAgICAgICAgIC8vIEd1YXJkIGFnYWlu
c3QgdG9vLWxhcmdlIGNoYW5nZWQgcmVjdHMuCi0gICAgICAgICAgICByZXBhaW50UmVjdC5pbnRl
cnNlY3QoY29udGVudEJveCgpKTsKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChj
b250ZW50Qm94UmVjdCgpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXBhaW50UmVj
dCA9IGNvbnRlbnRCb3goKTsKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gY29udGVudEJveFJl
Y3QoKTsKICAgICAgICAgCiAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwog
ICAgIH0KQEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2Vk
KFBhaW50SW5mCiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIGlmIChzdHlsZSgpLT5oaWdo
bGlnaHQoKSAhPSBudWxsQXRvbSAmJiAhcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR4IC0gbV94LCB0eSAtIG1f
eSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOworICAgICAgICAgICAgcGFpbnRDdXN0b21I
aWdobGlnaHQodHggLSB4KCksIHR5IC0gbV9mcmFtZVJlY3QueSgpLCBzdHlsZSgpLT5oaWdobGln
aHQoKSwgdHJ1ZSk7CiAjZW5kaWYKIAogICAgICAgICBJbnRTaXplIGNvbnRlbnRTaXplKGNXaWR0
aCwgY0hlaWdodCk7CkBAIC00MjQsOCArNDI0LDggQEAgYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VAogICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgX3gsIF95LCBfdHgsIF90eSwgaGl0VGVzdEFjdGlvbik7
CiAKICAgICBpZiAoaW5zaWRlICYmIGVsZW1lbnQoKSkgewotICAgICAgICBpbnQgdHggPSBfdHgg
KyBtX3g7Ci0gICAgICAgIGludCB0eSA9IF90eSArIG1feTsKKyAgICAgICAgaW50IHR4ID0gX3R4
ICsgeCgpOworICAgICAgICBpbnQgdHkgPSBfdHkgKyBtX2ZyYW1lUmVjdC55KCk7CiAgICAgICAg
IAogICAgICAgICBIVE1MTWFwRWxlbWVudCogbWFwID0gaW1hZ2VNYXAoKTsKICAgICAgICAgaWYg
KG1hcCkgewpAQCAtNDkwLDcgKzQ5MCw3IEBAIGJvb2wgUmVuZGVySW1hZ2U6OmlzSGVpZ2h0U3Bl
Y2lmaWVkKCkgY28KIGludCBSZW5kZXJJbWFnZTo6Y2FsY1JlcGxhY2VkV2lkdGgoYm9vbCBpbmNs
dWRlTWF4V2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKGltYWdlSGFzUmVsYXRpdmVXaWR0aCgpKQot
ICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjYiA9IGlzUG9zaXRpb25lZCgpID8gY29udGFpbmVy
KCkgOiBjb250YWluaW5nQmxvY2soKSkKKyAgICAgICAgaWYgKFJlbmRlckJveCogY2IgPSBpc1Bv
c2l0aW9uZWQoKSA/IGNvbnRhaW5lcigpIDogY29udGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgICAg
ICBzZXRJbWFnZUNvbnRhaW5lclNpemUoSW50U2l6ZShjYi0+YXZhaWxhYmxlV2lkdGgoKSwgY2It
PmF2YWlsYWJsZUhlaWdodCgpKSk7CiAKICAgICBpbnQgd2lkdGg7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDE0ICsyOTIsMTYgQEAgdm9p
ZCBSZW5kZXJJbmxpbmU6OmFic29sdXRlUmVjdHMoVmVjdG9yPAogICAgICAgICByZWN0cy5hcHBl
bmQoSW50UmVjdCh0eCArIGN1cnItPnhQb3MoKSwgdHkgKyBjdXJyLT55UG9zKCksIGN1cnItPndp
ZHRoKCksIGN1cnItPmhlaWdodCgpKSk7CiAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9
IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKLSAgICAg
ICAgaWYgKCFjdXJyLT5pc1RleHQoKSkKLSAgICAgICAgICAgIGN1cnItPmFic29sdXRlUmVjdHMo
cmVjdHMsIHR4ICsgY3Vyci0+eFBvcygpLCB0eSArIGN1cnItPnlQb3MoKSwgZmFsc2UpOworICAg
ICAgICBpZiAoY3Vyci0+aXNCb3goKSkgeworICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSBz
dGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjdXJyKTsKKyAgICAgICAgICAgIGN1cnItPmFic29sdXRl
UmVjdHMocmVjdHMsIHR4ICsgYm94LT54KCksIHR5ICsgYm94LT55KCksIGZhbHNlKTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIGlmIChjb250aW51YXRpb24oKSAmJiB0b3BMZXZlbCkKICAgICAg
ICAgY29udGludWF0aW9uKCktPmFic29sdXRlUmVjdHMocmVjdHMsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eCAtIGNvbnRhaW5pbmdCbG9jaygpLT54UG9zKCkgKyBj
b250aW51YXRpb24oKS0+eFBvcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eSAtIGNvbnRhaW5pbmdCbG9jaygpLT55UG9zKCkgKyBjb250aW51YXRpb24oKS0+eVBv
cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIGNvbnRhaW5p
bmdCbG9jaygpLT54KCkgKyBjb250aW51YXRpb24oKS0+eCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eSAtIGNvbnRhaW5pbmdCbG9jaygpLT55KCkgKyBjb250aW51
YXRpb24oKS0+eSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BM
ZXZlbCk7CiB9CiAKQEAgLTMyNCw3ICszMjYsNyBAQCBib29sIFJlbmRlcklubGluZTo6cmVxdWly
ZXNMYXllcigpCiAgICAgcmV0dXJuIGlzUmVsUG9zaXRpb25lZCgpIHx8IGlzVHJhbnNwYXJlbnQo
KSB8fCBoYXNNYXNrKCk7CiB9CiAKLWludCBSZW5kZXJJbmxpbmU6OndpZHRoKCkgY29uc3QKK2lu
dCBSZW5kZXJJbmxpbmU6OmJvdW5kaW5nQm94V2lkdGgoKSBjb25zdAogewogICAgIC8vIFJldHVy
biB0aGUgd2lkdGggb2YgdGhlIG1pbmltYWwgbGVmdCBzaWRlIGFuZCB0aGUgbWF4aW1hbCByaWdo
dCBzaWRlLgogICAgIGludCBsZWZ0U2lkZSA9IDA7CkBAIC0zMzksNyArMzQxLDcgQEAgaW50IFJl
bmRlcklubGluZTo6d2lkdGgoKSBjb25zdAogICAgIHJldHVybiByaWdodFNpZGUgLSBsZWZ0U2lk
ZTsKIH0KIAotaW50IFJlbmRlcklubGluZTo6aGVpZ2h0KCkgY29uc3QKK2ludCBSZW5kZXJJbmxp
bmU6OmJvdW5kaW5nQm94SGVpZ2h0KCkgY29uc3QKIHsKICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9i
bGVtLzUyODk3MjE+LCBmb3IgYW4gdW5rbm93biByZWFzb24gdGhlIGxpbmtlZCBsaXN0IGhlcmUg
aXMgc29tZXRpbWVzIGluY29uc2lzdGVudCwgZmlyc3QgaXMgbm9uLXplcm8gYW5kIGxhc3QgaXMg
emVyby4gIFdlIGhhdmUgYmVlbgogICAgIC8vIHVuYWJsZSB0byByZXByb2R1Y2UgdGhpcyBhdCBh
bGwgKGFuZCBjb25zZXF1ZW50bHkgdW5hYmxlIHRvIGZpZ3VyZSBvdCB3aHkgdGhpcyBpcyBoYXBw
ZW5pbmcpLiAgVGhlIGFzc2VydCB3aWxsIGhvcGVmdWxseSBjYXRjaCB0aGUgcHJvYmxlbSBpbiBk
ZWJ1ZwpAQCAtMzg1LDE0ICszODcsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlcklubGluZTo6
cG9zaXRpb25GbwogewogICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29vcmRzIGZyb20gdGhlIHByZS1h
bm9ueW1vdXMgYmxvY2sgdG8gdGhlIHBvc3QtYW5vbnltb3VzIGJsb2NrLgogICAgIFJlbmRlckJs
b2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIGludCBwYXJlbnRCbG9ja1ggPSBjYi0+
eFBvcygpICsgeDsKLSAgICBpbnQgcGFyZW50QmxvY2tZID0gY2ItPnlQb3MoKSArIHk7CisgICAg
aW50IHBhcmVudEJsb2NrWCA9IGNiLT54KCkgKyB4OworICAgIGludCBwYXJlbnRCbG9ja1kgPSBj
Yi0+eSgpICsgeTsKICAgICBmb3IgKFJlbmRlckZsb3cqIGMgPSBjb250aW51YXRpb24oKTsgYzsg
YyA9IGMtPmNvbnRpbnVhdGlvbigpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogY29udEJsb2Nr
ID0gYzsKKyAgICAgICAgUmVuZGVyRmxvdyogY29udEJsb2NrID0gYzsKICAgICAgICAgaWYgKGMt
PmlzSW5saW5lKCkpCiAgICAgICAgICAgICBjb250QmxvY2sgPSBjLT5jb250YWluaW5nQmxvY2so
KTsKICAgICAgICAgaWYgKGMtPmlzSW5saW5lKCkgfHwgYy0+Zmlyc3RDaGlsZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGMtPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMocGFyZW50QmxvY2tYIC0gY29u
dEJsb2NrLT54UG9zKCksIHBhcmVudEJsb2NrWSAtIGNvbnRCbG9jay0+eVBvcygpKTsKKyAgICAg
ICAgICAgIHJldHVybiBjLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKHBhcmVudEJsb2NrWCAtIGNv
bnRCbG9jay0+eCgpLCBwYXJlbnRCbG9ja1kgLSBjb250QmxvY2stPnkoKSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIFJlbmRlckZsb3c6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCwgeSk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBw
dWJsaWM6CiAgICAgLy8gb3ZlcnJpZGVzIFJlbmRlck9iamVjdAogICAgIHZpcnR1YWwgYm9vbCBy
ZXF1aXJlc0xheWVyKCk7CiAKLSAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IGhlaWdodCgpIGNvbnN0OworICAgIGludCBib3VuZGluZ0JveFdpZHRoKCkgY29u
c3Q7CisgICAgaW50IGJvdW5kaW5nQm94SGVpZ2h0KCkgY29uc3Q7CiAKICAgICAvLyB1c2VkIHRv
IGNhbGN1bGF0ZSBvZmZzZXRXaWR0aC9IZWlnaHQuICBPdmVycmlkZGVuIGJ5IGlubGluZXMgKFJl
bmRlckZsb3cpIHRvIHJldHVybgogICAgIC8vIHRoZSByZW1haW5pbmcgd2lkdGggb24gYSBnaXZl
biBsaW5lIChhbmQgdGhlIGhlaWdodCBvZiBhIHNpbmdsZSBsaW5lKS4KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDQwMDc4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNyArMjc3LDcgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKCkKICAgICAKICAgICBpZiAoaGFzVHJhbnNmb3Jt
KSB7CiAgICAgICAgIG1fdHJhbnNmb3JtLT5yZXNldCgpOwotICAgICAgICByZW5kZXJlcigpLT5z
dHlsZSgpLT5hcHBseVRyYW5zZm9ybSgqbV90cmFuc2Zvcm0sIHJlbmRlcmVyKCktPmJvcmRlckJv
eCgpLnNpemUoKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnN0eWxlKCktPmFwcGx5VHJhbnNmb3Jt
KCptX3RyYW5zZm9ybSwgcmVuZGVyZXIoKS0+Ym9yZGVyQm94UmVjdCgpLnNpemUoKSk7CiAgICAg
fQogfQogCkBAIC0zNzcsMjcgKzM3NywyNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9uKCkKICAgICAvLyBDbGVhciBvdXIgY2FjaGVkIGNsaXAgcmVjdCBpbmZvcm1hdGlv
bi4KICAgICBjbGVhckNsaXBSZWN0cygpOwogCi0gICAgaW50IHggPSByZW5kZXJlcigpLT54UG9z
KCk7Ci0gICAgaW50IHkgPSByZW5kZXJlcigpLT55UG9zKCkgLSByZW5kZXJlcigpLT5ib3JkZXJU
b3BFeHRyYSgpOworICAgIGludCB4ID0gcmVuZGVyZXIoKS0+eCgpOworICAgIGludCB5ID0gcmVu
ZGVyZXIoKS0+eSgpIC0gcmVuZGVyZXIoKS0+aW50cmluc2ljUGFkZGluZ1RvcCgpOwogCiAgICAg
aWYgKCFyZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLT5wYXJlbnQoKSkg
ewogICAgICAgICAvLyBXZSBtdXN0IGFkanVzdCBvdXIgcG9zaXRpb24gYnkgd2Fsa2luZyB1cCB0
aGUgcmVuZGVyIHRyZWUgbG9va2luZyBmb3IgdGhlCiAgICAgICAgIC8vIG5lYXJlc3QgZW5jbG9z
aW5nIG9iamVjdCB3aXRoIGEgbGF5ZXIuCi0gICAgICAgIFJlbmRlck9iamVjdCogY3VyciA9IHJl
bmRlcmVyKCktPnBhcmVudCgpOworICAgICAgICBSZW5kZXJCb3gqIGN1cnIgPSByZW5kZXJlcigp
LT5wYXJlbnRCb3goKTsKICAgICAgICAgd2hpbGUgKGN1cnIgJiYgIWN1cnItPmhhc0xheWVyKCkp
IHsKICAgICAgICAgICAgIGlmICghY3Vyci0+aXNUYWJsZVJvdygpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gUm93cyBhbmQgY2VsbHMgc2hhcmUgdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSAodGhh
dCBvZiB0aGUgc2VjdGlvbikuCiAgICAgICAgICAgICAgICAgLy8gT21pdCB0aGVtIHdoZW4gY29t
cHV0aW5nIG91ciB4cG9zL3lwb3MuCi0gICAgICAgICAgICAgICAgeCArPSBjdXJyLT54UG9zKCk7
Ci0gICAgICAgICAgICAgICAgeSArPSBjdXJyLT55UG9zKCk7CisgICAgICAgICAgICAgICAgeCAr
PSBjdXJyLT54KCk7CisgICAgICAgICAgICAgICAgeSArPSBjdXJyLT55KCk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjdXJyID0gY3Vyci0+cGFyZW50KCk7CisgICAgICAgICAgICBjdXJy
ID0gY3Vyci0+cGFyZW50Qm94KCk7CiAgICAgICAgIH0KLSAgICAgICAgeSArPSBjdXJyLT5ib3Jk
ZXJUb3BFeHRyYSgpOworICAgICAgICB5ICs9IGN1cnItPmludHJpbnNpY1BhZGRpbmdUb3AoKTsK
ICAgICAgICAgaWYgKGN1cnItPmlzVGFibGVSb3coKSkgewogICAgICAgICAgICAgLy8gUHV0IG91
cnNlbHZlcyBpbnRvIHRoZSByb3cgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgICAgIHggLT0g
Y3Vyci0+eFBvcygpOwotICAgICAgICAgICAgeSAtPSBjdXJyLT55UG9zKCk7CisgICAgICAgICAg
ICB4IC09IGN1cnItPngoKTsKKyAgICAgICAgICAgIHkgLT0gY3Vyci0+eSgpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC00MjYsNyArNDI2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbigpCiAgICAgc2V0UG9zKHgseSk7CiAKICAgICBzZXRXaWR0aChyZW5kZXJlcigp
LT53aWR0aCgpKTsKLSAgICBzZXRIZWlnaHQocmVuZGVyZXIoKS0+aGVpZ2h0KCkgKyByZW5kZXJl
cigpLT5ib3JkZXJUb3BFeHRyYSgpICsgcmVuZGVyZXIoKS0+Ym9yZGVyQm90dG9tRXh0cmEoKSk7
CisgICAgc2V0SGVpZ2h0KHJlbmRlcmVyKCktPmhlaWdodCgpICsgcmVuZGVyZXIoKS0+aW50cmlu
c2ljUGFkZGluZ1RvcCgpICsgcmVuZGVyZXIoKS0+aW50cmluc2ljUGFkZGluZ0JvdHRvbSgpKTsK
IAogICAgIGlmICghcmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKICAgICAgICAgaWYg
KHJlbmRlcmVyKCktPm92ZXJmbG93V2lkdGgoKSA+IHJlbmRlcmVyKCktPndpZHRoKCkpCkBAIC0x
MTcxLDcgKzExNzEsNyBAQCBzdGF0aWMgSW50UmVjdCByZXNpemVyQ29ybmVyUmVjdChjb25zdCBS
CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdAogewot
ICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCh0aGlzLCByZW5kZXJlcigpLT5ib3JkZXJCb3go
KSkuaXNFbXB0eSgpOworICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCh0aGlzLCByZW5kZXJl
cigpLT5ib3JkZXJCb3hSZWN0KCkpLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCkBAIC0xMTg5LDcgKzExODksNyBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVu
ZGVyTGF5ZXI6OmNyZWF0CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwogICAgIGJvb2wg
aGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSByZW5kZXJlcigpLT5ub2RlKCktPnNoYWRvd0FuY2Vz
dG9yTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShSZW5kZXJTdHls
ZTo6U0NST0xMQkFSKTsKICAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAg
IHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9y
aWVudGF0aW9uLCByZW5kZXJlcigpLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5k
ZXJlcigpKTsKKyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21T
Y3JvbGxiYXIodGhpcywgb3JpZW50YXRpb24sIHJlbmRlcmVyKCktPm5vZGUoKS0+c2hhZG93QW5j
ZXN0b3JOb2RlKCktPnJlbmRlckJveCgpKTsKICAgICBlbHNlCiAgICAgICAgIHdpZGdldCA9IFNj
cm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFy
U2Nyb2xsYmFyKTsKICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgpLT52aWV3KCktPmFkZENoaWxk
KHdpZGdldC5nZXQoKSk7ICAgICAgICAKQEAgLTEyNzksNyArMTI3OSw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm8KICAgICBpZiAoIW1faEJhciAmJiAhbV92QmFy
ICYmICghcmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIoKS0+c3R5bGUo
KS0+cmVzaXplKCkgPT0gUkVTSVpFX05PTkUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
SW50UmVjdCBib3JkZXJCb3ggPSByZW5kZXJlcigpLT5ib3JkZXJCb3goKTsKKyAgICBJbnRSZWN0
IGJvcmRlckJveCA9IHJlbmRlcmVyKCktPmJvcmRlckJveFJlY3QoKTsKICAgICBJbnRSZWN0IHNj
cm9sbENvcm5lcihzY3JvbGxDb3JuZXJSZWN0KHRoaXMsIGJvcmRlckJveCkpOwogICAgIEludFJl
Y3QgYWJzQm91bmRzKGJvcmRlckJveC54KCkgKyB0eCwgYm9yZGVyQm94LnkoKSArIHR5LCBib3Jk
ZXJCb3gud2lkdGgoKSwgYm9yZGVyQm94LmhlaWdodCgpKTsKICAgICBpZiAobV92QmFyKQpAQCAt
MTI5NSw5ICsxMjk1LDkgQEAgdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRpb25PdmVyZmxvd0NvbnRy
bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faEJhci0+aGVpZ2h0KCkp
KTsKICAgICAKICAgICBpZiAobV9zY3JvbGxDb3JuZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVy
LT5zZXRSZWN0KHNjcm9sbENvcm5lcik7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFt
ZVJlY3Qoc2Nyb2xsQ29ybmVyKTsKICAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6
ZXItPnNldFJlY3QocmVzaXplckNvcm5lclJlY3QodGhpcywgYm9yZGVyQm94KSk7CisgICAgICAg
IG1fcmVzaXplci0+c2V0RnJhbWVSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGJvcmRlckJv
eCkpOwogfQogCiBpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFdpZHRoKCkKQEAgLTE0OTMsNyArMTQ5
Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scygKIAogdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBp
bnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKIHsKLSAgICBJbnRSZWN0
IGNvcm5lclJlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KHRoaXMsIHJlbmRlcmVyKCktPmJvcmRlckJv
eCgpKTsKKyAgICBJbnRSZWN0IGNvcm5lclJlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KHRoaXMsIHJl
bmRlcmVyKCktPmJvcmRlckJveFJlY3QoKSk7CiAgICAgSW50UmVjdCBhYnNSZWN0ID0gSW50UmVj
dChjb3JuZXJSZWN0LngoKSArIHR4LCBjb3JuZXJSZWN0LnkoKSArIHR5LCBjb3JuZXJSZWN0Lndp
ZHRoKCksIGNvcm5lclJlY3QuaGVpZ2h0KCkpOwogICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3Rz
KGRhbWFnZVJlY3QpKQogICAgICAgICByZXR1cm47CkBAIC0xNTE2LDcgKzE1MTYsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDCiAgICAgaWYgKHJlbmRlcmVyKCkt
PnN0eWxlKCktPnJlc2l6ZSgpID09IFJFU0laRV9OT05FKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBJbnRSZWN0IGNvcm5lclJlY3QgPSByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCByZW5kZXJlcigp
LT5ib3JkZXJCb3goKSk7CisgICAgSW50UmVjdCBjb3JuZXJSZWN0ID0gcmVzaXplckNvcm5lclJl
Y3QodGhpcywgcmVuZGVyZXIoKS0+Ym9yZGVyQm94UmVjdCgpKTsKICAgICBJbnRSZWN0IGFic1Jl
Y3QgPSBJbnRSZWN0KGNvcm5lclJlY3QueCgpICsgdHgsIGNvcm5lclJlY3QueSgpICsgdHksIGNv
cm5lclJlY3Qud2lkdGgoKSwgY29ybmVyUmVjdC5oZWlnaHQoKSk7CiAgICAgaWYgKCFhYnNSZWN0
LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3MjQsOCArMTcy
NCw4IEBAIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVyKiByb28KICAgICBjYWxj
dWxhdGVSZWN0cyhyb290TGF5ZXIsIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywgZGFtYWdl
UmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwgdGVtcG9yYXJ5Q2xpcFJlY3RzKTsK
ICAgICBpbnQgeCA9IGxheWVyQm91bmRzLngoKTsKICAgICBpbnQgeSA9IGxheWVyQm91bmRzLnko
KTsKLSAgICBpbnQgdHggPSB4IC0gcmVuZGVyZXIoKS0+eFBvcygpOwotICAgIGludCB0eSA9IHkg
LSByZW5kZXJlcigpLT55UG9zKCkgKyByZW5kZXJlcigpLT5ib3JkZXJUb3BFeHRyYSgpOworICAg
IGludCB0eCA9IHggLSByZW5kZXJlcigpLT54KCk7CisgICAgaW50IHR5ID0geSAtIHJlbmRlcmVy
KCktPnkoKSArIHJlbmRlcmVyKCktPmludHJpbnNpY1BhZGRpbmdUb3AoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhcmUgdXAtdG8tZGF0
ZS4KICAgICB1cGRhdGVaT3JkZXJMaXN0cygpOwpAQCAtMTk0OCw4ICsxOTQ4LDggQEAgUmVuZGVy
TGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgIC8vIE5leHQgd2Ugd2FudCB0
byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMg
b2YgdGhlIGxheWVyLgogICAgIGlmIChmZ1JlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSAmJiAK
ICAgICAgICAgcmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQb2lu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckJvdW5kcy54KCkgLSByZW5kZXJl
cigpLT54UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueSgp
IC0gcmVuZGVyZXIoKS0+eVBvcygpICsgcmVuZGVyZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueCgpIC0gcmVuZGVyZXIoKS0+
eCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnkoKSAtIHJlbmRl
cmVyKCktPnkoKSArIHJlbmRlcmVyKCktPmludHJpbnNpY1BhZGRpbmdUb3AoKSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSGl0VGVzdERlc2NlbmRhbnRzKSkgewogICAgICAgICAvLyBG
b3IgcG9zaXRpb25lZCBnZW5lcmF0ZWQgY29udGVudCwgd2UgbWlnaHQgc3RpbGwgbm90IGhhdmUg
YQogICAgICAgICAvLyBub2RlIGJ5IHRoZSB0aW1lIHdlIGdldCB0byB0aGUgbGF5ZXIgbGV2ZWws
IHNpbmNlIG5vbmUgb2YKQEAgLTE5NzgsOCArMTk3OCw4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6aGl0VGVzdExheWVyKFIKICAgICAvLyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBt
b3VzZSBpcyBpbnNpZGUgdGhpcyBsYXllciBidXQgbm90IGFueSBvZiBpdHMgY2hpbGRyZW4uCiAg
ICAgaWYgKGJnUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpICYmCiAgICAgICAgIHJlbmRlcmVy
KCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UG9pbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueCgpIC0gcmVuZGVyZXIoKS0+eFBvcygpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnkoKSAtIHJlbmRlcmVyKCktPnlQ
b3MoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGF5ZXJCb3VuZHMueCgpIC0gcmVuZGVyZXIoKS0+eCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnkoKSAtIHJlbmRlcmVyKCktPnkoKSArIHJlbmRl
cmVyKCktPmludHJpbnNpY1BhZGRpbmdUb3AoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBIaXRUZXN0U2VsZikpIHsKICAgICAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb2RlKCkgfHwgIXJl
c3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkgewogICAgICAgICAgICAgTm9kZSogZSA9IGVuY2xv
c2luZ0VsZW1lbnQoKTsKQEAgLTIyMTcsMTYgKzIyMTcsMTYgQEAgSW50UmVjdCBSZW5kZXJMYXll
cjo6Ym91bmRpbmdCb3goY29uc3QgUgogICAgICAgICBpbnQgbGVmdCA9IGZpcnN0Qm94LT54UG9z
KCk7CiAgICAgICAgIGZvciAoSW5saW5lUnVuQm94KiBjdXJyID0gZmlyc3RCb3gtPm5leHRMaW5l
Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQogICAgICAgICAgICAgbGVm
dCA9IG1pbihsZWZ0LCBjdXJyLT54UG9zKCkpOwotICAgICAgICByZXN1bHQgPSBJbnRSZWN0KG1f
eCArIGxlZnQsIG1feSArICh0b3AgLSByZW5kZXJlcigpLT55UG9zKCkpLCB3aWR0aCgpLCBib3R0
b20gLSB0b3ApOworICAgICAgICByZXN1bHQgPSBJbnRSZWN0KG1feCArIGxlZnQsIG1feSArICh0
b3AgLSByZW5kZXJlcigpLT55KCkpLCB3aWR0aCgpLCBib3R0b20gLSB0b3ApOwogICAgIH0gZWxz
ZSBpZiAocmVuZGVyZXIoKS0+aXNUYWJsZVJvdygpKSB7CiAgICAgICAgIC8vIE91ciBib3VuZGlu
ZyBib3ggaXMganVzdCB0aGUgdW5pb24gb2YgYWxsIG9mIG91ciBjZWxscycgYm9yZGVyL292ZXJm
bG93IHJlY3RzLgogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSByZW5kZXJlcigp
LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAg
ICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBJ
bnRSZWN0IGJib3ggPSBjaGlsZC0+Ym9yZGVyQm94KCk7Ci0gICAgICAgICAgICAgICAgYmJveC5t
b3ZlKDAsIGNoaWxkLT5ib3JkZXJUb3BFeHRyYSgpKTsKKyAgICAgICAgICAgICAgICBJbnRSZWN0
IGJib3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjaGlsZCktPmJvcmRlckJveFJlY3QoKTsK
KyAgICAgICAgICAgICAgICBiYm94Lm1vdmUoMCwgY2hpbGQtPmludHJpbnNpY1BhZGRpbmdUb3Ao
KSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlKGJib3gpOwogICAgICAgICAgICAgICAg
IEludFJlY3Qgb3ZlcmZsb3dSZWN0ID0gcmVuZGVyZXIoKS0+b3ZlcmZsb3dSZWN0KGZhbHNlKTsK
LSAgICAgICAgICAgICAgICBvdmVyZmxvd1JlY3QubW92ZSgwLCBjaGlsZC0+Ym9yZGVyVG9wRXh0
cmEoKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3dSZWN0Lm1vdmUoMCwgY2hpbGQtPmludHJp
bnNpY1BhZGRpbmdUb3AoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGJib3ggIT0gb3ZlcmZsb3dS
ZWN0KQogICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGUob3ZlcmZsb3dSZWN0KTsKICAg
ICAgICAgICAgIH0KQEAgLTIyMzYsNyArMjIzNiw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmJv
dW5kaW5nQm94KGNvbnN0IFIKICAgICAgICAgaWYgKHJlbmRlcmVyKCktPmhhc01hc2soKSkKICAg
ICAgICAgICAgIHJlc3VsdCA9IHJlbmRlcmVyKCktPm1hc2tDbGlwUmVjdCgpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIEludFJlY3QgYmJveCA9IHJlbmRlcmVyKCktPmJvcmRlckJveCgp
OworICAgICAgICAgICAgSW50UmVjdCBiYm94ID0gcmVuZGVyZXIoKS0+Ym9yZGVyQm94UmVjdCgp
OwogICAgICAgICAgICAgcmVzdWx0ID0gYmJveDsKICAgICAgICAgICAgIEludFJlY3Qgb3ZlcmZs
b3dSZWN0ID0gcmVuZGVyZXIoKS0+b3ZlcmZsb3dSZWN0KGZhbHNlKTsKICAgICAgICAgICAgIGlm
IChiYm94ICE9IG92ZXJmbG93UmVjdCkKQEAgLTIyNDQsMTEgKzIyNDQsMTEgQEAgSW50UmVjdCBS
ZW5kZXJMYXllcjo6Ym91bmRpbmdCb3goY29uc3QgUgogICAgICAgICB9CiAKICAgICAgICAgLy8g
V2UgaGF2ZSB0byBhZGp1c3QgdGhlIHgveSBvZiB0aGlzIHJlc3VsdCBzbyB0aGF0IGl0IGlzIGlu
IHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBsYXllci4KLSAgICAgICAgLy8gV2UgYWxzbyBo
YXZlIHRvIGFkZCBpbiBib3JkZXJUb3BFeHRyYSBoZXJlLCBzaW5jZSBib3JkZXJCb3goKSwgaW4g
b3JkZXIgdG8gcGxheSB3ZWxsIHdpdGggbWV0aG9kcyBsaWtlCisgICAgICAgIC8vIFdlIGFsc28g
aGF2ZSB0byBhZGQgaW4gaW50cmluc2ljUGFkZGluZ1RvcCBoZXJlLCBzaW5jZSBib3JkZXJCb3hS
ZWN0KCksIGluIG9yZGVyIHRvIHBsYXkgd2VsbCB3aXRoIG1ldGhvZHMgbGlrZQogICAgICAgICAv
LyBmbG9hdFJlY3QgdGhhdCBkZWFsIHdpdGggY2hpbGQgY29udGVudCwgdXNlcyBhbiBvcmlnaW4g
b2YgKDAsMCkgdGhhdCBpcyBhdCB0aGUgY2hpbGQgY29udGVudCBib3ggKHNvCi0gICAgICAgIC8v
IGJvcmRlciBib3ggcmV0dXJucyBhIHkgY29vcmQgb2YgLWJvcmRlclRvcEV4dHJhKCkuICBUaGUg
bGF5ZXIsIGhvd2V2ZXIsIHVzZXMgdGhlIG91dGVyIGJveC4gIFRoaXMgaXMgYWxsCisgICAgICAg
IC8vIGJvcmRlciBib3ggcmV0dXJucyBhIHkgY29vcmQgb2YgLWludHJpbnNpY1BhZGRpbmdUb3Ao
KS4gIFRoZSBsYXllciwgaG93ZXZlciwgdXNlcyB0aGUgb3V0ZXIgYm94LiAgVGhpcyBpcyBhbGwK
ICAgICAgICAgLy8gcmVhbGx5IGNvbmZ1c2luZy4KLSAgICAgICAgcmVzdWx0Lm1vdmUobV94LCBt
X3kgKyByZW5kZXJlcigpLT5ib3JkZXJUb3BFeHRyYSgpKTsKKyAgICAgICAgcmVzdWx0Lm1vdmUo
bV94LCBtX3kgKyByZW5kZXJlcigpLT5pbnRyaW5zaWNQYWRkaW5nVG9wKCkpOwogICAgIH0KICAg
ICAKICAgICAvLyBDb252ZXJ0IHRoZSBib3VuZGluZyBib3ggdG8gYW4gYWJzb2x1dGUgcG9zaXRp
b24uICBXZSBjYW4gZG8gdGhpcyBlYXNpbHkgYnkgbG9va2luZyBhdCB0aGUgZGVsdGEKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyAr
MjIzLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpjYWxjSGVpZ2h0KCkKICAgICBpbnQgdG9BZGQg
PSBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBib3JkZXJUb3AoKSArIGJvcmRlckJv
dHRvbSgpOwogIAogICAgIGludCBpdGVtSGVpZ2h0ID0gUmVuZGVyTGlzdEJveDo6aXRlbUhlaWdo
dCgpOwotICAgIG1faGVpZ2h0ID0gaXRlbUhlaWdodCAqIHNpemUoKSAtIHJvd1NwYWNpbmcgKyB0
b0FkZDsKKyAgICBzZXRIZWlnaHQoaXRlbUhlaWdodCAqIHNpemUoKSAtIHJvd1NwYWNpbmcgKyB0
b0FkZCk7CiAgICAgCiAgICAgUmVuZGVyQmxvY2s6OmNhbGNIZWlnaHQoKTsKICAgICAKQEAgLTM2
Nyw5ICszNjcsOSBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzUG9pbnRJbk92ZXJmbG93Q29uCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEludFJlY3QgdmVydFJlY3QoX3R4ICsgd2lkdGgo
KSAtIGJvcmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAg
X3R5ICsgYm9yZGVyVG9wKCkgLSBib3JkZXJUb3BFeHRyYSgpLAorICAgICAgICAgICAgICAgICAg
IF90eSArIGJvcmRlclRvcCgpIC0gaW50cmluc2ljUGFkZGluZ1RvcCgpLAogICAgICAgICAgICAg
ICAgICAgIG1fdkJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSArIGJv
cmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpIC0gYm9yZGVyVG9wKCkgLSBib3Jk
ZXJCb3R0b20oKSk7CisgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgKyBpbnRyaW5zaWNQYWRk
aW5nVG9wKCkgKyBpbnRyaW5zaWNQYWRkaW5nQm90dG9tKCkgLSBib3JkZXJUb3AoKSAtIGJvcmRl
ckJvdHRvbSgpKTsKIAogICAgIGlmICh2ZXJ0UmVjdC5jb250YWlucyhfeCwgX3kpKSB7CiAgICAg
ICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKQEAgLTU3OCw3ICs1NzgsNyBA
QCB2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3CiAKIEludFJlY3QgUmVu
ZGVyTGlzdEJveDo6Y29udHJvbENsaXBSZWN0KGludCB0eCwgaW50IHR5KSBjb25zdAogewotICAg
IEludFJlY3QgY2xpcFJlY3QgPSBjb250ZW50Qm94KCk7CisgICAgSW50UmVjdCBjbGlwUmVjdCA9
IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgY2xpcFJlY3QubW92ZSh0eCwgdHkpOwogICAgIHJldHVy
biBjbGlwUmVjdDsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJl
dmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzUsMTIgKzIzNSwxMiBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjps
YXlvdXQoKQogdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKCkKIHsKICAg
ICBpZiAobV9tYXJrZXIgJiYgIW1fbWFya2VyLT5pc0luc2lkZSgpICYmIG1fbWFya2VyLT5pbmxp
bmVCb3hXcmFwcGVyKCkpIHsKLSAgICAgICAgaW50IG1hcmtlck9sZFggPSBtX21hcmtlci0+eFBv
cygpOworICAgICAgICBpbnQgbWFya2VyT2xkWCA9IG1fbWFya2VyLT54KCk7CiAgICAgICAgIGlu
dCB5T2Zmc2V0ID0gMDsKICAgICAgICAgaW50IHhPZmZzZXQgPSAwOwotICAgICAgICBmb3IgKFJl
bmRlck9iamVjdCogbyA9IG1fbWFya2VyLT5wYXJlbnQoKTsgbyAhPSB0aGlzOyBvID0gby0+cGFy
ZW50KCkpIHsKLSAgICAgICAgICAgIHlPZmZzZXQgKz0gby0+eVBvcygpOwotICAgICAgICAgICAg
eE9mZnNldCArPSBvLT54UG9zKCk7CisgICAgICAgIGZvciAoUmVuZGVyQm94KiBvID0gbV9tYXJr
ZXItPnBhcmVudEJveCgpOyBvICE9IHRoaXM7IG8gPSBvLT5wYXJlbnRCb3goKSkgeworICAgICAg
ICAgICAgeU9mZnNldCArPSBvLT55KCk7CisgICAgICAgICAgICB4T2Zmc2V0ICs9IG8tPngoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgYWRqdXN0T3ZlcmZsb3cgPSBmYWxzZTsKQEAgLTI2
NywxMiArMjY3LDEyIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnBvc2l0aW9uTGlzdE1hcmtlcigK
IAogICAgICAgICBpZiAoYWRqdXN0T3ZlcmZsb3cpIHsKICAgICAgICAgICAgIEludFJlY3QgbWFy
a2VyUmVjdChtYXJrZXJYUG9zICsgeE9mZnNldCwgeU9mZnNldCwgbV9tYXJrZXItPndpZHRoKCks
IG1fbWFya2VyLT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIG8gPSBtX21h
cmtlcjsKKyAgICAgICAgICAgIFJlbmRlckJveCogbyA9IG1fbWFya2VyOwogICAgICAgICAgICAg
ZG8gewotICAgICAgICAgICAgICAgIG8gPSBvLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBv
ID0gby0+cGFyZW50Qm94KCk7CiAgICAgICAgICAgICAgICAgaWYgKG8tPmlzUmVuZGVyQmxvY2so
KSkKICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvKS0+YWRk
VmlzdWFsT3ZlcmZsb3cobWFya2VyUmVjdCk7Ci0gICAgICAgICAgICAgICAgbWFya2VyUmVjdC5t
b3ZlKC1vLT54UG9zKCksIC1vLT55UG9zKCkpOworICAgICAgICAgICAgICAgIG1hcmtlclJlY3Qu
bW92ZSgtby0+eCgpLCAtby0+eSgpKTsKICAgICAgICAgICAgIH0gd2hpbGUgKG8gIT0gdGhpcyk7
CiAgICAgICAgIH0KICAgICB9CkBAIC0yODAsNyArMjgwLDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRl
bTo6cG9zaXRpb25MaXN0TWFya2VyKAogCiB2b2lkIFJlbmRlckxpc3RJdGVtOjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgaWYgKCFtX2hlaWdodCkK
KyAgICBpZiAoIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJCbG9jazo6
cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMCw3ICs1MzAsNyBAQCB2b2lkIFJl
bmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgSW50UmVjdCBtYXJrZXIgPSBn
ZXRSZWxhdGl2ZU1hcmtlclJlY3QoKTsKICAgICBtYXJrZXIubW92ZSh0eCwgdHkpOwogCi0gICAg
SW50UmVjdCBib3godHggKyBtX3gsIHR5ICsgbV95LCBtX3dpZHRoLCBtX2hlaWdodCk7CisgICAg
SW50UmVjdCBib3godHggKyB4KCksIHR5ICsgbV9mcmFtZVJlY3QueSgpLCB3aWR0aCgpLCBoZWln
aHQoKSk7CiAKICAgICBpZiAoYm94LnkoKSA+IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpIHx8IGJv
eC55KCkgKyBib3guaGVpZ2h0KCkgPCBwYWludEluZm8ucmVjdC55KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTYzNiwxMSArNjM2LDExIEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6bGF5b3V0KCkK
ICAgICBBU1NFUlQoIXByZWZXaWR0aHNEaXJ0eSgpKTsKIAogICAgIGlmIChpc0ltYWdlKCkpIHsK
LSAgICAgICAgbV93aWR0aCA9IG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCkpLndpZHRoKCk7Ci0gICAgICAgIG1faGVpZ2h0ID0gbV9pbWFnZS0+aW1hZ2VT
aXplKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkuaGVpZ2h0KCk7CisgICAgICAgIHNl
dFdpZHRoKG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
LndpZHRoKCkpOworICAgICAgICBzZXRIZWlnaHQobV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkuaGVpZ2h0KCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1fd2lkdGggPSBtaW5QcmVmV2lkdGgoKTsKLSAgICAgICAgbV9oZWlnaHQgPSBzdHlsZSgpLT5m
b250KCkuaGVpZ2h0KCk7CisgICAgICAgIHNldFdpZHRoKG1pblByZWZXaWR0aCgpKTsKKyAgICAg
ICAgc2V0SGVpZ2h0KHN0eWxlKCktPmZvbnQoKS5oZWlnaHQoKSk7CiAgICAgfQogCiAgICAgbV9t
YXJnaW5MZWZ0ID0gbV9tYXJnaW5SaWdodCA9IDA7CkBAIC02NjEsNyArNjYxLDcgQEAgdm9pZCBS
ZW5kZXJMaXN0TWFya2VyOjppbWFnZUNoYW5nZWQoV3JhcAogICAgIGlmIChvICE9IG1faW1hZ2Ut
PmRhdGEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fd2lkdGggIT0gbV9pbWFnZS0+
aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkud2lkdGgoKSB8fCBtX2hl
aWdodCAhPSBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
KS5oZWlnaHQoKSB8fCBtX2ltYWdlLT5lcnJvck9jY3VycmVkKCkpCisgICAgaWYgKHdpZHRoKCkg
IT0gbV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkud2lk
dGgoKSB8fCBoZWlnaHQoKSAhPSBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpKS5oZWlnaHQoKSB8fCBtX2ltYWdlLT5lcnJvck9jY3VycmVkKCkpCiAgICAg
ICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIGVsc2UKICAgICAg
ICAgcmVwYWludCgpOwpAQCAtODI5LDcgKzgyOSw3IEBAIGJvb2wgUmVuZGVyTGlzdE1hcmtlcjo6
aXNJbnNpZGUoKSBjb25zdAogSW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1h
cmtlclJlY3QoKQogewogICAgIGlmIChpc0ltYWdlKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KG1feCwgbV95LCBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKS53aWR0aCgpLCBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpKS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBJbnRSZWN0KHgoKSwgbV9mcmFtZVJl
Y3QueSgpLCBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
KS53aWR0aCgpLCBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKS5oZWlnaHQoKSk7CiAKICAgICBzd2l0Y2ggKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkg
ewogICAgICAgICBjYXNlIERJU0M6CkBAIC04MzksNyArODM5LDcgQEAgSW50UmVjdCBSZW5kZXJM
aXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcgogICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9
IHN0eWxlKCktPmZvbnQoKTsKICAgICAgICAgICAgIGludCBhc2NlbnQgPSBmb250LmFzY2VudCgp
OwogICAgICAgICAgICAgaW50IGJ1bGxldFdpZHRoID0gKGFzY2VudCAqIDIgLyAzICsgMSkgLyAy
OwotICAgICAgICAgICAgcmV0dXJuIEludFJlY3QobV94ICsgMSwgbV95ICsgMyAqIChhc2NlbnQg
LSBhc2NlbnQgKiAyIC8gMykgLyAyLCBidWxsZXRXaWR0aCwgYnVsbGV0V2lkdGgpOworICAgICAg
ICAgICAgcmV0dXJuIEludFJlY3QoeCgpICsgMSwgbV9mcmFtZVJlY3QueSgpICsgMyAqIChhc2Nl
bnQgLSBhc2NlbnQgKiAyIC8gMykgLyAyLCBidWxsZXRXaWR0aCwgYnVsbGV0V2lkdGgpOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgTE5PTkU6CiAgICAgICAgICAgICByZXR1cm4gSW50UmVjdCgp
OwpAQCAtODY2LDcgKzg2Niw3IEBAIEludFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRp
dmVNYXIKICAgICAgICAgICAgIGludCBpdGVtV2lkdGggPSBmb250LndpZHRoKG1fdGV4dCk7CiAg
ICAgICAgICAgICBjb25zdCBVQ2hhciBwZXJpb2RTcGFjZVsyXSA9IHsgJy4nLCAnICcgfTsKICAg
ICAgICAgICAgIGludCBwZXJpb2RTcGFjZVdpZHRoID0gZm9udC53aWR0aChUZXh0UnVuKHBlcmlv
ZFNwYWNlLCAyKSk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdChtX3gsIG1feSArIGZvbnQu
YXNjZW50KCksIGl0ZW1XaWR0aCArIHBlcmlvZFNwYWNlV2lkdGgsIGZvbnQuaGVpZ2h0KCkpOwor
ICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoeCgpLCBtX2ZyYW1lUmVjdC55KCkgKyBmb250LmFz
Y2VudCgpLCBpdGVtV2lkdGggKyBwZXJpb2RTcGFjZVdpZHRoLCBmb250LmhlaWdodCgpKTsKICAg
ICB9CiAKICAgICByZXR1cm4gSW50UmVjdCgpOwpAQCAtODg5LDcgKzg4OSw3IEBAIEludFJlY3Qg
UmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdCgKICAgICAgICAgcmV0dXJuIEludFJlY3Qo
KTsKIAogICAgIFJvb3RJbmxpbmVCb3gqIHJvb3QgPSBpbmxpbmVCb3hXcmFwcGVyKCktPnJvb3Qo
KTsKLSAgICBJbnRSZWN0IHJlY3QoMCwgcm9vdC0+c2VsZWN0aW9uVG9wKCkgLSB5UG9zKCksIHdp
ZHRoKCksIHJvb3QtPnNlbGVjdGlvbkhlaWdodCgpKTsKKyAgICBJbnRSZWN0IHJlY3QoMCwgcm9v
dC0+c2VsZWN0aW9uVG9wKCkgLSB5KCksIHdpZHRoKCksIHJvb3QtPnNlbGVjdGlvbkhlaWdodCgp
KTsKICAgICAgICAgICAgIAogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKICAgICAgICAg
Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QocmVjdCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNYXJxdWVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIGJvb2wgUmVu
ZGVyTWFycXVlZTo6aXNIb3Jpem9udGFsKCkgY29uc3QKIAogaW50IFJlbmRlck1hcnF1ZWU6OmNv
bXB1dGVQb3NpdGlvbihFTWFycXVlZURpcmVjdGlvbiBkaXIsIGJvb2wgc3RvcEF0Q29udGVudEVk
Z2UpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBvID0gbV9sYXllci0+cmVuZGVyZXIoKTsKKyAgICBS
ZW5kZXJCb3gqIG8gPSBtX2xheWVyLT5yZW5kZXJlcigpOwogICAgIFJlbmRlclN0eWxlKiBzID0g
by0+c3R5bGUoKTsKICAgICBpZiAoaXNIb3Jpem9udGFsKCkpIHsKICAgICAgICAgYm9vbCBsdHIg
PSBzLT5kaXJlY3Rpb24oKSA9PSBMVFI7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZWRpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA1LDE2ICsxMDUsMTYgQEAgTWVkaWFQbGF5ZXIqIFJlbmRlck1l
ZGlhOjpwbGF5ZXIoKSBjb25zdAogCiB2b2lkIFJlbmRlck1lZGlhOjpsYXlvdXQoKQogewotICAg
IEludFNpemUgb2xkU2l6ZSA9IGNvbnRlbnRCb3goKS5zaXplKCk7CisgICAgSW50U2l6ZSBvbGRT
aXplID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CiAKICAgICBSZW5kZXJSZXBsYWNlZDo6bGF5
b3V0KCk7CiAKLSAgICBSZW5kZXJPYmplY3QqIGNvbnRyb2xzUmVuZGVyZXIgPSBtX2NvbnRyb2xz
U2hhZG93Um9vdCA/IG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpIDogMDsKKyAgICBS
ZW5kZXJCb3gqIGNvbnRyb2xzUmVuZGVyZXIgPSBtX2NvbnRyb2xzU2hhZG93Um9vdCA/IG1fY29u
dHJvbHNTaGFkb3dSb290LT5yZW5kZXJCb3goKSA6IDA7CiAgICAgaWYgKCFjb250cm9sc1JlbmRl
cmVyKQogICAgICAgICByZXR1cm47Ci0gICAgSW50U2l6ZSBuZXdTaXplID0gY29udGVudEJveCgp
LnNpemUoKTsKKyAgICBJbnRTaXplIG5ld1NpemUgPSBjb250ZW50Qm94UmVjdCgpLnNpemUoKTsK
ICAgICBpZiAobmV3U2l6ZSAhPSBvbGRTaXplIHx8IGNvbnRyb2xzUmVuZGVyZXItPm5lZWRzTGF5
b3V0KCkpIHsKLSAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c2V0UG9zKGJvcmRlckxlZnQoKSAr
IHBhZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKKyAgICAgICAgY29u
dHJvbHNSZW5kZXJlci0+c2V0TG9jYXRpb24oYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwg
Ym9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwogICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5z
dHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiAgICAg
ICAgIGNvbnRyb2xzUmVuZGVyZXItPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChuZXdTaXplLndp
ZHRoKCksIEZpeGVkKSk7CiAgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0
KHRydWUsIGZhbHNlKTsKQEAgLTQ0MCw3ICs0NDAsNyBAQCBpbnQgUmVuZGVyTWVkaWE6Omxvd2Vz
dFBvc2l0aW9uKGJvb2wgaW5jCiAgICAgaWYgKCFtX2NvbnRyb2xzU2hhZG93Um9vdCB8fCAhbV9j
b250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBib3R0b207CiAg
ICAgCi0gICAgcmV0dXJuIG1heChib3R0b20sICBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVy
ZXIoKS0+eVBvcygpICsgbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCktPmxvd2VzdFBv
c2l0aW9uKGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBpbmNsdWRlU2VsZikpOworICAgIHJldHVy
biBtYXgoYm90dG9tLCAgbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlckJveCgpLT55KCkgKyBt
X2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKS0+bG93ZXN0UG9zaXRpb24oaW5jbHVkZU92
ZXJmbG93SW50ZXJpb3IsIGluY2x1ZGVTZWxmKSk7CiB9CiAKIGludCBSZW5kZXJNZWRpYTo6cmln
aHRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgYm9vbCBpbmNsdWRl
U2VsZikgY29uc3QKQEAgLTQ0OSw3ICs0NDksNyBAQCBpbnQgUmVuZGVyTWVkaWE6OnJpZ2h0bW9z
dFBvc2l0aW9uKGJvb2wgCiAgICAgaWYgKCFtX2NvbnRyb2xzU2hhZG93Um9vdCB8fCAhbV9jb250
cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiByaWdodDsKICAgICAK
LSAgICByZXR1cm4gbWF4KHJpZ2h0LCBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKS0+
eFBvcygpICsgbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCktPnJpZ2h0bW9zdFBvc2l0
aW9uKGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBpbmNsdWRlU2VsZikpOworICAgIHJldHVybiBt
YXgocmlnaHQsIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJCb3goKS0+eCgpICsgbV9jb250
cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCktPnJpZ2h0bW9zdFBvc2l0aW9uKGluY2x1ZGVPdmVy
Zmxvd0ludGVyaW9yLCBpbmNsdWRlU2VsZikpOwogfQogCiBpbnQgUmVuZGVyTWVkaWE6OmxlZnRt
b3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgYm9vbCBpbmNsdWRlU2Vs
ZikgY29uc3QKQEAgLTQ1OCw3ICs0NTgsNyBAQCBpbnQgUmVuZGVyTWVkaWE6OmxlZnRtb3N0UG9z
aXRpb24oYm9vbCBpCiAgICAgaWYgKCFtX2NvbnRyb2xzU2hhZG93Um9vdCB8fCAhbV9jb250cm9s
c1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBsZWZ0OwogICAgIAotICAg
IHJldHVybiBtaW4obGVmdCwgbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCktPnhQb3Mo
KSArICBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKS0+bGVmdG1vc3RQb3NpdGlvbihp
bmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgaW5jbHVkZVNlbGYpKTsKKyAgICByZXR1cm4gbWluKGxl
ZnQsIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJCb3goKS0+eCgpICsgIG1fY29udHJvbHNT
aGFkb3dSb290LT5yZW5kZXJlcigpLT5sZWZ0bW9zdFBvc2l0aW9uKGluY2x1ZGVPdmVyZmxvd0lu
dGVyaW9yLCBpbmNsdWRlU2VsZikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0
LDggKzIyNCw4IEBAIEludFJlY3QgUmVuZGVyTWVudUxpc3Q6OmNvbnRyb2xDbGlwUmVjdCgKICAg
ICAgICAgICAgICAgICAgICBjb250ZW50V2lkdGgoKSwgCiAgICAgICAgICAgICAgICAgICAgY29u
dGVudEhlaWdodCgpKTsKICAgICAKLSAgICBJbnRSZWN0IGlubmVyQm94KHR4ICsgbV9pbm5lckJs
b2NrLT54UG9zKCkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCksIAotICAgICAgICAgICAg
ICAgICAgIHR5ICsgbV9pbm5lckJsb2NrLT55UG9zKCkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdU
b3AoKSwKKyAgICBJbnRSZWN0IGlubmVyQm94KHR4ICsgbV9pbm5lckJsb2NrLT54KCkgKyBtX2lu
bmVyQmxvY2stPnBhZGRpbmdMZWZ0KCksIAorICAgICAgICAgICAgICAgICAgIHR5ICsgbV9pbm5l
ckJsb2NrLT55KCkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdUb3AoKSwKICAgICAgICAgICAgICAg
ICAgICBtX2lubmVyQmxvY2stPmNvbnRlbnRXaWR0aCgpLCAKICAgICAgICAgICAgICAgICAgICBt
X2lubmVyQmxvY2stPmNvbnRlbnRIZWlnaHQoKSk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQsODMgKzUwNCw2IEBAIFJlbmRlckJsb2Nr
KiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZUJsb2MKICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJl
bmRlck9iamVjdDo6b2Zmc2V0TGVmdCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyT2JqZWN0KiBvZmZz
ZXRQYXIgPSBvZmZzZXRQYXJlbnQoKTsKLSAgICBpZiAoIW9mZnNldFBhcikKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaW50IHggPSB4UG9zKCkgLSBvZmZzZXRQYXItPmJvcmRlckxlZnQoKTsKLSAg
ICBpZiAoIWlzUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlmIChpc1JlbFBvc2l0aW9uZWQoKSkK
LSAgICAgICAgICAgIHggKz0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94Kj4odGhpcyktPnJl
bGF0aXZlUG9zaXRpb25PZmZzZXRYKCk7Ci0gICAgICAgIFJlbmRlck9iamVjdCogY3VyciA9IHBh
cmVudCgpOwotICAgICAgICB3aGlsZSAoY3VyciAmJiBjdXJyICE9IG9mZnNldFBhcikgewotICAg
ICAgICAgICAgeCArPSBjdXJyLT54UG9zKCk7Ci0gICAgICAgICAgICBjdXJyID0gY3Vyci0+cGFy
ZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldFBhci0+aXNCb2R5KCkgJiYgIW9m
ZnNldFBhci0+aXNSZWxQb3NpdGlvbmVkKCkgJiYgIW9mZnNldFBhci0+aXNQb3NpdGlvbmVkKCkp
Ci0gICAgICAgICAgICB4ICs9IG9mZnNldFBhci0+eFBvcygpOwotICAgIH0KLSAgICByZXR1cm4g
eDsKLX0KLQotaW50IFJlbmRlck9iamVjdDo6b2Zmc2V0VG9wKCkgY29uc3QKLXsKLSAgICBSZW5k
ZXJPYmplY3QqIG9mZnNldFBhciA9IG9mZnNldFBhcmVudCgpOwotICAgIGlmICghb2Zmc2V0UGFy
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpbnQgeSA9IHlQb3MoKSAtIGJvcmRlclRvcEV4dHJh
KCkgLSBvZmZzZXRQYXItPmJvcmRlclRvcCgpOwotICAgIGlmICghaXNQb3NpdGlvbmVkKCkpIHsK
LSAgICAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgeSArPSBzdGF0aWNf
Y2FzdDxjb25zdCBSZW5kZXJCb3gqPih0aGlzKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldFkoKTsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gcGFyZW50KCk7Ci0gICAgICAgIHdoaWxlIChj
dXJyICYmIGN1cnIgIT0gb2Zmc2V0UGFyKSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnItPmlzVGFi
bGVSb3coKSkKLSAgICAgICAgICAgICAgICB5ICs9IGN1cnItPnlQb3MoKTsKLSAgICAgICAgICAg
IGN1cnIgPSBjdXJyLT5wYXJlbnQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0UGFy
LT5pc0JvZHkoKSAmJiAhb2Zmc2V0UGFyLT5pc1JlbFBvc2l0aW9uZWQoKSAmJiAhb2Zmc2V0UGFy
LT5pc1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHkgKz0gb2Zmc2V0UGFyLT55UG9zKCk7Ci0g
ICAgfQotICAgIHJldHVybiB5OwotfQotCi1SZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6b2Zm
c2V0UGFyZW50KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSXQgZmVlbHMgbGlrZSB0aGlzIGZ1
bmN0aW9uIGNvdWxkIGFsbW9zdCBiZSB3cml0dGVuIHVzaW5nIGNvbnRhaW5pbmcgYmxvY2tzLgot
ICAgIGlmIChpc0JvZHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIHNraXBUYWJs
ZXMgPSBpc1Bvc2l0aW9uZWQoKSB8fCBpc1JlbFBvc2l0aW9uZWQoKTsKLSAgICBmbG9hdCBjdXJy
Wm9vbSA9IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBSZW5kZXJPYmplY3QqIGN1cnIg
PSBwYXJlbnQoKTsKLSAgICB3aGlsZSAoY3VyciAmJiAoIWN1cnItPmVsZW1lbnQoKSB8fAotICAg
ICAgICAgICAgICAgICAgICAoIWN1cnItPmlzUG9zaXRpb25lZCgpICYmICFjdXJyLT5pc1JlbFBv
c2l0aW9uZWQoKSAmJiAhY3Vyci0+aXNCb2R5KCkpKSkgewotICAgICAgICBOb2RlKiBlbGVtZW50
ID0gY3Vyci0+ZWxlbWVudCgpOwotICAgICAgICBpZiAoIXNraXBUYWJsZXMgJiYgZWxlbWVudCkg
ewotICAgICAgICAgICAgYm9vbCBpc1RhYmxlRWxlbWVudCA9IGVsZW1lbnQtPmhhc1RhZ05hbWUo
dGFibGVUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+
aGFzVGFnTmFtZSh0ZFRhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtZW50LT5oYXNUYWdOYW1lKHRoVGFnKTsKLQotI2lmIEVOQUJMRShXTUwpCi0gICAgICAgICAg
ICBpZiAoIWlzVGFibGVFbGVtZW50ICYmIGVsZW1lbnQtPmlzV01MRWxlbWVudCgpKQotICAgICAg
ICAgICAgICAgIGlzVGFibGVFbGVtZW50ID0gZWxlbWVudC0+aGFzVGFnTmFtZShXTUxOYW1lczo6
dGFibGVUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5o
YXNUYWdOYW1lKFdNTE5hbWVzOjp0ZFRhZyk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgaWYgKGlz
VGFibGVFbGVtZW50KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZmxvYXQgbmV3Wm9vbSA9IGN1cnItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAg
ICAgaWYgKGN1cnJab29tICE9IG5ld1pvb20pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y3Vyclpvb20gPSBuZXdab29tOwotICAgICAgICBjdXJyID0gY3Vyci0+cGFyZW50KCk7Ci0gICAg
fQotICAgIHJldHVybiBjdXJyOwotfQotCiBpbnQgUmVuZGVyT2JqZWN0Ojp2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFy
U2l6ZSgpID8gbGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIDogMDsKQEAgLTU5MSw1
MiArNTE0LDYgQEAgaW50IFJlbmRlck9iamVjdDo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaQogICAg
IHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPmhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IDA7CiB9CiAKLS8vIE1vcmUgSUUgZXh0ZW5zaW9ucy4g
IGNsaWVudFdpZHRoIGFuZCBjbGllbnRIZWlnaHQgcmVwcmVzZW50IHRoZSBpbnRlcmlvciBvZiBh
biBvYmplY3QKLS8vIGV4Y2x1ZGluZyBib3JkZXIgYW5kIHNjcm9sbGJhci4KLWludCBSZW5kZXJP
YmplY3Q6OmNsaWVudFdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gd2lkdGgoKSAtIGJvcmRl
ckxlZnQoKSAtIGJvcmRlclJpZ2h0KCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7Ci19Ci0K
LWludCBSZW5kZXJPYmplY3Q6OmNsaWVudEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhl
aWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoKTsKLX0KLQotLy8gc2Nyb2xsV2lkdGgvc2Nyb2xsSGVpZ2h0IHdpbGwgYmUgdGhl
IHNhbWUgYXMgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IHVubGVzcyB0aGUKLS8vIG9iamVjdCBo
YXMgb3ZlcmZsb3c6aGlkZGVuL3Njcm9sbC9hdXRvIHNwZWNpZmllZCBhbmQgYWxzbyBoYXMgb3Zl
cmZsb3cuCi1pbnQgUmVuZGVyT2JqZWN0OjpzY3JvbGxXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGhhc092ZXJmbG93Q2xpcCgpID8gbGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKSA6IG92ZXJmbG93
V2lkdGgoKTsKLX0KLQotaW50IFJlbmRlck9iamVjdDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgPyBsYXllcigpLT5zY3JvbGxIZWlnaHQoKSA6
IG92ZXJmbG93SGVpZ2h0KCk7Ci19Ci0KLWludCBSZW5kZXJPYmplY3Q6OnNjcm9sbExlZnQoKSBj
b25zdAotewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSA/IGxheWVyKCktPnNjcm9sbFhP
ZmZzZXQoKSA6IDA7Ci19Ci0KLWludCBSZW5kZXJPYmplY3Q6OnNjcm9sbFRvcCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpID8gbGF5ZXIoKS0+c2Nyb2xsWU9mZnNldCgp
IDogMDsKLX0KLQotdm9pZCBSZW5kZXJPYmplY3Q6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQp
Ci17Ci0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICBsYXllcigpLT5zY3JvbGxU
b1hPZmZzZXQobmV3TGVmdCk7Ci19Ci0KLXZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTY3JvbGxUb3Ao
aW50IG5ld1RvcCkKLXsKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIGxheWVy
KCktPnNjcm9sbFRvWU9mZnNldChuZXdUb3ApOwotfQotCiBib29sIFJlbmRlck9iamVjdDo6c2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LCBmbG9hdCBtdWx0aXBsaWVyKQogewogICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsK
QEAgLTY3Niw3ICs1NTMsNyBAQCBib29sIFJlbmRlck9iamVjdDo6aGFzU3RhdGljWSgpIGNvbnN0
CiAgICAgcmV0dXJuIChzdHlsZSgpLT50b3AoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5ib3R0b20o
KS5pc0F1dG8oKSkgfHwgc3R5bGUoKS0+dG9wKCkuaXNTdGF0aWMoKTsKIH0KIAotdm9pZCBSZW5k
ZXJPYmplY3Q6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyT2Jq
ZWN0KikKK3ZvaWQgUmVuZGVyT2JqZWN0OjptYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9y
TGF5b3V0KFJlbmRlckJveCopCiB7CiB9CiAKQEAgLTE2OTcsOTIgKzE1NzQsNiBAQCB2b2lkIFJl
bmRlck9iamVjdDo6cGFpbnRCb3hTaGFkb3coR3JhcGhpCiAgICAgfQogfQogCi12b2lkIFJlbmRl
ck9iamVjdDo6YWRkTGluZUJveFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIHVuc2lnbmVkLCB1bnNp
Z25lZCwgYm9vbCkKLXsKLX0KLQotdm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwpCi17Ci0g
ICAgLy8gRm9yIGJsb2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQgYW5kIGluY2x1ZGUg
bWFyZ2lucyBzbyB0aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKLSAgICAvLyBpbmxpbmUgYm94
ZXMgYWJvdmUgYW5kIGJlbG93IHVzICh0aHVzIGdldHRpbmcgbWVyZ2VkIHdpdGggdGhlbSB0byBm
b3JtIGEgc2luZ2xlIGlycmVndWxhcgotICAgIC8vIHNoYXBlKS4KLSAgICBSZW5kZXJGbG93KiBj
b250aW51YXRpb24gPSB2aXJ0dWFsQ29udGludWF0aW9uKCk7Ci0gICAgaWYgKHRvcExldmVsICYm
IGNvbnRpbnVhdGlvbikgewotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHkgLSBj
b2xsYXBzZWRNYXJnaW5Ub3AoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgo
KSwgaGVpZ2h0KCkgKyBjb2xsYXBzZWRNYXJnaW5Ub3AoKSArIGNvbGxhcHNlZE1hcmdpbkJvdHRv
bSgpKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbi0+YWJzb2x1dGVSZWN0cyhyZWN0cywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0geFBvcygpICsgY29udGludWF0aW9u
LT5jb250YWluaW5nQmxvY2soKS0+eFBvcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHkgLSB5UG9zKCkgKyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9jaygpLT55
UG9zKCksIHRvcExldmVsKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmVjdHMuYXBwZW5kKEludFJl
Y3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJC
b3R0b21FeHRyYSgpKSk7Ci19Ci0KLUludFJlY3QgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5k
aW5nQm94UmVjdChib29sIHVzZVRyYW5zZm9ybXMpCi17Ci0gICAgaWYgKHVzZVRyYW5zZm9ybXMp
IHsKLSAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgICAgIGFic29sdXRlUXVh
ZHMocXVhZHMpOwotCi0gICAgICAgIHNpemVfdCBuID0gcXVhZHMuc2l6ZSgpOwotICAgICAgICBp
ZiAoIW4pCi0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIAotICAgICAgICBJbnRS
ZWN0IHJlc3VsdCA9IHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAxOyBpIDwgbjsgKytpKQotICAgICAgICAgICAgcmVzdWx0LnVuaXRlKHF1
YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLQotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7Ci0gICAg
VmVjdG9yPEludFJlY3Q+IHJlY3RzOwotICAgIGFic29sdXRlUmVjdHMocmVjdHMsIGFic1Bvcy54
KCksIGFic1Bvcy55KCkpOwotCi0gICAgc2l6ZV90IG4gPSByZWN0cy5zaXplKCk7Ci0gICAgaWYg
KCFuKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgSW50UmVjdCByZXN1bHQgPSBy
ZWN0c1swXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG47ICsraSkKLSAgICAgICAgcmVz
dWx0LnVuaXRlKHJlY3RzW2ldKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFJlbmRl
ck9iamVjdDo6Y29sbGVjdEFic29sdXRlTGluZUJveFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jiwg
dW5zaWduZWQsIHVuc2lnbmVkLCBib29sKQotewotfQotCi12b2lkIFJlbmRlck9iamVjdDo6YWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wgdG9wTGV2ZWwpCi17Ci0g
ICAgLy8gRm9yIGJsb2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQgYW5kIGluY2x1ZGUg
bWFyZ2lucyBzbyB0aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKLSAgICAvLyBpbmxpbmUgYm94
ZXMgYWJvdmUgYW5kIGJlbG93IHVzICh0aHVzIGdldHRpbmcgbWVyZ2VkIHdpdGggdGhlbSB0byBm
b3JtIGEgc2luZ2xlIGlycmVndWxhcgotICAgIC8vIHNoYXBlKS4KLSAgICBSZW5kZXJGbG93KiBj
b250aW51YXRpb24gPSB2aXJ0dWFsQ29udGludWF0aW9uKCk7Ci0gICAgaWYgKHRvcExldmVsICYm
IGNvbnRpbnVhdGlvbikgewotICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0KDAsIC1jb2xsYXBz
ZWRNYXJnaW5Ub3AoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLCBoZWln
aHQoKSArIGNvbGxhcHNlZE1hcmdpblRvcCgpICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCkpOwot
ICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChsb2NhbFJlY3QpKTsKLSAg
ICAgICAgY29udGludWF0aW9uLT5hYnNvbHV0ZVF1YWRzKHF1YWRzLCB0b3BMZXZlbCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0
b21FeHRyYSgpKSkpOwotfQotCi12b2lkIFJlbmRlck9iamVjdDo6YWRkQWJzb2x1dGVSZWN0Rm9y
TGF5ZXIoSW50UmVjdCYgcmVzdWx0KQotewotICAgIGlmIChoYXNMYXllcigpKQotICAgICAgICBy
ZXN1bHQudW5pdGUoYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7Ci0gICAgZm9yIChSZW5kZXJP
YmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50
LT5uZXh0U2libGluZygpKQotICAgICAgICBjdXJyZW50LT5hZGRBYnNvbHV0ZVJlY3RGb3JMYXll
cihyZXN1bHQpOwotfQotCi1JbnRSZWN0IFJlbmRlck9iamVjdDo6cGFpbnRpbmdSb290UmVjdChJ
bnRSZWN0JiB0b3BMZXZlbFJlY3QpCi17Ci0gICAgSW50UmVjdCByZXN1bHQgPSBhYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpOwotICAgIHRvcExldmVsUmVjdCA9IHJlc3VsdDsKLSAgICBmb3IgKFJl
bmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1
cnJlbnQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGN1cnJlbnQtPmFkZEFic29sdXRlUmVjdEZv
ckxheWVyKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogdm9pZCBSZW5kZXJPYmpl
Y3Q6OmFkZFBERlVSTFJlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKQEAgLTE3OTYsMjMgKzE1ODcsNyBA
QCB2b2lkIFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChHcmFwaGljCiAgICAgY29udGV4dC0+
c2V0VVJMRm9yUmVjdChub2RlLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKSwgcmVjdCk7
CiB9CiAKLQotdm9pZCBSZW5kZXJPYmplY3Q6OmFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsIGludCB0eSkKLXsKLSAgICAvLyBGb3IgYmxv
Y2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5zIHNvIHRo
YXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRoZQotICAgIC8vIGlubGluZSBib3hlcyBhYm92ZSBhbmQg
YmVsb3cgdXMgKHRodXMgZ2V0dGluZyBtZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0gYSBzaW5nbGUg
aXJyZWd1bGFyCi0gICAgLy8gc2hhcGUpLgotICAgIFJlbmRlckZsb3cqIGNvbnRpbnVhdGlvbiA9
IHZpcnR1YWxDb250aW51YXRpb24oKTsKLSAgICBpZiAoY29udGludWF0aW9uKSB7Ci0gICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+YWRkRm9jdXNSaW5nUmVjdChJbnRSZWN0KHR4LCB0eSAtIGNvbGxh
cHNlZE1hcmdpblRvcCgpLCB3aWR0aCgpLCBoZWlnaHQoKSArIGNvbGxhcHNlZE1hcmdpblRvcCgp
ICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCkpKTsKLSAgICAgICAgY29udGludWF0aW9uLT5hZGRG
b2N1c1JpbmdSZWN0cyhncmFwaGljc0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHggLSB4UG9zKCkgKyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9j
aygpLT54UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkg
LSB5UG9zKCkgKyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9jaygpLT55UG9zKCkpOwotICAg
IH0gZWxzZQotICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZEZvY3VzUmluZ1JlY3QoSW50UmVj
dCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyT2JqZWN0Ojpw
YWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwgaW50
IHR5LCBpbnQgdywgaW50IGgsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKK3ZvaWQgUmVuZGVy
T2JqZWN0OjpwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGlu
dCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9v
bCBvbmx5VXNlUGFzc2VkSW5Cb3VuZHMpCiB7CiAgICAgaWYgKCFoYXNPdXRsaW5lKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE4MzEsNyArMTYwNiw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWlu
dE91dGxpbmUoR3JhcGhpY3MKICAgICAgICAgaWYgKCF0aGVtZSgpLT5zdXBwb3J0c0ZvY3VzUmlu
ZyhzdHlsZSkpIHsKICAgICAgICAgICAgIC8vIE9ubHkgcGFpbnQgdGhlIGZvY3VzIHJpbmcgYnkg
aGFuZCBpZiB0aGUgdGhlbWUgaXNuJ3QgYWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgogICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5pbml0Rm9jdXNSaW5nKG93LCBvZmZzZXQpOwotICAg
ICAgICAgICAgaWYgKHN0eWxlLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSkKKyAgICAgICAgICAgIGlm
IChzdHlsZS0+b3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIW9ubHlVc2VQYXNzZWRJbkJvdW5kcykK
ICAgICAgICAgICAgICAgICBhZGRGb2N1c1JpbmdSZWN0cyhncmFwaGljc0NvbnRleHQsIHR4LCB0
eSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYWRkUERGVVJMUmVjdChncmFw
aGljc0NvbnRleHQsIGdyYXBoaWNzQ29udGV4dC0+Zm9jdXNSaW5nQm91bmRpbmdSZWN0KCkpOwpA
QCAtMTg2NCw2ICsxNjM5LDU3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUoR3Jh
cGhpY3MKICAgICAgICAgICAgICAgIEJTQm90dG9tLCBDb2xvcihvYyksIHN0eWxlLT5jb2xvcigp
LCBvcywgb3csIG93KTsKIH0KIAordm9pZCBSZW5kZXJPYmplY3Q6OmFkZExpbmVCb3hSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJvb2wpCit7Cit9CisKK0ludFJl
Y3QgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdChib29sIHVzZVRyYW5zZm9y
bXMpCit7CisgICAgaWYgKHVzZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgVmVjdG9yPEZsb2F0UXVh
ZD4gcXVhZHM7CisgICAgICAgIGFic29sdXRlUXVhZHMocXVhZHMpOworCisgICAgICAgIHNpemVf
dCBuID0gcXVhZHMuc2l6ZSgpOworICAgICAgICBpZiAoIW4pCisgICAgICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworICAgIAorICAgICAgICBJbnRSZWN0IHJlc3VsdCA9IHF1YWRzWzBdLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbjsgKytp
KQorICAgICAgICAgICAgcmVzdWx0LnVuaXRlKHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94
KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEZsb2F0UG9pbnQgYWJz
UG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CisgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOworICAg
IGFic29sdXRlUmVjdHMocmVjdHMsIGFic1Bvcy54KCksIGFic1Bvcy55KCkpOworCisgICAgc2l6
ZV90IG4gPSByZWN0cy5zaXplKCk7CisgICAgaWYgKCFuKQorICAgICAgICByZXR1cm4gSW50UmVj
dCgpOworCisgICAgSW50UmVjdCByZXN1bHQgPSByZWN0c1swXTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMTsgaSA8IG47ICsraSkKKyAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3RzW2ldKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFJlbmRlck9iamVjdDo6YWRkQWJzb2x1dGVSZWN0Rm9y
TGF5ZXIoSW50UmVjdCYgcmVzdWx0KQoreworICAgIGlmIChoYXNMYXllcigpKQorICAgICAgICBy
ZXN1bHQudW5pdGUoYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CisgICAgZm9yIChSZW5kZXJP
YmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50
LT5uZXh0U2libGluZygpKQorICAgICAgICBjdXJyZW50LT5hZGRBYnNvbHV0ZVJlY3RGb3JMYXll
cihyZXN1bHQpOworfQorCitJbnRSZWN0IFJlbmRlck9iamVjdDo6cGFpbnRpbmdSb290UmVjdChJ
bnRSZWN0JiB0b3BMZXZlbFJlY3QpCit7CisgICAgSW50UmVjdCByZXN1bHQgPSBhYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpOworICAgIHRvcExldmVsUmVjdCA9IHJlc3VsdDsKKyAgICBmb3IgKFJl
bmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1
cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGN1cnJlbnQtPmFkZEFic29sdXRlUmVjdEZv
ckxheWVyKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBSZW5kZXJPYmpl
Y3Q6OnBhaW50KFBhaW50SW5mbyYgLypwYWludEluZm8qLywgaW50IC8qdHgqLywgaW50IC8qdHkq
LykKIHsKIH0KQEAgLTI0MzAsNyArMjI1Niw3IEBAIEZsb2F0UG9pbnQgUmVuZGVyT2JqZWN0Ojps
b2NhbFRvQWJzb2x1dGUKIHsKICAgICBSZW5kZXJPYmplY3QqIG8gPSBwYXJlbnQoKTsKICAgICBp
ZiAobykgewotICAgICAgICBsb2NhbFBvaW50Lm1vdmUoMC4wZiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG8tPmJvcmRlclRvcEV4dHJhKCkpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3ZlKDAuMGYsIHN0
YXRpY19jYXN0PGZsb2F0PihvLT5pbnRyaW5zaWNQYWRkaW5nVG9wKCkpKTsKICAgICAgICAgaWYg
KG8tPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICAgICAgbG9jYWxQb2ludCAtPSBvLT5sYXll
cigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIG8tPmxvY2FsVG9B
YnNvbHV0ZShsb2NhbFBvaW50LCBmaXhlZCwgdXNlVHJhbnNmb3Jtcyk7CkBAIC0yNDQ0LDcgKzIy
NzAsNyBAQCBGbG9hdFBvaW50IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUb0xvY2FsCiAgICAgUmVu
ZGVyT2JqZWN0KiBvID0gcGFyZW50KCk7CiAgICAgaWYgKG8pIHsKICAgICAgICAgRmxvYXRQb2lu
dCBsb2NhbFBvaW50ID0gby0+YWJzb2x1dGVUb0xvY2FsKGNvbnRhaW5lclBvaW50LCBmaXhlZCwg
dXNlVHJhbnNmb3Jtcyk7Ci0gICAgICAgIGxvY2FsUG9pbnQubW92ZSgwLjBmLCAtc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG8tPmJvcmRlclRvcEV4dHJhKCkpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3Zl
KDAuMGYsIC1zdGF0aWNfY2FzdDxmbG9hdD4oby0+aW50cmluc2ljUGFkZGluZ1RvcCgpKSk7CiAg
ICAgICAgIGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgICAgIGxvY2FsUG9pbnQg
Kz0gby0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiBs
b2NhbFBvaW50OwpAQCAtMjQ1Nyw3ICsyMjgzLDcgQEAgRmxvYXRRdWFkIFJlbmRlck9iamVjdDo6
bG9jYWxUb0Fic29sdXRlUQogICAgIFJlbmRlck9iamVjdCogbyA9IHBhcmVudCgpOwogICAgIGlm
IChvKSB7CiAgICAgICAgIEZsb2F0UXVhZCBxdWFkID0gbG9jYWxRdWFkOwotICAgICAgICBxdWFk
Lm1vdmUoMC4wZiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG8tPmJvcmRlclRvcEV4dHJhKCkpKTsKKyAg
ICAgICAgcXVhZC5tb3ZlKDAuMGYsIHN0YXRpY19jYXN0PGZsb2F0PihvLT5pbnRyaW5zaWNQYWRk
aW5nVG9wKCkpKTsKICAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICAg
ICAgcXVhZCAtPSBvLT5sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICAgICAg
cmV0dXJuIG8tPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZCwgZml4ZWQpOwpAQCAtMjQ3MSw3ICsy
Mjk3LDcgQEAgSW50U2l6ZSBSZW5kZXJPYmplY3Q6Om9mZnNldEZyb21Db250YWluZQogICAgIEFT
U0VSVChvID09IGNvbnRhaW5lcigpKTsKIAogICAgIEludFNpemUgb2Zmc2V0OwotICAgIG9mZnNl
dC5leHBhbmQoMCwgby0+Ym9yZGVyVG9wRXh0cmEoKSk7CisgICAgb2Zmc2V0LmV4cGFuZCgwLCBv
LT5pbnRyaW5zaWNQYWRkaW5nVG9wKCkpOwogCiAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgp
KQogICAgICAgICBvZmZzZXQgLT0gby0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7
CkBAIC0yNTMzLDcgKzIzNTksNyBAQCBib29sIFJlbmRlck9iamVjdDo6aGFzT3V0bGluZUFubm90
YXRpb24oCiAgICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlzTGluaygpICYmIGRv
Y3VtZW50KCktPnByaW50aW5nKCk7CiB9CiAKLVJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Ojpj
b250YWluZXIoKSBjb25zdAorUmVuZGVyQm94KiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5lcigpIGNv
bnN0CiB7CiAgICAgLy8gVGhpcyBtZXRob2QgaXMgZXh0cmVtZWx5IHNpbWlsYXIgdG8gY29udGFp
bmluZ0Jsb2NrKCksIGJ1dCB3aXRoIGEgZmV3IG5vdGFibGUKICAgICAvLyBleGNlcHRpb25zLgpA
QCAtMjU0Nyw3ICsyMzczLDcgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5l
cigpIAogICAgIFJlbmRlck9iamVjdCogbyA9IHBhcmVudCgpOwogCiAgICAgaWYgKGlzVGV4dCgp
KQotICAgICAgICByZXR1cm4gbzsKKyAgICAgICAgcmV0dXJuIG8gJiYgby0+aXNCb3goKSA/IHN0
YXRpY19jYXN0PFJlbmRlckJveCo+KG8pIDogMDsKIAogICAgIEVQb3NpdGlvbiBwb3MgPSBtX3N0
eWxlLT5wb3NpdGlvbigpOwogICAgIGlmIChwb3MgPT0gRml4ZWRQb3NpdGlvbikgewpAQCAtMjU1
Nyw2ICsyMzgzLDggQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5lcigpIAog
ICAgICAgICAvLyBhcyB3ZSBjYW4uICBJZiB3ZSdyZSBpbiB0aGUgdHJlZSwgd2UnbGwgZ2V0IHRo
ZSByb290LiAgSWYgd2UKICAgICAgICAgLy8gYXJlbid0IHdlJ2xsIGdldCB0aGUgcm9vdCBvZiBv
dXIgbGl0dGxlIHN1YnRyZWUgKG1vc3QgbGlrZWx5CiAgICAgICAgIC8vIHdlJ2xsIGp1c3QgcmV0
dXJuIDApLgorICAgICAgICAvLyBGSVhNRTogVGhlIGRlZmluaXRpb24gb2YgdmlldygpIGhhcyBj
aGFuZ2VkIHRvIG5vdCBjcmF3bCB1cCB0aGUgcmVuZGVyIHRyZWUuICBJdCBtaWdodAorICAgICAg
ICAvLyBiZSBzYWZlIG5vdyB0byB1c2UgaXQuCiAgICAgICAgIHdoaWxlIChvICYmIG8tPnBhcmVu
dCgpICYmICEoby0+aGFzVHJhbnNmb3JtKCkgJiYgby0+aXNSZW5kZXJCbG9jaygpKSkKICAgICAg
ICAgICAgIG8gPSBvLT5wYXJlbnQoKTsKICAgICB9IGVsc2UgaWYgKHBvcyA9PSBBYnNvbHV0ZVBv
c2l0aW9uKSB7CkBAIC0yNTY3LDcgKzIzOTUsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVj
dDo6Y29udGFpbmVyKCkgCiAgICAgICAgICAgICBvID0gby0+cGFyZW50KCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIG87CisgICAgcmV0dXJuIG8gJiYgby0+aXNCb3goKSA/IHN0YXRpY19jYXN0PFJl
bmRlckJveCo+KG8pIDogMDsKIH0KIAogLy8gVGhpcyBjb2RlIGhhcyBiZWVuIHdyaXR0ZW4gdG8g
YW50aWNpcGF0ZSB0aGUgYWRkaXRpb24gb2YgQ1NTMy06Om91dHNpZGUgYW5kIDo6aW5zaWRlIGdl
bmVyYXRlZApAQCAtMjU5NiwxNCArMjQyNCwxNCBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVtb3Zl
RnJvbU9iamVjdExpc3RzCiAgICAgICAgIH0KIAogICAgICAgICBpZiAob3V0ZXJtb3N0QmxvY2sp
Ci0gICAgICAgICAgICBvdXRlcm1vc3RCbG9jay0+bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0
c0ZvckxheW91dCh0aGlzKTsKKyAgICAgICAgICAgIG91dGVybW9zdEJsb2NrLT5tYXJrQWxsRGVz
Y2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHRoaXMp
KTsKICAgICB9CiAKICAgICBpZiAoaXNQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBwOwogICAgICAgICBmb3IgKHAgPSBwYXJlbnQoKTsgcDsgcCA9IHAtPnBhcmVudCgpKSB7
CiAgICAgICAgICAgICBpZiAocC0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ocCktPnJlbW92ZVBvc2l0aW9uZWRPYmplY3QodGhpcyk7
CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihwKS0+cmVtb3ZlUG9z
aXRpb25lZE9iamVjdChzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPih0aGlzKSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0yNzM0LDE0ICsyNTYyLDE0IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRh
dGVIaXRUZXN0UmVzdWx0KEgKICAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+
cmVuZGVyZXIoKS0+dmlydHVhbENvbnRpbnVhdGlvbigpICYmIG5vZGUtPnJlbmRlcmVyKCkgIT0g
dGhpcykgewogICAgICAgICAgICAgLy8gV2UncmUgaW4gdGhlIGNvbnRpbnVhdGlvbiBvZiBhIHNw
bGl0IGlubGluZS4gIEFkanVzdCBvdXIgbG9jYWwgcG9pbnQgdG8gYmUgaW4gdGhlIGNvb3JkaW5h
dGUgc3BhY2UKICAgICAgICAgICAgIC8vIG9mIHRoZSBwcmluY2lwYWwgcmVuZGVyZXIncyBjb250
YWluaW5nIGJsb2NrLiAgVGhpcyB3aWxsIGVuZCB1cCBiZWluZyB0aGUgaW5uZXJOb25TaGFyZWRO
b2RlLgotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdEJsb2NrID0gbm9kZS0+cmVuZGVy
ZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgICAgICBSZW5kZXJCbG9jayogZmlyc3RC
bG9jayA9IG5vZGUtPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBHZXQgb3VyIGNvbnRhaW5pbmcgYmxvY2suCi0gICAgICAgICAgICBS
ZW5kZXJPYmplY3QqIGJsb2NrID0gdGhpczsKKyAgICAgICAgICAgIFJlbmRlckJveCogYmxvY2sg
PSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPih0aGlzKTsKICAgICAgICAgICAgIGlmIChpc0lubGlu
ZSgpKQogICAgICAgICAgICAgICAgIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAg
IAotICAgICAgICAgICAgbG9jYWxQb2ludC5tb3ZlKGJsb2NrLT54UG9zKCkgLSBmaXJzdEJsb2Nr
LT54UG9zKCksIGJsb2NrLT55UG9zKCkgLSBmaXJzdEJsb2NrLT55UG9zKCkpOworICAgICAgICAg
ICAgbG9jYWxQb2ludC5tb3ZlKGJsb2NrLT54KCkgLSBmaXJzdEJsb2NrLT54KCksIGJsb2NrLT55
KCkgLSBmaXJzdEJsb2NrLT55KCkpOwogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0LnNldElu
bmVyTm9kZShub2RlKTsKQEAgLTMwMDAsMTYgKzI4MjgsMTggQEAgdm9pZCBSZW5kZXJPYmplY3Q6
OnVwZGF0ZVdpZGdldFBvc2l0aW9uKAogdm9pZCBSZW5kZXJPYmplY3Q6OmFkZERhc2hib2FyZFJl
Z2lvbnMoVmVjdG9yPERhc2hib2FyZFJlZ2lvblZhbHVlPiYgcmVnaW9ucykKIHsKICAgICAvLyBD
b252ZXJ0IHRoZSBzdHlsZSByZWdpb25zIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIGlm
IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICBpZiAoc3R5bGUoKS0+dmlz
aWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgIWlzQm94KCkpCiAgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHRoaXMpOwogCiAg
ICAgY29uc3QgVmVjdG9yPFN0eWxlRGFzaGJvYXJkUmVnaW9uPiYgc3R5bGVSZWdpb25zID0gc3R5
bGUoKS0+ZGFzaGJvYXJkUmVnaW9ucygpOwogICAgIHVuc2lnbmVkIGksIGNvdW50ID0gc3R5bGVS
ZWdpb25zLnNpemUoKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAg
ICBTdHlsZURhc2hib2FyZFJlZ2lvbiBzdHlsZVJlZ2lvbiA9IHN0eWxlUmVnaW9uc1tpXTsKIAot
ICAgICAgICBpbnQgdyA9IHdpZHRoKCk7Ci0gICAgICAgIGludCBoID0gaGVpZ2h0KCk7CisgICAg
ICAgIGludCB3ID0gYm94LT53aWR0aCgpOworICAgICAgICBpbnQgaCA9IGJveC0+aGVpZ2h0KCk7
CiAKICAgICAgICAgRGFzaGJvYXJkUmVnaW9uVmFsdWUgcmVnaW9uOwogICAgICAgICByZWdpb24u
bGFiZWwgPSBzdHlsZVJlZ2lvbi5sYWJlbDsKQEAgLTMxMjksMjYgKzI5NTksNiBAQCBpbnQgUmVu
ZGVyT2JqZWN0OjptYXhCb3R0b21NYXJnaW4oYm9vbCBwCiAgICAgcmV0dXJuIHBvc2l0aXZlID8g
bWF4KDAsIG1hcmdpbkJvdHRvbSgpKSA6IC1taW4oMCwgbWFyZ2luQm90dG9tKCkpOwogfQogCi1J
bnRSZWN0IFJlbmRlck9iamVjdDo6Y29udGVudEJveCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElu
dFJlY3QoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCksCi0gICAgICAgIGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpOwotfQotCi1J
bnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3QKLXsKLSAgICBJ
bnRSZWN0IHJlY3QgPSBjb250ZW50Qm94KCk7Ci0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2Nh
bFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7Ci0gICAgcmVjdC5tb3ZlKGFic1Bv
cy54KCksIGFic1Bvcy55KCkpOwotICAgIHJldHVybiByZWN0OwotfQotCi1GbG9hdFF1YWQgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJl
Y3QgPSBjb250ZW50Qm94KCk7Ci0gICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRS
ZWN0KHJlY3QpKTsKLX0KLQogdm9pZCBSZW5kZXJPYmplY3Q6OmFkanVzdFJlY3RGb3JPdXRsaW5l
QW5kU2hhZG93KEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgaW50IG91dGxpbmVTaXplID0g
IWlzSW5saW5lKCkgJiYgdmlydHVhbENvbnRpbnVhdGlvbigpID8gdmlydHVhbENvbnRpbnVhdGlv
bigpLT5zdHlsZSgpLT5vdXRsaW5lU2l6ZSgpIDogc3R5bGUoKS0+b3V0bGluZVNpemUoKTsKQEAg
LTMxNzQsMTggKzI5ODQsNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRqdXN0UmVjdEZvck91dGxp
bmVBCiAgICAgICAgIHJlY3QuaW5mbGF0ZShvdXRsaW5lU2l6ZSk7CiB9CiAKLUludFJlY3QgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdAotewotICAgIEludFJlY3Qg
Ym94ID0gYm9yZGVyQm94KCk7Ci0gICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3coYm94
KTsKLQotICAgIEZsb2F0UXVhZCBhYnNPdXRsaW5lUXVhZCA9IGxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRSZWN0KGJveCkpOwotICAgIGJveCA9IGFic091dGxpbmVRdWFkLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7Ci0gICAgYm94Lm1vdmUodmlldygpLT5sYXlvdXREZWx0YSgpKTsKLQotICAgIHJl
dHVybiBib3g7Ci19Ci0KIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1Njcm9sbGFibGUoKSBjb25zdAog
ewogICAgIFJlbmRlckxheWVyKiBsID0gZW5jbG9zaW5nTGF5ZXIoKTsKQEAgLTMyMDIsNjMgKzMw
MDAsNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltCiAgICAgaW1h
Z2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4oaW1hZ2UpLCByZWN0KTsKIH0K
IAotSW50UmVjdCBSZW5kZXJPYmplY3Q6OnJlZmxlY3Rpb25Cb3goKSBjb25zdAotewotICAgIElu
dFJlY3QgcmVzdWx0OwotICAgIGlmICghbV9zdHlsZS0+Ym94UmVmbGVjdCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIEludFJlY3QgYm94ID0gYm9yZGVyQm94KCk7Ci0gICAgcmVzdWx0
ID0gYm94OwotICAgIHN3aXRjaCAobV9zdHlsZS0+Ym94UmVmbGVjdCgpLT5kaXJlY3Rpb24oKSkg
ewotICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxvdzoKLSAgICAgICAgICAgIHJlc3VsdC5tb3Zl
KDAsIGJveC5oZWlnaHQoKSArIHJlZmxlY3Rpb25PZmZzZXQoKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBSZWZsZWN0aW9uQWJvdmU6Ci0gICAgICAgICAgICByZXN1bHQubW92
ZSgwLCAtYm94LmhlaWdodCgpIC0gcmVmbGVjdGlvbk9mZnNldCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFJlZmxlY3Rpb25MZWZ0OgotICAgICAgICAgICAgcmVzdWx0Lm1v
dmUoLWJveC53aWR0aCgpIC0gcmVmbGVjdGlvbk9mZnNldCgpLCAwKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFJlZmxlY3Rpb25SaWdodDoKLSAgICAgICAgICAgIHJlc3VsdC5t
b3ZlKGJveC53aWR0aCgpICsgcmVmbGVjdGlvbk9mZnNldCgpLCAwKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbnQgUmVuZGVyT2JqZWN0Ojpy
ZWZsZWN0aW9uT2Zmc2V0KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fc3R5bGUtPmJveFJlZmxlY3Qo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1fc3R5bGUtPmJveFJlZmxlY3QoKS0+ZGly
ZWN0aW9uKCkgPT0gUmVmbGVjdGlvbkxlZnQgfHwgbV9zdHlsZS0+Ym94UmVmbGVjdCgpLT5kaXJl
Y3Rpb24oKSA9PSBSZWZsZWN0aW9uUmlnaHQpCi0gICAgICAgIHJldHVybiBtX3N0eWxlLT5ib3hS
ZWZsZWN0KCktPm9mZnNldCgpLmNhbGNWYWx1ZShib3JkZXJCb3goKS53aWR0aCgpKTsKLSAgICBy
ZXR1cm4gbV9zdHlsZS0+Ym94UmVmbGVjdCgpLT5vZmZzZXQoKS5jYWxjVmFsdWUoYm9yZGVyQm94
KCkuaGVpZ2h0KCkpOwotfQotCi1JbnRSZWN0IFJlbmRlck9iamVjdDo6cmVmbGVjdGVkUmVjdChj
b25zdCBJbnRSZWN0JiByKSBjb25zdAotewotICAgIGlmICghbV9zdHlsZS0+Ym94UmVmbGVjdCgp
KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgSW50UmVjdCBib3ggPSBib3JkZXJC
b3goKTsKLSAgICBJbnRSZWN0IHJlc3VsdCA9IHI7Ci0gICAgc3dpdGNoIChtX3N0eWxlLT5ib3hS
ZWZsZWN0KCktPmRpcmVjdGlvbigpKSB7Ci0gICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93Ogot
ICAgICAgICAgICAgcmVzdWx0LnNldFkoYm94LmJvdHRvbSgpICsgcmVmbGVjdGlvbk9mZnNldCgp
ICsgKGJveC5ib3R0b20oKSAtIHIuYm90dG9tKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFJlZmxlY3Rpb25BYm92ZToKLSAgICAgICAgICAgIHJlc3VsdC5zZXRZKGJveC55
KCkgLSByZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3guaGVpZ2h0KCkgKyAoYm94LmJvdHRvbSgpIC0g
ci5ib3R0b20oKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVmbGVjdGlv
bkxlZnQ6Ci0gICAgICAgICAgICByZXN1bHQuc2V0WChib3gueCgpIC0gcmVmbGVjdGlvbk9mZnNl
dCgpIC0gYm94LndpZHRoKCkgKyAoYm94LnJpZ2h0KCkgLSByLnJpZ2h0KCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlZmxlY3Rpb25SaWdodDoKLSAgICAgICAgICAgIHJl
c3VsdC5zZXRYKGJveC5yaWdodCgpICsgcmVmbGVjdGlvbk9mZnNldCgpICsgKGJveC5yaWdodCgp
IC0gci5yaWdodCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQogI2lmIEVOQUJMRShTVkcpCiAKIEZsb2F0UmVjdCBSZW5kZXJPYmplY3Q6OnJl
bGF0aXZlQkJveChib29sKSBjb25zdApAQCAtMzI2OCw3ICszMDA5LDcgQEAgRmxvYXRSZWN0IFJl
bmRlck9iamVjdDo6cmVsYXRpdmVCQm94KGJvbwogCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5k
ZXJPYmplY3Q6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKIHsKLSAgICByZXR1cm4gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoMSwgMCwgMCwgMSwgeFBvcygpLCB5UG9zKCkpOworICAgIHJldHVybiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpOwogfQogCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIElubGluZUZsb3dCb3g7CiBj
bGFzcyBQb3NpdGlvbjsKIGNsYXNzIFJlbmRlckFyZW5hOwogY2xhc3MgUmVuZGVyQmxvY2s7Citj
bGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJGbG93OwogY2xhc3MgUmVuZGVyRnJhbWVTZXQ7
CiBjbGFzcyBSZW5kZXJMYXllcjsKQEAgLTMyOSw2ICszMzAsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc1Bvc2l0aW9uZWQoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uZWQ7IH0gLy8gYWJzb2x1
dGUgb3IgZml4ZWQgcG9zaXRpb25pbmcKICAgICBib29sIGlzUmVsUG9zaXRpb25lZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVsUG9zaXRpb25lZDsgfSAvLyByZWxhdGl2ZSBwb3NpdGlvbmluZwogICAg
IGJvb2wgaXNUZXh0KCkgY29uc3QgIHsgcmV0dXJuIG1faXNUZXh0OyB9CisgICAgYm9vbCBpc0Jv
eCgpIGNvbnN0IHsgcmV0dXJuIG1faXNCb3g7IH0KICAgICBib29sIGlzSW5saW5lKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmxpbmU7IH0gIC8vIGlubGluZSBvYmplY3QKICAgICBib29sIGlzQ29tcGFj
dCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmRpc3BsYXkoKSA9PSBDT01QQUNUOyB9IC8vIGNv
bXBhY3Qgb2JqZWN0CiAgICAgYm9vbCBpc1J1bkluKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+
ZGlzcGxheSgpID09IFJVTl9JTjsgfSAvLyBydW4taW4gb2JqZWN0CkBAIC0zNzAsNyArMzcyLDYg
QEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaGFzVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNUcmFuc2Zvcm07IH0KICAgICBib29sIGhhc01hc2soKSBjb25zdCB7IHJldHVybiBzdHls
ZSgpICYmIHN0eWxlKCktPmhhc01hc2soKTsgfQotICAgIHZpcnR1YWwgSW50UmVjdCBtYXNrQ2xp
cFJlY3QoKSB7IHJldHVybiBib3JkZXJCb3goKTsgfQogCiBwcml2YXRlOgogICAgIGJvb2wgaW5j
bHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGhhc092ZXJmbG93Q2xp
cCgpICYmIChzdHlsZSgpLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMIHx8IHN0eWxlKCktPm92ZXJm
bG93WSgpID09IE9BVVRPKTsgfQpAQCAtMzk5LDEwICs0MDAsMTAgQEAgcHVibGljOgogICAgICAq
IHJldHVybnMgdGhlIG9iamVjdCBjb250YWluaW5nIHRoaXMgb25lLiBjYW4gYmUgZGlmZmVyZW50
IGZyb20gcGFyZW50IGZvcgogICAgICAqIHBvc2l0aW9uZWQgZWxlbWVudHMKICAgICAgKi8KLSAg
ICBSZW5kZXJPYmplY3QqIGNvbnRhaW5lcigpIGNvbnN0OworICAgIFJlbmRlckJveCogY29udGFp
bmVyKCkgY29uc3Q7CiAgICAgUmVuZGVyT2JqZWN0KiBob3ZlckFuY2VzdG9yKCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChS
ZW5kZXJPYmplY3QqIGZsb2F0VG9SZW1vdmUgPSAwKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0Fs
bERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUg
PSAwKTsKICAgICB2b2lkIG1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KGJvb2wgc2NoZWR1
bGVSZWxheW91dCA9IHRydWUsIFJlbmRlck9iamVjdCogbmV3Um9vdCA9IDApOwogICAgIHZvaWQg
c2V0TmVlZHNMYXlvdXQoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzID0gdHJ1ZSk7CiAgICAgdm9p
ZCBzZXRDaGlsZE5lZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cyA9IHRydWUpOwpA
QCAtNDIyLDcgKzQyMyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZsb2F0aW5nKGJvb2wgYiA9
IHRydWUpIHsgbV9mbG9hdGluZyA9IGI7IH0KICAgICB2b2lkIHNldElubGluZShib29sIGIgPSB0
cnVlKSB7IG1faW5saW5lID0gYjsgfQogICAgIHZvaWQgc2V0SGFzQm94RGVjb3JhdGlvbnMoYm9v
bCBiID0gdHJ1ZSkgeyBtX3BhaW50QmFja2dyb3VuZCA9IGI7IH0KLSAgICB2b2lkIHNldFJlbmRl
clRleHQoKSB7IG1faXNUZXh0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0SXNUZXh0KCkgeyBtX2lz
VGV4dCA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzQm94KCkgeyBtX2lzQm94ID0gdHJ1ZTsgfQog
ICAgIHZvaWQgc2V0UmVwbGFjZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX3JlcGxhY2VkID0gYjsgfQog
ICAgIHZvaWQgc2V0SGFzT3ZlcmZsb3dDbGlwKGJvb2wgYiA9IHRydWUpIHsgbV9oYXNPdmVyZmxv
d0NsaXAgPSBiOyB9CiAgICAgdm9pZCBzZXRIYXNMYXllcihib29sIGIgPSB0cnVlKSB7IG1faGFz
TGF5ZXIgPSBiOyB9CkBAIC00NzksNyArNDgxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdm9pZCBwYWludEJvcmRl
cihHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBS
ZW5kZXJTdHlsZSosIGJvb2wgYmVnaW4gPSB0cnVlLCBib29sIGVuZCA9IHRydWUpOwogICAgIGJv
b2wgcGFpbnROaW5lUGllY2VJbWFnZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwg
aW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IE5pbmVQaWVjZUltYWdlJiwg
Q29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKLSAgICB2b2lkIHBhaW50
T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBj
b25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcGFpbnRCb3hTaGFkb3coR3JhcGhpY3NDb250
ZXh0KiwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCwgY29uc3QgUmVuZGVyU3R5bGUqLCBi
b29sIGJlZ2luID0gdHJ1ZSwgYm9vbCBlbmQgPSB0cnVlKTsKIAogICAgIC8vIFJlbmRlckJveCBp
bXBsZW1lbnRzIHRoaXMuCkBAIC01MTksMTEgKzUyMCw2IEBAIHB1YmxpYzoKICAgICAvLyByZXBh
aW50IGFuZCBkbyBub3QgbmVlZCBhIHJlbGF5b3V0CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZy
b21FbGVtZW50KCkgeyB9CiAKLSAgICAvLyBCbG9jayBmbG93cyBzdWJjbGFzcyBhdmFpbGFibGVX
aWR0aCB0byBoYW5kbGUgbXVsdGkgY29sdW1uIGxheW91dCAoc2hyaW5raW5nIHRoZSB3aWR0aCBh
dmFpbGFibGUgdG8gY2hpbGRyZW4gd2hlbiBsYXlpbmcgb3V0LikKLSAgICB2aXJ0dWFsIGludCBh
dmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRXaWR0aCgpOyB9Ci0gICAgCi0g
ICAgdmlydHVhbCBpbnQgYXZhaWxhYmxlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVdpZGdldFBvc2l0aW9uKCk7CiAKICNpZiBFTkFCTEUoREFT
SEJPQVJEX1NVUFBPUlQpCkBAIC01NjAsNDIgKzU1NiwyMyBAQCBwdWJsaWM6CiAgICAgLy8gcmV0
dXJuIGp1c3QgdGhlIGhlaWdodCBvZiB0aGUgY29udGFpbmluZyBibG9jawogICAgIHZpcnR1YWwg
aW50IGNvbnRhaW5pbmdCbG9ja0hlaWdodCgpIGNvbnN0OwogCi0gICAgLy8gY29udGVudCBhcmVh
IChib3ggbWludXMgcGFkZGluZy9ib3JkZXIpCi0gICAgSW50UmVjdCBjb250ZW50Qm94KCkgY29u
c3Q7Ci0gICAgLy8gYWJzb2x1dGUgY29vcmRzIG9mIGNvbnRlbnQgYXJlYS4gSWdub3JlcyB0cmFu
c2Zvcm1zLgotICAgIEludFJlY3QgYWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3Q7Ci0gICAgLy8g
Y29udGVudCByZWN0IGNvbnZlcnRlZCB0byBhYnNvbHV0ZSBjb29yZHMsIHRha2luZyB0cmFuc2Zv
cm1zIGludG8gYWNjb3VudAotICAgIEZsb2F0UXVhZCBhYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29u
c3Q7Ci0gICAgCi0gICAgaW50IGNvbnRlbnRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNsaWVudFdp
ZHRoKCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCk7IH0KLSAgICBpbnQgY29udGVu
dEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNsaWVudEhlaWdodCgpIC0gcGFkZGluZ1RvcCgpIC0g
cGFkZGluZ0JvdHRvbSgpOyB9Ci0KICAgICAvLyB1c2VkIGJ5IGZsZXhpYmxlIGJveGVzIHRvIGlt
cG9zZSBhIGZsZXhlZCB3aWR0aC9oZWlnaHQgb3ZlcnJpZGUKICAgICB2aXJ0dWFsIGludCBvdmVy
cmlkZVNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBpbnQgb3ZlcnJpZGVX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGludCBvdmVycmlkZUhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcnJpZGVTaXpl
KGludCAvKm92ZXJyaWRlU2l6ZSovKSB7IH0KIAotICAgIC8vIHJlbGF0aXZlIHRvIHBhcmVudCBu
b2RlCi0gICAgdmlydHVhbCB2b2lkIHNldFBvcyhpbnQgLyp4UG9zKi8sIGludCAvKnlQb3MqLykg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFdpZHRoKGludCAvKndpZHRoKi8pIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXRIZWlnaHQoaW50IC8qaGVpZ2h0Ki8pIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgc2V0UG9zKHJlY3QueCgpLCByZWN0Lnko
KSk7IHNldFdpZHRoKHJlY3Qud2lkdGgoKSk7IHNldEhlaWdodChyZWN0LmhlaWdodCgpKTsgfQot
Ci0gICAgdmlydHVhbCBpbnQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFs
IGludCB5UG9zKCkgY29uc3QgeyByZXR1cm4gMDsgfQotCiAgICAgLy8gQ29udmVydCB0aGUgZ2l2
ZW4gbG9jYWwgcG9pbnQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMKICAgICAvLyBGSVhNRTogVGVt
cG9yYXJ5LiBJZiB1c2VUcmFuc2Zvcm1zIGlzIHRydWUsIHRha2UgdHJhbnNmb3JtcyBpbnRvIGFj
Y291bnQuIEV2ZW50dWFsbHkgbG9jYWxUb0Fic29sdXRlKCkgd2lsbCBhbHdheXMgYmUgdHJhbnNm
b3JtLWF3YXJlLgogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQ
b2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wg
dXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsKICAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgYWJz
b2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQsIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFu
c2Zvcm1zID0gZmFsc2UpIGNvbnN0OwogCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRv
IGRlYWwgd2l0aCB0aGUgZXh0cmEgdG9wIHNwYWNlIHRoYXQgY2FuIG9jY3VyIGluIHRhYmxlIGNl
bGxzIChjYWxsZWQgYm9yZGVyVG9wRXh0cmEpLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNl
ZCB0byBkZWFsIHdpdGggdGhlIGV4dHJhIHRvcCBzcGFjZSB0aGF0IGNhbiBvY2N1ciBpbiB0YWJs
ZSBjZWxscyAoY2FsbGVkIGludHJpbnNpY1BhZGRpbmdUb3ApLgogICAgIC8vIFRoZSBjaGlsZHJl
biBvZiB0aGUgY2VsbCBkbyBub3QgZmFjdG9yIHRoaXMgc3BhY2UgaW4sIHNvIHdlIGhhdmUgdG8g
YWRkIGl0IGluLiAgQW55IGNvZGUgdGhhdCB3YW50cyB0bwogICAgIC8vIGFjY3VyYXRlbHkgZGVh
bCB3aXRoIHRoZSBjb250ZW50cyBvZiBhIGNlbGwgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gaW5z
dGFkIG9mIGFic29sdXRlUG9zaXRpb24uCiAgICAgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1dGVG
b3JDb250ZW50KEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhl
ZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3QKICAgICB7Ci0gICAg
ICAgIGxvY2FsUG9pbnQubW92ZSgwLjBmLCBzdGF0aWNfY2FzdDxmbG9hdD4oYm9yZGVyVG9wRXh0
cmEoKSkpOworICAgICAgICBsb2NhbFBvaW50Lm1vdmUoMC4wZiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGludHJpbnNpY1BhZGRpbmdUb3AoKSkpOwogICAgICAgICByZXR1cm4gbG9jYWxUb0Fic29sdXRl
KGxvY2FsUG9pbnQsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zKTsKICAgICB9CiAKQEAgLTYwNSw1NSAr
NTgyLDYgQEAgcHVibGljOgogICAgIC8vIFJldHVybiB0aGUgb2Zmc2V0IGZyb20gdGhlIGNvbnRh
aW5lcigpIHJlbmRlcmVyIChleGNsdWRpbmcgdHJhbnNmb3JtcykKICAgICB2aXJ0dWFsIEludFNp
emUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqKSBjb25zdDsKIAotICAgIC8vIHdp
ZHRoIGFuZCBoZWlnaHQgYXJlIHdpdGhvdXQgbWFyZ2lucyBidXQgaW5jbHVkZSBwYWRkaW5ncyBh
bmQgYm9yZGVycwotICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQot
ICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIHZpcnR1
YWwgSW50UmVjdCBib3JkZXJCb3goKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KDAsIDAsIHdpZHRo
KCksIGhlaWdodCgpKTsgfQotICAgIC8vIEJvdW5kcyBvZiB0aGUgb3V0bGluZSBib3ggaW4gYWJz
b2x1dGUgY29vcmRzLiBSZXNwZWN0cyB0cmFuc2Zvcm1zCi0gICAgSW50UmVjdCBhYnNvbHV0ZU91
dGxpbmVCb3VuZHMoKSBjb25zdDsKLQotICAgIC8vIFRoZSBoZWlnaHQgb2YgYSBibG9jayB3aGVu
IHlvdSBpbmNsdWRlIG5vcm1hbCBmbG93IG92ZXJmbG93IHNwaWxsYWdlIG91dCBvZiB0aGUgYm90
dG9tCi0gICAgLy8gb2YgdGhlIGJsb2NrIChlLmcuLCBhIDxkaXYgc3R5bGU9ImhlaWdodDoyNXB4
Ij4gdGhhdCBoYXMgYSAxMDBweCB0YWxsIGltYWdlIGluc2lkZQotICAgIC8vIGl0IHdvdWxkIGhh
dmUgYW4gb3ZlcmZsb3cgaGVpZ2h0IG9mIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgMTAw
cHguCi0gICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dIZWlnaHQoYm9vbCAvKmluY2x1ZGVJbnRlcmlv
ciovID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gaGVpZ2h0KCk7IH0KLSAgICB2aXJ0dWFsIGludCBv
dmVyZmxvd1dpZHRoKGJvb2wgLyppbmNsdWRlSW50ZXJpb3IqLyA9IHRydWUpIGNvbnN0IHsgcmV0
dXJuIHdpZHRoKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcmZsb3dIZWlnaHQoaW50KSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcmZsb3dXaWR0aChpbnQpIHsgfQotICAgIHZpcnR1
YWwgaW50IG92ZXJmbG93TGVmdChib29sIC8qaW5jbHVkZUludGVyaW9yKi8gPSB0cnVlKSBjb25z
dCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dUb3AoYm9vbCAvKmluY2x1
ZGVJbnRlcmlvciovID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgSW50
UmVjdCBvdmVyZmxvd1JlY3QoYm9vbCAvKmluY2x1ZGVJbnRlcmlvciovID0gdHJ1ZSkgY29uc3Qg
eyByZXR1cm4gYm9yZGVyQm94KCk7IH0KLQotICAgIC8vIElFIGV4dGVuc2lvbnMuIFVzZWQgdG8g
Y2FsY3VsYXRlIG9mZnNldFdpZHRoL0hlaWdodC4gIE92ZXJyaWRkZW4gYnkgaW5saW5lcyAoUmVu
ZGVyRmxvdykKLSAgICAvLyB0byByZXR1cm4gdGhlIHJlbWFpbmluZyB3aWR0aCBvbiBhIGdpdmVu
IGxpbmUgKGFuZCB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGxpbmUpLgotICAgIHZpcnR1YWwgaW50
IG9mZnNldFdpZHRoKCkgY29uc3QgeyByZXR1cm4gd2lkdGgoKTsgfQotICAgIHZpcnR1YWwgaW50
IG9mZnNldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEo
KSArIGJvcmRlckJvdHRvbUV4dHJhKCk7IH0KLQotICAgIC8vIElFIGV4dGVuc2lvbnMuICBBbHNv
IHN1cHBvcnRlZCBieSBHZWNrby4gIFdlIG92ZXJyaWRlIGluIHJlbmRlciBmbG93IHRvIGdldCB0
aGUKLSAgICAvLyBsZWZ0IGFuZCB0b3AgY29ycmVjdC4gLWR3aAotICAgIHZpcnR1YWwgaW50IG9m
ZnNldExlZnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBvZmZzZXRUb3AoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdCogb2Zmc2V0UGFyZW50KCkgY29uc3Q7Ci0KLSAgICAvLyBN
b3JlIElFIGV4dGVuc2lvbnMuICBjbGllbnRXaWR0aCBhbmQgY2xpZW50SGVpZ2h0IHJlcHJlc2Vu
dCB0aGUgaW50ZXJpb3Igb2YgYW4gb2JqZWN0Ci0gICAgLy8gZXhjbHVkaW5nIGJvcmRlciBhbmQg
c2Nyb2xsYmFyLiAgY2xpZW50TGVmdC9Ub3AgYXJlIGp1c3QgdGhlIGJvcmRlckxlZnRXaWR0aCBh
bmQgYm9yZGVyVG9wV2lkdGguCi0gICAgaW50IGNsaWVudExlZnQoKSBjb25zdCB7IHJldHVybiBi
b3JkZXJMZWZ0KCk7IH0KLSAgICBpbnQgY2xpZW50VG9wKCkgY29uc3QgeyByZXR1cm4gYm9yZGVy
VG9wKCk7IH0KLSAgICBpbnQgY2xpZW50V2lkdGgoKSBjb25zdDsKLSAgICBpbnQgY2xpZW50SGVp
Z2h0KCkgY29uc3Q7Ci0KLSAgICAvLyBzY3JvbGxXaWR0aC9zY3JvbGxIZWlnaHQgd2lsbCBiZSB0
aGUgc2FtZSBhcyBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgdW5sZXNzIHRoZQotICAgIC8vIG9i
amVjdCBoYXMgb3ZlcmZsb3c6aGlkZGVuL3Njcm9sbC9hdXRvIHNwZWNpZmllZCBhbmQgYWxzbyBo
YXMgb3ZlcmZsb3cuCi0gICAgLy8gc2Nyb2xsTGVmdC9Ub3AgcmV0dXJuIHRoZSBjdXJyZW50IHNj
cm9sbCBwb3NpdGlvbi4gIFRoZXNlIG1ldGhvZHMgYXJlIHZpcnR1YWwgc28gdGhhdCBvYmplY3Rz
IGxpa2UKLSAgICAvLyB0ZXh0YXJlYXMgY2FuIHNjcm9sbCBzaGFkb3cgY29udGVudCAoYnV0IHBy
ZXRlbmQgdGhhdCB0aGV5IGFyZSB0aGUgb2JqZWN0cyB0aGF0IGFyZQotICAgIC8vIHNjcm9sbGlu
ZykuCi0gICAgdmlydHVhbCBpbnQgc2Nyb2xsTGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50
IHNjcm9sbFRvcCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IHNldFNjcm9sbExlZnQoaW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7
Ci0KICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVQ
cm9ncmFtYXRpY2FsbHlTY3JvbGxlZChib29sKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXV0
b3Njcm9sbCgpOwpAQCAtNjg5LDMwICs2MTcsMjcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50
IHBhZGRpbmdMZWZ0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgcGFkZGluZ1JpZ2h0KCkgY29u
c3Q7CiAKKyAgICB2aXJ0dWFsIGludCBpbnRyaW5zaWNQYWRkaW5nVG9wKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IGludHJpbnNpY1BhZGRpbmdCb3R0b20oKSBjb25zdCB7
IHJldHVybiAwOyB9CisKICAgICB2aXJ0dWFsIGludCBib3JkZXJUb3AoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5ib3JkZXJUb3BXaWR0aCgpOyB9CiAgICAgdmlydHVhbCBpbnQgYm9yZGVyQm90
dG9tKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKTsgfQotICAg
IHZpcnR1YWwgaW50IGJvcmRlclRvcEV4dHJhKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgaW50IGJvcmRlckJvdHRvbUV4dHJhKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZp
cnR1YWwgaW50IGJvcmRlckxlZnQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJMZWZ0
V2lkdGgoKTsgfQogICAgIHZpcnR1YWwgaW50IGJvcmRlclJpZ2h0KCkgY29uc3QgeyByZXR1cm4g
c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkTGlu
ZUJveFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMCwgdW5z
aWduZWQgZW5kT2Zmc2V0ID0gVUlOVF9NQVgsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFs
c2UpOwotCi0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+Jiwg
aW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQsIGludCwgYm9vbCA9IHRy
dWUpIHsgfQogICAgIC8vIEZJWE1FOiB1c2VUcmFuc2Zvcm1zIHNob3VsZCBnbyBhd2F5IGV2ZW50
dWFsbHkKICAgICBJbnRSZWN0IGFic29sdXRlQm91bmRpbmdCb3hSZWN0KGJvb2wgdXNlVHJhbnNm
b3JtcyA9IGZhbHNlKTsKIAogICAgIC8vIEJ1aWxkIGFuIGFycmF5IG9mIHF1YWRzIGluIGFic29s
dXRlIGNvb3JkcyBmb3IgbGluZSBib3hlcwotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0QWJzb2x1
dGVMaW5lQm94UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9
IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhlaWdo
dCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRR
dWFkPiYsIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEFi
c29sdXRlTGluZUJveFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgdW5zaWduZWQgLypzdGFydE9m
ZnNldCovID0gMCwgdW5zaWduZWQgLyplbmRPZmZzZXQqLyA9IFVJTlRfTUFYLCBib29sIC8qdXNl
U2VsZWN0aW9uSGVpZ2h0Ki8gPSBmYWxzZSkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0
ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCAvKnRvcExldmVsKi8gPSB0cnVlKSB7IH07
CiAKICAgICAvLyB0aGUgcmVjdCB0aGF0IHdpbGwgYmUgcGFpbnRlZCBpZiB0aGlzIG9iamVjdCBp
cyBwYXNzZWQgYXMgdGhlIHBhaW50aW5nUm9vdAogICAgIEludFJlY3QgcGFpbnRpbmdSb290UmVj
dChJbnRSZWN0JiB0b3BMZXZlbFJlY3QpOwogCi0gICAgdm9pZCBhZGRQREZVUkxSZWN0KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1
c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSk7Ci0KICAgICB2aXJ0
dWFsIGludCBtaW5QcmVmV2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBp
bnQgbWF4UHJlZldpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCkBAIC03NTYsNyArNjgxLDcg
QEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdGhlIHJlY3QgdGhhdCBzaG91bGQgYmUgcmVwYWlu
dGVkIHdoZW5ldmVyIHRoaXMgb2JqZWN0IGNoYW5nZXMuICBUaGUgcmVjdCBpcyBpbiB0aGUgdmll
dydzCiAgICAgLy8gY29vcmRpbmF0ZSBzcGFjZS4gIFRoaXMgbWV0aG9kIGRlYWxzIHdpdGggb3V0
bGluZXMgYW5kIG92ZXJmbG93LgogICAgIHZpcnR1YWwgSW50UmVjdCBhYnNvbHV0ZUNsaXBwZWRP
dmVyZmxvd1JlY3QoKTsKLQorICAgIAogICAgIEludFJlY3QgZ2V0QWJzb2x1dGVSZXBhaW50UmVj
dFdpdGhPdXRsaW5lKGludCBvdyk7CiAKICAgICAvLyBHaXZlbiBhIHJlY3QgaW4gdGhlIG9iamVj
dCdzIGNvb3JkaW5hdGUgc3BhY2UsIHRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSByZWN0YW5nbGUg
dG8gdGhlIHZpZXcncwpAQCAtNzgzLDEwICs3MDgsNiBAQCBwdWJsaWM6CiAgICAgZmxvYXQgb3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPm9wYWNpdHkoKTsgfQogCiAgICAgYm9vbCBo
YXNSZWZsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNSZWZsZWN0aW9uOyB9Ci0gICAgSW50
UmVjdCByZWZsZWN0aW9uQm94KCkgY29uc3Q7Ci0gICAgaW50IHJlZmxlY3Rpb25PZmZzZXQoKSBj
b25zdDsKLSAgICAvLyBHaXZlbiBhIHJlY3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3Bh
Y2UsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVjdCBpbiB0aGUgcmVmbGVjdGlvbi4KLSAg
ICBJbnRSZWN0IHJlZmxlY3RlZFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCiAgICAgLy8g
QXBwbGllZCBhcyBhICJzbG9wIiB0byBkaXJ0eSByZWN0IGNoZWNrcyBkdXJpbmcgdGhlIG91dGxp
bmUgcGFpbnRpbmcgcGhhc2UncyBkaXJ0eS1yZWN0IGNoZWNrcy4KICAgICBpbnQgbWF4aW1hbE91
dGxpbmVTaXplKFBhaW50UGhhc2UpIGNvbnN0OwpAQCAtOTE0LDYgKzgzNSw5IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgdmlzaWJsZVRvSGl0VGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkt
PnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmIHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSAhPSBQ
RV9OT05FOyB9CiAgICAgCisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBo
aWNzQ29udGV4dCosIGludCAvKnR4Ki8sIGludCAvKnR5Ki8pIHsgfTsKKyAgICB2aXJ0dWFsIElu
dFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9
CisKIHByb3RlY3RlZDoKICAgICAvLyBPdmVycmlkZXMgc2hvdWxkIGNhbGwgdGhlIHN1cGVyY2xh
c3MgYXQgdGhlIGVuZAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoUmVuZGVyU3R5
bGU6OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CkBAIC05MjIsNiArODQ2LDkg
QEAgcHJvdGVjdGVkOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBwcmludEJveERlY29yYXRpb25z
KEdyYXBoaWNzQ29udGV4dCosIGludCAvKngqLywgaW50IC8qeSovLCBpbnQgLyp3Ki8sIGludCAv
KmgqLywgaW50IC8qdHgqLywgaW50IC8qdHkqLykgeyB9CiAKKyAgICB2b2lkIHBhaW50T3V0bGlu
ZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBS
ZW5kZXJTdHlsZSosIGJvb2wgb25seVVzZVBhc3NlZEluQm91bmRzID0gZmFsc2UpOworICAgIHZv
aWQgYWRkUERGVVJMUmVjdChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKICAg
ICB2aXJ0dWFsIEludFJlY3Qgdmlld1JlY3QoKSBjb25zdDsKIAogICAgIGludCBnZXRWZXJ0aWNh
bFBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lKSBjb25zdDsKQEAgLTk1OCw2ICs4ODUsNyBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCBtX2lzQW5vbnltb3VzICAgICAgICAgICAgICAgOiAxOwogICAgIGJv
b2wgbV9pc1RleHQgICAgICAgICAgICAgICAgICAgIDogMTsKKyAgICBib29sIG1faXNCb3ggICAg
ICAgICAgICAgICAgICAgICA6IDE7CiAgICAgYm9vbCBtX2lubGluZSAgICAgICAgICAgICAgICAg
ICAgOiAxOwogICAgIGJvb2wgbV9yZXBsYWNlZCAgICAgICAgICAgICAgICAgIDogMTsKICAgICBi
b29sIG1faXNEcmFnZ2luZyAgICAgICAgICAgICAgICA6IDE7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJQYXJ0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJQYXJ0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQ
YXJ0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTIgKzg4LDExIEBAIHZvaWQgUmVuZGVyUGFy
dDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24oKQogICAgIGlmICghbV93aWRnZXQpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICBGbG9hdFBvaW50IGFic1Bv
cyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogICAgIGFic1Bvcy5tb3ZlKGJvcmRlckxlZnQoKSArIHBh
ZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKLSAgICB3aWR0aCA9IG1f
d2lkdGggLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBh
ZGRpbmdSaWdodCgpOwotICAgIGhlaWdodCA9IG1faGVpZ2h0IC0gYm9yZGVyVG9wKCkgLSBib3Jk
ZXJCb3R0b20oKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKTsKLSAgICBJbnRSZWN0
IG5ld0JvdW5kcyhhYnNQb3MueCgpLCBhYnNQb3MueSgpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBp
bnQgdyA9IHdpZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xl
ZnQoKSAtIHBhZGRpbmdSaWdodCgpOworICAgIGludCBoID0gaGVpZ2h0KCkgLSBib3JkZXJUb3Ao
KSAtIGJvcmRlckJvdHRvbSgpIC0gcGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgpOworICAg
IEludFJlY3QgbmV3Qm91bmRzKGFic1Bvcy54KCksIGFic1Bvcy55KCksIHcsIGgpOwogICAgIGJv
b2wgYm91bmRzQ2hhbmdlZCA9IG5ld0JvdW5kcyAhPSBtX3dpZGdldC0+ZnJhbWVSZWN0KCk7CiAg
ICAgaWYgKGJvdW5kc0NoYW5nZWQpIHsKICAgICAgICAgLy8gVGhlIHdpZGdldCBjaGFuZ2VkIHBv
c2l0aW9ucy4gIFVwZGF0ZSB0aGUgZnJhbWUgZ2VvbWV0cnkuCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJQYXRoLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQ
YXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDkgKzE3Miw2IEBAIHZvaWQgUmVuZGVyUGF0
aDo6bGF5b3V0KCkKIAogICAgIG1fYWJzb2x1dGVCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVy
Zmxvd1JlY3QoKTsKIAotICAgIHNldFdpZHRoKG1fYWJzb2x1dGVCb3VuZHMud2lkdGgoKSk7Ci0g
ICAgc2V0SGVpZ2h0KG1fYWJzb2x1dGVCb3VuZHMuaGVpZ2h0KCkpOwotCiAgICAgaWYgKGNoZWNr
Rm9yUmVwYWludCkKICAgICAgICAgcmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRz
LCBvbGRPdXRsaW5lQm94KTsKIApAQCAtMjYwLDcgKzI1Nyw3IEBAIHZvaWQgUmVuZGVyUGF0aDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWludEkKIAogICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxp
bmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpKQogICAgICAgICBwYWludE91dGxpbmUocGFp
bnRJbmZvLmNvbnRleHQsIHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdCb3gueCgpKSwgc3RhdGlj
X2Nhc3Q8aW50Pihib3VuZGluZ0JveC55KCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
Pihib3VuZGluZ0JveC53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0JveC5oZWln
aHQoKSksIHN0eWxlKCkpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0Jv
eC53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0JveC5oZWlnaHQoKSksIHN0eWxl
KCksIHRydWUpOwogICAgIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CkBA
IC00ODUsNiArNDgyLDEzIEBAIEZsb2F0UmVjdCBSZW5kZXJQYXRoOjpkcmF3TWFya2Vyc0lmTmVl
ZGUKICAgICByZXR1cm4gYm91bmRzOwogfQogCitJbnRSZWN0IFJlbmRlclBhdGg6OmFic29sdXRl
T3V0bGluZUJvdW5kcygpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZXN1bHQgPSBtX2Fic29sdXRl
Qm91bmRzOworICAgIGFkanVzdFJlY3RGb3JPdXRsaW5lQW5kU2hhZG93KHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJQYXRoLmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw4IEBAIHB1YmxpYzoKIAog
ICAgIEZsb2F0UmVjdCBkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IFBhdGgmKSBjb25zdDsKICAgICAKKyAgICB2aXJ0dWFsIEludFJl
Y3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgRmxvYXRQ
b2ludCBtYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDQwMDc1KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NSw3ICs4NSw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmxheW91dCgpCiAgICAgICAgIG9s
ZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsKICAgICB9CiAgICAgCi0gICAg
bV9oZWlnaHQgPSBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKTsKKyAgICBzZXRIZWlnaHQobWluaW11
bVJlcGxhY2VkSGVpZ2h0KCkpOwogICAgIAogICAgIGNhbGNXaWR0aCgpOwogICAgIGNhbGNIZWln
aHQoKTsKQEAgLTExMCw4ICsxMTAsOCBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWlu
dEluZm8mIHBhCiAgICAgaWYgKCFzaG91bGRQYWludChwYWludEluZm8sIHR4LCB0eSkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICB0eCArPSBtX3g7Ci0gICAgdHkgKz0gbV95OworICAgIHR4
ICs9IHgoKTsKKyAgICB0eSArPSBtX2ZyYW1lUmVjdC55KCk7CiAgICAgCiAgICAgaWYgKGhhc0Jv
eERlY29yYXRpb25zKCkgJiYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpIAogICAgICAgICBw
YWludEJveERlY29yYXRpb25zKHBhaW50SW5mbywgdHgsIHR5KTsKQEAgLTE1OSw4ICsxNTksOCBA
QCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludChQYWludEluCiAgICAgaWYgKHN0eWxl
KCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpbnQgY3VycmVudFRYID0gdHggKyBtX3g7Ci0gICAgaW50IGN1cnJlbnRUWSA9IHR5ICsgbV95
OworICAgIGludCBjdXJyZW50VFggPSB0eCArIHgoKTsKKyAgICBpbnQgY3VycmVudFRZID0gdHkg
KyBtX2ZyYW1lUmVjdC55KCk7CiAKICAgICAvLyBFYXJseSBleGl0IGlmIHRoZSBlbGVtZW50IHRv
dWNoZXMgdGhlIGVkZ2VzLgogICAgIGludCB0b3AgPSBjdXJyZW50VFkgKyBvdmVyZmxvd1RvcCgp
OwpAQCAtMjE1LDcgKzIxNSw3IEBAIHVuc2lnbmVkIFJlbmRlclJlcGxhY2VkOjpjYXJldE1heFJl
bmRlcmUKICAgICByZXR1cm4gMTsgCiB9CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJSZXBsYWNl
ZDo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpCitWaXNpYmxlUG9zaXRpb24g
UmVuZGVyUmVwbGFjZWQ6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHhQb3MsIGludCB5UG9z
KQogewogICAgIElubGluZUJveCogYm94ID0gaW5saW5lQm94V3JhcHBlcigpOwogICAgIGlmICgh
Ym94KQpAQCAtMjI4LDE5ICsyMjgsMTkgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclJlcGxhY2Vk
Ojpwb3NpdGlvbgogICAgIGludCB0b3AgPSByb290LT50b3BPdmVyZmxvdygpOwogICAgIGludCBi
b3R0b20gPSByb290LT5uZXh0Um9vdEJveCgpID8gcm9vdC0+bmV4dFJvb3RCb3goKS0+dG9wT3Zl
cmZsb3coKSA6IHJvb3QtPmJvdHRvbU92ZXJmbG93KCk7CiAKLSAgICBpZiAoeSArIHlQb3MoKSA8
IHRvcCkKKyAgICBpZiAoeVBvcyArIHkoKSA8IHRvcCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbihlbGVtZW50KCksIGNhcmV0TWluT2Zmc2V0KCksIERPV05TVFJFQU0pOyAvLyBjb29y
ZGluYXRlcyBhcmUgYWJvdmUKICAgICAKLSAgICBpZiAoeSArIHlQb3MoKSA+PSBib3R0b20pCisg
ICAgaWYgKHlQb3MgKyB5KCkgPj0gYm90dG9tKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKGVsZW1lbnQoKSwgY2FyZXRNYXhPZmZzZXQoKSwgRE9XTlNUUkVBTSk7IC8vIGNvb3JkaW5h
dGVzIGFyZSBiZWxvdwogICAgIAogICAgIGlmIChlbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKHgg
PD0gd2lkdGgoKSAvIDIpCisgICAgICAgIGlmICh4UG9zIDw9IHdpZHRoKCkgLyAyKQogICAgICAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihlbGVtZW50KCksIDAsIERPV05TVFJFQU0pOwog
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnQoKSwgMSwgRE9XTlNUUkVBTSk7
CiAgICAgfQogCi0gICAgcmV0dXJuIFJlbmRlckJveDo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4
LCB5KTsKKyAgICByZXR1cm4gUmVuZGVyQm94Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKHhQb3Ms
IHlQb3MpOwogfQogCiBJbnRSZWN0IFJlbmRlclJlcGxhY2VkOjpzZWxlY3Rpb25SZWN0KGJvb2wg
Y2xpcFRvVmlzaWJsZUNvbnRlbnQpCkBAIC0yNjgsMTQgKzI2OCwxNCBAQCBJbnRSZWN0IFJlbmRl
clJlcGxhY2VkOjpsb2NhbFNlbGVjdGlvblJlCiAKICAgICBpZiAoIW1faW5saW5lQm94V3JhcHBl
cikKICAgICAgICAgLy8gV2UncmUgYSBibG9jay1sZXZlbCByZXBsYWNlZCBlbGVtZW50LiAgSnVz
dCByZXR1cm4gb3VyIG93biBkaW1lbnNpb25zLgotICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAw
LCB3aWR0aCgpLCBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRy
YSgpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBp
bnRyaW5zaWNQYWRkaW5nVG9wKCkgKyBpbnRyaW5zaWNQYWRkaW5nQm90dG9tKCkpOwogCiAgICAg
UmVuZGVyQmxvY2sqIGNiID0gIGNvbnRhaW5pbmdCbG9jaygpOwogICAgIGlmICghY2IpCiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAgCiAgICAgUm9vdElubGluZUJveCogcm9vdCA9IG1f
aW5saW5lQm94V3JhcHBlci0+cm9vdCgpOwotICAgIHJldHVybiBJbnRSZWN0KDAsIHJvb3QtPnNl
bGVjdGlvblRvcCgpIC0geVBvcygpLCB3aWR0aCgpLCByb290LT5zZWxlY3Rpb25IZWlnaHQoKSk7
CisgICAgcmV0dXJuIEludFJlY3QoMCwgcm9vdC0+c2VsZWN0aW9uVG9wKCkgLSB5KCksIHdpZHRo
KCksIHJvb3QtPnNlbGVjdGlvbkhlaWdodCgpKTsKIH0KIAogdm9pZCBSZW5kZXJSZXBsYWNlZDo6
c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgcykKQEAgLTMyNyw3ICszMjcsNyBAQCB2
b2lkIFJlbmRlclJlcGxhY2VkOjphZGp1c3RPdmVyZmxvd0ZvckJvCiB7CiAgICAgSW50UmVjdCBv
dmVyZmxvdzsKICAgICBmb3IgKFNoYWRvd0RhdGEqIGJveFNoYWRvdyA9IHN0eWxlKCktPmJveFNo
YWRvdygpOyBib3hTaGFkb3c7IGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCkgewotICAgICAg
ICBJbnRSZWN0IHNoYWRvdyA9IGJvcmRlckJveCgpOworICAgICAgICBJbnRSZWN0IHNoYWRvdyA9
IGJvcmRlckJveFJlY3QoKTsKICAgICAgICAgc2hhZG93Lm1vdmUoYm94U2hhZG93LT54LCBib3hT
aGFkb3ctPnkpOwogICAgICAgICBzaGFkb3cuaW5mbGF0ZShib3hTaGFkb3ctPmJsdXIpOwogICAg
ICAgICBvdmVyZmxvdy51bml0ZShzaGFkb3cpOwpAQCAtMzM2LDcgKzMzNiw3IEBAIHZvaWQgUmVu
ZGVyUmVwbGFjZWQ6OmFkanVzdE92ZXJmbG93Rm9yQm8KICAgICBpZiAoIW92ZXJmbG93LmlzRW1w
dHkoKSkgewogICAgICAgICBpZiAoIWdPdmVyZmxvd1JlY3RNYXApCiAgICAgICAgICAgICBnT3Zl
cmZsb3dSZWN0TWFwID0gbmV3IE92ZXJmbG93UmVjdE1hcCgpOwotICAgICAgICBvdmVyZmxvdy51
bml0ZShib3JkZXJCb3goKSk7CisgICAgICAgIG92ZXJmbG93LnVuaXRlKGJvcmRlckJveFJlY3Qo
KSk7CiAgICAgICAgIGdPdmVyZmxvd1JlY3RNYXAtPnNldCh0aGlzLCBvdmVyZmxvdyk7CiAgICAg
ICAgIG1faGFzT3ZlcmZsb3cgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAobV9oYXNPdmVyZmxvdykg
ewpAQCAtMzg2LDcgKzM4Niw3IEBAIEludFJlY3QgUmVuZGVyUmVwbGFjZWQ6Om92ZXJmbG93UmVj
dChib28KICAgICBpZiAobV9oYXNPdmVyZmxvdykKICAgICAgICAgcmV0dXJuIGdPdmVyZmxvd1Jl
Y3RNYXAtPmZpbmQodGhpcyktPnNlY29uZDsKIAotICAgIHJldHVybiBib3JkZXJCb3goKTsKKyAg
ICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogfQogCiBJbnRSZWN0IFJlbmRlclJlcGxhY2VkOjph
YnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGljYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVw
bGljYS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVw
bGljYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0MiwxMyBAQCBSZW5kZXJSZXBsaWNh
Ojp+UmVuZGVyUmVwbGljYSgpCiAgICAgCiB2b2lkIFJlbmRlclJlcGxpY2E6OmxheW91dCgpCiB7
Ci0gICAgSW50UmVjdCBib3ggPSBwYXJlbnQoKS0+Ym9yZGVyQm94KCk7Ci0gICAgbV94ID0gYm94
LngoKTsKLSAgICBtX3kgPSBib3gueSgpOwotICAgIG1fd2lkdGggPSBib3gud2lkdGgoKTsKLSAg
ICBtX2hlaWdodCA9IGJveC5oZWlnaHQoKTsKKyAgICBtX2ZyYW1lUmVjdCA9IHBhcmVudEJveCgp
LT5ib3JkZXJCb3hSZWN0KCk7CiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCiB2b2lk
IFJlbmRlclJlcGxpY2E6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICBtX21pblByZWZXaWR0aCA9
IHBhcmVudCgpLT53aWR0aCgpOworICAgIG1fbWluUHJlZldpZHRoID0gcGFyZW50Qm94KCktPndp
ZHRoKCk7CiAgICAgbV9tYXhQcmVmV2lkdGggPSBtX21pblByZWZXaWR0aDsKICAgICBzZXRQcmVm
V2lkdGhzRGlydHkoZmFsc2UpOwogfQpAQCAtNjIsOCArNTgsOCBAQCB2b2lkIFJlbmRlclJlcGxp
Y2E6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWlu
dFBoYXNlRm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZU1hc2spCiAg
ICAgICAgIHJldHVybjsKICAKLSAgICB0eCArPSBtX3g7Ci0gICAgdHkgKz0gbV95OworICAgIHR4
ICs9IHgoKTsKKyAgICB0eSArPSBtX2ZyYW1lUmVjdC55KCk7CiAKICAgICBpZiAocGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICAvLyBUdXJuIGFyb3VuZCBh
bmQgcGFpbnQgdGhlIHBhcmVudCBsYXllci4gVXNlIHRlbXBvcmFyeSBjbGlwUmVjdHMsIHNvIHRo
YXQgdGhlIGxheWVyIGRvZXNuJ3QgZW5kIHVwIGNhY2hpbmcgY2xpcCByZWN0cwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1NSw3ICszNTUsNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJ
bmZvCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAKICAgICBpZiAoKHBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiBzdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAgcGFpbnRPdXRsaW5lKHBhaW50
SW5mby5jb250ZXh0LCBtX2Fic29sdXRlQm91bmRzLngoKSwgbV9hYnNvbHV0ZUJvdW5kcy55KCks
IG1fYWJzb2x1dGVCb3VuZHMud2lkdGgoKSwgbV9hYnNvbHV0ZUJvdW5kcy5oZWlnaHQoKSwgc3R5
bGUoKSk7CisgICAgICAgIHBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgbV9hYnNvbHV0
ZUJvdW5kcy54KCksIG1fYWJzb2x1dGVCb3VuZHMueSgpLCBtX2Fic29sdXRlQm91bmRzLndpZHRo
KCksIG1fYWJzb2x1dGVCb3VuZHMuaGVpZ2h0KCksIHN0eWxlKCksIHRydWUpOwogfQogCiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdDb250YWluZXI6OnZpZXdwb3J0VHJhbnNmb3JtKCkg
Y29uc3QKQEAgLTQzMSw2ICs0MzEsMTMgQEAgYm9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVB
dFBvaW50KGNvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAorSW50UmVjdCBSZW5kZXJTVkdDb250
YWluZXI6OmFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZXN1
bHQgPSBtX2Fic29sdXRlQm91bmRzOworICAgIGFkanVzdFJlY3RGb3JPdXRsaW5lQW5kU2hhZG93
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lv
biA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw4ICs0MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZDsgfQogICAgIHZp
cnR1YWwgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RDaGls
ZDsgfQogCi0gICAgdmlydHVhbCBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9
Ci0gICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAg
ICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgaW50IGhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNo
aWxkcmVuKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCog
bmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKQEAgLTg5LDYgKzg5LDgg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24pOwogCisgICAgdmlydHVhbCBJbnRSZWN0IGFic29sdXRlT3V0bGluZUJvdW5k
cygpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5Q29udGVudFRy
YW5zZm9ybXMoUGFpbnRJbmZvJik7CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5QWRkaXRpb25hbFRy
YW5zZm9ybXMoUGFpbnRJbmZvJik7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2Uu
Y3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1h
Z2U6OmxheW91dCgpCiAgICAgY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKICAgICAKICAgICAv
LyBtaW5pbXVtIGhlaWdodAotICAgIG1faGVpZ2h0ID0gZXJyb3JPY2N1cnJlZCgpID8gaW50cmlu
c2ljU2l6ZSgpLmhlaWdodCgpIDogMDsKKyAgICBzZXRIZWlnaHQoZXJyb3JPY2N1cnJlZCgpID8g
aW50cmluc2ljU2l6ZSgpLmhlaWdodCgpIDogMCk7CiAKICAgICBjYWxjV2lkdGgoKTsKICAgICBj
YWxjSGVpZ2h0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDggKzEyOSw4IEBAIEludFJlY3QgUmVu
ZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZUFic28KICAgICAvLyBCdXQgZG8gdGFrZSB0aGUgY29u
dGFpbmluZ0Jsb2NrcydzIGNvbnRhaW5lciBwb3NpdGlvbiBpbnRvIGFjY291bnQsIGllLiBTVkcg
dGV4dCBpbiBzY3JvbGxhYmxlIDxkaXY+LgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGh0bWxQ
YXJlbnRDdG0gPSByb290LT5SZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7CiAK
LSAgICBGbG9hdFJlY3QgZml4ZWRSZWN0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocmVjdC54KCkg
KyBhYnNQb3MueCgpIC0geFBvcygpIC0gaHRtbFBhcmVudEN0bS5lKCkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChyZWN0LnkoKSArIGFic1Bvcy55KCkg
LSB5UG9zKCkgLSBodG1sUGFyZW50Q3RtLmYoKSksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7CisgICAgRmxvYXRSZWN0IGZpeGVkUmVjdChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJlY3Qu
eCgpICsgYWJzUG9zLngoKSAtIChmaXJzdFRleHRCb3goKSA/IGZpcnN0VGV4dEJveCgpLT54UG9z
KCkgOiAwKSAtIGh0bWxQYXJlbnRDdG0uZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQocmVjdC55KCkgKyBhYnNQb3MueSgpIC0gKGZpcnN0VGV4dEJv
eCgpID8gZmlyc3RUZXh0Qm94KCktPnlQb3MoKSA6IDApIC0gaHRtbFBhcmVudEN0bS5mKCkpLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCBD
U1MgdHJhbnNmb3JtcwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlVHJhbnNm
b3JtKCkubWFwUmVjdChmaXhlZFJlY3QpKTsKIH0KQEAgLTE1NSw3ICsxNTUsNyBAQCBWaXNpYmxl
UG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4dDo6cG9zCiAgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oZWxlbWVudCgpLCAwLCBET1dOU1RSRUFNKTsKIAogICAgIFNWR1Jvb3RJbmxpbmVC
b3gqIHJvb3RCb3ggPSB0ZXh0Qm94LT5zdmdSb290SW5saW5lQm94KCk7Ci0gICAgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+b2JqZWN0KCkgOiAwOworICAgIFJlbmRl
ckJsb2NrKiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+YmxvY2soKSA6IDA7CiAKICAgICBp
ZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihlbGVtZW50KCksIDAs
IERPV05TVFJFQU0pOwpAQCAtMTYzLDcgKzE2Myw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJT
VkdJbmxpbmVUZXh0Ojpwb3MKICAgICBpbnQgb2Zmc2V0ID0gMDsKIAogICAgIGZvciAoU1ZHSW5s
aW5lVGV4dEJveCogYm94ID0gdGV4dEJveDsgYm94OyBib3ggPSBzdGF0aWNfY2FzdDxTVkdJbmxp
bmVUZXh0Qm94Kj4oYm94LT5uZXh0VGV4dEJveCgpKSkgewotICAgICAgICBpZiAoYm94LT5zdmdD
aGFyYWN0ZXJIaXRzUG9zaXRpb24oeCArIG9iamVjdC0+eFBvcygpLCB5ICsgb2JqZWN0LT55UG9z
KCksIG9mZnNldCkpIHsKKyAgICAgICAgaWYgKGJveC0+c3ZnQ2hhcmFjdGVySGl0c1Bvc2l0aW9u
KHggKyBvYmplY3QtPngoKSwgeSArIG9iamVjdC0+eSgpLCBvZmZzZXQpKSB7CiAgICAgICAgICAg
ICAvLyBJZiB3ZSdyZSBub3QgYXQgdGhlIGVuZC9zdGFydCBvZiB0aGUgYm94LCBzdG9wIGxvb2tp
bmcgZm9yIG90aGVyIHNlbGVjdGVkIGJveGVzLgogICAgICAgICAgICAgaWYgKGJveC0+ZGlyZWN0
aW9uKCkgPT0gTFRSKSB7CiAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8PSAoaW50KSBib3gt
PmVuZCgpICsgMSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lv
biA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDIsOCArMTAyLDggQEAgdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQog
CiAgICAgbV9hYnNvbHV0ZUJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwog
ICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihlbGVt
ZW50KCkpOwotICAgIG1fd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KG1fd2lkdGggKiBzdmctPmN1
cnJlbnRTY2FsZSgpKTsKLSAgICBtX2hlaWdodCA9IHN0YXRpY19jYXN0PGludD4obV9oZWlnaHQg
KiBzdmctPmN1cnJlbnRTY2FsZSgpKTsKKyAgICBzZXRXaWR0aChzdGF0aWNfY2FzdDxpbnQ+KHdp
ZHRoKCkgKiBzdmctPmN1cnJlbnRTY2FsZSgpKSk7CisgICAgc2V0SGVpZ2h0KHN0YXRpY19jYXN0
PGludD4oaGVpZ2h0KCkgKiBzdmctPmN1cnJlbnRTY2FsZSgpKSk7CiAgICAgCiAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoc2VsZk5lZWRzTGF5b3V0KCkpIC8vIGVpdGhl
ciBib3VuZHMgb3IgdHJhbnNmb3JtIGNoYW5nZWQsIGZvcmNlIGtpZHMgdG8gcmVsYXlvdXQKQEAg
LTEyNSw3ICsxMjUsNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmFwcGx5Q29udGVudFRyYW5zZm9y
CiAgICAgLy8gVHJhbnNsYXRlIGZyb20gcGFyZW50IG9mZnNldHMgKGh0bWwgcmVuZGVyZXJzKSB0
byBhIHJlbGF0aXZlIHRyYW5zZm9ybSAoc3ZnIHJlbmRlcmVycykKICAgICBJbnRQb2ludCBvcmln
aW47CiAgICAgb3JpZ2luLm1vdmUocGFyZW50WCwgcGFyZW50WSk7Ci0gICAgb3JpZ2luLm1vdmUo
bV94LCBtX3kpOworICAgIG9yaWdpbi5tb3ZlKHgoKSwgbV9mcmFtZVJlY3QueSgpKTsKICAgICBv
cmlnaW4ubW92ZShib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKTsKICAgICBvcmlnaW4ubW92ZShw
YWRkaW5nTGVmdCgpLCBwYWRkaW5nVG9wKCkpOwogCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBS
ZW5kZXJTVkdSb290OjpwYWludChQYWludEluZm8mIHBhaQogCiAgICAgLy8gVGhpcyBzaG91bGQg
b25seSBleGlzdCBmb3IgPHN2Zz4gcmVuZGVyZXJzCiAgICAgaWYgKGhhc0JveERlY29yYXRpb25z
KCkgJiYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpIAotICAgICAgICBwYWludEJveERlY29y
YXRpb25zKHBhaW50SW5mbywgbV94ICsgcGFyZW50WCwgbV95ICsgcGFyZW50WSk7CisgICAgICAg
IHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB4KCkgKyBwYXJlbnRYLCBtX2ZyYW1lUmVj
dC55KCkgKyBwYXJlbnRZKTsKIAogICAgIGlmICghZmlyc3RDaGlsZCgpKSB7CiAjaWYgRU5BQkxF
KFNWR19GSUxURVJTKQpAQCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6YWJz
b2x1dGVRdWFkcyhWZWN0b3IKIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1Jvb3Q6OmFi
c29sdXRlVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0g
PSBSZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgY3RtLnRyYW5zbGF0
ZShtX3gsIG1feSk7CisgICAgY3RtLnRyYW5zbGF0ZSh4KCksIG1fZnJhbWVSZWN0LnkoKSk7CiAg
ICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KGVsZW1l
bnQoKSk7CiAgICAgY3RtLnNjYWxlKHN2Zy0+Y3VycmVudFNjYWxlKCkpOwogICAgIGN0bS50cmFu
c2xhdGUoc3ZnLT5jdXJyZW50VHJhbnNsYXRlKCkueCgpLCBzdmctPmN1cnJlbnRUcmFuc2xhdGUo
KS55KCkpOwpAQCAtMzA4LDggKzMwOCw4IEBAIGJvb2wgUmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9p
bnQoY29uc3QgSGkKICAgICBpZiAoIXZpZXdwb3J0KCkuaXNFbXB0eSgpCiAgICAgICAgICYmIHN0
eWxlKCktPm92ZXJmbG93WCgpID09IE9ISURERU4KICAgICAgICAgJiYgc3R5bGUoKS0+b3ZlcmZs
b3dZKCkgPT0gT0hJRERFTikgewotICAgICAgICBpbnQgdHggPSBtX3ggLSBfdHggKyBzeDsKLSAg
ICAgICAgaW50IHR5ID0gbV95IC0gX3R5ICsgc3k7CisgICAgICAgIGludCB0eCA9IHgoKSAtIF90
eCArIHN4OworICAgICAgICBpbnQgdHkgPSBtX2ZyYW1lUmVjdC55KCkgLSBfdHkgKyBzeTsKIAog
ICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KICAgICAg
ICAgSW50UmVjdCBvdmVyZmxvd0JveCA9IG92ZXJmbG93UmVjdChmYWxzZSk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHVFNwYW4uY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1RTcGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmgiCiAKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3gu
aCIKICNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCiAKQEAgLTQyLDEzICs0MywxMyBAQCB2
b2lkIFJlbmRlclNWR1RTcGFuOjphYnNvbHV0ZVJlY3RzKFZlY3RvCiAgICAgSW5saW5lUnVuQm94
KiBmaXJzdEJveCA9IGZpcnN0TGluZUJveCgpOwogCiAgICAgU1ZHUm9vdElubGluZUJveCogcm9v
dEJveCA9IGZpcnN0Qm94ID8gc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGZpcnN0Qm94
KS0+c3ZnUm9vdElubGluZUJveCgpIDogMDsKLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJv
b3RCb3ggPyByb290Qm94LT5vYmplY3QoKSA6IDA7CisgICAgUmVuZGVyQm94KiBvYmplY3QgPSBy
b290Qm94ID8gcm9vdEJveC0+YmxvY2soKSA6IDA7CiAKICAgICBpZiAoIW9iamVjdCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaW50IHhSZWYgPSBvYmplY3QtPnhQb3MoKSArIHhQb3MoKTsKLSAg
ICBpbnQgeVJlZiA9IG9iamVjdC0+eVBvcygpICsgeVBvcygpOworICAgIGludCB4UmVmID0gb2Jq
ZWN0LT54KCkgKyB4KCk7CisgICAgaW50IHlSZWYgPSBvYmplY3QtPnkoKSArIHkoKTsKICAKICAg
ICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94OyBjdXJyOyBjdXJyID0gY3Vyci0+
bmV4dExpbmVCb3goKSkgewogICAgICAgICBGbG9hdFJlY3QgcmVjdCh4UmVmICsgY3Vyci0+eFBv
cygpLCB5UmVmICsgY3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSk7
CkBAIC02MiwxMyArNjMsMTMgQEAgdm9pZCBSZW5kZXJTVkdUU3Bhbjo6YWJzb2x1dGVRdWFkcyhW
ZWN0bwogICAgIElubGluZVJ1bkJveCogZmlyc3RCb3ggPSBmaXJzdExpbmVCb3goKTsKIAogICAg
IFNWR1Jvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBmaXJzdEJveCA/IHN0YXRpY19jYXN0PFNWR0lu
bGluZVRleHRCb3gqPihmaXJzdEJveCktPnN2Z1Jvb3RJbmxpbmVCb3goKSA6IDA7Ci0gICAgUmVu
ZGVyT2JqZWN0KiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+b2JqZWN0KCkgOiAwOworICAg
IFJlbmRlckJveCogb2JqZWN0ID0gcm9vdEJveCA/IHJvb3RCb3gtPmJsb2NrKCkgOiAwOwogCiAg
ICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCB4UmVmID0gb2JqZWN0
LT54UG9zKCkgKyB4UG9zKCk7Ci0gICAgaW50IHlSZWYgPSBvYmplY3QtPnlQb3MoKSArIHlQb3Mo
KTsKKyAgICBpbnQgeFJlZiA9IG9iamVjdC0+eCgpICsgeCgpOworICAgIGludCB5UmVmID0gb2Jq
ZWN0LT55KCkgKyB5KCk7CiAgCiAgICAgZm9yIChJbmxpbmVSdW5Cb3gqIGN1cnIgPSBmaXJzdEJv
eDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsKICAgICAgICAgRmxvYXRSZWN0
IHJlY3QoeFJlZiArIGN1cnItPnhQb3MoKSwgeVJlZiArIGN1cnItPnlQb3MoKSwgY3Vyci0+d2lk
dGgoKSwgY3Vyci0+aGVpZ2h0KCkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
VGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5j
cHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0Ojps
YXlvdXQoKQogICAgIFNWR1RleHRFbGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dEVs
ZW1lbnQqPihlbGVtZW50KCkpOwogICAgIGludCB4T2Zmc2V0ID0gKGludCkodGV4dC0+eCgpLT5n
ZXRGaXJzdCgpLnZhbHVlKHRleHQpKTsKICAgICBpbnQgeU9mZnNldCA9IChpbnQpKHRleHQtPnko
KS0+Z2V0Rmlyc3QoKS52YWx1ZSh0ZXh0KSk7Ci0gICAgc2V0UG9zKHhPZmZzZXQsIHlPZmZzZXQp
OworICAgIHNldExvY2F0aW9uKHhPZmZzZXQsIHlPZmZzZXQpOwogICAgIAogICAgIGNhbGN1bGF0
ZUxvY2FsVHJhbnNmb3JtKCk7CiAKQEAgLTIzMSw3ICsyMzEsNyBAQCBGbG9hdFJlY3QgUmVuZGVy
U1ZHVGV4dDo6cmVsYXRpdmVCQm94KGJvCiAgICAgICAgIHJlcGFpbnRSZWN0LmluZmxhdGUoc3Ry
b2tlV2lkdGgpOwogICAgIH0KIAotICAgIHJlcGFpbnRSZWN0Lm1vdmUoeFBvcygpLCB5UG9zKCkp
OworICAgIHJlcGFpbnRSZWN0Lm1vdmUoeCgpLCB5KCkpOwogICAgIHJldHVybiByZXBhaW50UmVj
dDsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmNwcAkocmV2
aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0
UGF0aC5oIgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2su
aCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aEVsZW1l
bnQuaCIKICNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCkBAIC04MiwxMyArODMsMTMgQEAg
dm9pZCBSZW5kZXJTVkdUZXh0UGF0aDo6YWJzb2x1dGVSZWN0cyhWZQogICAgIElubGluZVJ1bkJv
eCogZmlyc3RCb3ggPSBmaXJzdExpbmVCb3goKTsKIAogICAgIFNWR1Jvb3RJbmxpbmVCb3gqIHJv
b3RCb3ggPSBmaXJzdEJveCA/IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihmaXJzdEJv
eCktPnN2Z1Jvb3RJbmxpbmVCb3goKSA6IDA7Ci0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBy
b290Qm94ID8gcm9vdEJveC0+b2JqZWN0KCkgOiAwOworICAgIFJlbmRlckJsb2NrKiBvYmplY3Qg
PSByb290Qm94ID8gcm9vdEJveC0+YmxvY2soKSA6IDA7CiAKICAgICBpZiAoIW9iamVjdCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaW50IHhSZWYgPSBvYmplY3QtPnhQb3MoKSArIHhQb3MoKTsK
LSAgICBpbnQgeVJlZiA9IG9iamVjdC0+eVBvcygpICsgeVBvcygpOworICAgIGludCB4UmVmID0g
b2JqZWN0LT54KCkgKyB4KCk7CisgICAgaW50IHlSZWYgPSBvYmplY3QtPnkoKSArIHkoKTsKIAog
ICAgIGZvciAoSW5saW5lUnVuQm94KiBjdXJyID0gZmlyc3RCb3g7IGN1cnI7IGN1cnIgPSBjdXJy
LT5uZXh0TGluZUJveCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCByZWN0KHhSZWYgKyBjdXJyLT54
UG9zKCksIHlSZWYgKyBjdXJyLT55UG9zKCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgp
KTsKQEAgLTEwMiwxMyArMTAzLDEzIEBAIHZvaWQgUmVuZGVyU1ZHVGV4dFBhdGg6OmFic29sdXRl
UXVhZHMoVmUKICAgICBJbmxpbmVSdW5Cb3gqIGZpcnN0Qm94ID0gZmlyc3RMaW5lQm94KCk7CiAK
ICAgICBTVkdSb290SW5saW5lQm94KiByb290Qm94ID0gZmlyc3RCb3ggPyBzdGF0aWNfY2FzdDxT
VkdJbmxpbmVUZXh0Qm94Kj4oZmlyc3RCb3gpLT5zdmdSb290SW5saW5lQm94KCkgOiAwOwotICAg
IFJlbmRlck9iamVjdCogb2JqZWN0ID0gcm9vdEJveCA/IHJvb3RCb3gtPm9iamVjdCgpIDogMDsK
KyAgICBSZW5kZXJCbG9jayogb2JqZWN0ID0gcm9vdEJveCA/IHJvb3RCb3gtPmJsb2NrKCkgOiAw
OwogCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCB4UmVmID0g
b2JqZWN0LT54UG9zKCkgKyB4UG9zKCk7Ci0gICAgaW50IHlSZWYgPSBvYmplY3QtPnlQb3MoKSAr
IHlQb3MoKTsKKyAgICBpbnQgeFJlZiA9IG9iamVjdC0+eCgpICsgeCgpOworICAgIGludCB5UmVm
ID0gb2JqZWN0LT55KCkgKyB5KCk7CiAKICAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZp
cnN0Qm94OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewogICAgICAgICBGbG9h
dFJlY3QgcmVjdCh4UmVmICsgY3Vyci0+eFBvcygpLCB5UmVmICsgY3Vyci0+eVBvcygpLCBjdXJy
LT53aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIGJvb2wgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6
Om5vZGVBdFAKICAgICAgICAgJiYgc3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT0hJRERFTgogICAg
ICAgICAmJiBzdHlsZSgpLT5vdmVyZmxvd1koKSA9PSBPSElEREVOKSB7CiAgICAgICAgIC8vIENo
ZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgotICAgICAgICBJbnRSZWN0IG92
ZXJmbG93Qm94ID0gb3ZlcmZsb3dSZWN0KGZhbHNlKTsKKyAgICAgICAgSW50UmVjdCBvdmVyZmxv
d0JveCA9IEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICBvdmVyZmxv
d0JveC5tb3ZlKF90eCwgX3R5KTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3RtID0g
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRyYW5zZm9ybSgpOwogICAgICAgICBjdG0udHJhbnNsYXRl
KHZpZXdwb3J0KCkueCgpLCB2aWV3cG9ydCgpLnkoKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNjcm9sbGJhci5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDEyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNjcm9s
bGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK1Bh
c3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJh
cihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24sIFJlbmRlckJveCogcmVuZGVyZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5k
ZXJTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlvbiwgcmVuZGVyZXIpKTsKIH0KIAotUmVuZGVy
U2Nyb2xsYmFyOjpSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorUmVu
ZGVyU2Nyb2xsYmFyOjpSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBSZW5kZXJCb3gqIHJlbmRlcmVyKQogICAg
IDogU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIsIFJlbmRl
clNjcm9sbGJhclRoZW1lOjpyZW5kZXJTY3JvbGxiYXJUaGVtZSgpKQogICAgICwgbV9vd25lcihy
ZW5kZXJlcikKIHsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXI6OnNldFBh
cmVudChTY3JvbGxWaQogewogICAgIFNjcm9sbGJhcjo6c2V0UGFyZW50KHBhcmVudCk7CiAgICAg
aWYgKCFwYXJlbnQpIHsKLSAgICAgICAgLy8gRGVzdHJveSBhbGwgb2YgdGhlIHNjcm9sbGJhcidz
IFJlbmRlck9iamVjdHMuCisgICAgICAgIC8vIERlc3Ryb3kgYWxsIG9mIHRoZSBzY3JvbGxiYXIn
cyBSZW5kZXJCb3hlcy4KICAgICAgICAgdXBkYXRlU2Nyb2xsYmFyUGFydHModHJ1ZSk7CiAgICAg
fQogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgJKHJldmlzaW9uIDQwMDc1
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDE3ICszMiwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJlbmRl
ck9iamVjdDsKK2NsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlclNjcm9sbGJhclBhcnQ7CiBj
bGFzcyBSZW5kZXJTdHlsZTsKIAogY2xhc3MgUmVuZGVyU2Nyb2xsYmFyIDogcHVibGljIFNjcm9s
bGJhciB7CiBwcm90ZWN0ZWQ6Ci0gICAgUmVuZGVyU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCos
IFNjcm9sbGJhck9yaWVudGF0aW9uLCBSZW5kZXJPYmplY3QqKTsKKyAgICBSZW5kZXJTY3JvbGxi
YXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFJlbmRlckJveCopOwog
CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFNjcm9sbGJhcjsKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZUN1c3RvbVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgUmVuZGVyT2JqZWN0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2Nyb2xsYmFyPiBjcmVhdGVDdXN0b21TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Ny
b2xsYmFyT3JpZW50YXRpb24sIFJlbmRlckJveCopOwogICAgIHZpcnR1YWwgflJlbmRlclNjcm9s
bGJhcigpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CkBAIC02
MCw3ICs2MCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZUNoYW5nZWQoKTsK
IAotICAgIFJlbmRlck9iamVjdCogb3duaW5nUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX293
bmVyOyB9CisgICAgUmVuZGVyQm94KiBvd25pbmdSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXI7IH0KIAogICAgIHZvaWQgcGFpbnRQYXJ0KEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJh
clBhcnQsIGNvbnN0IEludFJlY3QmKTsKIApAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgogICAg
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFNjcm9sbGJhclBzZXVkb1N0eWxlKFNjcm9sbGJh
clBhcnQsIFJlbmRlclN0eWxlOjpQc2V1ZG9JZCk7CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJQ
YXJ0KFNjcm9sbGJhclBhcnQsIGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKIAotICAgIFJlbmRlck9i
amVjdCogbV9vd25lcjsKKyAgICBSZW5kZXJCb3gqIG1fb3duZXI7CiAgICAgSGFzaE1hcDx1bnNp
Z25lZCwgUmVuZGVyU2Nyb2xsYmFyUGFydCo+IG1fcGFydHM7CiB9OwogCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUsMTQgKzQ1LDE0IEBAIFJlbmRlclNjcm9sbGJhclBhcnQ6On5SZW5kZXJTY3JvbGxiYXJQ
YXIKIAogdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpsYXlvdXQoKQogewotICAgIHNldFBvcygw
LCAwKTsgLy8gV2UgZG9uJ3Qgd29ycnkgYWJvdXQgcG9zaXRpb25pbmcgb3Vyc2VsdmVzLiAgV2Un
cmUganVzdCBkZXRlcm1pbmluZyBvdXIgbWluaW11bSB3aWR0aC9oZWlnaHQuCisgICAgc2V0TG9j
YXRpb24oSW50UG9pbnQoKSk7IC8vIFdlIGRvbid0IHdvcnJ5IGFib3V0IHBvc2l0aW9uaW5nIG91
cnNlbHZlcy4gIFdlJ3JlIGp1c3QgZGV0ZXJtaW5pbmcgb3VyIG1pbmltdW0gd2lkdGgvaGVpZ2h0
LgogICAgIGlmIChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKQogICAgICAgICBsYXlvdXRIb3Jpem9udGFsUGFydCgpOwogICAgIGVsc2UKICAgICAgICAg
bGF5b3V0VmVydGljYWxQYXJ0KCk7CiAKLSAgICBtX292ZXJmbG93V2lkdGggPSBtYXgobV93aWR0
aCwgbV9vdmVyZmxvd1dpZHRoKTsKLSAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1faGVpZ2h0
LCBtX292ZXJmbG93SGVpZ2h0KTsKKyAgICBtX292ZXJmbG93V2lkdGggPSBtYXgod2lkdGgoKSwg
bV9vdmVyZmxvd1dpZHRoKTsKKyAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KGhlaWdodCgpLCBt
X292ZXJmbG93SGVpZ2h0KTsKICAgICAKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CkBA
IC02MCwxMSArNjAsMTEgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpsYXlvdXQoKQogdm9p
ZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpsYXlvdXRIb3Jpem9udGFsUGFydCgpCiB7CiAgICAgaWYg
KG1fcGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpIHsKLSAgICAgICAgbV93aWR0aCA9IG1fc2Nyb2xs
YmFyLT53aWR0aCgpOworICAgICAgICBzZXRXaWR0aChtX3Njcm9sbGJhci0+d2lkdGgoKSk7CiAg
ICAgICAgIGNvbXB1dGVTY3JvbGxiYXJIZWlnaHQoKTsKICAgICB9IGVsc2UgewogICAgICAgICBj
b21wdXRlU2Nyb2xsYmFyV2lkdGgoKTsKLSAgICAgICAgbV9oZWlnaHQgPSBtX3Njcm9sbGJhci0+
aGVpZ2h0KCk7CisgICAgICAgIHNldEhlaWdodChtX3Njcm9sbGJhci0+aGVpZ2h0KCkpOwogICAg
IH0KIH0KIApAQCAtNzIsOSArNzIsOSBAQCB2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OmxheW91
dFZlcnRpY2FsCiB7CiAgICAgaWYgKG1fcGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpIHsKICAgICAg
ICAgY29tcHV0ZVNjcm9sbGJhcldpZHRoKCk7Ci0gICAgICAgIG1faGVpZ2h0ID0gbV9zY3JvbGxi
YXItPmhlaWdodCgpOworICAgICAgICBzZXRIZWlnaHQobV9zY3JvbGxiYXItPmhlaWdodCgpKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBtX3dpZHRoID0gbV9zY3JvbGxiYXItPndpZHRoKCk7Cisg
ICAgICAgIHNldFdpZHRoKG1fc2Nyb2xsYmFyLT53aWR0aCgpKTsKICAgICAgICAgY29tcHV0ZVNj
cm9sbGJhckhlaWdodCgpOwogICAgIH0gCiB9CkBAIC04OSwxMCArODksMTAgQEAgc3RhdGljIGlu
dCBjYWxjU2Nyb2xsYmFyVGhpY2tuZXNzVXNpbmcoYwogdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0
Ojpjb21wdXRlU2Nyb2xsYmFyV2lkdGgoKQogewogICAgIGludCB2aXNpYmxlU2l6ZSA9IG1fc2Ny
b2xsYmFyLT5vd25pbmdSZW5kZXJlcigpLT53aWR0aCgpIC0gbV9zY3JvbGxiYXItPm93bmluZ1Jl
bmRlcmVyKCktPmJvcmRlckxlZnQoKSAtIG1fc2Nyb2xsYmFyLT5vd25pbmdSZW5kZXJlcigpLT5i
b3JkZXJSaWdodCgpOwotICAgIGludCB3aWR0aCA9IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2lu
ZyhzdHlsZSgpLT53aWR0aCgpLCB2aXNpYmxlU2l6ZSk7CisgICAgaW50IHcgPSBjYWxjU2Nyb2xs
YmFyVGhpY2tuZXNzVXNpbmcoc3R5bGUoKS0+d2lkdGgoKSwgdmlzaWJsZVNpemUpOwogICAgIGlu
dCBtaW5XaWR0aCA9IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2luZyhzdHlsZSgpLT5taW5XaWR0
aCgpLCB2aXNpYmxlU2l6ZSk7Ci0gICAgaW50IG1heFdpZHRoID0gc3R5bGUoKS0+bWF4V2lkdGgo
KS5pc1VuZGVmaW5lZCgpID8gd2lkdGggOiBjYWxjU2Nyb2xsYmFyVGhpY2tuZXNzVXNpbmcoc3R5
bGUoKS0+bWF4V2lkdGgoKSwgdmlzaWJsZVNpemUpOwotICAgIG1fd2lkdGggPSBtYXgobWluV2lk
dGgsIG1pbihtYXhXaWR0aCwgd2lkdGgpKTsKKyAgICBpbnQgbWF4V2lkdGggPSBzdHlsZSgpLT5t
YXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkgPyB3IDogY2FsY1Njcm9sbGJhclRoaWNrbmVzc1VzaW5n
KHN0eWxlKCktPm1heFdpZHRoKCksIHZpc2libGVTaXplKTsKKyAgICBzZXRXaWR0aChtYXgobWlu
V2lkdGgsIG1pbihtYXhXaWR0aCwgdykpKTsKICAgICAKICAgICAvLyBCdXR0b25zIGFuZCB0cmFj
ayBwaWVjZXMgY2FuIGFsbCBoYXZlIG1hcmdpbnMgYWxvbmcgdGhlIGF4aXMgb2YgdGhlIHNjcm9s
bGJhci4gCiAgICAgbV9tYXJnaW5MZWZ0ID0gc3R5bGUoKS0+bWFyZ2luTGVmdCgpLmNhbGNNaW5W
YWx1ZSh2aXNpYmxlU2l6ZSk7CkBAIC0xMDIsMTAgKzEwMiwxMCBAQCB2b2lkIFJlbmRlclNjcm9s
bGJhclBhcnQ6OmNvbXB1dGVTY3JvbGxiCiB2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OmNvbXB1
dGVTY3JvbGxiYXJIZWlnaHQoKQogewogICAgIGludCB2aXNpYmxlU2l6ZSA9IG1fc2Nyb2xsYmFy
LT5vd25pbmdSZW5kZXJlcigpLT5oZWlnaHQoKSAtICBtX3Njcm9sbGJhci0+b3duaW5nUmVuZGVy
ZXIoKS0+Ym9yZGVyVG9wKCkgLSBtX3Njcm9sbGJhci0+b3duaW5nUmVuZGVyZXIoKS0+Ym9yZGVy
Qm90dG9tKCk7Ci0gICAgaW50IGhlaWdodCA9IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2luZyhz
dHlsZSgpLT5oZWlnaHQoKSwgdmlzaWJsZVNpemUpOworICAgIGludCBoID0gY2FsY1Njcm9sbGJh
clRoaWNrbmVzc1VzaW5nKHN0eWxlKCktPmhlaWdodCgpLCB2aXNpYmxlU2l6ZSk7CiAgICAgaW50
IG1pbkhlaWdodCA9IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2luZyhzdHlsZSgpLT5taW5IZWln
aHQoKSwgdmlzaWJsZVNpemUpOwotICAgIGludCBtYXhIZWlnaHQgPSBzdHlsZSgpLT5tYXhIZWln
aHQoKS5pc1VuZGVmaW5lZCgpID8gaGVpZ2h0IDogY2FsY1Njcm9sbGJhclRoaWNrbmVzc1VzaW5n
KHN0eWxlKCktPm1heEhlaWdodCgpLCB2aXNpYmxlU2l6ZSk7Ci0gICAgbV9oZWlnaHQgPSBtYXgo
bWluSGVpZ2h0LCBtaW4obWF4SGVpZ2h0LCBoZWlnaHQpKTsKKyAgICBpbnQgbWF4SGVpZ2h0ID0g
c3R5bGUoKS0+bWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IGggOiBjYWxjU2Nyb2xsYmFyVGhp
Y2tuZXNzVXNpbmcoc3R5bGUoKS0+bWF4SGVpZ2h0KCksIHZpc2libGVTaXplKTsKKyAgICBzZXRI
ZWlnaHQobWF4KG1pbkhlaWdodCwgbWluKG1heEhlaWdodCwgaCkpKTsKIAogICAgIC8vIEJ1dHRv
bnMgYW5kIHRyYWNrIHBpZWNlcyBjYW4gYWxsIGhhdmUgbWFyZ2lucyBhbG9uZyB0aGUgYXhpcyBv
ZiB0aGUgc2Nyb2xsYmFyLiAKICAgICBtX21hcmdpblRvcCA9IHN0eWxlKCktPm1hcmdpblRvcCgp
LmNhbGNNaW5WYWx1ZSh2aXNpYmxlU2l6ZSk7CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBSZW5k
ZXJTY3JvbGxiYXJQYXJ0OjppbWFnZUNoYW5nZWQoVwogdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0
OjpwYWludEludG9SZWN0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgs
IGludCB0eSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAvLyBNYWtlIHN1cmUgb3VyIGRp
bWVuc2lvbnMgbWF0Y2ggdGhlIHJlY3QuCi0gICAgc2V0UG9zKHJlY3QueCgpIC0gdHgsIHJlY3Qu
eSgpIC0gdHkpOworICAgIHNldExvY2F0aW9uKHJlY3QueCgpIC0gdHgsIHJlY3QueSgpIC0gdHkp
OwogICAgIHNldFdpZHRoKHJlY3Qud2lkdGgoKSk7CiAgICAgc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0
KCkpOwogICAgIHNldE92ZXJmbG93V2lkdGgobWF4KHJlY3Qud2lkdGgoKSwgb3ZlcmZsb3dXaWR0
aCgpKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHJldmlzaW9uIDQwMDc1
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA1LDkgKzEwNSw5IEBAIHZvaWQgSFRNTFNsaWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2
ZW4KICAgICAgICAgICAgIEZsb2F0UG9pbnQgY3VyUG9pbnQgPSBzbGlkZXItPmFic29sdXRlVG9M
b2NhbChGbG9hdFBvaW50KG1vdXNlRXZlbnQtPnBhZ2VYKCksIG1vdXNlRXZlbnQtPnBhZ2VZKCkp
LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBpbnQgbmV3UG9zaXRpb24gPSBzbGlkZXItPnBv
c2l0aW9uRm9yT2Zmc2V0KAogICAgICAgICAgICAgICAgIEludFBvaW50KG1faW5pdGlhbFBvc2l0
aW9uICsgY3VyUG9pbnQueCgpIC0gbV9pbml0aWFsQ2xpY2tQb2ludC54KCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICsgKHJlbmRlcmVyKCktPndpZHRoKCkgLyAyKSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICArIChyZW5kZXJCb3goKS0+d2lkdGgoKSAvIDIpLCAKICAgICAgICAgICAgICAg
ICAgICAgbV9pbml0aWFsUG9zaXRpb24gKyBjdXJQb2ludC55KCkgLSBtX2luaXRpYWxDbGlja1Bv
aW50LnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgKyAocmVuZGVyZXIoKS0+aGVpZ2h0KCkg
LyAyKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgKyAocmVuZGVyQm94KCktPmhlaWdodCgp
IC8gMikpKTsKICAgICAgICAgICAgIGlmIChzbGlkZXItPmN1cnJlbnRQb3NpdGlvbigpICE9IG5l
d1Bvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgc2xpZGVyLT5zZXRDdXJyZW50UG9zaXRpb24o
bmV3UG9zaXRpb24pOwogICAgICAgICAgICAgICAgIHNsaWRlci0+dmFsdWVDaGFuZ2VkKCk7CkBA
IC0yMTMsMTIgKzIxMywxMiBAQCB2b2lkIFJlbmRlclNsaWRlcjo6bGF5b3V0KCkKICAgICAKICAg
ICBpZiAobV90aHVtYiAmJiBtX3RodW1iLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAKLSAg
ICAgICAgaW50IG9sZFdpZHRoID0gbV93aWR0aDsKKyAgICAgICAgaW50IG9sZFdpZHRoID0gd2lk
dGgoKTsKICAgICAgICAgY2FsY1dpZHRoKCk7Ci0gICAgICAgIGludCBvbGRIZWlnaHQgPSBtX2hl
aWdodDsKKyAgICAgICAgaW50IG9sZEhlaWdodCA9IGhlaWdodCgpOwogICAgICAgICBjYWxjSGVp
Z2h0KCk7CiAgICAgICAgIAotICAgICAgICBpZiAob2xkV2lkdGggIT0gbV93aWR0aCB8fCBvbGRI
ZWlnaHQgIT0gbV9oZWlnaHQpCisgICAgICAgIGlmIChvbGRXaWR0aCAhPSB3aWR0aCgpIHx8IG9s
ZEhlaWdodCAhPSBoZWlnaHQoKSkKICAgICAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVl
OyAgCiAKICAgICAgICAgLy8gQWxsb3cgdGhlIHRoZW1lIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUg
dGh1bWIKQEAgLTI2OCw4ICsyNjgsOCBAQCBib29sIFJlbmRlclNsaWRlcjo6bW91c2VFdmVudElz
SW5UaHVtYihNCiAgICAgfSBlbHNlIAogI2VuZGlmCiAgICAgewotICAgICAgICBGbG9hdFBvaW50
IGxvY2FsUG9pbnQgPSBtX3RodW1iLT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwoRmxvYXRQ
b2ludChldnQtPnBhZ2VYKCksIGV2dC0+cGFnZVkoKSksIGZhbHNlLCB0cnVlKTsKLSAgICAgICAg
SW50UmVjdCB0aHVtYkJvdW5kcyA9IG1fdGh1bWItPnJlbmRlcmVyKCktPmJvcmRlckJveCgpOwor
ICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX3RodW1iLT5yZW5kZXJCb3goKS0+YWJz
b2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQoZXZ0LT5wYWdlWCgpLCBldnQtPnBhZ2VZKCkpLCBmYWxz
ZSwgdHJ1ZSk7CisgICAgICAgIEludFJlY3QgdGh1bWJCb3VuZHMgPSBtX3RodW1iLT5yZW5kZXJC
b3goKS0+Ym9yZGVyQm94UmVjdCgpOwogICAgICAgICByZXR1cm4gdGh1bWJCb3VuZHMuY29udGFp
bnMocm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKICAgICB9CiB9CkBAIC0zNTEsOSArMzUx
LDkgQEAgaW50IFJlbmRlclNsaWRlcjo6cG9zaXRpb25Gb3JPZmZzZXQoY29ucwogICAgCiAgICAg
aW50IHBvc2l0aW9uOwogICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVy
dGljYWxQYXJ0KQotICAgICAgICBwb3NpdGlvbiA9IHAueSgpIC0gbV90aHVtYi0+cmVuZGVyZXIo
KS0+aGVpZ2h0KCkgLyAyOworICAgICAgICBwb3NpdGlvbiA9IHAueSgpIC0gbV90aHVtYi0+cmVu
ZGVyQm94KCktPmhlaWdodCgpIC8gMjsKICAgICBlbHNlCi0gICAgICAgIHBvc2l0aW9uID0gcC54
KCkgLSBtX3RodW1iLT5yZW5kZXJlcigpLT53aWR0aCgpIC8gMjsKKyAgICAgICAgcG9zaXRpb24g
PSBwLngoKSAtIG1fdGh1bWItPnJlbmRlckJveCgpLT53aWR0aCgpIC8gMjsKICAgICAKICAgICBy
ZXR1cm4gbWF4KDAsIG1pbihwb3NpdGlvbiwgdHJhY2tTaXplKCkpKTsKIH0KQEAgLTM5NSw4ICsz
OTUsOCBAQCBpbnQgUmVuZGVyU2xpZGVyOjp0cmFja1NpemUoKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQot
ICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCgpIC0gbV90aHVtYi0+cmVuZGVyZXIoKS0+aGVp
Z2h0KCk7Ci0gICAgcmV0dXJuIGNvbnRlbnRXaWR0aCgpIC0gbV90aHVtYi0+cmVuZGVyZXIoKS0+
d2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQoKSAtIG1fdGh1bWItPnJlbmRl
ckJveCgpLT5oZWlnaHQoKTsKKyAgICByZXR1cm4gY29udGVudFdpZHRoKCkgLSBtX3RodW1iLT5y
ZW5kZXJCb3goKS0+d2lkdGgoKTsKIH0KIAogdm9pZCBSZW5kZXJTbGlkZXI6OmZvcndhcmRFdmVu
dChFdmVudCogZXZ0KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24g
NDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxOSwxMiArMjE5LDEyIEBAIHZvaWQgUmVuZGVyVGFibGU6OmNhbGNXaWR0aCgpCiAg
ICAgTGVuZ3RoVHlwZSB3aWR0aFR5cGUgPSBzdHlsZSgpLT53aWR0aCgpLnR5cGUoKTsKICAgICBp
ZiAod2lkdGhUeXBlID4gUmVsYXRpdmUgJiYgc3R5bGUoKS0+d2lkdGgoKS5pc1Bvc2l0aXZlKCkp
IHsKICAgICAgICAgLy8gUGVyY2VudCBvciBmaXhlZCB0YWJsZQotICAgICAgICBtX3dpZHRoID0g
c3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlV2lkdGgpOwotICAgICAgICBt
X3dpZHRoID0gbWF4KG1pblByZWZXaWR0aCgpLCBtX3dpZHRoKTsKKyAgICAgICAgc2V0V2lkdGgo
c3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlV2lkdGgpKTsKKyAgICAgICAg
c2V0V2lkdGgobWF4KG1pblByZWZXaWR0aCgpLCB3aWR0aCgpKSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgLy8gQW4gYXV0byB3aWR0aCB0YWJsZSBzaG91bGQgc2hyaW5rIHRvIGZpdCB3aXRoaW4g
dGhlIGxpbmUgd2lkdGggaWYgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIAogICAgICAgICAvLyBhdm9p
ZCBvdmVybGFwcGluZyBmbG9hdHMuCi0gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gY2ItPmxpbmVX
aWR0aChtX3kpOworICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGNiLT5saW5lV2lkdGgobV9mcmFt
ZVJlY3QueSgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFN1YnRyYWN0IG91dCBhbnkgZml4ZWQg
bWFyZ2lucyBmcm9tIG91ciBhdmFpbGFibGUgd2lkdGggZm9yIGF1dG8gd2lkdGggdGFibGVzLgog
ICAgICAgICBpbnQgbWFyZ2luVG90YWwgPSAwOwpAQCAtMjM3LDEwICsyMzcsMTAgQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6Y2FsY1dpZHRoKCkKICAgICAgICAgaW50IGF2YWlsQ29udGVudFdpZHRoID0g
bWF4KDAsIGF2YWlsYWJsZVdpZHRoIC0gbWFyZ2luVG90YWwpOwogICAgICAgICAKICAgICAgICAg
Ly8gRW5zdXJlIHdlIGFyZW4ndCBiaWdnZXIgdGhhbiBvdXIgbWF4IHdpZHRoIG9yIHNtYWxsZXIg
dGhhbiBvdXIgbWluIHdpZHRoLgotICAgICAgICBtX3dpZHRoID0gbWluKGF2YWlsQ29udGVudFdp
ZHRoLCBtYXhQcmVmV2lkdGgoKSk7CisgICAgICAgIHNldFdpZHRoKG1pbihhdmFpbENvbnRlbnRX
aWR0aCwgbWF4UHJlZldpZHRoKCkpKTsKICAgICB9CiAgICAgCi0gICAgbV93aWR0aCA9IG1heCht
X3dpZHRoLCBtaW5QcmVmV2lkdGgoKSk7CisgICAgc2V0V2lkdGgobWF4KHdpZHRoKCksIG1pblBy
ZWZXaWR0aCgpKSk7CiAKICAgICAvLyBGaW5hbGx5LCB3aXRoIG91ciB0cnVlIHdpZHRoIGRldGVy
bWluZWQsIGNvbXB1dGUgb3VyIG1hcmdpbnMgZm9yIHJlYWwuCiAgICAgbV9tYXJnaW5SaWdodCA9
IDA7CkBAIC0yNjUsMjQgKzI2NSwyNCBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogICAg
ICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7CiAgICAgfQogICAg
IAotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIElu
dFNpemUobV94LCBtX3kpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIo
dmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgbV9mcmFtZVJlY3QueSgpKSk7CiAKLSAgICBtX2hl
aWdodCA9IDA7CisgICAgc2V0SGVpZ2h0KDApOwogICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSAwOwog
ICAgIG1fb3ZlcmZsb3dUb3AgPSAwOwogICAgIGluaXRNYXhNYXJnaW5WYWx1ZXMoKTsKICAgICAK
LSAgICBpbnQgb2xkV2lkdGggPSBtX3dpZHRoOworICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7
CiAgICAgY2FsY1dpZHRoKCk7CiAKLSAgICBpZiAobV9jYXB0aW9uICYmIG1fd2lkdGggIT0gb2xk
V2lkdGgpCisgICAgaWYgKG1fY2FwdGlvbiAmJiB3aWR0aCgpICE9IG9sZFdpZHRoKQogICAgICAg
ICBtX2NhcHRpb24tPnNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKIAogICAgIC8vIEZJWE1F
OiBUaGUgb3B0aW1pc2F0aW9uIGJlbG93IGRvZXNuJ3Qgd29yayBzaW5jZSB0aGUgaW50ZXJuYWwg
dGFibGUKICAgICAvLyBsYXlvdXQgY291bGQgaGF2ZSBjaGFuZ2VkLiAgd2UgbmVlZCB0byBhZGQg
YSBmbGFnIHRvIHRoZSB0YWJsZQogICAgIC8vIGxheW91dCB0aGF0IHRlbGxzIHVzIGlmIHNvbWV0
aGluZyBoYXMgY2hhbmdlZCBpbiB0aGUgbWluIG1heAogICAgIC8vIGNhbGN1bGF0aW9ucyB0byBk
byBpdCBjb3JyZWN0bHkuCi0vLyAgICAgaWYgKCBvbGRXaWR0aCAhPSBtX3dpZHRoIHx8IGNvbHVt
bnMuc2l6ZSgpICsgMSAhPSBjb2x1bW5Qb3Muc2l6ZSgpICkKKy8vICAgICBpZiAoIG9sZFdpZHRo
ICE9IHdpZHRoKCkgfHwgY29sdW1ucy5zaXplKCkgKyAxICE9IGNvbHVtblBvcy5zaXplKCkgKQog
ICAgIG1fdGFibGVMYXlvdXQtPmxheW91dCgpOwogCiAgICAgc2V0Q2VsbFdpZHRocygpOwpAQCAt
MzA1LDcgKzMwNSw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBtX292ZXJmbG93V2lkdGggPSBtX3dpZHRoICsgKGNvbGxhcHNpbmcgPyBvdXRl
ckJvcmRlclJpZ2h0KCkgLSBib3JkZXJSaWdodCgpIDogMCk7CisgICAgbV9vdmVyZmxvd1dpZHRo
ID0gd2lkdGgoKSArIChjb2xsYXBzaW5nID8gb3V0ZXJCb3JkZXJSaWdodCgpIC0gYm9yZGVyUmln
aHQoKSA6IDApOwogICAgIG1fb3ZlcmZsb3dMZWZ0ID0gY29sbGFwc2luZyA/IGJvcmRlckxlZnQo
KSAtIG91dGVyQm9yZGVyTGVmdCgpIDogMDsKIAogICAgIC8vIElmIGFueSB0YWJsZSBzZWN0aW9u
IG1vdmVkIHZlcnRpY2FsbHksIHdlIHdpbGwganVzdCByZXBhaW50IGV2ZXJ5dGhpbmcgZnJvbSB0
aGF0CkBAIC0zMTYsMjggKzMxNiwyOCBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogCiAg
ICAgLy8gRklYTUU6IENvbGxhcHNlIGNhcHRpb24gbWFyZ2luLgogICAgIGlmIChtX2NhcHRpb24g
JiYgbV9jYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9uU2lkZSgpICE9IENBUEJPVFRPTSkgewotICAg
ICAgICBJbnRSZWN0IGNhcHRpb25SZWN0KG1fY2FwdGlvbi0+eFBvcygpLCBtX2NhcHRpb24tPnlQ
b3MoKSwgbV9jYXB0aW9uLT53aWR0aCgpLCBtX2NhcHRpb24tPmhlaWdodCgpKTsKKyAgICAgICAg
SW50UmVjdCBjYXB0aW9uUmVjdChtX2NhcHRpb24tPngoKSwgbV9jYXB0aW9uLT55KCksIG1fY2Fw
dGlvbi0+d2lkdGgoKSwgbV9jYXB0aW9uLT5oZWlnaHQoKSk7CiAKLSAgICAgICAgbV9jYXB0aW9u
LT5zZXRQb3MobV9jYXB0aW9uLT5tYXJnaW5MZWZ0KCksIG1faGVpZ2h0KTsKKyAgICAgICAgbV9j
YXB0aW9uLT5zZXRMb2NhdGlvbihtX2NhcHRpb24tPm1hcmdpbkxlZnQoKSwgaGVpZ2h0KCkpOwog
ICAgICAgICBpZiAoIXNlbGZOZWVkc0xheW91dCgpICYmIG1fY2FwdGlvbi0+Y2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkpCiAgICAgICAgICAgICBtX2NhcHRpb24tPnJlcGFpbnREdXJpbmdM
YXlvdXRJZk1vdmVkKGNhcHRpb25SZWN0KTsKIAotICAgICAgICBtX2hlaWdodCArPSBtX2NhcHRp
b24tPmhlaWdodCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Ub3AoKSArIG1fY2FwdGlvbi0+bWFyZ2lu
Qm90dG9tKCk7Ci0gICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1fb3ZlcmZsb3dMZWZ0LCBt
X2NhcHRpb24tPnhQb3MoKSArIG1fY2FwdGlvbi0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSk7Ci0gICAg
ICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lkdGgsIG1fY2FwdGlvbi0+eFBv
cygpICsgbV9jYXB0aW9uLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSk7Ci0gICAgICAgIG1fb3ZlcmZs
b3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgbV9jYXB0aW9uLT55UG9zKCkgKyBtX2NhcHRpb24t
Pm92ZXJmbG93VG9wKGZhbHNlKSk7Ci0gICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9v
dmVyZmxvd0hlaWdodCwgbV9jYXB0aW9uLT55UG9zKCkgKyBtX2NhcHRpb24tPm92ZXJmbG93SGVp
Z2h0KGZhbHNlKSk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIG1fY2FwdGlvbi0+aGVp
Z2h0KCkgKyBtX2NhcHRpb24tPm1hcmdpblRvcCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Cb3R0b20o
KSk7CisgICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1fb3ZlcmZsb3dMZWZ0LCBtX2NhcHRp
b24tPngoKSArIG1fY2FwdGlvbi0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSk7CisgICAgICAgIG1fb3Zl
cmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lkdGgsIG1fY2FwdGlvbi0+eCgpICsgbV9jYXB0
aW9uLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSk7CisgICAgICAgIG1fb3ZlcmZsb3dUb3AgPSBtaW4o
bV9vdmVyZmxvd1RvcCwgbV9jYXB0aW9uLT55KCkgKyBtX2NhcHRpb24tPm92ZXJmbG93VG9wKGZh
bHNlKSk7CisgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwg
bV9jYXB0aW9uLT55KCkgKyBtX2NhcHRpb24tPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSk7CiAKLSAg
ICAgICAgaWYgKG1faGVpZ2h0ICE9IG9sZFRhYmxlVG9wKSB7CisgICAgICAgIGlmIChoZWlnaHQo
KSAhPSBvbGRUYWJsZVRvcCkgewogICAgICAgICAgICAgc2VjdGlvbk1vdmVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIG1vdmVkU2VjdGlvblRvcCA9IG1pbihtX2hlaWdodCwgb2xkVGFibGVUb3ApOwor
ICAgICAgICAgICAgbW92ZWRTZWN0aW9uVG9wID0gbWluKGhlaWdodCgpLCBvbGRUYWJsZVRvcCk7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpbnQgYnBUb3AgPSBib3JkZXJUb3AoKSArIChjb2xs
YXBzaW5nID8gMCA6IHBhZGRpbmdUb3AoKSk7CiAgICAgaW50IGJwQm90dG9tID0gYm9yZGVyQm90
dG9tKCkgKyAoY29sbGFwc2luZyA/IDAgOiBwYWRkaW5nQm90dG9tKCkpOwogICAgIAotICAgIG1f
aGVpZ2h0ICs9IGJwVG9wOworICAgIHNldEhlaWdodChoZWlnaHQoKSArIGJwVG9wKTsKIAogICAg
IGlmICghaXNQb3NpdGlvbmVkKCkpCiAgICAgICAgIGNhbGNIZWlnaHQoKTsKQEAgLTM2MSw3ICsz
NjEsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogICAgIGlmICghbV9maXJzdEJvZHkg
JiYgdGggPiBjYWxjdWxhdGVkSGVpZ2h0ICYmICFzdHlsZSgpLT5odG1sSGFja3MoKSkgewogICAg
ICAgICAvLyBDb21wbGV0ZWx5IGVtcHR5IHRhYmxlcyAod2l0aCBubyBzZWN0aW9ucyBvciBhbnl0
aGluZykgc2hvdWxkIGF0IGxlYXN0IGhvbm9yIHNwZWNpZmllZCBoZWlnaHQKICAgICAgICAgLy8g
aW4gc3RyaWN0IG1vZGUuCi0gICAgICAgIG1faGVpZ2h0ICs9IHRoOworICAgICAgICBzZXRIZWln
aHQoaGVpZ2h0KCkgKyB0aCk7CiAgICAgfQogICAgIAogICAgIGludCBibCA9IGJvcmRlckxlZnQo
KTsKQEAgLTM3MSwzOCArMzcxLDM4IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAg
Ly8gcG9zaXRpb24gdGhlIHRhYmxlIHNlY3Rpb25zCiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBz
ZWN0aW9uID0gbV9oZWFkID8gbV9oZWFkIDogKG1fZmlyc3RCb2R5ID8gbV9maXJzdEJvZHkgOiBt
X2Zvb3QpOwogICAgIHdoaWxlIChzZWN0aW9uKSB7Ci0gICAgICAgIGlmICghc2VjdGlvbk1vdmVk
ICYmIHNlY3Rpb24tPnlQb3MoKSAhPSBtX2hlaWdodCkgeworICAgICAgICBpZiAoIXNlY3Rpb25N
b3ZlZCAmJiBzZWN0aW9uLT55KCkgIT0gaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIHNlY3Rpb25N
b3ZlZCA9IHRydWU7Ci0gICAgICAgICAgICBtb3ZlZFNlY3Rpb25Ub3AgPSBtaW4obV9oZWlnaHQs
IHNlY3Rpb24tPnlQb3MoKSkgKyBzZWN0aW9uLT5vdmVyZmxvd1RvcChmYWxzZSk7CisgICAgICAg
ICAgICBtb3ZlZFNlY3Rpb25Ub3AgPSBtaW4oaGVpZ2h0KCksIHNlY3Rpb24tPnkoKSkgKyBzZWN0
aW9uLT5vdmVyZmxvd1RvcChmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgc2VjdGlvbi0+c2V0
UG9zKGJsLCBtX2hlaWdodCk7CisgICAgICAgIHNlY3Rpb24tPnNldExvY2F0aW9uKGJsLCBoZWln
aHQoKSk7CiAKLSAgICAgICAgbV9oZWlnaHQgKz0gc2VjdGlvbi0+aGVpZ2h0KCk7Ci0gICAgICAg
IG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1fb3ZlcmZsb3dMZWZ0LCBzZWN0aW9uLT54UG9zKCkgKyBz
ZWN0aW9uLT5vdmVyZmxvd0xlZnQoZmFsc2UpKTsKLSAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0g
bWF4KG1fb3ZlcmZsb3dXaWR0aCwgc2VjdGlvbi0+eFBvcygpICsgc2VjdGlvbi0+b3ZlcmZsb3dX
aWR0aChmYWxzZSkpOwotICAgICAgICBtX292ZXJmbG93VG9wID0gbWluKG1fb3ZlcmZsb3dUb3As
IHNlY3Rpb24tPnlQb3MoKSArIHNlY3Rpb24tPm92ZXJmbG93VG9wKGZhbHNlKSk7Ci0gICAgICAg
IG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgc2VjdGlvbi0+eVBvcygp
ICsgc2VjdGlvbi0+b3ZlcmZsb3dIZWlnaHQoZmFsc2UpKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhl
aWdodCgpICsgc2VjdGlvbi0+aGVpZ2h0KCkpOworICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1p
bihtX292ZXJmbG93TGVmdCwgc2VjdGlvbi0+eCgpICsgc2VjdGlvbi0+b3ZlcmZsb3dMZWZ0KGZh
bHNlKSk7CisgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lkdGgsIHNl
Y3Rpb24tPngoKSArIHNlY3Rpb24tPm92ZXJmbG93V2lkdGgoZmFsc2UpKTsKKyAgICAgICAgbV9v
dmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9wLCBzZWN0aW9uLT55KCkgKyBzZWN0aW9uLT5v
dmVyZmxvd1RvcChmYWxzZSkpOworICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3Zl
cmZsb3dIZWlnaHQsIHNlY3Rpb24tPnkoKSArIHNlY3Rpb24tPm92ZXJmbG93SGVpZ2h0KGZhbHNl
KSk7CiAgICAgICAgIHNlY3Rpb24gPSBzZWN0aW9uQmVsb3coc2VjdGlvbik7CiAgICAgfQogCi0g
ICAgbV9oZWlnaHQgKz0gYnBCb3R0b207CisgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgYnBCb3R0
b20pOwogCiAgICAgaWYgKG1fY2FwdGlvbiAmJiBtX2NhcHRpb24tPnN0eWxlKCktPmNhcHRpb25T
aWRlKCkgPT0gQ0FQQk9UVE9NKSB7Ci0gICAgICAgIEludFJlY3QgY2FwdGlvblJlY3QobV9jYXB0
aW9uLT54UG9zKCksIG1fY2FwdGlvbi0+eVBvcygpLCBtX2NhcHRpb24tPndpZHRoKCksIG1fY2Fw
dGlvbi0+aGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IGNhcHRpb25SZWN0KG1fY2FwdGlvbi0+
eCgpLCBtX2NhcHRpb24tPnkoKSwgbV9jYXB0aW9uLT53aWR0aCgpLCBtX2NhcHRpb24tPmhlaWdo
dCgpKTsKIAotICAgICAgICBtX2NhcHRpb24tPnNldFBvcyhtX2NhcHRpb24tPm1hcmdpbkxlZnQo
KSwgbV9oZWlnaHQpOworICAgICAgICBtX2NhcHRpb24tPnNldExvY2F0aW9uKG1fY2FwdGlvbi0+
bWFyZ2luTGVmdCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIGlmICghc2VsZk5lZWRzTGF5b3V0KCkg
JiYgbV9jYXB0aW9uLT5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkKICAgICAgICAgICAg
IG1fY2FwdGlvbi0+cmVwYWludER1cmluZ0xheW91dElmTW92ZWQoY2FwdGlvblJlY3QpOwogCi0g
ICAgICAgIG1faGVpZ2h0ICs9IG1fY2FwdGlvbi0+aGVpZ2h0KCkgKyBtX2NhcHRpb24tPm1hcmdp
blRvcCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Cb3R0b20oKTsKLSAgICAgICAgbV9vdmVyZmxvd0xl
ZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIG1fY2FwdGlvbi0+eFBvcygpICsgbV9jYXB0aW9uLT5v
dmVyZmxvd0xlZnQoZmFsc2UpKTsKLSAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3Zl
cmZsb3dXaWR0aCwgbV9jYXB0aW9uLT54UG9zKCkgKyBtX2NhcHRpb24tPm92ZXJmbG93V2lkdGgo
ZmFsc2UpKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbV9jYXB0aW9uLT5oZWlnaHQo
KSArIG1fY2FwdGlvbi0+bWFyZ2luVG9wKCkgKyBtX2NhcHRpb24tPm1hcmdpbkJvdHRvbSgpKTsK
KyAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIG1fY2FwdGlvbi0+
eCgpICsgbV9jYXB0aW9uLT5vdmVyZmxvd0xlZnQoZmFsc2UpKTsKKyAgICAgICAgbV9vdmVyZmxv
d1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgbV9jYXB0aW9uLT54KCkgKyBtX2NhcHRpb24t
Pm92ZXJmbG93V2lkdGgoZmFsc2UpKTsKICAgICB9CiAKICAgICBpZiAoaXNQb3NpdGlvbmVkKCkp
CiAgICAgICAgIGNhbGNIZWlnaHQoKTsKIAotICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9v
dmVyZmxvd0hlaWdodCwgbV9oZWlnaHQpOworICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9v
dmVyZmxvd0hlaWdodCwgaGVpZ2h0KCkpOwogCiAgICAgLy8gdGFibGUgY2FuIGJlIGNvbnRhaW5p
bmcgYmxvY2sgb2YgcG9zaXRpb25lZCBlbGVtZW50cy4KICAgICAvLyBGSVhNRTogT25seSBwYXNz
IHRydWUgaWYgd2lkdGggb3IgaGVpZ2h0IGNoYW5nZWQuCkBAIC00MTEsOSArNDExLDkgQEAgdm9p
ZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKSB7CiAg
ICAgICAgIGZvciAoU2hhZG93RGF0YSogYm94U2hhZG93ID0gc3R5bGUoKS0+Ym94U2hhZG93KCk7
IGJveFNoYWRvdzsgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KSB7CiAgICAgICAgICAgICBt
X292ZXJmbG93TGVmdCA9IG1pbihtX292ZXJmbG93TGVmdCwgYm94U2hhZG93LT54IC0gYm94U2hh
ZG93LT5ibHVyKTsKLSAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93
V2lkdGgsIG1fd2lkdGggKyBib3hTaGFkb3ctPnggKyBib3hTaGFkb3ctPmJsdXIpOworICAgICAg
ICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgd2lkdGgoKSArIGJv
eFNoYWRvdy0+eCArIGJveFNoYWRvdy0+Ymx1cik7CiAgICAgICAgICAgICBtX292ZXJmbG93VG9w
ID0gbWluKG1fb3ZlcmZsb3dUb3AsIGJveFNoYWRvdy0+eSAtIGJveFNoYWRvdy0+Ymx1cik7Ci0g
ICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIG1faGVp
Z2h0ICsgYm94U2hhZG93LT55ICsgYm94U2hhZG93LT5ibHVyKTsKKyAgICAgICAgICAgIG1fb3Zl
cmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgaGVpZ2h0KCkgKyBib3hTaGFkb3ct
PnkgKyBib3hTaGFkb3ctPmJsdXIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
aGFzUmVmbGVjdGlvbigpKSB7CkBAIC00NDcsOCArNDQ3LDggQEAgdm9pZCBSZW5kZXJUYWJsZTo6
c2V0Q2VsbFdpZHRocygpCiAKIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICB0eCArPSB4UG9zKCk7Ci0gICAgdHkgKz0g
eVBvcygpOworICAgIHR4ICs9IHgoKTsKKyAgICB0eSArPSB5KCk7CiAKICAgICBQYWludFBoYXNl
IHBhaW50UGhhc2UgPSBwYWludEluZm8ucGhhc2U7CiAKQEAgLTExMjgsNyArMTEyOCw3IEBAIGlu
dCBSZW5kZXJUYWJsZTo6Z2V0QmFzZWxpbmVPZkZpcnN0TGluZUIKICAgICBpZiAoIWZpcnN0Tm9u
RW1wdHlTZWN0aW9uKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICByZXR1cm4gZmlyc3ROb25F
bXB0eVNlY3Rpb24tPnlQb3MoKSArIGZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5nZXRCYXNlbGluZU9m
Rmlyc3RMaW5lQm94KCk7CisgICAgcmV0dXJuIGZpcnN0Tm9uRW1wdHlTZWN0aW9uLT55KCkgKyBm
aXJzdE5vbkVtcHR5U2VjdGlvbi0+Z2V0QmFzZWxpbmVPZkZpcnN0TGluZUJveCgpOwogfQogCiBJ
bnRSZWN0IFJlbmRlclRhYmxlOjpnZXRPdmVyZmxvd0NsaXBSZWN0KGludCB0eCwgaW50IHR5KQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA0MDA3NSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMywxMCArMTIzLDEwIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjYWxjV2lkdGgoKQog
ewogfQogCi12b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2V0V2lkdGgoaW50IHdpZHRoKQordm9pZCBS
ZW5kZXJUYWJsZUNlbGw6OnNldFdpZHRoKGludCB3KQogewotICAgIGlmICh3aWR0aCAhPSBtX3dp
ZHRoKSB7Ci0gICAgICAgIG1fd2lkdGggPSB3aWR0aDsKKyAgICBpZiAodyAhPSB3aWR0aCgpKSB7
CisgICAgICAgIHNldFdpZHRoKHcpOwogICAgICAgICBtX3dpZHRoQ2hhbmdlZCA9IHRydWU7CiAg
ICAgfQogfQpAQCAtMTc3LDggKzE3Nyw4IEBAIEludFJlY3QgUmVuZGVyVGFibGVDZWxsOjphYnNv
bHV0ZUNsaXBwZWQKICAgICAgICAgfQogICAgIH0KICAgICBsZWZ0ID0gbWF4KGxlZnQsIC1vdmVy
Zmxvd0xlZnQoZmFsc2UpKTsKLSAgICB0b3AgPSBtYXgodG9wLCAtb3ZlcmZsb3dUb3AoZmFsc2Up
IC0gYm9yZGVyVG9wRXh0cmEoKSk7Ci0gICAgSW50UmVjdCByKC1sZWZ0LCAtYm9yZGVyVG9wRXh0
cmEoKSAtIHRvcCwgbGVmdCArIG1heCh3aWR0aCgpICsgcmlnaHQsIG92ZXJmbG93V2lkdGgoZmFs
c2UpKSwgYm9yZGVyVG9wRXh0cmEoKSArIHRvcCArIG1heChoZWlnaHQoKSArIGJvdHRvbSArIGJv
cmRlckJvdHRvbUV4dHJhKCksIG92ZXJmbG93SGVpZ2h0KGZhbHNlKSkpOworICAgIHRvcCA9IG1h
eCh0b3AsIC1vdmVyZmxvd1RvcChmYWxzZSkgLSBpbnRyaW5zaWNQYWRkaW5nVG9wKCkpOworICAg
IEludFJlY3QgcigtbGVmdCwgLWludHJpbnNpY1BhZGRpbmdUb3AoKSAtIHRvcCwgbGVmdCArIG1h
eCh3aWR0aCgpICsgcmlnaHQsIG92ZXJmbG93V2lkdGgoZmFsc2UpKSwgaW50cmluc2ljUGFkZGlu
Z1RvcCgpICsgdG9wICsgbWF4KGhlaWdodCgpICsgYm90dG9tICsgaW50cmluc2ljUGFkZGluZ0Jv
dHRvbSgpLCBvdmVyZmxvd0hlaWdodChmYWxzZSkpKTsKIAogICAgIGlmIChSZW5kZXJWaWV3KiB2
ID0gdmlldygpKQogICAgICAgICByLm1vdmUodi0+bGF5b3V0RGVsdGEoKSk7CkBAIC0xOTIsNyAr
MTkyLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVBYnNvbHV0ZVJlcAogICAgIHIu
c2V0WShyLnkoKSArIG1fdG9wRXh0cmEpOwogICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7CiAg
ICAgaWYgKCghdiB8fCAhdi0+bGF5b3V0U3RhdGVFbmFibGVkKCkpICYmIHBhcmVudCgpKQotICAg
ICAgICByLm1vdmUoLXBhcmVudCgpLT54UG9zKCksIC1wYXJlbnQoKS0+eVBvcygpKTsgLy8gUm93
cyBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRoZWlyIG9m
ZnNldCBpbi4KKyAgICAgICAgci5tb3ZlKC1wYXJlbnRCb3goKS0+eCgpLCAtcGFyZW50Qm94KCkt
PnkoKSk7IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0
IGFkZCB0aGVpciBvZmZzZXQgaW4uCiAgICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVBYnNvbHV0ZVJl
cGFpbnRSZWN0KHIsIGZpeGVkKTsKIH0KIApAQCAtMjAxLDcgKzIwMSw3IEBAIEZsb2F0UG9pbnQg
UmVuZGVyVGFibGVDZWxsOjpsb2NhbFRvQWJzb2wKICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygp
OwogICAgIGlmICgoIXYgfHwgIXYtPmxheW91dFN0YXRlRW5hYmxlZCgpKSAmJiBwYXJlbnQoKSkg
ewogICAgICAgICAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyBk
b24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLgotICAgICAgICBsb2NhbFBvaW50Lm1vdmUoLXBhcmVu
dCgpLT54UG9zKCksIC1wYXJlbnQoKS0+eVBvcygpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3Zl
KC1wYXJlbnRCb3goKS0+eCgpLCAtcGFyZW50Qm94KCktPnkoKSk7CiAgICAgfQogICAgIHJldHVy
biBSZW5kZXJCbG9jazo6bG9jYWxUb0Fic29sdXRlKGxvY2FsUG9pbnQsIGZpeGVkLCB1c2VUcmFu
c2Zvcm1zKTsKIH0KQEAgLTIxMSw3ICsyMTEsNyBAQCBGbG9hdFBvaW50IFJlbmRlclRhYmxlQ2Vs
bDo6YWJzb2x1dGVUb0xvCiAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gUmVuZGVyQmxvY2s6
OmFic29sdXRlVG9Mb2NhbChjb250YWluZXJQb2ludCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMpOwog
ICAgIGlmIChwYXJlbnQoKSkgewogICAgICAgICAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBjb29y
ZGluYXRlIHNwYWNlLCBzbyBhZGQgdGhlaXIgb2Zmc2V0IGJhY2sgaW4uCi0gICAgICAgIGxvY2Fs
UG9pbnQubW92ZShwYXJlbnQoKS0+eFBvcygpLCBwYXJlbnQoKS0+eVBvcygpKTsKKyAgICAgICAg
bG9jYWxQb2ludC5tb3ZlKHBhcmVudEJveCgpLT54KCksIHBhcmVudEJveCgpLT55KCkpOwogICAg
IH0KICAgICByZXR1cm4gbG9jYWxQb2ludDsKIH0KQEAgLTIyMSw3ICsyMjEsNyBAQCBGbG9hdFF1
YWQgUmVuZGVyVGFibGVDZWxsOjpsb2NhbFRvQWJzb2x1CiAgICAgRmxvYXRRdWFkIHF1YWQgPSBs
b2NhbFF1YWQ7CiAgICAgaWYgKHBhcmVudCgpKSB7CiAgICAgICAgIC8vIFJvd3MgYXJlIGluIHRo
ZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCi0g
ICAgICAgIHF1YWQubW92ZSgtcGFyZW50KCktPnhQb3MoKSwgLXBhcmVudCgpLT55UG9zKCkpOwor
ICAgICAgICBxdWFkLm1vdmUoLXBhcmVudEJveCgpLT54KCksIC1wYXJlbnRCb3goKS0+eSgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpsb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWQs
IGZpeGVkKTsKIH0KQEAgLTYzMCwxOCArNjMwLDE4IEBAIGludCBSZW5kZXJUYWJsZUNlbGw6OmJv
cmRlckhhbGZCb3R0b20oYm8KIAogdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICB0eCArPSBtX3g7Ci0gICAgdHkg
Kz0gbV95OworICAgIHR4ICs9IHgoKTsKKyAgICB0eSArPSBtX2ZyYW1lUmVjdC55KCk7CiAKICAg
ICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4uLgogICAgIGludCBv
cyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKTsKIAogICAgIGlmIChw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNvbGxhcHNlZFRhYmxlQm9yZGVycyAmJiBzdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkgewogICAgICAgICBpZiAodHkgLSB0YWJsZSgp
LT5vdXRlckJvcmRlclRvcCgpID49IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpICsgb3MgfHwKLSAg
ICAgICAgICAgICAgICB0eSArIG1fdG9wRXh0cmEgKyBtX2hlaWdodCArIG1fYm90dG9tRXh0cmEg
KyB0YWJsZSgpLT5vdXRlckJvcmRlckJvdHRvbSgpIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9z
KQorICAgICAgICAgICAgICAgIHR5ICsgbV90b3BFeHRyYSArIGhlaWdodCgpICsgbV9ib3R0b21F
eHRyYSArIHRhYmxlKCktPm91dGVyQm9yZGVyQm90dG9tKCkgPD0gcGFpbnRJbmZvLnJlY3QueSgp
IC0gb3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGludCB3ID0gd2lkdGgoKTsKLSAg
ICAgICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21F
eHRyYSgpOworICAgICAgICBpbnQgaCA9IGhlaWdodCgpICsgaW50cmluc2ljUGFkZGluZ1RvcCgp
ICsgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpOwogICAgICAgICBwYWludENvbGxhcHNlZEJvcmRl
cihwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBpZiAodHkgKyBvdmVyZmxvd1RvcChmYWxzZSkgPj0gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkg
KyBvcyB8fCB0eSArIG1fdG9wRXh0cmEgKyBvdmVyZmxvd0hlaWdodChmYWxzZSkgKyBtX2JvdHRv
bUV4dHJhIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQpAQCAtODA3LDEzICs4MDcsMTMgQEAg
dm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoYmFja2dyb3VuZE9iamVjdCAhPSB0aGlzKSB7Ci0gICAgICAgIHR4ICs9IG1f
eDsKLSAgICAgICAgdHkgKz0gbV95ICsgbV90b3BFeHRyYTsKKyAgICAgICAgdHggKz0geCgpOwor
ICAgICAgICB0eSArPSBtX2ZyYW1lUmVjdC55KCkgKyBtX3RvcEV4dHJhOwogICAgIH0KIAogICAg
IGludCB3ID0gd2lkdGgoKTsKLSAgICBpbnQgaCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEo
KSArIGJvcmRlckJvdHRvbUV4dHJhKCk7Ci0gICAgdHkgLT0gYm9yZGVyVG9wRXh0cmEoKTsKKyAg
ICBpbnQgaCA9IGhlaWdodCgpICsgaW50cmluc2ljUGFkZGluZ1RvcCgpICsgaW50cmluc2ljUGFk
ZGluZ0JvdHRvbSgpOworICAgIHR5IC09IGludHJpbnNpY1BhZGRpbmdUb3AoKTsKIAogICAgIGlu
dCBteSA9IG1heCh0eSwgcGFpbnRJbmZvLnJlY3QueSgpKTsKICAgICBpbnQgZW5kID0gbWluKHBh
aW50SW5mby5yZWN0LmJvdHRvbSgpLCB0eSArIGgpOwpAQCAtODQ1LDEwICs4NDUsMTAgQEAgdm9p
ZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Qm94RGVjb3JhdGlvbgogICAgICAgICByZXR1cm47CiAK
ICAgICBpbnQgdyA9IHdpZHRoKCk7Ci0gICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRlclRvcEV4
dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpOworICAgIGludCBoID0gaGVpZ2h0KCkgKyBpbnRy
aW5zaWNQYWRkaW5nVG9wKCkgKyBpbnRyaW5zaWNQYWRkaW5nQm90dG9tKCk7CiAgICAKICAgICBp
ZiAoc3R5bGUoKS0+Ym94U2hhZG93KCkpCi0gICAgICAgIHBhaW50Qm94U2hhZG93KHBhaW50SW5m
by5jb250ZXh0LCB0eCwgdHkgLSBib3JkZXJUb3BFeHRyYSgpLCB3LCBoLCBzdHlsZSgpKTsKKyAg
ICAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSAtIGludHJpbnNp
Y1BhZGRpbmdUb3AoKSwgdywgaCwgc3R5bGUoKSk7CiAgICAgCiAgICAgLy8gUGFpbnQgb3VyIGNl
bGwgYmFja2dyb3VuZC4KICAgICBwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChwYWludEluZm8s
IHR4LCB0eSwgdGhpcyk7CkBAIC04NTYsNyArODU2LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6
OnBhaW50Qm94RGVjb3JhdGlvbgogICAgIGlmICghc3R5bGUoKS0+aGFzQm9yZGVyKCkgfHwgdGFi
bGVFbHQtPmNvbGxhcHNlQm9yZGVycygpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0eSAtPSBi
b3JkZXJUb3BFeHRyYSgpOworICAgIHR5IC09IGludHJpbnNpY1BhZGRpbmdUb3AoKTsKICAgICBw
YWludEJvcmRlcihwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgpKTsKIH0K
IApAQCAtODcwLDcgKzg3MCw3IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludE1hc2soUGFp
bnRJbmYKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IHcgPSB3aWR0aCgpOwotICAgIGludCBo
ID0gaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKKyAg
ICBpbnQgaCA9IGhlaWdodCgpICsgaW50cmluc2ljUGFkZGluZ1RvcCgpICsgaW50cmluc2ljUGFk
ZGluZ0JvdHRvbSgpOwogICAgCiAgICAgaW50IG15ID0gbWF4KHR5LCBwYWludEluZm8ucmVjdC55
KCkpOwogICAgIGludCBlbmQgPSBtaW4ocGFpbnRJbmZvLnJlY3QuYm90dG9tKCksIHR5ICsgaCk7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkocmV2aXNpb24gNDAwNzUpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
OTYsOSArOTYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludENvbGxhcHNlZEJvcmRlcihHcmFw
aGljc0NvbnRleHQqLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7CiAgICAgdm9pZCBwYWlu
dEJhY2tncm91bmRzQmVoaW5kQ2VsbChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgUmVuZGVy
T2JqZWN0KiBiYWNrZ3JvdW5kT2JqZWN0KTsKIAotICAgIC8vIExpZSBhYm91dCBwb3NpdGlvbiB0
byBvdXRzaWRlIG9ic2VydmVycy4KLSAgICB2aXJ0dWFsIGludCB5UG9zKCkgY29uc3QgeyByZXR1
cm4gbV95ICsgbV90b3BFeHRyYTsgfQotCiAgICAgdmlydHVhbCBJbnRSZWN0IGFic29sdXRlQ2xp
cHBlZE92ZXJmbG93UmVjdCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlQWJzb2x1dGVSZXBh
aW50UmVjdChJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIEZsb2F0
UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQo
KSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7
CkBAIC0xMTAsOCArMTA3LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2VsbFRvcEV4dHJhKGlu
dCBwKSB7IG1fdG9wRXh0cmEgPSBwOyB9CiAgICAgdm9pZCBzZXRDZWxsQm90dG9tRXh0cmEoaW50
IHApIHsgbV9ib3R0b21FeHRyYSA9IHA7IH0KIAotICAgIHZpcnR1YWwgaW50IGJvcmRlclRvcEV4
dHJhKCkgY29uc3QgeyByZXR1cm4gbV90b3BFeHRyYTsgfQotICAgIHZpcnR1YWwgaW50IGJvcmRl
ckJvdHRvbUV4dHJhKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b21FeHRyYTsgfQorICAgIHZpcnR1
YWwgaW50IGludHJpbnNpY1BhZGRpbmdUb3AoKSBjb25zdCB7IHJldHVybiBtX3RvcEV4dHJhOyB9
CisgICAgdmlydHVhbCBpbnQgaW50cmluc2ljUGFkZGluZ0JvdHRvbSgpIGNvbnN0IHsgcmV0dXJu
IG1fYm90dG9tRXh0cmE7IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdp
bGxDaGFuZ2UoUmVuZGVyU3R5bGU6OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9u
IDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjph
ZGRDaGlsZChSZW5kZXIKICAgICBpZiAoIWVuc3VyZVJvd3MobV9jUm93ICsgMSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRlcmVyID0gY2hpbGQ7CisgICAg
bV9ncmlkW21fY1Jvd10ucm93UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVJvdyo+
KGNoaWxkKTsKIAogICAgIGlmICghYmVmb3JlQ2hpbGQpIHsKICAgICAgICAgbV9ncmlkW21fY1Jv
d10uaGVpZ2h0ID0gY2hpbGQtPnN0eWxlKCktPmhlaWdodCgpOwpAQCAtMTc0LDcgKzE3NCw3IEBA
IGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKGludCAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVGFibGVDZWxs
KiBjZWxsLCBSZW5kZXJPYmplY3QqIHJvdykKK3ZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRD
ZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUmVuZGVyVGFibGVSb3cqIHJvdykKIHsKICAgICBp
bnQgclNwYW4gPSBjZWxsLT5yb3dTcGFuKCk7CiAgICAgaW50IGNTcGFuID0gY2VsbC0+Y29sU3Bh
bigpOwpAQCAtMjgzLDcgKzI4Myw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzZXRDZWxs
V2lkdGhzKCkKICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZVB1c2hlci5kaWRQdXNoKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlY2huaWNhbGx5LCB3ZSBzaG91bGQgYWxz
byBwdXNoIHN0YXRlIGZvciB0aGUgcm93LCBidXQgc2luY2UKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHJvd3MgZG9uJ3QgcHVzaCBhIGNvb3JkaW5hdGUgdHJhbnNmb3JtLCB0aGF0J3Mgbm90
IG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlUHVzaGVyLnB1c2godGhp
cywgSW50U2l6ZShtX3gsIG1feSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVQdXNo
ZXIucHVzaCh0aGlzLCBJbnRTaXplKHgoKSwgbV9mcmFtZVJlY3QueSgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2VsbC0+cmVwYWludCgpOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTMzMyw3ICszMzMsNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpj
YWxjUm93SGVpZ2h0KCkKICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlUHVzaGVyLmRpZFB1c2go
KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBUZWNobmljYWxseSwgd2Ugc2hvdWxkIGFsc28g
cHVzaCBzdGF0ZSBmb3IgdGhlIHJvdywgYnV0IHNpbmNlCiAgICAgICAgICAgICAgICAgICAgIC8v
IHJvd3MgZG9uJ3QgcHVzaCBhIGNvb3JkaW5hdGUgdHJhbnNmb3JtLCB0aGF0J3Mgbm90IG5lY2Vz
c2FyeS4KLSAgICAgICAgICAgICAgICAgICAgc3RhdGVQdXNoZXIucHVzaCh0aGlzLCBJbnRTaXpl
KG1feCwgbV95KSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlUHVzaGVyLnB1c2godGhpcywg
SW50U2l6ZSh4KCksIG1fZnJhbWVSZWN0LnkoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBjZWxsLT5zZXRPdmVycmlkZVNpemUoLTEpOwogICAgICAgICAgICAgICAgIGNl
bGwtPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwpAQCAtMzg0LDkgKzM4NCw5IEBA
IGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHQKICAgICBpbnQgdG90YWxS
b3dzID0gbV9ncmlkUm93czsKICAgICAKICAgICAvLyBTZXQgdGhlIHdpZHRoIG9mIG91ciBzZWN0
aW9uIG5vdy4gIFRoZSByb3dzIHdpbGwgYWxzbyBiZSB0aGlzIHdpZHRoLgotICAgIG1fd2lkdGgg
PSB0YWJsZSgpLT5jb250ZW50V2lkdGgoKTsKKyAgICBzZXRXaWR0aCh0YWJsZSgpLT5jb250ZW50
V2lkdGgoKSk7CiAgICAgbV9vdmVyZmxvd0xlZnQgPSAwOwotICAgIG1fb3ZlcmZsb3dXaWR0aCA9
IG1fd2lkdGg7CisgICAgbV9vdmVyZmxvd1dpZHRoID0gd2lkdGgoKTsKICAgICBtX292ZXJmbG93
VG9wID0gMDsKICAgICBtX292ZXJmbG93SGVpZ2h0ID0gMDsKICAgICBtX2hhc092ZXJmbG93aW5n
Q2VsbCA9IGZhbHNlOwpAQCAtNDU0LDEzICs0NTQsMTMgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlv
bjo6bGF5b3V0Um93cyhpbnQgdAogICAgIGludCB2c3BhY2luZyA9IHRhYmxlKCktPnZCb3JkZXJT
cGFjaW5nKCk7CiAgICAgaW50IG5FZmZDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOwogCi0g
ICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6
ZShtX3gsIG1feSkpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3
KCksIHRoaXMsIEludFNpemUoeCgpLCBtX2ZyYW1lUmVjdC55KCkpKTsKIAogICAgIGZvciAoaW50
IHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKICAgICAgICAgLy8gU2V0IHRoZSByb3cncyB4
L3kgcG9zaXRpb24gYW5kIHdpZHRoL2hlaWdodC4KLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCog
cm93UmVuZGVyZXIgPSBtX2dyaWRbcl0ucm93UmVuZGVyZXIpIHsKLSAgICAgICAgICAgIHJvd1Jl
bmRlcmVyLT5zZXRQb3MoMCwgbV9yb3dQb3Nbcl0pOwotICAgICAgICAgICAgcm93UmVuZGVyZXIt
PnNldFdpZHRoKG1fd2lkdGgpOworICAgICAgICBpZiAoUmVuZGVyVGFibGVSb3cqIHJvd1JlbmRl
cmVyID0gbV9ncmlkW3JdLnJvd1JlbmRlcmVyKSB7CisgICAgICAgICAgICByb3dSZW5kZXJlci0+
c2V0TG9jYXRpb24oMCwgbV9yb3dQb3Nbcl0pOworICAgICAgICAgICAgcm93UmVuZGVyZXItPnNl
dFdpZHRoKHdpZHRoKCkpOwogICAgICAgICAgICAgcm93UmVuZGVyZXItPnNldEhlaWdodChtX3Jv
d1Bvc1tyICsgMV0gLSBtX3Jvd1Bvc1tyXSAtIHZzcGFjaW5nKTsKICAgICAgICAgfQogCkBAIC01
NDMsOCArNTQzLDggQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdAog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGludCBvbGRUZSA9IGNlbGwtPmJvcmRlclRvcEV4dHJhKCk7Ci0gICAg
ICAgICAgICBpbnQgb2xkQmUgPSBjZWxsLT5ib3JkZXJCb3R0b21FeHRyYSgpOworICAgICAgICAg
ICAgaW50IG9sZFRlID0gY2VsbC0+aW50cmluc2ljUGFkZGluZ1RvcCgpOworICAgICAgICAgICAg
aW50IG9sZEJlID0gY2VsbC0+aW50cmluc2ljUGFkZGluZ0JvdHRvbSgpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaW50IGJlID0gckhlaWdodCAtIGNlbGwtPmhlaWdodCgpIC0gdGU7
CiAgICAgICAgICAgICBjZWxsLT5zZXRDZWxsVG9wRXh0cmEodGUpOwpAQCAtNTUyLDE3ICs1NTIs
MTcgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdAogICAgICAgICAg
ICAgaWYgKCh0ZSAhPSBvbGRUZSB8fCBiZSA+IG9sZEJlKSAmJiAhdGFibGUoKS0+c2VsZk5lZWRz
TGF5b3V0KCkgJiYgY2VsbC0+Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpCiAgICAgICAg
ICAgICAgICAgY2VsbC0+cmVwYWludCgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBJbnRS
ZWN0IG9sZENlbGxSZWN0KGNlbGwtPnhQb3MoKSwgY2VsbC0+eVBvcygpIC0gY2VsbC0+Ym9yZGVy
VG9wRXh0cmEoKSAsIGNlbGwtPndpZHRoKCksIGNlbGwtPmhlaWdodCgpKTsKKyAgICAgICAgICAg
IEludFJlY3Qgb2xkQ2VsbFJlY3QoY2VsbC0+eCgpLCBjZWxsLT55KCkgLSBjZWxsLT5pbnRyaW5z
aWNQYWRkaW5nVG9wKCkgLCBjZWxsLT53aWR0aCgpLCBjZWxsLT5oZWlnaHQoKSk7CiAgICAgICAg
IAogICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkgewotICAgICAg
ICAgICAgICAgIGNlbGwtPnNldFBvcyh0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKVtuRWZmQ29s
c10gLSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKVt0YWJsZSgpLT5jb2xUb0VmZkNvbChjZWxs
LT5jb2woKSArIGNlbGwtPmNvbFNwYW4oKSldICsgaHNwYWNpbmcsIG1fcm93UG9zW3JpbmR4XSk7
CisgICAgICAgICAgICAgICAgY2VsbC0+c2V0TG9jYXRpb24odGFibGUoKS0+Y29sdW1uUG9zaXRp
b25zKClbbkVmZkNvbHNdIC0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKClbdGFibGUoKS0+Y29s
VG9FZmZDb2woY2VsbC0+Y29sKCkgKyBjZWxsLT5jb2xTcGFuKCkpXSArIGhzcGFjaW5nLCBtX3Jv
d1Bvc1tyaW5keF0pOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgY2VsbC0+
c2V0UG9zKHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpW2NdICsgaHNwYWNpbmcsIG1fcm93UG9z
W3JpbmR4XSk7CisgICAgICAgICAgICAgICAgY2VsbC0+c2V0TG9jYXRpb24odGFibGUoKS0+Y29s
dW1uUG9zaXRpb25zKClbY10gKyBoc3BhY2luZywgbV9yb3dQb3NbcmluZHhdKTsKIAotICAgICAg
ICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIGNlbGwtPnhQb3MoKSAr
IGNlbGwtPm92ZXJmbG93TGVmdChmYWxzZSkpOwotICAgICAgICAgICAgbV9vdmVyZmxvd1dpZHRo
ID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgY2VsbC0+eFBvcygpICsgY2VsbC0+b3ZlcmZsb3dXaWR0
aChmYWxzZSkpOwotICAgICAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9w
LCBjZWxsLT55UG9zKCkgKyBjZWxsLT5vdmVyZmxvd1RvcChmYWxzZSkpOwotICAgICAgICAgICAg
bV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBjZWxsLT55UG9zKCkgKyBj
ZWxsLT5vdmVyZmxvd0hlaWdodChmYWxzZSkpOworICAgICAgICAgICAgbV9vdmVyZmxvd0xlZnQg
PSBtaW4obV9vdmVyZmxvd0xlZnQsIGNlbGwtPngoKSArIGNlbGwtPm92ZXJmbG93TGVmdChmYWxz
ZSkpOworICAgICAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwg
Y2VsbC0+eCgpICsgY2VsbC0+b3ZlcmZsb3dXaWR0aChmYWxzZSkpOworICAgICAgICAgICAgbV9v
dmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9wLCBjZWxsLT55KCkgKyBjZWxsLT5vdmVyZmxv
d1RvcChmYWxzZSkpOworICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJm
bG93SGVpZ2h0LCBjZWxsLT55KCkgKyBjZWxsLT5vdmVyZmxvd0hlaWdodChmYWxzZSkpOwogICAg
ICAgICAgICAgbV9oYXNPdmVyZmxvd2luZ0NlbGwgfD0gY2VsbC0+b3ZlcmZsb3dMZWZ0KGZhbHNl
KSB8fCBjZWxsLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSA+IGNlbGwtPndpZHRoKCkgfHwgY2VsbC0+
b3ZlcmZsb3dUb3AoZmFsc2UpIHx8IGNlbGwtPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSA+IGNlbGwt
PmhlaWdodCgpOwogCiAgICAgICAgICAgICAvLyBJZiB0aGUgY2VsbCBtb3ZlZCwgd2UgaGF2ZSB0
byByZXBhaW50IGl0IGFzIHdlbGwgYXMgYW55IGZsb2F0aW5nL3Bvc2l0aW9uZWQKQEAgLTU3NSw5
ICs1NzUsOSBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKGludCB0CiAKICAg
ICBzdGF0ZVB1c2hlci5wb3AoKTsKIAotICAgIG1faGVpZ2h0ID0gbV9yb3dQb3NbdG90YWxSb3dz
XTsKLSAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIG1faGVpZ2h0
KTsKLSAgICByZXR1cm4gbV9oZWlnaHQ7CisgICAgc2V0SGVpZ2h0KG1fcm93UG9zW3RvdGFsUm93
c10pOworICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgaGVpZ2h0
KCkpOworICAgIHJldHVybiBoZWlnaHQoKTsKIH0KIAogaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6
bG93ZXN0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgYm9vbCBpbmNsdWRl
U2VsZikgY29uc3QKQEAgLTU4OSw3ICs1ODksNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjps
b3dlc3RQb3NpdGlvbihiCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHJvdyA9IGZpcnN0Q2hpbGQo
KTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgZm9yIChSZW5kZXJP
YmplY3QqIGNlbGwgPSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRT
aWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjZWxsLT5pc1RhYmxlQ2VsbCgpKQotICAgICAg
ICAgICAgICAgIGJvdHRvbSA9IG1heChib3R0b20sIGNlbGwtPnlQb3MoKSArIGNlbGwtPmxvd2Vz
dFBvc2l0aW9uKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwg
c3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oY2VsbCktPnkoKSArIGNlbGwtPmxvd2VzdFBv
c2l0aW9uKGZhbHNlKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02MDUsNyArNjA1LDcg
QEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6cmlnaHRtb3N0UG9zaXRpbwogICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxsID0gcm93LT5maXJzdENoaWxk
KCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAo
Y2VsbC0+aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgICAgICAgICByaWdodCA9IG1heChyaWdodCwg
Y2VsbC0+eFBvcygpICsgY2VsbC0+cmlnaHRtb3N0UG9zaXRpb24oZmFsc2UpKTsKKyAgICAgICAg
ICAgICAgICByaWdodCA9IG1heChyaWdodCwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4o
Y2VsbCktPngoKSArIGNlbGwtPnJpZ2h0bW9zdFBvc2l0aW9uKGZhbHNlKSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkBAIC02MjEsNyArNjIxLDcgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6
bGVmdG1vc3RQb3NpdGlvbgogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxk
KCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjZWxsID0gcm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2VsbC0+aXNUYWJsZUNlbGwoKSkKLSAgICAg
ICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIGNlbGwtPnhQb3MoKSArIGNlbGwtPmxlZnRtb3N0
UG9zaXRpb24oZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHN0YXRp
Y19jYXN0PFJlbmRlclRhYmxlQ2VsbCo+KGNlbGwpLT54KCkgKyBjZWxsLT5sZWZ0bW9zdFBvc2l0
aW9uKGZhbHNlKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC04NTEsNyArODUxLDcgQEAg
aW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Z2V0QmFzZWxpbmVPZkZpcgogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZmlyc3RSb3ctPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlbmRlclRhYmxl
Q2VsbCogY2VsbCA9IGZpcnN0Um93LT5hdChpKS5jZWxsOwogICAgICAgICBpZiAoY2VsbCkKLSAg
ICAgICAgICAgIGZpcnN0TGluZUJhc2VsaW5lID0gbWF4KGZpcnN0TGluZUJhc2VsaW5lLCBjZWxs
LT55UG9zKCkgKyBjZWxsLT5wYWRkaW5nVG9wKCkgKyBjZWxsLT5ib3JkZXJUb3AoKSArIGNlbGwt
PmNvbnRlbnRIZWlnaHQoKSk7CisgICAgICAgICAgICBmaXJzdExpbmVCYXNlbGluZSA9IG1heChm
aXJzdExpbmVCYXNlbGluZSwgY2VsbC0+eSgpICsgY2VsbC0+cGFkZGluZ1RvcCgpICsgY2VsbC0+
Ym9yZGVyVG9wKCkgKyBjZWxsLT5jb250ZW50SGVpZ2h0KCkpOwogICAgIH0KIAogICAgIHJldHVy
biBmaXJzdExpbmVCYXNlbGluZTsKQEAgLTg3MSw4ICs4NzEsOCBAQCB2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvCiAgICAgaWYgKCF0b3RhbFJvd3MgfHwgIXRvdGFsQ29s
cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHggKz0gbV94OwotICAgIHR5ICs9IG1feTsKKyAg
ICB0eCArPSB4KCk7CisgICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwogCiAgICAgLy8gQ2hlY2sg
d2hpY2ggcm93cyBhbmQgY29scyBhcmUgdmlzaWJsZSBhbmQgb25seSBwYWludCB0aGVzZS4KICAg
ICAvLyBGSVhNRTogQ291bGQgdXNlIGEgYmluYXJ5IHNlYXJjaCBoZXJlLgpAQCAtOTkyLDExICs5
OTIsMTMgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlY2FsY0NlbGxzKCkKICAgICAgICAg
ICAgIG1fY0NvbCA9IDA7CiAgICAgICAgICAgICBpZiAoIWVuc3VyZVJvd3MobV9jUm93ICsgMSkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2dyaWRbbV9jUm93XS5yb3dS
ZW5kZXJlciA9IHJvdzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVuZGVyVGFibGVSb3cq
IHRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVSb3cqPihyb3cpOworICAgICAgICAg
ICAgbV9ncmlkW21fY1Jvd10ucm93UmVuZGVyZXIgPSB0YWJsZVJvdzsKIAogICAgICAgICAgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGNlbGwgPSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9
IGNlbGwtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNUYWJs
ZUNlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgYWRkQ2VsbChzdGF0aWNfY2FzdDxSZW5kZXJU
YWJsZUNlbGwqPihjZWxsKSwgcm93KTsKKyAgICAgICAgICAgICAgICAgICAgYWRkQ2VsbChzdGF0
aWNfY2FzdDxSZW5kZXJUYWJsZUNlbGwqPihjZWxsKSwgdGFibGVSb3cpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQpAQCAtMTA1NiwyMCArMTA1OCwyMCBAQCBSZW5kZXJPYmplY3Qq
IFJlbmRlclRhYmxlU2VjdGlvbjo6cmVtb3ZlCiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJl
bmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
aW50IHhQb3MsIGludCB5UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24p
CiB7CiAgICAgLy8gVGFibGUgc2VjdGlvbnMgY2Fubm90IGV2ZXIgYmUgaGl0IHRlc3RlZC4gIEVm
ZmVjdGl2ZWx5IHRoZXkgZG8gbm90IGV4aXN0LgogICAgIC8vIEp1c3QgZm9yd2FyZCB0byBvdXIg
Y2hpbGRyZW4gYWx3YXlzLgotICAgIHR4ICs9IG1feDsKLSAgICB0eSArPSBtX3k7CisgICAgdHgg
Kz0geCgpOworICAgIHR5ICs9IG1fZnJhbWVSZWN0LnkoKTsKIAogICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNT
aWJsaW5nKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgdG8gc2tpcCBvdmVyIGlubGlu
ZSBmbG93cywgc2luY2UgdGhleSBjYW4gc2hvdyB1cCBpbnNpZGUgdGFibGUgcm93cwogICAgICAg
ICAvLyBhdCB0aGUgbW9tZW50IChhIGRlbW90ZWQgaW5saW5lIDxmb3JtPiBmb3IgZXhhbXBsZSku
IElmIHdlIGV2ZXIgaW1wbGVtZW50IGEKICAgICAgICAgLy8gdGFibGUtc3BlY2lmaWMgaGl0LXRl
c3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQgZG8gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYW55
d2F5KSwKICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCi0gICAgICAg
IGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgIWNoaWxkLT5pc0lubGluZUZsb3coKSAmJiBjaGls
ZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGFjdGlvbikpIHsK
LSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgs
IHkgLSB0eSkpOworICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmICFjaGlsZC0+aXNJ
bmxpbmVGbG93KCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywg
eVBvcywgdHgsIHR5LCBhY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyVGFibGVDZWxsOworY2xhc3MgUmVuZGVyVGFi
bGVSb3c7CiAKIGNsYXNzIFJlbmRlclRhYmxlU2VjdGlvbiA6IHB1YmxpYyBSZW5kZXJDb250YWlu
ZXIgewogcHVibGljOgpAQCAtNDksNyArNTAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGlu
dCBnZXRCYXNlbGluZU9mRmlyc3RMaW5lQm94KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZENlbGwo
UmVuZGVyVGFibGVDZWxsKiwgUmVuZGVyT2JqZWN0KiByb3cpOworICAgIHZvaWQgYWRkQ2VsbChS
ZW5kZXJUYWJsZUNlbGwqLCBSZW5kZXJUYWJsZVJvdyogcm93KTsKIAogICAgIHZvaWQgc2V0Q2Vs
bFdpZHRocygpOwogICAgIGludCBjYWxjUm93SGVpZ2h0KCk7CkBAIC02Niw3ICs2Nyw3IEBAIHB1
YmxpYzoKIAogICAgIHN0cnVjdCBSb3dTdHJ1Y3QgewogICAgICAgICBSb3cqIHJvdzsKLSAgICAg
ICAgUmVuZGVyT2JqZWN0KiByb3dSZW5kZXJlcjsKKyAgICAgICAgUmVuZGVyVGFibGVSb3cqIHJv
d1JlbmRlcmVyOwogICAgICAgICBpbnQgYmFzZWxpbmU7CiAgICAgICAgIExlbmd0aCBoZWlnaHQ7
CiAgICAgfTsKQEAgLTc3LDkgKzc4LDkgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kQ29sdW1u
KGludCBwb3MpOwogICAgIHZvaWQgc3BsaXRDb2x1bW4oaW50IHBvcywgaW50IG5ld1NpemUpOwog
Ci0gICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dXaWR0aChib29sIGluY2x1ZGVJbnRlcmlvciA9IHRy
dWUpIGNvbnN0IHsgcmV0dXJuICghaW5jbHVkZUludGVyaW9yICYmIGhhc092ZXJmbG93Q2xpcCgp
KSA/IG1fd2lkdGggOiBtX292ZXJmbG93V2lkdGg7IH0KKyAgICB2aXJ0dWFsIGludCBvdmVyZmxv
d1dpZHRoKGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gKCFpbmNs
dWRlSW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkpID8gd2lkdGgoKSA6IG1fb3ZlcmZsb3dX
aWR0aDsgfQogICAgIHZpcnR1YWwgaW50IG92ZXJmbG93TGVmdChib29sIGluY2x1ZGVJbnRlcmlv
ciA9IHRydWUpIGNvbnN0IHsgcmV0dXJuICghaW5jbHVkZUludGVyaW9yICYmIGhhc092ZXJmbG93
Q2xpcCgpKSA/IDAgOiBtX292ZXJmbG93TGVmdDsgfQotICAgIHZpcnR1YWwgaW50IG92ZXJmbG93
SGVpZ2h0KGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gKCFpbmNs
dWRlSW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkpID8gbV9oZWlnaHQgOiBtX292ZXJmbG93
SGVpZ2h0OyB9CisgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dIZWlnaHQoYm9vbCBpbmNsdWRlSW50
ZXJpb3IgPSB0cnVlKSBjb25zdCB7IHJldHVybiAoIWluY2x1ZGVJbnRlcmlvciAmJiBoYXNPdmVy
Zmxvd0NsaXAoKSkgPyBoZWlnaHQoKSA6IG1fb3ZlcmZsb3dIZWlnaHQ7IH0KICAgICB2aXJ0dWFs
IGludCBvdmVyZmxvd1RvcChib29sIGluY2x1ZGVJbnRlcmlvciA9IHRydWUpIGNvbnN0IHsgcmV0
dXJuICghaW5jbHVkZUludGVyaW9yICYmIGhhc092ZXJmbG93Q2xpcCgpKSA/IDAgOiBtX292ZXJm
bG93VG9wOyB9CiAKICAgICB2aXJ0dWFsIGludCBsb3dlc3RQb3NpdGlvbihib29sIGluY2x1ZGVP
dmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIFJlbmRlclRleHQ6
OlJlbmRlclRleHQoTm9kZSogbm9kZSwgUGFzc1IKICAgICAgLCBtX2lzQWxsQVNDSUkoY2hhcmFj
dGVyc0FyZUFsbEFTQ0lJKG1fdGV4dC5nZXQoKSkpCiB7CiAgICAgQVNTRVJUKG1fdGV4dCk7Ci0g
ICAgc2V0UmVuZGVyVGV4dCgpOworICAgIHNldElzVGV4dCgpOwogICAgIG1fdGV4dCA9IGRvY3Vt
ZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPihtX3RleHQpKTsKIAogICAgIHZpZXcoKS0+ZnJhbWVWaWV3KCktPnNldElzVmlzdWFsbHlO
b25FbXB0eSgpOwpAQCAtNzM1LDcgKzczNSw3IEBAIGJvb2wgUmVuZGVyVGV4dDo6Y29udGFpbnNP
bmx5V2hpdGVzcGFjZSgKICAgICByZXR1cm4gY3VyclBvcyA+PSAoZnJvbSArIGxlbik7CiB9CiAK
LWludCBSZW5kZXJUZXh0OjptaW5YUG9zKCkgY29uc3QKK2ludCBSZW5kZXJUZXh0Ojpib3VuZGlu
Z0JveFgoKSBjb25zdAogewogICAgIGlmICghbV9maXJzdFRleHRCb3gpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtNzQ3LDE2ICs3NDcsMjggQEAgaW50IFJlbmRlclRleHQ6Om1pblhQb3MoKSBjb25z
dAogICAgIHJldHVybiBtaW5YUG9zOwogfQogCi1pbnQgUmVuZGVyVGV4dDo6eFBvcygpIGNvbnN0
CitpbnQgUmVuZGVyVGV4dDo6Ym91bmRpbmdCb3hZKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZmly
c3RUZXh0Qm94KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQg
bm90IHVzZSBhbiBhcmJpdHJhcnkgdmFsdWUgbGlrZSB0aGlzLiAgUGVyaGFwcyB3ZSBzaG91bGQg
dXNlIElOVF9NQVguCisgICAgaW50IG1pbllQb3MgPSA2NjY2NjY2OworICAgIGZvciAoSW5saW5l
VGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJv
eCgpKQorICAgICAgICBtaW5ZUG9zID0gbWluKG1pbllQb3MsIHN0YXRpY19jYXN0PGludD4oYm94
LT5tX3kpKTsKKyAgICByZXR1cm4gbWluWVBvczsKK30KKworaW50IFJlbmRlclRleHQ6OmZpcnN0
UnVuWCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZmlyc3RUZXh0Qm94ID8gbV9maXJzdFRleHRC
b3gtPm1feCA6IDA7CiB9CiAKLWludCBSZW5kZXJUZXh0Ojp5UG9zKCkgY29uc3QKK2ludCBSZW5k
ZXJUZXh0OjpmaXJzdFJ1blkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZpcnN0VGV4dEJveCA/
IG1fZmlyc3RUZXh0Qm94LT5tX3kgOiAwOwogfQotCisgICAgCiB2b2lkIFJlbmRlclRleHQ6OnNl
dFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQogewogICAgIElubGluZVRleHRC
b3gqIGJveDsKQEAgLTk3Myw3ICs5ODUsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFRleHQoUGFz
c1JlZlB0cjxTdHJpCiAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9
CiAKLWludCBSZW5kZXJUZXh0OjpoZWlnaHQoKSBjb25zdAoraW50IFJlbmRlclRleHQ6OmJvdW5k
aW5nQm94SGVpZ2h0KCkgY29uc3QKIHsKICAgICBpbnQgcmV0dmFsID0gMDsKICAgICBpZiAoZmly
c3RUZXh0Qm94KCkpCkBAIC0xMDY1LDcgKzEwNzcsNyBAQCB1bnNpZ25lZCBpbnQgUmVuZGVyVGV4
dDo6d2lkdGgodW5zaWduZWQgCiAgICAgcmV0dXJuIHc7CiB9CiAKLWludCBSZW5kZXJUZXh0Ojp3
aWR0aCgpIGNvbnN0CitpbnQgUmVuZGVyVGV4dDo6Ym91bmRpbmdCb3hXaWR0aCgpIGNvbnN0CiB7
CiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBub3QgdXNlIGFuIGFyYml0cmFyeSB2YWx1ZSBsaWtl
IHRoaXMuICBQZXJoYXBzIHdlIHNob3VsZCB1c2UgSU5UX01BWC4KICAgICBpbnQgbWlueCA9IDEw
MDAwMDAwMDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDQwMDc1KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3
MCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgd2lkdGgodW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiwgaW50IHhQb3MpIGNvbnN0OwogICAgIHZpcnR1
YWwgdW5zaWduZWQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBpbnQgeFBvcywg
Ym9vbCBmaXJzdExpbmUgPSBmYWxzZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgd2lkdGgoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50
IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBj
b25zdDsKIApAQCAtODUsMTIgKzgzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCYgYmVnaW5NYXhXLCBpbnQmIGVuZE1heFcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQmIG1pblcsIGludCYgbWF4VywgYm9vbCYgc3RyaXBGcm9udFNwYWNlcyk7CiAK
LSAgICAvLyByZXR1cm5zIHRoZSBtaW5pbXVtIHggcG9zaXRpb24gb2YgYWxsIHJ1bnMgcmVsYXRp
dmUgdG8gdGhlIHBhcmVudC4KLSAgICAvLyBkZWZhdWx0cyB0byAwLgotICAgIGludCBtaW5YUG9z
KCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0aGUgbGVmdG1vc3QgKGFuZCB0b3Btb3N0KSBwb3Np
dGlvbiBvZiB0aGUgYm91bmRpbmcgYm94IHRoYXQgZW5jbG9zZXMgYWxsIHRleHQgcnVucworICAg
IGludCBib3VuZGluZ0JveFgoKSBjb25zdDsKKyAgICBpbnQgYm91bmRpbmdCb3hZKCkgY29uc3Q7
CisKKyAgICAvLyBSZXR1cm5zIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBib3VuZGluZyBi
b3ggdGhhdCBlbmNsb3NlcyBhbGwgdGV4dCBydW5zLgorICAgIGludCBib3VuZGluZ0JveFdpZHRo
KCkgY29uc3Q7CisgICAgaW50IGJvdW5kaW5nQm94SGVpZ2h0KCkgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIGludCB4UG9zKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0OworICAg
IGludCBmaXJzdFJ1blgoKSBjb25zdDsKKyAgICBpbnQgZmlyc3RSdW5ZKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFBvc2l0aW9uSGludChib29sIGZpcnN0TGluZSkgY29uc3Q7
CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9u
IDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjYsMTIgKzEyNiwxMiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpj
cmVhdGVTdWJ0cmVlSWZOCiAKIGludCBSZW5kZXJUZXh0Q29udHJvbDo6dGV4dEJsb2NrSGVpZ2h0
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9oZWlnaHQgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5n
Qm90dG9tKCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpOworICAgIHJldHVybiBoZWln
aHQoKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKSAtIGJvcmRlclRvcCgpIC0gYm9y
ZGVyQm90dG9tKCk7CiB9CiAKIGludCBSZW5kZXJUZXh0Q29udHJvbDo6dGV4dEJsb2NrV2lkdGgo
KSBjb25zdAogewotICAgIHJldHVybiBtX3dpZHRoIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdS
aWdodCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKQorICAgIHJldHVybiB3aWR0aCgp
IC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVy
UmlnaHQoKQogICAgICAgICAgICAtIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5wYWRkaW5nTGVm
dCgpIC0gbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPnBhZGRpbmdSaWdodCgpOwogfQogCkBAIC0y
MTcsNyArMjE3LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0U2VsZWN0aW9uUmFuZwog
CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKLSAgICBpZiAoc3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IEhJRERFTiB8fCAhbV9pbm5lclRleHQgfHwgIW1faW5uZXJUZXh0LT5yZW5k
ZXJlcigpIHx8ICFtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+aGVpZ2h0KCkpIHsKKyAgICBpZiAo
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCAhbV9pbm5lclRleHQgfHwgIW1faW5u
ZXJUZXh0LT5yZW5kZXJlcigpIHx8ICFtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPmhlaWdodCgp
KSB7CiAgICAgICAgIGNhY2hlU2VsZWN0aW9uKHN0YXJ0LCBlbmQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNDE4LDI1ICs0MTgsMjUgQEAgaW50IFJlbmRlclRleHRDb250cm9sOjpzY3Jv
bGxiYXJUaGlja25lcwogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjYWxjSGVpZ2h0KCkKIHsK
LSAgICBtX2hlaWdodCA9IG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5ib3JkZXJUb3AoKSArIG1f
aW5uZXJUZXh0LT5yZW5kZXJlcigpLT5ib3JkZXJCb3R0b20oKSArCi0gICAgICAgICAgICAgICBt
X2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+cGFkZGluZ1RvcCgpICsgbV9pbm5lclRleHQtPnJlbmRl
cmVyKCktPnBhZGRpbmdCb3R0b20oKSArCi0gICAgICAgICAgICAgICBtX2lubmVyVGV4dC0+cmVu
ZGVyZXIoKS0+bWFyZ2luVG9wKCkgKyBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+bWFyZ2luQm90
dG9tKCk7CisgICAgc2V0SGVpZ2h0KG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5ib3JkZXJUb3Ao
KSArIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5ib3JkZXJCb3R0b20oKSArCisgICAgICAgICAg
ICAgIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5wYWRkaW5nVG9wKCkgKyBtX2lubmVyVGV4dC0+
cmVuZGVyZXIoKS0+cGFkZGluZ0JvdHRvbSgpICsKKyAgICAgICAgICAgICAgbV9pbm5lclRleHQt
PnJlbmRlcmVyKCktPm1hcmdpblRvcCgpICsgbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPm1hcmdp
bkJvdHRvbSgpKTsKIAogICAgIGFkanVzdENvbnRyb2xIZWlnaHRCYXNlZE9uTGluZUhlaWdodCht
X2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+bGluZUhlaWdodCh0cnVlLCB0cnVlKSk7Ci0gICAgbV9o
ZWlnaHQgKz0gcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpICsgYm9yZGVyVG9wKCkgKyBi
b3JkZXJCb3R0b20oKTsKKyAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBwYWRkaW5nVG9wKCkgKyBw
YWRkaW5nQm90dG9tKCkgKyBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKTsKIAogICAgIC8v
IFdlIGFyZSBhYmxlIHRvIGhhdmUgYSBob3Jpem9udGFsIHNjcm9sbGJhciBpZiB0aGUgb3ZlcmZs
b3cgc3R5bGUgaXMgc2Nyb2xsLCBvciBpZiBpdHMgYXV0byBhbmQgdGhlcmUncyBubyB3b3JkIHdy
YXAuCiAgICAgaWYgKG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1go
KSA9PSBPU0NST0xMIHx8ICAobV9pbm5lclRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJm
bG93WCgpID09IE9BVVRPICYmIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpLT53b3Jk
V3JhcCgpID09IE5vcm1hbFdvcmRXcmFwKSkKLSAgICAgICAgbV9oZWlnaHQgKz0gc2Nyb2xsYmFy
VGhpY2tuZXNzKCk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIHNjcm9sbGJhclRoaWNr
bmVzcygpKTsKIAogICAgIFJlbmRlckJsb2NrOjpjYWxjSGVpZ2h0KCk7CiB9CiAKLXZvaWQgUmVu
ZGVyVGV4dENvbnRyb2w6OmhpdElubmVyVGV4dEJsb2NrKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyVGV4dENvbnRyb2w6Omhp
dElubmVyVGV4dEJsb2NrKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGludCB5UG9z
LCBpbnQgdHgsIGludCB0eSkKIHsKICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG1faW5uZXJUZXh0
LmdldCgpKTsKLSAgICByZXN1bHQuc2V0TG9jYWxQb2ludChJbnRQb2ludCh4IC0gdHggLSBtX3gg
LSBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+eFBvcygpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHkgLSB0eSAtIG1feSAtIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT55UG9z
KCkpKTsKKyAgICByZXN1bHQuc2V0TG9jYWxQb2ludChJbnRQb2ludCh4UG9zIC0gdHggLSB4KCkg
LSBtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB5UG9zIC0gdHkgLSB5KCkgLSBtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPnko
KSkpOwogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2
ZW50KQpAQCAtNDQ4LDcgKzQ0OCw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmZvcndhcmRF
dmVudChFdmUKIAogSW50UmVjdCBSZW5kZXJUZXh0Q29udHJvbDo6Y29udHJvbENsaXBSZWN0KGlu
dCB0eCwgaW50IHR5KSBjb25zdAogewotICAgIEludFJlY3QgY2xpcFJlY3QgPSBjb250ZW50Qm94
KCk7CisgICAgSW50UmVjdCBjbGlwUmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgY2xpcFJl
Y3QubW92ZSh0eCwgdHkpOwogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9u
IDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNCArNTQsMTQgQEAgdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZTo6c3VidHJlZQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
OjpsYXlvdXQoKQogewotICAgIGludCBvbGRIZWlnaHQgPSBtX2hlaWdodDsKKyAgICBpbnQgb2xk
SGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgY2FsY0hlaWdodCgpOwogCi0gICAgaW50IG9sZFdpZHRo
ID0gbV93aWR0aDsKKyAgICBpbnQgb2xkV2lkdGggPSB3aWR0aCgpOwogICAgIGNhbGNXaWR0aCgp
OwogCi0gICAgYm9vbCByZWxheW91dENoaWxkcmVuID0gb2xkSGVpZ2h0ICE9IG1faGVpZ2h0IHx8
IG9sZFdpZHRoICE9IG1fd2lkdGg7Ci0gICAgUmVuZGVyT2JqZWN0KiBpbm5lclRleHRSZW5kZXJl
ciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBib29sIHJlbGF5b3V0Q2hp
bGRyZW4gPSBvbGRIZWlnaHQgIT0gaGVpZ2h0KCkgfHwgb2xkV2lkdGggIT0gd2lkdGgoKTsKKyAg
ICBSZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5k
ZXJCb3goKTsKIAogICAgIC8vIFNldCB0aGUgdGV4dCBibG9jayBoZWlnaHQKICAgICBpbnQgZGVz
aXJlZEhlaWdodCA9IHRleHRCbG9ja0hlaWdodCgpOwpAQCAtMTA0LDcgKzEwNCw3IEBAIGludCBS
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6cHJlZmVycmUKIAogdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZTo6YWRqdXN0Q29udHJvbEhlaWdodEJhc2VkT25MaW5lSGVpZ2h0KGludCBs
aW5lSGVpZ2h0KQogewotICAgIG1faGVpZ2h0ICs9IGxpbmVIZWlnaHQgKiBzdGF0aWNfY2FzdDxI
VE1MVGV4dEFyZWFFbGVtZW50Kj4obm9kZSgpKS0+cm93cygpOworICAgIHNldEhlaWdodChoZWln
aHQoKSArIGxpbmVIZWlnaHQgKiBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4obm9k
ZSgpKS0+cm93cygpKTsKIH0KIAogaW50IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpiYXNl
bGluZVBvc2l0aW9uKGJvb2wsIGJvb2wpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDQwMDc1KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk3LDMyICsxOTcsMzIgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnBhaW50KAogICAgIFJlbmRlclRleHRDb250cm9sOjpwYWludChwYWludEluZm8s
IHR4LCB0eSk7CiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VCbG9ja0Jh
Y2tncm91bmQgJiYgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IpIHsKLSAgICAgICAgSW50
UmVjdCBjb250ZW50c1JlY3QgPSBjb250ZW50Qm94KCk7CisgICAgICAgIEludFJlY3QgY29udGVu
dHNSZWN0ID0gY29udGVudEJveFJlY3QoKTsKIAogICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0
IGludG8gdGhlIGNvb3JkcyB1c2VkIGZvciBwYWludGluZyB0aGUgY29udGVudAotICAgICAgICBj
b250ZW50c1JlY3QubW92ZSh0eCArIHhQb3MoKSwgdHkgKyB5UG9zKCkpOworICAgICAgICBjb250
ZW50c1JlY3QubW92ZSh0eCArIHgoKSwgdHkgKyB5KCkpOwogICAgICAgICB0aGVtZSgpLT5wYWlu
dENhcHNMb2NrSW5kaWNhdG9yKHRoaXMsIHBhaW50SW5mbywgY29udGVudHNSZWN0KTsKICAgICB9
CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQogewotICAg
IGludCBvbGRIZWlnaHQgPSBtX2hlaWdodDsKKyAgICBpbnQgb2xkSGVpZ2h0ID0gaGVpZ2h0KCk7
CiAgICAgY2FsY0hlaWdodCgpOwogCi0gICAgaW50IG9sZFdpZHRoID0gbV93aWR0aDsKKyAgICBp
bnQgb2xkV2lkdGggPSB3aWR0aCgpOwogICAgIGNhbGNXaWR0aCgpOwogCi0gICAgYm9vbCByZWxh
eW91dENoaWxkcmVuID0gb2xkSGVpZ2h0ICE9IG1faGVpZ2h0IHx8IG9sZFdpZHRoICE9IG1fd2lk
dGg7CisgICAgYm9vbCByZWxheW91dENoaWxkcmVuID0gb2xkSGVpZ2h0ICE9IGhlaWdodCgpIHx8
IG9sZFdpZHRoICE9IHdpZHRoKCk7CiAKLSAgICBSZW5kZXJPYmplY3QqIGlubmVyVGV4dFJlbmRl
cmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOwotICAgIFJlbmRlck9iamVjdCog
aW5uZXJCbG9ja1JlbmRlcmVyID0gbV9pbm5lckJsb2NrID8gbV9pbm5lckJsb2NrLT5yZW5kZXJl
cigpIDogMDsKKyAgICBSZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxl
bWVudCgpLT5yZW5kZXJCb3goKTsKKyAgICBSZW5kZXJCb3gqIGlubmVyQmxvY2tSZW5kZXJlciA9
IG1faW5uZXJCbG9jayA/IG1faW5uZXJCbG9jay0+cmVuZGVyQm94KCkgOiAwOwogCiAgICAgLy8g
U2V0IHRoZSB0ZXh0IGJsb2NrIGhlaWdodAogICAgIGludCBkZXNpcmVkSGVpZ2h0ID0gdGV4dEJs
b2NrSGVpZ2h0KCk7CiAgICAgaW50IGN1cnJlbnRIZWlnaHQgPSBpbm5lclRleHRSZW5kZXJlci0+
aGVpZ2h0KCk7CiAKLSAgICBpZiAobV9pbm5lckJsb2NrIHx8IGN1cnJlbnRIZWlnaHQgPiBtX2hl
aWdodCkgeworICAgIGlmIChtX2lubmVyQmxvY2sgfHwgY3VycmVudEhlaWdodCA+IGhlaWdodCgp
KSB7CiAgICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9IGN1cnJlbnRIZWlnaHQpCiAgICAgICAg
ICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXIt
PnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoZGVzaXJlZEhlaWdodCwgRml4ZWQpKTsKQEAgLTI0
Miw3ICsyNDIsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAg
ICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChkZXNpcmVkV2lk
dGgsIEZpeGVkKSk7CiAKICAgICBpZiAobV9pbm5lckJsb2NrKSB7Ci0gICAgICAgIGludCBpbm5l
ckJsb2NrV2lkdGggPSBtX3dpZHRoIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpIC0g
Ym9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKTsKKyAgICAgICAgaW50IGlubmVyQmxvY2tXaWR0
aCA9IHdpZHRoKCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSBib3JkZXJMZWZ0
KCkgLSBib3JkZXJSaWdodCgpOwogICAgICAgICBpZiAoaW5uZXJCbG9ja1dpZHRoICE9IGlubmVy
QmxvY2tSZW5kZXJlci0+d2lkdGgoKSkKICAgICAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0
cnVlOwogICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCktPnNldFdpZHRoKExlbmd0
aChpbm5lckJsb2NrV2lkdGgsIEZpeGVkKSk7CkBAIC0yNTQsMTIgKzI1NCwxMiBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgLy8gRG9uJ3QgZG8gdGhpcyBm
b3Igc2VhcmNoIGZpZWxkcywgc2luY2Ugd2UgZG9uJ3QgaG9ub3IgaGVpZ2h0IGZvciB0aGVtCiAg
ICAgaWYgKCFtX2lubmVyQmxvY2spIHsKICAgICAgICAgY3VycmVudEhlaWdodCA9IGlubmVyVGV4
dFJlbmRlcmVyLT5oZWlnaHQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgPCBtX2hlaWdo
dCkKLSAgICAgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zZXRQb3MoaW5uZXJUZXh0UmVuZGVy
ZXItPnhQb3MoKSwgKG1faGVpZ2h0IC0gY3VycmVudEhlaWdodCkgLyAyKTsKKyAgICAgICAgaWYg
KGN1cnJlbnRIZWlnaHQgPCBoZWlnaHQoKSkKKyAgICAgICAgICAgIGlubmVyVGV4dFJlbmRlcmVy
LT5zZXRMb2NhdGlvbihpbm5lclRleHRSZW5kZXJlci0+eCgpLCAoaGVpZ2h0KCkgLSBjdXJyZW50
SGVpZ2h0KSAvIDIpOwogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24pCiB7CiAgICAgLy8gSWYgd2UncmUgd2l0aGluIHRoZSB0ZXh0IGNvbnRyb2wsIHdl
IHdhbnQgdG8gYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgaW5uZXIgdGV4dCBibG9jayBlbGVtZW50
LCBpbiBjYXNlIHRoZSBwb2ludAogICAgIC8vIHdhcyBvbiB0aGUgY29udHJvbCBidXQgbm90IG9u
IHRoZSBpbm5lciBlbGVtZW50IChzZWUgUmFkYXIgNDYxNzg0MSkuCkBAIC0yNjcsMzcgKzI2Nywz
NyBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0CiAgICAgLy8gSW4g
YSBzZWFyY2ggZmllbGQsIHdlIHdhbnQgdG8gYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgcmVzdWx0
cyBibG9jayBpZiB3ZSdyZSB0byB0aGUgbGVmdCBvZiB0aGUgaW5uZXIgdGV4dCBibG9jaywKICAg
ICAvLyBhbmQgYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgY2xvc2UgYmxvY2sgaWYgd2UncmUgdG8g
dGhlIHJpZ2h0IG9mIHRoZSBpbm5lciB0ZXh0IGJsb2NrLgogCi0gICAgaWYgKCFSZW5kZXJUZXh0
Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGhpdFRl
c3RBY3Rpb24pKQorICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSAhPSBlbGVtZW50KCkg
JiYgcmVzdWx0LmlubmVyTm9kZSgpICE9IG1faW5uZXJCbG9jay5nZXQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaGl0SW5uZXJUZXh0QmxvY2socmVzdWx0LCB4LCB5LCB0eCwgdHkp
OworICAgIGhpdElubmVyVGV4dEJsb2NrKHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5KTsKIAog
ICAgIGlmICghbV9pbm5lckJsb2NrKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIE5vZGUq
IGlubmVyTm9kZSA9IDA7Ci0gICAgUmVuZGVyT2JqZWN0KiBpbm5lckJsb2NrUmVuZGVyZXIgPSBt
X2lubmVyQmxvY2stPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBpbm5lclRleHRSZW5k
ZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJCb3gqIGlu
bmVyQmxvY2tSZW5kZXJlciA9IG1faW5uZXJCbG9jay0+cmVuZGVyQm94KCk7CisgICAgUmVuZGVy
Qm94KiBpbm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCk7
CiAKICAgICBJbnRQb2ludCBsb2NhbFBvaW50ID0gcmVzdWx0LmxvY2FsUG9pbnQoKTsKLSAgICBs
b2NhbFBvaW50Lm1vdmUoLWlubmVyQmxvY2tSZW5kZXJlci0+eFBvcygpLCAtaW5uZXJCbG9ja1Jl
bmRlcmVyLT55UG9zKCkpOworICAgIGxvY2FsUG9pbnQubW92ZSgtaW5uZXJCbG9ja1JlbmRlcmVy
LT54KCksIC1pbm5lckJsb2NrUmVuZGVyZXItPnkoKSk7CiAKLSAgICBpbnQgdGV4dExlZnQgPSB0
eCArIG1feCArIGlubmVyQmxvY2tSZW5kZXJlci0+eFBvcygpICsgaW5uZXJUZXh0UmVuZGVyZXIt
PnhQb3MoKTsKLSAgICBpZiAobV9yZXN1bHRzQnV0dG9uICYmIG1fcmVzdWx0c0J1dHRvbi0+cmVu
ZGVyZXIoKSAmJiB4IDwgdGV4dExlZnQpCisgICAgaW50IHRleHRMZWZ0ID0gdHggKyB4KCkgKyBp
bm5lckJsb2NrUmVuZGVyZXItPngoKSArIGlubmVyVGV4dFJlbmRlcmVyLT54KCk7CisgICAgaWYg
KG1fcmVzdWx0c0J1dHRvbiAmJiBtX3Jlc3VsdHNCdXR0b24tPnJlbmRlcmVyKCkgJiYgeFBvcyA8
IHRleHRMZWZ0KQogICAgICAgICBpbm5lck5vZGUgPSBtX3Jlc3VsdHNCdXR0b24uZ2V0KCk7CiAK
ICAgICBpZiAoIWlubmVyTm9kZSkgewogICAgICAgICBpbnQgdGV4dFJpZ2h0ID0gdGV4dExlZnQg
KyBpbm5lclRleHRSZW5kZXJlci0+d2lkdGgoKTsKLSAgICAgICAgaWYgKG1fY2FuY2VsQnV0dG9u
ICYmIG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpICYmIHggPiB0ZXh0UmlnaHQpCisgICAgICAg
IGlmIChtX2NhbmNlbEJ1dHRvbiAmJiBtX2NhbmNlbEJ1dHRvbi0+cmVuZGVyZXIoKSAmJiB4UG9z
ID4gdGV4dFJpZ2h0KQogICAgICAgICAgICAgaW5uZXJOb2RlID0gbV9jYW5jZWxCdXR0b24uZ2V0
KCk7CiAgICAgfQogCiAgICAgaWYgKGlubmVyTm9kZSkgewogICAgICAgICByZXN1bHQuc2V0SW5u
ZXJOb2RlKGlubmVyTm9kZSk7Ci0gICAgICAgIGxvY2FsUG9pbnQubW92ZSgtaW5uZXJOb2RlLT5y
ZW5kZXJlcigpLT54UG9zKCksIC1pbm5lck5vZGUtPnJlbmRlcmVyKCktPnlQb3MoKSk7CisgICAg
ICAgIGxvY2FsUG9pbnQubW92ZSgtaW5uZXJOb2RlLT5yZW5kZXJCb3goKS0+eCgpLCAtaW5uZXJO
b2RlLT5yZW5kZXJCb3goKS0+eSgpKTsKICAgICB9CiAKICAgICByZXN1bHQuc2V0TG9jYWxQb2lu
dChsb2NhbFBvaW50KTsKQEAgLTMwNiw3ICszMDYsNyBAQCBib29sIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6bm9kZUF0CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpm
b3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIFJlbmRlck9iamVjdCogaW5uZXJUZXh0
UmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94
KiBpbm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCk7CiAK
ICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50KSB7CiAgICAg
ICAgIGlmIChpbm5lclRleHRSZW5kZXJlcikgewpAQCAtMzI0LDkgKzMyNCw5IEBAIHZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpmb3J3YXIKICAgICB9CiAKICAgICBGbG9hdFBvaW50
IGxvY2FsUG9pbnQgPSBpbm5lclRleHRSZW5kZXJlci0+YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9p
bnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+cGFnZVgoKSwgc3RhdGljX2Nhc3Q8
TW91c2VFdmVudCo+KGV2ZW50KS0+cGFnZVkoKSksIGZhbHNlLCB0cnVlKTsKLSAgICBpZiAobV9y
ZXN1bHRzQnV0dG9uICYmIGxvY2FsUG9pbnQueCgpIDwgaW5uZXJUZXh0UmVuZGVyZXItPmJvcmRl
ckJveCgpLngoKSkKKyAgICBpZiAobV9yZXN1bHRzQnV0dG9uICYmIGxvY2FsUG9pbnQueCgpIDwg
aW5uZXJUZXh0UmVuZGVyZXItPmJvcmRlckJveFJlY3QoKS54KCkpCiAgICAgICAgIG1fcmVzdWx0
c0J1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgZWxzZSBpZiAobV9jYW5j
ZWxCdXR0b24gJiYgbG9jYWxQb2ludC54KCkgPiBpbm5lclRleHRSZW5kZXJlci0+Ym9yZGVyQm94
KCkucmlnaHQoKSkKKyAgICBlbHNlIGlmIChtX2NhbmNlbEJ1dHRvbiAmJiBsb2NhbFBvaW50Lngo
KSA+IGlubmVyVGV4dFJlbmRlcmVyLT5ib3JkZXJCb3hSZWN0KCkucmlnaHQoKSkKICAgICAgICAg
bV9jYW5jZWxCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogICAgIGVsc2UKICAg
ICAgICAgUmVuZGVyVGV4dENvbnRyb2w6OmZvcndhcmRFdmVudChldmVudCk7CkBAIC0zNzksMTIg
KzM3OSwxMiBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmxvCiB7CiAg
ICAgaW50IHdpZHRoID0gUmVuZGVyVGV4dENvbnRyb2w6OnRleHRCbG9ja1dpZHRoKCk7CiAKLSAg
ICBpZiAoUmVuZGVyT2JqZWN0KiByZXN1bHRzUmVuZGVyZXIgPSBtX3Jlc3VsdHNCdXR0b24gPyBt
X3Jlc3VsdHNCdXR0b24tPnJlbmRlcmVyKCkgOiAwKSB7CisgICAgaWYgKFJlbmRlckJveCogcmVz
dWx0c1JlbmRlcmVyID0gbV9yZXN1bHRzQnV0dG9uID8gbV9yZXN1bHRzQnV0dG9uLT5yZW5kZXJC
b3goKSA6IDApIHsKICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5jYWxjV2lkdGgoKTsKICAgICAg
ICAgd2lkdGggLT0gcmVzdWx0c1JlbmRlcmVyLT53aWR0aCgpICsgcmVzdWx0c1JlbmRlcmVyLT5t
YXJnaW5MZWZ0KCkgKyByZXN1bHRzUmVuZGVyZXItPm1hcmdpblJpZ2h0KCk7CiAgICAgfQogCi0g
ICAgaWYgKFJlbmRlck9iamVjdCogY2FuY2VsUmVuZGVyZXIgPSBtX2NhbmNlbEJ1dHRvbiA/IG1f
Y2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpIDogMCkgeworICAgIGlmIChSZW5kZXJCb3gqIGNhbmNl
bFJlbmRlcmVyID0gbV9jYW5jZWxCdXR0b24gPyBtX2NhbmNlbEJ1dHRvbi0+cmVuZGVyQm94KCkg
OiAwKSB7CiAgICAgICAgIGNhbmNlbFJlbmRlcmVyLT5jYWxjV2lkdGgoKTsKICAgICAgICAgd2lk
dGggLT0gY2FuY2VsUmVuZGVyZXItPndpZHRoKCkgKyBjYW5jZWxSZW5kZXJlci0+bWFyZ2luTGVm
dCgpICsgY2FuY2VsUmVuZGVyZXItPm1hcmdpblJpZ2h0KCk7CiAgICAgfQpAQCAtNDEzLDI1ICs0
MTMsMjUgQEAgaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJlZmVycgogCiB2b2lk
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRqdXN0Q29udHJvbEhlaWdodEJhc2VkT25M
aW5lSGVpZ2h0KGludCBsaW5lSGVpZ2h0KQogewotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlc3Vs
dHNSZW5kZXJlciA9IG1fcmVzdWx0c0J1dHRvbiA/IG1fcmVzdWx0c0J1dHRvbi0+cmVuZGVyZXIo
KSA6IDApIHsKKyAgICBpZiAoUmVuZGVyQm94KiByZXN1bHRzUmVuZGVyZXIgPSBtX3Jlc3VsdHNC
dXR0b24gPyBtX3Jlc3VsdHNCdXR0b24tPnJlbmRlckJveCgpIDogMCkgewogICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJCbG9jayo+KHJlc3VsdHNSZW5kZXJlciktPmNhbGNIZWlnaHQoKTsKLSAg
ICAgICAgbV9oZWlnaHQgPSBtYXgobV9oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdHNSZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZXN1bHRzUmVuZGVyZXItPmJvcmRlckJvdHRv
bSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5wYWRkaW5nVG9w
KCkgKyByZXN1bHRzUmVuZGVyZXItPnBhZGRpbmdCb3R0b20oKSArCi0gICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdHNSZW5kZXJlci0+bWFyZ2luVG9wKCkgKyByZXN1bHRzUmVuZGVyZXItPm1h
cmdpbkJvdHRvbSgpKTsKKyAgICAgICAgc2V0SGVpZ2h0KG1heChoZWlnaHQoKSwKKyAgICAgICAg
ICAgICAgICAgIHJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZXN1bHRzUmVuZGVyZXIt
PmJvcmRlckJvdHRvbSgpICsKKyAgICAgICAgICAgICAgICAgIHJlc3VsdHNSZW5kZXJlci0+cGFk
ZGluZ1RvcCgpICsgcmVzdWx0c1JlbmRlcmVyLT5wYWRkaW5nQm90dG9tKCkgKworICAgICAgICAg
ICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5tYXJnaW5Ub3AoKSArIHJlc3VsdHNSZW5kZXJlci0+
bWFyZ2luQm90dG9tKCkpKTsKICAgICAgICAgbGluZUhlaWdodCA9IG1heChsaW5lSGVpZ2h0LCBy
ZXN1bHRzUmVuZGVyZXItPmhlaWdodCgpKTsKICAgICB9CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0
KiBjYW5jZWxSZW5kZXJlciA9IG1fY2FuY2VsQnV0dG9uID8gbV9jYW5jZWxCdXR0b24tPnJlbmRl
cmVyKCkgOiAwKSB7CisgICAgaWYgKFJlbmRlckJveCogY2FuY2VsUmVuZGVyZXIgPSBtX2NhbmNl
bEJ1dHRvbiA/IG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKICAgICAgICAgc3Rh
dGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjYW5jZWxSZW5kZXJlciktPmNhbGNIZWlnaHQoKTsKLSAg
ICAgICAgbV9oZWlnaHQgPSBtYXgobV9oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNh
bmNlbFJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGNhbmNlbFJlbmRlcmVyLT5ib3JkZXJCb3R0b20o
KSArCi0gICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFJlbmRlcmVyLT5wYWRkaW5nVG9wKCkg
KyBjYW5jZWxSZW5kZXJlci0+cGFkZGluZ0JvdHRvbSgpICsKLSAgICAgICAgICAgICAgICAgICAg
ICAgY2FuY2VsUmVuZGVyZXItPm1hcmdpblRvcCgpICsgY2FuY2VsUmVuZGVyZXItPm1hcmdpbkJv
dHRvbSgpKTsKKyAgICAgICAgc2V0SGVpZ2h0KG1heChoZWlnaHQoKSwKKyAgICAgICAgICAgICAg
ICAgIGNhbmNlbFJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGNhbmNlbFJlbmRlcmVyLT5ib3JkZXJC
b3R0b20oKSArCisgICAgICAgICAgICAgICAgICBjYW5jZWxSZW5kZXJlci0+cGFkZGluZ1RvcCgp
ICsgY2FuY2VsUmVuZGVyZXItPnBhZGRpbmdCb3R0b20oKSArCisgICAgICAgICAgICAgICAgICBj
YW5jZWxSZW5kZXJlci0+bWFyZ2luVG9wKCkgKyBjYW5jZWxSZW5kZXJlci0+bWFyZ2luQm90dG9t
KCkpKTsKICAgICAgICAgbGluZUhlaWdodCA9IG1heChsaW5lSGVpZ2h0LCBjYW5jZWxSZW5kZXJl
ci0+aGVpZ2h0KCkpOwogICAgIH0KIAotICAgIG1faGVpZ2h0ICs9IGxpbmVIZWlnaHQ7CisgICAg
c2V0SGVpZ2h0KGhlaWdodCgpICsgbGluZUhlaWdodCk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTdWJ0cmVlSWZOZWVkZWQoKQpAQCAtNjk1LDcgKzY5NSw3
IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFAKIHsKICAgICBpbnQg
cGFkZGluZyA9IHBhZGRpbmdMZWZ0KCk7CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZXN1bHRz
UmVuZGVyZXIgPSBtX3Jlc3VsdHNCdXR0b24gPyBtX3Jlc3VsdHNCdXR0b24tPnJlbmRlcmVyKCkg
OiAwKQorICAgIGlmIChSZW5kZXJCb3gqIHJlc3VsdHNSZW5kZXJlciA9IG1fcmVzdWx0c0J1dHRv
biA/IG1fcmVzdWx0c0J1dHRvbi0+cmVuZGVyQm94KCkgOiAwKQogICAgICAgICBwYWRkaW5nICs9
IHJlc3VsdHNSZW5kZXJlci0+d2lkdGgoKTsKIAogICAgIHJldHVybiBwYWRkaW5nOwpAQCAtNzA1
LDcgKzcwNSw3IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFAKIHsK
ICAgICBpbnQgcGFkZGluZyA9IHBhZGRpbmdSaWdodCgpOwogCi0gICAgaWYgKFJlbmRlck9iamVj
dCogY2FuY2VsUmVuZGVyZXIgPSBtX2NhbmNlbEJ1dHRvbiA/IG1fY2FuY2VsQnV0dG9uLT5yZW5k
ZXJlcigpIDogMCkKKyAgICBpZiAoUmVuZGVyQm94KiBjYW5jZWxSZW5kZXJlciA9IG1fY2FuY2Vs
QnV0dG9uID8gbV9jYW5jZWxCdXR0b24tPnJlbmRlckJveCgpIDogMCkKICAgICAgICAgcGFkZGlu
ZyArPSBjYW5jZWxSZW5kZXJlci0+d2lkdGgoKTsKIAogICAgIHJldHVybiBwYWRkaW5nOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MSw5ICszNzEs
MTEgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyhSZW5kZQogI2lmIEVOQUJM
RShWSURFTykKIGJvb2wgUmVuZGVyVGhlbWU6OmhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KFJlbmRl
ck9iamVjdCogbywgY29uc3QgSW50UG9pbnQmIGFic1BvaW50KQogewotICAgIEZsb2F0UG9pbnQg
bG9jYWxQb2ludCA9IG8tPmFic29sdXRlVG9Mb2NhbChhYnNQb2ludCwgZmFsc2UsIHRydWUpOyAg
Ly8gcmVzcGVjdCB0cmFuc2Zvcm1zCisgICAgaWYgKCFvLT5pc0JveCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gby0+Ym9yZGVyQm94KCkuY29udGFpbnMocm91bmRlZElu
dFBvaW50KGxvY2FsUG9pbnQpKTsKKyAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBvLT5hYnNv
bHV0ZVRvTG9jYWwoYWJzUG9pbnQsIGZhbHNlLCB0cnVlKTsgIC8vIHJlc3BlY3QgdHJhbnNmb3Jt
cworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihvKS0+Ym9yZGVyQm94UmVjdCgp
LmNvbnRhaW5zKHJvdW5kZWRJbnRQb2ludChsb2NhbFBvaW50KSk7CiB9CiAjZW5kaWYKIApAQCAt
NDgwLDEwICs0ODIsMTMgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3JtSW5hY3RpdmVMaXN0
QgogCiBpbnQgUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0
KiBvKSBjb25zdAogeworICAgIGlmICghby0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
ICNpZiBVU0UoTkVXX1RIRU1FKQotICAgIHJldHVybiBvLT5oZWlnaHQoKSArIG8tPm1hcmdpblRv
cCgpICsgbV90aGVtZS0+YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoby0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpKSAqIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94Kj4obyktPmhlaWdodCgpICsgby0+bWFyZ2luVG9wKCkg
KyBtX3RoZW1lLT5iYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChvLT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCkpICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogI2Vsc2UKLSAgICByZXR1cm4g
by0+aGVpZ2h0KCkgKyBvLT5tYXJnaW5Ub3AoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyQm94Kj4obyktPmhlaWdodCgpICsgby0+bWFyZ2luVG9wKCk7CiAjZW5kaWYKIH0K
IApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDQwMDc3KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEyNTQsNiArMTI1NCw5IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxk
U3QKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dB
bmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKICAgICBzZXRTZWFyY2hDZWxsU3RhdGUoaW5wdXQtPnJlbmRl
cmVyKCksIHIpOwogCiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNlYXJj
aCgpOwpAQCAtMTI2NCw3ICsxMjY3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFy
Y2hGaWVsZENhbgogCiAgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpOwogCi0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBjYW5jZWxCdXR0
b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyZXIoKS0+Ym9yZGVyQm94KCkpXTsK
KyAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJlY3RGb3JC
b3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07CiAgICAg
bG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQtPnJlbmRlcmVyKCksIG8s
IGxvY2FsQm91bmRzLCByKTsKIAogICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3QobG9jYWxCb3Vu
ZHMpOwpAQCAtMTMyOCw2ICsxMzMxLDkgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2Vh
cmNoRmllbGRSZQogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBzZXRTZWFyY2hDZWxsU3RhdGUoaW5wdXQtPnJl
bmRlcmVyKCksIHIpOwogCiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNl
YXJjaCgpOwpAQCAtMTMzNSw3ICsxMzQxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
ZWFyY2hGaWVsZFJlcwogICAgIGlmIChbc2VhcmNoIHNlYXJjaE1lbnVUZW1wbGF0ZV0gIT0gbmls
KQogICAgICAgICBbc2VhcmNoIHNldFNlYXJjaE1lbnVUZW1wbGF0ZTpuaWxdOwogCi0gICAgRmxv
YXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5T
UmVjdChpbnB1dC0+cmVuZGVyZXIoKS0+Ym9yZGVyQm94KCkpXTsKKyAgICBGbG9hdFJlY3QgbG9j
YWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0
LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07CiAgICAgbG9jYWxCb3VuZHMgPSBjb252
ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsK
IAogICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6bG9jYWxCb3Vu
ZHMgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpXTsKQEAgLTEz
NTUsNiArMTM2MSw5IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmUK
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKIHsKICAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5j
ZXN0b3JOb2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJl
cigpLCByKTsKIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2go
KTsKQEAgLTEzNjYsNyArMTM3NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNo
RmllbGRSZXMKIAogICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKTsKIAotICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9u
UmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlcmVyKCktPmJvcmRlckJveCgpKV07Cisg
ICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91
bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOwogICAgIGxv
Y2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBs
b2NhbEJvdW5kcywgcik7CiAgICAgCiAgICAgSW50UmVjdCB1bnpvb21lZFJlY3QobG9jYWxCb3Vu
ZHMpOwpAQCAtMTU5NCwxMCArMTYwMywxMyBAQCBTdHJpbmcgUmVuZGVyVGhlbWVNYWM6OmV4dHJh
TWVkaWFDb250cm9sCiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OmhpdFRlc3RNZWRpYUNvbnRyb2xQ
YXJ0KFJlbmRlck9iamVjdCogbywgY29uc3QgSW50UG9pbnQmIGFic1BvaW50KQogeworICAgIGlm
ICghby0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKICAgICBpZiAo
bWVkaWFDb250cm9sbGVyVGhlbWUoKSA9PSBNZWRpYUNvbnRyb2xsZXJUaGVtZVFUKSB7CiAgICAg
ICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7CiAgICAgICAg
IEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG8tPmFic29sdXRlVG9Mb2NhbChhYnNQb2ludCwgZmFs
c2UsIHRydWUpOyAgLy8gcmVzcGVjdCB0cmFuc2Zvcm1zCi0gICAgICAgIHJldHVybiB3a0hpdFRl
c3RNZWRpYVVJUGFydChwYXJ0IC0gTWVkaWFGdWxsc2NyZWVuQnV0dG9uUGFydCwgTWVkaWFDb250
cm9sbGVyVGhlbWVRVCwgQ0dSZWN0KG8tPmJvcmRlckJveCgpKSwgQ0dQb2ludChsb2NhbFBvaW50
KSk7CisgICAgICAgIHJldHVybiB3a0hpdFRlc3RNZWRpYVVJUGFydChwYXJ0IC0gTWVkaWFGdWxs
c2NyZWVuQnV0dG9uUGFydCwgTWVkaWFDb250cm9sbGVyVGhlbWVRVCwgQ0dSZWN0KHN0YXRpY19j
YXN0PFJlbmRlckJveCo+KG8pLT5ib3JkZXJCb3hSZWN0KCkpLCBDR1BvaW50KGxvY2FsUG9pbnQp
KTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmhpdFRlc3RN
ZWRpYUNvbnRyb2xQYXJ0KG8sIGFic1BvaW50KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDE1IEBAIHN0
YXRpYyBUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0KICAgICAgICAgfQogICAgIH0K
IAotICAgIEludFJlY3QgcihvLnhQb3MoKSwgby55UG9zKCksIG8ud2lkdGgoKSwgby5oZWlnaHQo
KSk7CisgICAgSW50UmVjdCByOworICAgIGlmIChvLmlzVGV4dCgpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBXb3VsZCBiZSBiZXR0ZXIgdG8gZHVtcCB0aGUgYm91bmRpbmcgYm94IHggYW5kIHkgcmF0
aGVyIHRoYW4gdGhlIGZpcnN0IHJ1bidzIHggYW5kIHksIGJ1dCB0aGF0IHdvdWxkIGludm9sdmUg
dXBkYXRpbmcKKyAgICAgICAgLy8gbWFueSB0ZXN0IHJlc3VsdHMuCisgICAgICAgIGNvbnN0IFJl
bmRlclRleHQmIHRleHQgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJUZXh0Jj4obyk7CisgICAg
ICAgIHIgPSBJbnRSZWN0KHRleHQuZmlyc3RSdW5YKCksIHRleHQuZmlyc3RSdW5ZKCksIHRleHQu
Ym91bmRpbmdCb3hXaWR0aCgpLCB0ZXh0LmJvdW5kaW5nQm94SGVpZ2h0KCkpOworICAgIH0gZWxz
ZSBpZiAoby5pc0JveCgpKQorICAgICAgICByID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94
Jj4obykuZnJhbWVSZWN0KCk7CisKICAgICB0cyA8PCAiICIgPDwgcjsKIAogICAgIGlmICghKG8u
aXNUZXh0KCkgJiYgIW8uaXNCUigpKSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VmlkZW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNw
cAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBSZW5kZXJWaWRlbzo6dmlkZW9T
aXplQ2hhbmdlZCgpCiAKIEludFJlY3QgUmVuZGVyVmlkZW86OnZpZGVvQm94KCkgY29uc3QgCiB7
Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGNvbnRlbnRCb3goKTsKKyAgICBJbnRSZWN0IGNv
bnRlbnRSZWN0ID0gY29udGVudEJveFJlY3QoKTsKICAgICAKICAgICBpZiAoaW50cmluc2ljU2l6
ZSgpLmlzRW1wdHkoKSB8fCBjb250ZW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBJ
bnRSZWN0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gNDAwNzUp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAsMTMgKzUwLDYgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2RlLCBGcmFtZQog
CiAgICAgLy8gaW5pdCBSZW5kZXJPYmplY3QgYXR0cmlidXRlcwogICAgIHNldElubGluZShmYWxz
ZSk7Ci0KLSAgICAvLyB0cnkgdG8gY29udHJhaW4gdGhlIHdpZHRoIHRvIHRoZSB2aWV3cyB3aWR0
aAotICAgIG1fd2lkdGggPSAwOwotICAgIG1faGVpZ2h0ID0gMDsKLSAgICBtX21pblByZWZXaWR0
aCA9IDA7Ci0gICAgbV9tYXhQcmVmV2lkdGggPSAwOwotCiAgICAgc2V0UHJlZldpZHRoc0RpcnR5
KHRydWUsIGZhbHNlKTsKICAgICAKICAgICBzZXRQb3NpdGlvbmVkKHRydWUpOyAvLyB0byAwLDAg
OikKQEAgLTczLDEzICs2NiwxMyBAQCBSZW5kZXJWaWV3Ojp+UmVuZGVyVmlldygpCiB2b2lkIFJl
bmRlclZpZXc6OmNhbGNIZWlnaHQoKQogewogICAgIGlmICghcHJpbnRpbmcoKSAmJiBtX2ZyYW1l
VmlldykKLSAgICAgICAgbV9oZWlnaHQgPSB2aWV3SGVpZ2h0KCk7CisgICAgICAgIHNldEhlaWdo
dCh2aWV3SGVpZ2h0KCkpOwogfQogCiB2b2lkIFJlbmRlclZpZXc6OmNhbGNXaWR0aCgpCiB7CiAg
ICAgaWYgKCFwcmludGluZygpICYmIG1fZnJhbWVWaWV3KQotICAgICAgICBtX3dpZHRoID0gdmll
d1dpZHRoKCk7CisgICAgICAgIHNldFdpZHRoKHZpZXdXaWR0aCgpKTsKICAgICBtX21hcmdpbkxl
ZnQgPSAwOwogICAgIG1fbWFyZ2luUmlnaHQgPSAwOwogfQpAQCAtOTYsMTAgKzg5LDEwIEBAIHZv
aWQgUmVuZGVyVmlldzo6Y2FsY1ByZWZXaWR0aHMoKQogdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQo
KQogewogICAgIGlmIChwcmludGluZygpKQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4
UHJlZldpZHRoID0gbV93aWR0aDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZX
aWR0aCA9IHdpZHRoKCk7CiAKICAgICAvLyBVc2UgY2FsY1dpZHRoL0hlaWdodCB0byBnZXQgdGhl
IG5ldyB3aWR0aC9oZWlnaHQsIHNpbmNlIHRoaXMgd2lsbCB0YWtlIHRoZSBmdWxsIHBhZ2Ugem9v
bSBmYWN0b3IgaW50byBhY2NvdW50LgotICAgIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiA9ICFwcmlu
dGluZygpICYmICghbV9mcmFtZVZpZXcgfHwgbV93aWR0aCAhPSB2aWV3V2lkdGgoKSB8fCBtX2hl
aWdodCAhPSB2aWV3SGVpZ2h0KCkpOworICAgIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiA9ICFwcmlu
dGluZygpICYmICghbV9mcmFtZVZpZXcgfHwgd2lkdGgoKSAhPSB2aWV3V2lkdGgoKSB8fCBoZWln
aHQoKSAhPSB2aWV3SGVpZ2h0KCkpOwogICAgIGlmIChyZWxheW91dENoaWxkcmVuKSB7CiAgICAg
ICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogICAgICAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKSB7CkBAIC0xMTgsOCArMTExLDggQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQo
KQogICAgICAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CiAKICAgICAvLyBFbnN1cmUgdGhhdCBk
b2NXaWR0aCgpID49IHdpZHRoKCkgYW5kIGRvY0hlaWdodCgpID49IGhlaWdodCgpLgotICAgIHNl
dE92ZXJmbG93V2lkdGgobV93aWR0aCk7Ci0gICAgc2V0T3ZlcmZsb3dIZWlnaHQobV9oZWlnaHQp
OworICAgIHNldE92ZXJmbG93V2lkdGgod2lkdGgoKSk7CisgICAgc2V0T3ZlcmZsb3dIZWlnaHQo
aGVpZ2h0KCkpOwogCiAgICAgc2V0T3ZlcmZsb3dXaWR0aChkb2NXaWR0aCgpKTsKICAgICBzZXRP
dmVyZmxvd0hlaWdodChkb2NIZWlnaHQoKSk7CkBAIC01MTQsNyArNTA3LDcgQEAgdm9pZCBSZW5k
ZXJWaWV3OjpyZW1vdmVXaWRnZXQoUmVuZGVyT2JqZQogSW50UmVjdCBSZW5kZXJWaWV3Ojp2aWV3
UmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKHByaW50aW5nKCkpCi0gICAgICAgIHJldHVybiBJbnRS
ZWN0KDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoMCwg
MCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgIGlmIChtX2ZyYW1lVmlldykKICAgICAgICAgcmV0
dXJuIG1fZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICByZXR1cm4gSW50UmVj
dCgpOwpAQCAtNTIyLDcgKzUxNSw3IEBAIEludFJlY3QgUmVuZGVyVmlldzo6dmlld1JlY3QoKSBj
b25zdAogCiBpbnQgUmVuZGVyVmlldzo6ZG9jSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpbnQgaCA9
IG1faGVpZ2h0OworICAgIGludCBoID0gaGVpZ2h0KCk7CiAgICAgaW50IGxvd2VzdFBvcyA9IGxv
d2VzdFBvc2l0aW9uKCk7CiAgICAgaWYgKGxvd2VzdFBvcyA+IGgpCiAgICAgICAgIGggPSBsb3dl
c3RQb3M7CkBAIC01MzEsNyArNTI0LDcgQEAgaW50IFJlbmRlclZpZXc6OmRvY0hlaWdodCgpIGNv
bnN0CiAgICAgLy8gSW5zdGVhZCBvZiB0aGlzIGRoIGNvbXB1dGF0aW9uIHdlIHNob3VsZCBrZWVw
IHRoZSByZXN1bHQKICAgICAvLyB3aGVuIHdlIGNhbGwgUmVuZGVyQmxvY2s6OmxheW91dC4KICAg
ICBpbnQgZGggPSAwOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjID0gZmlyc3RDaGlsZCgpOyBj
OyBjID0gYy0+bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKFJlbmRlckJveCogYyA9IGZpcnN0Q2hp
bGRCb3goKTsgYzsgYyA9IGMtPm5leHRTaWJsaW5nQm94KCkpCiAgICAgICAgIGRoICs9IGMtPmhl
aWdodCgpICsgYy0+bWFyZ2luVG9wKCkgKyBjLT5tYXJnaW5Cb3R0b20oKTsKIAogICAgIGlmIChk
aCA+IGgpCkBAIC01NDIsMTIgKzUzNSwxMiBAQCBpbnQgUmVuZGVyVmlldzo6ZG9jSGVpZ2h0KCkg
Y29uc3QKIAogaW50IFJlbmRlclZpZXc6OmRvY1dpZHRoKCkgY29uc3QKIHsKLSAgICBpbnQgdyA9
IG1fd2lkdGg7CisgICAgaW50IHcgPSB3aWR0aCgpOwogICAgIGludCByaWdodG1vc3RQb3MgPSBy
aWdodG1vc3RQb3NpdGlvbigpOwogICAgIGlmIChyaWdodG1vc3RQb3MgPiB3KQogICAgICAgICB3
ID0gcmlnaHRtb3N0UG9zOwogCi0gICAgZm9yIChSZW5kZXJPYmplY3QgKmMgPSBmaXJzdENoaWxk
KCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIGMgPSBm
aXJzdENoaWxkQm94KCk7IGM7IGMgPSBjLT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAgIGlu
dCBkdyA9IGMtPndpZHRoKCkgKyBjLT5tYXJnaW5MZWZ0KCkgKyBjLT5tYXJnaW5SaWdodCgpOwog
ICAgICAgICBpZiAoZHcgPiB3KQogICAgICAgICAgICAgdyA9IGR3OwpAQCAtNTc4LDcgKzU3MSw3
IEBAIGludCBSZW5kZXJWaWV3Ojp2aWV3V2lkdGgoKSBjb25zdAogCiAvLyBUaGUgaWRlYSBoZXJl
IGlzIHRvIHRha2UgaW50byBhY2NvdW50IHdoYXQgb2JqZWN0IGlzIG1vdmluZyB0aGUgcGFnaW5h
dGlvbiBwb2ludCwgYW5kCiAvLyB0aHVzIGNob29zZSB0aGUgYmVzdCBwbGFjZSB0byBjaG9wIGl0
Lgotdm9pZCBSZW5kZXJWaWV3OjpzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJlbmRlck9iamVj
dCogZm9yUmVuZGVyZXIsIGJvb2wgZm9yY2VkQnJlYWspCit2b2lkIFJlbmRlclZpZXc6OnNldEJl
c3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyQm94KiBmb3JSZW5kZXJlciwgYm9vbCBmb3JjZWRC
cmVhaykKIHsKICAgICAvLyBOb2JvZHkgZWxzZSBjYW4gc2V0IGEgcGFnZSBicmVhayBvbmNlIHdl
IGhhdmUgYSBmb3JjZWQgYnJlYWsuCiAgICAgaWYgKG1fZm9yY2VkUGFnZUJyZWFrKQpAQCAtNTky
LDkgKzU4NSw4IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KGludCAKICAg
ICB9CiAKICAgICAvLyBwcmVmZXIgdGhlIHdpZGVzdCBvYmplY3Qgd2hvIHRyaWVzIHRvIG1vdmUg
dGhlIHBhZ2luYXRpb24gcG9pbnQKLSAgICBpbnQgd2lkdGggPSBmb3JSZW5kZXJlci0+d2lkdGgo
KTsKLSAgICBpZiAod2lkdGggPiBtX3RydW5jYXRvcldpZHRoKSB7Ci0gICAgICAgIG1fdHJ1bmNh
dG9yV2lkdGggPSB3aWR0aDsKKyAgICBpZiAoZm9yUmVuZGVyZXItPndpZHRoKCkgPiBtX3RydW5j
YXRvcldpZHRoKSB7CisgICAgICAgIG1fdHJ1bmNhdG9yV2lkdGggPSBmb3JSZW5kZXJlci0+d2lk
dGgoKTsKICAgICAgICAgbV9iZXN0VHJ1bmNhdGVkQXQgPSB5OwogICAgIH0KIH0KSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFByaW50SW1hZ2VzKGJvb2wgZW5hYmxlKSB7IG1fcHJpbnRJbWFnZXMgPSBlbmFi
bGU7IH0KICAgICBib29sIHByaW50SW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcmludEltYWdl
czsgfQogICAgIHZvaWQgc2V0VHJ1bmNhdGVkQXQoaW50IHkpIHsgbV90cnVuY2F0ZWRBdCA9IHk7
IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90cnVuY2F0b3JXaWR0aCA9IDA7IG1fZm9yY2VkUGFnZUJy
ZWFrID0gZmFsc2U7IH0KLSAgICB2b2lkIHNldEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVy
T2JqZWN0ICpmb3JSZW5kZXJlciwgYm9vbCBmb3JjZWRCcmVhayA9IGZhbHNlKTsKKyAgICB2b2lk
IHNldEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyQm94KiBmb3JSZW5kZXJlciwgYm9vbCBm
b3JjZWRCcmVhayA9IGZhbHNlKTsKICAgICBpbnQgYmVzdFRydW5jYXRlZEF0KCkgY29uc3QgeyBy
ZXR1cm4gbV9iZXN0VHJ1bmNhdGVkQXQ7IH0KIAogICAgIGludCB0cnVuY2F0ZWRBdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJ1bmNhdGVkQXQ7IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsOCArMTcyLDggQEAgdm9pZCBSZW5kZXJXaWRnZXQ6
OnBhaW50KFBhaW50SW5mbyYgcGFpbgogICAgIGlmICghc2hvdWxkUGFpbnQocGFpbnRJbmZvLCB0
eCwgdHkpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0eCArPSBtX3g7Ci0gICAgdHkgKz0gbV95
OworICAgIHR4ICs9IHgoKTsKKyAgICB0eSArPSBtX2ZyYW1lUmVjdC55KCk7CiAKICAgICBpZiAo
aGFzQm94RGVjb3JhdGlvbnMoKSAmJiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSkKICAgICAg
ICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CkBAIC0xODgsNyArMTg4
LDcgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbgogCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSAmJiAh
cGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcGFpbnRDdXN0
b21IaWdobGlnaHQodHggLSBtX3gsIHR5IC0gbV95LCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1
ZSk7CisgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR4IC0geCgpLCB0eSAtIG1fZnJhbWVS
ZWN0LnkoKSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOwogI2VuZGlmCiAKICAgICBpZiAo
bV93aWRnZXQpIHsKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHZvaWQgUmVuZGVyV2lkZ2V0Ojp1cGRh
dGVXaWRnZXRQb3NpdGlvbigKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0
ZSgpOwogICAgIGFic1Bvcy5tb3ZlKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRl
clRvcCgpICsgcGFkZGluZ1RvcCgpKTsKIAotICAgIGludCB3aWR0aCA9IG1fd2lkdGggLSBib3Jk
ZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgp
OwotICAgIGludCBoZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9t
KCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7CisgICAgaW50IHcgPSB3aWR0aCgp
IC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5n
UmlnaHQoKTsKKyAgICBpbnQgaCA9IGhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0
b20oKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKTsKIAotICAgIEludFJlY3QgbmV3
Qm91bmRzKGFic1Bvcy54KCksIGFic1Bvcy55KCksIHdpZHRoLCBoZWlnaHQpOworICAgIEludFJl
Y3QgbmV3Qm91bmRzKGFic1Bvcy54KCksIGFic1Bvcy55KCksIHcsIGgpOwogICAgIEludFJlY3Qg
b2xkQm91bmRzKG1fd2lkZ2V0LT5mcmFtZVJlY3QoKSk7CiAgICAgaWYgKG5ld0JvdW5kcyAhPSBv
bGRCb3VuZHMpIHsKICAgICAgICAgLy8gVGhlIHdpZGdldCBjaGFuZ2VkIHBvc2l0aW9ucy4gIFVw
ZGF0ZSB0aGUgZnJhbWUgZ2VvbWV0cnkuCkBAIC0yNzEsNyArMjcxLDcgQEAgYm9vbCBSZW5kZXJX
aWRnZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdAogICAgIAogICAgIC8vIENoZWNrIHRvIHNlZSBp
ZiB3ZSBhcmUgcmVhbGx5IG92ZXIgdGhlIHdpZGdldCBpdHNlbGYgKGFuZCBub3QganVzdCBpbiB0
aGUgYm9yZGVyL3BhZGRpbmcgYXJlYSkuCiAgICAgaWYgKGluc2lkZSAmJiAhaGFkUmVzdWx0ICYm
IHJlc3VsdC5pbm5lck5vZGUoKSA9PSBlbGVtZW50KCkpCi0gICAgICAgIHJlc3VsdC5zZXRJc092
ZXJXaWRnZXQoY29udGVudEJveCgpLmNvbnRhaW5zKHJlc3VsdC5sb2NhbFBvaW50KCkpKTsKKyAg
ICAgICAgcmVzdWx0LnNldElzT3ZlcldpZGdldChjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHJl
c3VsdC5sb2NhbFBvaW50KCkpKTsKICAgICByZXR1cm4gaW5zaWRlOwogfQogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHB1
YmxpYzoKIAogICAgIElubGluZUJveCogY2xvc2VzdExlYWZDaGlsZEZvclhQb3MoaW50IHgsIGJv
b2wgb25seUVkaXRhYmxlTGVhdmVzID0gZmFsc2UpOwogCi0gICAgVmVjdG9yPFJlbmRlck9iamVj
dCo+JiBmbG9hdHMoKQorICAgIFZlY3RvcjxSZW5kZXJCb3gqPiYgZmxvYXRzKCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghaXNEaXJ0eSgpKTsKICAgICAgICAgaWYgKCFtX292ZXJmbG93KQpAQCAt
MTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3ZlcmZsb3ctPmZsb2F0
czsKICAgICB9CiAKLSAgICBWZWN0b3I8UmVuZGVyT2JqZWN0Kj4qIGZsb2F0c1B0cigpIHsgQVNT
RVJUKCFpc0RpcnR5KCkpOyByZXR1cm4gbV9vdmVyZmxvdyA/ICZtX292ZXJmbG93LT5mbG9hdHMg
OiAwOyB9CisgICAgVmVjdG9yPFJlbmRlckJveCo+KiBmbG9hdHNQdHIoKSB7IEFTU0VSVCghaXNE
aXJ0eSgpKTsgcmV0dXJuIG1fb3ZlcmZsb3cgPyAmbV9vdmVyZmxvdy0+ZmxvYXRzIDogMDsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgLy8gTm9ybWFsbHkgd2UgYXJlIG9ubHkgYXMgdGFsbCBhcyB0aGUg
c3R5bGUgb24gb3VyIGJsb2NrIGRpY3RhdGVzLCBidXQgd2UgbWlnaHQgaGF2ZSBjb250ZW50CkBA
IC0xNTgsNyArMTU4LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBpbnQgbV9zZWxlY3Rpb25Cb3R0
b207CiAgICAgICAgIC8vIEZsb2F0cyBoYW5naW5nIG9mZiB0aGUgbGluZSBhcmUgcHVzaGVkIGlu
dG8gdGhpcyB2ZWN0b3IgZHVyaW5nIGxheW91dC4gSXQgaXMgb25seQogICAgICAgICAvLyBnb29k
IGZvciBhcyBsb25nIGFzIHRoZSBsaW5lIGhhcyBub3QgYmVlbiBtYXJrZWQgZGlydHkuCi0gICAg
ICAgIFZlY3RvcjxSZW5kZXJPYmplY3QqPiBmbG9hdHM7CisgICAgICAgIFZlY3RvcjxSZW5kZXJC
b3gqPiBmbG9hdHM7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCkgdGhyb3coKTsKICAgICB9OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5l
Rmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lRmxv
d0JveC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5l
Rmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDEwIEBAIGludCBTVkdJbmxp
bmVGbG93Qm94OjpwbGFjZUJveGVzSG9yaXpvbnQKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBT
VkdJbmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQmKQoraW50IFNWR0lubGlu
ZUZsb3dCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzKGludCkKIHsKICAgICAvLyBuby1vcAorICAg
IHJldHVybiAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
LCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCBpbnQgcGxhY2VCb3hlc0hvcml6b250YWxs
eShpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgYm9vbCYgbmVl
ZHNXb3JkU3BhY2luZyk7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRpY2FsbHlBbGlnbkJveGVzKGlu
dCYgaGVpZ2h0T2ZCbG9jayk7CisgICAgdmlydHVhbCBpbnQgdmVydGljYWxseUFsaWduQm94ZXMo
aW50IGhlaWdodE9mQmxvY2spOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDQwMDc1
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtCiAgICAgICAgIHJldHVybiB0czsKIAogICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+
JiBjaHVua3MgPSBjb25zdF9jYXN0PFZlY3RvcjxTVkdUZXh0Q2h1bms+JiA+KGJveC0+c3ZnVGV4
dENodW5rcygpKTsKLSAgICB0cyA8PCAiIGF0ICgiIDw8IHRleHQueFBvcygpIDw8ICIsIiA8PCB0
ZXh0LnlQb3MoKSA8PCAiKSBzaXplICIgPDwgYm94LT53aWR0aCgpIDw8ICJ4IiA8PCBib3gtPmhl
aWdodCgpIDw8ICIgY29udGFpbnMgIiA8PCBjaHVua3Muc2l6ZSgpIDw8ICIgY2h1bmsocykiOwor
ICAgIHRzIDw8ICIgYXQgKCIgPDwgdGV4dC54KCkgPDwgIiwiIDw8IHRleHQueSgpIDw8ICIpIHNp
emUgIiA8PCBib3gtPndpZHRoKCkgPDwgIngiIDw8IGJveC0+aGVpZ2h0KCkgPDwgIiBjb250YWlu
cyAiIDw8IGNodW5rcy5zaXplKCkgPDwgIiBjaHVuayhzKSI7CiAKICAgICBpZiAodGV4dC5wYXJl
bnQoKSAmJiAodGV4dC5wYXJlbnQoKS0+c3R5bGUoKS0+Y29sb3IoKSAhPSB0ZXh0LnN0eWxlKCkt
PmNvbG9yKCkpKQogICAgICAgICB0cyA8PCAiIFtjb2xvcj0iIDw8IHRleHQuc3R5bGUoKS0+Y29s
b3IoKS5uYW1lKCkgPDwgIl0iOwpAQCAtNTE0LDcgKzUxNCw3IEBAIHZvaWQgd3JpdGUoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlclMKICAgICAgICAgICAgIHRzIDw8ICIgeyIgPDwgdGFnTmFt
ZSA8PCAifSI7CiAgICAgfQogCi0gICAgdHMgPDwgIiBhdCAoIiA8PCB0ZXh0LnhQb3MoKSA8PCAi
LCIgPDwgdGV4dC55UG9zKCkgPDwgIikgc2l6ZSAiIDw8IHRleHQud2lkdGgoKSA8PCAieCIgPDwg
dGV4dC5oZWlnaHQoKSA8PCAiXG4iOworICAgIHRzIDw8ICIgYXQgKCIgPDwgdGV4dC5maXJzdFJ1
blgoKSA8PCAiLCIgPDwgdGV4dC5maXJzdFJ1blkoKSA8PCAiKSBzaXplICIgPDwgdGV4dC5ib3Vu
ZGluZ0JveFdpZHRoKCkgPDwgIngiIDw8IHRleHQuYm91bmRpbmdCb3hIZWlnaHQoKSA8PCAiXG4i
OwogICAgIHdyaXRlU1ZHSW5saW5lVGV4dCh0cywgdGV4dCwgaW5kZW50KTsKIH0KIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlNWR0lubGluZUZsb3dCb3guaCIK
ICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCkBAIC02MTEsMTAgKzYxMiwxMCBAQCBpbnQg
U1ZHUm9vdElubGluZUJveDo6cGxhY2VCb3hlc0hvcml6b250CiAgICAgcmV0dXJuIDA7CiB9CiAK
LXZvaWQgU1ZHUm9vdElubGluZUJveDo6dmVydGljYWxseUFsaWduQm94ZXMoaW50JiBoZWlnaHRP
ZkJsb2NrKQoraW50IFNWR1Jvb3RJbmxpbmVCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzKGludCkK
IHsKICAgICAvLyBoZWlnaHQgaXMgc2V0IGJ5IGxheW91dElubGluZUJveGVzLgotICAgIGhlaWdo
dE9mQmxvY2sgPSBoZWlnaHQoKTsKKyAgICByZXR1cm4gaGVpZ2h0KCk7CiB9CiAKIGZsb2F0IGN1
bW11bGF0ZWRXaWR0aE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoU1ZHSW5saW5lQm94Q2hhcmFj
dGVyUmFuZ2UmIHJhbmdlKQpAQCAtODg3LDcgKzg4OCw3IEBAIHZvaWQgU1ZHUm9vdElubGluZUJv
eDo6Y29tcHV0ZVBlckNoYXJhY3QKICAgICAvLyBGaW5hbGx5IHRoZSB0b3AgbGVmdCBwb3NpdGlv
biBvZiBvdXIgYm94IGlzIGtub3duLgogICAgIC8vIFByb3BvZ2F0ZSB0aGlzIGtub3dubGVkZ2Ug
dG8gb3VyIFJlbmRlclNWR1RleHQgcGFyZW50LgogICAgIEZsb2F0UG9pbnQgdG9wTGVmdCA9IHRv
cExlZnRQb3NpdGlvbk9mQ2hhcmFjdGVyUmFuZ2UobV9zdmdDaGFycyk7Ci0gICAgb2JqZWN0KCkt
PnNldFBvcygoaW50KSBmbG9vcmYodG9wTGVmdC54KCkpLCAoaW50KSBmbG9vcmYodG9wTGVmdC55
KCkpKTsKKyAgICBibG9jaygpLT5zZXRMb2NhdGlvbigoaW50KSBmbG9vcmYodG9wTGVmdC54KCkp
LCAoaW50KSBmbG9vcmYodG9wTGVmdC55KCkpKTsKIAogICAgIC8vIExheW91dCBhbGwgSW5saW5l
VGV4dC9GbG93IGJveGVzCiAgICAgLy8gQkVXQVJFOiBUaGlzIHJlcXVpcmVzIHRoZSByb290IHRv
cC9sZWZ0IHBvc2l0aW9uIHRvIGJlIHNldCBjb3JyZWN0bHkgYmVmb3JlIQpAQCAtMTAzOCwxMCAr
MTAzOSwxMCBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dElubGluZUJveGVzCiAgICAg
ICAgICAgICBpbnQgbWluWSA9IGVuY2xvc2VkU3RyaW5nUmVjdC55KCk7CiAgICAgICAgICAgICBp
bnQgbWF4WSA9IG1pblkgKyBlbmNsb3NlZFN0cmluZ1JlY3QuaGVpZ2h0KCk7CiAKLSAgICAgICAg
ICAgIGN1cnItPnNldFhQb3MobWluWCAtIG9iamVjdCgpLT54UG9zKCkpOworICAgICAgICAgICAg
Y3Vyci0+c2V0WFBvcyhtaW5YIC0gYmxvY2soKS0+eCgpKTsKICAgICAgICAgICAgIGN1cnItPnNl
dFdpZHRoKGVuY2xvc2VkU3RyaW5nUmVjdC53aWR0aCgpKTsKIAotICAgICAgICAgICAgY3Vyci0+
c2V0WVBvcyhtaW5ZIC0gb2JqZWN0KCktPnlQb3MoKSk7CisgICAgICAgICAgICBjdXJyLT5zZXRZ
UG9zKG1pblkgLSBibG9jaygpLT55KCkpOwogICAgICAgICAgICAgY3Vyci0+c2V0QmFzZWxpbmUo
Zm9udC5hc2NlbnQoKSk7CiAgICAgICAgICAgICBjdXJyLT5zZXRIZWlnaHQoZW5jbG9zZWRTdHJp
bmdSZWN0LmhlaWdodCgpKTsKIApAQCAtMTA3MSwxMCArMTA3MiwxMCBAQCB2b2lkIFNWR1Jvb3RJ
bmxpbmVCb3g6OmxheW91dElubGluZUJveGVzCiAgICAgCiAgICAgICAgICAgICBsYXlvdXRJbmxp
bmVCb3hlcyhmbG93Qm94LCBpdCwgbWluWCwgbWF4WCwgbWluWSwgbWF4WSk7CiAKLSAgICAgICAg
ICAgIGN1cnItPnNldFhQb3MobWluWCAtIG9iamVjdCgpLT54UG9zKCkpOworICAgICAgICAgICAg
Y3Vyci0+c2V0WFBvcyhtaW5YIC0gYmxvY2soKS0+eCgpKTsKICAgICAgICAgICAgIGN1cnItPnNl
dFdpZHRoKG1heFggLSBtaW5YKTsKIAotICAgICAgICAgICAgY3Vyci0+c2V0WVBvcyhtaW5ZIC0g
b2JqZWN0KCktPnlQb3MoKSk7CisgICAgICAgICAgICBjdXJyLT5zZXRZUG9zKG1pblkgLSBibG9j
aygpLT55KCkpOwogICAgICAgICAgICAgY3Vyci0+c2V0QmFzZWxpbmUoZm9udC5hc2NlbnQoKSk7
CiAgICAgICAgICAgICBjdXJyLT5zZXRIZWlnaHQobWF4WSAtIG1pblkpOwogCkBAIC0xMDkzLDEw
ICsxMDk0LDEwIEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0SW5saW5lQm94ZXMKICAg
ICB9CiAKICAgICBpZiAoc3RhcnQtPmlzUm9vdElubGluZUJveCgpKSB7Ci0gICAgICAgIGludCB0
b3AgPSBsb3dZIC0gb2JqZWN0KCktPnlQb3MoKTsKLSAgICAgICAgaW50IGJvdHRvbSA9IGhpZ2hZ
IC0gb2JqZWN0KCktPnlQb3MoKTsKKyAgICAgICAgaW50IHRvcCA9IGxvd1kgLSBibG9jaygpLT55
KCk7CisgICAgICAgIGludCBib3R0b20gPSBoaWdoWSAtIGJsb2NrKCktPnkoKTsKIAotICAgICAg
ICBzdGFydC0+c2V0WFBvcyhsb3dYIC0gb2JqZWN0KCktPnhQb3MoKSk7CisgICAgICAgIHN0YXJ0
LT5zZXRYUG9zKGxvd1ggLSBibG9jaygpLT54KCkpOwogICAgICAgICBzdGFydC0+c2V0WVBvcyh0
b3ApOwogCiAgICAgICAgIHN0YXJ0LT5zZXRXaWR0aChoaWdoWCAtIGxvd1gpOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsKIAogICAgIHZpcnR1YWwgaW50IHBsYWNlQm94ZXNIb3Jp
em9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJpZ2h0UG9zaXRpb24sIGJv
b2wmIG5lZWRzV29yZFNwYWNpbmcpOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0aWNhbGx5QWxpZ25C
b3hlcyhpbnQmIGhlaWdodE9mQmxvY2spOworICAgIHZpcnR1YWwgaW50IHZlcnRpY2FsbHlBbGln
bkJveGVzKGludCBoZWlnaHRPZkJsb2NrKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUGVy
Q2hhcmFjdGVyTGF5b3V0SW5mb3JtYXRpb24oKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
YmlkaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAJKHJldmlz
aW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2Niw3ICs1NjYsNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6Y29uc3RydWN0
TGluCiB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSG9yaXpvbnRhbFBvc2l0aW9uc0ZvckxpbmUo
Um9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWls
aW5nU3BhY2VSdW4sIGJvb2wgcmVhY2hlZEVuZCkKIHsKICAgICAvLyBGaXJzdCBkZXRlcm1pbmUg
b3VyIHRvdGFsIHdpZHRoLgotICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGxpbmVXaWR0aChtX2hl
aWdodCk7CisgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRoKGhlaWdodCgpKTsKICAg
ICBpbnQgdG90V2lkdGggPSBsaW5lQm94LT5nZXRGbG93U3BhY2luZ1dpZHRoKCk7CiAgICAgYm9v
bCBuZWVkc1dvcmRTcGFjaW5nID0gZmFsc2U7CiAgICAgdW5zaWduZWQgbnVtU3BhY2VzID0gMDsK
QEAgLTU5Nyw3ICs1OTcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSG9yaXpvbnRhbFBv
c2l0CiAgICAgICAgICAgICByLT5tX2JveC0+c2V0V2lkdGgocnQtPndpZHRoKHItPm1fc3RhcnQs
IHItPm1fc3RvcCAtIHItPm1fc3RhcnQsIHRvdFdpZHRoLCBtX2ZpcnN0TGluZSkpOwogICAgICAg
ICB9IGVsc2UgaWYgKCFyLT5tX29iamVjdC0+aXNJbmxpbmVGbG93KCkpIHsKICAgICAgICAgICAg
IHItPm1fb2JqZWN0LT5jYWxjV2lkdGgoKTsKLSAgICAgICAgICAgIHItPm1fYm94LT5zZXRXaWR0
aChyLT5tX29iamVjdC0+d2lkdGgoKSk7CisgICAgICAgICAgICByLT5tX2JveC0+c2V0V2lkdGgo
c3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4oci0+bV9vYmplY3QpLT53aWR0aCgpKTsKICAgICAgICAg
ICAgIGlmICghci0+bV9jb21wYWN0KQogICAgICAgICAgICAgICAgICB0b3RXaWR0aCArPSByLT5t
X29iamVjdC0+bWFyZ2luTGVmdCgpICsgci0+bV9vYmplY3QtPm1hcmdpblJpZ2h0KCk7CiAgICAg
ICAgIH0KQEAgLTYxMSw3ICs2MTEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSG9yaXpv
bnRhbFBvc2l0CiAgICAgLy8gd2Ugbm93IGV4YW1pbmUgb3VyIHRleHQtYWxpZ24gcHJvcGVydHkg
aW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIHBvc2l0aW9uIHRoZQogICAgIC8vIG9iamVj
dHMgaG9yaXpvbnRhbGx5LiAgVGhlIHRvdGFsIHdpZHRoIG9mIHRoZSBsaW5lIGNhbiBiZSBpbmNy
ZWFzZWQgaWYgd2UgZW5kIHVwCiAgICAgLy8ganVzdGlmeWluZyB0ZXh0LgotICAgIGludCB4ID0g
bGVmdE9mZnNldChtX2hlaWdodCk7CisgICAgaW50IHggPSBsZWZ0T2Zmc2V0KGhlaWdodCgpKTsK
ICAgICBzd2l0Y2godGV4dEFsaWduKSB7CiAgICAgICAgIGNhc2UgTEVGVDoKICAgICAgICAgY2Fz
ZSBXRUJLSVRfTEVGVDoKQEAgLTcyMCwxMiArNzIwLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNv
bXB1dGVIb3Jpem9udGFsUG9zaXQKIAogdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZVZlcnRpY2Fs
UG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiBsaW5lQm94LCBCaWRpUnVuKiBmaXJzdFJ1
bikKIHsKLSAgICBsaW5lQm94LT52ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhtX2hlaWdodCk7Ci0gICAg
bGluZUJveC0+c2V0QmxvY2tIZWlnaHQobV9oZWlnaHQpOworICAgIHNldEhlaWdodChsaW5lQm94
LT52ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhoZWlnaHQoKSkpOworICAgIGxpbmVCb3gtPnNldEJsb2Nr
SGVpZ2h0KGhlaWdodCgpKTsKIAogICAgIC8vIFNlZSBpZiB0aGUgbGluZSBzcGlsbGVkIG91dC4g
IElmIHNvIHNldCBvdmVyZmxvdyBoZWlnaHQgYWNjb3JkaW5nbHkuCiAgICAgaW50IGJvdHRvbU9m
TGluZSA9IGxpbmVCb3gtPmJvdHRvbU92ZXJmbG93KCk7Ci0gICAgaWYgKGJvdHRvbU9mTGluZSA+
IG1faGVpZ2h0ICYmIGJvdHRvbU9mTGluZSA+IG1fb3ZlcmZsb3dIZWlnaHQpCisgICAgaWYgKGJv
dHRvbU9mTGluZSA+IGhlaWdodCgpICYmIGJvdHRvbU9mTGluZSA+IG1fb3ZlcmZsb3dIZWlnaHQp
CiAgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBib3R0b21PZkxpbmU7CiAKICAgICAvLyBOb3cg
bWFrZSBzdXJlIHdlIHBsYWNlIHJlcGxhY2VkIHJlbmRlciBvYmplY3RzIGNvcnJlY3RseS4KQEAg
LTczNiw3ICs3MzYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlVmVydGljYWxQb3NpdGlv
CiAgICAgICAgIC8vIEFsaWduIHBvc2l0aW9uZWQgYm94ZXMgd2l0aCB0aGUgdG9wIG9mIHRoZSBs
aW5lIGJveC4gIFRoaXMgaXMKICAgICAgICAgLy8gYSByZWFzb25hYmxlIGFwcHJveGltYXRpb24g
b2YgYW4gYXBwcm9wcmlhdGUgeSBwb3NpdGlvbi4KICAgICAgICAgaWYgKHItPm1fb2JqZWN0LT5p
c1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHItPm1fYm94LT5zZXRZUG9zKG1faGVpZ2h0KTsK
KyAgICAgICAgICAgIHItPm1fYm94LT5zZXRZUG9zKGhlaWdodCgpKTsKIAogICAgICAgICAvLyBQ
b3NpdGlvbiBpcyB1c2VkIHRvIHByb3Blcmx5IHBvc2l0aW9uIGJvdGggcmVwbGFjZWQgZWxlbWVu
dHMgYW5kCiAgICAgICAgIC8vIHRvIHVwZGF0ZSB0aGUgc3RhdGljIG5vcm1hbCBmbG93IHgveSBv
ZiBwb3NpdGlvbmVkIGVsZW1lbnRzLgpAQCAtODAwLDcgKzgwMCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAKICAgICBtX292ZXJmbG93SGVpZ2h0ID0g
MDsKICAgICAgICAgCi0gICAgbV9oZWlnaHQgPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsK
KyAgICBzZXRIZWlnaHQoYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwogICAgIGludCB0b0Fk
ZCA9IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCgpOwogCiAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBzaG91bGQgY2xlYXIgb3V0IG91
ciBsaW5lIGJveGVzLgpAQCAtODMwLDYgKzgzMCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgd2hpbGUgKG8pIHsKICAgICAgICAgICAgIG8tPmlu
dmFsaWRhdGVWZXJ0aWNhbFBvc2l0aW9uKCk7CiAgICAgICAgICAgICBpZiAoby0+aXNSZXBsYWNl
ZCgpIHx8IG8tPmlzRmxvYXRpbmcoKSB8fCBvLT5pc1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAg
ICAgICAgIFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obyk7CisgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gfHwgby0+
c3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCBvLT5zdHlsZSgpLT5oZWlnaHQoKS5pc1Bl
cmNlbnQoKSkKICAgICAgICAgICAgICAgICAgICAgby0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVl
LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtODM4LDEwICs4NDAsMTAgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgICAgICAg
ICBvLT5zZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgaWYgKG8tPmlzUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgICAgICBv
LT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChvKTsKKyAgICAgICAg
ICAgICAgICAgICAgby0+Y29udGFpbmluZ0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRPYmplY3Qo
Ym94KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG8t
PmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0cy5hcHBlbmQoRmxv
YXRXaXRoUmVjdChvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdHMuYXBwZW5kKEZs
b2F0V2l0aFJlY3QoYm94KSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZ1bGxMYXlv
dXQgfHwgby0+bmVlZHNMYXlvdXQoKSkgLy8gUmVwbGFjZWQgZWxlbWVudHMKICAgICAgICAgICAg
ICAgICAgICAgICAgIG8tPmRpcnR5TGluZUJveGVzKGZ1bGxMYXlvdXQpOwogCkBAIC04OTUsOCAr
ODk3LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogCiAgICAg
ICAgIGlmIChzdGFydExpbmUpIHsKICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3VuZHMgPSB0cnVl
OwotICAgICAgICAgICAgcmVwYWludFRvcCA9IG1faGVpZ2h0OwotICAgICAgICAgICAgcmVwYWlu
dEJvdHRvbSA9IG1faGVpZ2h0OworICAgICAgICAgICAgcmVwYWludFRvcCA9IGhlaWdodCgpOwor
ICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9IGhlaWdodCgpOwogICAgICAgICAgICAgUmVuZGVy
QXJlbmEqIGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gq
IGJveCA9IHN0YXJ0TGluZTsKICAgICAgICAgICAgIHdoaWxlIChib3gpIHsKQEAgLTkyOSw3ICs5
MzEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAg
IGJvb2wgZW5kTGluZU1hdGNoZWQgPSBmYWxzZTsKICAgICAgICAgYm9vbCBjaGVja0ZvckVuZExp
bmVNYXRjaCA9IGVuZExpbmU7CiAgICAgICAgIGJvb2wgY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExp
bmUgPSBmYWxzZTsKLSAgICAgICAgaW50IGxhc3RIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAg
aW50IGxhc3RIZWlnaHQgPSBoZWlnaHQoKTsKIAogICAgICAgICB3aGlsZSAoIWVuZC5hdEVuZCgp
KSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjaGVjayBuZWNlc3NhcnkgYmVmb3Jl
IHRoZSBmaXJzdCBpdGVyYXRpb24gb3IgY2FuIGl0IGJlIG1vdmVkIHRvIHRoZSBlbmQ/CkBAIC0x
MDcyLDcgKzEwNzQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihi
CiAgICAgICAgICAgICAgICAgbGFzdEZsb2F0ID0gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbGFzdEhlaWdodCA9IG1faGVpZ2h0OworICAg
ICAgICAgICAgbGFzdEhlaWdodCA9IGhlaWdodCgpOwogICAgICAgICAgICAgc051bU1pZHBvaW50
cyA9IDA7CiAgICAgICAgICAgICBzQ3Vyck1pZHBvaW50ID0gMDsKICAgICAgICAgICAgIHJlc29s
dmVyLnNldFBvc2l0aW9uKGVuZCk7CkBAIC0xMDgxLDcgKzEwODMsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgIGlmIChlbmRMaW5lKSB7CiAgICAg
ICAgICAgICBpZiAoZW5kTGluZU1hdGNoZWQpIHsKICAgICAgICAgICAgICAgICAvLyBBdHRhY2gg
YWxsIHRoZSByZW1haW5pbmcgbGluZXMsIGFuZCB0aGVuIGFkanVzdCB0aGVpciB5LXBvc2l0aW9u
cyBhcyBuZWVkZWQuCi0gICAgICAgICAgICAgICAgaW50IGRlbHRhID0gbV9oZWlnaHQgLSBlbmRM
aW5lWVBvczsKKyAgICAgICAgICAgICAgICBpbnQgZGVsdGEgPSBoZWlnaHQoKSAtIGVuZExpbmVZ
UG9zOwogICAgICAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogbGluZSA9IGVuZExpbmU7
IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGxpbmUtPmF0dGFjaExpbmUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7CkBA
IC0xMDg5LDE3ICsxMDkxLDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxk
cmVuKGIKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVwYWlu
dEJvdHRvbSwgbGluZS0+Ym90dG9tT3ZlcmZsb3coKSArIG1heChkZWx0YSwgMCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZS0+YWRqdXN0UG9zaXRpb24oMCwgZGVsdGEpOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyT2Jq
ZWN0Kj4qIGNsZWFuTGluZUZsb2F0cyA9IGxpbmUtPmZsb2F0c1B0cigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8UmVuZGVyT2JqZWN0Kj46Oml0ZXJhdG9yIGVuZCA9IGNsZWFu
TGluZUZsb2F0cy0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxS
ZW5kZXJPYmplY3QqPjo6aXRlcmF0b3IgZiA9IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgZiAh
PSBlbmQ7ICsrZikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbG9hdFRvcCA9
ICgqZiktPnlQb3MoKSAtICgqZiktPm1hcmdpblRvcCgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoVmVjdG9yPFJlbmRlckJveCo+KiBjbGVhbkxpbmVGbG9hdHMgPSBsaW5lLT5mbG9hdHNQdHIo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFJlbmRlckJveCo+OjppdGVyYXRv
ciBlbmQgPSBjbGVhbkxpbmVGbG9hdHMtPmVuZCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGYgPSBjbGVhbkxpbmVGbG9hdHMtPmJl
Z2luKCk7IGYgIT0gZW5kOyArK2YpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZmxvYXRUb3AgPSAoKmYpLT55KCkgLSAoKmYpLT5tYXJnaW5Ub3AoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdCgqZik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9oZWlnaHQgPSBmbG9hdFRvcCArIGRlbHRhOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldEhlaWdodChmbG9hdFRvcCArIGRlbHRhKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIG1faGVpZ2h0ID0gbGFzdFJvb3RCb3goKS0+YmxvY2tIZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICBzZXRIZWlnaHQobGFzdFJvb3RCb3goKS0+YmxvY2tIZWlnaHQoKSk7CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIERlbGV0ZSBhbGwgdGhlIHJlbWFpbmlu
ZyBsaW5lcy4KICAgICAgICAgICAgICAgICBJbmxpbmVSdW5Cb3gqIGxpbmUgPSBlbmRMaW5lOwpA
QCAtMTEzNSwxNiArMTEzNywxNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGls
ZHJlbihiCiAgICAgc0N1cnJNaWRwb2ludCA9IDA7CiAKICAgICAvLyBOb3cgYWRkIGluIHRoZSBi
b3R0b20gYm9yZGVyL3BhZGRpbmcuCi0gICAgbV9oZWlnaHQgKz0gdG9BZGQ7CisgICAgc2V0SGVp
Z2h0KGhlaWdodCgpICsgdG9BZGQpOwogCiAgICAgLy8gQWx3YXlzIG1ha2Ugc3VyZSB0aGlzIGlz
IGF0IGxlYXN0IG91ciBoZWlnaHQuCi0gICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX2hlaWdo
dCwgbV9vdmVyZmxvd0hlaWdodCk7CisgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChoZWlnaHQo
KSwgbV9vdmVyZmxvd0hlaWdodCk7CiAKICAgICAvLyBTZWUgaWYgYW55IGxpbmVzIHNwaWxsIG91
dCBvZiB0aGUgYmxvY2suICBJZiBzbywgd2UgbmVlZCB0byB1cGRhdGUgb3VyIG92ZXJmbG93IHdp
ZHRoLgogICAgIGNoZWNrTGluZXNGb3JPdmVyZmxvdygpOwogCiAgICAgaWYgKCFmaXJzdExpbmVC
b3goKSAmJiBoYXNMaW5lSWZFbXB0eSgpKQotICAgICAgICBtX2hlaWdodCArPSBsaW5lSGVpZ2h0
KHRydWUsIHRydWUpOworICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBsaW5lSGVpZ2h0KHRy
dWUsIHRydWUpKTsKIAogICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGFueSBsaW5lcyB0aGF0IHNwaWxs
IG91dCBvZiBvdXIgYmxvY2suICBJZiB3ZSBkbywgdGhlbiB3ZSB3aWxsIHBvc3NpYmx5IG5lZWQg
dG8KICAgICAvLyB0cnVuY2F0ZSB0ZXh0LgpAQCAtMTE2MSwxMCArMTE2MywxMCBAQCBSb290SW5s
aW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhCiAgICAgaWYgKCFmdWxsTGF5b3V0KSB7
CiAgICAgICAgIHNpemVfdCBmbG9hdEluZGV4ID0gMDsKICAgICAgICAgZm9yIChjdXJyID0gZmly
c3RSb290Qm94KCk7IGN1cnIgJiYgIWN1cnItPmlzRGlydHkoKTsgY3VyciA9IGN1cnItPm5leHRS
b290Qm94KCkpIHsKLSAgICAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyT2JqZWN0Kj4qIGNsZWFu
TGluZUZsb2F0cyA9IGN1cnItPmZsb2F0c1B0cigpKSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9y
PFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBjbGVhbkxpbmVGbG9hdHMtPmVuZCgpOwot
ICAgICAgICAgICAgICAgIGZvciAoVmVjdG9yPFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBvID0g
Y2xlYW5MaW5lRmxvYXRzLT5iZWdpbigpOyBvICE9IGVuZDsgKytvKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogZiA9ICpvOworICAgICAgICAgICAgaWYgKFZlY3RvcjxSZW5k
ZXJCb3gqPiogY2xlYW5MaW5lRmxvYXRzID0gY3Vyci0+ZmxvYXRzUHRyKCkpIHsKKyAgICAgICAg
ICAgICAgICBWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGVuZCA9IGNsZWFuTGluZUZsb2F0
cy0+ZW5kKCk7CisgICAgICAgICAgICAgICAgZm9yIChWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJh
dG9yIG8gPSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCk7IG8gIT0gZW5kOyArK28pIHsKKyAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyQm94KiBmID0gKm87CiAgICAgICAgICAgICAgICAgICAgIElu
dFNpemUgbmV3U2l6ZShmLT53aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICtmLT5tYXJnaW5SaWdo
dCgpLCBmLT5oZWlnaHQoKSArIGYtPm1hcmdpblRvcCgpICsgZi0+bWFyZ2luQm90dG9tKCkpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZmxvYXRJbmRleCA8IGZsb2F0cy5zaXplKCkpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXRzW2Zsb2F0SW5kZXhdLm9iamVjdCAhPSBmKSB7
CkBAIC0xMjI2LDE1ICsxMjI4LDE1IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRl
cm1pbmVTdGEKIAogICAgIG51bUNsZWFuRmxvYXRzID0gMDsKICAgICBpZiAoIWZsb2F0cy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgaW50IHNhdmVkSGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAgIGlu
dCBzYXZlZEhlaWdodCA9IGhlaWdodCgpOwogICAgICAgICAvLyBSZXN0b3JlIGZsb2F0cyBmcm9t
IGNsZWFuIGxpbmVzLgogICAgICAgICBSb290SW5saW5lQm94KiBsaW5lID0gZmlyc3RSb290Qm94
KCk7CiAgICAgICAgIHdoaWxlIChsaW5lICE9IGN1cnIpIHsKLSAgICAgICAgICAgIGlmIChWZWN0
b3I8UmVuZGVyT2JqZWN0Kj4qIGNsZWFuTGluZUZsb2F0cyA9IGxpbmUtPmZsb2F0c1B0cigpKSB7
Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBj
bGVhbkxpbmVGbG9hdHMtPmVuZCgpOwotICAgICAgICAgICAgICAgIGZvciAoVmVjdG9yPFJlbmRl
ck9iamVjdCo+OjppdGVyYXRvciBmID0gY2xlYW5MaW5lRmxvYXRzLT5iZWdpbigpOyBmICE9IGVu
ZDsgKytmKSB7CisgICAgICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckJveCo+KiBjbGVhbkxpbmVG
bG9hdHMgPSBsaW5lLT5mbG9hdHNQdHIoKSkgeworICAgICAgICAgICAgICAgIFZlY3RvcjxSZW5k
ZXJCb3gqPjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgZiA9IGNsZWFuTGluZUZs
b2F0cy0+YmVnaW4oKTsgZiAhPSBlbmQ7ICsrZikgewogICAgICAgICAgICAgICAgICAgICBpbnNl
cnRGbG9hdGluZ09iamVjdCgqZik7Ci0gICAgICAgICAgICAgICAgICAgIG1faGVpZ2h0ID0gKCpm
KS0+eVBvcygpIC0gKCpmKS0+bWFyZ2luVG9wKCk7CisgICAgICAgICAgICAgICAgICAgIHNldEhl
aWdodCgoKmYpLT55KCkgLSAoKmYpLT5tYXJnaW5Ub3AoKSk7CiAgICAgICAgICAgICAgICAgICAg
IHBvc2l0aW9uTmV3RmxvYXRzKCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChmbG9hdHNb
bnVtQ2xlYW5GbG9hdHNdLm9iamVjdCA9PSAqZik7CiAgICAgICAgICAgICAgICAgICAgIG51bUNs
ZWFuRmxvYXRzKys7CkBAIC0xMjQyLDcgKzEyNDQsNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJC
bG9jazo6ZGV0ZXJtaW5lU3RhCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsaW5lID0gbGlu
ZS0+bmV4dFJvb3RCb3goKTsKICAgICAgICAgfQotICAgICAgICBtX2hlaWdodCA9IHNhdmVkSGVp
Z2h0OworICAgICAgICBzZXRIZWlnaHQoc2F2ZWRIZWlnaHQpOwogICAgIH0KIAogICAgIG1fZmly
c3RMaW5lID0gIWxhc3Q7CkBAIC0xMjUxLDcgKzEyNTMsNyBAQCBSb290SW5saW5lQm94KiBSZW5k
ZXJCbG9jazo6ZGV0ZXJtaW5lU3RhCiAgICAgUmVuZGVyT2JqZWN0KiBzdGFydE9iajsKICAgICBp
bnQgcG9zID0gMDsKICAgICBpZiAobGFzdCkgewotICAgICAgICBtX2hlaWdodCA9IGxhc3QtPmJs
b2NrSGVpZ2h0KCk7CisgICAgICAgIHNldEhlaWdodChsYXN0LT5ibG9ja0hlaWdodCgpKTsKICAg
ICAgICAgc3RhcnRPYmogPSBsYXN0LT5saW5lQnJlYWtPYmooKTsKICAgICAgICAgcG9zID0gbGFz
dC0+bGluZUJyZWFrUG9zKCk7CiAgICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhsYXN0LT5saW5l
QnJlYWtCaWRpU3RhdHVzKCkpOwpAQCAtMTMxMSwxMiArMTMxMywxMiBAQCBib29sIFJlbmRlckJs
b2NrOjptYXRjaGVkRW5kTGluZShjb25zdCBJCiAgICAgICAgIGlmIChyZXNvbHZlci5zdGF0dXMo
KSAhPSBlbmRMaW5lU3RhdHVzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
IGludCBkZWx0YSA9IG1faGVpZ2h0IC0gZW5kWVBvczsKKyAgICAgICAgaW50IGRlbHRhID0gaGVp
Z2h0KCkgLSBlbmRZUG9zOwogICAgICAgICBpZiAoIWRlbHRhIHx8ICFtX2Zsb2F0aW5nT2JqZWN0
cykKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIC8vIFNlZSBpZiBhbnkgZmxv
YXRzIGVuZCBpbiB0aGUgcmFuZ2UgYWxvbmcgd2hpY2ggd2Ugd2FudCB0byBzaGlmdCB0aGUgbGlu
ZXMgdmVydGljYWxseS4KLSAgICAgICAgaW50IHRvcCA9IG1pbihtX2hlaWdodCwgZW5kWVBvcyk7
CisgICAgICAgIGludCB0b3AgPSBtaW4oaGVpZ2h0KCksIGVuZFlQb3MpOwogCiAgICAgICAgIFJv
b3RJbmxpbmVCb3gqIGxhc3RMaW5lID0gZW5kTGluZTsKICAgICAgICAgd2hpbGUgKFJvb3RJbmxp
bmVCb3gqIG5leHRMaW5lID0gbGFzdExpbmUtPm5leHRSb290Qm94KCkpCkBAIC0xMzQ3LDEwICsx
MzQ5LDEwIEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKGNvbnN0IEkKICAgICAg
ICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICAgICAgZW5kWVBvcyA9IGxpbmUtPmJsb2Nr
SGVpZ2h0KCk7CiAKLSAgICAgICAgICAgIGludCBkZWx0YSA9IG1faGVpZ2h0IC0gZW5kWVBvczsK
KyAgICAgICAgICAgIGludCBkZWx0YSA9IGhlaWdodCgpIC0gZW5kWVBvczsKICAgICAgICAgICAg
IGlmIChkZWx0YSAmJiBtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgICAgIC8vIFNl
ZSBpZiBhbnkgZmxvYXRzIGVuZCBpbiB0aGUgcmFuZ2UgYWxvbmcgd2hpY2ggd2Ugd2FudCB0byBz
aGlmdCB0aGUgbGluZXMgdmVydGljYWxseS4KLSAgICAgICAgICAgICAgICBpbnQgdG9wID0gbWlu
KG1faGVpZ2h0LCBlbmRZUG9zKTsKKyAgICAgICAgICAgICAgICBpbnQgdG9wID0gbWluKGhlaWdo
dCgpLCBlbmRZUG9zKTsKIAogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGxhc3RMaW5l
ID0gZW5kTGluZTsKICAgICAgICAgICAgICAgICB3aGlsZSAoUm9vdElubGluZUJveCogbmV4dExp
bmUgPSBsYXN0TGluZS0+bmV4dFJvb3RCb3goKSkKQEAgLTE0NTksNyArMTQ2MSw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnNraXBUcmFpbGluZ1doaXRlc3BhY2UKICAgICB3aGlsZSAoIWl0ZXJhdG9y
LmF0RW5kKCkgJiYgIXJlcXVpcmVzTGluZUJveChpdGVyYXRvcikpIHsKICAgICAgICAgUmVuZGVy
T2JqZWN0KiBvYmplY3QgPSBpdGVyYXRvci5vYmo7CiAgICAgICAgIGlmIChvYmplY3QtPmlzRmxv
YXRpbmcoKSkgewotICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3Qob2JqZWN0KTsKKyAg
ICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG9i
amVjdCkpOwogICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC0+aXNQb3NpdGlvbmVkKCkpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGUgbWF0aCBoZXJlIGlzIGFjdHVhbGx5IG5vdCByZWFsbHkg
cmlnaHQuICBJdCdzIGEgYmVzdC1ndWVzcyBhcHByb3hpbWF0aW9uIHRoYXQKICAgICAgICAgICAg
IC8vIHdpbGwgd29yayBmb3IgdGhlIGNvbW1vbiBjYXNlcwpAQCAtMTQ2OCwxOSArMTQ3MCwxOSBA
QCB2b2lkIFJlbmRlckJsb2NrOjpza2lwVHJhaWxpbmdXaGl0ZXNwYWNlCiAgICAgICAgICAgICAg
ICAgLy8gQSByZWxhdGl2ZSBwb3NpdGlvbmVkIGlubGluZSBlbmNsb3NlcyB1cy4gIEluIHRoaXMg
Y2FzZSwgd2UgYWxzbyBoYXZlIHRvIGRldGVybWluZSBvdXIKICAgICAgICAgICAgICAgICAvLyBw
b3NpdGlvbiBhcyB0aG91Z2ggd2Ugd2VyZSBhbiBpbmxpbmUuICBTZXQgfHN0YXRpY1h8IGFuZCB8
c3RhdGljWXwgb24gdGhlIHJlbGF0aXZlIHBvc2l0aW9uZWQKICAgICAgICAgICAgICAgICAvLyBp
bmxpbmUgc28gdGhhdCB3ZSBjYW4gb2J0YWluIHRoZSB2YWx1ZSBsYXRlci4KLSAgICAgICAgICAg
ICAgICBjLT5zZXRTdGF0aWNYKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGxlZnRPZmZz
ZXQobV9oZWlnaHQpIDogcmlnaHRPZmZzZXQobV9oZWlnaHQpKTsKLSAgICAgICAgICAgICAgICBj
LT5zZXRTdGF0aWNZKG1faGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBjLT5zZXRTdGF0aWNYKHN0
eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGxlZnRPZmZzZXQoaGVpZ2h0KCkpIDogcmlnaHRP
ZmZzZXQoaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAgICBjLT5zZXRTdGF0aWNZKGhlaWdodCgp
KTsKICAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIGlmIChvYmplY3QtPmhhc1N0YXRp
Y1goKSkgewogICAgICAgICAgICAgICAgIGlmIChvYmplY3QtPnN0eWxlKCktPmlzT3JpZ2luYWxE
aXNwbGF5SW5saW5lVHlwZSgpKQotICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnNldFN0YXRp
Y1goc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbGVmdE9mZnNldChtX2hlaWdodCkgOiB3
aWR0aCgpIC0gcmlnaHRPZmZzZXQobV9oZWlnaHQpKTsKKyAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0LT5zZXRTdGF0aWNYKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGxlZnRPZmZzZXQo
aGVpZ2h0KCkpIDogd2lkdGgoKSAtIHJpZ2h0T2Zmc2V0KGhlaWdodCgpKSk7CiAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnNldFN0YXRpY1goc3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSA6IGJv
cmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSk7CiAgICAgICAgICAgICB9CiAgICAgCiAgICAg
ICAgICAgICBpZiAob2JqZWN0LT5oYXNTdGF0aWNZKCkpCi0gICAgICAgICAgICAgICAgb2JqZWN0
LT5zZXRTdGF0aWNZKG1faGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldFN0YXRp
Y1koaGVpZ2h0KCkpOwogICAgICAgICB9CiAgICAgICAgIGl0ZXJhdG9yLmluY3JlbWVudCgpOwog
ICAgIH0KQEAgLTE0ODgsMTMgKzE0OTAsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2tpcFRyYWls
aW5nV2hpdGVzcGFjZQogCiBpbnQgUmVuZGVyQmxvY2s6OnNraXBMZWFkaW5nV2hpdGVzcGFjZShJ
bmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQogewotICAgIGludCBhdmFpbGFibGVXaWR0aCA9
IGxpbmVXaWR0aChtX2hlaWdodCk7CisgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRo
KGhlaWdodCgpKTsKICAgICB3aGlsZSAoIXJlc29sdmVyLnBvc2l0aW9uKCkuYXRFbmQoKSAmJiAh
cmVxdWlyZXNMaW5lQm94KHJlc29sdmVyLnBvc2l0aW9uKCkpKSB7CiAgICAgICAgIFJlbmRlck9i
amVjdCogb2JqZWN0ID0gcmVzb2x2ZXIucG9zaXRpb24oKS5vYmo7CiAgICAgICAgIGlmIChvYmpl
Y3QtPmlzRmxvYXRpbmcoKSkgewotICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3Qob2Jq
ZWN0KTsKKyAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KHN0YXRpY19jYXN0PFJlbmRl
ckJveCo+KG9iamVjdCkpOwogICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKLSAgICAg
ICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRoKG1faGVpZ2h0KTsKKyAgICAgICAgICAg
IGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRoKGhlaWdodCgpKTsKICAgICAgICAgfSBlbHNlIGlm
IChvYmplY3QtPmlzUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIG1h
dGggaGVyZSBpcyBhY3R1YWxseSBub3QgcmVhbGx5IHJpZ2h0LiAgSXQncyBhIGJlc3QtZ3Vlc3Mg
YXBwcm94aW1hdGlvbiB0aGF0CiAgICAgICAgICAgICAvLyB3aWxsIHdvcmsgZm9yIHRoZSBjb21t
b24gY2FzZXMKQEAgLTE1MDMsMTkgKzE1MDUsMTkgQEAgaW50IFJlbmRlckJsb2NrOjpza2lwTGVh
ZGluZ1doaXRlc3BhY2UoSQogICAgICAgICAgICAgICAgIC8vIEEgcmVsYXRpdmUgcG9zaXRpb25l
ZCBpbmxpbmUgZW5jbG9zZXMgdXMuICBJbiB0aGlzIGNhc2UsIHdlIGFsc28gaGF2ZSB0byBkZXRl
cm1pbmUgb3VyCiAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXMgdGhvdWdoIHdlIHdlcmUg
YW4gaW5saW5lLiAgU2V0IHxzdGF0aWNYfCBhbmQgfHN0YXRpY1l8IG9uIHRoZSByZWxhdGl2ZSBw
b3NpdGlvbmVkCiAgICAgICAgICAgICAgICAgLy8gaW5saW5lIHNvIHRoYXQgd2UgY2FuIG9idGFp
biB0aGUgdmFsdWUgbGF0ZXIuCi0gICAgICAgICAgICAgICAgYy0+c2V0U3RhdGljWChzdHlsZSgp
LT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBsZWZ0T2Zmc2V0KG1faGVpZ2h0KSA6IHJpZ2h0T2Zmc2V0
KG1faGVpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgYy0+c2V0U3RhdGljWShtX2hlaWdodCk7Cisg
ICAgICAgICAgICAgICAgYy0+c2V0U3RhdGljWChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIg
PyBsZWZ0T2Zmc2V0KGhlaWdodCgpKSA6IHJpZ2h0T2Zmc2V0KGhlaWdodCgpKSk7CisgICAgICAg
ICAgICAgICAgYy0+c2V0U3RhdGljWShoZWlnaHQoKSk7CiAgICAgICAgICAgICB9CiAgICAgCiAg
ICAgICAgICAgICBpZiAob2JqZWN0LT5oYXNTdGF0aWNYKCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAob2JqZWN0LT5zdHlsZSgpLT5pc09yaWdpbmFsRGlzcGxheUlubGluZVR5cGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRTdGF0aWNYKHN0eWxlKCktPmRpcmVjdGlvbigpID09
IExUUiA/IGxlZnRPZmZzZXQobV9oZWlnaHQpIDogd2lkdGgoKSAtIHJpZ2h0T2Zmc2V0KG1faGVp
Z2h0KSk7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0U3RhdGljWChzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIgPyBsZWZ0T2Zmc2V0KGhlaWdodCgpKSA6IHdpZHRoKCkgLSByaWdo
dE9mZnNldChoZWlnaHQoKSkpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0LT5zZXRTdGF0aWNYKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGJv
cmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgOiBib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0
KCkpOwogICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgaWYgKG9iamVjdC0+aGFzU3Rh
dGljWSgpKQotICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0U3RhdGljWShtX2hlaWdodCk7Cisg
ICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRTdGF0aWNZKGhlaWdodCgpKTsKICAgICAgICAgfQog
ICAgICAgICByZXNvbHZlci5pbmNyZW1lbnQoKTsKICAgICB9CkBAIC0xNTQ1LDcgKzE1NDcsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpmaXRCZWxvd0Zsb2F0cyhpbnQgd2lkCiAgICAgQVNTRVJUKHdp
ZHRoVG9GaXQgPiBhdmFpbGFibGVXaWR0aCk7CiAKICAgICBpbnQgZmxvYXRCb3R0b207Ci0gICAg
aW50IGxhc3RGbG9hdEJvdHRvbSA9IG1faGVpZ2h0OworICAgIGludCBsYXN0RmxvYXRCb3R0b20g
PSBoZWlnaHQoKTsKICAgICBpbnQgbmV3TGluZVdpZHRoID0gYXZhaWxhYmxlV2lkdGg7CiAgICAg
d2hpbGUgKHRydWUpIHsKICAgICAgICAgZmxvYXRCb3R0b20gPSBuZXh0RmxvYXRCb3R0b21CZWxv
dyhsYXN0RmxvYXRCb3R0b20pOwpAQCAtMTU1OSw3ICsxNTYxLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6Zml0QmVsb3dGbG9hdHMoaW50IHdpZAogICAgIH0KIAogICAgIGlmIChuZXdMaW5lV2lkdGgg
PiBhdmFpbGFibGVXaWR0aCkgewotICAgICAgICBtX2hlaWdodCA9IGxhc3RGbG9hdEJvdHRvbTsK
KyAgICAgICAgc2V0SGVpZ2h0KGxhc3RGbG9hdEJvdHRvbSk7CiAgICAgICAgIGF2YWlsYWJsZVdp
ZHRoID0gbmV3TGluZVdpZHRoOwogICAgIH0KIH0KQEAgLTE2NTIsMTMgKzE2NTQsMTQgQEAgSW5s
aW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgICAgICBpZiAoby0+aXNG
bG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gc3BlY2lhbCBv
YmplY3RzLi4uCiAgICAgICAgICAgICBpZiAoby0+aXNGbG9hdGluZygpKSB7Ci0gICAgICAgICAg
ICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3Qobyk7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94
KiBmbG9hdEJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG8pOworICAgICAgICAgICAgICAg
IGluc2VydEZsb2F0aW5nT2JqZWN0KGZsb2F0Qm94KTsKICAgICAgICAgICAgICAgICAvLyBjaGVj
ayBpZiBpdCBmaXRzIGluIHRoZSBjdXJyZW50IGxpbmUuCiAgICAgICAgICAgICAgICAgLy8gSWYg
aXQgZG9lcywgcG9zaXRpb24gaXQgbm93LCBvdGhlcndpc2UsIHBvc2l0aW9uCiAgICAgICAgICAg
ICAgICAgLy8gaXQgYWZ0ZXIgbW92aW5nIHRvIG5leHQgbGluZSAoaW4gbmV3TGluZSgpIGZ1bmMp
Ci0gICAgICAgICAgICAgICAgaWYgKGZsb2F0c0ZpdE9uTGluZSAmJiBvLT53aWR0aCgpICsgby0+
bWFyZ2luTGVmdCgpICsgby0+bWFyZ2luUmlnaHQoKSArIHcgKyB0bXBXIDw9IHdpZHRoKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGZsb2F0c0ZpdE9uTGluZSAmJiBmbG9hdEJveC0+d2lkdGgoKSAr
IGZsb2F0Qm94LT5tYXJnaW5MZWZ0KCkgKyBmbG9hdEJveC0+bWFyZ2luUmlnaHQoKSArIHcgKyB0
bXBXIDw9IHdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbGluZVdpZHRoKG1faGVpZ2h0KTsKKyAgICAg
ICAgICAgICAgICAgICAgd2lkdGggPSBsaW5lV2lkdGgoaGVpZ2h0KCkpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBmbG9hdHNGaXRPbkxpbmUgPSBmYWxzZTsK
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoby0+aXNQb3NpdGlvbmVkKCkpIHsKQEAgLTE2NzcsNyAr
MTY4MCw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAg
ICAgICAgICAgICAvLyBhbmQgZGV0ZXJtaW5lIG91ciBzdGF0aWMgeSBwb3NpdGlvbiBub3cuCiAg
ICAgICAgICAgICAgICAgYm9vbCBuZWVkVG9TZXRTdGF0aWNZID0gby0+aGFzU3RhdGljWSgpOwog
ICAgICAgICAgICAgICAgIGlmIChvLT5oYXNTdGF0aWNZKCkgJiYgaXNJbmxpbmVUeXBlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG8tPnNldFN0YXRpY1kobV9oZWlnaHQpOworICAgICAgICAgICAg
ICAgICAgICBvLT5zZXRTdGF0aWNZKGhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgbmVl
ZFRvU2V0U3RhdGljWSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKQEAgLTE3MjYsNiArMTcyOSw4IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5k
TmV4dExpbmUKICAgICAgICAgICAgIHRtcFcgKz0gby0+bWFyZ2luTGVmdCgpICsgby0+Ym9yZGVy
TGVmdCgpICsgby0+cGFkZGluZ0xlZnQoKSArCiAgICAgICAgICAgICAgICAgICAgIG8tPm1hcmdp
blJpZ2h0KCkgKyBvLT5ib3JkZXJSaWdodCgpICsgby0+cGFkZGluZ1JpZ2h0KCk7CiAgICAgICAg
IH0gZWxzZSBpZiAoby0+aXNSZXBsYWNlZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIHJl
cGxhY2VkQm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obyk7CisKICAgICAgICAgICAgIC8v
IEJyZWFrIG9uIHJlcGxhY2VkIGVsZW1lbnRzIGlmIGVpdGhlciBoYXMgbm9ybWFsIHdoaXRlLXNw
YWNlLgogICAgICAgICAgICAgaWYgKChhdXRvV3JhcCB8fCBSZW5kZXJTdHlsZTo6YXV0b1dyYXAo
bGFzdFdTKSkgJiYgKCFvLT5pc0ltYWdlKCkgfHwgYWxsb3dJbWFnZXNUb0JyZWFrKSkgewogICAg
ICAgICAgICAgICAgIHcgKz0gdG1wVzsKQEAgLTE3NTUsNyArMTc2MCw3IEBAIElubGluZUl0ZXJh
dG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgICAgICAgICAgaWdub3Jp
bmdTcGFjZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIHRtcFcgKz0gby0+d2lkdGgoKSArIG8tPm1hcmdpbkxlZnQoKSArIG8t
Pm1hcmdpblJpZ2h0KCkgKyBpbmxpbmVXaWR0aChvKTsKKyAgICAgICAgICAgICAgICB0bXBXICs9
IHJlcGxhY2VkQm94LT53aWR0aCgpICsgcmVwbGFjZWRCb3gtPm1hcmdpbkxlZnQoKSArIHJlcGxh
Y2VkQm94LT5tYXJnaW5SaWdodCgpICsgaW5saW5lV2lkdGgobyk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoby0+aXNUZXh0KCkpIHsKICAgICAgICAgICAgIGlmICghcG9zKQogICAgICAgICAgICAgICAg
IGFwcGxpZWRTdGFydFdpZHRoID0gZmFsc2U7CkBAIC0yMTcyLDcgKzIxNzcsNyBAQCBJbmxpbmVJ
dGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAKIHZvaWQgUmVuZGVyQmxvY2s6OmNo
ZWNrTGluZXNGb3JPdmVyZmxvdygpCiB7Ci0gICAgbV9vdmVyZmxvd1dpZHRoID0gbV93aWR0aDsK
KyAgICBtX292ZXJmbG93V2lkdGggPSB3aWR0aCgpOwogICAgIGZvciAoUm9vdElubGluZUJveCog
Y3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkg
ewogICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1pbihjdXJyLT5sZWZ0T3ZlcmZsb3coKSwgbV9v
dmVyZmxvd0xlZnQpOwogICAgICAgICBtX292ZXJmbG93VG9wID0gbWluKGN1cnItPnRvcE92ZXJm
bG93KCksIG1fb3ZlcmZsb3dUb3ApOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdMZW5ndGguY3BwCShyZXZpc2lvbiA0MDA3NSkK
KysrIFdlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMSw4ICsz
MDEsMTEgQEAgZmxvYXQgU1ZHTGVuZ3RoOjpQZXJjZW50YWdlT2ZWaWV3cG9ydChmbAogICAgICAg
ICB9CiAgICAgfSBlbHNlIGlmIChjb250ZXh0LT5wYXJlbnQoKSAmJiAhY29udGV4dC0+cGFyZW50
KCktPmlzU1ZHRWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gY29udGV4dC0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgd2lkdGggPSByZW5kZXJlci0+
d2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKTsKKyAgICAg
ICAgICAgIGlmIChyZW5kZXJlci0+aXNCb3goKSkgeworICAgICAgICAgICAgICAgIFJlbmRlckJv
eCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocmVuZGVyZXIpOworICAgICAgICAgICAg
ICAgIHdpZHRoID0gYm94LT53aWR0aCgpOworICAgICAgICAgICAgICAgIGhlaWdodCA9IGJveC0+
aGVpZ2h0KCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJSZW5kZXJOb2RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJSZW5kZXJOb2RlLm1tCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJSZW5kZXJOb2RlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW1wb3J0ICJXZWJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIldlYkhUTUxWaWV3LmgiCiAjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclRleHQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZp
ZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2lkZ2V0Lmg+CkBAIC04OCw4ICs4OSwyNyBAQCBzdGF0
aWMgV2ViUmVuZGVyTm9kZSAqY29weVJlbmRlck5vZGUoUmVuCiAKICAgICAvLyBGSVhNRTogYnJv
a2VuIHdpdGggdHJhbnNmb3JtcwogICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbm9kZS0+bG9jYWxU
b0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CisgICAgaW50IHggPSAwOworICAgIGludCB5ID0gMDsK
KyAgICBpbnQgd2lkdGggPSAwOworICAgIGludCBoZWlnaHQgPSAwOworICAgIGlmIChub2RlLT5p
c0JveCgpKSB7CisgICAgICAgIFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94
Kj4obm9kZSk7CisgICAgICAgIHggPSBib3gtPngoKTsKKyAgICAgICAgeSA9IGJveC0+eSgpOwor
ICAgICAgICB3aWR0aCA9IGJveC0+d2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gYm94LT5oZWln
aHQoKTsKKyAgICB9IGVsc2UgaWYgKG5vZGUtPmlzVGV4dCgpKSB7CisgICAgICAgIC8vIEZJWE1F
OiBQcmVzZXJ2ZSBvbGQgYmVoYXZpb3IgZXZlbiB0aG91Z2ggaXQncyBzdHJhbmdlLgorICAgICAg
ICBSZW5kZXJUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG5vZGUpOworICAg
ICAgICB4ID0gdGV4dC0+Zmlyc3RSdW5YKCk7CisgICAgICAgIHkgPSB0ZXh0LT5maXJzdFJ1blko
KTsKKyAgICAgICAgd2lkdGggPSB0ZXh0LT5ib3VuZGluZ0JveFdpZHRoKCk7CisgICAgICAgIGhl
aWdodCA9IHRleHQtPmJvdW5kaW5nQm94SGVpZ2h0KCk7CisgICAgfQorICAgIAogICAgIFdlYlJl
bmRlck5vZGUgKnJlc3VsdCA9IFtbV2ViUmVuZGVyTm9kZSBhbGxvY10gaW5pdFdpdGhOYW1lOm5h
bWUKLSAgICAgICAgcG9zaXRpb246YWJzUG9zIHJlY3Q6TlNNYWtlUmVjdChub2RlLT54UG9zKCks
IG5vZGUtPnlQb3MoKSwgbm9kZS0+d2lkdGgoKSwgbm9kZS0+aGVpZ2h0KCkpCisgICAgICAgIHBv
c2l0aW9uOmFic1BvcyByZWN0Ok5TTWFrZVJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkKICAgICAg
ICAgdmlldzp2aWV3IGNoaWxkcmVuOmNoaWxkcmVuXTsKIAogICAgIFtuYW1lIHJlbGVhc2VdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26913</attachid>
            <date>2009-01-21 16:09:15 -0800</date>
            <delta_ts>2009-01-21 16:13:05 -0800</delta_ts>
            <desc>Patch that passes all layout tests</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>389179</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC03MzQsNiArNzM0LDEwIEBAIF9fWk5LN1dlYkNvcmUxMklj
b25EYXRhYmFzZTEyZGF0YWJhc2VQYXQKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFzZTI0c2hv
dWxkU3RvcFRocmVhZEFjdGl2aXR5RXYKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFzZTlpc0Vu
YWJsZWRFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNsb3NpbmdMYXllckV2Citf
X1pOSzdXZWJDb3JlMTBSZW5kZXJUZXh0MTZib3VuZGluZ0JveFdpZHRoRXYKK19fWk5LN1dlYkNv
cmUxMFJlbmRlclRleHQxN2JvdW5kaW5nQm94SGVpZ2h0RXYKK19fWk5LN1dlYkNvcmUxMFJlbmRl
clRleHQ5Zmlyc3RSdW5YRXYKK19fWk5LN1dlYkNvcmUxMFJlbmRlclRleHQ5Zmlyc3RSdW5ZRXYK
IF9fWk5LN1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjRkYXRhRXYKIF9fWk5LN1dlYkNvcmUxMlNoYXJl
ZEJ1ZmZlcjRzaXplRXYKIF9fWk5LN1dlYkNvcmUxMlRleHRFbmNvZGluZzZkZWNvZGVFUEtjbWJS
YgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShy
ZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJlY3QuaCIKLSNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJTaGFk
b3dWYWx1ZS5oIgogI2luY2x1ZGUgIldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCiAKQEAgLTM5
NSw3ICszOTUsMTEgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldEJvcmRlclJhZAog
CiBzdGF0aWMgSW50UmVjdCBzaXppbmdCb3goUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAg
ICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8g
cmVuZGVyZXItPmNvbnRlbnRCb3goKSA6IHJlbmRlcmVyLT5ib3JkZXJCb3goKTsKKyAgICBpZiAo
IXJlbmRlcmVyLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIAorICAg
IFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocmVuZGVyZXIpOworICAg
IHJldHVybiBib3gtPnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm94LT5j
b250ZW50Qm94UmVjdCgpIDogYm94LT5ib3JkZXJCb3hSZWN0KCk7CiB9CiAKIHN0YXRpYyBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFRyYW5zZm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQpJbmRleDogV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVk
ZSAiTXV0YXRpb25FdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJl
bmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgpAQCAtNjkxLDEwICs2OTIsMTIgQEAgYm9vbCBDb250YWluZXJOb2RlOjpn
ZXRVcHBlckxlZnRDb3JuZXIoRgogICAgICAgICB9IGVsc2UgaWYgKChvLT5pc1RleHQoKSAmJiAh
by0+aXNCUigpKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsKICAgICAgICAgICAgIHBvaW50ID0gby0+
Y29udGFpbmVyKCktPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAgICAgICAgICAgaWYgKG8tPmlzVGV4
dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4obyktPmZpcnN0VGV4dEJveCgpKSB7Ci0g
ICAgICAgICAgICAgICAgcG9pbnQubW92ZShzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pLT5t
aW5YUG9zKCksCisgICAgICAgICAgICAgICAgcG9pbnQubW92ZShzdGF0aWNfY2FzdDxSZW5kZXJU
ZXh0ICo+KG8pLT5ib3VuZGluZ0JveFgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlclRleHQgKj4obyktPmZpcnN0VGV4dEJveCgpLT5yb290KCktPnRvcE92
ZXJmbG93KCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcG9pbnQubW92
ZShvLT54UG9zKCksIG8tPnlQb3MoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obyk7CisgICAg
ICAgICAgICAgICAgcG9pbnQubW92ZShib3gtPngoKSwgYm94LT55KCkpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC03MTcsOSAr
NzIwLDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcigKICAgICBS
ZW5kZXJPYmplY3QgKm8gPSByZW5kZXJlcigpOwogICAgIGlmICghby0+aXNJbmxpbmUoKSB8fCBv
LT5pc1JlcGxhY2VkKCkpCiAgICAgeworICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19j
YXN0PFJlbmRlckJveCo+KG8pOwogICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0ZSgp
OwotICAgICAgICBwb2ludC5tb3ZlKG8tPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgby0+
aGVpZ2h0KCkgKyBvLT5ib3JkZXJUb3BFeHRyYSgpICsgby0+Ym9yZGVyQm90dG9tRXh0cmEoKSk7
CisgICAgICAgIHBvaW50Lm1vdmUoYm94LT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgIGJv
eC0+aGVpZ2h0KCkgKyBib3gtPmJvcmRlclRvcEV4dHJhKCkgKyBib3gtPmJvcmRlckJvdHRvbUV4
dHJhKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc0MSwxMyArNzQ1LDEz
IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcigKICAgICAgICAgfQog
ICAgICAgICBpZiAoby0+aXNUZXh0KCkgfHwgby0+aXNSZXBsYWNlZCgpKSB7CiAgICAgICAgICAg
ICBwb2ludCA9IG8tPmNvbnRhaW5lcigpLT5sb2NhbFRvQWJzb2x1dGUoKTsKLSAgICAgICAgICAg
IGludCB4T2Zmc2V0OwotICAgICAgICAgICAgaWYgKG8tPmlzVGV4dCgpKQotICAgICAgICAgICAg
ICAgIHhPZmZzZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pLT5taW5YUG9zKCkgKyBv
LT53aWR0aCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHhPZmZzZXQgPSBv
LT54UG9zKCkgKyBvLT53aWR0aCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBwb2ludC5t
b3ZlKHhPZmZzZXQsIG8tPnlQb3MoKSArIG8tPmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChv
LT5pc1RleHQoKSkgeworICAgICAgICAgICAgICAgIFJlbmRlclRleHQqIHRleHQgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJUZXh0Kj4obyk7CisgICAgICAgICAgICAgICAgcG9pbnQubW92ZSh0ZXh0LT5i
b3VuZGluZ0JveFgoKSArIHRleHQtPmJvdW5kaW5nQm94V2lkdGgoKSwgdGV4dC0+Ym91bmRpbmdC
b3hIZWlnaHQoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFJlbmRl
ckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obyk7CisgICAgICAgICAgICAgICAg
cG9pbnQubW92ZShib3gtPngoKSArIGJveC0+d2lkdGgoKSwgYm94LT55KCkgKyBib3gtPmhlaWdo
dCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgfQpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBzdGF0aWMgaW50IGFk
anVzdEZvckFic29sdXRlWm9vbShpbnQgdmFsCiBpbnQgRWxlbWVudDo6b2Zmc2V0TGVmdCgpCiB7
CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRl
ckJveCogcmVuZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZXR1cm4gYWRqdXN0Rm9yTG9jYWxa
b29tKHJlbmQtPm9mZnNldExlZnQoKSwgcmVuZCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yODIs
NyArMjgyLDcgQEAgaW50IEVsZW1lbnQ6Om9mZnNldExlZnQoKQogaW50IEVsZW1lbnQ6Om9mZnNl
dFRvcCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisgICAg
aWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZXR1cm4gYWRqdXN0
Rm9yTG9jYWxab29tKHJlbmQtPm9mZnNldFRvcCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsKIH0K
QEAgLTI5MCw3ICsyOTAsNyBAQCBpbnQgRWxlbWVudDo6b2Zmc2V0VG9wKCkKIGludCBFbGVtZW50
OjpvZmZzZXRXaWR0aCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVy
KCkpCisgICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZXR1
cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29tKHJlbmQtPm9mZnNldFdpZHRoKCksIHJlbmQpOwogICAg
IHJldHVybiAwOwogfQpAQCAtMjk4LDcgKzI5OCw3IEBAIGludCBFbGVtZW50OjpvZmZzZXRXaWR0
aCgpCiBpbnQgRWxlbWVudDo6b2Zmc2V0SGVpZ2h0KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0
KiByZW5kID0gcmVuZGVyZXIoKSkKKyAgICBpZiAoUmVuZGVyQm94KiByZW5kID0gcmVuZGVyQm94
KCkpCiAgICAgICAgIHJldHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20ocmVuZC0+b2Zmc2V0SGVp
Z2h0KCksIHJlbmQpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzA2LDcgKzMwNiw3IEBAIGludCBF
bGVtZW50OjpvZmZzZXRIZWlnaHQoKQogRWxlbWVudCogRWxlbWVudDo6b2Zmc2V0UGFyZW50KCkK
IHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kID0gcmVuZGVyZXIoKSkKKyAgICBpZiAoUmVu
ZGVyQm94KiByZW5kID0gcmVuZGVyQm94KCkpCiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIG9m
ZnNldFBhcmVudCA9IHJlbmQtPm9mZnNldFBhcmVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihvZmZzZXRQYXJlbnQtPmVsZW1lbnQoKSk7CiAgICAgcmV0dXJu
IDA7CkBAIC0zMTYsNyArMzE2LDcgQEAgaW50IEVsZW1lbnQ6OmNsaWVudExlZnQoKQogewogICAg
IGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0g
ICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlckJv
eCogcmVuZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZXR1cm4gYWRqdXN0Rm9yQWJzb2x1dGVa
b29tKHJlbmQtPmNsaWVudExlZnQoKSwgcmVuZCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zMjUs
NyArMzI1LDcgQEAgaW50IEVsZW1lbnQ6OmNsaWVudFRvcCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBpZiAoUmVuZGVy
T2JqZWN0KiByZW5kID0gcmVuZGVyZXIoKSkKKyAgICBpZiAoUmVuZGVyQm94KiByZW5kID0gcmVu
ZGVyQm94KCkpCiAgICAgICAgIHJldHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20ocmVuZC0+Y2xp
ZW50VG9wKCksIHJlbmQpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzQ0LDcgKzM0NCw3IEBAIGlu
dCBFbGVtZW50OjpjbGllbnRXaWR0aCgpCiAgICAgfQogICAgIAogCi0gICAgaWYgKFJlbmRlck9i
amVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRl
ckJveCgpKQogICAgICAgICByZXR1cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29tKHJlbmQtPmNsaWVu
dFdpZHRoKCksIHJlbmQpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzYzLDcgKzM2Myw3IEBAIGlu
dCBFbGVtZW50OjpjbGllbnRIZWlnaHQoKQogICAgICAgICAgICAgcmV0dXJuIHZpZXctPmxheW91
dEhlaWdodCgpOwogICAgIH0KICAgICAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kID0gcmVu
ZGVyZXIoKSkKKyAgICBpZiAoUmVuZGVyQm94KiByZW5kID0gcmVuZGVyQm94KCkpCiAgICAgICAg
IHJldHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20ocmVuZC0+Y2xpZW50SGVpZ2h0KCksIHJlbmQp
OwogICAgIHJldHVybiAwOwogfQpAQCAtMzcxLDcgKzM3MSw3IEBAIGludCBFbGVtZW50OjpjbGll
bnRIZWlnaHQoKQogaW50IEVsZW1lbnQ6OnNjcm9sbExlZnQoKQogewogICAgIGRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJP
YmplY3QqIHJlbmQgPSByZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5k
ZXJCb3goKSkKICAgICAgICAgcmV0dXJuIGFkanVzdEZvckFic29sdXRlWm9vbShyZW5kLT5zY3Jv
bGxMZWZ0KCksIHJlbmQpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzc5LDcgKzM3OSw3IEBAIGlu
dCBFbGVtZW50OjpzY3JvbGxMZWZ0KCkKIGludCBFbGVtZW50OjpzY3JvbGxUb3AoKQogewogICAg
IGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAg
IGlmIChSZW5kZXJPYmplY3QqIHJlbmQgPSByZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJCb3gq
IHJlbmQgPSByZW5kZXJCb3goKSkKICAgICAgICAgcmV0dXJuIGFkanVzdEZvckFic29sdXRlWm9v
bShyZW5kLT5zY3JvbGxUb3AoKSwgcmVuZCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zODcsMjEg
KzM4NywyMSBAQCBpbnQgRWxlbWVudDo6c2Nyb2xsVG9wKCkKIHZvaWQgRWxlbWVudDo6c2V0U2Ny
b2xsTGVmdChpbnQgbmV3TGVmdCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kID0gcmVu
ZGVyZXIoKSkKKyAgICBpZiAoUmVuZGVyQm94KiByZW5kID0gcmVuZGVyQm94KCkpCiAgICAgICAg
IHJlbmQtPnNldFNjcm9sbExlZnQoc3RhdGljX2Nhc3Q8aW50PihuZXdMZWZ0ICogcmVuZC0+c3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xsVG9w
KGludCBuZXdUb3ApCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkp
CisgICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZW5kLT5z
ZXRTY3JvbGxUb3Aoc3RhdGljX2Nhc3Q8aW50PihuZXdUb3AgKiByZW5kLT5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCkpKTsKIH0KIAogaW50IEVsZW1lbnQ6OnNjcm9sbFdpZHRoKCkKIHsKICAgICBk
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBp
ZiAoUmVuZGVyT2JqZWN0KiByZW5kID0gcmVuZGVyZXIoKSkKKyAgICBpZiAoUmVuZGVyQm94KiBy
ZW5kID0gcmVuZGVyQm94KCkpCiAgICAgICAgIHJldHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20o
cmVuZC0+c2Nyb2xsV2lkdGgoKSwgcmVuZCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC00MDksNyAr
NDA5LDcgQEAgaW50IEVsZW1lbnQ6OnNjcm9sbFdpZHRoKCkKIGludCBFbGVtZW50OjpzY3JvbGxI
ZWlnaHQoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmQgPSByZW5kZXJlcigpKQorICAg
IGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3goKSkKICAgICAgICAgcmV0dXJuIGFkanVz
dEZvckFic29sdXRlWm9vbShyZW5kLT5zY3JvbGxIZWlnaHQoKSwgcmVuZCk7CiAgICAgcmV0dXJu
IDA7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTc2LDE0ICs1NzYsMTcgQEAgYm9vbCBOb2RlOjpzaG91bGRVc2VJ
bnB1dE1ldGhvZCgpIGNvbnN0CiAgICAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAK
K1JlbmRlckJveCogTm9kZTo6cmVuZGVyQm94KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fcmVu
ZGVyZXIgfHwgbV9yZW5kZXJlci0+aXNCb3goKSk7CisgICAgcmV0dXJuIG1fcmVuZGVyZXIgJiYg
bV9yZW5kZXJlci0+aXNCb3goKSA/IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlckJveCogY29uc3Q+
KG1fcmVuZGVyZXIpIDogMDsKK30KKwogSW50UmVjdCBOb2RlOjpnZXRSZWN0KCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogYnJva2VuIHdpdGggdHJhbnNmb3JtcwotICAgIGlmIChyZW5kZXJlcigp
KSB7Ci0gICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29s
dXRlKCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KHJvdW5kZWRJbnRQb2ludChhYnNQb3MpLAot
ICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKHJlbmRlcmVyKCktPndpZHRoKCksIHJlbmRl
cmVyKCktPmhlaWdodCgpICsgcmVuZGVyZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKSArIHJlbmRlcmVy
KCktPmJvcmRlckJvdHRvbUV4dHJhKCkpKTsKLSAgICB9CisgICAgaWYgKHJlbmRlcmVyKCkpCisg
ICAgICAgIHJldHVybiByZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwogICAg
IHJldHVybiBJbnRSZWN0KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9k
b20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIFBsYXRmb3Jt
TW91c2VFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFF1YWxpZmllZE5h
bWU7CiBjbGFzcyBSZW5kZXJBcmVuYTsKK2NsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlck9i
amVjdDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3RyaW5nQnVpbGRlcjsKQEAgLTM3NCw2
ICszNzUsMTAgQEAgcHVibGljOgogICAgIFJlbmRlck9iamVjdCogcHJldmlvdXNSZW5kZXJlcigp
OwogICAgIHZvaWQgc2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRl
cmVyID0gcmVuZGVyZXI7IH0KICAgICAKKyAgICAvLyBVc2Ugd2l0aCBjYXV0aW9uLiBEb2VzIG5v
IHR5cGUgY2hlY2tpbmcuICBNb3N0bHkgYSBjb252ZW5pZW5jZSBtZXRob2QgZm9yIHNoYWRvdyBu
b2RlcyBvZiBmb3JtIGNvbnRyb2xzLCB3aGVyZSB3ZSBrbm93IGV4YWN0bHkKKyAgICAvLyB3aGF0
IGtpbmQgb2YgcmVuZGVyZXIgd2UgbWFkZS4KKyAgICBSZW5kZXJCb3gqIHJlbmRlckJveCgpIGNv
bnN0OworICAgIAogICAgIHZvaWQgY2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiBw
cmVmaXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGlzRGVzY2VuZGFudE9mKGNvbnN0IE5v
ZGUqKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IE5vZGUqKSBjb25zdDsKSW5kZXg6
IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3Np
dGlvbi5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcgQEAgc3RhdGljIGJvb2wgZW5kc09mTm9kZUFy
ZVZpc3VhbGx5RGlzdGluYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVGhl
cmUgaXMgYSBWaXNpYmxlUG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGlubGluZS1ibG9jayBjb250
YWluZXIuCi0gICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSAmJiBjYW5I
YXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG5vZGUpICYmIG5vZGUtPnJlbmRlcmVyKCktPmhlaWdodCgp
ICE9IDAgJiYgIW5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIo
KS0+aXNSZXBsYWNlZCgpICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcobm9kZSkgJiYgc3Rh
dGljX2Nhc3Q8UmVuZGVyQm94Kj4obm9kZS0+cmVuZGVyZXIoKSktPmhlaWdodCgpICE9IDAgJiYg
IW5vZGUtPmZpcnN0Q2hpbGQoKTsKIH0KIAogc3RhdGljIE5vZGUqIGVuY2xvc2luZ1Zpc3VhbEJv
dW5kYXJ5KE5vZGUqIG5vZGUpCkBAIC01MzYsOSArNTM2LDExIEBAIGJvb2wgUG9zaXRpb246Omhh
c1JlbmRlcmVkTm9uQW5vbnltb3VzRGUKIHsKICAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSByZW5k
ZXJlci0+bmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKCk7CiAgICAgZm9yIChSZW5kZXJPYmpl
Y3QgKm8gPSByZW5kZXJlci0+Zmlyc3RDaGlsZCgpOyBvICYmIG8gIT0gc3RvcDsgbyA9IG8tPm5l
eHRJblByZU9yZGVyKCkpCi0gICAgICAgIGlmIChvLT5lbGVtZW50KCkgJiYgby0+aGVpZ2h0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAorICAgICAgICBpZiAoby0+
ZWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoKG8tPmlzVGV4dCgpICYmIHN0YXRpY19jYXN0
PFJlbmRlclRleHQqPihvKS0+Ym91bmRpbmdCb3hIZWlnaHQoKSkgfHwKKyAgICAgICAgICAgICAg
ICAoby0+aXNCb3goKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihvKS0+aGVpZ2h0KCkpKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCkBAIC01NjksNyArNTcxLDcgQEAgYm9vbCBQb3NpdGlvbjo6aXNDYW5kaWRhdGUoKSBj
b25zdAogICAgICAgICByZXR1cm4gKG9mZnNldCgpID09IDAgfHwgb2Zmc2V0KCkgPT0gbWF4RGVl
cE9mZnNldChub2RlKCkpKSAmJiAhbm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpLT5wYXJlbnQo
KSk7CiAKICAgICBpZiAoIW5vZGUoKS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiByZW5kZXJlci0+
aXNCbG9ja0Zsb3coKSAmJiAhaGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhI
ZWlnaHQocmVuZGVyZXIpICYmCi0gICAgICAgKHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBub2RlKCkt
Pmhhc1RhZ05hbWUoYm9keVRhZykpKQorICAgICAgIChzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihy
ZW5kZXJlciktPmhlaWdodCgpIHx8IG5vZGUoKS0+aGFzVGFnTmFtZShib2R5VGFnKSkpCiAgICAg
ICAgIHJldHVybiBvZmZzZXQoKSA9PSAwICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkp
OwogICAgIAogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRl
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiUG9zaXRpb25JdGVyYXRv
ci5oIgogCiAjaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2lu
Y2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMTUxLDcgKzE1MSw3IEBAIGJvb2wgUG9zaXRpb25JdGVyYXRvcjo6
aXNDYW5kaWRhdGUoKSBjb24KICAgICAgICAgcmV0dXJuIChhdFN0YXJ0T2ZOb2RlKCkgfHwgYXRF
bmRPZk5vZGUoKSkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX3BhcmVudC0+
cGFyZW50KCkpOwogCiAgICAgaWYgKCFtX3BhcmVudC0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiBy
ZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiAhUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnlt
b3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSAmJgotICAgICAgIChyZW5kZXJlci0+
aGVpZ2h0KCkgfHwgbV9wYXJlbnQtPmhhc1RhZ05hbWUoYm9keVRhZykpKQorICAgICAgIChzdGF0
aWNfY2FzdDxSZW5kZXJCbG9jayo+KHJlbmRlcmVyKS0+aGVpZ2h0KCkgfHwgbV9wYXJlbnQtPmhh
c1RhZ05hbWUoYm9keVRhZykpKQogICAgICAgICByZXR1cm4gYXRTdGFydE9mTm9kZSgpICYmICFQ
b3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9wYXJlbnQpOwogICAgIAogICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAko
cmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiUmVtb3ZlTm9k
ZUNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCisjaW5jbHVkZSAiUmVu
ZGVyQmxvY2suaCIKICNpbmNsdWRlICJTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oIgogI2luY2x1
ZGUgIlNwbGl0RWxlbWVudENvbW1hbmQuaCIKICNpbmNsdWRlICJTcGxpdFRleHROb2RlQ29tbWFu
ZC5oIgpAQCAtNTkwLDcgKzU5MSw4IEBAIFBhc3NSZWZQdHI8Tm9kZT4gQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OmEKICAgICAKICAgICAvLyBhcHBlbmQgdGhlIHBsYWNlaG9sZGVyIHRvIG1ha2Ugc3Vy
ZSBpdCBmb2xsb3dzCiAgICAgLy8gYW55IHVucmVuZGVyZWQgYmxvY2tzCi0gICAgaWYgKHJlbmRl
cmVyLT5oZWlnaHQoKSA9PSAwIHx8IChyZW5kZXJlci0+aXNMaXN0SXRlbSgpICYmIHJlbmRlcmVy
LT5pc0VtcHR5KCkpKQorICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFJlbmRl
ckJsb2NrKj4ocmVuZGVyZXIpOworICAgIGlmIChibG9jay0+aGVpZ2h0KCkgPT0gMCB8fCAoYmxv
Y2stPmlzTGlzdEl0ZW0oKSAmJiBibG9jay0+aXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIGFw
cGVuZEJsb2NrUGxhY2Vob2xkZXIoY29udGFpbmVyKTsKIAogICAgIHJldHVybiAwOwpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNDAw
NzUpCisrKyBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAi
UmFuZ2UuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlQ29tbWFuZC5oIgotI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNv
bnRyb2xsZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzEsNyArNzEsMTEgQEAgc3Rh
dGljIGJvb2wgaXNEZWxldGFibGVFbGVtZW50KGNvbnN0IE5vZAogICAgIGNvbnN0IHVuc2lnbmVk
IG1pbmltdW1WaXNpYmxlQm9yZGVycyA9IDM7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT53aWR0
aCgpIDwgbWluaW11bVdpZHRoIHx8IHJlbmRlcmVyLT5oZWlnaHQoKSA8IG1pbmltdW1IZWlnaHQp
CisgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzQm94KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4o
cmVuZGVyZXIpOworICAgIGlmIChib3gtPndpZHRoKCkgPCBtaW5pbXVtV2lkdGggfHwgYm94LT5o
ZWlnaHQoKSA8IG1pbmltdW1IZWlnaHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChyZW5kZXJlci0+aXNUYWJsZSgpKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAK
ICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVk
ZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVk
ZSAiVGV4dEl0ZXJhdG9yLmgiCkBAIC0zNTcsNyArMzU4LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpyZW1vdmVOb2RlKAogICAgICAgICAvLyBtYWtlIHN1cmUgZW1wdHkgY2VsbCBo
YXMgc29tZSBoZWlnaHQKICAgICAgICAgdXBkYXRlTGF5b3V0KCk7CiAgICAgICAgIFJlbmRlck9i
amVjdCAqciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmIChyICYmIHItPmlzVGFibGVD
ZWxsKCkgJiYgci0+Y29udGVudEhlaWdodCgpIDw9IDApCisgICAgICAgIGlmIChyICYmIHItPmlz
VGFibGVDZWxsKCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4ociktPmNvbnRlbnRI
ZWlnaHQoKSA8PSAwKQogICAgICAgICAgICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihQb3NpdGlv
bihub2RlLDApKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShy
ZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDcxLDcgKzIwNzEsNyBAQCBib29sIEVkaXRvcjo6aW5zaWRlVmlzaWJsZUFyZWEo
Y29uc3QgSW50CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCByZWN0SW5QYWdl
Q29vcmRzID0gY29udGFpbmVyLT5nZXRPdmVyZmxvd0NsaXBSZWN0KDAsIDApOwotICAgIEludFJl
Y3QgcmVjdEluRnJhbWVDb29yZHMgPSBJbnRSZWN0KHJlbmRlcmVyLT54UG9zKCkgKiAtMSwgcmVu
ZGVyZXItPnlQb3MoKSAqIC0xLAorICAgIEludFJlY3QgcmVjdEluRnJhbWVDb29yZHMgPSBJbnRS
ZWN0KHJlbmRlcmVyLT54KCkgKiAtMSwgcmVuZGVyZXItPnkoKSAqIC0xLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVjdEluUGFnZUNvb3Jkcy53aWR0aCgpLCByZWN0SW5Q
YWdlQ29vcmRzLmhlaWdodCgpKTsKIAogICAgIHJldHVybiByZWN0SW5GcmFtZUNvb3Jkcy5jb250
YWlucyhwb2ludCk7CkBAIC0yMDk3LDcgKzIwOTcsNyBAQCBib29sIEVkaXRvcjo6aW5zaWRlVmlz
aWJsZUFyZWEoUmFuZ2UqIHJhCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCBy
ZWN0SW5QYWdlQ29vcmRzID0gY29udGFpbmVyLT5nZXRPdmVyZmxvd0NsaXBSZWN0KDAsIDApOwot
ICAgIEludFJlY3QgcmVjdEluRnJhbWVDb29yZHMgPSBJbnRSZWN0KHJlbmRlcmVyLT54UG9zKCkg
KiAtMSwgcmVuZGVyZXItPnlQb3MoKSAqIC0xLAorICAgIEludFJlY3QgcmVjdEluRnJhbWVDb29y
ZHMgPSBJbnRSZWN0KHJlbmRlcmVyLT54KCkgKiAtMSwgcmVuZGVyZXItPnkoKSAqIC0xLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdEluUGFnZUNvb3Jkcy53aWR0aCgp
LCByZWN0SW5QYWdlQ29vcmRzLmhlaWdodCgpKTsKICAgICBJbnRSZWN0IHJlc3VsdFJlY3QgPSBy
YW5nZS0+Ym91bmRpbmdCb3goKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsMTQgKzIyNSwxNCBAQCBzdGF0aWMgaW50IHZlcnRpY2Fs
U2Nyb2xsRGlzdGFuY2UoRnJhbWUqCiAgICAgaWYgKCFmb2N1c2VkTm9kZSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGZvY3VzZWROb2RlLT5yZW5kZXJl
cigpOwotICAgIGlmICghcmVuZGVyZXIpCisgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXIt
PmlzQm94KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiAwOwogICAg
IGlmICghKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMIHx8IHN0eWxlLT5vdmVyZmxvd1ko
KSA9PSBPQVVUTyB8fCByZW5kZXJlci0+aXNUZXh0QXJlYSgpKSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaW50IGhlaWdodCA9IHJlbmRlcmVyLT5jbGllbnRIZWlnaHQoKTsKKyAgICBpbnQgaGVp
Z2h0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocmVuZGVyZXIpLT5jbGllbnRIZWlnaHQoKTsK
ICAgICByZXR1cm4gbWF4KChoZWlnaHQgKyAxKSAvIDIsIGhlaWdodCAtIGNBbW91bnRUb0tlZXBX
aGVuUGFnaW5nKTsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZp
c2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNywxMyArMTA3LDE2IEBAIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6Omlz
S2V5Ym9hcmRGb2N1c2EKICAgICBpZiAoIWRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFuZGxl
cigpLT50YWJzVG9MaW5rcyhldmVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
ICghcmVuZGVyZXIoKSkKKyAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmlzQm94
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBCZWZvcmUgY2FsbGluZyBh
YnNvbHV0ZVJlY3RzLCBjaGVjayBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSByZW5kZXJl
cgogICAgIC8vIG9yIG9uZSBvZiB0aGUgY29udGludWF0aW9ucyBpcyBub24tZW1wdHksIHNpbmNl
IHRoaXMgaXMgYSBmYXN0ZXIgY2hlY2sgYW5kCiAgICAgLy8gYWxtb3N0IGFsd2F5cyByZXR1cm5z
IHRydWUuCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIHIgPSByZW5kZXJlcigpOyByOyByID0gci0+
dmlydHVhbENvbnRpbnVhdGlvbigpKQorICAgIFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8
UmVuZGVyQm94Kj4ocmVuZGVyZXIoKSk7CisgICAgaWYgKGJveC0+d2lkdGgoKSA+IDAgJiYgYm94
LT5oZWlnaHQoKSA+IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGZvciAoUmVuZGVyRmxv
dyogciA9IGJveC0+dmlydHVhbENvbnRpbnVhdGlvbigpOyByOyByID0gci0+Y29udGludWF0aW9u
KCkpCiAgICAgICAgIGlmIChyLT53aWR0aCgpID4gMCAmJiByLT5oZWlnaHQoKSA+IDApCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NSw4ICsxNTUsOCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50
Ojp3aWxsRHJhdyhjb25zdCBGCiB7CiAgICAgbV9pbWFnZUJ1ZmZlci0+Y2xlYXJJbWFnZSgpOwog
ICAgIAotICAgIGlmIChSZW5kZXJPYmplY3QqIHJvID0gcmVuZGVyZXIoKSkgewotICAgICAgICBG
bG9hdFJlY3QgZGVzdFJlY3QgPSByby0+Y29udGVudEJveCgpOworICAgIGlmIChSZW5kZXJCb3gq
IHJvID0gcmVuZGVyQm94KCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gcm8tPmNv
bnRlbnRCb3hSZWN0KCk7CiAgICAgICAgIEZsb2F0UmVjdCByID0gbWFwUmVjdChyZWN0LCBGbG9h
dFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSksIGRlc3RSZWN0KTsK
ICAgICAgICAgci5pbnRlcnNlY3QoZGVzdFJlY3QpOwogICAgICAgICBpZiAobV9kaXJ0eVJlY3Qu
Y29udGFpbnMocikpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5OSw3IEBAIGJvb2wgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6aXNGb2N1c2FibGUKIHsKICAgICBpZiAoZGlzYWJsZWQoKSB8fCAhcmVuZGVy
ZXIoKSB8fCAKICAgICAgICAgKHJlbmRlcmVyKCktPnN0eWxlKCkgJiYgcmVuZGVyZXIoKS0+c3R5
bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpIHx8IAotICAgICAgICByZW5kZXJlcigpLT53
aWR0aCgpID09IDAgfHwgcmVuZGVyZXIoKS0+aGVpZ2h0KCkgPT0gMCkKKyAgICAgICAgIXJlbmRl
cmVyKCktPmlzQm94KCkgfHwgc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocmVuZGVyZXIoKSktPndp
ZHRoKCkgPT0gMCB8fCBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihyZW5kZXJlcigpKS0+aGVpZ2h0
KCkgPT0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxMSw3ICszMTEsNyBAQCBpbnQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OndpZHRoKCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCktPndpZHRoKCk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmRlcmVyKCkpLT53aWR0aCgp
OwogfQogCiBpbnQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmhlaWdodCgpIGNvbnN0CkBAIC0zMjAs
NyArMzIwLDcgQEAgaW50IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpoZWlnaHQoKSBjb25zdAogICAg
ICAgICByZXR1cm4gMDsKICAgICAKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS0+aGVpZ2h0KCk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmRlcmVyKCkpLT5oZWlnaHQoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50
LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVu
dDo6d2lkdGgoYm9vbCBpZ25vcmVQCiAgICAgZWxzZQogICAgICAgICBkb2N1bWVudCgpLT51cGRh
dGVMYXlvdXQoKTsKIAotICAgIHJldHVybiByZW5kZXJlcigpID8gcmVuZGVyZXIoKS0+Y29udGVu
dFdpZHRoKCkgOiAwOworICAgIHJldHVybiByZW5kZXJCb3goKSA/IHJlbmRlckJveCgpLT5jb250
ZW50V2lkdGgoKSA6IDA7CiB9CiAKIGludCBIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQoYm9vbCBp
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMpIGNvbnN0CkBAIC0yNTAsNyArMjUwLDcgQEAgaW50IEhU
TUxJbWFnZUVsZW1lbnQ6OmhlaWdodChib29sIGlnbm9yZQogICAgIGVsc2UKICAgICAgICAgZG9j
dW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKLSAgICByZXR1cm4gcmVuZGVyZXIoKSA/IHJlbmRl
cmVyKCktPmNvbnRlbnRIZWlnaHQoKSA6IDA7CisgICAgcmV0dXJuIHJlbmRlckJveCgpID8gcmVu
ZGVyQm94KCktPmNvbnRlbnRIZWlnaHQoKSA6IDA7CiB9CiAKIGludCBIVE1MSW1hZ2VFbGVtZW50
OjpuYXR1cmFsV2lkdGgoKSBjb25zdApJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NjAsMTIgKzI3NjAsMTIg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaQogICAgIGlmICghbV9o
aWdobGlnaHRlZE5vZGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBtX2hpZ2hsaWdodGVkTm9kZS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJCb3gqIHJl
bmRlcmVyID0gbV9oaWdobGlnaHRlZE5vZGUtPnJlbmRlckJveCgpOwogICAgIEZyYW1lKiBjb250
YWluaW5nRnJhbWUgPSBtX2hpZ2hsaWdodGVkTm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAg
ICBpZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEludFJlY3QgY29udGVudEJveCA9IHJlbmRlcmVyLT5jb250ZW50Qm94KCk7CisgICAgSW50
UmVjdCBjb250ZW50Qm94ID0gcmVuZGVyZXItPmNvbnRlbnRCb3hSZWN0KCk7CiAKICAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIGFkZCBtZXRob2RzIHRvIFJlbmRlck9iamVjdCB0byBvYnRhaW4gdGhl
c2UgcmVjdHM/CiAgICAgSW50UmVjdCBwYWRkaW5nQm94KGNvbnRlbnRCb3gueCgpIC0gcmVuZGVy
ZXItPnBhZGRpbmdMZWZ0KCksIGNvbnRlbnRCb3gueSgpIC0gcmVuZGVyZXItPnBhZGRpbmdUb3Ao
KSwKSW5kZXg6IFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTc3LDEyICsxMTc3LDEyIEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWIKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gY2hlY2sgZm9yIG9uZS1kaW1lbnNpb25hbCBpbWFnZQotICAgICAgICBpZiAobV9yZW5kZXJl
ci0+aGVpZ2h0KCkgPD0gMSB8fCBtX3JlbmRlcmVyLT53aWR0aCgpIDw9IDEpCisgICAgICAgIFJl
bmRlckltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4obV9yZW5kZXJlcik7
CisgICAgICAgIGlmIChpbWFnZS0+aGVpZ2h0KCkgPD0gMSB8fCBpbWFnZS0+d2lkdGgoKSA8PSAx
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgICAgICAvLyBjaGVjayB3
aGV0aGVyIHJlbmRlcmVkIGltYWdlIHdhcyBzdHJldGNoZWQgZnJvbSBvbmUtZGltZW5zaW9uYWwg
ZmlsZSBpbWFnZQogICAgICAgICBpZiAoaXNOYXRpdmVJbWFnZSgpKSB7Ci0gICAgICAgICAgICBS
ZW5kZXJJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KG1fcmVuZGVyZXIp
OwogICAgICAgICAgICAgaWYgKGltYWdlLT5jYWNoZWRJbWFnZSgpKSB7CiAgICAgICAgICAgICAg
ICAgSW50U2l6ZSBpbWFnZVNpemUgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKGlt
YWdlLT52aWV3KCktPnpvb21GYWN0b3IoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdl
U2l6ZS5oZWlnaHQoKSA8PSAxIHx8IGltYWdlU2l6ZS53aWR0aCgpIDw9IDE7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg4LDEyICsyODgsMTIgQEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+
IEZyYW1lVmlldzo6Y3JlYXRlUwogICAgIC8vIFRyeSB0aGUgPGJvZHk+IGVsZW1lbnQgZmlyc3Qg
YXMgYSBzY3JvbGxiYXIgc291cmNlLgogICAgIEVsZW1lbnQqIGJvZHkgPSBkb2MtPmJvZHkoKTsK
ICAgICBpZiAoYm9keSAmJiBib2R5LT5yZW5kZXJlcigpICYmIGJvZHktPnJlbmRlcmVyKCktPnN0
eWxlKCktPmhhc1BzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTQ1JPTExCQVIpKQotICAgICAgICBy
ZXR1cm4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIodGhpcywgb3JpZW50
YXRpb24sIGJvZHktPnJlbmRlcmVyKCkpOworICAgICAgICByZXR1cm4gUmVuZGVyU2Nyb2xsYmFy
OjpjcmVhdGVDdXN0b21TY3JvbGxiYXIodGhpcywgb3JpZW50YXRpb24sIGJvZHktPnJlbmRlckJv
eCgpKTsKICAgICAKICAgICAvLyBJZiB0aGUgPGJvZHk+IGRpZG4ndCBoYXZlIGEgY3VzdG9tIHN0
eWxlLCB0aGVuIHRoZSByb290IGVsZW1lbnQgbWlnaHQuCiAgICAgRWxlbWVudCogZG9jRWxlbWVu
dCA9IGRvYy0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKGRvY0VsZW1lbnQgJiYgZG9jRWxl
bWVudC0+cmVuZGVyZXIoKSAmJiBkb2NFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNQ
c2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0NST0xMQkFSKSkKLSAgICAgICAgcmV0dXJuIFJlbmRl
clNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBkb2NF
bGVtZW50LT5yZW5kZXJlcigpKTsKKyAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3Jl
YXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBkb2NFbGVtZW50LT5yZW5kZXJC
b3goKSk7CiAgICAgICAgIAogICAgIC8vIElmIHdlIGhhdmUgYW4gb3duaW5nIGlmcmFtZS9mcmFt
ZSBlbGVtZW50LCB0aGVuIGl0IGNhbiBzZXQgdGhlIGN1c3RvbSBzY3JvbGxiYXIgYWxzby4KICAg
ICBSZW5kZXJQYXJ0KiBmcmFtZVJlbmRlcmVyID0gbV9mcmFtZS0+b3duZXJSZW5kZXJlcigpOwpA
QCAtMTA5NSw3ICsxMDk1LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZURhc2hib2FyZFJlZ2lv
bnMoKQogICAgIGlmICghZG9jdW1lbnQtPmhhc0Rhc2hib2FyZFJlZ2lvbnMoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIFZlY3RvcjxEYXNoYm9hcmRSZWdpb25WYWx1ZT4gbmV3UmVnaW9uczsKLSAg
ICBkb2N1bWVudC0+cmVuZGVyZXIoKS0+Y29sbGVjdERhc2hib2FyZFJlZ2lvbnMobmV3UmVnaW9u
cyk7CisgICAgZG9jdW1lbnQtPnJlbmRlckJveCgpLT5jb2xsZWN0RGFzaGJvYXJkUmVnaW9ucyhu
ZXdSZWdpb25zKTsKICAgICBpZiAobmV3UmVnaW9ucyA9PSBkb2N1bWVudC0+ZGFzaGJvYXJkUmVn
aW9ucygpKQogICAgICAgICByZXR1cm47CiAgICAgZG9jdW1lbnQtPnNldERhc2hib2FyZFJlZ2lv
bnMobmV3UmVnaW9ucyk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHN0YXRpYyBpbmxp
bmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEYKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAg
ICAgICAgIC8vIENvbnZlcnQgdGhlIFRyYW5zZm9ybU9wZXJhdGlvbnMgaW50byBtYXRyaWNlcwot
ICAgICAgICBJbnRTaXplIHNpemUgPSBhbmltLT5yZW5kZXJlcigpLT5ib3JkZXJCb3goKS5zaXpl
KCk7CisgICAgICAgIEludFNpemUgc2l6ZSA9IGFuaW0tPnJlbmRlcmVyKCktPmlzQm94KCkgPyBz
dGF0aWNfY2FzdDxSZW5kZXJCb3gqPihhbmltLT5yZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgp
LnNpemUoKSA6IEludFNpemUoKTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbVQ7
CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvVDsKICAgICAgICAgZnJvbS5hcHBseShz
aXplLCBmcm9tVCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNp
b24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIEludFJlY3QgSGl0VGVzdFJlc3VsdDo6aW1hZ2VS
ZWN0KCkgY29uc3QKIHsKICAgICBpZiAoIWltYWdlKCkpCiAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0gICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0
ZUNvbnRlbnRCb3goKTsKKyAgICByZXR1cm4gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlckJv
eCgpLT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKIH0KIAogS1VSTCBIaXRUZXN0UmVzdWx0OjphYnNv
bHV0ZUltYWdlVVJMKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNp
b24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIklubGluZUZsb3dCb3guaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgorI2luY2x1ZGUg
IlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKQEAgLTg0LDYgKzg1LDEyIEBAIHZvaWQgSW5saW5lQm94OjpzaG93VHJlZUZvclRo
aXMoKSBjb25zdAogfQogI2VuZGlmCiAKK1JlbmRlckJveCogSW5saW5lQm94OjpyZW5kZXJCb3go
KSBjb25zdAoreworICAgIEFTU0VSVChtX29iamVjdC0+aXNCb3goKSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFJlbmRlckJveCo+KG1fb2JqZWN0KTsKK30KKwogaW50IElubGluZUJveDo6Y2Fy
ZXRNaW5PZmZzZXQoKSBjb25zdCAKIHsgCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYXJldE1pbk9m
ZnNldCgpOyAKQEAgLTEyOSw4ICsxMzYsMTAgQEAgdm9pZCBJbmxpbmVCb3g6OmFkanVzdFBvc2l0
aW9uKGludCBkeCwgaQogewogICAgIG1feCArPSBkeDsKICAgICBtX3kgKz0gZHk7Ci0gICAgaWYg
KG1fb2JqZWN0LT5pc1JlcGxhY2VkKCkgfHwgbV9vYmplY3QtPmlzQlIoKSkKLSAgICAgICAgbV9v
YmplY3QtPnNldFBvcyhtX29iamVjdC0+eFBvcygpICsgZHgsIG1fb2JqZWN0LT55UG9zKCkgKyBk
eSk7CisgICAgaWYgKG1fb2JqZWN0LT5pc1JlcGxhY2VkKCkpIHsKKyAgICAgICAgUmVuZGVyQm94
KiBib3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihtX29iamVjdCk7CisgICAgICAgIGJveC0+
bW92ZShkeCwgZHkpOworICAgIH0KIH0KIAogdm9pZCBJbmxpbmVCb3g6OnBhaW50KFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lQm94LmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgSGl0VGVzdFJlc3VsdDsKK2NsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJvb3RJ
bmxpbmVCb3g7CiAKIHN0cnVjdCBIaXRUZXN0UmVxdWVzdDsKQEAgLTIzOSw2ICsyNDAsOSBAQCBw
dWJsaWM6CiAgICAgCiAgICAgYm9vbCB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgY29uc3QgeyByZXR1
cm4gb2JqZWN0KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmIG9iamVjdCgp
LT5zdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkgIT0gUEVfTk9ORTsgfQogICAgIAorICAgIC8vIFVz
ZSB3aXRoIGNhdXRpb24hIFRoZSB0eXBlIGlzIG5vdCBjaGVja2VkIQorICAgIFJlbmRlckJveCog
cmVuZGVyQm94KCkgY29uc3Q7CisKIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3QqIG1fb2JqZWN0
OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gNDAwNzUp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzI1LDcgKzMyNSw3IEBAIGludCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSG9yaXpvbnRh
bGwKICAgICAgICAgICAgICAgICAgICAgLy8gT3VyIG9mZnNldCB0aGF0IHdlIGNhY2hlIG5lZWRz
IHRvIGJlIGZyb20gdGhlIGVkZ2Ugb2YgdGhlIHJpZ2h0IGJvcmRlciBib3ggYW5kCiAgICAgICAg
ICAgICAgICAgICAgIC8vIG5vdCB0aGUgbGVmdCBib3JkZXIgYm94LiAgV2UgaGF2ZSB0byBzdWJ0
cmFjdCB8eHwgZnJvbSB0aGUgd2lkdGggb2YgdGhlIGJsb2NrCiAgICAgICAgICAgICAgICAgICAg
IC8vICh3aGljaCBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgcm9vdCBsaW5lIGJveCkuCi0gICAg
ICAgICAgICAgICAgICAgIGN1cnItPnNldFhQb3Mocm9vdCgpLT5vYmplY3QoKS0+d2lkdGgoKS14
KTsKKyAgICAgICAgICAgICAgICAgICAgY3Vyci0+c2V0WFBvcyhyb290KCktPmJsb2NrKCktPndp
ZHRoKCkteCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFRoZSBwb3NpdGlvbmVkIG9i
amVjdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSB3aWR0aC4KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChjdXJyLT5vYmplY3QoKS0+aXNJbmxpbmVGbG93KCkpIHsKQEAgLTM0MSw4ICszNDEs
OCBAQCBpbnQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0hvcml6b250YWxsCiAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCFjdXJyLT5vYmplY3QoKS0+aXNDb21wYWN0KCkgJiYgKCFjdXJyLT5vYmpl
Y3QoKS0+aXNMaXN0TWFya2VyKCkgfHwgc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdE1hcmtlcio+KGN1
cnItPm9iamVjdCgpKS0+aXNJbnNpZGUoKSkpIHsKICAgICAgICAgICAgICAgICB4ICs9IGN1cnIt
Pm9iamVjdCgpLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgICAgICAgICAgY3Vyci0+c2V0WFBvcyh4
KTsKLSAgICAgICAgICAgICAgICBsZWZ0UG9zaXRpb24gPSBtaW4oeCArIGN1cnItPm9iamVjdCgp
LT5vdmVyZmxvd0xlZnQoZmFsc2UpLCBsZWZ0UG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHJp
Z2h0UG9zaXRpb24gPSBtYXgoeCArIGN1cnItPm9iamVjdCgpLT5vdmVyZmxvd1dpZHRoKGZhbHNl
KSwgcmlnaHRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgbGVmdFBvc2l0aW9uID0gbWluKHgg
KyBjdXJyLT5yZW5kZXJCb3goKS0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSwgbGVmdFBvc2l0aW9uKTsK
KyAgICAgICAgICAgICAgICByaWdodFBvc2l0aW9uID0gbWF4KHggKyBjdXJyLT5yZW5kZXJCb3go
KS0+b3ZlcmZsb3dXaWR0aChmYWxzZSksIHJpZ2h0UG9zaXRpb24pOwogICAgICAgICAgICAgICAg
IHggKz0gY3Vyci0+d2lkdGgoKSArIGN1cnItPm9iamVjdCgpLT5tYXJnaW5SaWdodCgpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0zNTUsNyArMzU1LDcgQEAgaW50IElubGluZUZsb3dC
b3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbAogICAgIHJldHVybiB4OwogfQogCi12b2lkIElubGlu
ZUZsb3dCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzKGludCYgaGVpZ2h0T2ZCbG9jaykKK2ludCBJ
bmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQgaGVpZ2h0T2ZCbG9jaykKIHsK
ICAgICBpbnQgbWF4UG9zaXRpb25Ub3AgPSAwOwogICAgIGludCBtYXhQb3NpdGlvbkJvdHRvbSA9
IDA7CkBAIC0zODksNiArMzg5LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxp
Z25Cb3hlcwogICAgICAgICBzaHJpbmtCb3hlc1dpdGhOb1RleHRDaGlsZHJlbih0b3BQb3NpdGlv
biwgYm90dG9tUG9zaXRpb24pOwogICAgIAogICAgIGhlaWdodE9mQmxvY2sgKz0gbWF4SGVpZ2h0
OworICAgIAorICAgIHJldHVybiBoZWlnaHRPZkJsb2NrOwogfQogCiB2b2lkIElubGluZUZsb3dC
b3g6OmFkanVzdE1heEFzY2VudEFuZERlc2NlbnQoaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVz
Y2VudCwKQEAgLTUyMiw4ICs1MjQsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNW
ZXJ0aWNhbGx5CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjdXJyLT5vYmplY3Qo
KS0+aGFzUmVmbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgb3ZlcmZsb3dUb3AgPSBtaW4o
b3ZlcmZsb3dUb3AsIGN1cnItPm9iamVjdCgpLT5yZWZsZWN0aW9uQm94KCkueSgpKTsKLSAgICAg
ICAgICAgICAgICBvdmVyZmxvd0JvdHRvbSA9IG1heChvdmVyZmxvd0JvdHRvbSwgY3Vyci0+b2Jq
ZWN0KCktPnJlZmxlY3Rpb25Cb3goKS5ib3R0b20oKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZs
b3dUb3AgPSBtaW4ob3ZlcmZsb3dUb3AsIGN1cnItPnJlbmRlckJveCgpLT5yZWZsZWN0aW9uQm94
KCkueSgpKTsKKyAgICAgICAgICAgICAgICBvdmVyZmxvd0JvdHRvbSA9IG1heChvdmVyZmxvd0Jv
dHRvbSwgY3Vyci0+cmVuZGVyQm94KCktPnJlZmxlY3Rpb25Cb3goKS5ib3R0b20oKSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZUZsb3dCb3goKSkgewpA
QCAtNTM1LDggKzUzNyw4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc1ZlcnRpY2Fs
bHkKICAgICAgICAgfSBlbHNlIGlmICghY3Vyci0+b2JqZWN0KCktPmlzQlIoKSkgewogICAgICAg
ICAgICAgbmV3WSArPSBjdXJyLT5vYmplY3QoKS0+bWFyZ2luVG9wKCk7CiAgICAgICAgICAgICBu
ZXdIZWlnaHQgPSBjdXJyLT5oZWlnaHQoKSAtIChjdXJyLT5vYmplY3QoKS0+bWFyZ2luVG9wKCkg
KyBjdXJyLT5vYmplY3QoKS0+bWFyZ2luQm90dG9tKCkpOwotICAgICAgICAgICAgb3ZlcmZsb3dU
b3AgPSBjdXJyLT5vYmplY3QoKS0+b3ZlcmZsb3dUb3AoZmFsc2UpOwotICAgICAgICAgICAgb3Zl
cmZsb3dCb3R0b20gPSBjdXJyLT5vYmplY3QoKS0+b3ZlcmZsb3dIZWlnaHQoZmFsc2UpIC0gbmV3
SGVpZ2h0OworICAgICAgICAgICAgb3ZlcmZsb3dUb3AgPSBjdXJyLT5yZW5kZXJCb3goKS0+b3Zl
cmZsb3dUb3AoZmFsc2UpOworICAgICAgICAgICAgb3ZlcmZsb3dCb3R0b20gPSBjdXJyLT5yZW5k
ZXJCb3goKS0+b3ZlcmZsb3dIZWlnaHQoZmFsc2UpIC0gbmV3SGVpZ2h0OwogICAgICAgICB9CiAK
ICAgICAgICAgY3Vyci0+c2V0WVBvcyhuZXdZKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAgIGludCBn
ZXRGbG93U3BhY2luZ1dpZHRoKCk7CiAgICAgYm9vbCBvbkVuZENoYWluKFJlbmRlck9iamVjdCog
ZW5kT2JqZWN0KTsKICAgICB2aXJ0dWFsIGludCBwbGFjZUJveGVzSG9yaXpvbnRhbGx5KGludCB4
LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRT
cGFjaW5nKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGljYWxseUFsaWduQm94ZXMoaW50JiBoZWln
aHRPZkJsb2NrKTsKKyAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQgaGVp
Z2h0T2ZCbG9jayk7CiAgICAgdm9pZCBjb21wdXRlTG9naWNhbEJveEhlaWdodHMoaW50JiBtYXhQ
b3NpdGlvblRvcCwgaW50JiBtYXhQb3NpdGlvbkJvdHRvbSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQmIG1heEFzY2VudCwgaW50JiBtYXhEZXNjZW50LCBib29sIHN0cmlj
dE1vZGUpOwogICAgIHZvaWQgYWRqdXN0TWF4QXNjZW50QW5kRGVzY2VudChpbnQmIG1heEFzY2Vu
dCwgaW50JiBtYXhEZXNjZW50LApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwCShy
ZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDEwICs2NiwxMCBAQCB2b2lkIFJlbmRlckFwcGxldDo6Y3JlYXRl
V2lkZ2V0SWZOZWNlc3NhCiAgICAgLy8gSW4gb3JkZXIgdG8gd29yayBhcm91bmQgdGhpcyBwcm9i
bGVtIGFuZCBoYXZlIGEgY29ycmVjdCBzaXplIGZyb20gdGhlIHN0YXJ0LCB3ZSB3aWxsCiAgICAg
Ly8gdXNlIGZpeGVkIHdpZHRocy9oZWlnaHRzIGZyb20gdGhlIHN0eWxlIHN5c3RlbSB3aGVuIHdl
IGNhbiwgc2luY2UgdGhlIHdpZGdldCBtaWdodAogICAgIC8vIG5vdCBoYXZlIGFuIGFjY3VyYXRl
IG1fd2lkdGgvbV9oZWlnaHQuCi0gICAgaW50IHdpZHRoID0gc3R5bGUoKS0+d2lkdGgoKS5pc0Zp
eGVkKCkgPyBzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkgOiAKLSAgICAgICAgbV93aWR0aCAtIGJv
cmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0
KCk7Ci0gICAgaW50IGhlaWdodCA9IHN0eWxlKCktPmhlaWdodCgpLmlzRml4ZWQoKSA/IHN0eWxl
KCktPmhlaWdodCgpLnZhbHVlKCkgOgotICAgICAgICBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0g
Ym9yZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7CisgICAgaW50
IGNvbnRlbnRXaWR0aCA9IHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpID8gc3R5bGUoKS0+d2lk
dGgoKS52YWx1ZSgpIDogCisgICAgICAgIHdpZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJS
aWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpOworICAgIGludCBjb250ZW50
SGVpZ2h0ID0gc3R5bGUoKS0+aGVpZ2h0KCkuaXNGaXhlZCgpID8gc3R5bGUoKS0+aGVpZ2h0KCku
dmFsdWUoKSA6CisgICAgICAgIGhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20o
KSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKTsKICAgICBmb3IgKE5vZGUqIGNoaWxk
ID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUocGFyYW1UYWcpKSB7CiAgICAg
ICAgICAgICBIVE1MUGFyYW1FbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVu
dCo+KGNoaWxkKTsKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBSZW5kZXJBcHBsZXQ6OmNyZWF0ZVdp
ZGdldElmTmVjZXNzYQogCiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsK
ICAgICBBU1NFUlQoZnJhbWUpOwotICAgIHNldFdpZGdldChmcmFtZS0+bG9hZGVyKCktPmNyZWF0
ZUphdmFBcHBsZXRXaWRnZXQoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgZWxlbWVudCwgbV9hcmdz
KSk7CisgICAgc2V0V2lkZ2V0KGZyYW1lLT5sb2FkZXIoKS0+Y3JlYXRlSmF2YUFwcGxldFdpZGdl
dChJbnRTaXplKGNvbnRlbnRXaWR0aCwgY29udGVudEhlaWdodCksIGVsZW1lbnQsIG1fYXJncykp
OwogfQogCiB2b2lkIFJlbmRlckFwcGxldDo6bGF5b3V0KCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjIsMTAgKzQyMiwxMCBAQCBpbnQgUmVuZGVy
QmxvY2s6Om92ZXJmbG93SGVpZ2h0KGJvb2wgaW5jCiAgICAgICAgIGludCBzaGFkb3dIZWlnaHQg
PSAwOwogICAgICAgICBmb3IgKFNoYWRvd0RhdGEqIGJveFNoYWRvdyA9IHN0eWxlKCktPmJveFNo
YWRvdygpOyBib3hTaGFkb3c7IGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCkKICAgICAgICAg
ICAgIHNoYWRvd0hlaWdodCA9IG1heChib3hTaGFkb3ctPnkgKyBib3hTaGFkb3ctPmJsdXIsIHNo
YWRvd0hlaWdodCk7Ci0gICAgICAgIGludCBoZWlnaHQgPSBtX2hlaWdodCArIHNoYWRvd0hlaWdo
dDsKKyAgICAgICAgaW50IGluZmxhdGVkSGVpZ2h0ID0gaGVpZ2h0KCkgKyBzaGFkb3dIZWlnaHQ7
CiAgICAgICAgIGlmIChoYXNSZWZsZWN0aW9uKCkpCi0gICAgICAgICAgICBoZWlnaHQgPSBtYXgo
aGVpZ2h0LCByZWZsZWN0aW9uQm94KCkuYm90dG9tKCkpOwotICAgICAgICByZXR1cm4gaGVpZ2h0
OworICAgICAgICAgICAgaW5mbGF0ZWRIZWlnaHQgPSBtYXgoaW5mbGF0ZWRIZWlnaHQsIHJlZmxl
Y3Rpb25Cb3goKS5ib3R0b20oKSk7CisgICAgICAgIHJldHVybiBpbmZsYXRlZEhlaWdodDsKICAg
ICB9CiAgICAgcmV0dXJuIG1fb3ZlcmZsb3dIZWlnaHQ7CiB9CkBAIC00MzYsMTAgKzQzNiwxMCBA
QCBpbnQgUmVuZGVyQmxvY2s6Om92ZXJmbG93V2lkdGgoYm9vbCBpbmNsCiAgICAgICAgIGludCBz
aGFkb3dXaWR0aCA9IDA7CiAgICAgICAgIGZvciAoU2hhZG93RGF0YSogYm94U2hhZG93ID0gc3R5
bGUoKS0+Ym94U2hhZG93KCk7IGJveFNoYWRvdzsgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0
KQogICAgICAgICAgICAgc2hhZG93V2lkdGggPSBtYXgoYm94U2hhZG93LT54ICsgYm94U2hhZG93
LT5ibHVyLCBzaGFkb3dXaWR0aCk7Ci0gICAgICAgIGludCB3aWR0aCA9IG1fd2lkdGggKyBzaGFk
b3dXaWR0aDsKKyAgICAgICAgaW50IGluZmxhdGVkV2lkdGggPSB3aWR0aCgpICsgc2hhZG93V2lk
dGg7CiAgICAgICAgIGlmIChoYXNSZWZsZWN0aW9uKCkpCi0gICAgICAgICAgICB3aWR0aCA9IG1h
eCh3aWR0aCwgcmVmbGVjdGlvbkJveCgpLnJpZ2h0KCkpOwotICAgICAgICByZXR1cm4gd2lkdGg7
CisgICAgICAgICAgICBpbmZsYXRlZFdpZHRoID0gbWF4KGluZmxhdGVkV2lkdGgsIHJlZmxlY3Rp
b25Cb3goKS5yaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIGluZmxhdGVkV2lkdGg7CiAgICAgfQog
ICAgIHJldHVybiBtX292ZXJmbG93V2lkdGg7CiB9CkBAIC00NzUsNyArNDc1LDcgQEAgaW50IFJl
bmRlckJsb2NrOjpvdmVyZmxvd1RvcChib29sIGluY2x1ZAogSW50UmVjdCBSZW5kZXJCbG9jazo6
b3ZlcmZsb3dSZWN0KGJvb2wgaW5jbHVkZUludGVyaW9yKSBjb25zdAogewogICAgIGlmICghaW5j
bHVkZUludGVyaW9yICYmIGhhc092ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgIEludFJlY3QgYm94
ID0gYm9yZGVyQm94KCk7CisgICAgICAgIEludFJlY3QgYm94ID0gYm9yZGVyQm94UmVjdCgpOwog
ICAgICAgICBpbnQgc2hhZG93TGVmdCA9IDA7CiAgICAgICAgIGludCBzaGFkb3dSaWdodCA9IDA7
CiAgICAgICAgIGludCBzaGFkb3dUb3AgPSAwOwpAQCAtNTA4LDcgKzUwOCw3IEBAIEludFJlY3Qg
UmVuZGVyQmxvY2s6Om92ZXJmbG93UmVjdChib29sIGkKICAgICB9CiAKICAgICBpZiAoIWluY2x1
ZGVJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0dXJuIGJvcmRlckJv
eCgpOworICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogICAgIGludCBsID0gb3ZlcmZs
b3dMZWZ0KGluY2x1ZGVJbnRlcmlvcik7CiAgICAgaW50IHQgPSBtaW4ob3ZlcmZsb3dUb3AoaW5j
bHVkZUludGVyaW9yKSwgLWJvcmRlclRvcEV4dHJhKCkpOwogICAgIHJldHVybiBJbnRSZWN0KGws
IHQsIG92ZXJmbG93V2lkdGgoaW5jbHVkZUludGVyaW9yKSAtIGwsIG1heChvdmVyZmxvd0hlaWdo
dChpbmNsdWRlSW50ZXJpb3IpLCBoZWlnaHQoKSArIGJvcmRlckJvdHRvbUV4dHJhKCkpIC0gdCk7
CkBAIC01MjIsNyArNTIyLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNTZWxmQ29sbGFwc2luZ0Js
b2NrKAogICAgIC8vIChjKSBoYXZlIGJvcmRlci9wYWRkaW5nLAogICAgIC8vIChkKSBoYXZlIGEg
bWluLWhlaWdodAogICAgIC8vIChlKSBoYXZlIHNwZWNpZmllZCB0aGF0IG9uZSBvZiBvdXIgbWFy
Z2lucyBjYW4ndCBjb2xsYXBzZSB1c2luZyBhIENTUyBleHRlbnNpb24KLSAgICBpZiAobV9oZWln
aHQgPiAwIHx8CisgICAgaWYgKGhlaWdodCgpID4gMCB8fAogICAgICAgICBpc1RhYmxlKCkgfHwg
KGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCkpICE9IDAgfHwKICAgICAgICAgc3R5bGUoKS0+bWluSGVpZ2h0KCkuaXNQb3NpdGl2ZSgp
IHx8IAogICAgICAgICBzdHlsZSgpLT5tYXJnaW5Ub3BDb2xsYXBzZSgpID09IE1TRVBBUkFURSB8
fCBzdHlsZSgpLT5tYXJnaW5Cb3R0b21Db2xsYXBzZSgpID09IE1TRVBBUkFURSkKQEAgLTU3MCw4
ICs1NzAsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogICAgIC8vIEl0J3Mgc2FmZSB0
byBjaGVjayBmb3IgY29udHJvbCBjbGlwIGhlcmUsIHNpbmNlIGNvbnRyb2xzIGNhbiBuZXZlciBi
ZSB0YWJsZSBjZWxscy4KICAgICBpZiAoaGFzQ29udHJvbENsaXAoKSkgewogICAgICAgICAvLyBC
ZWNhdXNlIG9mIHRoZSBsaWdodHdlaWdodCBjbGlwLCB0aGVyZSBjYW4gbmV2ZXIgYmUgYW55IG92
ZXJmbG93IGZyb20gY2hpbGRyZW4uCi0gICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1fd2lkdGg7
Ci0gICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgbV9vdmVyZmxv
d1dpZHRoID0gd2lkdGgoKTsKKyAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IGhlaWdodCgpOwog
ICAgICAgICBtX292ZXJmbG93TGVmdCA9IDA7CiAgICAgICAgIG1fb3ZlcmZsb3dUb3AgPSAwOwog
ICAgIH0KQEAgLTU5NSwyNCArNTk1LDI1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
KGJvb2wgcmVsYXkKICAgICAgICAgb2xkT3V0bGluZUJveCA9IGFic29sdXRlT3V0bGluZUJvdW5k
cygpOwogICAgIH0KIAotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3
KCksIHRoaXMsIEludFNpemUoeFBvcygpLCB5UG9zKCkpLCBtX2hhc0NvbHVtbnMgfHwgaGFzVHJh
bnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIg
c3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgbV9oYXNDb2x1bW5z
IHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7CiAKLSAgICBpbnQgb2xkV2lk
dGggPSBtX3dpZHRoOworICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7CiAgICAgaW50IG9sZENv
bHVtbldpZHRoID0gZGVzaXJlZENvbHVtbldpZHRoKCk7CiAKICAgICBjYWxjV2lkdGgoKTsKICAg
ICBjYWxjQ29sdW1uV2lkdGgoKTsKIAotICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1fd2lkdGg7Cisg
ICAgbV9vdmVyZmxvd1dpZHRoID0gd2lkdGgoKTsKICAgICBtX292ZXJmbG93TGVmdCA9IDA7CiAK
LSAgICBpZiAob2xkV2lkdGggIT0gbV93aWR0aCB8fCBvbGRDb2x1bW5XaWR0aCAhPSBkZXNpcmVk
Q29sdW1uV2lkdGgoKSkKKyAgICBpZiAob2xkV2lkdGggIT0gd2lkdGgoKSB8fCBvbGRDb2x1bW5X
aWR0aCAhPSBkZXNpcmVkQ29sdW1uV2lkdGgoKSkKICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9
IHRydWU7CiAKICAgICBjbGVhckZsb2F0cygpOwogCi0gICAgaW50IHByZXZpb3VzSGVpZ2h0ID0g
bV9oZWlnaHQ7Ci0gICAgbV9oZWlnaHQgPSAwOworICAgIGludCBwcmV2aW91c0hlaWdodCA9IGhl
aWdodCgpOworICAgIHNldEhlaWdodCgwKTsKKwogICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSAwOwog
CiAgICAgLy8gV2UgdXNlIGZvdXIgdmFsdWVzLCBtYXhUb3BQb3MsIG1heFBvc05lZywgbWF4Qm90
dG9tUG9zLCBhbmQgbWF4Qm90dG9tTmVnLCB0byB0cmFjawpAQCAtNjU4LDI1ICs2NTksMjUgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogCiAgICAgLy8gRXhwYW5k
IG91ciBpbnRyaW5zaWMgaGVpZ2h0IHRvIGVuY29tcGFzcyBmbG9hdHMuCiAgICAgaW50IHRvQWRk
ID0gYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KCk7Ci0gICAgaWYgKGZsb2F0Qm90dG9tKCkgPiAobV9oZWlnaHQgLSB0b0FkZCkgJiYg
KGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgfHwgaXNGbG9hdGluZ09yUG9zaXRpb25lZCgp
IHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8CisgICAgaWYgKGZsb2F0Qm90dG9tKCkgPiAoaGVpZ2h0
KCkgLSB0b0FkZCkgJiYgKGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgfHwgaXNGbG9hdGlu
Z09yUG9zaXRpb25lZCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAocGFyZW50KCkgJiYgcGFyZW50KCktPmlzRmxleGlibGVCb3go
KSB8fCBtX2hhc0NvbHVtbnMpKSkKLSAgICAgICAgbV9oZWlnaHQgPSBmbG9hdEJvdHRvbSgpICsg
dG9BZGQ7CisgICAgICAgIHNldEhlaWdodChmbG9hdEJvdHRvbSgpICsgdG9BZGQpOwogICAgIAog
ICAgIC8vIE5vdyBsYXkgb3V0IG91ciBjb2x1bW5zIHdpdGhpbiB0aGlzIGludHJpbnNpYyBoZWln
aHQsIHNpbmNlIHRoZXkgY2FuIHNsaWdodGx5IGFmZmVjdCB0aGUgaW50cmluc2ljIGhlaWdodCBh
cwogICAgIC8vIHdlIGFkanVzdCBmb3IgY2xlYW4gY29sdW1uIGJyZWFrcy4KICAgICBpbnQgc2lu
Z2xlQ29sdW1uQm90dG9tID0gbGF5b3V0Q29sdW1ucygpOwogCiAgICAgLy8gQ2FsY3VsYXRlIG91
ciBuZXcgaGVpZ2h0LgotICAgIGludCBvbGRIZWlnaHQgPSBtX2hlaWdodDsKKyAgICBpbnQgb2xk
SGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgY2FsY0hlaWdodCgpOwotICAgIGlmIChvbGRIZWlnaHQg
IT0gbV9oZWlnaHQpIHsKLSAgICAgICAgaWYgKG9sZEhlaWdodCA+IG1faGVpZ2h0ICYmIG1heEZs
b2F0Qm90dG9tID4gbV9oZWlnaHQgJiYgIWNoaWxkcmVuSW5saW5lKCkpIHsKKyAgICBpZiAob2xk
SGVpZ2h0ICE9IGhlaWdodCgpKSB7CisgICAgICAgIGlmIChvbGRIZWlnaHQgPiBoZWlnaHQoKSAm
JiBtYXhGbG9hdEJvdHRvbSA+IGhlaWdodCgpICYmICFjaGlsZHJlbklubGluZSgpKSB7CiAgICAg
ICAgICAgICAvLyBPbmUgb2Ygb3VyIGNoaWxkcmVuJ3MgZmxvYXRzIG1heSBoYXZlIGJlY29tZSBh
biBvdmVyaGFuZ2luZyBmbG9hdCBmb3IgdXMuIFdlIG5lZWQgdG8gbG9vayBmb3IgaXQuCiAgICAg
ICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxk
LT5pc0Jsb2NrRmxvdygpICYmICFjaGlsZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PFJlbmRl
ckJsb2NrKj4oY2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmZsb2F0Qm90
dG9tKCkgKyBibG9jay0+eVBvcygpID4gbV9oZWlnaHQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBhZGRPdmVyaGFuZ2luZ0Zsb2F0cyhibG9jaywgLWJsb2NrLT54UG9zKCksIC1ibG9jay0+eVBv
cygpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+ZmxvYXRCb3R0b20o
KSArIGJsb2NrLT55KCkgPiBoZWlnaHQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE92
ZXJoYW5naW5nRmxvYXRzKGJsb2NrLCAtYmxvY2stPngoKSwgLWJsb2NrLT55KCksIGZhbHNlKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY4NCwyMCAr
Njg1LDE4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAg
ICAgbGF5b3V0Q29sdW1ucyhzaW5nbGVDb2x1bW5Cb3R0b20pOwogCiAgICAgICAgIC8vIElmIHRo
ZSBibG9jayBnb3QgZXhwYW5kZWQgaW4gc2l6ZSwgdGhlbiBpbmNyZWFzZSBvdXIgb3ZlcmZsb3do
ZWlnaHQgdG8gbWF0Y2guCi0gICAgICAgIGlmIChtX292ZXJmbG93SGVpZ2h0ID4gbV9oZWlnaHQp
CisgICAgICAgIGlmIChtX292ZXJmbG93SGVpZ2h0ID4gaGVpZ2h0KCkpCiAgICAgICAgICAgICBt
X292ZXJmbG93SGVpZ2h0IC09IHRvQWRkOwotICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA8
IG1faGVpZ2h0KQotICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1faGVpZ2h0OworICAg
ICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA8IGhlaWdodCgpKQorICAgICAgICAgICAgbV9vdmVy
Zmxvd0hlaWdodCA9IGhlaWdodCgpOwogICAgIH0KLSAgICBpZiAocHJldmlvdXNIZWlnaHQgIT0g
bV9oZWlnaHQpCisgICAgaWYgKHByZXZpb3VzSGVpZ2h0ICE9IGhlaWdodCgpKQogICAgICAgICBy
ZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKIAogICAgIC8vIFNvbWUgY2xhc3NlcyBvZiBvYmplY3Rz
IChmbG9hdHMgYW5kIGZpZWxkc2V0cyB3aXRoIG5vIHNwZWNpZmllZCBoZWlnaHRzIGFuZCB0YWJs
ZSBjZWxscykgZXhwYW5kIHRvIGVuY29tcGFzcwogICAgIC8vIG92ZXJoYW5naW5nIGZsb2F0cy4K
LSAgICBpZiAoaGFzT3ZlcmhhbmdpbmdGbG9hdHMoKSAmJiBleHBhbmRzVG9FbmNsb3NlT3Zlcmhh
bmdpbmdGbG9hdHMoKSkgewotICAgICAgICBtX2hlaWdodCA9IGZsb2F0Qm90dG9tKCk7Ci0gICAg
ICAgIG1faGVpZ2h0ICs9IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpOwotICAgIH0K
KyAgICBpZiAoaGFzT3ZlcmhhbmdpbmdGbG9hdHMoKSAmJiBleHBhbmRzVG9FbmNsb3NlT3Zlcmhh
bmdpbmdGbG9hdHMoKSkKKyAgICAgICAgc2V0SGVpZ2h0KGZsb2F0Qm90dG9tKCkgKyBib3JkZXJC
b3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSk7CiAKICAgICBpZiAoKGlzQ2VsbCB8fCBpc0lubGlu
ZSgpIHx8IGlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSB8fCBpc1Jvb3QoKSkgJiYgIWhhc092ZXJm
bG93Q2xpcCgpICYmICFoYXNDb250cm9sQ2xpcCgpKQogICAgICAgICBhZGRWaXN1YWxPdmVyZmxv
dyhmbG9hdFJlY3QoKSk7CkBAIC03MDcsMTUgKzcwNiwxNSBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgcG9zaXRpb25MaXN0TWFya2VyKCk7CiAKICAgICAv
LyBBbHdheXMgZW5zdXJlIG91ciBvdmVyZmxvdyB3aWR0aC9oZWlnaHQgYXJlIGF0IGxlYXN0IGFz
IGxhcmdlIGFzIG91ciB3aWR0aC9oZWlnaHQuCi0gICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1f
b3ZlcmZsb3dXaWR0aCwgbV93aWR0aCk7Ci0gICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292
ZXJmbG93SGVpZ2h0LCBtX2hlaWdodCk7CisgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3Zl
cmZsb3dXaWR0aCwgd2lkdGgoKSk7CisgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJm
bG93SGVpZ2h0LCBoZWlnaHQoKSk7CiAKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKSB7CiAg
ICAgICAgIGZvciAoU2hhZG93RGF0YSogYm94U2hhZG93ID0gc3R5bGUoKS0+Ym94U2hhZG93KCk7
IGJveFNoYWRvdzsgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KSB7CiAgICAgICAgICAgICBt
X292ZXJmbG93TGVmdCA9IG1pbihtX292ZXJmbG93TGVmdCwgYm94U2hhZG93LT54IC0gYm94U2hh
ZG93LT5ibHVyKTsKLSAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93
V2lkdGgsIG1fd2lkdGggKyBib3hTaGFkb3ctPnggKyBib3hTaGFkb3ctPmJsdXIpOworICAgICAg
ICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgd2lkdGgoKSArIGJv
eFNoYWRvdy0+eCArIGJveFNoYWRvdy0+Ymx1cik7CiAgICAgICAgICAgICBtX292ZXJmbG93VG9w
ID0gbWluKG1fb3ZlcmZsb3dUb3AsIGJveFNoYWRvdy0+eSAtIGJveFNoYWRvdy0+Ymx1cik7Ci0g
ICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIG1faGVp
Z2h0ICsgYm94U2hhZG93LT55ICsgYm94U2hhZG93LT5ibHVyKTsKKyAgICAgICAgICAgIG1fb3Zl
cmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgaGVpZ2h0KCkgKyBib3hTaGFkb3ct
PnkgKyBib3hTaGFkb3ctPmJsdXIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
aGFzUmVmbGVjdGlvbigpKSB7CkBAIC03NTIsNyArNzUxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgICAgICAgICAgcmVwYWludFJlY3Quc2V0WSh5KTsK
IAogICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyByZWN0IHRvIHNwaWxsIG91dCBvZiBv
dXIgb3ZlcmZsb3cgYm94LgotICAgICAgICAgICAgcmVwYWludFJlY3QuaW50ZXJzZWN0KEludFJl
Y3QoMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQpKTsKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0Lmlu
dGVyc2VjdChJbnRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHJlY3QgaXMgc3RpbGwgbm9uLWVtcHR5IGFmdGVyIGlu
dGVyc2VjdGluZyBmb3Igb3ZlcmZsb3cgYWJvdmUKQEAgLTc3NSw3ICs3NzQsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGp1c3RQb3NpdGlvbmVkQmxvY2soCiAgICAgfQogCiAgICAgaWYgKGNoaWxk
LT5oYXNTdGF0aWNZKCkpIHsKLSAgICAgICAgaW50IHkgPSBtX2hlaWdodDsKKyAgICAgICAgaW50
IHkgPSBoZWlnaHQoKTsKICAgICAgICAgaWYgKCFtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aFRv
cCgpKSB7CiAgICAgICAgICAgICBjaGlsZC0+Y2FsY1ZlcnRpY2FsTWFyZ2lucygpOwogICAgICAg
ICAgICAgaW50IG1hcmdpblRvcCA9IGNoaWxkLT5tYXJnaW5Ub3AoKTsKQEAgLTgxMCwxNSArODA5
LDE1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZsb2F0aW5nQmxvY2soY28KICAgICAvLyBo
dHRwOi8vd3d3LmhpeGllLmNoL3Rlc3RzL2FkaG9jL2Nzcy9ib3gvYmxvY2svbWFyZ2luLWNvbGxh
cHNlLzA0Ni5odG1sIGZvcgogICAgIC8vIGFuIGV4YW1wbGUgb2YgdGhpcyBzY2VuYXJpby4KICAg
ICBpbnQgbWFyZ2luT2Zmc2V0ID0gbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhUb3AoKSA/IDAg
OiBtYXJnaW5JbmZvLm1hcmdpbigpOwotICAgIG1faGVpZ2h0ICs9IG1hcmdpbk9mZnNldDsKKyAg
ICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBtYXJnaW5PZmZzZXQpOwogICAgIHBvc2l0aW9uTmV3Rmxv
YXRzKCk7Ci0gICAgbV9oZWlnaHQgLT0gbWFyZ2luT2Zmc2V0OworICAgIHNldEhlaWdodChoZWln
aHQoKSAtIG1hcmdpbk9mZnNldCk7CiB9CiAKLVJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6Omhh
bmRsZVNwZWNpYWxDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBt
YXJnaW5JbmZvLCBDb21wYWN0SW5mbyYgY29tcGFjdEluZm8sIGJvb2wmIGhhbmRsZWQpCitSZW5k
ZXJCb3gqIFJlbmRlckJsb2NrOjpoYW5kbGVTcGVjaWFsQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwg
Y29uc3QgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgQ29tcGFjdEluZm8mIGNvbXBhY3RJbmZvLCBi
b29sJiBoYW5kbGVkKQogewogICAgIC8vIEhhbmRsZSBwb3NpdGlvbmVkIGNoaWxkcmVuIGZpcnN0
LgotICAgIFJlbmRlck9iamVjdCogbmV4dCA9IGhhbmRsZVBvc2l0aW9uZWRDaGlsZChjaGlsZCwg
bWFyZ2luSW5mbywgaGFuZGxlZCk7CisgICAgUmVuZGVyQm94KiBuZXh0ID0gaGFuZGxlUG9zaXRp
b25lZENoaWxkKGNoaWxkLCBtYXJnaW5JbmZvLCBoYW5kbGVkKTsKICAgICBpZiAoaGFuZGxlZCkg
cmV0dXJuIG5leHQ7CiAgICAgCiAgICAgLy8gSGFuZGxlIGZsb2F0aW5nIGNoaWxkcmVuIG5leHQu
CkBAIC04MzQsMzEgKzgzMywzMSBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckJsb2NrOjpoYW5kbGVT
cGVjaWFsCiB9CiAKIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJCbG9jazo6aGFuZGxlUG9zaXRpb25l
ZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8s
IGJvb2wmIGhhbmRsZWQpCitSZW5kZXJCb3gqIFJlbmRlckJsb2NrOjpoYW5kbGVQb3NpdGlvbmVk
Q2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgYm9v
bCYgaGFuZGxlZCkKIHsKICAgICBpZiAoY2hpbGQtPmlzUG9zaXRpb25lZCgpKSB7CiAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOwogICAgICAgICBjaGlsZC0+Y29udGFpbmluZ0Jsb2NrKCktPmluc2Vy
dFBvc2l0aW9uZWRPYmplY3QoY2hpbGQpOwogICAgICAgICBhZGp1c3RQb3NpdGlvbmVkQmxvY2so
Y2hpbGQsIG1hcmdpbkluZm8pOwotICAgICAgICByZXR1cm4gY2hpbGQtPm5leHRTaWJsaW5nKCk7
CisgICAgICAgIHJldHVybiBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gMDsKIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJCbG9jazo6aGFuZGxlRmxvYXRpbmdD
aGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBi
b29sJiBoYW5kbGVkKQorUmVuZGVyQm94KiBSZW5kZXJCbG9jazo6aGFuZGxlRmxvYXRpbmdDaGls
ZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBib29sJiBo
YW5kbGVkKQogewogICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZygpKSB7CiAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOwogICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdChjaGlsZCk7CiAgICAgICAg
IGFkanVzdEZsb2F0aW5nQmxvY2sobWFyZ2luSW5mbyk7Ci0gICAgICAgIHJldHVybiBjaGlsZC0+
bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkLT5uZXh0U2libGluZ0JveCgpOwog
ICAgIH0KICAgICAKICAgICByZXR1cm4gMDsKIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJCbG9j
azo6aGFuZGxlQ29tcGFjdENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIENvbXBhY3RJbmZvJiBj
b21wYWN0SW5mbywgYm9vbCYgaGFuZGxlZCkKK1JlbmRlckJveCogUmVuZGVyQmxvY2s6OmhhbmRs
ZUNvbXBhY3RDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBDb21wYWN0SW5mbyYgY29tcGFjdEluZm8s
IGJvb2wmIGhhbmRsZWQpCiB7CiAgICAgLy8gRklYTUU6IFdlIG9ubHkgZGVhbCB3aXRoIG9uZSBj
b21wYWN0IGF0IGEgdGltZS4gIEl0IGlzIHVuY2xlYXIgd2hhdCBzaG91bGQgYmUKICAgICAvLyBk
b25lIGlmIG11bHRpcGxlIGNvbnRpZ3VvdXMgY29tcGFjdHMgYXJlIGVuY291bnRlcmVkLiAgRm9y
IG5vdyB3ZSBhc3N1bWUgdGhhdApAQCAtODgxLDEyICs4ODAsMTIgQEAgUmVuZGVyT2JqZWN0KiBS
ZW5kZXJCbG9jazo6aGFuZGxlQ29tcGFjdAogICAgICAgICAgICAgICAgIC8vIFRoZSBjb21wYWN0
IHdpbGwgZml0IGluIHRoZSBtYXJnaW4uCiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgY29tcGFjdEluZm8uc2V0KGNoaWxkLCBjdXJyKTsKLSAgICAgICAg
ICAgICAgICBjaGlsZC0+c2V0UG9zKDAsMCk7IC8vIFRoaXMgcG9zaXRpb24gd2lsbCBiZSB1cGRh
dGVkIHRvIHJlZmxlY3QgdGhlIGNvbXBhY3QncworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlckJveCo+KGNoaWxkKS0+c2V0TG9jYXRpb24oSW50UG9pbnQoKSk7IC8vIFRoaXMgcG9z
aXRpb24gd2lsbCBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNvbXBhY3QncwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVzaXJlZCBwb3NpdGlvbiBhbmQgdGhlIGxp
bmUgYm94IGZvciB0aGUgY29tcGFjdCB3aWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBwaWNrIHRoYXQgcG9zaXRpb24gdXAuCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBjaGlsZC4KLSAgICAgICAgICAgICAgICBSZW5kZXJP
YmplY3QqIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBSZW5k
ZXJCb3gqIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgICAgICAgICBy
ZW1vdmVDaGlsZE5vZGUoY2hpbGQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IC8vIE5vdyBpbnNlcnQgdGhlIGNoaWxkIHVuZGVyIHxjdXJyfC4KQEAgLTkwMCwyNCArODk5LDI0
IEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OmhhbmRsZUNvbXBhY3QKICAgICByZXR1cm4g
MDsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0Q29tcGFjdElmTmVlZGVkKFJlbmRlck9i
amVjdCogY2hpbGQsIENvbXBhY3RJbmZvJiBjb21wYWN0SW5mbykKK3ZvaWQgUmVuZGVyQmxvY2s6
Omluc2VydENvbXBhY3RJZk5lZWRlZChSZW5kZXJCb3gqIGNoaWxkLCBDb21wYWN0SW5mbyYgY29t
cGFjdEluZm8pCiB7CiAgICAgaWYgKGNvbXBhY3RJbmZvLm1hdGNoZXMoY2hpbGQpKSB7CiAgICAg
ICAgIC8vIFdlIGhhdmUgYSBjb21wYWN0IGNoaWxkIHRvIHNxdWVlemUgaW4uCi0gICAgICAgIFJl
bmRlck9iamVjdCogY29tcGFjdENoaWxkID0gY29tcGFjdEluZm8uY29tcGFjdCgpOworICAgICAg
ICBSZW5kZXJCb3gqIGNvbXBhY3RDaGlsZCA9IGNvbXBhY3RJbmZvLmNvbXBhY3QoKTsKICAgICAg
ICAgaW50IGNvbXBhY3RYUG9zID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIGNvbXBh
Y3RDaGlsZC0+bWFyZ2luTGVmdCgpOwogICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkg
PT0gUlRMKSB7CiAgICAgICAgICAgICBjb21wYWN0Q2hpbGQtPmNhbGNXaWR0aCgpOyAvLyBoYXZl
IHRvIGRvIHRoaXMgYmVjYXVzZSBvZiB0aGUgY2FwcGVkIG1heHdpZHRoCiAgICAgICAgICAgICBj
b21wYWN0WFBvcyA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSBt
YXJnaW5SaWdodCgpIC0KICAgICAgICAgICAgICAgICBjb21wYWN0Q2hpbGQtPndpZHRoKCkgLSBj
b21wYWN0Q2hpbGQtPm1hcmdpblJpZ2h0KCk7CiAgICAgICAgIH0KLSAgICAgICAgY29tcGFjdFhQ
b3MgLT0gY2hpbGQtPnhQb3MoKTsgLy8gUHV0IGNvbXBhY3RYUG9zIGludG8gdGhlIGNoaWxkJ3Mg
Y29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgY29tcGFjdENoaWxkLT5zZXRQb3MoY29tcGFjdFhQ
b3MsIGNvbXBhY3RDaGlsZC0+eVBvcygpKTsgLy8gU2V0IHRoZSB4IHBvc2l0aW9uLgorICAgICAg
ICBjb21wYWN0WFBvcyAtPSBjaGlsZC0+eCgpOyAvLyBQdXQgY29tcGFjdFhQb3MgaW50byB0aGUg
Y2hpbGQncyBjb29yZGluYXRlIHNwYWNlLgorICAgICAgICBjb21wYWN0Q2hpbGQtPnNldExvY2F0
aW9uKGNvbXBhY3RYUG9zLCBjb21wYWN0Q2hpbGQtPnkoKSk7IC8vIFNldCB0aGUgeCBwb3NpdGlv
bi4KICAgICAgICAgY29tcGFjdEluZm8uY2xlYXIoKTsKICAgICB9CiB9CiAKLVJlbmRlck9iamVj
dCogUmVuZGVyQmxvY2s6OmhhbmRsZVJ1bkluQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgYm9v
bCYgaGFuZGxlZCkKK1JlbmRlckJveCogUmVuZGVyQmxvY2s6OmhhbmRsZVJ1bkluQ2hpbGQoUmVu
ZGVyQm94KiBjaGlsZCwgYm9vbCYgaGFuZGxlZCkKIHsKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBh
IHJ1bi1pbiBlbGVtZW50IHdpdGggaW5saW5lIGNoaWxkcmVuLiAgSWYgdGhlCiAgICAgLy8gY2hp
bGRyZW4gYXJlbid0IGlubGluZSwgdGhlbiBqdXN0IHRyZWF0IHRoZSBydW4taW4gYXMgYSBub3Jt
YWwKQEAgLTkzMiwxMCArOTMxLDEwIEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OmhhbmRs
ZVJ1bkluQ2gKICAgICAgICAgICAgIC8vIHBvc2l0aW9uLgogICAgICAgICAgICAgaGFuZGxlZCA9
IHRydWU7CiAgICAgICAgICAgICBjaGlsZC0+c2V0SW5saW5lKHRydWUpOwotICAgICAgICAgICAg
Y2hpbGQtPnNldFBvcygwLDApOworICAgICAgICAgICAgY2hpbGQtPnNldExvY2F0aW9uKDAsMCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgY2hpbGQuCi0gICAgICAg
ICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAg
ICAgIFJlbmRlckJveCogbmV4dCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpOwogICAgICAgICAg
ICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
Tm93IGluc2VydCB0aGUgY2hpbGQgdW5kZXIgfGN1cnJ8LgpAQCAtOTQ2LDcgKzk0NSw3IEBAIFJl
bmRlck9iamVjdCogUmVuZGVyQmxvY2s6OmhhbmRsZVJ1bkluQ2gKICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKFJlbmRlck9iamVjdCogY2hpbGQs
IE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIGludCB5UG9zRXN0aW1hdGUpCit2b2lkIFJlbmRlckJs
b2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2lu
SW5mbywgaW50IHlQb3NFc3RpbWF0ZSkKIHsKICAgICAvLyBHZXQgb3VyIG1heCBwb3MgYW5kIG5l
ZyB0b3AgbWFyZ2lucy4KICAgICBpbnQgcG9zVG9wID0gY2hpbGQtPm1heFRvcE1hcmdpbih0cnVl
KTsKQEAgLTk5MSw3ICs5OTAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMo
UmVuZGVyCiAgICAgaWYgKG1hcmdpbkluZm8ucXVpcmtDb250YWluZXIoKSAmJiBtYXJnaW5JbmZv
LmF0VG9wT2ZCbG9jaygpICYmIChwb3NUb3AgLSBuZWdUb3ApKQogICAgICAgICBtYXJnaW5JbmZv
LnNldFRvcFF1aXJrKHRvcFF1aXJrKTsKIAotICAgIGludCB5cG9zID0gbV9oZWlnaHQ7CisgICAg
aW50IHlwb3MgPSBoZWlnaHQoKTsKICAgICBpZiAoY2hpbGQtPmlzU2VsZkNvbGxhcHNpbmdCbG9j
aygpKSB7CiAgICAgICAgIC8vIFRoaXMgY2hpbGQgaGFzIG5vIGhlaWdodC4gIFdlIG5lZWQgdG8g
Y29tcHV0ZSBvdXIKICAgICAgICAgLy8gcG9zaXRpb24gYmVmb3JlIHdlIGNvbGxhcHNlIHRoZSBj
aGlsZCdzIG1hcmdpbnMgdG9nZXRoZXIsCkBAIC0xMDEwLDIwICsxMDA5LDIwIEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXIKICAgICAgICAgICAgIC8vIGlzIGNvcnJl
Y3QsIHNpbmNlIGl0IGNvdWxkIGhhdmUgb3ZlcmZsb3dpbmcgY29udGVudAogICAgICAgICAgICAg
Ly8gdGhhdCBuZWVkcyB0byBiZSBwb3NpdGlvbmVkIGNvcnJlY3RseSAoZS5nLiwgYSBibG9jayB0
aGF0CiAgICAgICAgICAgICAvLyBoYWQgYSBzcGVjaWZpZWQgaGVpZ2h0IG9mIDAgYnV0IHRoYXQg
YWN0dWFsbHkgaGFkIHN1YmNvbnRlbnQpLgotICAgICAgICAgICAgeXBvcyA9IG1faGVpZ2h0ICsg
Y29sbGFwc2VkVG9wUG9zIC0gY29sbGFwc2VkVG9wTmVnOworICAgICAgICAgICAgeXBvcyA9IGhl
aWdodCgpICsgY29sbGFwc2VkVG9wUG9zIC0gY29sbGFwc2VkVG9wTmVnOwogICAgIH0KICAgICBl
bHNlIHsKICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5Ub3BDb2xsYXBzZSgpID09
IE1TRVBBUkFURSkgewotICAgICAgICAgICAgbV9oZWlnaHQgKz0gbWFyZ2luSW5mby5tYXJnaW4o
KSArIGNoaWxkLT5tYXJnaW5Ub3AoKTsKLSAgICAgICAgICAgIHlwb3MgPSBtX2hlaWdodDsKKyAg
ICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIG1hcmdpbkluZm8ubWFyZ2luKCkgKyBjaGls
ZC0+bWFyZ2luVG9wKCkpOworICAgICAgICAgICAgeXBvcyA9IGhlaWdodCgpOwogICAgICAgICB9
CiAgICAgICAgIGVsc2UgaWYgKCFtYXJnaW5JbmZvLmF0VG9wT2ZCbG9jaygpIHx8CiAgICAgICAg
ICAgICAoIW1hcmdpbkluZm8uY2FuQ29sbGFwc2VUb3BXaXRoQ2hpbGRyZW4oKQogICAgICAgICAg
ICAgICYmICghc3R5bGUoKS0+aHRtbEhhY2tzKCkgfHwgIW1hcmdpbkluZm8ucXVpcmtDb250YWlu
ZXIoKSB8fCAhbWFyZ2luSW5mby50b3BRdWlyaygpKSkpIHsKICAgICAgICAgICAgIC8vIFdlJ3Jl
IGNvbGxhcHNpbmcgd2l0aCBhIHByZXZpb3VzIHNpYmxpbmcncyBtYXJnaW5zIGFuZCBub3QKICAg
ICAgICAgICAgIC8vIHdpdGggdGhlIHRvcCBvZiB0aGUgYmxvY2suCi0gICAgICAgICAgICBtX2hl
aWdodCArPSBtYXgobWFyZ2luSW5mby5wb3NNYXJnaW4oKSwgcG9zVG9wKSAtIG1heChtYXJnaW5J
bmZvLm5lZ01hcmdpbigpLCBuZWdUb3ApOwotICAgICAgICAgICAgeXBvcyA9IG1faGVpZ2h0Owor
ICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbWF4KG1hcmdpbkluZm8ucG9zTWFyZ2lu
KCksIHBvc1RvcCkgLSBtYXgobWFyZ2luSW5mby5uZWdNYXJnaW4oKSwgbmVnVG9wKSk7CisgICAg
ICAgICAgICB5cG9zID0gaGVpZ2h0KCk7CiAgICAgICAgIH0KIAogICAgICAgICBtYXJnaW5JbmZv
LnNldFBvc01hcmdpbihjaGlsZC0+bWF4Qm90dG9tTWFyZ2luKHRydWUpKTsKQEAgLTEwMzYsNyAr
MTAzNSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXIKICAgICB9
CiAKICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNpemUoMCwgeVBvc0VzdGltYXRlIC0g
eXBvcykpOwotICAgIGNoaWxkLT5zZXRQb3MoY2hpbGQtPnhQb3MoKSwgeXBvcyk7CisgICAgY2hp
bGQtPnNldExvY2F0aW9uKGNoaWxkLT54KCksIHlwb3MpOwogICAgIGlmICh5cG9zICE9IHlQb3NF
c3RpbWF0ZSkgewogICAgICAgICBpZiAoY2hpbGQtPnNocmlua1RvQXZvaWRGbG9hdHMoKSkKICAg
ICAgICAgICAgIC8vIFRoZSBjaGlsZCdzIHdpZHRoIGRlcGVuZHMgb24gdGhlIGxpbmUgd2lkdGgu
CkBAIC0xMDUzLDcgKzEwNTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMo
UmVuZGVyCiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0c0lmTmVlZGVk
KFJlbmRlck9iamVjdCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIGludCBvbGRUb3BQ
b3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJnaW4pCit2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZs
b2F0c0lmTmVlZGVkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIGlu
dCBvbGRUb3BQb3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJnaW4pCiB7CiAgICAgaW50IGhlaWdo
dEluY3JlYXNlID0gZ2V0Q2xlYXJEZWx0YShjaGlsZCk7CiAgICAgaWYgKCFoZWlnaHRJbmNyZWFz
ZSkKQEAgLTEwNjEsNyArMTA2MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzSWZO
ZWVkZWQoUmUKIAogICAgIC8vIFRoZSBjaGlsZCBuZWVkcyB0byBiZSBsb3dlcmVkLiAgTW92ZSB0
aGUgY2hpbGQgc28gdGhhdCBpdCBqdXN0IGNsZWFycyB0aGUgZmxvYXQuCiAgICAgdmlldygpLT5h
ZGRMYXlvdXREZWx0YShJbnRTaXplKDAsIC1oZWlnaHRJbmNyZWFzZSkpOwotICAgIGNoaWxkLT5z
ZXRQb3MoY2hpbGQtPnhQb3MoKSwgY2hpbGQtPnlQb3MoKSArIGhlaWdodEluY3JlYXNlKTsKKyAg
ICBjaGlsZC0+c2V0TG9jYXRpb24oY2hpbGQtPngoKSwgY2hpbGQtPnkoKSArIGhlaWdodEluY3Jl
YXNlKTsKIAogICAgIGlmIChjaGlsZC0+aXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCkpIHsKICAgICAg
ICAgLy8gRm9yIHNlbGYtY29sbGFwc2luZyBibG9ja3MgdGhhdCBjbGVhciwgdGhleSBjYW4gc3Rp
bGwgY29sbGFwc2UgdGhlaXIKQEAgLTEwNzEsNyArMTA3MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmNsZWFyRmxvYXRzSWZOZWVkZWQoUmUKICAgICAgICAgbWFyZ2luSW5mby5zZXROZWdNYXJnaW4o
bWF4KGNoaWxkLT5tYXhUb3BNYXJnaW4oZmFsc2UpLCBjaGlsZC0+bWF4Qm90dG9tTWFyZ2luKGZh
bHNlKSkpOwogICAgICAgICAKICAgICAgICAgLy8gQWRqdXN0IG91ciBoZWlnaHQgc3VjaCB0aGF0
IHdlIGFyZSByZWFkeSB0byBiZSBjb2xsYXBzZWQgd2l0aCBzdWJzZXF1ZW50IHNpYmxpbmdzLgot
ICAgICAgICBtX2hlaWdodCA9IGNoaWxkLT55UG9zKCkgLSBtYXgoMCwgbWFyZ2luSW5mby5tYXJn
aW4oKSk7CisgICAgICAgIHNldEhlaWdodChjaGlsZC0+eSgpIC0gbWF4KDAsIG1hcmdpbkluZm8u
bWFyZ2luKCkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFNldCBhIGZsYWcgdGhhdCB3ZSBjbGVh
cmVkIGEgZmxvYXQgc28gdGhhdCB3ZSBrbm93IGJvdGggdG8gaW5jcmVhc2UgdGhlIGhlaWdodCBv
ZiB0aGUgYmxvY2sKICAgICAgICAgLy8gdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGNsZWFyIGFuZCB0
byBhdm9pZCBjb2xsYXBzaW5nIG91ciBtYXJnaW5zIHdpdGggdGhlIHBhcmVudCBibG9jaydzCkBA
IC0xMDc5LDcgKzEwNzgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0c0lmTmVlZGVk
KFJlCiAgICAgICAgIG1hcmdpbkluZm8uc2V0U2VsZkNvbGxhcHNpbmdCbG9ja0NsZWFyZWRGbG9h
dCh0cnVlKTsKICAgICB9IGVsc2UKICAgICAgICAgLy8gSW5jcmVhc2Ugb3VyIGhlaWdodCBieSB0
aGUgYW1vdW50IHdlIGhhZCB0byBjbGVhci4KLSAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0SW5j
cmVhc2U7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGhlaWdodEluY3JlYXNlKTsKICAg
ICAKICAgICBpZiAobWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhUb3AoKSkgewogICAgICAgICAv
LyBXZSBjYW4gbm8gbG9uZ2VyIGNvbGxhcHNlIHdpdGggdGhlIHRvcCBvZiB0aGUgYmxvY2sgc2lu
Y2UgYSBjbGVhcgpAQCAtMTEwOSw3ICsxMTA4LDcgQEAgaW50IFJlbmRlckJsb2NrOjplc3RpbWF0
ZVZlcnRpY2FsUG9zaXRpbwogewogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGVsaW1pbmF0ZSB0
aGUgZXN0aW1hdGlvbiBvZiB2ZXJ0aWNhbCBwb3NpdGlvbiwgYmVjYXVzZSB3aGVuIGl0J3Mgd3Jv
bmcgd2Ugc29tZXRpbWVzIHRyaWdnZXIgYSBwYXRob2xvZ2ljYWwKICAgICAvLyByZWxheW91dCBp
ZiB0aGVyZSBhcmUgaW50cnVkaW5nIGZsb2F0cy4KLSAgICBpbnQgeVBvc0VzdGltYXRlID0gbV9o
ZWlnaHQ7CisgICAgaW50IHlQb3NFc3RpbWF0ZSA9IGhlaWdodCgpOwogICAgIGlmICghbWFyZ2lu
SW5mby5jYW5Db2xsYXBzZVdpdGhUb3AoKSkgewogICAgICAgICBpbnQgY2hpbGRNYXJnaW5Ub3Ag
PSBjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkgPyBjaGlsZC0+bWFyZ2luVG9wKCkgOiBjaGlsZC0+
Y29sbGFwc2VkTWFyZ2luVG9wKCk7CiAgICAgICAgIHlQb3NFc3RpbWF0ZSArPSBtYXgobWFyZ2lu
SW5mby5tYXJnaW4oKSwgY2hpbGRNYXJnaW5Ub3ApOwpAQCAtMTExNyw3ICsxMTE2LDcgQEAgaW50
IFJlbmRlckJsb2NrOjplc3RpbWF0ZVZlcnRpY2FsUG9zaXRpbwogICAgIHJldHVybiB5UG9zRXN0
aW1hdGU7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmRldGVybWluZUhvcml6b250YWxQb3NpdGlv
bihSZW5kZXJPYmplY3QqIGNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lSG9yaXpv
bnRhbFBvc2l0aW9uKFJlbmRlckJveCogY2hpbGQpCiB7CiAgICAgaWYgKHN0eWxlKCktPmRpcmVj
dGlvbigpID09IExUUikgewogICAgICAgICBpbnQgeFBvcyA9IGJvcmRlckxlZnQoKSArIHBhZGRp
bmdMZWZ0KCk7CkBAIC0xMTI4LDcgKzExMjcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpkZXRlcm1p
bmVIb3Jpem9udGFsUG9zCiAgICAgICAgIC8vIFNvbWUgb2JqZWN0cyAoZS5nLiwgdGFibGVzLCBo
b3Jpem9udGFsIHJ1bGVzLCBvdmVyZmxvdzphdXRvIGJsb2NrcykgYXZvaWQgZmxvYXRzLiAgVGhl
eSBuZWVkCiAgICAgICAgIC8vIHRvIHNoaWZ0IG92ZXIgYXMgbmVjZXNzYXJ5IHRvIGRvZGdlIGFu
eSBmbG9hdHMgdGhhdCBtaWdodCBnZXQgaW4gdGhlIHdheS4KICAgICAgICAgaWYgKGNoaWxkLT5h
dm9pZHNGbG9hdHMoKSkgewotICAgICAgICAgICAgaW50IGxlZnRPZmYgPSBsZWZ0T2Zmc2V0KG1f
aGVpZ2h0KTsKKyAgICAgICAgICAgIGludCBsZWZ0T2ZmID0gbGVmdE9mZnNldChoZWlnaHQoKSk7
CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+dGV4dEFsaWduKCkgIT0gV0VCS0lUX0NFTlRFUiAm
JiBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpLnR5cGUoKSAhPSBBdXRvKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkLT5tYXJnaW5MZWZ0KCkgPCAwKQogICAgICAgICAgICAgICAgICAg
ICBsZWZ0T2ZmICs9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7CkBAIC0xMTQwLDE3ICsxMTM5LDE3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmRldGVybWluZUhvcml6b250YWxQb3MKICAgICAgICAgICAgICAg
ICAvLyB3aWR0aCBjb21wdXRhdGlvbiB3aWxsIHRha2UgaW50byBhY2NvdW50IHRoZSBkZWx0YSBi
ZXR3ZWVuIHxsZWZ0T2ZmfCBhbmQgfHhQb3N8CiAgICAgICAgICAgICAgICAgLy8gc28gdGhhdCB3
ZSBjYW4ganVzdCBwYXNzIHRoZSBjb250ZW50IHdpZHRoIGluIGRpcmVjdGx5IHRvIHRoZSB8Y2Fs
Y0hvcml6b250YWxNYXJnaW5zfAogICAgICAgICAgICAgICAgIC8vIGZ1bmN0aW9uLgotICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KGNoaWxkKS0+Y2FsY0hvcml6b250YWxN
YXJnaW5zKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCksIGNoaWxkLT5zdHlsZSgpLT5tYXJn
aW5SaWdodCgpLCBsaW5lV2lkdGgoY2hpbGQtPnlQb3MoKSkpOworICAgICAgICAgICAgICAgIGNo
aWxkLT5jYWxjSG9yaXpvbnRhbE1hcmdpbnMoY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKSwg
Y2hpbGQtPnN0eWxlKCktPm1hcmdpblJpZ2h0KCksIGxpbmVXaWR0aChjaGlsZC0+eSgpKSk7CiAg
ICAgICAgICAgICAgICAgY2hQb3MgPSBsZWZ0T2ZmICsgY2hpbGQtPm1hcmdpbkxlZnQoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKElu
dFNpemUoY2hpbGQtPnhQb3MoKSAtIGNoUG9zLCAwKSk7Ci0gICAgICAgIGNoaWxkLT5zZXRQb3Mo
Y2hQb3MsIGNoaWxkLT55UG9zKCkpOworICAgICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKElu
dFNpemUoY2hpbGQtPngoKSAtIGNoUG9zLCAwKSk7CisgICAgICAgIGNoaWxkLT5zZXRMb2NhdGlv
bihjaFBvcywgY2hpbGQtPnkoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHhQb3MgPSBt
X3dpZHRoIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdSaWdodCgpIC0gdmVydGljYWxTY3JvbGxi
YXJXaWR0aCgpOworICAgICAgICBpbnQgeFBvcyA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0g
cGFkZGluZ1JpZ2h0KCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAgICAgICAgIGludCBj
aFBvcyA9IHhQb3MgLSAoY2hpbGQtPndpZHRoKCkgKyBjaGlsZC0+bWFyZ2luUmlnaHQoKSk7CiAg
ICAgICAgIGlmIChjaGlsZC0+YXZvaWRzRmxvYXRzKCkpIHsKLSAgICAgICAgICAgIGludCByaWdo
dE9mZiA9IHJpZ2h0T2Zmc2V0KG1faGVpZ2h0KTsKKyAgICAgICAgICAgIGludCByaWdodE9mZiA9
IHJpZ2h0T2Zmc2V0KGhlaWdodCgpKTsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT50ZXh0QWxp
Z24oKSAhPSBXRUJLSVRfQ0VOVEVSICYmIGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpLnR5
cGUoKSAhPSBBdXRvKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5tYXJnaW5SaWdodCgp
IDwgMCkKICAgICAgICAgICAgICAgICAgICAgcmlnaHRPZmYgLT0gY2hpbGQtPm1hcmdpblJpZ2h0
KCk7CkBAIC0xMTYxLDEyICsxMTYwLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRldGVybWluZUhv
cml6b250YWxQb3MKICAgICAgICAgICAgICAgICAvLyB3aWR0aCBjb21wdXRhdGlvbiB3aWxsIHRh
a2UgaW50byBhY2NvdW50IHRoZSBkZWx0YSBiZXR3ZWVuIHxyaWdodE9mZnwgYW5kIHx4UG9zfAog
ICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGp1c3QgcGFzcyB0aGUgY29udGVudCB3
aWR0aCBpbiBkaXJlY3RseSB0byB0aGUgfGNhbGNIb3Jpem9udGFsTWFyZ2luc3wKICAgICAgICAg
ICAgICAgICAvLyBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJC
b3gqPihjaGlsZCktPmNhbGNIb3Jpem9udGFsTWFyZ2lucyhjaGlsZC0+c3R5bGUoKS0+bWFyZ2lu
TGVmdCgpLCBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKSwgbGluZVdpZHRoKGNoaWxkLT55
UG9zKCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjaGlsZCkt
PmNhbGNIb3Jpem9udGFsTWFyZ2lucyhjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpLCBjaGls
ZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKSwgbGluZVdpZHRoKGNoaWxkLT55KCkpKTsKICAgICAg
ICAgICAgICAgICBjaFBvcyA9IHJpZ2h0T2ZmIC0gY2hpbGQtPm1hcmdpblJpZ2h0KCkgLSBjaGls
ZC0+d2lkdGgoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB2aWV3KCktPmFk
ZExheW91dERlbHRhKEludFNpemUoY2hpbGQtPnhQb3MoKSAtIGNoUG9zLCAwKSk7Ci0gICAgICAg
IGNoaWxkLT5zZXRQb3MoY2hQb3MsIGNoaWxkLT55UG9zKCkpOworICAgICAgICB2aWV3KCktPmFk
ZExheW91dERlbHRhKEludFNpemUoY2hpbGQtPngoKSAtIGNoUG9zLCAwKSk7CisgICAgICAgIGNo
aWxkLT5zZXRMb2NhdGlvbihjaFBvcywgY2hpbGQtPnkoKSk7CiAgICAgfQogfQogCkBAIC0xMjA1
LDE3ICsxMjA0LDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmhhbmRsZUJvdHRvbU9mQmxvY2soaW4K
ICAgICAvLyBJZiB3ZSBjYW4ndCBjb2xsYXBzZSB3aXRoIGNoaWxkcmVuIHRoZW4gZ28gYWhlYWQg
YW5kIGFkZCBpbiB0aGUgYm90dG9tIG1hcmdpbi4KICAgICBpZiAoIW1hcmdpbkluZm8uY2FuQ29s
bGFwc2VXaXRoQm90dG9tKCkgJiYgIW1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoVG9wKCkKICAg
ICAgICAgJiYgKCFzdHlsZSgpLT5odG1sSGFja3MoKSB8fCAhbWFyZ2luSW5mby5xdWlya0NvbnRh
aW5lcigpIHx8ICFtYXJnaW5JbmZvLmJvdHRvbVF1aXJrKCkpKQotICAgICAgICBtX2hlaWdodCAr
PSBtYXJnaW5JbmZvLm1hcmdpbigpOworICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBtYXJn
aW5JbmZvLm1hcmdpbigpKTsKICAgICAgICAgCiAgICAgLy8gTm93IGFkZCBpbiBvdXIgYm90dG9t
IGJvcmRlci9wYWRkaW5nLgotICAgIG1faGVpZ2h0ICs9IGJvdHRvbTsKKyAgICBzZXRIZWlnaHQo
aGVpZ2h0KCkgKyBib3R0b20pOwogCiAgICAgLy8gTmVnYXRpdmUgbWFyZ2lucyBjYW4gY2F1c2Ug
b3VyIGhlaWdodCB0byBzaHJpbmsgYmVsb3cgb3VyIG1pbmltYWwgaGVpZ2h0IChib3JkZXIvcGFk
ZGluZykuCiAgICAgLy8gSWYgdGhpcyBoYXBwZW5zLCBlbnN1cmUgdGhhdCB0aGUgY29tcHV0ZWQg
aGVpZ2h0IGlzIGluY3JlYXNlZCB0byB0aGUgbWluaW1hbCBoZWlnaHQuCi0gICAgbV9oZWlnaHQg
PSBtYXgobV9oZWlnaHQsIHRvcCArIGJvdHRvbSk7CisgICAgc2V0SGVpZ2h0KG1heChoZWlnaHQo
KSwgdG9wICsgYm90dG9tKSk7CiAKICAgICAvLyBBbHdheXMgbWFrZSBzdXJlIG91ciBvdmVyZmxv
dyBoZWlnaHQgaXMgYXQgbGVhc3Qgb3VyIGhlaWdodC4KLSAgICBtX292ZXJmbG93SGVpZ2h0ID0g
bWF4KG1faGVpZ2h0LCBtX292ZXJmbG93SGVpZ2h0KTsKKyAgICBtX292ZXJmbG93SGVpZ2h0ID0g
bWF4KGhlaWdodCgpLCBtX292ZXJmbG93SGVpZ2h0KTsKIAogICAgIC8vIFVwZGF0ZSBvdXIgYm90
dG9tIGNvbGxhcHNlZCBtYXJnaW4gaW5mby4KICAgICBzZXRDb2xsYXBzZWRCb3R0b21NYXJnaW4o
bWFyZ2luSW5mbyk7CkBAIC0xMjQ0LDcgKzEyNDMsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRCbG9ja0NoaWxkcmVuKGJvCiAgICAgaW50IHRvcCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1Rv
cCgpOwogICAgIGludCBib3R0b20gPSBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSAr
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKIAotICAgIG1faGVpZ2h0ID0gbV9vdmVyZmxv
d0hlaWdodCA9IHRvcDsKKyAgICBtX292ZXJmbG93SGVpZ2h0ID0gdG9wOworICAgIHNldEhlaWdo
dChtX292ZXJmbG93SGVpZ2h0KTsKIAogICAgIC8vIFRoZSBtYXJnaW4gc3RydWN0IGNhY2hlcyBh
bGwgb3VyIGN1cnJlbnQgbWFyZ2luIGNvbGxhcHNpbmcgc3RhdGUuICBUaGUgY29tcGFjdCBzdHJ1
Y3QgY2FjaGVzIHN0YXRlIHdoZW4gd2UgZW5jb3VudGVyIGNvbXBhY3RzLAogICAgIE1hcmdpbklu
Zm8gbWFyZ2luSW5mbyh0aGlzLCB0b3AsIGJvdHRvbSk7CkBAIC0xMjU3LDEwICsxMjU3LDEwIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8KICAgICBpbnQgcHJldmlv
dXNGbG9hdEJvdHRvbSA9IDA7CiAgICAgbWF4RmxvYXRCb3R0b20gPSAwOwogCi0gICAgUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJCb3gqIGNoaWxkID0gZmly
c3RDaGlsZEJveCgpOwogICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICBpZiAobGVnZW5kID09
IGNoaWxkKSB7Ci0gICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAg
ICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOyAvLyBTa2lwIHRoZSBsZWdlbmQsIHNpbmNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gcG9z
aXRpb25lZCB1cCBpbiB0aGUgZmllbGRzZXQncyBib3JkZXIuCiAgICAgICAgIH0KIApAQCAtMTI4
MCw3ICsxMjgwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbihibwog
ICAgICAgICAvLyBIYW5kbGUgdGhlIGZvdXIgdHlwZXMgb2Ygc3BlY2lhbCBlbGVtZW50cyBmaXJz
dC4gIFRoZXNlIGluY2x1ZGUgcG9zaXRpb25lZCBjb250ZW50LCBmbG9hdGluZyBjb250ZW50LCBj
b21wYWN0cyBhbmQKICAgICAgICAgLy8gcnVuLWlucy4gIFdoZW4gd2UgZW5jb3VudGVyIHRoZXNl
IGZvdXIgdHlwZXMgb2Ygb2JqZWN0cywgd2UgZG9uJ3QgYWN0dWFsbHkgbGF5IHRoZW0gb3V0IGFz
IG5vcm1hbCBmbG93IGJsb2Nrcy4KICAgICAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAg
ICAgIFJlbmRlck9iamVjdCogbmV4dCA9IGhhbmRsZVNwZWNpYWxDaGlsZChjaGlsZCwgbWFyZ2lu
SW5mbywgY29tcGFjdEluZm8sIGhhbmRsZWQpOworICAgICAgICBSZW5kZXJCb3gqIG5leHQgPSBo
YW5kbGVTcGVjaWFsQ2hpbGQoY2hpbGQsIG1hcmdpbkluZm8sIGNvbXBhY3RJbmZvLCBoYW5kbGVk
KTsKICAgICAgICAgaWYgKGhhbmRsZWQpIHsKICAgICAgICAgICAgIGNoaWxkID0gbmV4dDsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTMwMSwxMyArMTMwMSwxMyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvCiAgICAgICAgIGludCB5UG9zRXN0aW1hdGUgPSBl
c3RpbWF0ZVZlcnRpY2FsUG9zaXRpb24oY2hpbGQsIG1hcmdpbkluZm8pOwogCiAgICAgICAgIC8v
IENhY2hlIG91ciBvbGQgcmVjdCBzbyB0aGF0IHdlIGNhbiBkaXJ0eSB0aGUgcHJvcGVyIHJlcGFp
bnQgcmVjdHMgaWYgdGhlIGNoaWxkIG1vdmVzLgotICAgICAgICBJbnRSZWN0IG9sZFJlY3QoY2hp
bGQtPnhQb3MoKSwgY2hpbGQtPnlQb3MoKSAsIGNoaWxkLT53aWR0aCgpLCBjaGlsZC0+aGVpZ2h0
KCkpOworICAgICAgICBJbnRSZWN0IG9sZFJlY3QoY2hpbGQtPngoKSwgY2hpbGQtPnkoKSAsIGNo
aWxkLT53aWR0aCgpLCBjaGlsZC0+aGVpZ2h0KCkpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAg
SW50U2l6ZSBvbGRMYXlvdXREZWx0YSA9IHZpZXcoKS0+bGF5b3V0RGVsdGEoKTsKICNlbmRpZgog
ICAgICAgICAvLyBHbyBhaGVhZCBhbmQgcG9zaXRpb24gdGhlIGNoaWxkIGFzIHRob3VnaCBpdCBk
aWRuJ3QgY29sbGFwc2Ugd2l0aCB0aGUgdG9wLgotICAgICAgICB2aWV3KCktPmFkZExheW91dERl
bHRhKEludFNpemUoMCwgY2hpbGQtPnlQb3MoKSAtIHlQb3NFc3RpbWF0ZSkpOwotICAgICAgICBj
aGlsZC0+c2V0UG9zKGNoaWxkLT54UG9zKCksIHlQb3NFc3RpbWF0ZSk7CisgICAgICAgIHZpZXco
KS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZSgwLCBjaGlsZC0+eSgpIC0geVBvc0VzdGltYXRlKSk7
CisgICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+eCgpLCB5UG9zRXN0aW1hdGUpOwog
CiAgICAgICAgIGJvb2wgbWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0cyA9IGZhbHNlOwogICAgICAg
ICBpZiAoeVBvc0VzdGltYXRlICE9IG9sZFJlY3QueSgpICYmICFjaGlsZC0+YXZvaWRzRmxvYXRz
KCkgJiYgY2hpbGQtPmNvbnRhaW5zRmxvYXRzKCkpCkBAIC0xMzE2LDcgKzEzMTYsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvCiAgICAgICAgICAgICAvLyBJZiBh
biBlbGVtZW50IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBmbG9hdHMsIHRo
ZW4gYWx3YXlzIG1hcmsgaXQgZm9yCiAgICAgICAgICAgICAvLyBsYXlvdXQuCiAgICAgICAgICAg
ICBpbnQgZmIgPSBtYXgocHJldmlvdXNGbG9hdEJvdHRvbSwgZmxvYXRCb3R0b20oKSk7Ci0gICAg
ICAgICAgICBpZiAoZmIgPiBtX2hlaWdodCB8fCBmYiA+IHlQb3NFc3RpbWF0ZSkKKyAgICAgICAg
ICAgIGlmIChmYiA+IGhlaWdodCgpIHx8IGZiID4geVBvc0VzdGltYXRlKQogICAgICAgICAgICAg
ICAgIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSB0cnVlOwogICAgICAgICB9CiAKQEAgLTEz
NDcsMjUgKzEzNDcsMjUgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbihi
bwogICAgICAgICBkZXRlcm1pbmVIb3Jpem9udGFsUG9zaXRpb24oY2hpbGQpOwogCiAgICAgICAg
IC8vIFVwZGF0ZSBvdXIgaGVpZ2h0IG5vdyB0aGF0IHRoZSBjaGlsZCBoYXMgYmVlbiBwbGFjZWQg
aW4gdGhlIGNvcnJlY3QgcG9zaXRpb24uCi0gICAgICAgIG1faGVpZ2h0ICs9IGNoaWxkLT5oZWln
aHQoKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgY2hpbGQtPmhlaWdodCgpKTsKICAg
ICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5Cb3R0b21Db2xsYXBzZSgpID09IE1TRVBB
UkFURSkgewotICAgICAgICAgICAgbV9oZWlnaHQgKz0gY2hpbGQtPm1hcmdpbkJvdHRvbSgpOwor
ICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgY2hpbGQtPm1hcmdpbkJvdHRvbSgpKTsK
ICAgICAgICAgICAgIG1hcmdpbkluZm8uY2xlYXJNYXJnaW4oKTsKICAgICAgICAgfQogICAgICAg
ICAvLyBJZiB0aGUgY2hpbGQgaGFzIG92ZXJoYW5naW5nIGZsb2F0cyB0aGF0IGludHJ1ZGUgaW50
byBmb2xsb3dpbmcgc2libGluZ3MgKG9yIHBvc3NpYmx5IG91dAogICAgICAgICAvLyBvZiB0aGlz
IGJsb2NrKSwgdGhlbiB0aGUgcGFyZW50IGdldHMgbm90aWZpZWQgb2YgdGhlIGZsb2F0cyBub3cu
Ci0gICAgICAgIG1heEZsb2F0Qm90dG9tID0gbWF4KG1heEZsb2F0Qm90dG9tLCBhZGRPdmVyaGFu
Z2luZ0Zsb2F0cyhzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayAqPihjaGlsZCksIC1jaGlsZC0+eFBv
cygpLCAtY2hpbGQtPnlQb3MoKSwgIWNoaWxkTmVlZGVkTGF5b3V0KSk7CisgICAgICAgIG1heEZs
b2F0Qm90dG9tID0gbWF4KG1heEZsb2F0Qm90dG9tLCBhZGRPdmVyaGFuZ2luZ0Zsb2F0cyhzdGF0
aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKSwgLWNoaWxkLT54KCksIC1jaGlsZC0+eSgpLCAh
Y2hpbGROZWVkZWRMYXlvdXQpKTsKIAogICAgICAgICAvLyBVcGRhdGUgb3VyIG92ZXJmbG93IGlu
IGNhc2UgdGhlIGNoaWxkIHNwaWxscyBvdXQgdGhlIGJsb2NrLgotICAgICAgICBtX292ZXJmbG93
VG9wID0gbWluKG1fb3ZlcmZsb3dUb3AsIGNoaWxkLT55UG9zKCkgKyBjaGlsZC0+b3ZlcmZsb3dU
b3AoZmFsc2UpKTsKLSAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVp
Z2h0LCBtX2hlaWdodCArIGNoaWxkLT5vdmVyZmxvd0hlaWdodChmYWxzZSkgLSBjaGlsZC0+aGVp
Z2h0KCkpOwotICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgoY2hpbGQtPnhQb3MoKSArIGNo
aWxkLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSwgbV9vdmVyZmxvd1dpZHRoKTsKLSAgICAgICAgbV9v
dmVyZmxvd0xlZnQgPSBtaW4oY2hpbGQtPnhQb3MoKSArIGNoaWxkLT5vdmVyZmxvd0xlZnQoZmFs
c2UpLCBtX292ZXJmbG93TGVmdCk7CisgICAgICAgIG1fb3ZlcmZsb3dUb3AgPSBtaW4obV9vdmVy
Zmxvd1RvcCwgY2hpbGQtPnkoKSArIGNoaWxkLT5vdmVyZmxvd1RvcChmYWxzZSkpOworICAgICAg
ICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIGhlaWdodCgpICsgY2hp
bGQtPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSAtIGNoaWxkLT5oZWlnaHQoKSk7CisgICAgICAgIG1f
b3ZlcmZsb3dXaWR0aCA9IG1heChjaGlsZC0+eCgpICsgY2hpbGQtPm92ZXJmbG93V2lkdGgoZmFs
c2UpLCBtX292ZXJmbG93V2lkdGgpOworICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1pbihjaGls
ZC0+eCgpICsgY2hpbGQtPm92ZXJmbG93TGVmdChmYWxzZSksIG1fb3ZlcmZsb3dMZWZ0KTsKICAg
ICAgICAgCiAgICAgICAgIC8vIEluc2VydCBvdXIgY29tcGFjdCBpbnRvIHRoZSBibG9jayBtYXJn
aW4gaWYgd2UgaGF2ZSBvbmUuCiAgICAgICAgIGluc2VydENvbXBhY3RJZk5lZWRlZChjaGlsZCwg
Y29tcGFjdEluZm8pOwogCi0gICAgICAgIEludFNpemUgY2hpbGRPZmZzZXQoY2hpbGQtPnhQb3Mo
KSAtIG9sZFJlY3QueCgpLCBjaGlsZC0+eVBvcygpIC0gb2xkUmVjdC55KCkpOworICAgICAgICBJ
bnRTaXplIGNoaWxkT2Zmc2V0KGNoaWxkLT54KCkgLSBvbGRSZWN0LngoKSwgY2hpbGQtPnkoKSAt
IG9sZFJlY3QueSgpKTsKICAgICAgICAgaWYgKGNoaWxkT2Zmc2V0LndpZHRoKCkgfHwgY2hpbGRP
ZmZzZXQuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoY2hp
bGRPZmZzZXQpOwogCkBAIC0xMzgwLDcgKzEzODAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRCbG9ja0NoaWxkcmVuKGJvCiAgICAgICAgICAgICBjaGlsZC0+cmVwYWludCgpOwogCiAgICAg
ICAgIEFTU0VSVChvbGRMYXlvdXREZWx0YSA9PSB2aWV3KCktPmxheW91dERlbHRhKCkpOwotICAg
ICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAgICBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZ0JveCgpOwogICAgIH0KIAogICAgIC8vIE5vdyBkbyB0aGUgaGFuZGxpbmcg
b2YgdGhlIGJvdHRvbSBvZiB0aGUgYmxvY2ssIGFkZGluZyBpbiBvdXIgYm90dG9tIGJvcmRlci9w
YWRkaW5nIGFuZApAQCAtMTM5Myw3ICsxMzkzLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0
T25seVBvc2l0aW9uZWRPYgogICAgIGlmICghcG9zQ2hpbGROZWVkc0xheW91dCgpIHx8IG5vcm1h
bENoaWxkTmVlZHNMYXlvdXQoKSB8fCBzZWxmTmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwg
dGhpcywgSW50U2l6ZSh4UG9zKCksIHlQb3MoKSksIG1faGFzQ29sdW1ucyB8fCBoYXNUcmFuc2Zv
cm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0
ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBtX2hhc0NvbHVtbnMgfHwg
aGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKIAogICAgIGlmIChuZWVkc1Bvc2l0
aW9uZWRNb3ZlbWVudExheW91dCgpKSB7CiAgICAgICAgIHRyeUxheW91dERvaW5nUG9zaXRpb25l
ZE1vdmVtZW50T25seSgpOwpAQCAtMTQxNiw3ICsxNDE2LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6
bGF5b3V0T25seVBvc2l0aW9uZWRPYgogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25l
ZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuKQogewogICAgIGlmIChtX3Bvc2l0aW9uZWRP
YmplY3RzKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcjsKKyAgICAgICAgUmVuZGVyQm94KiBy
OwogICAgICAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAg
ICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgciA9ICppdDsKQEAgLTE0NDMsNyArMTQ0Myw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3QKIHZvaWQgUmVuZGVy
QmxvY2s6Om1hcmtQb3NpdGlvbmVkT2JqZWN0c0ZvckxheW91dCgpCiB7CiAgICAgaWYgKG1fcG9z
aXRpb25lZE9iamVjdHMpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByOworICAgICAgICBSZW5k
ZXJCb3gqIHI7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVu
ZCgpOwogICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICByID0gKml0OwpAQCAtMTQ3Miw3
ICsxNDcyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYQogICAg
ICAgICAgICAgLy8gT25seSByZXBhaW50IHRoZSBvYmplY3QgaWYgaXQgaXMgb3Zlcmhhbmdpbmcs
IGlzIG5vdCBpbiBpdHMgb3duIGxheWVyLCBhbmQKICAgICAgICAgICAgIC8vIGlzIG91ciByZXNw
b25zaWJpbGl0eSB0byBwYWludCAobV9zaG91bGRQYWludCBpcyBzZXQpLiBXaGVuIHBhaW50QWxs
RGVzY2VuZGFudHMgaXMgdHJ1ZSwgdGhlIGxhdHRlcgogICAgICAgICAgICAgLy8gY29uZGl0aW9u
IGlzIHJlcGxhY2VkIHdpdGggYmVpbmcgYSBkZXNjZW5kYW50IG9mIHVzLgotICAgICAgICAgICAg
aWYgKHItPm1fYm90dG9tID4gbV9oZWlnaHQgJiYgKHBhaW50QWxsRGVzY2VuZGFudHMgJiYgci0+
bV9yZW5kZXJlci0+aXNEZXNjZW5kYW50T2YodGhpcykgfHwgci0+bV9zaG91bGRQYWludCkgJiYg
IXItPm1fcmVuZGVyZXItPmhhc0xheWVyKCkpIHsgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoci0+bV9ib3R0b20gPiBoZWlnaHQoKSAmJiAocGFpbnRBbGxEZXNjZW5kYW50cyAmJiBy
LT5tX3JlbmRlcmVyLT5pc0Rlc2NlbmRhbnRPZih0aGlzKSB8fCByLT5tX3Nob3VsZFBhaW50KSAm
JiAhci0+bV9yZW5kZXJlci0+aGFzTGF5ZXIoKSkgeyAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICByLT5tX3JlbmRlcmVyLT5yZXBhaW50KCk7CiAgICAgICAgICAgICAgICAgci0+bV9y
ZW5kZXJlci0+cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKCk7CiAgICAgICAgICAgICB9CkBAIC0x
NDgzLDggKzE0ODMsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZXBhaW50T3ZlcmhhbmdpbmdGbG9h
CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSkKIHsKLSAgICB0eCArPSBtX3g7Ci0gICAgdHkgKz0gbV95OworICAgIHR4ICs9IHgo
KTsKKyAgICB0eSArPSBtX2ZyYW1lUmVjdC55KCk7CiAgICAgCiAgICAgUGFpbnRQaGFzZSBwaGFz
ZSA9IHBhaW50SW5mby5waGFzZTsKIApAQCAtMTYxOSwxMiArMTYxOSwxMiBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAgICAgaW5mby5wYWludGluZ1Jvb3QgPSBw
YWludGluZ1Jvb3RGb3JDaGlsZHJlbihwYWludEluZm8pOwogICAgIGJvb2wgaXNQcmludGluZyA9
IGRvY3VtZW50KCktPnByaW50aW5nKCk7CiAKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQg
PSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7ICAg
ICAgICAKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7ICAgICAgICAKICAgICAgICAgLy8g
Q2hlY2sgZm9yIHBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMsIGFuZCBpZiBpdCdzIHNldCwgYnJl
YWsgYW5kIGJhaWwuCiAgICAgICAgIGlmIChpc1ByaW50aW5nICYmICFjaGlsZHJlbklubGluZSgp
ICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyAmJgotICAg
ICAgICAgICAgaW5Sb290QmxvY2tDb250ZXh0KCkgJiYgKHR5ICsgY2hpbGQtPnlQb3MoKSkgPiBw
YWludEluZm8ucmVjdC55KCkgJiYgCi0gICAgICAgICAgICAodHkgKyBjaGlsZC0+eVBvcygpKSA8
IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7Ci0gICAgICAgICAgICB2aWV3KCktPnNldEJlc3RU
cnVuY2F0ZWRBdCh0eSArIGNoaWxkLT55UG9zKCksIHRoaXMsIHRydWUpOworICAgICAgICAgICAg
aW5Sb290QmxvY2tDb250ZXh0KCkgJiYgKHR5ICsgY2hpbGQtPnkoKSkgPiBwYWludEluZm8ucmVj
dC55KCkgJiYgCisgICAgICAgICAgICAodHkgKyBjaGlsZC0+eSgpKSA8IHBhaW50SW5mby5yZWN0
LmJvdHRvbSgpKSB7CisgICAgICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSAr
IGNoaWxkLT55KCksIHRoaXMsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKQEAgLTE2MzMsOSArMTYzMyw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4o
UGFpbnRJbmYKIAogICAgICAgICAvLyBDaGVjayBmb3IgcGFnZS1icmVhay1hZnRlcjogYWx3YXlz
LCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgogICAgICAgICBpZiAoaXNQcmludGlu
ZyAmJiAhY2hpbGRyZW5JbmxpbmUoKSAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIo
KSA9PSBQQkFMV0FZUyAmJiAKLSAgICAgICAgICAgIGluUm9vdEJsb2NrQ29udGV4dCgpICYmICh0
eSArIGNoaWxkLT55UG9zKCkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFpbnRJbmZvLnJlY3QueSgp
ICYmIAotICAgICAgICAgICAgKHR5ICsgY2hpbGQtPnlQb3MoKSArIGNoaWxkLT5oZWlnaHQoKSkg
PCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgewotICAgICAgICAgICAgdmlldygpLT5zZXRCZXN0
VHJ1bmNhdGVkQXQodHkgKyBjaGlsZC0+eVBvcygpICsgY2hpbGQtPmhlaWdodCgpICsgbWF4KDAs
IGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5Cb3R0b20oKSksIHRoaXMsIHRydWUpOworICAgICAgICAg
ICAgaW5Sb290QmxvY2tDb250ZXh0KCkgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWln
aHQoKSkgPiBwYWludEluZm8ucmVjdC55KCkgJiYgCisgICAgICAgICAgICAodHkgKyBjaGlsZC0+
eSgpICsgY2hpbGQtPmhlaWdodCgpKSA8IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7CisgICAg
ICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIGNoaWxkLT55KCkgKyBjaGls
ZC0+aGVpZ2h0KCkgKyBtYXgoMCwgY2hpbGQtPmNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpKSwgdGhp
cywgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzEy
LDcgKzE3MTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8mCiAK
ICAgICAvLyA1LiBwYWludCBvdXRsaW5lLgogICAgIGlmICghaW5saW5lRmxvdyAmJiAocGFpbnRQ
aGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludFBoYXNlID09IFBhaW50UGhhc2VTZWxm
T3V0bGluZSkgJiYgaGFzT3V0bGluZSgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJ
QkxFKQotICAgICAgICBSZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4
dCwgdHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSwgc3R5bGUoKSk7CisgICAgICAgIFJlbmRlckJv
eDo6cGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHdpZHRoKCksIGhlaWdo
dCgpLCBzdHlsZSgpKTsKIAogICAgIC8vIDYuIHBhaW50IGNvbnRpbnVhdGlvbiBvdXRsaW5lcy4K
ICAgICBpZiAoIWlubGluZUZsb3cgJiYgKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUg
fHwgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcykpIHsKQEAgLTE3MjEsOCAr
MTcyMSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYKICAgICAg
ICAgICAgIGlmICghaW5saW5lRmxvdy0+aGFzTGF5ZXIoKSkKICAgICAgICAgICAgICAgICBjb250
YWluaW5nQmxvY2soKS0+YWRkQ29udGludWF0aW9uV2l0aE91dGxpbmUoaW5saW5lRmxvdyk7CiAg
ICAgICAgICAgICBlbHNlIGlmICghaW5saW5lRmxvdy0+Zmlyc3RMaW5lQm94KCkpCi0gICAgICAg
ICAgICAgICAgaW5saW5lRmxvdy0+cGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCB0eCAt
IHhQb3MoKSArIGlubGluZUZsb3ctPmNvbnRhaW5pbmdCbG9jaygpLT54UG9zKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geVBvcygpICsgaW5saW5lRmxv
dy0+Y29udGFpbmluZ0Jsb2NrKCktPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgaW5saW5lRmxv
dy0+cGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCB0eCAtIHgoKSArIGlubGluZUZsb3ct
PmNvbnRhaW5pbmdCbG9jaygpLT54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5IC0geSgpICsgaW5saW5lRmxvdy0+Y29udGFpbmluZ0Jsb2NrKCktPnkoKSk7
CiAgICAgICAgIH0KICAgICAgICAgcGFpbnRDb250aW51YXRpb25PdXRsaW5lcyhwYWludEluZm8s
IHR4LCB0eSk7CiAgICAgfQpAQCAtMTc0OCw4ICsxNzQ4LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6
cGFpbnRGbG9hdHMoUGFpbnRJbmZvJgogICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCAmJiAh
ci0+bV9yZW5kZXJlci0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgUGFpbnRJbmZvIGN1cnJl
bnRQYWludEluZm8ocGFpbnRJbmZvKTsKICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhh
c2UgPSBwcmVzZXJ2ZVBoYXNlID8gcGFpbnRJbmZvLnBoYXNlIDogUGFpbnRQaGFzZUJsb2NrQmFj
a2dyb3VuZDsKLSAgICAgICAgICAgIGludCBjdXJyZW50VFggPSB0eCArIHItPm1fbGVmdCAtIHIt
Pm1fcmVuZGVyZXItPnhQb3MoKSArIHItPm1fcmVuZGVyZXItPm1hcmdpbkxlZnQoKTsKLSAgICAg
ICAgICAgIGludCBjdXJyZW50VFkgPSB0eSArIHItPm1fdG9wIC0gci0+bV9yZW5kZXJlci0+eVBv
cygpICsgci0+bV9yZW5kZXJlci0+bWFyZ2luVG9wKCk7CisgICAgICAgICAgICBpbnQgY3VycmVu
dFRYID0gdHggKyByLT5tX2xlZnQgLSByLT5tX3JlbmRlcmVyLT54KCkgKyByLT5tX3JlbmRlcmVy
LT5tYXJnaW5MZWZ0KCk7CisgICAgICAgICAgICBpbnQgY3VycmVudFRZID0gdHkgKyByLT5tX3Rv
cCAtIHItPm1fcmVuZGVyZXItPnkoKSArIHItPm1fcmVuZGVyZXItPm1hcmdpblRvcCgpOwogICAg
ICAgICAgICAgci0+bV9yZW5kZXJlci0+cGFpbnQoY3VycmVudFBhaW50SW5mbywgY3VycmVudFRY
LCBjdXJyZW50VFkpOwogICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVBoYXNlKSB7CiAgICAgICAg
ICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFj
a2dyb3VuZHM7CkBAIC0xODI5LDggKzE4MjksOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENv
bnRpbnVhdGlvbk91dGxpCiAgICAgICAgIFJlbmRlckZsb3cqIGZsb3cgPSAqaXQ7CiAgICAgICAg
IFJlbmRlckJsb2NrKiBibG9jayA9IGZsb3ctPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICBm
b3IgKCA7IGJsb2NrICYmIGJsb2NrICE9IHRoaXM7IGJsb2NrID0gYmxvY2stPmNvbnRhaW5pbmdC
bG9jaygpKSB7Ci0gICAgICAgICAgICB0eCArPSBibG9jay0+eFBvcygpOwotICAgICAgICAgICAg
dHkgKz0gYmxvY2stPnlQb3MoKTsKKyAgICAgICAgICAgIHR4ICs9IGJsb2NrLT54KCk7CisgICAg
ICAgICAgICB0eSArPSBibG9jay0+eSgpOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChibG9j
ayk7ICAgCiAgICAgICAgIGZsb3ctPnBhaW50T3V0bGluZShpbmZvLmNvbnRleHQsIHR4LCB0eSk7
CkBAIC0xOTE5LDE1ICsxOTE5LDE1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9u
KFBhaW50SW4KICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNsaXBPdXRQb3NpdGlvbmVkT2JqZWN0
cyhjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyogcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0
eSwgTGlzdEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj4qIHBvc2l0aW9uZWRPYmplY3RzKQorc3RhdGlj
IHZvaWQgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvKiBwYWludEluZm8sIGludCB0eCwgaW50IHR5LCBMaXN0SGFzaFNldDxSZW5kZXJCb3gqPiog
cG9zaXRpb25lZE9iamVjdHMpCiB7CiAgICAgaWYgKCFwb3NpdGlvbmVkT2JqZWN0cykKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIExpc3RIYXNoU2V0PFJlbmRlck9iamVjdCo+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBwb3NpdGlvbmVkT2JqZWN0cy0+ZW5kKCk7Ci0gICAgZm9yIChMaXN0SGFz
aFNldDxSZW5kZXJPYmplY3QqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwb3NpdGlvbmVkT2JqZWN0
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogciA9
ICppdDsKLSAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5jbGlwT3V0KEludFJlY3QodHggKyBy
LT54UG9zKCksIHR5ICsgci0+eVBvcygpLCByLT53aWR0aCgpLCByLT5oZWlnaHQoKSkpOworICAg
IExpc3RIYXNoU2V0PFJlbmRlckJveCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwb3NpdGlvbmVk
T2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxSZW5kZXJCb3gqPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBwb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIFJlbmRlckJveCogciA9ICppdDsKKyAgICAgICAgcGFpbnRJbmZvLT5jb250
ZXh0LT5jbGlwT3V0KEludFJlY3QodHggKyByLT54KCksIHR5ICsgci0+eSgpLCByLT53aWR0aCgp
LCByLT5oZWlnaHQoKSkpOwogICAgIH0KIH0KIApAQCAtMTk0MSw3ICsxOTQxLDcgQEAgR2FwUmVj
dHMgUmVuZGVyQmxvY2s6OmZpbGxTZWxlY3Rpb25HYXBzKAogICAgICAgICBjbGlwT3V0UG9zaXRp
b25lZE9iamVjdHMocGFpbnRJbmZvLCB0eCwgdHksIG1fcG9zaXRpb25lZE9iamVjdHMpOwogICAg
ICAgICBpZiAoaXNCb2R5KCkgfHwgaXNSb290KCkpIC8vIFRoZSA8Ym9keT4gbXVzdCBtYWtlIHN1
cmUgdG8gZXhhbWluZSBpdHMgY29udGFpbmluZ0Jsb2NrJ3MgcG9zaXRpb25lZCBvYmplY3RzLgog
ICAgICAgICAgICAgZm9yIChSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsgY2Ig
JiYgIWNiLT5pc1JlbmRlclZpZXcoKTsgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCkpCi0gICAg
ICAgICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5mbywgY2ItPnhQb3Mo
KSwgY2ItPnlQb3MoKSwgY2ItPm1fcG9zaXRpb25lZE9iamVjdHMpOworICAgICAgICAgICAgICAg
IGNsaXBPdXRQb3NpdGlvbmVkT2JqZWN0cyhwYWludEluZm8sIGNiLT54KCksIGNiLT55KCksIGNi
LT5tX3Bvc2l0aW9uZWRPYmplY3RzKTsKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7
CiAgICAgICAgICAgICBmb3IgKERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmpl
Y3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7IGl0LmN1cnJlbnQoKTsgKytpdCkgewogICAgICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQuY3VycmVudCgpOwpAQCAtMjAzNSwxMCAr
MjAzNSwxMCBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6ZmlsbEJsb2NrU2VsZWN0aW9uCiAgICAg
R2FwUmVjdHMgcmVzdWx0OwogCiAgICAgLy8gR28gYWhlYWQgYW5kIGp1bXAgcmlnaHQgdG8gdGhl
IGZpcnN0IGJsb2NrIGNoaWxkIHRoYXQgY29udGFpbnMgc29tZSBzZWxlY3RlZCBvYmplY3RzLgot
ICAgIFJlbmRlck9iamVjdCogY3VycjsKLSAgICBmb3IgKGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1
cnIgJiYgY3Vyci0+c2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lOyBjdXJyID0gY3Vy
ci0+bmV4dFNpYmxpbmcoKSkgeyB9CisgICAgUmVuZGVyQm94KiBjdXJyOworICAgIGZvciAoY3Vy
ciA9IGZpcnN0Q2hpbGRCb3goKTsgY3VyciAmJiBjdXJyLT5zZWxlY3Rpb25TdGF0ZSgpID09IFNl
bGVjdGlvbk5vbmU7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZ0JveCgpKSB7IH0KIAotICAgIGZv
ciAoYm9vbCBzYXdTZWxlY3Rpb25FbmQgPSBmYWxzZTsgY3VyciAmJiAhc2F3U2VsZWN0aW9uRW5k
OyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoYm9vbCBzYXdTZWxlY3Rp
b25FbmQgPSBmYWxzZTsgY3VyciAmJiAhc2F3U2VsZWN0aW9uRW5kOyBjdXJyID0gY3Vyci0+bmV4
dFNpYmxpbmdCb3goKSkgewogICAgICAgICBTZWxlY3Rpb25TdGF0ZSBjaGlsZFN0YXRlID0gY3Vy
ci0+c2VsZWN0aW9uU3RhdGUoKTsKICAgICAgICAgaWYgKGNoaWxkU3RhdGUgPT0gU2VsZWN0aW9u
Qm90aCB8fCBjaGlsZFN0YXRlID09IFNlbGVjdGlvbkVuZCkKICAgICAgICAgICAgIHNhd1NlbGVj
dGlvbkVuZCA9IHRydWU7CkBAIC0yMDYxLDcgKzIwNjEsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9j
azo6ZmlsbEJsb2NrU2VsZWN0aW9uCiAgICAgICAgICAgICBpZiAoY2hpbGRTdGF0ZSA9PSBTZWxl
Y3Rpb25FbmQgfHwgY2hpbGRTdGF0ZSA9PSBTZWxlY3Rpb25JbnNpZGUpCiAgICAgICAgICAgICAg
ICAgLy8gRmlsbCB0aGUgZ2FwIGFib3ZlIHRoZSBvYmplY3QuCiAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuaXRlQ2VudGVyKGZpbGxWZXJ0aWNhbFNlbGVjdGlvbkdhcChsYXN0VG9wLCBsYXN0TGVm
dCwgbGFzdFJpZ2h0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5ICsgY3Vyci0+eVBvcygpLCByb290QmxvY2ssIGJsb2NrWCwg
YmxvY2tZLCBwYWludEluZm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5ICsgY3Vyci0+eSgpLCByb290QmxvY2ssIGJsb2Nr
WCwgYmxvY2tZLCBwYWludEluZm8pKTsKIAogICAgICAgICAgICAgLy8gT25seSBmaWxsIHNpZGUg
Z2FwcyBmb3Igb2JqZWN0cyB0aGF0IHBhaW50IHRoZWlyIG93biBzZWxlY3Rpb24gaWYgd2Uga25v
dyBmb3Igc3VyZSB0aGUgc2VsZWN0aW9uIGlzIGdvaW5nIHRvIGV4dGVuZCBhbGwgdGhlIHdheSAq
cGFzdCoKICAgICAgICAgICAgIC8vIG91ciBvYmplY3QuICBXZSBrbm93IHRoaXMgaWYgdGhlIHNl
bGVjdGlvbiBkaWQgbm90IGVuZCBpbnNpZGUgb3VyIG9iamVjdC4KQEAgLTIwNzMsMTkgKzIwNzMs
MTkgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxCbG9ja1NlbGVjdGlvbgogICAgICAgICAg
ICAgZ2V0SG9yaXpvbnRhbFNlbGVjdGlvbkdhcEluZm8oY2hpbGRTdGF0ZSwgbGVmdEdhcCwgcmln
aHRHYXApOwogCiAgICAgICAgICAgICBpZiAobGVmdEdhcCkKLSAgICAgICAgICAgICAgICByZXN1
bHQudW5pdGVMZWZ0KGZpbGxMZWZ0U2VsZWN0aW9uR2FwKHRoaXMsIGN1cnItPnhQb3MoKSwgY3Vy
ci0+eVBvcygpLCBjdXJyLT5oZWlnaHQoKSwgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHgs
IHR5LCBwYWludEluZm8pKTsKKyAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVMZWZ0KGZpbGxM
ZWZ0U2VsZWN0aW9uR2FwKHRoaXMsIGN1cnItPngoKSwgY3Vyci0+eSgpLCBjdXJyLT5oZWlnaHQo
KSwgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHgsIHR5LCBwYWludEluZm8pKTsKICAgICAg
ICAgICAgIGlmIChyaWdodEdhcCkKLSAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVSaWdodChm
aWxsUmlnaHRTZWxlY3Rpb25HYXAodGhpcywgY3Vyci0+eFBvcygpICsgY3Vyci0+d2lkdGgoKSwg
Y3Vyci0+eVBvcygpLCBjdXJyLT5oZWlnaHQoKSwgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwg
dHgsIHR5LCBwYWludEluZm8pKTsKKyAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVSaWdodChm
aWxsUmlnaHRTZWxlY3Rpb25HYXAodGhpcywgY3Vyci0+eCgpICsgY3Vyci0+d2lkdGgoKSwgY3Vy
ci0+eSgpLCBjdXJyLT5oZWlnaHQoKSwgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHgsIHR5
LCBwYWludEluZm8pKTsKIAogICAgICAgICAgICAgLy8gVXBkYXRlIGxhc3RUb3AgdG8gYmUganVz
dCB1bmRlcm5lYXRoIHRoZSBvYmplY3QuICBsYXN0TGVmdCBhbmQgbGFzdFJpZ2h0IGV4dGVuZCBh
cyBmYXIgYXMKICAgICAgICAgICAgIC8vIHRoZXkgY2FuIHdpdGhvdXQgYnVtcGluZyBpbnRvIGZs
b2F0aW5nIG9yIHBvc2l0aW9uZWQgb2JqZWN0cy4gIElkZWFsbHkgdGhleSB3aWxsIGdvIHJpZ2h0
IHVwCiAgICAgICAgICAgICAvLyB0byB0aGUgYm9yZGVyIG9mIHRoZSByb290IHNlbGVjdGlvbiBi
bG9jay4KLSAgICAgICAgICAgIGxhc3RUb3AgPSAodHkgLSBibG9ja1kpICsgKGN1cnItPnlQb3Mo
KSArIGN1cnItPmhlaWdodCgpKTsKLSAgICAgICAgICAgIGxhc3RMZWZ0ID0gbGVmdFNlbGVjdGlv
bk9mZnNldChyb290QmxvY2ssIGN1cnItPnlQb3MoKSArIGN1cnItPmhlaWdodCgpKTsKLSAgICAg
ICAgICAgIGxhc3RSaWdodCA9IHJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+
eVBvcygpICsgY3Vyci0+aGVpZ2h0KCkpOworICAgICAgICAgICAgbGFzdFRvcCA9ICh0eSAtIGJs
b2NrWSkgKyAoY3Vyci0+eSgpICsgY3Vyci0+aGVpZ2h0KCkpOworICAgICAgICAgICAgbGFzdExl
ZnQgPSBsZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+eSgpICsgY3Vyci0+aGVp
Z2h0KCkpOworICAgICAgICAgICAgbGFzdFJpZ2h0ID0gcmlnaHRTZWxlY3Rpb25PZmZzZXQocm9v
dEJsb2NrLCBjdXJyLT55KCkgKyBjdXJyLT5oZWlnaHQoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
Y2hpbGRTdGF0ZSAhPSBTZWxlY3Rpb25Ob25lKQogICAgICAgICAgICAgLy8gV2UgbXVzdCBiZSBh
IGJsb2NrIHRoYXQgaGFzIHNvbWUgc2VsZWN0ZWQgb2JqZWN0IGluc2lkZSBpdC4gIEdvIGFoZWFk
IGFuZCByZWN1ci4KLSAgICAgICAgICAgIHJlc3VsdC51bml0ZShzdGF0aWNfY2FzdDxSZW5kZXJC
bG9jayo+KGN1cnIpLT5maWxsU2VsZWN0aW9uR2Fwcyhyb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZ
LCB0eCArIGN1cnItPnhQb3MoKSwgdHkgKyBjdXJyLT55UG9zKCksIAorICAgICAgICAgICAgcmVz
dWx0LnVuaXRlKHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4oY3VyciktPmZpbGxTZWxlY3Rpb25H
YXBzKHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHR4ICsgY3Vyci0+eCgpLCB0eSArIGN1cnIt
PnkoKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwg
cGFpbnRJbmZvKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMTY1LDE5ICsyMTY1
LDE5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmdldEhvcml6b250YWxTZWxlY3Rpb24KICAgICAgICAg
ICAgICAgIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCAmJiAhbHRyKTsKIH0K
IAotaW50IFJlbmRlckJsb2NrOjpsZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290
QmxvY2ssIGludCB5KQoraW50IFJlbmRlckJsb2NrOjpsZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbmRl
ckJsb2NrKiByb290QmxvY2ssIGludCB5UG9zKQogewotICAgIGludCBsZWZ0ID0gbGVmdE9mZnNl
dCh5KTsKKyAgICBpbnQgbGVmdCA9IGxlZnRPZmZzZXQoeVBvcyk7CiAgICAgaWYgKGxlZnQgPT0g
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSkgewogICAgICAgICBpZiAocm9vdEJsb2NrICE9
IHRoaXMpCiAgICAgICAgICAgICAvLyBUaGUgYm9yZGVyIGNhbiBwb3RlbnRpYWxseSBiZSBmdXJ0
aGVyIGV4dGVuZGVkIGJ5IG91ciBjb250YWluaW5nQmxvY2soKS4KLSAgICAgICAgICAgIHJldHVy
biBjb250YWluaW5nQmxvY2soKS0+bGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIHkgKyB5
UG9zKCkpOworICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5sZWZ0U2VsZWN0
aW9uT2Zmc2V0KHJvb3RCbG9jaywgeVBvcyArIHkoKSk7CiAgICAgICAgIHJldHVybiBsZWZ0Owog
ICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gdGhpczsKICAgICAg
ICAgd2hpbGUgKGNiICE9IHJvb3RCbG9jaykgewotICAgICAgICAgICAgbGVmdCArPSBjYi0+eFBv
cygpOworICAgICAgICAgICAgbGVmdCArPSBjYi0+eCgpOwogICAgICAgICAgICAgY2IgPSBjYi0+
Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTg1LDM1ICsyMTg1LDM1
IEBAIGludCBSZW5kZXJCbG9jazo6bGVmdFNlbGVjdGlvbk9mZnNldChSZW4KICAgICByZXR1cm4g
bGVmdDsKIH0KIAotaW50IFJlbmRlckJsb2NrOjpyaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJC
bG9jayogcm9vdEJsb2NrLCBpbnQgeSkKK2ludCBSZW5kZXJCbG9jazo6cmlnaHRTZWxlY3Rpb25P
ZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IHlQb3MpCiB7Ci0gICAgaW50IHJpZ2h0
ID0gcmlnaHRPZmZzZXQoeSk7CisgICAgaW50IHJpZ2h0ID0gcmlnaHRPZmZzZXQoeVBvcyk7CiAg
ICAgaWYgKHJpZ2h0ID09IChjb250ZW50V2lkdGgoKSArIChib3JkZXJMZWZ0KCkgKyBwYWRkaW5n
TGVmdCgpKSkpIHsKICAgICAgICAgaWYgKHJvb3RCbG9jayAhPSB0aGlzKQogICAgICAgICAgICAg
Ly8gVGhlIGJvcmRlciBjYW4gcG90ZW50aWFsbHkgYmUgZnVydGhlciBleHRlbmRlZCBieSBvdXIg
Y29udGFpbmluZ0Jsb2NrKCkuCi0gICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCkt
PnJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgeSArIHlQb3MoKSk7CisgICAgICAgICAg
ICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPnJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9j
aywgeVBvcyArIHkoKSk7CiAgICAgICAgIHJldHVybiByaWdodDsKICAgICB9CiAgICAgZWxzZSB7
CiAgICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IHRoaXM7CiAgICAgICAgIHdoaWxlIChjYiAhPSBy
b290QmxvY2spIHsKLSAgICAgICAgICAgIHJpZ2h0ICs9IGNiLT54UG9zKCk7CisgICAgICAgICAg
ICByaWdodCArPSBjYi0+eCgpOwogICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2Nr
KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJpZ2h0OwogfQogCi12b2lkIFJlbmRl
ckJsb2NrOjppbnNlcnRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlck9iamVjdCAqbykKK3ZvaWQgUmVu
ZGVyQmxvY2s6Omluc2VydFBvc2l0aW9uZWRPYmplY3QoUmVuZGVyQm94KiBvKQogewogICAgIC8v
IENyZWF0ZSB0aGUgbGlzdCBvZiBzcGVjaWFsIG9iamVjdHMgaWYgd2UgZG9uJ3QgYWxlYWR5IGhh
dmUgb25lCiAgICAgaWYgKCFtX3Bvc2l0aW9uZWRPYmplY3RzKQotICAgICAgICBtX3Bvc2l0aW9u
ZWRPYmplY3RzID0gbmV3IExpc3RIYXNoU2V0PFJlbmRlck9iamVjdCo+OworICAgICAgICBtX3Bv
c2l0aW9uZWRPYmplY3RzID0gbmV3IExpc3RIYXNoU2V0PFJlbmRlckJveCo+OwogCiAgICAgbV9w
b3NpdGlvbmVkT2JqZWN0cy0+YWRkKG8pOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVQ
b3NpdGlvbmVkT2JqZWN0KFJlbmRlck9iamVjdCAqbykKK3ZvaWQgUmVuZGVyQmxvY2s6OnJlbW92
ZVBvc2l0aW9uZWRPYmplY3QoUmVuZGVyQm94KiBvKQogewogICAgIGlmIChtX3Bvc2l0aW9uZWRP
YmplY3RzKQogICAgICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzLT5yZW1vdmUobyk7CkBAIC0yMjI0
LDExICsyMjI0LDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBvc2l0aW9uZWRPYmplY3QK
ICAgICBpZiAoIW1fcG9zaXRpb25lZE9iamVjdHMpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBSZW5kZXJPYmplY3QqIHI7CisgICAgUmVuZGVyQm94KiByOwogICAgIAogICAgIEl0ZXJhdG9y
IGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwogICAgIAotICAgIFZlY3RvcjxSZW5k
ZXJPYmplY3QqLCAxNj4gZGVhZE9iamVjdHM7CisgICAgVmVjdG9yPFJlbmRlckJveCosIDE2PiBk
ZWFkT2JqZWN0czsKIAogICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX3Bvc2l0aW9uZWRPYmplY3Rz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgciA9ICppdDsKQEAgLTIyNTIs
NyArMjI1Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBvc2l0aW9uZWRPYmplY3QKICAg
ICAgICAgbV9wb3NpdGlvbmVkT2JqZWN0cy0+cmVtb3ZlKGRlYWRPYmplY3RzLmF0KGkpKTsKIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyT2JqZWN0ICpv
KQordm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQog
ewogICAgIEFTU0VSVChvLT5pc0Zsb2F0aW5nKCkpOwogCkBAIC0yMjg2LDcgKzIyODYsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSCiAgICAgbV9mbG9hdGluZ09i
amVjdHMtPmFwcGVuZChuZXdPYmopOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9h
dGluZ09iamVjdChSZW5kZXJPYmplY3QgKm8pCit2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9h
dGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiB7CiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7
CiAgICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCpt
X2Zsb2F0aW5nT2JqZWN0cyk7CkBAIC0yMzIxLDcgKzIzMjEsNyBAQCBib29sIFJlbmRlckJsb2Nr
Ojpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgIGxhc3RGbG9hdCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5nZXRQcmV2KCk7CiAgICAgfQogCi0gICAgaW50IHkgPSBtX2hlaWdodDsKKyAgICBpbnQg
eSA9IGhlaWdodCgpOwogICAgIAogICAgIC8vIFRoZSBmbG9hdCBjYW5ub3Qgc3RhcnQgYWJvdmUg
dGhlIHkgcG9zaXRpb24gb2YgdGhlIGxhc3QgcG9zaXRpb25lZCBmbG9hdC4KICAgICBpZiAobGFz
dEZsb2F0KQpAQCAtMjMzNiw3ICsyMzM2LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25O
ZXdGbG9hdHMoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBS
ZW5kZXJPYmplY3QqIG8gPSBmLT5tX3JlbmRlcmVyOworICAgICAgICBSZW5kZXJCb3gqIG8gPSBm
LT5tX3JlbmRlcmVyOwogICAgICAgICBpbnQgX2hlaWdodCA9IG8tPmhlaWdodCgpICsgby0+bWFy
Z2luVG9wKCkgKyBvLT5tYXJnaW5Cb3R0b20oKTsKIAogICAgICAgICBpbnQgcm8gPSByaWdodE9m
ZnNldCgpOyAvLyBDb25zdGFudCBwYXJ0IG9mIHJpZ2h0IG9mZnNldC4KQEAgLTIzNDUsNyArMjM0
NSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgaWYg
KHJvIC0gbG8gPCBmd2lkdGgpCiAgICAgICAgICAgICBmd2lkdGggPSBybyAtIGxvOyAvLyBOZXZl
ciBsb29rIGZvciBtb3JlIHRoYW4gd2hhdCB3aWxsIGJlIGF2YWlsYWJsZS4KICAgICAgICAgCi0g
ICAgICAgIEludFJlY3Qgb2xkUmVjdChvLT54UG9zKCksIG8tPnlQb3MoKSAsIG8tPndpZHRoKCks
IG8tPmhlaWdodCgpKTsKKyAgICAgICAgSW50UmVjdCBvbGRSZWN0KG8tPngoKSwgby0+eSgpICwg
by0+d2lkdGgoKSwgby0+aGVpZ2h0KCkpOwogICAgICAgICAKICAgICAgICAgaWYgKG8tPnN0eWxl
KCktPmNsZWFyKCkgJiBDTEVGVCkKICAgICAgICAgICAgIHkgPSBtYXgobGVmdEJvdHRvbSgpLCB5
KTsKQEAgLTIzNjIsNyArMjM2Miw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3Rmxv
YXRzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZ4ID0gbWF4KDAsIGZ4KTsKICAgICAg
ICAgICAgIGYtPm1fbGVmdCA9IGZ4OwotICAgICAgICAgICAgby0+c2V0UG9zKGZ4ICsgby0+bWFy
Z2luTGVmdCgpLCB5ICsgby0+bWFyZ2luVG9wKCkpOworICAgICAgICAgICAgby0+c2V0TG9jYXRp
b24oZnggKyBvLT5tYXJnaW5MZWZ0KCksIHkgKyBvLT5tYXJnaW5Ub3AoKSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBpbnQgaGVpZ2h0UmVtYWluaW5nTGVmdCA9IDE7CiAgICAgICAg
ICAgICBpbnQgaGVpZ2h0UmVtYWluaW5nUmlnaHQgPSAxOwpAQCAtMjM3Miw3ICsyMzcyLDcgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICAgICAgICAgIGZ4
ID0gcmlnaHRSZWxPZmZzZXQoeSwgcm8sIGZhbHNlLCAmaGVpZ2h0UmVtYWluaW5nUmlnaHQpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZi0+bV9sZWZ0ID0gZnggLSBmLT5tX3dpZHRoOwot
ICAgICAgICAgICAgby0+c2V0UG9zKGZ4IC0gby0+bWFyZ2luUmlnaHQoKSAtIG8tPndpZHRoKCks
IHkgKyBvLT5tYXJnaW5Ub3AoKSk7CisgICAgICAgICAgICBvLT5zZXRMb2NhdGlvbihmeCAtIG8t
Pm1hcmdpblJpZ2h0KCkgLSBvLT53aWR0aCgpLCB5ICsgby0+bWFyZ2luVG9wKCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgZi0+bV90b3AgPSB5OwpAQCAtMjQwNSw4ICsyNDA1LDggQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bmV3TGluZShFQ2xlYXIgY2xlYXIpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgaWYgKG1faGVpZ2h0IDwgbmV3WSkKLSAgICAgICAg
bV9oZWlnaHQgPSBuZXdZOworICAgIGlmIChoZWlnaHQoKSA8IG5ld1kpCisgICAgICAgIHNldEhl
aWdodChuZXdZKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6YWRkUGVyY2VudEhlaWdodERlc2Nl
bmRhbnQoUmVuZGVyQm94KiBkZXNjZW5kYW50KQpAQCAtMjYwMyw3ICsyNjAzLDcgQEAgaW50IFJl
bmRlckJsb2NrOjpsb3dlc3RQb3NpdGlvbihib29sIGluYwogICAgICAgICBib3R0b20gPSBtYXgo
Ym90dG9tLCBtX292ZXJmbG93SGVpZ2h0ICsgcmVsYXRpdmVPZmZzZXQpOwogICAgICAgICAKICAg
ICBpZiAobV9wb3NpdGlvbmVkT2JqZWN0cykgewotICAgICAgICBSZW5kZXJPYmplY3QqIHI7Cisg
ICAgICAgIFJlbmRlckJveCogcjsKICAgICAgICAgSXRlcmF0b3IgZW5kID0gbV9wb3NpdGlvbmVk
T2JqZWN0cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX3Bvc2l0aW9uZWRP
YmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIHIgPSAqaXQ7
CkBAIC0yNjEzLDggKzI2MTMsOCBAQCBpbnQgUmVuZGVyQmxvY2s6Omxvd2VzdFBvc2l0aW9uKGJv
b2wgaW5jCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3b3JrIGZvciBvdmVyZmxv
dyBzZWN0aW9ucyB0b28uCiAgICAgICAgICAgICAgICAgLy8gSWYgYSBwb3NpdGlvbmVkIG9iamVj
dCBsaWVzIGNvbXBsZXRlbHkgdG8gdGhlIGxlZnQgb2YgdGhlIHJvb3QgaXQgd2lsbCBiZSB1bnJl
YWNoYWJsZSB2aWEgc2Nyb2xsaW5nLgogICAgICAgICAgICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBz
aG91bGQgbm90IGFsbG93IGl0IHRvIGNvbnRyaWJ1dGUgdG8gdGhlIGxvd2VzdCBwb3NpdGlvbi4K
LSAgICAgICAgICAgICAgICBpZiAoIWlzUmVuZGVyVmlldygpIHx8IHItPnhQb3MoKSArIHItPndp
ZHRoKCkgPiAwIHx8IHItPnhQb3MoKSArIHItPnJpZ2h0bW9zdFBvc2l0aW9uKGZhbHNlKSA+IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxwID0gci0+eVBvcygpICsgci0+bG93ZXN0UG9z
aXRpb24oZmFsc2UpOworICAgICAgICAgICAgICAgIGlmICghaXNSZW5kZXJWaWV3KCkgfHwgci0+
eCgpICsgci0+d2lkdGgoKSA+IDAgfHwgci0+eCgpICsgci0+cmlnaHRtb3N0UG9zaXRpb24oZmFs
c2UpID4gMCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgbHAgPSByLT55KCkgKyByLT5sb3dl
c3RQb3NpdGlvbihmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIGJvdHRvbSA9IG1heChib3R0
b20sIGxwICsgcmVsYXRpdmVPZmZzZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KQEAgLTI2NjAsNyArMjY2MCw3IEBAIGludCBSZW5kZXJCbG9jazo6cmlnaHRtb3N0UG9zaXRp
b24oYm9vbCAKICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIG1fb3ZlcmZsb3dXaWR0aCArIHJl
bGF0aXZlT2Zmc2V0KTsKIAogICAgIGlmIChtX3Bvc2l0aW9uZWRPYmplY3RzKSB7Ci0gICAgICAg
IFJlbmRlck9iamVjdCogcjsKKyAgICAgICAgUmVuZGVyQm94KiByOwogICAgICAgICBJdGVyYXRv
ciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRv
ciBpdCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCkgOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgICAgIHIgPSAqaXQ7CkBAIC0yNjcwLDggKzI2NzAsOCBAQCBpbnQgUmVuZGVyQmxv
Y2s6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCB3b3JrIGZvciBvdmVyZmxvdyBzZWN0aW9ucyB0b28uCiAgICAgICAgICAgICAgICAgLy8g
SWYgYSBwb3NpdGlvbmVkIG9iamVjdCBsaWVzIGNvbXBsZXRlbHkgYWJvdmUgdGhlIHJvb3QgaXQg
d2lsbCBiZSB1bnJlYWNoYWJsZSB2aWEgc2Nyb2xsaW5nLgogICAgICAgICAgICAgICAgIC8vIFRo
ZXJlZm9yZSB3ZSBzaG91bGQgbm90IGFsbG93IGl0IHRvIGNvbnRyaWJ1dGUgdG8gdGhlIHJpZ2h0
bW9zdCBwb3NpdGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoIWlzUmVuZGVyVmlldygpIHx8IHIt
PnlQb3MoKSArIHItPmhlaWdodCgpID4gMCB8fCByLT55UG9zKCkgKyByLT5sb3dlc3RQb3NpdGlv
bihmYWxzZSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBycCA9IHItPnhQb3MoKSAr
IHItPnJpZ2h0bW9zdFBvc2l0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzUmVu
ZGVyVmlldygpIHx8IHItPnkoKSArIHItPmhlaWdodCgpID4gMCB8fCByLT55KCkgKyByLT5sb3dl
c3RQb3NpdGlvbihmYWxzZSkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBycCA9IHIt
PngoKSArIHItPnJpZ2h0bW9zdFBvc2l0aW9uKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAg
cmlnaHQgPSBtYXgocmlnaHQsIHJwICsgcmVsYXRpdmVPZmZzZXQpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KQEAgLTI3MjIsNyArMjcyMiw3IEBAIGludCBSZW5kZXJCbG9jazo6
bGVmdG1vc3RQb3NpdGlvbihib29sIGkKICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCBtX292ZXJm
bG93TGVmdCArIHJlbGF0aXZlT2Zmc2V0KTsKIAogICAgIGlmIChtX3Bvc2l0aW9uZWRPYmplY3Rz
KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcjsKKyAgICAgICAgUmVuZGVyQm94KiByOwogICAg
ICAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICAgICAg
Zm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICAgICAgciA9ICppdDsKQEAgLTI3MzIsOCArMjczMiw4IEBAIGlu
dCBSZW5kZXJCbG9jazo6bGVmdG1vc3RQb3NpdGlvbihib29sIGkKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHdvcmsgZm9yIG92ZXJmbG93IHNlY3Rpb25zIHRvby4KICAgICAgICAg
ICAgICAgICAvLyBJZiBhIHBvc2l0aW9uZWQgb2JqZWN0IGxpZXMgY29tcGxldGVseSBhYm92ZSB0
aGUgcm9vdCBpdCB3aWxsIGJlIHVucmVhY2hhYmxlIHZpYSBzY3JvbGxpbmcuCiAgICAgICAgICAg
ICAgICAgLy8gVGhlcmVmb3JlIHdlIHNob3VsZCBub3QgYWxsb3cgaXQgdG8gY29udHJpYnV0ZSB0
byB0aGUgbGVmdG1vc3QgcG9zaXRpb24uCi0gICAgICAgICAgICAgICAgaWYgKCFpc1JlbmRlclZp
ZXcoKSB8fCByLT55UG9zKCkgKyByLT5oZWlnaHQoKSA+IDAgfHwgci0+eVBvcygpICsgci0+bG93
ZXN0UG9zaXRpb24oZmFsc2UpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgbHAgPSBy
LT54UG9zKCkgKyByLT5sZWZ0bW9zdFBvc2l0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzUmVuZGVyVmlldygpIHx8IHItPnkoKSArIHItPmhlaWdodCgpID4gMCB8fCByLT55KCkg
KyByLT5sb3dlc3RQb3NpdGlvbihmYWxzZSkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlu
dCBscCA9IHItPngoKSArIHItPmxlZnRtb3N0UG9zaXRpb24oZmFsc2UpOwogICAgICAgICAgICAg
ICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIGxwICsgcmVsYXRpdmVPZmZzZXQpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI4MzcsMjIgKzI4MzcsMjMgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6Y2xlYXJGbG9hdHMoKQogICAgIC8vIG91dCBvZiBmbG93IChsaWtlIGZsb2F0aW5n
L3Bvc2l0aW9uZWQgZWxlbWVudHMpLCBhbmQgd2UgYWxzbyBza2lwIG92ZXIgYW55IG9iamVjdHMg
dGhhdCBtYXkgaGF2ZSBzaGlmdGVkCiAgICAgLy8gdG8gYXZvaWQgZmxvYXRzLgogICAgIGJvb2wg
cGFyZW50SGFzRmxvYXRzID0gZmFsc2U7Ci0gICAgUmVuZGVyT2JqZWN0ICpwcmV2ID0gcHJldmlv
dXNTaWJsaW5nKCk7Ci0gICAgd2hpbGUgKHByZXYgJiYgKCFwcmV2LT5pc1JlbmRlckJsb2NrKCkg
fHwgcHJldi0+YXZvaWRzRmxvYXRzKCkgfHwgcHJldi0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgp
KSkgeworICAgIFJlbmRlck9iamVjdCogcHJldiA9IHByZXZpb3VzU2libGluZygpOworICAgIHdo
aWxlIChwcmV2ICYmICghcHJldi0+aXNCb3goKSB8fCAhcHJldi0+aXNSZW5kZXJCbG9jaygpIHx8
IHByZXYtPmF2b2lkc0Zsb2F0cygpIHx8IHByZXYtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkp
IHsKICAgICAgICAgaWYgKHByZXYtPmlzRmxvYXRpbmcoKSkKICAgICAgICAgICAgIHBhcmVudEhh
c0Zsb2F0cyA9IHRydWU7CiAgICAgICAgICBwcmV2ID0gcHJldi0+cHJldmlvdXNTaWJsaW5nKCk7
CiAgICAgfQogCiAgICAgLy8gRmlyc3QgYWRkIGluIGZsb2F0cyBmcm9tIHRoZSBwYXJlbnQuCi0g
ICAgaW50IG9mZnNldCA9IG1feTsKKyAgICBpbnQgb2Zmc2V0ID0gbV9mcmFtZVJlY3QueSgpOwog
ICAgIGlmIChwYXJlbnRIYXNGbG9hdHMpCiAgICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0cyhzdGF0
aWNfY2FzdDxSZW5kZXJCbG9jayAqPihwYXJlbnQoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJlbnQoKS0+Ym9yZGVyTGVmdCgpICsgcGFyZW50KCktPnBhZGRpbmdMZWZ0KCksIG9m
ZnNldCk7CiAKKyAgICAKICAgICBpbnQgeG9mZnNldCA9IDA7CiAgICAgaWYgKHByZXYpCi0gICAg
ICAgIG9mZnNldCAtPSBwcmV2LT55UG9zKCk7CisgICAgICAgIG9mZnNldCAtPSBzdGF0aWNfY2Fz
dDxSZW5kZXJCb3gqPihwcmV2KS0+eSgpOwogICAgIGVsc2UgewogICAgICAgICBwcmV2ID0gcGFy
ZW50KCk7CiAgICAgICAgIHhvZmZzZXQgKz0gcHJldi0+Ym9yZGVyTGVmdCgpICsgcHJldi0+cGFk
ZGluZ0xlZnQoKTsKQEAgLTI5MTYsNyArMjkxNyw3IEBAIGludCBSZW5kZXJCbG9jazo6YWRkT3Zl
cmhhbmdpbmdGbG9hdHMoUmUKICAgICBJbnRSZWN0IGZsb2F0c092ZXJmbG93UmVjdDsKICAgICBE
ZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqY2hpbGQtPm1fZmxv
YXRpbmdPYmplY3RzKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiByOyAociA9IGl0LmN1cnJl
bnQoKSk7ICsraXQpIHsKLSAgICAgICAgaW50IGJvdHRvbSA9IGNoaWxkLT55UG9zKCkgKyByLT5t
X2JvdHRvbTsKKyAgICAgICAgaW50IGJvdHRvbSA9IGNoaWxkLT55KCkgKyByLT5tX2JvdHRvbTsK
ICAgICAgICAgbG93ZXN0RmxvYXRCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRCb3R0b20sIGJvdHRv
bSk7CiAKICAgICAgICAgaWYgKGJvdHRvbSA+IGhlaWdodCgpKSB7CkBAIC0zMDI5LDcgKzMwMzAs
NyBAQCBib29sIFJlbmRlckJsb2NrOjpjb250YWluc0Zsb2F0KFJlbmRlck9iCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjptYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxv
YXRzRm9yTGF5b3V0KFJlbmRlck9iamVjdCogZmxvYXRUb1JlbW92ZSkKK3ZvaWQgUmVuZGVyQmxv
Y2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9h
dFRvUmVtb3ZlKQogewogICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSk7CiAKQEAgLTMwNDYs
NyArMzA0Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGgKICAg
ICB9CiB9CiAKLWludCBSZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0YShSZW5kZXJPYmplY3QgKmNo
aWxkKQoraW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hpbGQpCiB7
CiAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBjb21wdXRlIGNsZWFyYW5jZSBpZiB3ZSBoYXZl
IG5vIGZsb2F0cy4KICAgICBpZiAoIWNvbnRhaW5zRmxvYXRzKCkpCkBAIC0zMDc0LDExICszMDc1
LDExIEBAIGludCBSZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0YShSZW5kZXJPYmoKICAgICAvLyB0
byBmaXQpIGFuZCBub3QgYWxsICh3ZSBzaG91bGQgYmUgdXNpbmcgbmV4dEZsb2F0Qm90dG9tQmVs
b3cgYW5kIGxvb3BpbmcpLgogICAgIC8vIERvIG5vdCBhbGxvdyB0YWJsZXMgdG8gd3JhcCBpbiBx
dWlya3Mgb3IgZXZlbiBpbiBhbG1vc3Qgc3RyaWN0IG1vZGUgCiAgICAgLy8gKGViYXkgb24gdGhl
IFBMVCwgZmluYW5jZS55YWhvby5jb20gaW4gdGhlIHJlYWwgd29ybGQsIHZlcnNpb250cmFja2Vy
LmNvbSBmb3JjZXMgZXZlbiBhbG1vc3Qgc3RyaWN0IG1vZGUgbm90IHRvIHdvcmspCi0gICAgaW50
IHJlc3VsdCA9IGNsZWFyU2V0ID8gbWF4KDAsIGJvdHRvbSAtIGNoaWxkLT55UG9zKCkpIDogMDsK
KyAgICBpbnQgcmVzdWx0ID0gY2xlYXJTZXQgPyBtYXgoMCwgYm90dG9tIC0gY2hpbGQtPnkoKSkg
OiAwOwogICAgIGlmICghcmVzdWx0ICYmIGNoaWxkLT5hdm9pZHNGbG9hdHMoKSAmJiBjaGlsZC0+
c3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgCi0gICAgICAgIGNoaWxkLT5taW5QcmVmV2lk
dGgoKSA+IGxpbmVXaWR0aChjaGlsZC0+eVBvcygpKSAmJiBjaGlsZC0+bWluUHJlZldpZHRoKCkg
PD0gYXZhaWxhYmxlV2lkdGgoKSAmJiAKKyAgICAgICAgY2hpbGQtPm1pblByZWZXaWR0aCgpID4g
bGluZVdpZHRoKGNoaWxkLT55KCkpICYmIGNoaWxkLT5taW5QcmVmV2lkdGgoKSA8PSBhdmFpbGFi
bGVXaWR0aCgpICYmIAogICAgICAgICBkb2N1bWVudCgpLT5pblN0cmljdE1vZGUoKSkgICAKLSAg
ICAgICAgcmVzdWx0ID0gbWF4KDAsIGZsb2F0Qm90dG9tKCkgLSBjaGlsZC0+eVBvcygpKTsKKyAg
ICAgICAgcmVzdWx0ID0gbWF4KDAsIGZsb2F0Qm90dG9tKCkgLSBjaGlsZC0+eSgpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMTA0LDggKzMxMDUsOCBAQCBib29sIFJlbmRlckJsb2Nr
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUCiB7CiAgICAgYm9vbCBpbmxpbmVGbG93ID0gaXNJbmxp
bmVGbG93KCk7CiAKLSAgICBpbnQgdHggPSBfdHggKyBtX3g7Ci0gICAgaW50IHR5ID0gX3R5ICsg
bV95ICsgYm9yZGVyVG9wRXh0cmEoKTsKKyAgICBpbnQgdHggPSBfdHggKyB4KCk7CisgICAgaW50
IHR5ID0gX3R5ICsgeSgpOwogCiAgICAgaWYgKCFpbmxpbmVGbG93ICYmICFpc1JlbmRlclZpZXco
KSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4K
QEAgLTMxNTAsOCArMzE1MSw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFQKICAgICAgICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmpl
Y3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7CiAgICAgICAgICAgICBmb3IgKGl0LnRvTGFzdCgp
OyAobyA9IGl0LmN1cnJlbnQoKSk7IC0taXQpIHsKICAgICAgICAgICAgICAgICBpZiAoby0+bV9z
aG91bGRQYWludCAmJiAhby0+bV9yZW5kZXJlci0+aGFzTGF5ZXIoKSkgewotICAgICAgICAgICAg
ICAgICAgICBpbnQgeG9mZnNldCA9IHNjcm9sbGVkWCArIG8tPm1fbGVmdCArIG8tPm1fcmVuZGVy
ZXItPm1hcmdpbkxlZnQoKSAtIG8tPm1fcmVuZGVyZXItPnhQb3MoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaW50IHlvZmZzZXQgPSAgc2Nyb2xsZWRZICsgby0+bV90b3AgKyBvLT5tX3JlbmRlcmVy
LT5tYXJnaW5Ub3AoKSAtIG8tPm1fcmVuZGVyZXItPnlQb3MoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaW50IHhvZmZzZXQgPSBzY3JvbGxlZFggKyBvLT5tX2xlZnQgKyBvLT5tX3JlbmRlcmVyLT5t
YXJnaW5MZWZ0KCkgLSBvLT5tX3JlbmRlcmVyLT54KCk7CisgICAgICAgICAgICAgICAgICAgIGlu
dCB5b2Zmc2V0ID0gIHNjcm9sbGVkWSArIG8tPm1fdG9wICsgby0+bV9yZW5kZXJlci0+bWFyZ2lu
VG9wKCkgLSBvLT5tX3JlbmRlcmVyLT55KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvLT5t
X3JlbmRlcmVyLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgSW50UG9pbnQoX3gsIF95KSwgeG9m
ZnNldCwgeW9mZnNldCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBJbnRQb2ludChfeCAtIHhvZmZzZXQsIF95IC0geW9mZnNldCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMTY0LDcgKzMxNjUsNyBAQCBi
b29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgLy8gTm93IGhpdCB0
ZXN0IG91ciBiYWNrZ3JvdW5kCiAgICAgaWYgKCFpbmxpbmVGbG93ICYmIChoaXRUZXN0QWN0aW9u
ID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hp
bGRCbG9ja0JhY2tncm91bmQpKSB7CiAgICAgICAgIGludCB0b3BFeHRyYSA9IGJvcmRlclRvcEV4
dHJhKCk7Ci0gICAgICAgIEludFJlY3QgYm91bmRzUmVjdCh0eCwgdHkgLSB0b3BFeHRyYSwgbV93
aWR0aCwgbV9oZWlnaHQgKyB0b3BFeHRyYSArIGJvcmRlckJvdHRvbUV4dHJhKCkpOworICAgICAg
ICBJbnRSZWN0IGJvdW5kc1JlY3QodHgsIHR5IC0gdG9wRXh0cmEsIHdpZHRoKCksIGhlaWdodCgp
ICsgdG9wRXh0cmEgKyBib3JkZXJCb3R0b21FeHRyYSgpKTsKICAgICAgICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmNvbnRhaW5zKF94LCBfeSkpIHsKICAgICAgICAg
ICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludChfeCAtIHR4LCBfeSAtIHR5
ICsgdG9wRXh0cmEpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzMwMCw4ICszMzAx
LDggQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvcgogCiAgICAgICAg
IGlmICh5IDwgdG9wIHx8IChpc0VkaXRhYmxlUm9vdCAmJiAoeSA8IGJvdHRvbSAmJiB4IDwgbGVm
dCkpKSB7CiAgICAgICAgICAgICBpZiAoIWlzRWRpdGFibGVSb290KQotICAgICAgICAgICAgICAg
IGlmIChSZW5kZXJPYmplY3QqIGMgPSBmaXJzdENoaWxkKCkpIHsgLy8gRklYTUU6IFRoaXMgY29k
ZSBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLiAgVGhpcyBjaGlsZCBjb3VsZCBiZSBhbiBpbmxpbmUg
b3IgYSBwb3NpdGlvbmVkIGVsZW1lbnQgb3IgYSBmbG9hdCBvciBhIGNvbXBhY3QsIGV0Yy4KLSAg
ICAgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBjLT5wb3NpdGlvbkZvckNvb3Jk
aW5hdGVzKGNvbnRlbnRzWCAtIGMtPnhQb3MoKSwgY29udGVudHNZIC0gYy0+eVBvcygpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoUmVuZGVyQm94KiBjID0gZmlyc3RDaGlsZEJveCgpKSB7IC8vIEZJ
WE1FOiBUaGlzIGNvZGUgZG9lc24ndCBtYWtlIGFueSBzZW5zZS4gIFRoaXMgY2hpbGQgY291bGQg
YmUgYW4gaW5saW5lIG9yIGEgcG9zaXRpb25lZCBlbGVtZW50IG9yIGEgZmxvYXQgb3IgYSBjb21w
YWN0LCBldGMuCisgICAgICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gYy0+cG9z
aXRpb25Gb3JDb29yZGluYXRlcyhjb250ZW50c1ggLSBjLT54KCksIGNvbnRlbnRzWSAtIGMtPnko
KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwLmlzTm90TnVsbCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzMxNiw4ICszMzE3
LDggQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvcgogCiAgICAgICAg
IGlmICh5ID49IGJvdHRvbSB8fCAoaXNFZGl0YWJsZVJvb3QgJiYgKHkgPj0gdG9wICYmIHggPj0g
cmlnaHQpKSkgewogICAgICAgICAgICAgaWYgKCFpc0VkaXRhYmxlUm9vdCkKLSAgICAgICAgICAg
ICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjID0gbGFzdENoaWxkKCkpIHsgLy8gRklYTUU6IFRoaXMg
Y29kZSBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLiAgVGhpcyBjaGlsZCBjb3VsZCBiZSBhbiBpbmxp
bmUgb3IgYSBwb3NpdGlvbmVkIGVsZW1lbnQgb3IgYSBmbG9hdCBvciBhIGNvbXBhY3QsIGVjdC4K
LSAgICAgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBjLT5wb3NpdGlvbkZvckNv
b3JkaW5hdGVzKGNvbnRlbnRzWCAtIGMtPnhQb3MoKSwgY29udGVudHNZIC0gYy0+eVBvcygpKTsK
KyAgICAgICAgICAgICAgICBpZiAoUmVuZGVyQm94KiBjID0gbGFzdENoaWxkQm94KCkpIHsgLy8g
RklYTUU6IFRoaXMgY29kZSBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLiAgVGhpcyBjaGlsZCBjb3Vs
ZCBiZSBhbiBpbmxpbmUgb3IgYSBwb3NpdGlvbmVkIGVsZW1lbnQgb3IgYSBmbG9hdCBvciBhIGNv
bXBhY3QsIGVjdC4KKyAgICAgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBjLT5w
b3NpdGlvbkZvckNvb3JkaW5hdGVzKGNvbnRlbnRzWCAtIGMtPngoKSwgY29udGVudHNZIC0gYy0+
eSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHAuaXNOb3ROdWxsKCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcDsKICAgICAgICAgICAgICAgICB9CkBAIC0zMzY0LDIwICsz
MzY1LDIwIEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3IKICAgICB9
CiAgICAgCiAgICAgLy8gU2VlIGlmIGFueSBjaGlsZCBibG9ja3MgZXhpc3QgYXQgdGhpcyB5IGNv
b3JkaW5hdGUuCi0gICAgaWYgKGZpcnN0Q2hpbGQoKSAmJiBjb250ZW50c1kgPCBmaXJzdENoaWxk
KCktPnlQb3MoKSkKKyAgICBpZiAoZmlyc3RDaGlsZEJveCgpICYmIGNvbnRlbnRzWSA8IGZpcnN0
Q2hpbGRCb3goKS0+eSgpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG4sIDAsIERP
V05TVFJFQU0pOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGZpcnN0Q2hpbGQo
KTsgcmVuZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCkpIHsKKyAgICBm
b3IgKFJlbmRlckJveCogcmVuZGVyZXIgPSBmaXJzdENoaWxkQm94KCk7IHJlbmRlcmVyOyByZW5k
ZXJlciA9IHJlbmRlcmVyLT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAgIGlmIChyZW5kZXJl
ci0+aGVpZ2h0KCkgPT0gMCB8fCByZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUgfHwgcmVuZGVyZXItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSByZW5kZXJlci0+bmV4dFNp
YmxpbmcoKTsKKyAgICAgICAgUmVuZGVyQm94KiBuZXh0ID0gcmVuZGVyZXItPm5leHRTaWJsaW5n
Qm94KCk7CiAgICAgICAgIHdoaWxlIChuZXh0ICYmIG5leHQtPmlzRmxvYXRpbmdPclBvc2l0aW9u
ZWQoKSkKLSAgICAgICAgICAgIG5leHQgPSBuZXh0LT5uZXh0U2libGluZygpOworICAgICAgICAg
ICAgbmV4dCA9IG5leHQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgIGlmIChuZXh0KSAKLSAg
ICAgICAgICAgIGJvdHRvbSA9IG5leHQtPnlQb3MoKTsKKyAgICAgICAgICAgIGJvdHRvbSA9IG5l
eHQtPnkoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYm90dG9tID0gdG9wICsgc2Nyb2xs
SGVpZ2h0KCk7Ci0gICAgICAgIGlmIChjb250ZW50c1kgPj0gcmVuZGVyZXItPnlQb3MoKSAmJiBj
b250ZW50c1kgPCBib3R0b20pCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9u
Rm9yQ29vcmRpbmF0ZXMoY29udGVudHNYIC0gcmVuZGVyZXItPnhQb3MoKSwgY29udGVudHNZIC0g
cmVuZGVyZXItPnlQb3MoKSk7CisgICAgICAgIGlmIChjb250ZW50c1kgPj0gcmVuZGVyZXItPnko
KSAmJiBjb250ZW50c1kgPCBib3R0b20pCisgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXItPnBv
c2l0aW9uRm9yQ29vcmRpbmF0ZXMoY29udGVudHNYIC0gcmVuZGVyZXItPngoKSwgY29udGVudHNZ
IC0gcmVuZGVyZXItPnkoKSk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBSZW5kZXJGbG93Ojpw
b3NpdGlvbkZvckNvb3JkaW5hdGVzKHgsIHkpOwpAQCAtMzU5NSwxNCArMzU5NiwxNCBAQCBpbnQg
UmVuZGVyQmxvY2s6OmxheW91dENvbHVtbnMoaW50IGVuZE9mCiAgICAgICAgICAgICBjb2xDb3Vu
dCsrOwogICAgIH0KIAotICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX3dpZHRoLCBjdXJyWCAt
IGNvbEdhcCk7CisgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KHdpZHRoKCksIGN1cnJYIC0gY29s
R2FwKTsKICAgICBtX292ZXJmbG93TGVmdCA9IG1pbigwLCBjdXJyWCArIGRlc2lyZWRDb2x1bW5X
aWR0aCArIGNvbEdhcCk7CiAKICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4Q29sQm90dG9tOwog
ICAgIGludCB0b0FkZCA9IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCgpOwogICAgICAgICAKICAgICBpZiAoY29tcHV0ZUludHJpbnNp
Y0hlaWdodCkKLSAgICAgICAgbV9oZWlnaHQgPSBtX292ZXJmbG93SGVpZ2h0ICsgdG9BZGQ7Cisg
ICAgICAgIHNldEhlaWdodChtX292ZXJmbG93SGVpZ2h0ICsgdG9BZGQpOwogCiAgICAgdi0+c2V0
UHJpbnRSZWN0KEludFJlY3QoKSk7CiAgICAgdi0+c2V0VHJ1bmNhdGVkQXQoMCk7CkBAIC00MjUx
LDExICs0MjUyLDExIEBAIGludCBSZW5kZXJCbG9jazo6Z2V0QmFzZWxpbmVPZkZpcnN0TGluZUIK
ICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICBmb3IgKFJlbmRlckJveCogY3VyciA9IGZpcnN0Q2hpbGRC
b3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgICAg
IGlmICghY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAgICAg
aW50IHJlc3VsdCA9IGN1cnItPmdldEJhc2VsaW5lT2ZGaXJzdExpbmVCb3goKTsKICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vy
ci0+eVBvcygpICsgcmVzdWx0OyAvLyBUcmFuc2xhdGUgdG8gb3VyIGNvb3JkaW5hdGUgc3BhY2Uu
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyLT55KCkgKyByZXN1bHQ7IC8vIFRyYW5z
bGF0ZSB0byBvdXIgY29vcmRpbmF0ZSBzcGFjZS4KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTQyNzcsMTIgKzQyNzgsMTIgQEAgaW50IFJlbmRlckJsb2NrOjpnZXRCYXNlbGlu
ZU9mTGFzdExpbmVCbwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBoYXZlTm9ybWFs
Rmxvd0NoaWxkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gbGFz
dENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2aW91c1NpYmxpbmcoKSkgeworICAgICAg
ICBmb3IgKFJlbmRlckJveCogY3VyciA9IGxhc3RDaGlsZEJveCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKICAgICAgICAgICAgIGlmICghY3Vyci0+aXNGbG9h
dGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAgICAgaGF2ZU5vcm1hbEZsb3dDaGls
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IGN1cnItPmdldEJhc2VsaW5l
T2ZMYXN0TGluZUJveCgpOwogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gLTEpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJyLT55UG9zKCkgKyByZXN1bHQ7IC8vIFRyYW5zbGF0
ZSB0byBvdXIgY29vcmRpbmF0ZSBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1
cnItPnkoKSArIHJlc3VsdDsgLy8gVHJhbnNsYXRlIHRvIG91ciBjb29yZGluYXRlIHNwYWNlLgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICghaGF2ZU5vcm1hbEZsb3dDaGls
ZCAmJiBoYXNMaW5lSWZFbXB0eSgpKQpAQCAtNDUwMCwxOCArNDUwMSwxOCBAQCBpbnQgZ2V0SGVp
Z2h0Rm9yTGluZUNvdW50KFJlbmRlckJsb2NrKiBiCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5vcm1hbEZsb3dDaGls
ZFdpdGhvdXRMaW5lcyA9IDA7Ci0gICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogb2JqID0g
YmxvY2stPmZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmotPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgICAgIFJlbmRlckJveCogbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzID0gMDsKKyAg
ICAgICAgICAgIGZvciAoUmVuZGVyQm94KiBvYmogPSBibG9jay0+Zmlyc3RDaGlsZEJveCgpOyBv
Ymo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmdCb3goKSkgewogICAgICAgICAgICAgICAgIGlmIChz
aG91bGRDaGVja0xpbmVzKG9iaikpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9
IGdldEhlaWdodEZvckxpbmVDb3VudChzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG9iaiksIGws
IGZhbHNlLCBjb3VudCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gLTEpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgb2JqLT55UG9zKCkgKyAoaW5j
bHVkZUJvdHRvbSA/IChibG9jay0+Ym9yZGVyQm90dG9tKCkgKyBibG9jay0+cGFkZGluZ0JvdHRv
bSgpKSA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIG9iai0+
eSgpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxvY2stPmJvcmRlckJvdHRvbSgpICsgYmxvY2stPnBh
ZGRpbmdCb3R0b20oKSkgOiAwKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoIW9iai0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmICFvYmotPmlzQ29tcGFj
dCgpICYmICFvYmotPmlzUnVuSW4oKSkKICAgICAgICAgICAgICAgICAgICAgbm9ybWFsRmxvd0No
aWxkV2l0aG91dExpbmVzID0gb2JqOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5v
cm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyAmJiBsID09IDApCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcy0+eVBvcygpICsgbm9ybWFsRmxvd0NoaWxk
V2l0aG91dExpbmVzLT5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsRmxv
d0NoaWxkV2l0aG91dExpbmVzLT55KCkgKyBub3JtYWxGbG93Q2hpbGRXaXRob3V0TGluZXMtPmhl
aWdodCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNDU1OSwxNCArNDU2MCwxNCBAQCB2
b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQoaW50CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCog
b2JqID0gZmlyc3RDaGlsZCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmcoKSkgeworICAg
ICAgICAgICAgZm9yIChSZW5kZXJCb3gqIG9iaiA9IGZpcnN0Q2hpbGRCb3goKTsgb2JqOyBvYmog
PSBvYmotPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW9iai0+aXNG
bG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvYmotPmlz
QmxvY2tGbG93KCkgJiYgIW9iai0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG9iaiktPmFkanVzdEZvckJvcmRlckZp
dCh4ICsgb2JqLT54UG9zKCksIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ob2JqKS0+YWRqdXN0Rm9yQm9yZGVyRml0KHggKyBv
YmotPngoKSwgbGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvYmot
PnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBhcmUgYSByZXBsYWNlZCBlbGVtZW50IG9yIHNvbWUga2luZCBvZiBub24tYmxv
Y2stZmxvdyBvYmplY3QuCi0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQs
IHggKyBvYmotPnhQb3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IG1heChy
aWdodCwgeCArIG9iai0+eFBvcygpICsgb2JqLT53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnQgPSBtaW4obGVmdCwgeCArIG9iai0+eCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCB4ICsgb2JqLT54KCkgKyBvYmotPndpZHRoKCkpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpA
QCAtNDU3OCw3ICs0NTc5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0
KGludAogICAgICAgICAgICAgZm9yICg7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgewogICAg
ICAgICAgICAgICAgIC8vIE9ubHkgZXhhbWluZSB0aGUgb2JqZWN0IGlmIG91ciBtX3Nob3VsZFBh
aW50IGZsYWcgaXMgc2V0LgogICAgICAgICAgICAgICAgIGlmIChyLT5tX3Nob3VsZFBhaW50KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGludCBmbG9hdExlZnQgPSByLT5tX2xlZnQgLSByLT5tX3Jl
bmRlcmVyLT54UG9zKCkgKyByLT5tX3JlbmRlcmVyLT5tYXJnaW5MZWZ0KCk7CisgICAgICAgICAg
ICAgICAgICAgIGludCBmbG9hdExlZnQgPSByLT5tX2xlZnQgLSByLT5tX3JlbmRlcmVyLT54KCkg
KyByLT5tX3JlbmRlcmVyLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgIGludCBm
bG9hdFJpZ2h0ID0gZmxvYXRMZWZ0ICsgci0+bV9yZW5kZXJlci0+d2lkdGgoKTsKICAgICAgICAg
ICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCBmbG9hdExlZnQpOwogICAgICAgICAgICAgICAg
ICAgICByaWdodCA9IG1heChyaWdodCwgZmxvYXRSaWdodCk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDggKzExMiw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50
VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20pOwogCiAgICAgdm9pZCBsYXlvdXRQb3NpdGlvbmVkT2Jq
ZWN0cyhib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwotICAgIHZvaWQgaW5zZXJ0UG9zaXRpb25lZE9i
amVjdChSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHJlbW92ZVBvc2l0aW9uZWRPYmplY3QoUmVu
ZGVyT2JqZWN0Kik7CisgICAgdm9pZCBpbnNlcnRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCop
OworICAgIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoUmVuZGVyQmxvY2sqKTsKIAogICAgIHZv
aWQgYWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoUmVuZGVyQm94Kik7CkBAIC0xMjgsMTMgKzEy
OCwxMyBAQCBwdWJsaWM6CiAKICAgICAvLyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZvbGxv
d2luZyBmdW5jdGlvbnMgaXMgaW4gYmlkaS5jcHAKICAgICBzdHJ1Y3QgRmxvYXRXaXRoUmVjdCB7
Ci0gICAgICAgIEZsb2F0V2l0aFJlY3QoUmVuZGVyT2JqZWN0KiBmKQorICAgICAgICBGbG9hdFdp
dGhSZWN0KFJlbmRlckJveCogZikKICAgICAgICAgICAgIDogb2JqZWN0KGYpCi0gICAgICAgICAg
ICAsIHJlY3QoSW50UmVjdChmLT54UG9zKCkgLSBmLT5tYXJnaW5MZWZ0KCksIGYtPnlQb3MoKSAt
IGYtPm1hcmdpblRvcCgpLCBmLT53aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICsgZi0+bWFyZ2lu
UmlnaHQoKSwgZi0+aGVpZ2h0KCkgKyBmLT5tYXJnaW5Ub3AoKSArIGYtPm1hcmdpbkJvdHRvbSgp
KSkKKyAgICAgICAgICAgICwgcmVjdChJbnRSZWN0KGYtPngoKSAtIGYtPm1hcmdpbkxlZnQoKSwg
Zi0+eSgpIC0gZi0+bWFyZ2luVG9wKCksIGYtPndpZHRoKCkgKyBmLT5tYXJnaW5MZWZ0KCkgKyBm
LT5tYXJnaW5SaWdodCgpLCBmLT5oZWlnaHQoKSArIGYtPm1hcmdpblRvcCgpICsgZi0+bWFyZ2lu
Qm90dG9tKCkpKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBSZW5kZXJPYmplY3Qq
IG9iamVjdDsKKyAgICAgICAgUmVuZGVyQm94KiBvYmplY3Q7CiAgICAgICAgIEludFJlY3QgcmVj
dDsKICAgICB9OwogCkBAIC0xNjksMTUgKzE2OSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWlu
dFNlbGVjdGlvbihQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdm9pZCBwYWludENh
cmV0KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBDYXJldFR5cGUpOwogCi0gICAgdm9pZCBp
bnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIHJlbW92ZUZsb2F0
aW5nT2JqZWN0KFJlbmRlck9iamVjdCopOworICAgIHZvaWQgaW5zZXJ0RmxvYXRpbmdPYmplY3Qo
UmVuZGVyQm94Kik7CisgICAgdm9pZCByZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqKTsK
IAogICAgIC8vIENhbGxlZCBmcm9tIGxpbmVXaWR0aCwgdG8gcG9zaXRpb24gdGhlIGZsb2F0cyBh
ZGRlZCBpbiB0aGUgbGFzdCBsaW5lLgogICAgIC8vIFJldHVybnMgdHVyZSBpZiBhbmQgb25seSBp
ZiBpdCBoYXMgcG9zaXRpb25lZCBhbnkgZmxvYXRzLgogICAgIGJvb2wgcG9zaXRpb25OZXdGbG9h
dHMoKTsKICAgICB2b2lkIGNsZWFyRmxvYXRzKCk7Ci0gICAgaW50IGdldENsZWFyRGVsdGEoUmVu
ZGVyT2JqZWN0KiBjaGlsZCk7Ci0gICAgdmlydHVhbCB2b2lkIG1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyT2JqZWN0KiBmbG9hdFRvUmVtb3ZlID0gMCk7CisgICAg
aW50IGdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCk7CisgICAgdmlydHVhbCB2b2lkIG1h
cmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVt
b3ZlID0gMCk7CiAgICAgdm9pZCBtYXJrUG9zaXRpb25lZE9iamVjdHNGb3JMYXlvdXQoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBjb250YWluc0Zsb2F0cygpIHsgcmV0dXJuIG1fZmxvYXRpbmdPYmpl
Y3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpOyB9CkBAIC0xODUsNyArMTg1LDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBib29sIGhhc092ZXJoYW5naW5nRmxvYXRzKCkgeyByZXR1cm4gIWhhc0NvbHVt
bnMoKSAmJiBmbG9hdEJvdHRvbSgpID4gbV9oZWlnaHQ7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFz
T3ZlcmhhbmdpbmdGbG9hdHMoKSB7IHJldHVybiAhaGFzQ29sdW1ucygpICYmIGZsb2F0Qm90dG9t
KCkgPiBoZWlnaHQoKTsgfQogICAgIHZvaWQgYWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2Nr
KiBwcmV2LCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQpOwogICAgIGludCBhZGRPdmVyaGFuZ2lu
Z0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgYm9v
bCBtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzKTsKIApAQCAtMzUyLDcgKzM1Miw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgICAgICBUeXBlIHR5cGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPiht
X3R5cGUpOyB9CiAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOworICAgICAgICBS
ZW5kZXJCb3gqIG1fcmVuZGVyZXI7CiAgICAgICAgIGludCBtX3RvcDsKICAgICAgICAgaW50IG1f
Ym90dG9tOwogICAgICAgICBpbnQgbV9sZWZ0OwpAQCAtMzY1LDE4ICszNjUsMTggQEAgcHJvdGVj
dGVkOgogICAgIC8vIFRoZSBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgc3RydWN0cyBh
cmUgdXNlZCBieSBsYXlvdXRCbG9ja0NoaWxkcmVuLgogICAgIGNsYXNzIENvbXBhY3RJbmZvIHsK
ICAgICAgICAgLy8gQSBjb21wYWN0IGNoaWxkIHRoYXQgbmVlZHMgdG8gYmUgY29sbGFwc2VkIGlu
dG8gdGhlIG1hcmdpbiBvZiB0aGUgZm9sbG93aW5nIGJsb2NrLgotICAgICAgICBSZW5kZXJPYmpl
Y3QqIG1fY29tcGFjdDsKKyAgICAgICAgUmVuZGVyQm94KiBtX2NvbXBhY3Q7CiAKICAgICAgICAg
Ly8gVGhlIGJsb2NrIHdpdGggdGhlIG9wZW4gbWFyZ2luIHRoYXQgdGhlIGNvbXBhY3QgY2hpbGQg
aXMgZ29pbmcgdG8gcGxhY2UgaXRzZWxmIHdpdGhpbi4KICAgICAgICAgUmVuZGVyT2JqZWN0KiBt
X2Jsb2NrOwogCiAgICAgcHVibGljOgotICAgICAgICBSZW5kZXJPYmplY3QqIGNvbXBhY3QoKSBj
b25zdCB7IHJldHVybiBtX2NvbXBhY3Q7IH0KKyAgICAgICAgUmVuZGVyQm94KiBjb21wYWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb21wYWN0OyB9CiAgICAgICAgIFJlbmRlck9iamVjdCogYmxvY2so
KSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CiAgICAgICAgIGJvb2wgbWF0Y2hlcyhSZW5kZXJP
YmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBtX2NvbXBhY3QgJiYgbV9ibG9jayA9PSBjaGls
ZDsgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKSB7IHNldCgwLCAwKTsgfQotICAgICAgICB2b2lk
IHNldChSZW5kZXJPYmplY3QqIGMsIFJlbmRlck9iamVjdCogYikgeyBtX2NvbXBhY3QgPSBjOyBt
X2Jsb2NrID0gYjsgfQorICAgICAgICB2b2lkIHNldChSZW5kZXJCb3gqIGMsIFJlbmRlck9iamVj
dCogYikgeyBtX2NvbXBhY3QgPSBjOyBtX2Jsb2NrID0gYjsgfQogCiAgICAgICAgIENvbXBhY3RJ
bmZvKCkgeyBjbGVhcigpOyB9CiAgICAgfTsKQEAgLTQ0OSwyNCArNDQ5LDI0IEBAIHByb3RlY3Rl
ZDoKIAogICAgIHZvaWQgYWRqdXN0UG9zaXRpb25lZEJsb2NrKFJlbmRlck9iamVjdCogY2hpbGQs
IGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICB2b2lkIGFkanVzdEZsb2F0aW5nQmxvY2soY29uc3Qg
TWFyZ2luSW5mbyYpOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlU3BlY2lhbENoaWxkKFJlbmRl
ck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mLCBDb21wYWN0SW5mbyYsIGJvb2wmIGhh
bmRsZWQpOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlRmxvYXRpbmdDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiwgYm9vbCYgaGFuZGxlZCk7Ci0gICAgUmVuZGVy
T2JqZWN0KiBoYW5kbGVQb3NpdGlvbmVkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgY29uc3Qg
TWFyZ2luSW5mbyYsIGJvb2wmIGhhbmRsZWQpOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlQ29t
cGFjdENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIENvbXBhY3RJbmZvJiwgYm9vbCYgaGFuZGxl
ZCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBoYW5kbGVSdW5JbkNoaWxkKFJlbmRlck9iamVjdCogY2hp
bGQsIGJvb2wmIGhhbmRsZWQpOwotICAgIHZvaWQgY29sbGFwc2VNYXJnaW5zKFJlbmRlck9iamVj
dCogY2hpbGQsIE1hcmdpbkluZm8mLCBpbnQgeVBvc0VzdGltYXRlKTsKLSAgICB2b2lkIGNsZWFy
RmxvYXRzSWZOZWVkZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgTWFyZ2luSW5mbyYsIGludCBvbGRU
b3BQb3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJnaW4pOwotICAgIHZvaWQgaW5zZXJ0Q29tcGFj
dElmTmVlZGVkKFJlbmRlck9iamVjdCogY2hpbGQsIENvbXBhY3RJbmZvJik7CisgICAgUmVuZGVy
Qm94KiBoYW5kbGVTcGVjaWFsQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5m
byYsIENvbXBhY3RJbmZvJiwgYm9vbCYgaGFuZGxlZCk7CisgICAgUmVuZGVyQm94KiBoYW5kbGVG
bG9hdGluZ0NoaWxkKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mLCBib29sJiBo
YW5kbGVkKTsKKyAgICBSZW5kZXJCb3gqIGhhbmRsZVBvc2l0aW9uZWRDaGlsZChSZW5kZXJCb3gq
IGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiwgYm9vbCYgaGFuZGxlZCk7CisgICAgUmVuZGVyQm94
KiBoYW5kbGVDb21wYWN0Q2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgQ29tcGFjdEluZm8mLCBib29s
JiBoYW5kbGVkKTsKKyAgICBSZW5kZXJCb3gqIGhhbmRsZVJ1bkluQ2hpbGQoUmVuZGVyQm94KiBj
aGlsZCwgYm9vbCYgaGFuZGxlZCk7CisgICAgdm9pZCBjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94
KiBjaGlsZCwgTWFyZ2luSW5mbyYsIGludCB5UG9zRXN0aW1hdGUpOworICAgIHZvaWQgY2xlYXJG
bG9hdHNJZk5lZWRlZChSZW5kZXJCb3gqIGNoaWxkLCBNYXJnaW5JbmZvJiwgaW50IG9sZFRvcFBv
c01hcmdpbiwgaW50IG9sZFRvcE5lZ01hcmdpbik7CisgICAgdm9pZCBpbnNlcnRDb21wYWN0SWZO
ZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgQ29tcGFjdEluZm8mKTsKICAgICBpbnQgZXN0aW1hdGVW
ZXJ0aWNhbFBvc2l0aW9uKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mKTsK
LSAgICB2b2lkIGRldGVybWluZUhvcml6b250YWxQb3NpdGlvbihSZW5kZXJPYmplY3QqIGNoaWxk
KTsKKyAgICB2b2lkIGRldGVybWluZUhvcml6b250YWxQb3NpdGlvbihSZW5kZXJCb3gqIGNoaWxk
KTsKICAgICB2b2lkIGhhbmRsZUJvdHRvbU9mQmxvY2soaW50IHRvcCwgaW50IGJvdHRvbSwgTWFy
Z2luSW5mbyYpOwogICAgIHZvaWQgc2V0Q29sbGFwc2VkQm90dG9tTWFyZ2luKGNvbnN0IE1hcmdp
bkluZm8mKTsKICAgICAvLyBFbmQgaGVscGVyIGZ1bmN0aW9ucyBhbmQgc3RydWN0cyB1c2VkIGJ5
IGxheW91dEJsb2NrQ2hpbGRyZW4uCiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBMaXN0SGFzaFNl
dDxSZW5kZXJPYmplY3QqPjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CisgICAgdHlwZWRlZiBM
aXN0SGFzaFNldDxSZW5kZXJCb3gqPjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgRGVw
cmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+KiBtX2Zsb2F0aW5nT2JqZWN0czsKLSAgICBM
aXN0SGFzaFNldDxSZW5kZXJPYmplY3QqPiogbV9wb3NpdGlvbmVkT2JqZWN0czsKKyAgICBMaXN0
SGFzaFNldDxSZW5kZXJCb3gqPiogbV9wb3NpdGlvbmVkT2JqZWN0czsKICAgICAgICAgIAogICAg
IC8vIEFsbG9jYXRlZCBvbmx5IHdoZW4gc29tZSBvZiB0aGVzZSBmaWVsZHMgaGF2ZSBub24tZGVm
YXVsdCB2YWx1ZXMKICAgICBzdHJ1Y3QgTWF4TWFyZ2luIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIK
KyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAg
LTYwLDEwICs2MSw2IEBAIGJvb2wgUmVuZGVyQm94OjpzX2hhZE92ZXJmbG93Q2xpcCA9IGZhbHMK
IAogUmVuZGVyQm94OjpSZW5kZXJCb3goTm9kZSogbm9kZSkKICAgICA6IFJlbmRlck9iamVjdChu
b2RlKQotICAgICwgbV93aWR0aCgwKQotICAgICwgbV9oZWlnaHQoMCkKLSAgICAsIG1feCgwKQot
ICAgICwgbV95KDApCiAgICAgLCBtX21hcmdpbkxlZnQoMCkKICAgICAsIG1fbWFyZ2luUmlnaHQo
MCkKICAgICAsIG1fbWFyZ2luVG9wKDApCkBAIC03Myw2ICs3MCw3IEBAIFJlbmRlckJveDo6UmVu
ZGVyQm94KE5vZGUqIG5vZGUpCiAgICAgLCBtX2xheWVyKDApCiAgICAgLCBtX2lubGluZUJveFdy
YXBwZXIoMCkKIHsKKyAgICBzZXRJc0JveCgpOwogfQogCiBSZW5kZXJCb3g6On5SZW5kZXJCb3go
KQpAQCAtMjE0LDYgKzIxMiwyNjQgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFJl
bmRlclN0eQogICAgICAgICBkb2N1bWVudCgpLT5zZXRUZXh0Q29sb3Ioc3R5bGUoKS0+Y29sb3Io
KSk7CiB9CiAKKworaW50IFJlbmRlckJveDo6b2Zmc2V0TGVmdCgpIGNvbnN0Cit7CisgICAgUmVu
ZGVyQm94KiBvZmZzZXRQYXIgPSBvZmZzZXRQYXJlbnQoKTsKKyAgICBpZiAoIW9mZnNldFBhcikK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaW50IHhQb3MgPSB4KCkgLSBvZmZzZXRQYXItPmJvcmRl
ckxlZnQoKTsKKyAgICBpZiAoIWlzUG9zaXRpb25lZCgpKSB7CisgICAgICAgIGlmIChpc1JlbFBv
c2l0aW9uZWQoKSkKKyAgICAgICAgICAgIHhQb3MgKz0gcmVsYXRpdmVQb3NpdGlvbk9mZnNldFgo
KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gcGFyZW50KCk7CisgICAgICAgIHdoaWxl
IChjdXJyICYmIGN1cnIgIT0gb2Zmc2V0UGFyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2hh
dCBhcmUgd2Ugc3VwcG9zZWQgdG8gZG8gaW5zaWRlIFNWRyBjb250ZW50PworICAgICAgICAgICAg
aWYgKGN1cnItPmlzQm94KCkgJiYgIWN1cnItPmlzVGFibGVSb3coKSkKKyAgICAgICAgICAgICAg
ICB4UG9zICs9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KGN1cnIpLT54KCk7CisgICAgICAgICAg
ICBjdXJyID0gY3Vyci0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9mZnNldFBh
ci0+aXNCb2R5KCkgJiYgIW9mZnNldFBhci0+aXNSZWxQb3NpdGlvbmVkKCkgJiYgIW9mZnNldFBh
ci0+aXNQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICB4UG9zICs9IG9mZnNldFBhci0+eCgpOwor
ICAgIH0KKyAgICByZXR1cm4geFBvczsKK30KKworaW50IFJlbmRlckJveDo6b2Zmc2V0VG9wKCkg
Y29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIG9mZnNldFBhciA9IG9mZnNldFBhcmVudCgpOworICAg
IGlmICghb2Zmc2V0UGFyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpbnQgeVBvcyA9IG1fZnJh
bWVSZWN0LnkoKSAtIG9mZnNldFBhci0+Ym9yZGVyVG9wKCk7CisgICAgaWYgKCFpc1Bvc2l0aW9u
ZWQoKSkgeworICAgICAgICBpZiAoaXNSZWxQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICB5UG9z
ICs9IHJlbGF0aXZlUG9zaXRpb25PZmZzZXRZKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogY3Vy
ciA9IHBhcmVudCgpOworICAgICAgICB3aGlsZSAoY3VyciAmJiBjdXJyICE9IG9mZnNldFBhcikg
eworICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgYXJlIHdlIHN1cHBvc2VkIHRvIGRvIGluc2lk
ZSBTVkcgY29udGVudD8KKyAgICAgICAgICAgIGlmIChjdXJyLT5pc0JveCgpICYmICFjdXJyLT5p
c1RhYmxlUm93KCkpCisgICAgICAgICAgICAgICAgeVBvcyArPSBzdGF0aWNfY2FzdDxSZW5kZXJC
b3gqPihjdXJyKS0+eSgpOworICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOworICAg
ICAgICB9CisgICAgICAgIGlmIChvZmZzZXRQYXItPmlzQm9keSgpICYmICFvZmZzZXRQYXItPmlz
UmVsUG9zaXRpb25lZCgpICYmICFvZmZzZXRQYXItPmlzUG9zaXRpb25lZCgpKQorICAgICAgICAg
ICAgeVBvcyArPSBvZmZzZXRQYXItPnkoKTsKKyAgICB9CisgICAgcmV0dXJuIHlQb3M7Cit9CisK
K1JlbmRlckJveCogUmVuZGVyQm94OjpvZmZzZXRQYXJlbnQoKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBJdCBmZWVscyBsaWtlIHRoaXMgZnVuY3Rpb24gY291bGQgYWxtb3N0IGJlIHdyaXR0ZW4g
dXNpbmcgY29udGFpbmluZyBibG9ja3MuCisgICAgaWYgKGlzQm9keSgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGJvb2wgc2tpcFRhYmxlcyA9IGlzUG9zaXRpb25lZCgpIHx8IGlzUmVsUG9z
aXRpb25lZCgpOworICAgIGZsb2F0IGN1cnJab29tID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
OworICAgIFJlbmRlck9iamVjdCogY3VyciA9IHBhcmVudCgpOworICAgIHdoaWxlIChjdXJyICYm
ICghY3Vyci0+ZWxlbWVudCgpIHx8CisgICAgICAgICAgICAgICAgICAgICghY3Vyci0+aXNQb3Np
dGlvbmVkKCkgJiYgIWN1cnItPmlzUmVsUG9zaXRpb25lZCgpICYmICFjdXJyLT5pc0JvZHkoKSkp
KSB7CisgICAgICAgIE5vZGUqIGVsZW1lbnQgPSBjdXJyLT5lbGVtZW50KCk7CisgICAgICAgIGlm
ICghc2tpcFRhYmxlcyAmJiBlbGVtZW50KSB7CisgICAgICAgICAgICBib29sIGlzVGFibGVFbGVt
ZW50ID0gZWxlbWVudC0+aGFzVGFnTmFtZSh0YWJsZVRhZykgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKHRkVGFnKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUodGhUYWcpOworCisj
aWYgRU5BQkxFKFdNTCkKKyAgICAgICAgICAgIGlmICghaXNUYWJsZUVsZW1lbnQgJiYgZWxlbWVu
dC0+aXNXTUxFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgaXNUYWJsZUVsZW1lbnQgPSBlbGVt
ZW50LT5oYXNUYWdOYW1lKFdNTE5hbWVzOjp0YWJsZVRhZykgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoV01MTmFtZXM6OnRkVGFnKTsKKyNl
bmRpZgorCisgICAgICAgICAgICBpZiAoaXNUYWJsZUVsZW1lbnQpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBuZXdab29tID0gY3Vyci0+c3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBpZiAoY3Vyclpvb20gIT0gbmV3Wm9vbSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjdXJyWm9vbSA9IG5ld1pvb207CisgICAgICAgIGN1
cnIgPSBjdXJyLT5wYXJlbnQoKTsKKyAgICB9CisgICAgcmV0dXJuIGN1cnIgJiYgY3Vyci0+aXNC
b3goKSA/IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KGN1cnIpIDogMDsKK30KKworLy8gTW9yZSBJ
RSBleHRlbnNpb25zLiAgY2xpZW50V2lkdGggYW5kIGNsaWVudEhlaWdodCByZXByZXNlbnQgdGhl
IGludGVyaW9yIG9mIGFuIG9iamVjdAorLy8gZXhjbHVkaW5nIGJvcmRlciBhbmQgc2Nyb2xsYmFy
LgoraW50IFJlbmRlckJveDo6Y2xpZW50V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiB3aWR0
aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKTsKK30KKworaW50IFJlbmRlckJveDo6Y2xpZW50SGVpZ2h0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCgpOworfQorCisvLyBzY3JvbGxXaWR0aC9zY3JvbGxIZWlnaHQgd2ls
bCBiZSB0aGUgc2FtZSBhcyBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgdW5sZXNzIHRoZQorLy8g
b2JqZWN0IGhhcyBvdmVyZmxvdzpoaWRkZW4vc2Nyb2xsL2F1dG8gc3BlY2lmaWVkIGFuZCBhbHNv
IGhhcyBvdmVyZmxvdy4KK2ludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgPyBtX2xheWVyLT5zY3JvbGxXaWR0aCgpIDogb3Zl
cmZsb3dXaWR0aCgpOworfQorCitpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAor
eworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSA/IG1fbGF5ZXItPnNjcm9sbEhlaWdodCgp
IDogb3ZlcmZsb3dIZWlnaHQoKTsKK30KKworaW50IFJlbmRlckJveDo6c2Nyb2xsTGVmdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpID8gbV9sYXllci0+c2Nyb2xsWE9m
ZnNldCgpIDogMDsKK30KKworaW50IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgPyBtX2xheWVyLT5zY3JvbGxZT2Zmc2V0KCkgOiAw
OworfQorCit2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCkKK3sKKyAg
ICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWE9mZnNl
dChuZXdMZWZ0KTsKK30KKwordm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9w
KQoreworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgbV9sYXllci0+c2Nyb2xs
VG9ZT2Zmc2V0KG5ld1RvcCk7Cit9CisKK3ZvaWQgUmVuZGVyQm94OjphYnNvbHV0ZVJlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsKQorewor
ICAgIC8vIEZvciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNsdWRl
IG1hcmdpbnMgc28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhlCisgICAgLy8gaW5saW5lIGJv
eGVzIGFib3ZlIGFuZCBiZWxvdyB1cyAodGh1cyBnZXR0aW5nIG1lcmdlZCB3aXRoIHRoZW0gdG8g
Zm9ybSBhIHNpbmdsZSBpcnJlZ3VsYXIKKyAgICAvLyBzaGFwZSkuCisgICAgUmVuZGVyRmxvdyog
Y29udGludWF0aW9uID0gdmlydHVhbENvbnRpbnVhdGlvbigpOworICAgIGlmICh0b3BMZXZlbCAm
JiBjb250aW51YXRpb24pIHsKKyAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QodHgsIHR5IC0g
Y29sbGFwc2VkTWFyZ2luVG9wKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
KCksIGhlaWdodCgpICsgY29sbGFwc2VkTWFyZ2luVG9wKCkgKyBjb2xsYXBzZWRNYXJnaW5Cb3R0
b20oKSkpOworICAgICAgICBjb250aW51YXRpb24tPmFic29sdXRlUmVjdHMocmVjdHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIHgoKSArIGNvbnRpbnVhdGlvbi0+
Y29udGFpbmluZ0Jsb2NrKCktPngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5IC0geSgpICsgY29udGludWF0aW9uLT5jb250YWluaW5nQmxvY2soKS0+eSgpLCB0b3BM
ZXZlbCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSwg
d2lkdGgoKSwgaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEo
KSkpOworfQorCit2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFk
PiYgcXVhZHMsIGJvb2wgdG9wTGV2ZWwpCit7CisgICAgLy8gRm9yIGJsb2NrcyBpbnNpZGUgaW5s
aW5lcywgd2UgZ28gYWhlYWQgYW5kIGluY2x1ZGUgbWFyZ2lucyBzbyB0aGF0IHdlIHJ1biByaWdo
dCB1cCB0byB0aGUKKyAgICAvLyBpbmxpbmUgYm94ZXMgYWJvdmUgYW5kIGJlbG93IHVzICh0aHVz
IGdldHRpbmcgbWVyZ2VkIHdpdGggdGhlbSB0byBmb3JtIGEgc2luZ2xlIGlycmVndWxhcgorICAg
IC8vIHNoYXBlKS4KKyAgICBSZW5kZXJGbG93KiBjb250aW51YXRpb24gPSB2aXJ0dWFsQ29udGlu
dWF0aW9uKCk7CisgICAgaWYgKHRvcExldmVsICYmIGNvbnRpbnVhdGlvbikgeworICAgICAgICBG
bG9hdFJlY3QgbG9jYWxSZWN0KDAsIC1jb2xsYXBzZWRNYXJnaW5Ub3AoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCgpLCBoZWlnaHQoKSArIGNvbGxhcHNlZE1hcmdpblRvcCgp
ICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCkpOworICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxU
b0Fic29sdXRlUXVhZChsb2NhbFJlY3QpKTsKKyAgICAgICAgY29udGludWF0aW9uLT5hYnNvbHV0
ZVF1YWRzKHF1YWRzLCB0b3BMZXZlbCk7CisgICAgfSBlbHNlCisgICAgICAgIHF1YWRzLmFwcGVu
ZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSAr
IGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpKSkpOworfQorCitJbnRSZWN0
IFJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJl
Y3QgPSBjb250ZW50Qm94UmVjdCgpOworICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fi
c29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOworICAgIHJlY3QubW92ZShhYnNQb3MueCgp
LCBhYnNQb3MueSgpKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworRmxvYXRRdWFkIFJlbmRlckJv
eDo6YWJzb2x1dGVDb250ZW50UXVhZCgpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gY29u
dGVudEJveFJlY3QoKTsKKyAgICByZXR1cm4gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
cmVjdCkpOworfQorCisKK0ludFJlY3QgUmVuZGVyQm94OjphYnNvbHV0ZU91dGxpbmVCb3VuZHMo
KSBjb25zdAoreworICAgIEludFJlY3QgYm94ID0gYm9yZGVyQm94UmVjdCgpOworICAgIGFkanVz
dFJlY3RGb3JPdXRsaW5lQW5kU2hhZG93KGJveCk7CisKKyAgICBGbG9hdFF1YWQgYWJzT3V0bGlu
ZVF1YWQgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3gpKTsKKyAgICBib3ggPSBh
YnNPdXRsaW5lUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgIGJveC5tb3ZlKHZpZXco
KS0+bGF5b3V0RGVsdGEoKSk7CisKKyAgICByZXR1cm4gYm94OworfQorCit2b2lkIFJlbmRlckJv
eDo6YWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGlu
dCB0eCwgaW50IHR5KQoreworICAgIC8vIEZvciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdv
IGFoZWFkIGFuZCBpbmNsdWRlIG1hcmdpbnMgc28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhl
CisgICAgLy8gaW5saW5lIGJveGVzIGFib3ZlIGFuZCBiZWxvdyB1cyAodGh1cyBnZXR0aW5nIG1l
cmdlZCB3aXRoIHRoZW0gdG8gZm9ybSBhIHNpbmdsZSBpcnJlZ3VsYXIKKyAgICAvLyBzaGFwZSku
CisgICAgUmVuZGVyRmxvdyogY29udGludWF0aW9uID0gdmlydHVhbENvbnRpbnVhdGlvbigpOwor
ICAgIGlmIChjb250aW51YXRpb24pIHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRGb2N1
c1JpbmdSZWN0KEludFJlY3QodHgsIHR5IC0gY29sbGFwc2VkTWFyZ2luVG9wKCksIHdpZHRoKCks
IGhlaWdodCgpICsgY29sbGFwc2VkTWFyZ2luVG9wKCkgKyBjb2xsYXBzZWRNYXJnaW5Cb3R0b20o
KSkpOworICAgICAgICBjb250aW51YXRpb24tPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIHgoKSAr
IGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCktPngoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eSAtIHkoKSArIGNvbnRpbnVhdGlvbi0+Y29udGFpbmlu
Z0Jsb2NrKCktPnkoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRk
Rm9jdXNSaW5nUmVjdChJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKK30KKwor
CitJbnRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGlvbkJveCgpIGNvbnN0Cit7CisgICAgSW50UmVj
dCByZXN1bHQ7CisgICAgaWYgKCFzdHlsZSgpLT5ib3hSZWZsZWN0KCkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgSW50UmVjdCBib3ggPSBib3JkZXJCb3hSZWN0KCk7CisgICAgcmVzdWx0
ID0gYm94OworICAgIHN3aXRjaCAoc3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5kaXJlY3Rpb24oKSkg
eworICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxvdzoKKyAgICAgICAgICAgIHJlc3VsdC5tb3Zl
KDAsIGJveC5oZWlnaHQoKSArIHJlZmxlY3Rpb25PZmZzZXQoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSZWZsZWN0aW9uQWJvdmU6CisgICAgICAgICAgICByZXN1bHQubW92
ZSgwLCAtYm94LmhlaWdodCgpIC0gcmVmbGVjdGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFJlZmxlY3Rpb25MZWZ0OgorICAgICAgICAgICAgcmVzdWx0Lm1v
dmUoLWJveC53aWR0aCgpIC0gcmVmbGVjdGlvbk9mZnNldCgpLCAwKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFJlZmxlY3Rpb25SaWdodDoKKyAgICAgICAgICAgIHJlc3VsdC5t
b3ZlKGJveC53aWR0aCgpICsgcmVmbGVjdGlvbk9mZnNldCgpLCAwKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQgUmVuZGVyQm94OjpyZWZs
ZWN0aW9uT2Zmc2V0KCkgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlKCktPmJveFJlZmxlY3QoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHN0eWxlKCktPmJveFJlZmxlY3QoKS0+ZGlyZWN0
aW9uKCkgPT0gUmVmbGVjdGlvbkxlZnQgfHwgc3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5kaXJlY3Rp
b24oKSA9PSBSZWZsZWN0aW9uUmlnaHQpCisgICAgICAgIHJldHVybiBzdHlsZSgpLT5ib3hSZWZs
ZWN0KCktPm9mZnNldCgpLmNhbGNWYWx1ZShib3JkZXJCb3hSZWN0KCkud2lkdGgoKSk7CisgICAg
cmV0dXJuIHN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCkuY2FsY1ZhbHVlKGJvcmRlckJv
eFJlY3QoKS5oZWlnaHQoKSk7Cit9CisKK0ludFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0ZWRSZWN0
KGNvbnN0IEludFJlY3QmIHIpIGNvbnN0Cit7CisgICAgaWYgKCFzdHlsZSgpLT5ib3hSZWZsZWN0
KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBJbnRSZWN0IGJveCA9IGJvcmRl
ckJveFJlY3QoKTsKKyAgICBJbnRSZWN0IHJlc3VsdCA9IHI7CisgICAgc3dpdGNoIChzdHlsZSgp
LT5ib3hSZWZsZWN0KCktPmRpcmVjdGlvbigpKSB7CisgICAgICAgIGNhc2UgUmVmbGVjdGlvbkJl
bG93OgorICAgICAgICAgICAgcmVzdWx0LnNldFkoYm94LmJvdHRvbSgpICsgcmVmbGVjdGlvbk9m
ZnNldCgpICsgKGJveC5ib3R0b20oKSAtIHIuYm90dG9tKCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFJlZmxlY3Rpb25BYm92ZToKKyAgICAgICAgICAgIHJlc3VsdC5zZXRZ
KGJveC55KCkgLSByZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3guaGVpZ2h0KCkgKyAoYm94LmJvdHRv
bSgpIC0gci5ib3R0b20oKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVm
bGVjdGlvbkxlZnQ6CisgICAgICAgICAgICByZXN1bHQuc2V0WChib3gueCgpIC0gcmVmbGVjdGlv
bk9mZnNldCgpIC0gYm94LndpZHRoKCkgKyAoYm94LnJpZ2h0KCkgLSByLnJpZ2h0KCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlZmxlY3Rpb25SaWdodDoKKyAgICAgICAg
ICAgIHJlc3VsdC5zZXRYKGJveC5yaWdodCgpICsgcmVmbGVjdGlvbk9mZnNldCgpICsgKGJveC5y
aWdodCgpIC0gci5yaWdodCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogaW50IFJlbmRlckJveDo6bWluUHJlZldpZHRoKCkgY29uc3QKIHsK
ICAgICBpZiAocHJlZldpZHRoc0RpcnR5KCkpCkBAIC0yNTQsMjIgKzUxMCwxMiBAQCB2b2lkIFJl
bmRlckJveDo6c2V0T3ZlcnJpZGVTaXplKGludCBzKQogCiBpbnQgUmVuZGVyQm94OjpvdmVycmlk
ZVdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcnJpZGVTaXplKCkgPyBvdmVycmlk
ZVNpemUoKSA6IG1fd2lkdGg7CisgICAgcmV0dXJuIGhhc092ZXJyaWRlU2l6ZSgpID8gb3ZlcnJp
ZGVTaXplKCkgOiB3aWR0aCgpOwogfQogCiBpbnQgUmVuZGVyQm94OjpvdmVycmlkZUhlaWdodCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJyaWRlU2l6ZSgpID8gb3ZlcnJpZGVTaXplKCkg
OiBtX2hlaWdodDsKLX0KLQotdm9pZCBSZW5kZXJCb3g6OnNldFBvcyhpbnQgeFBvcywgaW50IHlQ
b3MpCi17Ci0gICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGRvbid0IG1vdmUg
YXQgYWxsLgotICAgIGlmICh4UG9zID09IG1feCAmJiB5UG9zID09IG1feSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV94ID0geFBvczsKLSAgICBtX3kgPSB5UG9zOworICAgIHJldHVybiBoYXNP
dmVycmlkZVNpemUoKSA/IG92ZXJyaWRlU2l6ZSgpIDogaGVpZ2h0KCk7CiB9CiAKIGludCBSZW5k
ZXJCb3g6OmNhbGNCb3JkZXJCb3hXaWR0aChpbnQgd2lkdGgpIGNvbnN0CkBAIC0zMDMsMTAgKzU0
OSwxMCBAQCBpbnQgUmVuZGVyQm94OjpjYWxjQ29udGVudEJveEhlaWdodChpbnQgCiB9CiAKIC8v
IEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlckJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rp
b24pCiB7Ci0gICAgdHggKz0gbV94OwotICAgIHR5ICs9IG1feTsKKyAgICB0eCArPSB4KCk7Cisg
ICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CkBAIC0zMTQsMTYgKzU2MCwxNiBAQCBib29sIFJl
bmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzCiAgICAgICAgIC8vIGF0IHRoZSBtb21l
bnQgKGEgZGVtb3RlZCBpbmxpbmUgPGZvcm0+IGZvciBleGFtcGxlKS4gSWYgd2UgZXZlciBpbXBs
ZW1lbnQgYQogICAgICAgICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQtdGVzdCBtZXRob2QgKHdoaWNo
IHdlIHNob3VsZCBkbyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbnl3YXkpLAogICAgICAgICAv
LyB0aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KLSAgICAgICAgaWYgKCFjaGlsZC0+aGFz
TGF5ZXIoKSAmJiAhY2hpbGQtPmlzSW5saW5lRmxvdygpICYmIGNoaWxkLT5ub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CisgICAg
ICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgIWNoaWxkLT5pc0lubGluZUZsb3coKSAmJiBj
aGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCB0eCwgdHksIGFj
dGlvbikpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2lu
dCh4UG9zIC0gdHgsIHlQb3MgLSB0eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1
cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAv
LyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBpcyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBs
aWtlIGltYWdlcykuCi0gICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0g
SGl0VGVzdEZvcmVncm91bmQgJiYgSW50UmVjdCh0eCwgdHksIG1fd2lkdGgsIG1faGVpZ2h0KS5j
b250YWlucyh4LCB5KSkgewotICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50
UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYm
IGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwg
aGVpZ2h0KCkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKSB7CisgICAgICAgIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0eSkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTMzNCw4ICs1ODAsOCBAQCBib29sIFJlbmRlckJveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzCiAKIHZvaWQgUmVuZGVyQm94OjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgdHggKz0gbV94OwotICAgIHR5
ICs9IG1feTsKKyAgICB0eCArPSB4KCk7CisgICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwogCiAg
ICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4gSnVzdCBwYXNzIHBhaW50IHRocm91Z2ggdG8g
dGhlIGNoaWxkcmVuCiAgICAgUGFpbnRJbmZvIGNoaWxkSW5mbyhwYWludEluZm8pOwpAQCAtNDg5
LDcgKzczNSw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludE1hc2tJbWFnZXMoY29uc3QgUGEKIAog
SW50UmVjdCBSZW5kZXJCb3g6Om1hc2tDbGlwUmVjdCgpCiB7Ci0gICAgSW50UmVjdCBiYm94ID0g
Ym9yZGVyQm94KCk7CisgICAgSW50UmVjdCBiYm94ID0gYm9yZGVyQm94UmVjdCgpOwogICAgIGlm
IChzdHlsZSgpLT5tYXNrQm94SW1hZ2UoKS5pbWFnZSgpKQogICAgICAgICByZXR1cm4gYmJveDsK
ICAgICAKQEAgLTYwNiw3ICs4NTIsNyBAQCBib29sIFJlbmRlckJveDo6cmVwYWludExheWVyUmVj
dHNGb3JJbWFnCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXgobGF5ZXJSZW5kZXJlci0+aGVp
Z2h0KCkgKyBsYXllclJlbmRlcmVyLT5tYXJnaW5Ub3AoKSArIGxheWVyUmVuZGVyZXItPm1hcmdp
bkJvdHRvbSgpICsgbGF5ZXJSZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyBsYXllclJlbmRlcmVyLT5i
b3JkZXJCb3R0b20oKSwgcmgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBsYXllclJlbmRlcmVyID0gdGhpczsKLSAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyZXJSZWN0ID0gYm9yZGVyQm94KCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyUmVj
dCA9IGJvcmRlckJveFJlY3QoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAK
QEAgLTg4NywxMCArMTEzMywxMCBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRDdXN0b21IaWdobGln
aHQoaW50CiAgICAgUm9vdElubGluZUJveCogciA9IGJveFdyYXAgPyBib3hXcmFwLT5yb290KCkg
OiAwOwogICAgIGlmIChyKSB7CiAgICAgICAgIEZsb2F0UmVjdCByb290UmVjdCh0eCArIHItPnhQ
b3MoKSwgdHkgKyByLT5zZWxlY3Rpb25Ub3AoKSwgci0+d2lkdGgoKSwgci0+c2VsZWN0aW9uSGVp
Z2h0KCkpOwotICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KHR4ICsgbV94LCByb290UmVjdC55
KCksIHdpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgRmxvYXRSZWN0IGltYWdl
UmVjdCh0eCArIHgoKSwgcm9vdFJlY3QueSgpLCB3aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSk7
CiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQo
bm9kZSgpLCB0eXBlLCBpbWFnZVJlY3QsIHJvb3RSZWN0LCBiZWhpbmRUZXh0LCBmYWxzZSk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdCh0eCArIG1feCwgdHkgKyBt
X3ksIHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdCh0eCAr
IHgoKSwgdHkgKyBtX2ZyYW1lUmVjdC55KCksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAg
cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wYWludEN1c3RvbUhpZ2hsaWdodChub2RlKCksIHR5
cGUsIGltYWdlUmVjdCwgaW1hZ2VSZWN0LCBiZWhpbmRUZXh0LCBmYWxzZSk7CiAgICAgfQogfQpA
QCAtOTA3LDggKzExNTMsOCBAQCBJbnRSZWN0IFJlbmRlckJveDo6Z2V0T3ZlcmZsb3dDbGlwUmVj
dChpCiAKICAgICBpbnQgY2xpcFggPSB0eCArIGJMZWZ0OwogICAgIGludCBjbGlwWSA9IHR5ICsg
YlRvcDsKLSAgICBpbnQgY2xpcFdpZHRoID0gbV93aWR0aCAtIGJMZWZ0IC0gYm9yZGVyUmlnaHQo
KTsKLSAgICBpbnQgY2xpcEhlaWdodCA9IG1faGVpZ2h0IC0gYlRvcCAtIGJvcmRlckJvdHRvbSgp
ICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7CisgICAgaW50IGNsaXBX
aWR0aCA9IHdpZHRoKCkgLSBiTGVmdCAtIGJvcmRlclJpZ2h0KCk7CisgICAgaW50IGNsaXBIZWln
aHQgPSBoZWlnaHQoKSAtIGJUb3AgLSBib3JkZXJCb3R0b20oKSArIGJvcmRlclRvcEV4dHJhKCkg
KyBib3JkZXJCb3R0b21FeHRyYSgpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMg
aWYgd2UgaGF2ZSB0aGVtLgogICAgIGlmIChtX2xheWVyKSB7CkBAIC05MjMsMjYgKzExNjksMjYg
QEAgSW50UmVjdCBSZW5kZXJCb3g6OmdldENsaXBSZWN0KGludCB0eCwgaQogewogICAgIGludCBj
bGlwWCA9IHR4OwogICAgIGludCBjbGlwWSA9IHR5OwotICAgIGludCBjbGlwV2lkdGggPSBtX3dp
ZHRoOwotICAgIGludCBjbGlwSGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgaW50IGNsaXBXaWR0aCA9
IHdpZHRoKCk7CisgICAgaW50IGNsaXBIZWlnaHQgPSBoZWlnaHQoKTsKIAogICAgIGlmICghc3R5
bGUoKS0+Y2xpcExlZnQoKS5pc0F1dG8oKSkgewotICAgICAgICBpbnQgYyA9IHN0eWxlKCktPmNs
aXBMZWZ0KCkuY2FsY1ZhbHVlKG1fd2lkdGgpOworICAgICAgICBpbnQgYyA9IHN0eWxlKCktPmNs
aXBMZWZ0KCkuY2FsY1ZhbHVlKHdpZHRoKCkpOwogICAgICAgICBjbGlwWCArPSBjOwogICAgICAg
ICBjbGlwV2lkdGggLT0gYzsKICAgICB9CiAKICAgICBpZiAoIXN0eWxlKCktPmNsaXBSaWdodCgp
LmlzQXV0bygpKQotICAgICAgICBjbGlwV2lkdGggLT0gbV93aWR0aCAtIHN0eWxlKCktPmNsaXBS
aWdodCgpLmNhbGNWYWx1ZShtX3dpZHRoKTsKKyAgICAgICAgY2xpcFdpZHRoIC09IHdpZHRoKCkg
LSBzdHlsZSgpLT5jbGlwUmlnaHQoKS5jYWxjVmFsdWUod2lkdGgoKSk7CiAKICAgICBpZiAoIXN0
eWxlKCktPmNsaXBUb3AoKS5pc0F1dG8oKSkgewotICAgICAgICBpbnQgYyA9IHN0eWxlKCktPmNs
aXBUb3AoKS5jYWxjVmFsdWUobV9oZWlnaHQpOworICAgICAgICBpbnQgYyA9IHN0eWxlKCktPmNs
aXBUb3AoKS5jYWxjVmFsdWUoaGVpZ2h0KCkpOwogICAgICAgICBjbGlwWSArPSBjOwogICAgICAg
ICBjbGlwSGVpZ2h0IC09IGM7CiAgICAgfQogCiAgICAgaWYgKCFzdHlsZSgpLT5jbGlwQm90dG9t
KCkuaXNBdXRvKCkpCi0gICAgICAgIGNsaXBIZWlnaHQgLT0gbV9oZWlnaHQgLSBzdHlsZSgpLT5j
bGlwQm90dG9tKCkuY2FsY1ZhbHVlKG1faGVpZ2h0KTsKKyAgICAgICAgY2xpcEhlaWdodCAtPSBo
ZWlnaHQoKSAtIHN0eWxlKCktPmNsaXBCb3R0b20oKS5jYWxjVmFsdWUoaGVpZ2h0KCkpOwogCiAg
ICAgcmV0dXJuIEludFJlY3QoY2xpcFgsIGNsaXBZLCBjbGlwV2lkdGgsIGNsaXBIZWlnaHQpOwog
fQpAQCAtOTUzLDcgKzExOTksNyBAQCBpbnQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tXaWR0
aCgpIGNvCiAgICAgaWYgKCFjYikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHNocmlua1Rv
QXZvaWRGbG9hdHMoKSkKLSAgICAgICAgcmV0dXJuIGNiLT5saW5lV2lkdGgobV95KTsKKyAgICAg
ICAgcmV0dXJuIGNiLT5saW5lV2lkdGgobV9mcmFtZVJlY3QueSgpKTsKICAgICByZXR1cm4gY2It
PmF2YWlsYWJsZVdpZHRoKCk7CiB9CiAKQEAgLTEwMDAsNyArMTI0Niw3IEBAIEZsb2F0UG9pbnQg
UmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1dGUoRmwKICAgICAgICAgaWYgKHYtPmxheW91dFN0YXRl
RW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2LT5s
YXlvdXRTdGF0ZSgpOwogICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+
bV9vZmZzZXQ7Ci0gICAgICAgICAgICBvZmZzZXQuZXhwYW5kKG1feCwgbV95KTsKKyAgICAgICAg
ICAgIG9mZnNldC5leHBhbmQoeCgpLCBtX2ZyYW1lUmVjdC55KCkpOwogICAgICAgICAgICAgbG9j
YWxQb2ludCArPSBvZmZzZXQ7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9
PSBSZWxhdGl2ZVBvc2l0aW9uICYmIG1fbGF5ZXIpCiAgICAgICAgICAgICAgICAgbG9jYWxQb2lu
dCArPSBtX2xheWVyLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CkBAIC0xMDkzLDExICsxMzM5
LDExIEBAIEludFNpemUgUmVuZGVyQm94OjpvZmZzZXRGcm9tQ29udGFpbmVyKFIKICAgICAgICAg
UmVuZGVyQmxvY2sqIGNiOwogICAgICAgICBpZiAoby0+aXNCbG9ja0Zsb3coKSAmJiBzdHlsZSgp
LT5wb3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24gJiYgc3R5bGUoKS0+cG9zaXRpb24oKSAh
PSBGaXhlZFBvc2l0aW9uCiAgICAgICAgICAgICAgICAgJiYgKGNiID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyQmxvY2sqPihvKSktPmhhc0NvbHVtbnMoKSkgewotICAgICAgICAgICAgSW50UmVjdCByZWN0
KG1feCwgbV95LCAxLCAxKTsKKyAgICAgICAgICAgIEludFJlY3QgcmVjdCh4KCksIG1fZnJhbWVS
ZWN0LnkoKSwgMSwgMSk7CiAgICAgICAgICAgICBjYi0+YWRqdXN0UmVjdEZvckNvbHVtbnMocmVj
dCk7CiAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHJlY3QueCgpLCByZWN0LnkoKSk7CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZChtX3gsIG1feSk7CisgICAgICAg
ICAgICBvZmZzZXQuZXhwYW5kKHgoKSwgbV9mcmFtZVJlY3QueSgpKTsKICAgICB9CiAKICAgICBp
ZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkpCkBAIC0xMTQ0LDggKzEzOTAsNyBAQCB2b2lkIFJlbmRl
ckJveDo6cG9zaXRpb24oSW5saW5lQm94KiBib3gpCiAgICAgICAgIGJveC0+cmVtb3ZlKCk7CiAg
ICAgICAgIGJveC0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKICAgICB9IGVsc2UgaWYgKGlzUmVw
bGFjZWQoKSkgewotICAgICAgICBtX3ggPSBib3gtPnhQb3MoKTsKLSAgICAgICAgbV95ID0gYm94
LT55UG9zKCk7CisgICAgICAgIHNldExvY2F0aW9uKGJveC0+eFBvcygpLCBib3gtPnlQb3MoKSk7
CiAgICAgICAgIG1faW5saW5lQm94V3JhcHBlciA9IGJveDsKICAgICB9CiB9CkBAIC0xMTk1LDcg
KzE0NDAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlCiAgICAg
ICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIG1f
bGF5ZXIpCiAgICAgICAgICAgICAgICAgcmVjdC5tb3ZlKG1fbGF5ZXItPnJlbGF0aXZlUG9zaXRp
b25PZmZzZXQoKSk7CiAKLSAgICAgICAgICAgIHJlY3QubW92ZShtX3gsIG1feSk7CisgICAgICAg
ICAgICByZWN0Lm1vdmUoeCgpLCBtX2ZyYW1lUmVjdC55KCkpOwogICAgICAgICAgICAgcmVjdC5t
b3ZlKGxheW91dFN0YXRlLT5tX29mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUt
Pm1fY2xpcHBlZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChsYXlvdXRTdGF0ZS0+
bV9jbGlwUmVjdCk7CkBAIC0xMjExLDcgKzE0NTYsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0
ZUFic29sdXRlUmVwYWludFJlCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFBvaW50IHRvcExl
ZnQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgdG9wTGVmdC5tb3ZlKG1feCwgbV95KTsKKyAgICB0
b3BMZWZ0Lm1vdmUoeCgpLCBtX2ZyYW1lUmVjdC55KCkpOwogCiAgICAgaWYgKHN0eWxlKCktPnBv
c2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikKICAgICAgICAgZml4ZWQgPSB0cnVlOwpAQCAtMTIz
Myw3ICsxNDc4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZQog
ICAgICAgICByZWN0ID0gbV9sYXllci0+dHJhbnNmb3JtKCktPm1hcFJlY3QocmVjdCk7CiAgICAg
ICAgIC8vIEZJWE1FOiB0aGlzIGNsb2JiZXJzIHRvcExlZnQgYWRqdXN0bWVudCBkb25lIGZvciBt
dWx0aWNvbCBhYm92ZQogICAgICAgICB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOwotICAgICAg
ICB0b3BMZWZ0Lm1vdmUobV94LCBtX3kpOworICAgICAgICB0b3BMZWZ0Lm1vdmUoeCgpLCBtX2Zy
YW1lUmVjdC55KCkpOwogICAgIH0KIAogICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IEFi
c29sdXRlUG9zaXRpb24pCkBAIC0xMjY3LDI0ICsxNTEyLDE3IEBAIHZvaWQgUmVuZGVyQm94Ojpj
b21wdXRlQWJzb2x1dGVSZXBhaW50UmUKIAogdm9pZCBSZW5kZXJCb3g6OnJlcGFpbnREdXJpbmdM
YXlvdXRJZk1vdmVkKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaW50IG5ld1ggPSBtX3g7
Ci0gICAgaW50IG5ld1kgPSBtX3k7Ci0gICAgaW50IG5ld1dpZHRoID0gbV93aWR0aDsKLSAgICBp
bnQgbmV3SGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgaW50IG5ld1ggPSB4KCk7CisgICAgaW50IG5l
d1kgPSBtX2ZyYW1lUmVjdC55KCk7CisgICAgaW50IG5ld1dpZHRoID0gd2lkdGgoKTsKKyAgICBp
bnQgbmV3SGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgaWYgKHJlY3QueCgpICE9IG5ld1ggfHwgcmVj
dC55KCkgIT0gbmV3WSkgewogICAgICAgICAvLyBUaGUgY2hpbGQgbW92ZWQuICBJbnZhbGlkYXRl
IHRoZSBvYmplY3QncyBvbGQgYW5kIG5ldyBwb3NpdGlvbnMuICBXZSBoYXZlIHRvIGRvIHRoaXMK
ICAgICAgICAgLy8gc2luY2UgdGhlIG9iamVjdCBtYXkgbm90IGhhdmUgZ290dGVuIGEgbGF5b3V0
LgotICAgICAgICBtX3ggPSByZWN0LngoKTsKLSAgICAgICAgbV95ID0gcmVjdC55KCk7Ci0gICAg
ICAgIG1fd2lkdGggPSByZWN0LndpZHRoKCk7Ci0gICAgICAgIG1faGVpZ2h0ID0gcmVjdC5oZWln
aHQoKTsKKyAgICAgICAgbV9mcmFtZVJlY3QgPSByZWN0OwogICAgICAgICByZXBhaW50KCk7CiAg
ICAgICAgIHJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyh0cnVlKTsKLQotICAgICAgICBtX3ggPSBu
ZXdYOwotICAgICAgICBtX3kgPSBuZXdZOwotICAgICAgICBtX3dpZHRoID0gbmV3V2lkdGg7Ci0g
ICAgICAgIG1faGVpZ2h0ID0gbmV3SGVpZ2h0OworICAgICAgICBtX2ZyYW1lUmVjdCA9IEludFJl
Y3QobmV3WCwgbmV3WSwgbmV3V2lkdGgsIG5ld0hlaWdodCk7CiAgICAgICAgIHJlcGFpbnQoKTsK
ICAgICAgICAgcmVwYWludE92ZXJoYW5naW5nRmxvYXRzKHRydWUpOwogICAgIH0KQEAgLTEzMjks
NyArMTU2Nyw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjV2lkdGgoKQogICAgIC8vIHdpZHRoLiAg
VXNlIHRoZSB3aWR0aCBmcm9tIHRoZSBzdHlsZSBjb250ZXh0LgogICAgIGlmIChoYXNPdmVycmlk
ZVNpemUoKSAmJiAgcGFyZW50KCktPnN0eWxlKCktPmJveE9yaWVudCgpID09IEhPUklaT05UQUwK
ICAgICAgICAgICAgICYmIHBhcmVudCgpLT5pc0ZsZXhpYmxlQm94KCkgJiYgcGFyZW50KCktPmlz
RmxleGluZ0NoaWxkcmVuKCkpIHsKLSAgICAgICAgbV93aWR0aCA9IG92ZXJyaWRlU2l6ZSgpOwor
ICAgICAgICBzZXRXaWR0aChvdmVycmlkZVNpemUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTEzMzcsNyArMTU3NSw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjV2lkdGgoKQogICAg
IGJvb2wgc3RyZXRjaGluZyA9IChwYXJlbnQoKS0+c3R5bGUoKS0+Ym94QWxpZ24oKSA9PSBCU1RS
RVRDSCk7CiAgICAgYm9vbCB0cmVhdEFzUmVwbGFjZWQgPSBzaG91bGRDYWxjdWxhdGVTaXplQXNS
ZXBsYWNlZCgpICYmICghaW5WZXJ0aWNhbEJveCB8fCAhc3RyZXRjaGluZyk7CiAKLSAgICBMZW5n
dGggd2lkdGggPSAodHJlYXRBc1JlcGxhY2VkKSA/IExlbmd0aChjYWxjUmVwbGFjZWRXaWR0aCgp
LCBGaXhlZCkgOiBzdHlsZSgpLT53aWR0aCgpOworICAgIExlbmd0aCB3ID0gKHRyZWF0QXNSZXBs
YWNlZCkgPyBMZW5ndGgoY2FsY1JlcGxhY2VkV2lkdGgoKSwgRml4ZWQpIDogc3R5bGUoKS0+d2lk
dGgoKTsKIAogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIGlu
dCBjb250YWluZXJXaWR0aCA9IG1heCgwLCBjb250YWluaW5nQmxvY2tXaWR0aCgpKTsKQEAgLTEz
NTAsNDIgKzE1ODgsNDIgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNXaWR0aCgpCiAgICAgICAgIG1f
bWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldpZHRoKTsKICAg
ICAgICAgbV9tYXJnaW5SaWdodCA9IG1hcmdpblJpZ2h0LmNhbGNNaW5WYWx1ZShjb250YWluZXJX
aWR0aCk7CiAgICAgICAgIGlmICh0cmVhdEFzUmVwbGFjZWQpCi0gICAgICAgICAgICBtX3dpZHRo
ID0gbWF4KHdpZHRoLnZhbHVlKCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFk
ZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpLCBtaW5QcmVmV2lkdGgoKSk7CisgICAgICAgICAg
ICBzZXRXaWR0aChtYXgody52YWx1ZSgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSAr
IHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSwgbWluUHJlZldpZHRoKCkpKTsKIAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gV2lkdGggY2FsY3VsYXRpb25zCiAgICAgaWYg
KHRyZWF0QXNSZXBsYWNlZCkKLSAgICAgICAgbV93aWR0aCA9IHdpZHRoLnZhbHVlKCkgKyBib3Jk
ZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgp
OworICAgICAgICBzZXRXaWR0aCh3LnZhbHVlKCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdo
dCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgLy8gQ2FsY3VsYXRlIFdpZHRoCi0gICAgICAgIG1fd2lkdGggPSBjYWxjV2lkdGhVc2luZyhX
aWR0aCwgY29udGFpbmVyV2lkdGgpOworICAgICAgICBzZXRXaWR0aChjYWxjV2lkdGhVc2luZyhX
aWR0aCwgY29udGFpbmVyV2lkdGgpKTsKIAogICAgICAgICAvLyBDYWxjdWxhdGUgTWF4V2lkdGgK
ICAgICAgICAgaWYgKCFzdHlsZSgpLT5tYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkpIHsKICAgICAg
ICAgICAgIGludCBtYXhXID0gY2FsY1dpZHRoVXNpbmcoTWF4V2lkdGgsIGNvbnRhaW5lcldpZHRo
KTsKLSAgICAgICAgICAgIGlmIChtX3dpZHRoID4gbWF4VykgewotICAgICAgICAgICAgICAgIG1f
d2lkdGggPSBtYXhXOwotICAgICAgICAgICAgICAgIHdpZHRoID0gc3R5bGUoKS0+bWF4V2lkdGgo
KTsKKyAgICAgICAgICAgIGlmICh3aWR0aCgpID4gbWF4VykgeworICAgICAgICAgICAgICAgIHNl
dFdpZHRoKG1heFcpOworICAgICAgICAgICAgICAgIHcgPSBzdHlsZSgpLT5tYXhXaWR0aCgpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2FsY3VsYXRlIE1pbldpZHRo
CiAgICAgICAgIGludCBtaW5XID0gY2FsY1dpZHRoVXNpbmcoTWluV2lkdGgsIGNvbnRhaW5lcldp
ZHRoKTsKLSAgICAgICAgaWYgKG1fd2lkdGggPCBtaW5XKSB7Ci0gICAgICAgICAgICBtX3dpZHRo
ID0gbWluVzsKLSAgICAgICAgICAgIHdpZHRoID0gc3R5bGUoKS0+bWluV2lkdGgoKTsKKyAgICAg
ICAgaWYgKHdpZHRoKCkgPCBtaW5XKSB7CisgICAgICAgICAgICBzZXRXaWR0aChtaW5XKTsKKyAg
ICAgICAgICAgIHcgPSBzdHlsZSgpLT5taW5XaWR0aCgpOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgaWYgKHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSkgewotICAgICAgICBtX3dpZHRo
ID0gbWF4KG1fd2lkdGgsIG1pblByZWZXaWR0aCgpKTsKLSAgICAgICAgd2lkdGggPSBMZW5ndGgo
bV93aWR0aCwgRml4ZWQpOworICAgICAgICBzZXRXaWR0aChtYXgod2lkdGgoKSwgbWluUHJlZldp
ZHRoKCkpKTsKKyAgICAgICAgdyA9IExlbmd0aCh3aWR0aCgpLCBGaXhlZCk7CiAgICAgfQogCiAg
ICAgLy8gTWFyZ2luIGNhbGN1bGF0aW9ucwotICAgIGlmICh3aWR0aC5pc0F1dG8oKSkgeworICAg
IGlmICh3LmlzQXV0bygpKSB7CiAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQuY2Fs
Y01pblZhbHVlKGNvbnRhaW5lcldpZHRoKTsKICAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1hcmdp
blJpZ2h0LmNhbGNNaW5WYWx1ZShjb250YWluZXJXaWR0aCk7CiAgICAgfSBlbHNlIHsKQEAgLTEz
OTQsMTggKzE2MzIsMTggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNXaWR0aCgpCiAgICAgICAgIGNh
bGNIb3Jpem9udGFsTWFyZ2lucyhtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCwgY29udGFpbmVyV2lk
dGgpOwogICAgIH0KIAotICAgIGlmIChjb250YWluZXJXaWR0aCAmJiBjb250YWluZXJXaWR0aCAh
PSAobV93aWR0aCArIG1fbWFyZ2luTGVmdCArIG1fbWFyZ2luUmlnaHQpCisgICAgaWYgKGNvbnRh
aW5lcldpZHRoICYmIGNvbnRhaW5lcldpZHRoICE9ICh3aWR0aCgpICsgbV9tYXJnaW5MZWZ0ICsg
bV9tYXJnaW5SaWdodCkKICAgICAgICAgICAgICYmICFpc0Zsb2F0aW5nKCkgJiYgIWlzSW5saW5l
KCkgJiYgIWNiLT5pc0ZsZXhpYmxlQm94KCkpIHsKICAgICAgICAgaWYgKGNiLT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gY29udGFpbmVy
V2lkdGggLSBtX3dpZHRoIC0gbV9tYXJnaW5MZWZ0OworICAgICAgICAgICAgbV9tYXJnaW5SaWdo
dCA9IGNvbnRhaW5lcldpZHRoIC0gd2lkdGgoKSAtIG1fbWFyZ2luTGVmdDsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gY29udGFpbmVyV2lkdGggLSBtX3dpZHRoIC0g
bV9tYXJnaW5SaWdodDsKKyAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IGNvbnRhaW5lcldpZHRo
IC0gd2lkdGgoKSAtIG1fbWFyZ2luUmlnaHQ7CiAgICAgfQogfQogCiBpbnQgUmVuZGVyQm94Ojpj
YWxjV2lkdGhVc2luZyhXaWR0aFR5cGUgd2lkdGhUeXBlLCBpbnQgY3cpCiB7Ci0gICAgaW50IHdp
ZHRoID0gbV93aWR0aDsKKyAgICBpbnQgd2lkdGhSZXN1bHQgPSB3aWR0aCgpOwogICAgIExlbmd0
aCB3OwogICAgIGlmICh3aWR0aFR5cGUgPT0gV2lkdGgpCiAgICAgICAgIHcgPSBzdHlsZSgpLT53
aWR0aCgpOwpAQCAtMTQxOCwxNiArMTY1NiwxNiBAQCBpbnQgUmVuZGVyQm94OjpjYWxjV2lkdGhV
c2luZyhXaWR0aFR5cGUgCiAgICAgICAgIGludCBtYXJnaW5MZWZ0ID0gc3R5bGUoKS0+bWFyZ2lu
TGVmdCgpLmNhbGNNaW5WYWx1ZShjdyk7CiAgICAgICAgIGludCBtYXJnaW5SaWdodCA9IHN0eWxl
KCktPm1hcmdpblJpZ2h0KCkuY2FsY01pblZhbHVlKGN3KTsKICAgICAgICAgaWYgKGN3KQotICAg
ICAgICAgICAgd2lkdGggPSBjdyAtIG1hcmdpbkxlZnQgLSBtYXJnaW5SaWdodDsKKyAgICAgICAg
ICAgIHdpZHRoUmVzdWx0ID0gY3cgLSBtYXJnaW5MZWZ0IC0gbWFyZ2luUmlnaHQ7CiAKICAgICAg
ICAgaWYgKHNpemVzVG9JbnRyaW5zaWNXaWR0aCh3aWR0aFR5cGUpKSB7Ci0gICAgICAgICAgICB3
aWR0aCA9IG1heCh3aWR0aCwgbWluUHJlZldpZHRoKCkpOwotICAgICAgICAgICAgd2lkdGggPSBt
aW4od2lkdGgsIG1heFByZWZXaWR0aCgpKTsKKyAgICAgICAgICAgIHdpZHRoUmVzdWx0ID0gbWF4
KHdpZHRoUmVzdWx0LCBtaW5QcmVmV2lkdGgoKSk7CisgICAgICAgICAgICB3aWR0aFJlc3VsdCA9
IG1pbih3aWR0aFJlc3VsdCwgbWF4UHJlZldpZHRoKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNl
Ci0gICAgICAgIHdpZHRoID0gY2FsY0JvcmRlckJveFdpZHRoKHcuY2FsY1ZhbHVlKGN3KSk7Cisg
ICAgICAgIHdpZHRoUmVzdWx0ID0gY2FsY0JvcmRlckJveFdpZHRoKHcuY2FsY1ZhbHVlKGN3KSk7
CiAKLSAgICByZXR1cm4gd2lkdGg7CisgICAgcmV0dXJuIHdpZHRoUmVzdWx0OwogfQogCiBib29s
IFJlbmRlckJveDo6c2l6ZXNUb0ludHJpbnNpY1dpZHRoKFdpZHRoVHlwZSB3aWR0aFR5cGUpIGNv
bnN0CkBAIC0xNDcwLDIwICsxNzA4LDIwIEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjSG9yaXpvbnRh
bE1hcmdpbnMoY28KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgobWFyZ2luTGVm
dC5pc0F1dG8oKSAmJiBtYXJnaW5SaWdodC5pc0F1dG8oKSAmJiBtX3dpZHRoIDwgY29udGFpbmVy
V2lkdGgpCisgICAgaWYgKChtYXJnaW5MZWZ0LmlzQXV0bygpICYmIG1hcmdpblJpZ2h0LmlzQXV0
bygpICYmIHdpZHRoKCkgPCBjb250YWluZXJXaWR0aCkKICAgICAgICAgICAgIHx8ICghbWFyZ2lu
TGVmdC5pc0F1dG8oKSAmJiAhbWFyZ2luUmlnaHQuaXNBdXRvKCkgJiYgY29udGFpbmluZ0Jsb2Nr
KCktPnN0eWxlKCktPnRleHRBbGlnbigpID09IFdFQktJVF9DRU5URVIpKSB7Ci0gICAgICAgIG1f
bWFyZ2luTGVmdCA9IG1heCgwLCAoY29udGFpbmVyV2lkdGggLSBtX3dpZHRoKSAvIDIpOwotICAg
ICAgICBtX21hcmdpblJpZ2h0ID0gY29udGFpbmVyV2lkdGggLSBtX3dpZHRoIC0gbV9tYXJnaW5M
ZWZ0OwotICAgIH0gZWxzZSBpZiAoKG1hcmdpblJpZ2h0LmlzQXV0bygpICYmIG1fd2lkdGggPCBj
b250YWluZXJXaWR0aCkKKyAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWF4KDAsIChjb250YWluZXJX
aWR0aCAtIHdpZHRoKCkpIC8gMik7CisgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjb250YWluZXJX
aWR0aCAtIHdpZHRoKCkgLSBtX21hcmdpbkxlZnQ7CisgICAgfSBlbHNlIGlmICgobWFyZ2luUmln
aHQuaXNBdXRvKCkgJiYgd2lkdGgoKSA8IGNvbnRhaW5lcldpZHRoKQogICAgICAgICAgICAgfHwg
KCFtYXJnaW5MZWZ0LmlzQXV0bygpICYmIGNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSA9PSBSVEwgJiYgY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCktPnRleHRBbGlnbigp
ID09IFdFQktJVF9MRUZUKSkgewogICAgICAgICBtX21hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNh
bGNWYWx1ZShjb250YWluZXJXaWR0aCk7Ci0gICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjb250YWlu
ZXJXaWR0aCAtIG1fd2lkdGggLSBtX21hcmdpbkxlZnQ7Ci0gICAgfSBlbHNlIGlmICgobWFyZ2lu
TGVmdC5pc0F1dG8oKSAmJiBtX3dpZHRoIDwgY29udGFpbmVyV2lkdGgpCisgICAgICAgIG1fbWFy
Z2luUmlnaHQgPSBjb250YWluZXJXaWR0aCAtIHdpZHRoKCkgLSBtX21hcmdpbkxlZnQ7CisgICAg
fSBlbHNlIGlmICgobWFyZ2luTGVmdC5pc0F1dG8oKSAmJiB3aWR0aCgpIDwgY29udGFpbmVyV2lk
dGgpCiAgICAgICAgICAgICB8fCAoIW1hcmdpblJpZ2h0LmlzQXV0bygpICYmIGNvbnRhaW5pbmdC
bG9jaygpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgJiYgY29udGFpbmluZ0Jsb2NrKCkt
PnN0eWxlKCktPnRleHRBbGlnbigpID09IFdFQktJVF9SSUdIVCkpIHsKICAgICAgICAgbV9tYXJn
aW5SaWdodCA9IG1hcmdpblJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7Ci0gICAgICAg
IG1fbWFyZ2luTGVmdCA9IGNvbnRhaW5lcldpZHRoIC0gbV93aWR0aCAtIG1fbWFyZ2luUmlnaHQ7
CisgICAgICAgIG1fbWFyZ2luTGVmdCA9IGNvbnRhaW5lcldpZHRoIC0gd2lkdGgoKSAtIG1fbWFy
Z2luUmlnaHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhpcyBtYWtlcyBhdXRvIG1hcmdp
bnMgMCBpZiB3ZSBmYWlsZWQgYSBtX3dpZHRoIDwgY29udGFpbmVyV2lkdGggdGVzdCBhYm92ZSAo
Y3NzMi4xLCAxMC4zLjMpLgorICAgICAgICAvLyBUaGlzIG1ha2VzIGF1dG8gbWFyZ2lucyAwIGlm
IHdlIGZhaWxlZCBhIHdpZHRoKCkgPCBjb250YWluZXJXaWR0aCB0ZXN0IGFib3ZlIChjc3MyLjEs
IDEwLjMuMykuCiAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQuY2FsY01pblZhbHVl
KGNvbnRhaW5lcldpZHRoKTsKICAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1hcmdpblJpZ2h0LmNh
bGNNaW5WYWx1ZShjb250YWluZXJXaWR0aCk7CiAgICAgfQpAQCAtMTUyNSwzMCArMTc2MywzMCBA
QCB2b2lkIFJlbmRlckJveDo6Y2FsY0hlaWdodCgpCiAgICAgICAgIC8vIEJsb2NrIGNoaWxkcmVu
IG9mIGhvcml6b250YWwgZmxleGlibGUgYm94ZXMgZmlsbCB0aGUgaGVpZ2h0IG9mIHRoZSBib3gu
CiAgICAgICAgIGlmIChoLmlzQXV0bygpICYmIHBhcmVudCgpLT5pc0ZsZXhpYmxlQm94KCkgJiYg
cGFyZW50KCktPnN0eWxlKCktPmJveE9yaWVudCgpID09IEhPUklaT05UQUwKICAgICAgICAgICAg
ICAgICAmJiBwYXJlbnQoKS0+aXNTdHJldGNoaW5nQ2hpbGRyZW4oKSkgewotICAgICAgICAgICAg
aCA9IExlbmd0aChwYXJlbnQoKS0+Y29udGVudEhlaWdodCgpIC0gbWFyZ2luVG9wKCkgLSBtYXJn
aW5Cb3R0b20oKSAtCisgICAgICAgICAgICBoID0gTGVuZ3RoKHBhcmVudEJveCgpLT5jb250ZW50
SGVpZ2h0KCkgLSBtYXJnaW5Ub3AoKSAtIG1hcmdpbkJvdHRvbSgpIC0KICAgICAgICAgICAgICAg
ICAgICAgICAgYm9yZGVyVG9wKCkgLSBwYWRkaW5nVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIHBh
ZGRpbmdCb3R0b20oKSwgRml4ZWQpOwogICAgICAgICAgICAgY2hlY2tNaW5NYXhIZWlnaHQgPSBm
YWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBoZWlnaHQ7CisgICAgICAgIGludCBoZWln
aHRSZXN1bHQ7CiAgICAgICAgIGlmIChjaGVja01pbk1heEhlaWdodCkgewotICAgICAgICAgICAg
aGVpZ2h0ID0gY2FsY0hlaWdodFVzaW5nKHN0eWxlKCktPmhlaWdodCgpKTsKLSAgICAgICAgICAg
IGlmIChoZWlnaHQgPT0gLTEpCi0gICAgICAgICAgICAgICAgaGVpZ2h0ID0gbV9oZWlnaHQ7Cisg
ICAgICAgICAgICBoZWlnaHRSZXN1bHQgPSBjYWxjSGVpZ2h0VXNpbmcoc3R5bGUoKS0+aGVpZ2h0
KCkpOworICAgICAgICAgICAgaWYgKGhlaWdodFJlc3VsdCA9PSAtMSkKKyAgICAgICAgICAgICAg
ICBoZWlnaHRSZXN1bHQgPSBoZWlnaHQoKTsKICAgICAgICAgICAgIGludCBtaW5IID0gY2FsY0hl
aWdodFVzaW5nKHN0eWxlKCktPm1pbkhlaWdodCgpKTsgLy8gTGVhdmUgYXMgLTEgaWYgdW5zZXQu
Ci0gICAgICAgICAgICBpbnQgbWF4SCA9IHN0eWxlKCktPm1heEhlaWdodCgpLmlzVW5kZWZpbmVk
KCkgPyBoZWlnaHQgOiBjYWxjSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bWF4SGVpZ2h0KCkpOworICAg
ICAgICAgICAgaW50IG1heEggPSBzdHlsZSgpLT5tYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8g
aGVpZ2h0UmVzdWx0IDogY2FsY0hlaWdodFVzaW5nKHN0eWxlKCktPm1heEhlaWdodCgpKTsKICAg
ICAgICAgICAgIGlmIChtYXhIID09IC0xKQotICAgICAgICAgICAgICAgIG1heEggPSBoZWlnaHQ7
Ci0gICAgICAgICAgICBoZWlnaHQgPSBtaW4obWF4SCwgaGVpZ2h0KTsKLSAgICAgICAgICAgIGhl
aWdodCA9IG1heChtaW5ILCBoZWlnaHQpOworICAgICAgICAgICAgICAgIG1heEggPSBoZWlnaHRS
ZXN1bHQ7CisgICAgICAgICAgICBoZWlnaHRSZXN1bHQgPSBtaW4obWF4SCwgaGVpZ2h0UmVzdWx0
KTsKKyAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IG1heChtaW5ILCBoZWlnaHRSZXN1bHQpOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIC8vIFRoZSBvbmx5IHRpbWVzIHdlIGRvbid0IGNo
ZWNrIG1pbi9tYXggaGVpZ2h0IGFyZSB3aGVuIGEgZml4ZWQgbGVuZ3RoIGhhcwogICAgICAgICAg
ICAgLy8gYmVlbiBnaXZlbiBhcyBhbiBvdmVycmlkZS4gIEp1c3QgdXNlIHRoYXQuICBUaGUgdmFs
dWUgaGFzIGFscmVhZHkgYmVlbiBhZGp1c3RlZAogICAgICAgICAgICAgLy8gZm9yIGJveC1zaXpp
bmcuCi0gICAgICAgICAgICBoZWlnaHQgPSBoLnZhbHVlKCkgKyBib3JkZXJUb3AoKSArIGJvcmRl
ckJvdHRvbSgpICsgcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpOworICAgICAgICAgICAg
aGVpZ2h0UmVzdWx0ID0gaC52YWx1ZSgpICsgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSAr
IHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKTsKIAotICAgICAgICBtX2hlaWdodCA9IGhl
aWdodDsKLSAgICB9CisgICAgICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0UmVzdWx0KTsKKyAgICAg
ICAgfQogCiAgICAgLy8gV2luSUUgcXVpcms6IFRoZSA8aHRtbD4gYmxvY2sgYWx3YXlzIGZpbGxz
IHRoZSBlbnRpcmUgY2FudmFzIGluIHF1aXJrcyBtb2RlLiAgVGhlIDxib2R5PiBhbHdheXMgZmls
bHMgdGhlCiAgICAgLy8gPGh0bWw+IGJsb2NrIGluIHF1aXJrcyBtb2RlLiAgT25seSBhcHBseSB0
aGlzIHF1aXJrIGlmIHRoZSBibG9jayBpcyBub3JtYWwgZmxvdyBhbmQgbm8gaGVpZ2h0CkBAIC0x
NTU3LDEyICsxNzk1LDEyIEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjSGVpZ2h0KCkKICAgICAgICAg
aW50IG1hcmdpbnMgPSBjb2xsYXBzZWRNYXJnaW5Ub3AoKSArIGNvbGxhcHNlZE1hcmdpbkJvdHRv
bSgpOwogICAgICAgICBpbnQgdmlzSGVpZ2h0ID0gdmlldygpLT52aWV3SGVpZ2h0KCk7CiAgICAg
ICAgIGlmIChpc1Jvb3QoKSkKLSAgICAgICAgICAgIG1faGVpZ2h0ID0gbWF4KG1faGVpZ2h0LCB2
aXNIZWlnaHQgLSBtYXJnaW5zKTsKKyAgICAgICAgICAgIHNldEhlaWdodChtYXgoaGVpZ2h0KCks
IHZpc0hlaWdodCAtIG1hcmdpbnMpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpbnQg
bWFyZ2luc0JvcmRlcnNQYWRkaW5nID0gbWFyZ2lucyArIHBhcmVudCgpLT5tYXJnaW5Ub3AoKSAr
IHBhcmVudCgpLT5tYXJnaW5Cb3R0b20oKQogICAgICAgICAgICAgICAgICsgcGFyZW50KCktPmJv
cmRlclRvcCgpICsgcGFyZW50KCktPmJvcmRlckJvdHRvbSgpCiAgICAgICAgICAgICAgICAgKyBw
YXJlbnQoKS0+cGFkZGluZ1RvcCgpICsgcGFyZW50KCktPnBhZGRpbmdCb3R0b20oKTsKLSAgICAg
ICAgICAgIG1faGVpZ2h0ID0gbWF4KG1faGVpZ2h0LCB2aXNIZWlnaHQgLSBtYXJnaW5zQm9yZGVy
c1BhZGRpbmcpOworICAgICAgICAgICAgc2V0SGVpZ2h0KG1heChoZWlnaHQoKSwgdmlzSGVpZ2h0
IC0gbWFyZ2luc0JvcmRlcnNQYWRkaW5nKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjMz
LDcgKzE4NzEsNyBAQCBpbnQgUmVuZGVyQm94OjpjYWxjUGVyY2VudGFnZUhlaWdodChjb25zCiAg
ICAgICAgIGlmIChyZXN1bHQgIT0gLTEpCiAgICAgICAgICAgICByZXN1bHQgPSBjYi0+Y2FsY0Nv
bnRlbnRCb3hIZWlnaHQocmVzdWx0KTsKICAgICB9IGVsc2UgaWYgKGNiLT5pc1JlbmRlclZpZXco
KSB8fCAoY2ItPmlzQm9keSgpICYmIHN0eWxlKCktPmh0bWxIYWNrcygpKSB8fCBpc1Bvc2l0aW9u
ZWRXaXRoU3BlY2lmaWVkSGVpZ2h0KSB7Ci0gICAgICAgIC8vIERvbid0IGFsbG93IHRoaXMgdG8g
YWZmZWN0IHRoZSBibG9jaycgbV9oZWlnaHQgbWVtYmVyIHZhcmlhYmxlLCBzaW5jZSB0aGlzCisg
ICAgICAgIC8vIERvbid0IGFsbG93IHRoaXMgdG8gYWZmZWN0IHRoZSBibG9jaycgaGVpZ2h0KCkg
bWVtYmVyIHZhcmlhYmxlLCBzaW5jZSB0aGlzCiAgICAgICAgIC8vIGNhbiBnZXQgY2FsbGVkIHdo
aWxlIHRoZSBibG9jayBpcyBzdGlsbCBsYXlpbmcgb3V0IGl0cyBraWRzLgogICAgICAgICBpbnQg
b2xkSGVpZ2h0ID0gY2ItPmhlaWdodCgpOwogICAgICAgICBjYi0+Y2FsY0hlaWdodCgpOwpAQCAt
MTcxNCw3ICsxOTUyLDcgQEAgaW50IFJlbmRlckJveDo6Y2FsY1JlcGxhY2VkSGVpZ2h0VXNpbmco
TAogICAgICAgICAgICAgICAgIHJldHVybiBjYWxjQ29udGVudEJveEhlaWdodChoZWlnaHQuY2Fs
Y1ZhbHVlKG5ld0hlaWdodCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0ID0gaXNQb3NpdGlvbmVkKCkgPyBjb250YWluaW5nQmxv
Y2tIZWlnaHRGb3JQb3NpdGlvbmVkKGNiKSA6IGNiLT5hdmFpbGFibGVIZWlnaHQoKTsKKyAgICAg
ICAgICAgIGludCBhdmFpbGFibGVIZWlnaHQgPSBpc1Bvc2l0aW9uZWQoKSA/IGNvbnRhaW5pbmdC
bG9ja0hlaWdodEZvclBvc2l0aW9uZWQoY2IpIDogc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4oY2Ip
LT5hdmFpbGFibGVIZWlnaHQoKTsKIAogICAgICAgICAgICAgLy8gSXQgaXMgbmVjZXNzYXJ5IHRv
IHVzZSB0aGUgYm9yZGVyLWJveCB0byBtYXRjaCBXaW5JRSdzIGJyb2tlbgogICAgICAgICAgICAg
Ly8gYm94IG1vZGVsLiAgVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHNpemluZyBpbnNpZGUKQEAgLTE4
MzcsMTIgKzIwNzUsMTkgQEAgaW50IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrV2lkdGhGb3JQ
bwogICAgICAgICByZXR1cm4gbWF4KDAsIChmcm9tUmlnaHQgLSBmcm9tTGVmdCkpOwogICAgIH0K
IAotICAgIHJldHVybiBjb250YWluaW5nQmxvY2stPndpZHRoKCkgLSBjb250YWluaW5nQmxvY2st
PmJvcmRlckxlZnQoKSAtIGNvbnRhaW5pbmdCbG9jay0+Ym9yZGVyUmlnaHQoKSAtIGNvbnRhaW5p
bmdCbG9jay0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBSZW5kZXJCb3gqPihjb250YWluaW5nQmxvY2spLT53aWR0aCgpIC0gY29udGFpbmlu
Z0Jsb2NrLT5ib3JkZXJMZWZ0KCkgLSBjb250YWluaW5nQmxvY2stPmJvcmRlclJpZ2h0KCkgLSBj
b250YWluaW5nQmxvY2stPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKIH0KIAogaW50IFJlbmRl
ckJveDo6Y29udGFpbmluZ0Jsb2NrSGVpZ2h0Rm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJPYmpl
Y3QqIGNvbnRhaW5pbmdCbG9jaykgY29uc3QKIHsKLSAgICByZXR1cm4gY29udGFpbmluZ0Jsb2Nr
LT5oZWlnaHQoKSAtIGNvbnRhaW5pbmdCbG9jay0+Ym9yZGVyVG9wKCkgLSBjb250YWluaW5nQmxv
Y2stPmJvcmRlckJvdHRvbSgpOworICAgIGludCBoZWlnaHRSZXN1bHQ7CisgICAgaWYgKGNvbnRh
aW5pbmdCbG9jay0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICBBU1NFUlQoY29udGFpbmlu
Z0Jsb2NrLT5pc1JlbFBvc2l0aW9uZWQoKSk7CisgICAgICAgIGhlaWdodFJlc3VsdCA9IHN0YXRp
Y19jYXN0PGNvbnN0IFJlbmRlcklubGluZSo+KGNvbnRhaW5pbmdCbG9jayktPmJvdW5kaW5nQm94
SGVpZ2h0KCk7CisgICAgfSBlbHNlCisgICAgICAgIGhlaWdodFJlc3VsdCA9IHN0YXRpY19jYXN0
PGNvbnN0IFJlbmRlckJveCo+KGNvbnRhaW5pbmdCbG9jayktPmhlaWdodCgpOworICAgIAorICAg
IHJldHVybiBoZWlnaHRSZXN1bHQgLSBjb250YWluaW5nQmxvY2stPmJvcmRlclRvcCgpIC0gY29u
dGFpbmluZ0Jsb2NrLT5ib3JkZXJCb3R0b20oKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmNhbGNB
YnNvbHV0ZUhvcml6b250YWwoKQpAQCAtMTg2Nyw3ICsyMTEyLDcgQEAgdm9pZCBSZW5kZXJCb3g6
OmNhbGNBYnNvbHV0ZUhvcml6b250YWwoKQogICAgIC8vIE5PVEU6ICdzdGF0aWMnIGlzIG5vdCBh
IGxlZ2FsIHZhbHVlIGZvciAnbGVmdCcgb3IgJ3JpZ2h0JyBhcyBvZiBDU1MgMi4xLgogCiAgICAg
Ly8gRklYTUUgMzogQ2FuIHBlcmhhcHMgb3B0aW1pemUgb3V0IGNhc2VzIHdoZW4gbWF4LXdpZHRo
L21pbi13aWR0aCBhcmUgZ3JlYXRlcgotICAgIC8vIHRoYW4gb3IgbGVzcyB0aGFuIHRoZSBjb21w
dXRlZCBtX3dpZHRoLiAgQmUgY2FyZWZ1bCBvZiBib3gtc2l6aW5nIGFuZAorICAgIC8vIHRoYW4g
b3IgbGVzcyB0aGFuIHRoZSBjb21wdXRlZCB3aWR0aCgpLiAgQmUgY2FyZWZ1bCBvZiBib3gtc2l6
aW5nIGFuZAogICAgIC8vIHBlcmNlbnRhZ2UgaXNzdWVzLgogCiAgICAgLy8gVGhlIGZvbGxvd2lu
ZyBpcyBiYXNlZCBvZmYgb2YgdGhlIFczQyBXb3JraW5nIERyYWZ0IGZyb20gQXByaWwgMTEsIDIw
MDYgb2YKQEAgLTE5MjMsMjQgKzIxNjgsMjggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0
ZUhvcml6b250YWwoKQogICAgICAgICBpZiAoY29udGFpbmVyRGlyZWN0aW9uID09IExUUikgewog
ICAgICAgICAgICAgLy8gJ3N0YXRpY1gnIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhy
b3VnaCBsYXlvdXQgb2YgdGhlIHBhcmVudC4KICAgICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlv
biA9IHN0YXRpY1goKSAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJMZWZ0KCk7Ci0gICAgICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogcG8gPSBwYXJlbnQoKTsgcG8gJiYgcG8gIT0gY29udGFpbmVy
QmxvY2s7IHBvID0gcG8tPnBhcmVudCgpKQotICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9u
ICs9IHBvLT54UG9zKCk7CisgICAgICAgICAgICBmb3IgKFJlbmRlckJveCogcG8gPSBwYXJlbnRC
b3goKTsgcG8gJiYgcG8gIT0gY29udGFpbmVyQmxvY2s7IHBvID0gcG8tPnBhcmVudEJveCgpKQor
ICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uICs9IHBvLT54KCk7CiAgICAgICAgICAgICBs
ZWZ0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7CisgICAgICAgICAgICBSZW5k
ZXJCb3gqIHBvID0gcGFyZW50Qm94KCk7CiAgICAgICAgICAgICAvLyAnc3RhdGljWCcgc2hvdWxk
IGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50LgogICAg
ICAgICAgICAgaW50IHN0YXRpY1Bvc2l0aW9uID0gc3RhdGljWCgpICsgY29udGFpbmVyV2lkdGgg
KyBjb250YWluZXJCbG9jay0+Ym9yZGVyUmlnaHQoKSAtIHBvLT53aWR0aCgpOwotICAgICAgICAg
ICAgZm9yICg7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQoKSkK
LSAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiAtPSBwby0+eFBvcygpOworICAgICAgICAg
ICAgZm9yICg7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnRCb3go
KSkKKyAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiAtPSBwby0+eCgpOwogICAgICAgICAg
ICAgcmlnaHQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ3dp
ZHRoJyBjYXNlLgorICAgIGludCB3aWR0aFJlc3VsdDsKKyAgICBpbnQgeFJlc3VsdDsKICAgICBj
YWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKHN0eWxlKCktPndpZHRoKCksIGNvbnRhaW5lckJs
b2NrLCBjb250YWluZXJEaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93aWR0aCwgbV9tYXJnaW5MZWZ0LCBtX21h
cmdpblJpZ2h0LCBtX3gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhS
ZXN1bHQsIG1fbWFyZ2luTGVmdCwgbV9tYXJnaW5SaWdodCwgeFJlc3VsdCk7CisgICAgc2V0V2lk
dGgod2lkdGhSZXN1bHQpOworICAgIHNldFgoeFJlc3VsdCk7CiAKICAgICAvLyBDYWxjdWxhdGUg
Y29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtYXgtd2lkdGgnIGNhc2UuCiAgICAgaWYg
KCFzdHlsZSgpLT5tYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTE5NTQsMTEgKzIyMDMs
MTEgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJn
aW5SaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aCwg
bWF4TWFyZ2luTGVmdCwgbWF4TWFyZ2luUmlnaHQsIG1heFhQb3MpOwogCi0gICAgICAgIGlmICht
X3dpZHRoID4gbWF4V2lkdGgpIHsKLSAgICAgICAgICAgIG1fd2lkdGggPSBtYXhXaWR0aDsKKyAg
ICAgICAgaWYgKHdpZHRoKCkgPiBtYXhXaWR0aCkgeworICAgICAgICAgICAgc2V0V2lkdGgobWF4
V2lkdGgpOwogICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWF4TWFyZ2luTGVmdDsKICAgICAg
ICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXhNYXJnaW5SaWdodDsKLSAgICAgICAgICAgIG1feCA9
IG1heFhQb3M7CisgICAgICAgICAgICBtX2ZyYW1lUmVjdC5zZXRYKG1heFhQb3MpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0xOTc0LDIyICsyMjIzLDI1IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxj
QWJzb2x1dGVIb3Jpem9udGFsKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZWZ0LCByaWdodCwgbWFyZ2luTGVmdCwgbWFyZ2luUmlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGgsIG1pbk1hcmdpbkxlZnQsIG1pbk1hcmdpblJp
Z2h0LCBtaW5YUG9zKTsKIAotICAgICAgICBpZiAobV93aWR0aCA8IG1pbldpZHRoKSB7Ci0gICAg
ICAgICAgICBtX3dpZHRoID0gbWluV2lkdGg7CisgICAgICAgIGlmICh3aWR0aCgpIDwgbWluV2lk
dGgpIHsKKyAgICAgICAgICAgIHNldFdpZHRoKG1pbldpZHRoKTsKICAgICAgICAgICAgIG1fbWFy
Z2luTGVmdCA9IG1pbk1hcmdpbkxlZnQ7CiAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWlu
TWFyZ2luUmlnaHQ7Ci0gICAgICAgICAgICBtX3ggPSBtaW5YUG9zOworICAgICAgICAgICAgbV9m
cmFtZVJlY3Quc2V0WChtaW5YUG9zKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChzdHJl
dGNoZXNUb01pbkludHJpbnNpY1dpZHRoKCkgJiYgbV93aWR0aCA8IG1pblByZWZXaWR0aCgpIC0g
Ym9yZGVyc1BsdXNQYWRkaW5nKQorICAgIGlmIChzdHJldGNoZXNUb01pbkludHJpbnNpY1dpZHRo
KCkgJiYgd2lkdGgoKSA8IG1pblByZWZXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nKSB7CiAg
ICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoTGVuZ3RoKG1pblByZWZXaWR0aCgp
IC0gYm9yZGVyc1BsdXNQYWRkaW5nLCBGaXhlZCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJE
aXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVy
V2lkdGgsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0LCByaWdodCwgbWFyZ2luTGVmdCwgbWFyZ2luUmlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93aWR0aCwgbV9tYXJnaW5MZWZ0LCBtX21hcmdp
blJpZ2h0LCBtX3gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
UmVzdWx0LCBtX21hcmdpbkxlZnQsIG1fbWFyZ2luUmlnaHQsIHhSZXN1bHQpOworICAgICAgICBz
ZXRXaWR0aCh3aWR0aFJlc3VsdCk7CisgICAgICAgIHNldFgoeFJlc3VsdCk7CisgICAgfQogCi0g
ICAgLy8gUHV0IG1fd2lkdGggaW50byBjb3JyZWN0IGZvcm0uCi0gICAgbV93aWR0aCArPSBib3Jk
ZXJzUGx1c1BhZGRpbmc7CisgICAgLy8gUHV0IHdpZHRoKCkgaW50byBjb3JyZWN0IGZvcm0uCisg
ICAgc2V0V2lkdGgod2lkdGgoKSArIGJvcmRlcnNQbHVzUGFkZGluZyk7CiB9CiAKIHZvaWQgUmVu
ZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKExlbmd0aCB3aWR0aCwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBjb250YWluZXJCbG9jaywgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJl
Y3Rpb24sCkBAIC0yMjExLDIwICsyNDYzLDIyIEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1
dGVWZXJ0aWNhbCgpCiAgICAgaWYgKHRvcC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpIHsK
ICAgICAgICAgLy8gc3RhdGljWSBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2gg
bGF5b3V0IG9mIHRoZSBwYXJlbnQoKQogICAgICAgICBpbnQgc3RhdGljVG9wID0gc3RhdGljWSgp
IC0gY29udGFpbmVyQmxvY2stPmJvcmRlclRvcCgpOwotICAgICAgICBmb3IgKFJlbmRlck9iamVj
dCogcG8gPSBwYXJlbnQoKTsgcG8gJiYgcG8gIT0gY29udGFpbmVyQmxvY2s7IHBvID0gcG8tPnBh
cmVudCgpKSB7CisgICAgICAgIGZvciAoUmVuZGVyQm94KiBwbyA9IHBhcmVudEJveCgpOyBwbyAm
JiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFyZW50Qm94KCkpIHsKICAgICAgICAg
ICAgIGlmICghcG8tPmlzVGFibGVSb3coKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNUb3AgKz0g
cG8tPnlQb3MoKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNUb3AgKz0gcG8tPnkoKTsKICAgICAg
ICAgfQogICAgICAgICB0b3Auc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1RvcCk7CiAgICAgfQogCiAK
LSAgICBpbnQgaGVpZ2h0OyAvLyBOZWVkZWQgdG8gY29tcHV0ZSBvdmVyZmxvdy4KKyAgICBpbnQg
aDsgLy8gTmVlZGVkIHRvIGNvbXB1dGUgb3ZlcmZsb3cuCisgICAgaW50IHk7CiAKICAgICAvLyBD
YWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdoZWlnaHQnIGNhc2UuCiAg
ICAgY2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoc3R5bGUoKS0+aGVpZ2h0KCksIGNvbnRhaW5l
ckJsb2NrLCBjb250YWluZXJIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b3AsIGJvdHRvbSwgbWFyZ2luVG9wLCBtYXJnaW5Cb3R0b20s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LCBtX21hcmdpblRvcCwgbV9t
YXJnaW5Cb3R0b20sIG1feSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCwgbV9t
YXJnaW5Ub3AsIG1fbWFyZ2luQm90dG9tLCB5KTsKKyAgICBzZXRZKHkpOwogCiAgICAgLy8gQXZv
aWQgZG9pbmcgYW55IHdvcmsgaW4gdGhlIGNvbW1vbiBjYXNlICh3aGVyZSB0aGUgdmFsdWVzIG9m
IG1pbi1oZWlnaHQgYW5kIG1heC1oZWlnaHQgYXJlIHRoZWlyIGRlZmF1bHRzKS4KICAgICAvLyBz
ZWUgRklYTUUgMwpAQCAtMjI0MCwxMSArMjQ5NCwxMSBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fi
c29sdXRlVmVydGljYWwoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3As
IGJvdHRvbSwgbWFyZ2luVG9wLCBtYXJnaW5Cb3R0b20sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1heEhlaWdodCwgbWF4TWFyZ2luVG9wLCBtYXhNYXJnaW5Cb3R0b20sIG1h
eFlQb3MpOwogCi0gICAgICAgIGlmIChoZWlnaHQgPiBtYXhIZWlnaHQpIHsKLSAgICAgICAgICAg
IGhlaWdodCA9IG1heEhlaWdodDsKKyAgICAgICAgaWYgKGggPiBtYXhIZWlnaHQpIHsKKyAgICAg
ICAgICAgIGggPSBtYXhIZWlnaHQ7CiAgICAgICAgICAgICBtX21hcmdpblRvcCA9IG1heE1hcmdp
blRvcDsKICAgICAgICAgICAgIG1fbWFyZ2luQm90dG9tID0gbWF4TWFyZ2luQm90dG9tOwotICAg
ICAgICAgICAgbV95ID0gbWF4WVBvczsKKyAgICAgICAgICAgIG1fZnJhbWVSZWN0LnNldFkobWF4
WVBvcyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIyNTksMTkgKzI1MTMsMTkgQEAgdm9pZCBS
ZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsKCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9wLCBib3R0b20sIG1hcmdpblRvcCwgbWFyZ2luQm90dG9tLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQsIG1pbk1hcmdpblRvcCwgbWlu
TWFyZ2luQm90dG9tLCBtaW5ZUG9zKTsKIAotICAgICAgICBpZiAoaGVpZ2h0IDwgbWluSGVpZ2h0
KSB7Ci0gICAgICAgICAgICBoZWlnaHQgPSBtaW5IZWlnaHQ7CisgICAgICAgIGlmIChoIDwgbWlu
SGVpZ2h0KSB7CisgICAgICAgICAgICBoID0gbWluSGVpZ2h0OwogICAgICAgICAgICAgbV9tYXJn
aW5Ub3AgPSBtaW5NYXJnaW5Ub3A7CiAgICAgICAgICAgICBtX21hcmdpbkJvdHRvbSA9IG1pbk1h
cmdpbkJvdHRvbTsKLSAgICAgICAgICAgIG1feSA9IG1pbllQb3M7CisgICAgICAgICAgICBtX2Zy
YW1lUmVjdC5zZXRZKG1pbllQb3MpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gU2V0IGZp
bmFsIGhlaWdodCB2YWx1ZS4KLSAgICBtX2hlaWdodCA9IGhlaWdodCArIGJvcmRlcnNQbHVzUGFk
ZGluZzsKKyAgICBzZXRIZWlnaHQoaCArIGJvcmRlcnNQbHVzUGFkZGluZyk7CiB9CiAKLXZvaWQg
UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhMZW5ndGggaGVpZ2h0LCBjb25z
dCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lckJsb2NrLAordm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNv
bHV0ZVZlcnRpY2FsVmFsdWVzKExlbmd0aCBoLCBjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5l
ckJsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGludCBjb250YWluZXJIZWlnaHQsIGNvbnN0IGludCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGVuZ3RoIHRvcCwg
Y29uc3QgTGVuZ3RoIGJvdHRvbSwgY29uc3QgTGVuZ3RoIG1hcmdpblRvcCwgY29uc3QgTGVuZ3Ro
IG1hcmdpbkJvdHRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQmIGhlaWdodFZhbHVlLCBpbnQmIG1hcmdpblRvcFZhbHVlLCBpbnQmIG1hcmdpbkJvdHRv
bVZhbHVlLCBpbnQmIHlQb3MpCkBAIC0yMjgwLDE3ICsyNTM0LDE3IEBAIHZvaWQgUmVuZGVyQm94
OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHUKICAgICAvLyBjb252ZXJ0ZWQgdG8gdGhlIHN0YXRp
YyBwb3NpdGlvbiBpbiBjYWxjQWJzb2x1dGVWZXJ0aWNhbCgpCiAgICAgQVNTRVJUKCEodG9wLmlz
QXV0bygpICYmIGJvdHRvbS5pc0F1dG8oKSkpOwogCi0gICAgaW50IGNvbnRlbnRIZWlnaHQgPSBt
X2hlaWdodCAtIGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICBpbnQgY29udGVudEhlaWdodCA9IGhl
aWdodCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwogCiAgICAgaW50IHRvcFZhbHVlID0gMDsKIAot
ICAgIGJvb2wgaGVpZ2h0SXNBdXRvID0gaGVpZ2h0LmlzQXV0bygpOworICAgIGJvb2wgaGVpZ2h0
SXNBdXRvID0gaC5pc0F1dG8oKTsKICAgICBib29sIHRvcElzQXV0byA9IHRvcC5pc0F1dG8oKTsK
ICAgICBib29sIGJvdHRvbUlzQXV0byA9IGJvdHRvbS5pc0F1dG8oKTsKIAogICAgIC8vIEhlaWdo
dCBpcyBuZXZlciB1bnNvbHZlZCBmb3IgdGFibGVzLgogICAgIGlmIChpc1RhYmxlKCkpIHsKLSAg
ICAgICAgaGVpZ2h0LnNldFZhbHVlKEZpeGVkLCBjb250ZW50SGVpZ2h0KTsKKyAgICAgICAgaC5z
ZXRWYWx1ZShGaXhlZCwgY29udGVudEhlaWdodCk7CiAgICAgICAgIGhlaWdodElzQXV0byA9IGZh
bHNlOwogICAgIH0KIApAQCAtMjMwNiw3ICsyNTYwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNB
YnNvbHV0ZVZlcnRpY2FsVmFsdQogICAgICAgICAvLyBOT1RFOiAgSXQgaXMgbm90IG5lY2Vzc2Fy
eSB0byBzb2x2ZSBmb3IgJ2JvdHRvbScgaW4gdGhlIG92ZXIgY29uc3RyYWluZWQKICAgICAgICAg
Ly8gY2FzZSBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBub3QgdXNlZCBmb3IgYW55IGZ1cnRoZXIgY2Fs
Y3VsYXRpb25zLgogCi0gICAgICAgIGhlaWdodFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWlnaHQo
aGVpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpKTsKKyAgICAgICAgaGVpZ2h0VmFsdWUg
PSBjYWxjQ29udGVudEJveEhlaWdodChoLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpKTsKICAg
ICAgICAgdG9wVmFsdWUgPSB0b3AuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CiAKICAgICAg
ICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVySGVpZ2h0IC0gKHRvcFZhbHVl
ICsgaGVpZ2h0VmFsdWUgKyBib3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkgKyBib3Jk
ZXJzUGx1c1BhZGRpbmcpOwpAQCAtMjM3Myw3ICsyNjI3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNh
bGNBYnNvbHV0ZVZlcnRpY2FsVmFsdQogICAgICAgICAgICAgaGVpZ2h0VmFsdWUgPSBjb250ZW50
SGVpZ2h0OwogICAgICAgICB9IGVsc2UgaWYgKHRvcElzQXV0byAmJiAhaGVpZ2h0SXNBdXRvICYm
ICFib3R0b21Jc0F1dG8pIHsKICAgICAgICAgICAgIC8vIFJVTEUgNDogKHNvbHZlIG9mIHRvcCkK
LSAgICAgICAgICAgIGhlaWdodFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaGVpZ2h0LmNh
bGNWYWx1ZShjb250YWluZXJIZWlnaHQpKTsKKyAgICAgICAgICAgIGhlaWdodFZhbHVlID0gY2Fs
Y0NvbnRlbnRCb3hIZWlnaHQoaC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CiAgICAgICAg
ICAgICB0b3BWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGhlaWdodFZhbHVlICsgYm90dG9tLmNh
bGNWYWx1ZShjb250YWluZXJIZWlnaHQpKTsKICAgICAgICAgfSBlbHNlIGlmICghdG9wSXNBdXRv
ICYmIGhlaWdodElzQXV0byAmJiAhYm90dG9tSXNBdXRvKSB7CiAgICAgICAgICAgICAvLyBSVUxF
IDU6IChzb2x2ZSBvZiBoZWlnaHQpCkBAIC0yMzgxLDcgKzI2MzUsNyBAQCB2b2lkIFJlbmRlckJv
eDo6Y2FsY0Fic29sdXRlVmVydGljYWxWYWx1CiAgICAgICAgICAgICBoZWlnaHRWYWx1ZSA9IG1h
eCgwLCBhdmFpbGFibGVTcGFjZSAtICh0b3BWYWx1ZSArIGJvdHRvbS5jYWxjVmFsdWUoY29udGFp
bmVySGVpZ2h0KSkpOwogICAgICAgICB9IGVsc2UgaWYgKCF0b3BJc0F1dG8gJiYgIWhlaWdodElz
QXV0byAmJiBib3R0b21Jc0F1dG8pIHsKICAgICAgICAgICAgIC8vIFJVTEUgNjogKG5vIG5lZWQg
c29sdmUgb2YgYm90dG9tKQotICAgICAgICAgICAgaGVpZ2h0VmFsdWUgPSBjYWxjQ29udGVudEJv
eEhlaWdodChoZWlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkpOworICAgICAgICAgICAg
aGVpZ2h0VmFsdWUgPSBjYWxjQ29udGVudEJveEhlaWdodChoLmNhbGNWYWx1ZShjb250YWluZXJI
ZWlnaHQpKTsKICAgICAgICAgICAgIHRvcFZhbHVlID0gdG9wLmNhbGNWYWx1ZShjb250YWluZXJI
ZWlnaHQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjQyMiw4ICsyNjc2LDggQEAgdm9pZCBSZW5k
ZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxSZQogICAgIC8vIE5PVEU6IFRoaXMgdmFsdWUg
b2Ygd2lkdGggaXMgRklOQUwgaW4gdGhhdCB0aGUgbWluL21heCB3aWR0aCBjYWxjdWxhdGlvbnMK
ICAgICAvLyBhcmUgZGVhbHQgd2l0aCBpbiBjYWxjUmVwbGFjZWRXaWR0aCgpLiAgVGhpcyBtZWFu
cyB0aGF0IHRoZSBzdGVwcyB0byBwcm9kdWNlCiAgICAgLy8gY29ycmVjdCBtYXgvbWluIGluIHRo
ZSBub24tcmVwbGFjZWQgdmVyc2lvbiwgYXJlIG5vdCBuZWNlc3NhcnkuCi0gICAgbV93aWR0aCA9
IGNhbGNSZXBsYWNlZFdpZHRoKCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFk
ZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpOwotICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFj
ZSA9IGNvbnRhaW5lcldpZHRoIC0gbV93aWR0aDsKKyAgICBzZXRXaWR0aChjYWxjUmVwbGFjZWRX
aWR0aCgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdMZWZ0KCkgKyBw
YWRkaW5nUmlnaHQoKSk7CisgICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVy
V2lkdGggLSB3aWR0aCgpOwogCiAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCiAgICAgICogMi4gSWYg
Ym90aCAnbGVmdCcgYW5kICdyaWdodCcgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCB0aGVuIGlmICdk
aXJlY3Rpb24nCkBAIC0yNDM2LDE1ICsyNjkwLDE1IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJz
b2x1dGVIb3Jpem9udGFsUmUKICAgICAgICAgaWYgKGNvbnRhaW5lckRpcmVjdGlvbiA9PSBMVFIp
IHsKICAgICAgICAgICAgIC8vICdzdGF0aWNYJyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0
IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQuCiAgICAgICAgICAgICBpbnQgc3RhdGljUG9z
aXRpb24gPSBzdGF0aWNYKCkgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyTGVmdCgpOwotICAgICAg
ICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7IHBvICYmIHBvICE9IGNvbnRh
aW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQoKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNQb3Np
dGlvbiArPSBwby0+eFBvcygpOworICAgICAgICAgICAgZm9yIChSZW5kZXJCb3gqIHBvID0gcGFy
ZW50Qm94KCk7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnRCb3go
KSkKKyAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBwby0+eCgpOwogICAgICAgICAg
ICAgbGVmdC5zZXRWYWx1ZShGaXhlZCwgc3RhdGljUG9zaXRpb24pOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOworICAgICAgICAgICAg
UmVuZGVyQm94KiBwbyA9IHBhcmVudEJveCgpOwogICAgICAgICAgICAgLy8gJ3N0YXRpY1gnIHNo
b3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlvdXQgb2YgdGhlIHBhcmVudC4K
ICAgICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9IHN0YXRpY1goKSArIGNvbnRhaW5lcldp
ZHRoICsgY29udGFpbmVyQmxvY2stPmJvcmRlclJpZ2h0KCkgLSBwby0+d2lkdGgoKTsKLSAgICAg
ICAgICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFyZW50
KCkpCi0gICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0gcG8tPnhQb3MoKTsKKyAgICAg
ICAgICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFyZW50
Qm94KCkpCisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0gcG8tPngoKTsKICAgICAg
ICAgICAgIHJpZ2h0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yNTQxLDcgKzI3OTUsNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRl
SG9yaXpvbnRhbFJlCiAgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgLy8gTk9URTogIEl0IGlz
IG5vdCBuZWNlc3NhcnkgdG8gc29sdmUgZm9yICdyaWdodCcgd2hlbiB0aGUgZGlyZWN0aW9uIGlz
CiAgICAgLy8gTFRSIGJlY2F1c2UgdGhlIHZhbHVlIGlzIG5vdCB1c2VkLgotICAgIGludCB0b3Rh
bFdpZHRoID0gbV93aWR0aCArIGxlZnRWYWx1ZSArIHJpZ2h0VmFsdWUgKyAgbV9tYXJnaW5MZWZ0
ICsgbV9tYXJnaW5SaWdodDsKKyAgICBpbnQgdG90YWxXaWR0aCA9IHdpZHRoKCkgKyBsZWZ0VmFs
dWUgKyByaWdodFZhbHVlICsgIG1fbWFyZ2luTGVmdCArIG1fbWFyZ2luUmlnaHQ7CiAgICAgaWYg
KHRvdGFsV2lkdGggPiBjb250YWluZXJXaWR0aCAmJiAoY29udGFpbmVyRGlyZWN0aW9uID09IFJU
TCkpCiAgICAgICAgIGxlZnRWYWx1ZSA9IGNvbnRhaW5lcldpZHRoIC0gKHRvdGFsV2lkdGggLSBs
ZWZ0VmFsdWUpOwogCkBAIC0yNTU2LDEyICsyODEwLDEyIEBAIHZvaWQgUmVuZGVyQm94OjpjYWxj
QWJzb2x1dGVIb3Jpem9udGFsUmUKICAgICAgICAgSW5saW5lRmxvd0JveCogZmlyc3RMaW5lID0g
Zmxvdy0+Zmlyc3RMaW5lQm94KCk7CiAgICAgICAgIElubGluZUZsb3dCb3gqIGxhc3RMaW5lID0g
Zmxvdy0+bGFzdExpbmVCb3goKTsKICAgICAgICAgaWYgKGZpcnN0TGluZSAmJiBsYXN0TGluZSAm
JiBmaXJzdExpbmUgIT0gbGFzdExpbmUpIHsKLSAgICAgICAgICAgIG1feCA9IGxlZnRWYWx1ZSAr
IG1fbWFyZ2luTGVmdCArIGxhc3RMaW5lLT5ib3JkZXJMZWZ0KCkgKyAobGFzdExpbmUtPnhQb3Mo
KSAtIGZpcnN0TGluZS0+eFBvcygpKTsKKyAgICAgICAgICAgIG1fZnJhbWVSZWN0LnNldFgobGVm
dFZhbHVlICsgbV9tYXJnaW5MZWZ0ICsgbGFzdExpbmUtPmJvcmRlckxlZnQoKSArIChsYXN0TGlu
ZS0+eFBvcygpIC0gZmlyc3RMaW5lLT54UG9zKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIG1feCA9IGxlZnRWYWx1ZSArIG1fbWFyZ2luTGVmdCArIGNv
bnRhaW5lckJsb2NrLT5ib3JkZXJMZWZ0KCk7CisgICAgbV9mcmFtZVJlY3Quc2V0WChsZWZ0VmFs
dWUgKyBtX21hcmdpbkxlZnQgKyBjb250YWluZXJCbG9jay0+Ym9yZGVyTGVmdCgpKTsKIH0KIAog
dm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsUmVwbGFjZWQoKQpAQCAtMjU5MSw4
ICsyODQ1LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsUmVwbAogICAg
IC8vIE5PVEU6IFRoaXMgdmFsdWUgb2YgaGVpZ2h0IGlzIEZJTkFMIGluIHRoYXQgdGhlIG1pbi9t
YXggaGVpZ2h0IGNhbGN1bGF0aW9ucwogICAgIC8vIGFyZSBkZWFsdCB3aXRoIGluIGNhbGNSZXBs
YWNlZEhlaWdodCgpLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBzdGVwcyB0byBwcm9kdWNlCiAgICAg
Ly8gY29ycmVjdCBtYXgvbWluIGluIHRoZSBub24tcmVwbGFjZWQgdmVyc2lvbiwgYXJlIG5vdCBu
ZWNlc3NhcnkuCi0gICAgbV9oZWlnaHQgPSBjYWxjUmVwbGFjZWRIZWlnaHQoKSArIGJvcmRlclRv
cCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCk7Ci0g
ICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVySGVpZ2h0IC0gbV9oZWlnaHQ7
CisgICAgc2V0SGVpZ2h0KGNhbGNSZXBsYWNlZEhlaWdodCgpICsgYm9yZGVyVG9wKCkgKyBib3Jk
ZXJCb3R0b20oKSArIHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKSk7CisgICAgY29uc3Qg
aW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVySGVpZ2h0IC0gaGVpZ2h0KCk7CiAKICAgICAv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKlwKICAgICAgKiAyLiBJZiBib3RoICd0b3AnIGFuZCAnYm90dG9tJyBo
YXZlIHRoZSB2YWx1ZSAnYXV0bycsIHJlcGxhY2UgJ3RvcCcKQEAgLTI2MDIsOSArMjg1Niw5IEBA
IHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFJlcGwKICAgICBpZiAodG9wLmlz
QXV0bygpICYmIGJvdHRvbS5pc0F1dG8oKSkgewogICAgICAgICAvLyBzdGF0aWNZIHNob3VsZCBh
bHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlvdXQgb2YgdGhlIHBhcmVudCgpLgogICAg
ICAgICBpbnQgc3RhdGljVG9wID0gc3RhdGljWSgpIC0gY29udGFpbmVyQmxvY2stPmJvcmRlclRv
cCgpOwotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogcG8gPSBwYXJlbnQoKTsgcG8gJiYgcG8g
IT0gY29udGFpbmVyQmxvY2s7IHBvID0gcG8tPnBhcmVudCgpKSB7CisgICAgICAgIGZvciAoUmVu
ZGVyQm94KiBwbyA9IHBhcmVudEJveCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8g
PSBwby0+cGFyZW50Qm94KCkpIHsKICAgICAgICAgICAgIGlmICghcG8tPmlzVGFibGVSb3coKSkK
LSAgICAgICAgICAgICAgICBzdGF0aWNUb3AgKz0gcG8tPnlQb3MoKTsKKyAgICAgICAgICAgICAg
ICBzdGF0aWNUb3AgKz0gcG8tPnkoKTsKICAgICAgICAgfQogICAgICAgICB0b3Auc2V0VmFsdWUo
Rml4ZWQsIHN0YXRpY1RvcCk7CiAgICAgfQpAQCAtMjY5Myw3ICsyOTQ3LDcgQEAgdm9pZCBSZW5k
ZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsUmVwbAogICAgIC8vIG9yIG5vdC4KIAogICAgIC8v
IFVzZSBjb21wdXRlZCB2YWx1ZXMgdG8gY2FsY3VsYXRlIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbi4K
LSAgICBtX3kgPSB0b3BWYWx1ZSArIG1fbWFyZ2luVG9wICsgY29udGFpbmVyQmxvY2stPmJvcmRl
clRvcCgpOworICAgIG1fZnJhbWVSZWN0LnNldFkodG9wVmFsdWUgKyBtX21hcmdpblRvcCArIGNv
bnRhaW5lckJsb2NrLT5ib3JkZXJUb3AoKSk7CiB9CiAKIEludFJlY3QgUmVuZGVyQm94Ojpsb2Nh
bENhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lk
dGhUb0VuZE9mTGluZSkKQEAgLTI3MDUsMTEgKzI5NTksMTEgQEAgSW50UmVjdCBSZW5kZXJCb3g6
OmxvY2FsQ2FyZXRSZWN0KElubGluZQogCiAgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgYm9yZGVy
IGFuZCBwYWRkaW5nPwogICAgIGNvbnN0IGludCBjYXJldFdpZHRoID0gMTsKLSAgICBJbnRSZWN0
IHJlY3QoeFBvcygpLCB5UG9zKCksIGNhcmV0V2lkdGgsIG1faGVpZ2h0KTsKKyAgICBJbnRSZWN0
IHJlY3QoeCgpLCB5KCksIGNhcmV0V2lkdGgsIGhlaWdodCgpKTsKICAgICBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiA9IGJveCA/IGJveC0+ZGlyZWN0aW9uKCkgOiBzdHlsZSgpLT5kaXJlY3Rpb24o
KTsKIAogICAgIGlmICgoIWNhcmV0T2Zmc2V0KSBeIChkaXJlY3Rpb24gPT0gTFRSKSkKLSAgICAg
ICAgcmVjdC5tb3ZlKEludFNpemUobV93aWR0aCAtIGNhcmV0V2lkdGgsIDApKTsKKyAgICAgICAg
cmVjdC5tb3ZlKEludFNpemUod2lkdGgoKSAtIGNhcmV0V2lkdGgsIDApKTsKIAogICAgIGlmIChi
b3gpIHsKICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGJveC0+cm9vdCgpOwpAQCAt
MjczMSwxOCArMjk4NSwxOCBAQCBJbnRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5s
aW5lCiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGZvbnRIZWlnaHQpOwogCiAgICAgaWYgKGV4dHJh
V2lkdGhUb0VuZE9mTGluZSkKLSAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IHhQb3Mo
KSArIG1fd2lkdGggLSByZWN0LnJpZ2h0KCk7CisgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxp
bmUgPSB4KCkgKyB3aWR0aCgpIC0gcmVjdC5yaWdodCgpOwogCiAgICAgLy8gTW92ZSB0byBsb2Nh
bCBjb29yZHMKLSAgICByZWN0Lm1vdmUoLXhQb3MoKSwgLXlQb3MoKSk7CisgICAgcmVjdC5tb3Zl
KC14KCksIC15KCkpOwogICAgIHJldHVybiByZWN0OwogfQogCiBpbnQgUmVuZGVyQm94Ojpsb3dl
c3RQb3NpdGlvbihib29sIC8qaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IqLywgYm9vbCBpbmNsdWRl
U2VsZikgY29uc3QKIHsKLSAgICBpZiAoIWluY2x1ZGVTZWxmIHx8ICFtX3dpZHRoKQorICAgIGlm
ICghaW5jbHVkZVNlbGYgfHwgIXdpZHRoKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGludCBi
b3R0b20gPSBtX2hlaWdodDsKKyAgICBpbnQgYm90dG9tID0gaGVpZ2h0KCk7CiAgICAgaWYgKGlz
UmVsUG9zaXRpb25lZCgpKQogICAgICAgICBib3R0b20gKz0gcmVsYXRpdmVQb3NpdGlvbk9mZnNl
dFkoKTsKICAgICByZXR1cm4gYm90dG9tOwpAQCAtMjc1MCw5ICszMDA0LDkgQEAgaW50IFJlbmRl
ckJveDo6bG93ZXN0UG9zaXRpb24oYm9vbCAvKmluYwogCiBpbnQgUmVuZGVyQm94OjpyaWdodG1v
c3RQb3NpdGlvbihib29sIC8qaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IqLywgYm9vbCBpbmNsdWRl
U2VsZikgY29uc3QKIHsKLSAgICBpZiAoIWluY2x1ZGVTZWxmIHx8ICFtX2hlaWdodCkKKyAgICBp
ZiAoIWluY2x1ZGVTZWxmIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaW50
IHJpZ2h0ID0gbV93aWR0aDsKKyAgICBpbnQgcmlnaHQgPSB3aWR0aCgpOwogICAgIGlmIChpc1Jl
bFBvc2l0aW9uZWQoKSkKICAgICAgICAgcmlnaHQgKz0gcmVsYXRpdmVQb3NpdGlvbk9mZnNldFgo
KTsKICAgICByZXR1cm4gcmlnaHQ7CkBAIC0yNzYwLDEyICszMDE0LDIxIEBAIGludCBSZW5kZXJC
b3g6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgLyoKIAogaW50IFJlbmRlckJveDo6bGVmdG1vc3RQ
b3NpdGlvbihib29sIC8qaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IqLywgYm9vbCBpbmNsdWRlU2Vs
ZikgY29uc3QKIHsKLSAgICBpZiAoIWluY2x1ZGVTZWxmIHx8ICFtX2hlaWdodCkKLSAgICAgICAg
cmV0dXJuIG1fd2lkdGg7CisgICAgaWYgKCFpbmNsdWRlU2VsZiB8fCAhaGVpZ2h0KCkpCisgICAg
ICAgIHJldHVybiB3aWR0aCgpOwogICAgIGludCBsZWZ0ID0gMDsKICAgICBpZiAoaXNSZWxQb3Np
dGlvbmVkKCkpCiAgICAgICAgIGxlZnQgKz0gcmVsYXRpdmVQb3NpdGlvbk9mZnNldFgoKTsKICAg
ICByZXR1cm4gbGVmdDsKIH0KIAorI2lmIEVOQUJMRShTVkcpCisKK1RyYW5zZm9ybWF0aW9uTWF0
cml4IFJlbmRlckJveDo6bG9jYWxUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgxLCAwLCAwLCAxLCB4KCksIHkoKSk7Cit9CisKKyNlbmRpZgorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24g
NDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBlbnVtIFdpZHRo
VHlwZSB7IFdpZHRoLCBNaW5XaWR0aCwgTWF4V2lkdGggfTsKK2VudW0gV2lkdGhUeXBlIHsgV2lk
dGgsIE1pbldpZHRoLCBNYXhXaWR0aCB9OwogCiBjbGFzcyBSZW5kZXJCb3ggOiBwdWJsaWMgUmVu
ZGVyT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTM2LDYgKzM2LDEwMSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyQm94
IjsgfQogCisgICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC54KCk7IH0KKyAg
ICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LnkoKSArIGJvcmRlclRvcEV4dHJh
KCk7IH0gLy8gRklYTUU6IE5lZWQgdG8gZGVhbCB3aXRoIHRoZSBib3JkZXJUb3BFeHRyYSgpIGxp
ZSBpbiBhIHNhbmUgd2F5LgorICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVS
ZWN0LndpZHRoKCk7IH0KKyAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3QuaGVpZ2h0KCk7IH0KKyAgICAKKyAgICB2b2lkIHNldFgoaW50IHgpIHsgbV9mcmFtZVJlY3Qu
c2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShpbnQgeSkgeyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9
CisgICAgdm9pZCBzZXRXaWR0aChpbnQgd2lkdGgpIHsgbV9mcmFtZVJlY3Quc2V0V2lkdGgod2lk
dGgpOyB9CisgICAgdm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBtX2ZyYW1lUmVjdC5zZXRI
ZWlnaHQoaGVpZ2h0KTsgfQorICAgIAorICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZVJlY3QubG9jYXRpb24oKTsgfSAvLyBGSVhNRTogQmUgYXdhcmUgdGhhdCB0
aGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIHgoKSwgeSgpIGJlY2F1c2Ugb2YgeSgpJ3MgYm9yZGVy
VG9wRXh0cmEoKSBsaWUhCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZVJlY3Quc2l6ZSgpOyB9CisKKyAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEludFBvaW50JiBs
b2NhdGlvbikgeyBzZXRMb2NhdGlvbihsb2NhdGlvbi54KCksIGxvY2F0aW9uLnkoKSk7IH0KKyAg
ICB2b2lkIHNldExvY2F0aW9uKGludCB4LCBpbnQgeSkKKyAgICB7CisgICAgICAgIC8vIE9wdGlt
aXplIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBkb24ndCBtb3ZlIGF0IGFsbC4KKyAgICAgICAgaWYg
KHggPT0gbV9mcmFtZVJlY3QueCgpICYmIHkgPT0gbV9mcmFtZVJlY3QueSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBtX2ZyYW1lUmVjdC5zZXRYKHgpOworICAgICAgICBtX2ZyYW1l
UmVjdC5zZXRZKHkpOworICAgIH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSkgeyBtX2ZyYW1lUmVjdC5zZXRTaXplKHNpemUpOyB9CisgICAgdm9pZCBtb3ZlKGludCBkeCwg
aW50IGR5KSB7IG1fZnJhbWVSZWN0Lm1vdmUoZHgsIGR5KTsgfQorCisgICAgSW50UmVjdCBmcmFt
ZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdDsgfQorICAgIHZvaWQgc2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9mcmFtZVJlY3QgPSByZWN0OyB9CisKKyAgICBJ
bnRSZWN0IGJvcmRlckJveFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KDAsIC1ib3JkZXJU
b3BFeHRyYSgpLCB3aWR0aCgpLCBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJC
b3R0b21FeHRyYSgpKTsgfQorICAgIAorICAgIC8vIFRoZSBjb250ZW50IGFyZWEgb2YgdGhlIGJv
eCAoZXhjbHVkZXMgcGFkZGluZyBhbmQgYm9yZGVyKS4KKyAgICBJbnRSZWN0IGNvbnRlbnRCb3hS
ZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgp
LCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSwgY29udGVudFdpZHRoKCksIGNvbnRlbnRIZWln
aHQoKSk7IH0KKyAgICAvLyBUaGUgY29udGVudCBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBJZ25v
cmVzIHRyYW5zZm9ybXMuCisgICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdDsK
KyAgICAvLyBUaGUgY29udGVudCBib3ggY29udmVydGVkIHRvIGFic29sdXRlIGNvb3JkcyAodGFr
aW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50KS4KKyAgICBGbG9hdFF1YWQgYWJzb2x1dGVDb250
ZW50UXVhZCgpIGNvbnN0OworCisgICAgLy8gQm91bmRzIG9mIHRoZSBvdXRsaW5lIGJveCBpbiBh
YnNvbHV0ZSBjb29yZHMuIFJlc3BlY3RzIHRyYW5zZm9ybXMKKyAgICB2aXJ0dWFsIEludFJlY3Qg
YWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3Vz
UmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsKKworICAgIC8vIFVz
ZSB0aGlzIHdpdGggY2F1dGlvbiEgTm8gdHlwZSBjaGVja2luZyBpcyBkb25lIQorICAgIFJlbmRl
ckJveCogcHJldmlvdXNTaWJsaW5nQm94KCkgY29uc3QgeyBBU1NFUlQoIXByZXZpb3VzU2libGlu
ZygpIHx8IHByZXZpb3VzU2libGluZygpLT5pc0JveCgpKTsgcmV0dXJuIHN0YXRpY19jYXN0PFJl
bmRlckJveCo+KHByZXZpb3VzU2libGluZygpKTsgfQorICAgIFJlbmRlckJveCogbmV4dFNpYmxp
bmdCb3goKSBjb25zdCB7IEFTU0VSVCghbmV4dFNpYmxpbmcoKSB8fCBuZXh0U2libGluZygpLT5p
c0JveCgpKTsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG5leHRTaWJsaW5nKCkpOyB9
CisgICAgUmVuZGVyQm94KiBwYXJlbnRCb3goKSBjb25zdCB7IEFTU0VSVCghcGFyZW50KCkgfHwg
cGFyZW50KCktPmlzQm94KCkpOyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocGFyZW50
KCkpOyB9CisKKyAgICAvLyBUaGUgaGVpZ2h0IG9mIGEgYmxvY2sgd2hlbiB5b3UgaW5jbHVkZSBu
b3JtYWwgZmxvdyBvdmVyZmxvdyBzcGlsbGFnZSBvdXQgb2YgdGhlIGJvdHRvbQorICAgIC8vIG9m
IHRoZSBibG9jayAoZS5nLiwgYSA8ZGl2IHN0eWxlPSJoZWlnaHQ6MjVweCI+IHRoYXQgaGFzIGEg
MTAwcHggdGFsbCBpbWFnZSBpbnNpZGUKKyAgICAvLyBpdCB3b3VsZCBoYXZlIGFuIG92ZXJmbG93
IGhlaWdodCBvZiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIDEwMHB4LgorICAgIHZpcnR1
YWwgaW50IG92ZXJmbG93SGVpZ2h0KGJvb2wgLyppbmNsdWRlSW50ZXJpb3IqLyA9IHRydWUpIGNv
bnN0IHsgcmV0dXJuIGhlaWdodCgpOyB9CisgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dXaWR0aChi
b29sIC8qaW5jbHVkZUludGVyaW9yKi8gPSB0cnVlKSBjb25zdCB7IHJldHVybiB3aWR0aCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldE92ZXJmbG93SGVpZ2h0KGludCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHNldE92ZXJmbG93V2lkdGgoaW50KSB7IH0KKyAgICB2aXJ0dWFsIGludCBvdmVyZmxv
d0xlZnQoYm9vbCAvKmluY2x1ZGVJbnRlcmlvciovID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgaW50IG92ZXJmbG93VG9wKGJvb2wgLyppbmNsdWRlSW50ZXJpb3IqLyA9
IHRydWUpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIEludFJlY3Qgb3ZlcmZsb3dS
ZWN0KGJvb2wgLyppbmNsdWRlSW50ZXJpb3IqLyA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIGJvcmRl
ckJveFJlY3QoKTsgfQorCisgICAgaW50IGNvbnRlbnRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNs
aWVudFdpZHRoKCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCk7IH0KKyAgICBpbnQg
Y29udGVudEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNsaWVudEhlaWdodCgpIC0gcGFkZGluZ1Rv
cCgpIC0gcGFkZGluZ0JvdHRvbSgpOyB9CisKKyAgICAvLyBJRSBleHRlbnNpb25zLiBVc2VkIHRv
IGNhbGN1bGF0ZSBvZmZzZXRXaWR0aC9IZWlnaHQuICBPdmVycmlkZGVuIGJ5IGlubGluZXMgKFJl
bmRlckZsb3cpCisgICAgLy8gdG8gcmV0dXJuIHRoZSByZW1haW5pbmcgd2lkdGggb24gYSBnaXZl
biBsaW5lIChhbmQgdGhlIGhlaWdodCBvZiBhIHNpbmdsZSBsaW5lKS4KKyAgICB2aXJ0dWFsIGlu
dCBvZmZzZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIGlu
dCBvZmZzZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJh
KCkgKyBib3JkZXJCb3R0b21FeHRyYSgpOyB9CisgICAgdmlydHVhbCBpbnQgb2Zmc2V0TGVmdCgp
IGNvbnN0OworICAgIHZpcnR1YWwgaW50IG9mZnNldFRvcCgpIGNvbnN0OworICAgIHZpcnR1YWwg
UmVuZGVyQm94KiBvZmZzZXRQYXJlbnQoKSBjb25zdDsKKworICAgIC8vIE1vcmUgSUUgZXh0ZW5z
aW9ucy4gIGNsaWVudFdpZHRoIGFuZCBjbGllbnRIZWlnaHQgcmVwcmVzZW50IHRoZSBpbnRlcmlv
ciBvZiBhbiBvYmplY3QKKyAgICAvLyBleGNsdWRpbmcgYm9yZGVyIGFuZCBzY3JvbGxiYXIuICBj
bGllbnRMZWZ0L1RvcCBhcmUganVzdCB0aGUgYm9yZGVyTGVmdFdpZHRoIGFuZCBib3JkZXJUb3BX
aWR0aC4KKyAgICBpbnQgY2xpZW50TGVmdCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKTsg
fQorICAgIGludCBjbGllbnRUb3AoKSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKTsgfQorICAg
IGludCBjbGllbnRXaWR0aCgpIGNvbnN0OworICAgIGludCBjbGllbnRIZWlnaHQoKSBjb25zdDsK
KworICAgIC8vIHNjcm9sbFdpZHRoL3Njcm9sbEhlaWdodCB3aWxsIGJlIHRoZSBzYW1lIGFzIGNs
aWVudFdpZHRoL2NsaWVudEhlaWdodCB1bmxlc3MgdGhlCisgICAgLy8gb2JqZWN0IGhhcyBvdmVy
ZmxvdzpoaWRkZW4vc2Nyb2xsL2F1dG8gc3BlY2lmaWVkIGFuZCBhbHNvIGhhcyBvdmVyZmxvdy4K
KyAgICAvLyBzY3JvbGxMZWZ0L1RvcCByZXR1cm4gdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9u
LiAgVGhlc2UgbWV0aG9kcyBhcmUgdmlydHVhbCBzbyB0aGF0IG9iamVjdHMgbGlrZQorICAgIC8v
IHRleHRhcmVhcyBjYW4gc2Nyb2xsIHNoYWRvdyBjb250ZW50IChidXQgcHJldGVuZCB0aGF0IHRo
ZXkgYXJlIHRoZSBvYmplY3RzIHRoYXQgYXJlCisgICAgLy8gc2Nyb2xsaW5nKS4KKyAgICB2aXJ0
dWFsIGludCBzY3JvbGxMZWZ0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsVG9wKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsTGVm
dChpbnQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxUb3AoaW50KTsKKworICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5LCBi
b29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVj
dG9yPEZsb2F0UXVhZD4mLCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgCisgICAgSW50UmVj
dCByZWZsZWN0aW9uQm94KCkgY29uc3Q7CisgICAgaW50IHJlZmxlY3Rpb25PZmZzZXQoKSBjb25z
dDsKKyAgICAvLyBHaXZlbiBhIHJlY3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3BhY2Us
IHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVjdCBpbiB0aGUgcmVmbGVjdGlvbi4KKyAgICBJ
bnRSZWN0IHJlZmxlY3RlZFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OworCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50
IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKQEAgLTU1LDIyICsx
NTAsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJbnRTaXplIG9mZnNldEZyb21Db250YWlu
ZXIoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGludCB4UG9zKCkgY29uc3Qg
eyByZXR1cm4gbV94OyB9Ci0gICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0IHsgcmV0dXJuIG1f
eTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3MoaW50IHgsIGludCB5KTsKLQotICAgIHZpcnR1
YWwgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQotICAgIHZpcnR1YWwgaW50
IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFdpZHRoKGludCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0SGVpZ2h0KGludCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0KLQogICAgIHZpcnR1
YWwgaW50IG1hcmdpblRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luVG9wOyB9CiAgICAgdmly
dHVhbCBpbnQgbWFyZ2luQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5Cb3R0b207IH0K
ICAgICB2aXJ0dWFsIGludCBtYXJnaW5MZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5MZWZ0
OyB9CiAgICAgdmlydHVhbCBpbnQgbWFyZ2luUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX21hcmdp
blJpZ2h0OyB9CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgYm9yZGVyQm94KCkgY29uc3QgeyByZXR1
cm4gSW50UmVjdCgwLCAtYm9yZGVyVG9wRXh0cmEoKSwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBib3Jk
ZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSk7IH0KLQogICAgIGludCBjYWxjQm9y
ZGVyQm94V2lkdGgoaW50IHdpZHRoKSBjb25zdDsKICAgICBpbnQgY2FsY0JvcmRlckJveEhlaWdo
dChpbnQgaGVpZ2h0KSBjb25zdDsKICAgICBpbnQgY2FsY0NvbnRlbnRCb3hXaWR0aChpbnQgd2lk
dGgpIGNvbnN0OwpAQCAtMTMyLDYgKzIxNiw4IEBAIHB1YmxpYzoKIAogICAgIGludCBjYWxjUGVy
Y2VudGFnZUhlaWdodChjb25zdCBMZW5ndGgmIGhlaWdodCk7CiAKKyAgICAvLyBCbG9jayBmbG93
cyBzdWJjbGFzcyBhdmFpbGFibGVXaWR0aCB0byBoYW5kbGUgbXVsdGkgY29sdW1uIGxheW91dCAo
c2hyaW5raW5nIHRoZSB3aWR0aCBhdmFpbGFibGUgdG8gY2hpbGRyZW4gd2hlbiBsYXlpbmcgb3V0
LikKKyAgICB2aXJ0dWFsIGludCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRl
bnRXaWR0aCgpOyB9CiAgICAgdmlydHVhbCBpbnQgYXZhaWxhYmxlSGVpZ2h0KCkgY29uc3Q7CiAg
ICAgaW50IGF2YWlsYWJsZUhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYpIGNvbnN0OwogCkBAIC0x
NjUsMTcgKzI1MSwyMSBAQCBwdWJsaWM6CiAgICAgLy8gdGhhdCBqdXN0IHVwZGF0ZXMgdGhlIG9i
amVjdCdzIHBvc2l0aW9uLgogICAgIHZpcnR1YWwgdm9pZCB0cnlMYXlvdXREb2luZ1Bvc2l0aW9u
ZWRNb3ZlbWVudE9ubHkoKQogICAgIHsKLSAgICAgICAgaW50IG9sZFdpZHRoID0gbV93aWR0aDsK
KyAgICAgICAgaW50IG9sZFdpZHRoID0gd2lkdGgoKTsKICAgICAgICAgY2FsY1dpZHRoKCk7CiAg
ICAgICAgIC8vIElmIHdlIHNocmluayB0byBmaXQgb3VyIHdpZHRoIG1heSBoYXZlIGNoYW5nZWQs
IHNvIHdlIHN0aWxsIG5lZWQgZnVsbCBsYXlvdXQuCi0gICAgICAgIGlmIChvbGRXaWR0aCAhPSBt
X3dpZHRoKQorICAgICAgICBpZiAob2xkV2lkdGggIT0gd2lkdGgoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgY2FsY0hlaWdodCgpOwogICAgICAgICBzZXROZWVkc0xheW91dChmYWxz
ZSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBJbnRSZWN0IG1hc2tDbGlwUmVjdCgpOworICAgIElu
dFJlY3QgbWFza0NsaXBSZWN0KCk7CiAgICAgCisjaWYgRU5BQkxFKFNWRykKKyAgICB2aXJ0dWFs
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CisjZW5kaWYKKwog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoUmVuZGVyU3R5bGU6
OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0
eWxlRGlkQ2hhbmdlKFJlbmRlclN0eWxlOjpEaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpOwpAQCAtMjIyLDEyICszMTIsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjYWxj
UHJlZldpZHRocygpID0gMDsKIAogcHJvdGVjdGVkOgotICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQg
b2YgdGhlIGNvbnRlbnRzICsgYm9yZGVycyArIHBhZGRpbmcuCi0gICAgaW50IG1fd2lkdGg7Ci0g
ICAgaW50IG1faGVpZ2h0OwotCi0gICAgaW50IG1feDsKLSAgICBpbnQgbV95OworICAgIC8vIFRo
ZSB3aWR0aC9oZWlnaHQgb2YgdGhlIGNvbnRlbnRzICsgYm9yZGVycyArIHBhZGRpbmcuICBUaGUg
eC95IGxvY2F0aW9uIGlzIHJlbGF0aXZlIHRvIG91ciBjb250YWluZXIgKHdoaWNoIGlzIG5vdCBh
bHdheXMgb3VyIHBhcmVudCkuCisgICAgSW50UmVjdCBtX2ZyYW1lUmVjdDsKIAogICAgIGludCBt
X21hcmdpbkxlZnQ7CiAgICAgaW50IG1fbWFyZ2luUmlnaHQ7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCdXR0b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJ1dHRvbi5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQnV0dG9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgUmVu
ZGVyQnV0dG9uOjp1cGRhdGVCZWZvcmVBZnRlckNvbnQKIEludFJlY3QgUmVuZGVyQnV0dG9uOjpj
b250cm9sQ2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpIGNvbnN0CiB7CiAgICAgLy8gQ2xpcCB0byB0
aGUgcGFkZGluZyBib3ggdG8gYXQgbGVhc3QgZ2l2ZSBjb250ZW50IHRoZSBleHRyYSBwYWRkaW5n
IHNwYWNlLgotICAgIHJldHVybiBJbnRSZWN0KHR4ICsgYm9yZGVyTGVmdCgpLCB0eSArIGJvcmRl
clRvcCgpLCBtX3dpZHRoIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwgbV9oZWlnaHQg
LSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKKyAgICByZXR1cm4gSW50UmVjdCh0eCAr
IGJvcmRlckxlZnQoKSwgdHkgKyBib3JkZXJUb3AoKSwgd2lkdGgoKSAtIGJvcmRlckxlZnQoKSAt
IGJvcmRlclJpZ2h0KCksIGhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7
CiB9CiAKIHZvaWQgUmVuZGVyQnV0dG9uOjp0aW1lckZpcmVkKFRpbWVyPFJlbmRlckJ1dHRvbj4q
KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwCShyZXZpc2lvbiA0MDA3
NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6bGF5b3V0KCkKIHsK
ICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIg
c3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKG1feCwgbV95KSk7CisgICAgTGF5b3V0
U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIG1f
ZnJhbWVSZWN0LnkoKSkpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG1fZmlyc3RDaGls
ZDsKICAgICB3aGlsZSAoY2hpbGQpIHsKQEAgLTU4MCw3ICs1ODAsNyBAQCB2b2lkIFJlbmRlckNv
bnRhaW5lcjo6cmVtb3ZlTGVmdG92ZXJBbm9uCiAgICAgY2hpbGQtPmRlc3Ryb3koKTsKIH0KIAot
VmlzaWJsZVBvc2l0aW9uIFJlbmRlckNvbnRhaW5lcjo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyhp
bnQgeCwgaW50IHkpCitWaXNpYmxlUG9zaXRpb24gUmVuZGVyQ29udGFpbmVyOjpwb3NpdGlvbkZv
ckNvb3JkaW5hdGVzKGludCB4UG9zLCBpbnQgeVBvcykKIHsKICAgICAvLyBubyBjaGlsZHJlbi4u
LnJldHVybiB0aGlzIHJlbmRlciBvYmplY3QncyBlbGVtZW50LCBpZiB0aGVyZSBpcyBvbmUsIGFu
ZCBvZmZzZXQgMAogICAgIGlmICghbV9maXJzdENoaWxkKQpAQCAtNTkwLDggKzU5MCw4IEBAIFZp
c2libGVQb3NpdGlvbiBSZW5kZXJDb250YWluZXI6OnBvc2l0aW8KICAgICAgICAgaW50IHJpZ2h0
ID0gY29udGVudFdpZHRoKCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkgKyBib3Jk
ZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgICAgICBpbnQgYm90dG9tID0gY29udGVudEhl
aWdodCgpICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBib3JkZXJCb3R0b20oKSArIHBh
ZGRpbmdCb3R0b20oKTsKICAgICAgICAgCi0gICAgICAgIGlmICh4IDwgMCB8fCB4ID4gcmlnaHQg
fHwgeSA8IDAgfHwgeSA+IGJvdHRvbSkgewotICAgICAgICAgICAgaWYgKHggPD0gcmlnaHQgLyAy
KQorICAgICAgICBpZiAoeFBvcyA8IDAgfHwgeFBvcyA+IHJpZ2h0IHx8IHlQb3MgPCAwIHx8IHlQ
b3MgPiBib3R0b20pIHsKKyAgICAgICAgICAgIGlmICh4UG9zIDw9IHJpZ2h0IC8gMikKICAgICAg
ICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGVsZW1lbnQoKSwgMCkp
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oUG9zaXRpb24oZWxlbWVudCgpLCBtYXhEZWVwT2Zmc2V0KGVsZW1lbnQoKSkpKTsKQEAgLTYw
MCw1NSArNjAwLDYwIEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJDb250YWluZXI6OnBvc2l0aW8K
IAogICAgIC8vIFBhc3Mgb2ZmIHRvIHRoZSBjbG9zZXN0IGNoaWxkLgogICAgIGludCBtaW5EaXN0
ID0gSU5UX01BWDsKLSAgICBSZW5kZXJPYmplY3QqIGNsb3Nlc3RSZW5kZXJlciA9IDA7Ci0gICAg
aW50IG5ld1ggPSB4OwotICAgIGludCBuZXdZID0geTsKKyAgICBSZW5kZXJCb3gqIGNsb3Nlc3RS
ZW5kZXJlciA9IDA7CisgICAgaW50IG5ld1ggPSB4UG9zOworICAgIGludCBuZXdZID0geVBvczsK
ICAgICBpZiAoaXNUYWJsZVJvdygpKSB7Ci0gICAgICAgIG5ld1ggKz0geFBvcygpOwotICAgICAg
ICBuZXdZICs9IHlQb3MoKTsKKyAgICAgICAgbmV3WCArPSB4KCk7CisgICAgICAgIG5ld1kgKz0g
eSgpOwogICAgIH0KLSAgICBmb3IgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2ZpcnN0Q2hp
bGQ7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIGlmICghcmVuZGVyZXItPmZpcnN0Q2hpbGQoKSAmJiAhcmVuZGVyZXItPmlzSW5saW5lKCkg
JiYgIXJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpIAotICAgICAgICAgICAgfHwgcmVuZGVyZXItPnN0
eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QgPSBtX2ZpcnN0Q2hpbGQ7IHJlbmRlck9iamVjdDsgcmVuZGVyT2JqZWN0ID0g
cmVuZGVyT2JqZWN0LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghcmVuZGVyT2JqZWN0
LT5maXJzdENoaWxkKCkgJiYgIXJlbmRlck9iamVjdC0+aXNJbmxpbmUoKSAmJiAhcmVuZGVyT2Jq
ZWN0LT5pc0Jsb2NrRmxvdygpIAorICAgICAgICAgICAgfHwgcmVuZGVyT2JqZWN0LT5zdHlsZSgp
LT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKLSAgICAgICAgaW50IHRvcCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgKGlzVGFi
bGVSb3coKSA/IDAgOiByZW5kZXJlci0+eVBvcygpKTsKKyAgICAgICAgaWYgKCFyZW5kZXJPYmpl
Y3QtPmlzQm94KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIFJl
bmRlckJveCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihyZW5kZXJPYmplY3Qp
OworCisgICAgICAgIGludCB0b3AgPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIChpc1Rh
YmxlUm93KCkgPyAwIDogcmVuZGVyZXItPnkoKSk7CiAgICAgICAgIGludCBib3R0b20gPSB0b3Ag
KyByZW5kZXJlci0+Y29udGVudEhlaWdodCgpOwotICAgICAgICBpbnQgbGVmdCA9IGJvcmRlckxl
ZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gMCA6IHJlbmRlcmVyLT54UG9z
KCkpOworICAgICAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyAo
aXNUYWJsZVJvdygpID8gMCA6IHJlbmRlcmVyLT54KCkpOwogICAgICAgICBpbnQgcmlnaHQgPSBs
ZWZ0ICsgcmVuZGVyZXItPmNvbnRlbnRXaWR0aCgpOwogICAgICAgICAKLSAgICAgICAgaWYgKHgg
PD0gcmlnaHQgJiYgeCA+PSBsZWZ0ICYmIHkgPD0gdG9wICYmIHkgPj0gYm90dG9tKSB7CisgICAg
ICAgIGlmICh4UG9zIDw9IHJpZ2h0ICYmIHhQb3MgPj0gbGVmdCAmJiB5UG9zIDw9IHRvcCAmJiB5
UG9zID49IGJvdHRvbSkgewogICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1RhYmxlUm93KCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVz
KHggKyBuZXdYIC0gcmVuZGVyZXItPnhQb3MoKSwgeSArIG5ld1kgLSByZW5kZXJlci0+eVBvcygp
KTsKLSAgICAgICAgICAgIHJldHVybiByZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4
IC0gcmVuZGVyZXItPnhQb3MoKSwgeSAtIHJlbmRlcmVyLT55UG9zKCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiByZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4UG9zICsgbmV3WCAt
IHJlbmRlcmVyLT54KCksIHlQb3MgKyBuZXdZIC0gcmVuZGVyZXItPnkoKSk7CisgICAgICAgICAg
ICByZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeFBvcyAtIHJlbmRlcmVy
LT54KCksIHlQb3MgLSByZW5kZXJlci0+eSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZp
bmQgdGhlIGRpc3RhbmNlIGZyb20gKHgsIHkpIHRvIHRoZSBib3guICBTcGxpdCB0aGUgc3BhY2Ug
YXJvdW5kIHRoZSBib3ggaW50byA4IHBpZWNlcwogICAgICAgICAvLyBhbmQgdXNlIGEgZGlmZmVy
ZW50IGNvbXBhcmUgZGVwZW5kaW5nIG9uIHdoaWNoIHBpZWNlICh4LCB5KSBpcyBpbi4KICAgICAg
ICAgSW50UG9pbnQgY21wOwotICAgICAgICBpZiAoeCA+IHJpZ2h0KSB7Ci0gICAgICAgICAgICBp
ZiAoeSA8IHRvcCkKKyAgICAgICAgaWYgKHhQb3MgPiByaWdodCkgeworICAgICAgICAgICAgaWYg
KHlQb3MgPCB0b3ApCiAgICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQocmlnaHQsIHRvcCk7
Ci0gICAgICAgICAgICBlbHNlIGlmICh5ID4gYm90dG9tKQorICAgICAgICAgICAgZWxzZSBpZiAo
eVBvcyA+IGJvdHRvbSkKICAgICAgICAgICAgICAgICBjbXAgPSBJbnRQb2ludChyaWdodCwgYm90
dG9tKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjbXAgPSBJbnRQb2ludChy
aWdodCwgeSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeCA8IGxlZnQpIHsKLSAgICAgICAgICAgIGlm
ICh5IDwgdG9wKQorICAgICAgICAgICAgICAgIGNtcCA9IEludFBvaW50KHJpZ2h0LCB5UG9zKTsK
KyAgICAgICAgfSBlbHNlIGlmICh4UG9zIDwgbGVmdCkgeworICAgICAgICAgICAgaWYgKHlQb3Mg
PCB0b3ApCiAgICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQobGVmdCwgdG9wKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKHkgPiBib3R0b20pCisgICAgICAgICAgICBlbHNlIGlmICh5UG9zID4g
Ym90dG9tKQogICAgICAgICAgICAgICAgIGNtcCA9IEludFBvaW50KGxlZnQsIGJvdHRvbSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQobGVmdCwgeSk7
CisgICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQobGVmdCwgeVBvcyk7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoeSA8IHRvcCkKLSAgICAgICAgICAgICAgICBjbXAgPSBJ
bnRQb2ludCh4LCB0b3ApOworICAgICAgICAgICAgaWYgKHlQb3MgPCB0b3ApCisgICAgICAgICAg
ICAgICAgY21wID0gSW50UG9pbnQoeFBvcywgdG9wKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBjbXAgPSBJbnRQb2ludCh4LCBib3R0b20pOworICAgICAgICAgICAgICAgIGNt
cCA9IEludFBvaW50KHhQb3MsIGJvdHRvbSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGludCB4MW1pbnVzeDIgPSBjbXAueCgpIC0geDsKLSAgICAgICAgaW50IHkxbWludXN5MiA9IGNt
cC55KCkgLSB5OworICAgICAgICBpbnQgeDFtaW51c3gyID0gY21wLngoKSAtIHhQb3M7CisgICAg
ICAgIGludCB5MW1pbnVzeTIgPSBjbXAueSgpIC0geVBvczsKICAgICAgICAgCiAgICAgICAgIGlu
dCBkaXN0ID0geDFtaW51c3gyICogeDFtaW51c3gyICsgeTFtaW51c3kyICogeTFtaW51c3kyOwog
ICAgICAgICBpZiAoZGlzdCA8IG1pbkRpc3QpIHsKQEAgLTY1OCw3ICs2NjMsNyBAQCBWaXNpYmxl
UG9zaXRpb24gUmVuZGVyQ29udGFpbmVyOjpwb3NpdGlvCiAgICAgfQogICAgIAogICAgIGlmIChj
bG9zZXN0UmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBjbG9zZXN0UmVuZGVyZXItPnBvc2l0aW9u
Rm9yQ29vcmRpbmF0ZXMobmV3WCAtIGNsb3Nlc3RSZW5kZXJlci0+eFBvcygpLCBuZXdZIC0gY2xv
c2VzdFJlbmRlcmVyLT55UG9zKCkpOworICAgICAgICByZXR1cm4gY2xvc2VzdFJlbmRlcmVyLT5w
b3NpdGlvbkZvckNvb3JkaW5hdGVzKG5ld1ggLSBjbG9zZXN0UmVuZGVyZXItPngoKSwgbmV3WSAt
IGNsb3Nlc3RSZW5kZXJlci0+eSgpKTsKICAgICAKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KGVsZW1lbnQoKSwgMCwgRE9XTlNUUkVBTSk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b250YWluZXIuaAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTAgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJz
dENoaWxkOyB9CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdENoaWxkOyB9CiAKKyAgICAvLyBVc2UgdGhpcyB3aXRoIGNhdXRpb24hIE5v
IHR5cGUgY2hlY2tpbmcgaXMgZG9uZSEKKyAgICBSZW5kZXJCb3gqIGZpcnN0Q2hpbGRCb3goKSBj
b25zdCB7IEFTU0VSVCghZmlyc3RDaGlsZCgpIHx8IGZpcnN0Q2hpbGQoKS0+aXNCb3goKSk7IHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihtX2ZpcnN0Q2hpbGQpOyB9CisgICAgUmVuZGVy
Qm94KiBsYXN0Q2hpbGRCb3goKSBjb25zdCB7IEFTU0VSVCghbGFzdENoaWxkKCkgfHwgbGFzdENo
aWxkKCktPmlzQm94KCkpOyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obV9sYXN0Q2hp
bGQpOyB9CisgICAgCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJl
bmRlck9iamVjdCopOwpAQCAtNjUsNyArNjksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGFkZExpbmVCb3hSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9
IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhlaWdo
dCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEFic29sdXRlTGluZUJveFF1YWRz
KFZlY3RvcjxGbG9hdFF1YWQ+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBl
bmRPZmZzZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CiAK
LXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyT2JqZWN0KiBtX2ZpcnN0Q2hpbGQ7CiAg
ICAgUmVuZGVyT2JqZWN0KiBtX2xhc3RDaGlsZDsKIH07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGaWVsZHNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmllbGRzZXQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpZWxkc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBSZW5kZXJG
aWVsZHNldDo6UmVuZGVyRmllbGRzZXQoTm9kZSogZWxlCiB2b2lkIFJlbmRlckZpZWxkc2V0Ojpj
YWxjUHJlZldpZHRocygpCiB7CiAgICAgUmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKCk7Ci0g
ICAgaWYgKFJlbmRlck9iamVjdCogbGVnZW5kID0gZmluZExlZ2VuZCgpKSB7CisgICAgaWYgKFJl
bmRlckJveCogbGVnZW5kID0gZmluZExlZ2VuZCgpKSB7CiAgICAgICAgIGludCBsZWdlbmRNaW5X
aWR0aCA9IGxlZ2VuZC0+bWluUHJlZldpZHRoKCk7CiAKICAgICAgICAgTGVuZ3RoIGxlZ2VuZE1h
cmdpbkxlZnQgPSBsZWdlbmQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKTsKQEAgLTY2LDcgKzY2LDcg
QEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6Y2FsY1ByZWZXaWR0aHMoKQogCiBSZW5kZXJPYmplY3Qq
IFJlbmRlckZpZWxkc2V0OjpsYXlvdXRMZWdlbmQoYm9vbCByZWxheW91dENoaWxkcmVuKQogewot
ICAgIFJlbmRlck9iamVjdCogbGVnZW5kID0gZmluZExlZ2VuZCgpOworICAgIFJlbmRlckJveCog
bGVnZW5kID0gZmluZExlZ2VuZCgpOwogICAgIGlmIChsZWdlbmQpIHsKICAgICAgICAgaWYgKHJl
bGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgICAgICBsZWdlbmQtPnNldE5lZWRzTGF5b3V0KHRydWUp
OwpAQCAtNzksMTggKzc5LDE4IEBAIFJlbmRlck9iamVjdCogUmVuZGVyRmllbGRzZXQ6OmxheW91
dExlZ2UKICAgICAgICAgICAgICAgICAgICAgeFBvcyA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdM
ZWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
Q0VOVEVSOgotICAgICAgICAgICAgICAgICAgICB4UG9zID0gKG1fd2lkdGggLSBsZWdlbmQtPndp
ZHRoKCkpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgeFBvcyA9ICh3aWR0aCgpIC0gbGVnZW5k
LT53aWR0aCgpKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHhQb3MgPSBtX3dpZHRoIC0gcGFkZGlu
Z1JpZ2h0KCkgLSBib3JkZXJSaWdodCgpIC0gbGVnZW5kLT53aWR0aCgpIC0gbGVnZW5kLT5tYXJn
aW5SaWdodCgpOworICAgICAgICAgICAgICAgICAgICB4UG9zID0gd2lkdGgoKSAtIHBhZGRpbmdS
aWdodCgpIC0gYm9yZGVyUmlnaHQoKSAtIGxlZ2VuZC0+d2lkdGgoKSAtIGxlZ2VuZC0+bWFyZ2lu
UmlnaHQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN3
aXRjaCAobGVnZW5kLT5zdHlsZSgpLT50ZXh0QWxpZ24oKSkgewogICAgICAgICAgICAgICAgIGNh
c2UgUklHSFQ6Ci0gICAgICAgICAgICAgICAgICAgIHhQb3MgPSBtX3dpZHRoIC0gcGFkZGluZ1Jp
Z2h0KCkgLSBib3JkZXJSaWdodCgpIC0gbGVnZW5kLT53aWR0aCgpOworICAgICAgICAgICAgICAg
ICAgICB4UG9zID0gd2lkdGgoKSAtIHBhZGRpbmdSaWdodCgpIC0gYm9yZGVyUmlnaHQoKSAtIGxl
Z2VuZC0+d2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgY2FzZSBDRU5URVI6Ci0gICAgICAgICAgICAgICAgICAgIHhQb3MgPSAobV93aWR0aCAtIGxl
Z2VuZC0+d2lkdGgoKSkgLyAyOworICAgICAgICAgICAgICAgICAgICB4UG9zID0gKHdpZHRoKCkg
LSBsZWdlbmQtPndpZHRoKCkpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgeFBvcyA9IGJvcmRlckxl
ZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyBsZWdlbmQtPm1hcmdpbkxlZnQoKTsKQEAgLTk4LDEzICs5
OCwxMyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckZpZWxkc2V0OjpsYXlvdXRMZWdlCiAgICAgICAg
IH0KICAgICAgICAgaW50IGIgPSBib3JkZXJUb3AoKTsKICAgICAgICAgaW50IGggPSBsZWdlbmQt
PmhlaWdodCgpOwotICAgICAgICBsZWdlbmQtPnNldFBvcyh4UG9zLCBtYXgoKGItaCkvMiwgMCkp
OwotICAgICAgICBtX2hlaWdodCA9IG1heChiLGgpICsgcGFkZGluZ1RvcCgpOworICAgICAgICBs
ZWdlbmQtPnNldExvY2F0aW9uKHhQb3MsIG1heCgoYi1oKS8yLCAwKSk7CisgICAgICAgIHNldEhl
aWdodChtYXgoYixoKSArIHBhZGRpbmdUb3AoKSk7CiAgICAgfQogICAgIHJldHVybiBsZWdlbmQ7
CiB9CiAKLVJlbmRlck9iamVjdCogUmVuZGVyRmllbGRzZXQ6OmZpbmRMZWdlbmQoKSBjb25zdAor
UmVuZGVyQm94KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZCgpIGNvbnN0CiB7CiAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGxlZ2VuZCA9IGZpcnN0Q2hpbGQoKTsgbGVnZW5kOyBsZWdlbmQgPSBs
ZWdlbmQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFsZWdlbmQtPmlzRmxvYXRpbmdP
clBvc2l0aW9uZWQoKSAmJiBsZWdlbmQtPmVsZW1lbnQoKSAmJgpAQCAtMTEzLDcgKzExMyw3IEBA
IFJlbmRlck9iamVjdCogUmVuZGVyRmllbGRzZXQ6OmZpbmRMZWdlbmQKICAgICAgICAgICAgIHx8
IGxlZ2VuZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjppbnNlcnRlZExlZ2VuZFRh
ZykKICNlbmRpZgogICAgICAgICAgICApCi0gICAgICAgICAgICByZXR1cm4gbGVnZW5kOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KGxlZ2VuZCk7CiAgICAgfQog
ICAgIHJldHVybiAwOwogfQpAQCAtMTIyLDEyICsxMjIsMTIgQEAgdm9pZCBSZW5kZXJGaWVsZHNl
dDo6cGFpbnRCb3hEZWNvcmF0aW9ucwogewogICAgIGludCB3ID0gd2lkdGgoKTsKICAgICBpbnQg
aCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7Ci0g
ICAgUmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCk7CisgICAgUmVuZGVyQm94KiBs
ZWdlbmQgPSBmaW5kTGVnZW5kKCk7CiAgICAgaWYgKCFsZWdlbmQpCiAgICAgICAgIHJldHVybiBS
ZW5kZXJCbG9jazo6cGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CiAKLSAg
ICBpbnQgeU9mZiA9IChsZWdlbmQtPnlQb3MoKSA+IDApID8gMCA6IChsZWdlbmQtPmhlaWdodCgp
IC0gYm9yZGVyVG9wKCkpIC8gMjsKLSAgICBpbnQgbGVnZW5kQm90dG9tID0gdHkgKyBsZWdlbmQt
PnlQb3MoKSArIGxlZ2VuZC0+aGVpZ2h0KCk7CisgICAgaW50IHlPZmYgPSAobGVnZW5kLT55KCkg
PiAwKSA/IDAgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7CisgICAgaW50
IGxlZ2VuZEJvdHRvbSA9IHR5ICsgbGVnZW5kLT55KCkgKyBsZWdlbmQtPmhlaWdodCgpOwogICAg
IGggLT0geU9mZjsKICAgICB0eSArPSB5T2ZmIC0gYm9yZGVyVG9wRXh0cmEoKTsKIApAQCAtMTQ0
LDcgKzE0NCw3IEBAIHZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94RGVjb3JhdGlvbnMKIAog
ICAgIC8vIFNhdmUgdGltZSBieSBub3Qgc2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIEdyYXBoaWNz
Q29udGV4dCBpbiB0aGUgc3RyYWlnaHQgYm9yZGVyIGNhc2UKICAgICBpZiAoIXN0eWxlKCktPmhh
c0JvcmRlclJhZGl1cygpKQotICAgICAgICByZXR1cm4gcGFpbnRCb3JkZXJNaW51c0xlZ2VuZChw
YWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgpLCBsZWdlbmQtPnhQb3MoKSwg
bGVnZW5kLT53aWR0aCgpLCBsZWdlbmRCb3R0b20pOworICAgICAgICByZXR1cm4gcGFpbnRCb3Jk
ZXJNaW51c0xlZ2VuZChwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgpLCBs
ZWdlbmQtPngoKSwgbGVnZW5kLT53aWR0aCgpLCBsZWdlbmRCb3R0b20pOwogICAgIAogICAgIC8v
IFdlIGhhdmUgcm91bmRlZCBib3JkZXJzLCBjcmVhdGUgYSBjbGlwcGluZyByZWdpb24gCiAgICAg
Ly8gYXJvdW5kIHRoZSBsZWdlbmQgYW5kIHBhaW50IHRoZSBib3JkZXIgYXMgbm9ybWFsCkBAIC0x
NTQsNyArMTU0LDcgQEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9ucwog
ICAgIGludCBjbGlwVG9wID0gdHk7CiAgICAgaW50IGNsaXBIZWlnaHQgPSBtYXgoc3RhdGljX2Nh
c3Q8aW50PihzdHlsZSgpLT5ib3JkZXJUb3BXaWR0aCgpKSwgbGVnZW5kLT5oZWlnaHQoKSk7CiAK
LSAgICBncmFwaGljc0NvbnRleHQtPmNsaXBPdXQoSW50UmVjdCh0eCArIGxlZ2VuZC0+eFBvcygp
LCBjbGlwVG9wLAorICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcE91dChJbnRSZWN0KHR4ICsgbGVn
ZW5kLT54KCksIGNsaXBUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZWdlbmQtPndpZHRoKCksIGNsaXBIZWlnaHQpKTsKICAgICBwYWludEJvcmRlcihwYWludElu
Zm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgpLCB0cnVlLCB0cnVlKTsKIApAQCAtMTY4
LDExICsxNjgsMTEgQEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRNYXNrKFBhaW50SW5mbwog
CiAgICAgaW50IHcgPSB3aWR0aCgpOwogICAgIGludCBoID0gaGVpZ2h0KCkgKyBib3JkZXJUb3BF
eHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKLSAgICBSZW5kZXJPYmplY3QqIGxlZ2VuZCA9
IGZpbmRMZWdlbmQoKTsKKyAgICBSZW5kZXJCb3gqIGxlZ2VuZCA9IGZpbmRMZWdlbmQoKTsKICAg
ICBpZiAoIWxlZ2VuZCkKICAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwYWludE1hc2socGFp
bnRJbmZvLCB0eCwgdHkpOwogCi0gICAgaW50IHlPZmYgPSAobGVnZW5kLT55UG9zKCkgPiAwKSA/
IDAgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7CisgICAgaW50IHlPZmYg
PSAobGVnZW5kLT55KCkgPiAwKSA/IDAgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRvcCgp
KSAvIDI7CiAgICAgaCAtPSB5T2ZmOwogICAgIHR5ICs9IHlPZmYgLSBib3JkZXJUb3BFeHRyYSgp
OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmgJKHJldmlzaW9uIDQwMDc1KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGV4cGFuZHNUb0VuY2xvc2VP
dmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmhlaWdodCgpLmlzQXV0
bygpOyB9CiAgICAgdmlydHVhbCBib29sIHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBSZW5kZXJPYmplY3QqIGZpbmRMZWdlbmQoKSBj
b25zdDsKKyAgICBSZW5kZXJCb3gqIGZpbmRMZWdlbmQoKSBjb25zdDsKIAogcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShSZW5kZXJTdHlsZTo6RGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcs
NyArMTQ3LDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBkYXRlRnJvbQogCiBp
bnQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6Om1heEZpbGVuYW1lV2lkdGgoKSBjb25zdAogewot
ICAgIHJldHVybiBtYXgoMCwgY29udGVudFdpZHRoKCkgLSBtX2J1dHRvbi0+cmVuZGVyZXIoKS0+
d2lkdGgoKSAtIGFmdGVyQnV0dG9uU3BhY2luZworICAgIHJldHVybiBtYXgoMCwgY29udGVudFdp
ZHRoKCkgLSBtX2J1dHRvbi0+cmVuZGVyQm94KCktPndpZHRoKCkgLSBhZnRlckJ1dHRvblNwYWNp
bmcKICAgICAgICAgLSAobV9maWxlQ2hvb3Nlci0+aWNvbigpID8gaWNvbldpZHRoICsgaWNvbkZp
bGVuYW1lU3BhY2luZyA6IDApKTsKIH0KIApAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMKICAgICAgICAgCiAgICAgICAgIC8vIERldGVy
bWluZSB3aGVyZSB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHBsYWNlZAogICAgICAgICBpbnQgY29u
dGVudExlZnQgPSB0eCArIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7Ci0gICAgICAgIGlu
dCBidXR0b25BbmRJY29uV2lkdGggPSBtX2J1dHRvbi0+cmVuZGVyZXIoKS0+d2lkdGgoKSArIGFm
dGVyQnV0dG9uU3BhY2luZworICAgICAgICBpbnQgYnV0dG9uQW5kSWNvbldpZHRoID0gbV9idXR0
b24tPnJlbmRlckJveCgpLT53aWR0aCgpICsgYWZ0ZXJCdXR0b25TcGFjaW5nCiAgICAgICAgICAg
ICArIChtX2ZpbGVDaG9vc2VyLT5pY29uKCkgPyBpY29uV2lkdGggKyBpY29uRmlsZW5hbWVTcGFj
aW5nIDogMCk7CiAgICAgICAgIGludCB0ZXh0WDsKICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVj
dGlvbigpID09IExUUikKQEAgLTIxMyw5ICsyMTMsOSBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRD
b250cm9sOjpwYWludE9iamVjCiAgICAgICAgICAgICBpbnQgaWNvblkgPSB0eSArIGJvcmRlclRv
cCgpICsgcGFkZGluZ1RvcCgpICsgKGNvbnRlbnRIZWlnaHQoKSAtIGljb25IZWlnaHQpIC8gMjsK
ICAgICAgICAgICAgIGludCBpY29uWDsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBMVFIpCi0gICAgICAgICAgICAgICAgaWNvblggPSBjb250ZW50TGVmdCArIG1fYnV0
dG9uLT5yZW5kZXJlcigpLT53aWR0aCgpICsgYWZ0ZXJCdXR0b25TcGFjaW5nOworICAgICAgICAg
ICAgICAgIGljb25YID0gY29udGVudExlZnQgKyBtX2J1dHRvbi0+cmVuZGVyQm94KCktPndpZHRo
KCkgKyBhZnRlckJ1dHRvblNwYWNpbmc7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgaWNvblggPSBjb250ZW50TGVmdCArIGNvbnRlbnRXaWR0aCgpIC0gbV9idXR0b24tPnJlbmRl
cmVyKCktPndpZHRoKCkgLSBhZnRlckJ1dHRvblNwYWNpbmcgLSBpY29uV2lkdGg7CisgICAgICAg
ICAgICAgICAgaWNvblggPSBjb250ZW50TGVmdCArIGNvbnRlbnRXaWR0aCgpIC0gbV9idXR0b24t
PnJlbmRlckJveCgpLT53aWR0aCgpIC0gYWZ0ZXJCdXR0b25TcGFjaW5nIC0gaWNvbldpZHRoOwog
CiAgICAgICAgICAgICAvLyBEcmF3IHRoZSBmaWxlIGljb24KICAgICAgICAgICAgIG1fZmlsZUNo
b29zZXItPmljb24oKS0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoaWNvblgsIGlj
b25ZLCBpY29uV2lkdGgsIGljb25IZWlnaHQpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMSArNDUsMTEgQEAg
cHVibGljOgogICAgICAgICBsYXN0T3JkaW5hbCA9IDE7IAogICAgICAgICBpZiAoIWZvcndhcmQp
IHsKICAgICAgICAgICAgIC8vIE5vIGNob2ljZSwgc2luY2Ugd2UncmUgZ29pbmcgYmFja3dhcmRz
LCB3ZSBoYXZlIHRvIGZpbmQgb3V0IHRoZSBoaWdoZXN0IG9yZGluYWwgdXAgZnJvbnQuCi0gICAg
ICAgICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gYm94LT5maXJzdENoaWxkKCk7CisgICAgICAg
ICAgICBSZW5kZXJCb3gqIGNoaWxkID0gYm94LT5maXJzdENoaWxkQm94KCk7CiAgICAgICAgICAg
ICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPnN0eWxlKCktPmJv
eE9yZGluYWxHcm91cCgpID4gbGFzdE9yZGluYWwpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RP
cmRpbmFsID0gY2hpbGQtPnN0eWxlKCktPmJveE9yZGluYWxHcm91cCgpOwotICAgICAgICAgICAg
ICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKQEAgLTYxLDI5ICs2MSwyOCBAQCBwdWJsaWM6CiAgICAgICAgIGN1cnJlbnRPcmRpbmFs
ID0gZm9yd2FyZCA/IDAgOiBsYXN0T3JkaW5hbCsxOwogICAgIH0KIAotICAgIFJlbmRlck9iamVj
dCogZmlyc3QoKSB7CisgICAgUmVuZGVyQm94KiBmaXJzdCgpIHsKICAgICAgICAgcmVzZXQoKTsK
ICAgICAgICAgcmV0dXJuIG5leHQoKTsKICAgICB9CiAgICAgCi0gICAgUmVuZGVyT2JqZWN0KiBu
ZXh0KCkgewotCisgICAgUmVuZGVyQm94KiBuZXh0KCkgewogICAgICAgICBkbyB7IAogICAgICAg
ICAgICAgaWYgKCFjdXJyZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKGZvcndhcmQpIHsKICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudE9yZGluYWwrKzsgCiAgICAgICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50T3JkaW5hbCA+IGxhc3RPcmRpbmFsKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBib3gtPmZpcnN0Q2hp
bGQoKTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGJveC0+Zmlyc3RDaGlsZEJveCgp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRP
cmRpbmFsLS07CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50T3JkaW5hbCA9PSAwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIGN1
cnJlbnQgPSBib3gtPmxhc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0g
Ym94LT5sYXN0Q2hpbGRCb3goKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY3VycmVudCA9IGZvcndhcmQgPyBjdXJy
ZW50LT5uZXh0U2libGluZygpIDogY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAg
ICAgICAgICAgY3VycmVudCA9IGZvcndhcmQgPyBjdXJyZW50LT5uZXh0U2libGluZ0JveCgpIDog
Y3VycmVudC0+cHJldmlvdXNTaWJsaW5nQm94KCk7CiAgICAgICAgICAgICBpZiAoY3VycmVudCAm
JiBjdXJyZW50LT5zdHlsZSgpLT5ib3hPcmRpbmFsR3JvdXAoKSA+IGxhc3RPcmRpbmFsKQogICAg
ICAgICAgICAgICAgIGxhc3RPcmRpbmFsID0gY3VycmVudC0+c3R5bGUoKS0+Ym94T3JkaW5hbEdy
b3VwKCk7CiAgICAgICAgIH0gd2hpbGUgKCFjdXJyZW50IHx8IGN1cnJlbnQtPnN0eWxlKCktPmJv
eE9yZGluYWxHcm91cCgpICE9IGN1cnJlbnRPcmRpbmFsIHx8CkBAIC05Myw3ICs5Miw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBSZW5kZXJGbGV4aWJsZUJveCogYm94OwotICAgIFJlbmRl
ck9iamVjdCogY3VycmVudDsKKyAgICBSZW5kZXJCb3gqIGN1cnJlbnQ7CiAgICAgYm9vbCBmb3J3
YXJkOwogICAgIHVuc2lnbmVkIGludCBjdXJyZW50T3JkaW5hbDsKICAgICB1bnNpZ25lZCBpbnQg
bGFzdE9yZGluYWw7CkBAIC0xMTIsMTMgKzExMSwxMCBAQCBSZW5kZXJGbGV4aWJsZUJveDo6flJl
bmRlckZsZXhpYmxlQm94KCkKIAogdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6Y2FsY0hvcml6b250
YWxQcmVmV2lkdGhzKCkKIHsKLSAgICBSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgp
OwotICAgIHdoaWxlIChjaGlsZCkgeworICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0
Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKICAg
ICAgICAgLy8gcG9zaXRpb25lZCBjaGlsZHJlbiBkb24ndCBhZmZlY3QgdGhlIG1pbm1heHdpZHRo
Ci0gICAgICAgIGlmIChjaGlsZC0+aXNQb3NpdGlvbmVkKCkgfHwgY2hpbGQtPnN0eWxlKCktPnZp
c2liaWxpdHkoKSA9PSBDT0xMQVBTRSkgewotICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1Bvc2l0aW9uZWQoKSB8fCBjaGlsZC0+
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IENPTExBUFNFKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KIAogICAgICAgICAvLyBBIG1hcmdpbiBiYXNpY2FsbHkgaGFzIHRocmVlIHR5
cGVzOiBmaXhlZCwgcGVyY2VudGFnZSwgYW5kIGF1dG8gKHZhcmlhYmxlKS4KICAgICAgICAgLy8g
QXV0byBhbmQgcGVyY2VudGFnZSBtYXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNvbXB1dGlu
ZyBtaW4vbWF4IHdpZHRoLgpAQCAtMTM0LDIxICsxMzAsMTUgQEAgdm9pZCBSZW5kZXJGbGV4aWJs
ZUJveDo6Y2FsY0hvcml6b250YWxQcgogCiAgICAgICAgIG1fbWluUHJlZldpZHRoICs9IGNoaWxk
LT5taW5QcmVmV2lkdGgoKSArIG1hcmdpbjsKICAgICAgICAgbV9tYXhQcmVmV2lkdGggKz0gY2hp
bGQtPm1heFByZWZXaWR0aCgpICsgbWFyZ2luOwotCi0gICAgICAgIGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCk7CiAgICAgfSAgICAKIH0KIAogdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6Y2Fs
Y1ZlcnRpY2FsUHJlZldpZHRocygpCiB7Ci0gICAgUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsKLSAgICB3aGlsZShjaGlsZCAhPSAwKQotICAgIHsKKyAgICBmb3IgKFJlbmRlckJv
eCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZ0JveCgpKSB7CiAgICAgICAgIC8vIFBvc2l0aW9uZWQgY2hpbGRyZW4gYW5kIGNvbGxhcHNl
ZCBjaGlsZHJlbiBkb24ndCBhZmZlY3QgdGhlIG1pbi9tYXggd2lkdGgKLSAgICAgICAgaWYgKGNo
aWxkLT5pc1Bvc2l0aW9uZWQoKSB8fCBjaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IENP
TExBUFNFKSB7Ci0gICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAg
ICAgICBpZiAoY2hpbGQtPmlzUG9zaXRpb25lZCgpIHx8IGNoaWxkLT5zdHlsZSgpLT52aXNpYmls
aXR5KCkgPT0gQ09MTEFQU0UpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQogCiAg
ICAgICAgIC8vIEEgbWFyZ2luIGJhc2ljYWxseSBoYXMgdGhyZWUgdHlwZXM6IGZpeGVkLCBwZXJj
ZW50YWdlLCBhbmQgYXV0byAodmFyaWFibGUpLgogICAgICAgICAvLyBBdXRvL3BlcmNlbnRhZ2Ug
bWFyZ2lucyBzaW1wbHkgYmVjb21lIDAgd2hlbiBjb21wdXRpbmcgbWluL21heCB3aWR0aC4KQEAg
LTE2Niw4ICsxNTYsNiBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjVmVydGljYWxQcmVm
CiAgICAgICAgIAogICAgICAgICB3ID0gY2hpbGQtPm1heFByZWZXaWR0aCgpICsgbWFyZ2luOwog
ICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heCh3LCBtX21heFByZWZXaWR0aCk7Ci0KLSAgICAg
ICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICB9ICAgIAogfQogCkBAIC0yMjAs
MjEgKzIwOCwyMSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sCiAg
ICAgICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsKICAgICB9CiAK
LSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRT
aXplKG1feCwgbV95KSwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKKyAgICBM
YXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgo
KSwgbV9mcmFtZVJlY3QueSgpKSwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsK
IAotICAgIGludCBwcmV2aW91c1dpZHRoID0gbV93aWR0aDsKLSAgICBpbnQgcHJldmlvdXNIZWln
aHQgPSBtX2hlaWdodDsKKyAgICBpbnQgcHJldmlvdXNXaWR0aCA9IHdpZHRoKCk7CisgICAgaW50
IHByZXZpb3VzSGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgCiAgICAgY2FsY1dpZHRoKCk7CiAgICAg
Y2FsY0hlaWdodCgpOwotICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1fd2lkdGg7CisgICAgbV9vdmVy
Zmxvd1dpZHRoID0gd2lkdGgoKTsKIAotICAgIGlmIChwcmV2aW91c1dpZHRoICE9IG1fd2lkdGgg
fHwgcHJldmlvdXNIZWlnaHQgIT0gbV9oZWlnaHQgfHwKKyAgICBpZiAocHJldmlvdXNXaWR0aCAh
PSB3aWR0aCgpIHx8IHByZXZpb3VzSGVpZ2h0ICE9IGhlaWdodCgpIHx8CiAgICAgICAgIChwYXJl
bnQoKS0+aXNGbGV4aWJsZUJveCgpICYmIHBhcmVudCgpLT5zdHlsZSgpLT5ib3hPcmllbnQoKSA9
PSBIT1JJWk9OVEFMICYmCiAgICAgICAgICBwYXJlbnQoKS0+c3R5bGUoKS0+Ym94QWxpZ24oKSA9
PSBCU1RSRVRDSCkpCiAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCi0gICAgbV9o
ZWlnaHQgPSAwOworICAgIHNldEhlaWdodCgwKTsKICAgICBtX292ZXJmbG93SGVpZ2h0ID0gMDsK
ICAgICBtX2ZsZXhpbmdDaGlsZHJlbiA9IG1fc3RyZXRjaGluZ0NoaWxkcmVuID0gZmFsc2U7CiAK
QEAgLTI1MywyMSArMjQxLDIxIEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2Nr
KGJvb2wKICAgICBlbHNlCiAgICAgICAgIGxheW91dFZlcnRpY2FsQm94KHJlbGF5b3V0Q2hpbGRy
ZW4pOwogCi0gICAgaW50IG9sZEhlaWdodCA9IG1faGVpZ2h0OworICAgIGludCBvbGRIZWlnaHQg
PSBoZWlnaHQoKTsKICAgICBjYWxjSGVpZ2h0KCk7Ci0gICAgaWYgKG9sZEhlaWdodCAhPSBtX2hl
aWdodCkgeworICAgIGlmIChvbGRIZWlnaHQgIT0gaGVpZ2h0KCkpIHsKICAgICAgICAgLy8gSWYg
dGhlIGJsb2NrIGdvdCBleHBhbmRlZCBpbiBzaXplLCB0aGVuIGluY3JlYXNlIG91ciBvdmVyZmxv
d2hlaWdodCB0byBtYXRjaC4KLSAgICAgICAgaWYgKG1fb3ZlcmZsb3dIZWlnaHQgPiBtX2hlaWdo
dCkKKyAgICAgICAgaWYgKG1fb3ZlcmZsb3dIZWlnaHQgPiBoZWlnaHQoKSkKICAgICAgICAgICAg
IG1fb3ZlcmZsb3dIZWlnaHQgLT0gKGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsg
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpKTsKLSAgICAgICAgaWYgKG1fb3ZlcmZsb3dIZWln
aHQgPCBtX2hlaWdodCkKLSAgICAgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtX2hlaWdodDsK
KyAgICAgICAgaWYgKG1fb3ZlcmZsb3dIZWlnaHQgPCBoZWlnaHQoKSkKKyAgICAgICAgICAgIG1f
b3ZlcmZsb3dIZWlnaHQgPSBoZWlnaHQoKTsKICAgICB9Ci0gICAgaWYgKHByZXZpb3VzSGVpZ2h0
ICE9IG1faGVpZ2h0KQorICAgIGlmIChwcmV2aW91c0hlaWdodCAhPSBoZWlnaHQoKSkKICAgICAg
ICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CiAKICAgICBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0
cyhyZWxheW91dENoaWxkcmVuIHx8IGlzUm9vdCgpKTsKIAotICAgIGlmICghaXNGbG9hdGluZ09y
UG9zaXRpb25lZCgpICYmIG1faGVpZ2h0ID09IDApIHsKKyAgICBpZiAoIWlzRmxvYXRpbmdPclBv
c2l0aW9uZWQoKSAmJiBoZWlnaHQoKSA9PSAwKSB7CiAgICAgICAgIC8vIFdlIGFyZSBhIGJsb2Nr
IHdpdGggbm8gYm9yZGVyIGFuZCBwYWRkaW5nIGFuZCBhIGNvbXB1dGVkIGhlaWdodAogICAgICAg
ICAvLyBvZiAwLiAgVGhlIENTUyBzcGVjIHN0YXRlcyB0aGF0IHplcm8taGVpZ2h0IGJsb2NrcyBj
b2xsYXBzZSB0aGVpciBtYXJnaW5zCiAgICAgICAgIC8vIHRvZ2V0aGVyLgpAQCAtMjg2LDE1ICsy
NzQsMTUgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbAogICAgIH0K
IAogICAgIC8vIEFsd2F5cyBlbnN1cmUgb3VyIG92ZXJmbG93IHdpZHRoIGlzIGF0IGxlYXN0IGFz
IGxhcmdlIGFzIG91ciB3aWR0aC4KLSAgICBpZiAobV9vdmVyZmxvd1dpZHRoIDwgbV93aWR0aCkK
LSAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbV93aWR0aDsKKyAgICBpZiAobV9vdmVyZmxvd1dp
ZHRoIDwgd2lkdGgoKSkKKyAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gd2lkdGgoKTsKIAogICAg
IGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpIHsKICAgICAgICAgZm9yIChTaGFkb3dEYXRhKiBib3hT
aGFkb3cgPSBzdHlsZSgpLT5ib3hTaGFkb3coKTsgYm94U2hhZG93OyBib3hTaGFkb3cgPSBib3hT
aGFkb3ctPm5leHQpIHsKICAgICAgICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1fb3ZlcmZs
b3dMZWZ0LCBib3hTaGFkb3ctPnggLSBib3hTaGFkb3ctPmJsdXIpOwotICAgICAgICAgICAgbV9v
dmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgbV93aWR0aCArIGJveFNoYWRvdy0+
eCArIGJveFNoYWRvdy0+Ymx1cik7CisgICAgICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgo
bV9vdmVyZmxvd1dpZHRoLCB3aWR0aCgpICsgYm94U2hhZG93LT54ICsgYm94U2hhZG93LT5ibHVy
KTsKICAgICAgICAgICAgIG1fb3ZlcmZsb3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgYm94U2hh
ZG93LT55IC0gYm94U2hhZG93LT5ibHVyKTsKLSAgICAgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQg
PSBtYXgobV9vdmVyZmxvd0hlaWdodCwgbV9oZWlnaHQgKyBib3hTaGFkb3ctPnkgKyBib3hTaGFk
b3ctPmJsdXIpOworICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93
SGVpZ2h0LCBoZWlnaHQoKSArIGJveFNoYWRvdy0+eSArIGJveFNoYWRvdy0+Ymx1cik7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChoYXNSZWZsZWN0aW9uKCkpIHsKQEAgLTMzMiwx
MSArMzIwLDExIEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWwKICAg
ICB1bnNpZ25lZCBpbnQgbG93ZXN0RmxleEdyb3VwID0gMDsKICAgICBib29sIGhhdmVGbGV4ID0g
ZmFsc2U7CiAgICAgaW50IHJlbWFpbmluZ1NwYWNlID0gMDsKLSAgICBtX292ZXJmbG93SGVpZ2h0
ID0gbV9oZWlnaHQ7CisgICAgbV9vdmVyZmxvd0hlaWdodCA9IGhlaWdodCgpOwogCiAgICAgLy8g
VGhlIGZpcnN0IHdhbGsgb3ZlciBvdXIga2lkcyBpcyB0byBmaW5kIG91dCBpZiB3ZSBoYXZlIGFu
eSBmbGV4aWJsZSBjaGlsZHJlbi4KICAgICBGbGV4Qm94SXRlcmF0b3IgaXRlcmF0b3IodGhpcyk7
Ci0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsKKyAgICBSZW5kZXJC
b3gqIGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOwogICAgIHdoaWxlIChjaGlsZCkgewogICAgICAg
ICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBjaGlsZCBmbGV4ZXMuCiAgICAgICAgIGlmICghY2hp
bGQtPmlzUG9zaXRpb25lZCgpICYmIGNoaWxkLT5zdHlsZSgpLT5ib3hGbGV4KCkgPiAwLjBmKSB7
CkBAIC0zNjEsOCArMzQ5LDggQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpv
bnRhbAogICAgIC8vIHRoZWlyIHByZWZlcnJlZCB3aWR0aHMuICBUaGUgc2Vjb25kIHBhc3MgaGFu
ZGxlcyBmbGV4aW5nIHRoZSBjaGlsZHJlbi4KICAgICBkbyB7CiAgICAgICAgIC8vIFJlc2V0IG91
ciBoZWlnaHQuCi0gICAgICAgIG1faGVpZ2h0ID0geVBvczsKLSAgICAgICAgbV9vdmVyZmxvd0hl
aWdodCA9IG1faGVpZ2h0OworICAgICAgICBzZXRIZWlnaHQoeVBvcyk7CisgICAgICAgIG1fb3Zl
cmZsb3dIZWlnaHQgPSBoZWlnaHQoKTsKICAgICAgICAgeFBvcyA9IGJvcmRlckxlZnQoKSArIHBh
ZGRpbmdMZWZ0KCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIC8vIE91ciBmaXJzdCBwYXNz
IGlzIGRvbmUgd2l0aG91dCBmbGV4aW5nLiAgV2Ugc2ltcGx5IGxheSB0aGUgY2hpbGRyZW4KQEAg
LTQwMCwyOCArMzg4LDI4IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEhvcml6b250
YWwKICAgICAgICAgICAgICAgICBtYXhEZXNjZW50ID0gbWF4KG1heERlc2NlbnQsIGRlc2NlbnQp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIE5vdyB1cGRhdGUgb3VyIGhl
aWdodC4KLSAgICAgICAgICAgICAgICBtX2hlaWdodCA9IG1heCh5UG9zICsgbWF4QXNjZW50ICsg
bWF4RGVzY2VudCwgbV9oZWlnaHQpOworICAgICAgICAgICAgICAgIHNldEhlaWdodChtYXgoeVBv
cyArIG1heEFzY2VudCArIG1heERlc2NlbnQsIGhlaWdodCgpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9oZWlnaHQgPSBtYXgobV9oZWlnaHQs
IHlQb3MgKyBjaGlsZC0+bWFyZ2luVG9wKCkgKyBjaGlsZC0+aGVpZ2h0KCkgKyBjaGlsZC0+bWFy
Z2luQm90dG9tKCkpOworICAgICAgICAgICAgICAgIHNldEhlaWdodChtYXgoaGVpZ2h0KCksIHlQ
b3MgKyBjaGlsZC0+bWFyZ2luVG9wKCkgKyBjaGlsZC0+aGVpZ2h0KCkgKyBjaGlsZC0+bWFyZ2lu
Qm90dG9tKCkpKTsKIAogICAgICAgICAgICAgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghaXRlcmF0b3IuZmlyc3QoKSAmJiBoYXNMaW5l
SWZFbXB0eSgpKQotICAgICAgICAgICAgbV9oZWlnaHQgKz0gbGluZUhlaWdodCh0cnVlLCB0cnVl
KTsKKyAgICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGxpbmVIZWlnaHQodHJ1ZSwgdHJ1
ZSkpOwogICAgICAgICAKLSAgICAgICAgbV9oZWlnaHQgKz0gdG9BZGQ7CisgICAgICAgIHNldEhl
aWdodChoZWlnaHQoKSArIHRvQWRkKTsKIAogICAgICAgICAvLyBBbHdheXMgbWFrZSBzdXJlIG91
ciBvdmVyZmxvd2hlaWdodCBpcyBhdCBsZWFzdCBvdXIgaGVpZ2h0LgotICAgICAgICBpZiAobV9v
dmVyZmxvd0hlaWdodCA8IG1faGVpZ2h0KQotICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9
IG1faGVpZ2h0OworICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA8IGhlaWdodCgpKQorICAg
ICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IGhlaWdodCgpOwogICAgICAgICAKLSAgICAgICAg
b2xkSGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAgIG9sZEhlaWdodCA9IGhlaWdodCgpOwogICAg
ICAgICBjYWxjSGVpZ2h0KCk7CiAKICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IGZhbHNlOwot
ICAgICAgICBpZiAob2xkSGVpZ2h0ICE9IG1faGVpZ2h0KQorICAgICAgICBpZiAob2xkSGVpZ2h0
ICE9IGhlaWdodCgpKQogICAgICAgICAgICAgaGVpZ2h0U3BlY2lmaWVkID0gdHJ1ZTsKICAgICAg
ICAgCiAgICAgICAgIC8vIE5vdyB0aGF0IG91ciBoZWlnaHQgaXMgYWN0dWFsbHkga25vd24sIHdl
IGNhbiBwbGFjZSBvdXIgYm94ZXMuCkBAIC00NzgsNyArNDY2LDcgQEAgdm9pZCBSZW5kZXJGbGV4
aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbAogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJl
bmRlckJsb2NrKj4oY2hpbGQpLT5hZGRWaXN1YWxPdmVyZmxvdyhzdGF0aWNfY2FzdDxSZW5kZXJC
bG9jayo+KGNoaWxkKS0+ZmxvYXRSZWN0KCkpOwogCiAgICAgICAgICAgICBtX292ZXJmbG93SGVp
Z2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIGNoaWxkWSArIGNoaWxkLT5vdmVyZmxvd0hlaWdo
dChmYWxzZSkpOwotICAgICAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9w
LCBjaGlsZC0+eVBvcygpICsgY2hpbGQtPm92ZXJmbG93VG9wKGZhbHNlKSk7CisgICAgICAgICAg
ICBtX292ZXJmbG93VG9wID0gbWluKG1fb3ZlcmZsb3dUb3AsIGNoaWxkLT55KCkgKyBjaGlsZC0+
b3ZlcmZsb3dUb3AoZmFsc2UpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgeFBvcyArPSBj
aGlsZC0+d2lkdGgoKSArIGNoaWxkLT5tYXJnaW5SaWdodCgpOwogICAgIApAQCAtNjE5LDcgKzYw
Nyw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWwKICAgICAgICAg
ICAgICAgICAgICAgcmVtYWluaW5nU3BhY2UgLT0gKHJlbWFpbmluZ1NwYWNlL3RvdGFsQ2hpbGRy
ZW4pOwogICAgICAgICAgICAgICAgICAgICB0b3RhbENoaWxkcmVuLS07CiAKLSAgICAgICAgICAg
ICAgICAgICAgcGxhY2VDaGlsZChjaGlsZCwgY2hpbGQtPnhQb3MoKStvZmZzZXQsIGNoaWxkLT55
UG9zKCkpOworICAgICAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGlsZC0+eCgp
K29mZnNldCwgY2hpbGQtPnkoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gaXRlcmF0
b3IubmV4dCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTYzNCw3ICs2
MjIsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsCiAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGxhY2VDaGls
ZChjaGlsZCwgY2hpbGQtPnhQb3MoKStvZmZzZXQsIGNoaWxkLT55UG9zKCkpOworICAgICAgICAg
ICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNoaWxkLT54KCkrb2Zmc2V0LCBjaGlsZC0+eSgpKTsK
ICAgICAgICAgICAgICAgICBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtNjQ2LDIwICs2MzQsMjAgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6
bGF5b3V0SG9yaXpvbnRhbAogICAgIH0KICAgICAKICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAg
bV9vdmVyZmxvd0xlZnQgPSBtaW4oY2hpbGQtPnhQb3MoKSArIGNoaWxkLT5vdmVyZmxvd0xlZnQo
ZmFsc2UpLCBtX292ZXJmbG93TGVmdCk7CisgICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKGNo
aWxkLT54KCkgKyBjaGlsZC0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSwgbV9vdmVyZmxvd0xlZnQpOwog
Ci0gICAgICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkID0gY2hpbGQ7CisgICAgICAgIFJlbmRl
ckJveCogbGFzdENoaWxkID0gY2hpbGQ7CiAgICAgICAgIHdoaWxlICgoY2hpbGQgPSBpdGVyYXRv
ci5uZXh0KCkpKSB7CiAgICAgICAgICAgICBpZiAoIWNoaWxkLT5pc1Bvc2l0aW9uZWQoKSkKICAg
ICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSBjaGlsZDsKICAgICAgICAgfQotICAgICAgICBtX292
ZXJmbG93V2lkdGggPSBtYXgobGFzdENoaWxkLT54UG9zKCkgKyBsYXN0Q2hpbGQtPm92ZXJmbG93
V2lkdGgoZmFsc2UpLCBtX292ZXJmbG93V2lkdGgpOworICAgICAgICBtX292ZXJmbG93V2lkdGgg
PSBtYXgobGFzdENoaWxkLT54KCkgKyBsYXN0Q2hpbGQtPm92ZXJmbG93V2lkdGgoZmFsc2UpLCBt
X292ZXJmbG93V2lkdGgpOwogICAgIH0KICAgICAKICAgICAvLyBTbyB0aGF0IHRoZSBjYWxjSGVp
Z2h0IGluIGxheW91dEJsb2NrKCkga25vd3MgdG8gcmVsYXlvdXQgcG9zaXRpb25lZCBvYmplY3Rz
IGJlY2F1c2Ugb2YKICAgICAvLyBhIGhlaWdodCBjaGFuZ2UsIHdlIHJldmVydCBvdXIgaGVpZ2h0
IGJhY2sgdG8gdGhlIGludHJpbnNpYyBoZWlnaHQgYmVmb3JlIHJldHVybmluZy4KICAgICBpZiAo
aGVpZ2h0U3BlY2lmaWVkKQotICAgICAgICBtX2hlaWdodCA9IG9sZEhlaWdodDsKKyAgICAgICAg
c2V0SGVpZ2h0KG9sZEhlaWdodCk7CiB9CiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91
dFZlcnRpY2FsQm94KGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKQEAgLTY2Nyw3ICs2NTUsNyBAQCB2
b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAgaW50IHhQb3MgPSBi
b3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgIGludCB5UG9zID0gYm9yZGVyVG9wKCkg
KyBwYWRkaW5nVG9wKCk7CiAgICAgaWYoIHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCApCi0g
ICAgICAgIHhQb3MgPSBtX3dpZHRoIC0gcGFkZGluZ1JpZ2h0KCkgLSBib3JkZXJSaWdodCgpOwor
ICAgICAgICB4UG9zID0gd2lkdGgoKSAtIHBhZGRpbmdSaWdodCgpIC0gYm9yZGVyUmlnaHQoKTsK
ICAgICBpbnQgdG9BZGQgPSBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKICAgICBib29sIGhlaWdodFNwZWNpZmllZCA9IGZhbHNl
OwogICAgIGludCBvbGRIZWlnaHQgPSAwOwpAQCAtNjc5LDcgKzY2Nyw3IEBAIHZvaWQgUmVuZGVy
RmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICAKICAgICAvLyBUaGUgZmlyc3Qgd2Fs
ayBvdmVyIG91ciBraWRzIGlzIHRvIGZpbmQgb3V0IGlmIHdlIGhhdmUgYW55IGZsZXhpYmxlIGNo
aWxkcmVuLgogICAgIEZsZXhCb3hJdGVyYXRvciBpdGVyYXRvcih0aGlzKTsKLSAgICBSZW5kZXJP
YmplY3QgKmNoaWxkID0gaXRlcmF0b3IubmV4dCgpOworICAgIFJlbmRlckJveCogY2hpbGQgPSBp
dGVyYXRvci5uZXh0KCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIC8vIENoZWNrIHRv
IHNlZSBpZiB0aGlzIGNoaWxkIGZsZXhlcy4KICAgICAgICAgaWYgKCFjaGlsZC0+aXNQb3NpdGlv
bmVkKCkgJiYgY2hpbGQtPnN0eWxlKCktPmJveEZsZXgoKSA+IDAuMGYpIHsKQEAgLTgwOCw5ICs3
OTYsOSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAgLy8g
T3VyIGZpcnN0IHBhc3MgaXMgZG9uZSB3aXRob3V0IGZsZXhpbmcuICBXZSBzaW1wbHkgbGF5IHRo
ZSBjaGlsZHJlbgogICAgIC8vIG91dCB3aXRoaW4gdGhlIGJveC4KICAgICBkbyB7Ci0gICAgICAg
IG1faGVpZ2h0ID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7Ci0gICAgICAgIGludCBtaW5I
ZWlnaHQgPSBtX2hlaWdodCArIHRvQWRkOwotICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbV9o
ZWlnaHQ7CisgICAgICAgIHNldEhlaWdodChib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7Cisg
ICAgICAgIGludCBtaW5IZWlnaHQgPSBoZWlnaHQoKSArIHRvQWRkOworICAgICAgICBtX292ZXJm
bG93SGVpZ2h0ID0gaGVpZ2h0KCk7CiAKICAgICAgICAgY2hpbGQgPSBpdGVyYXRvci5maXJzdCgp
OwogICAgICAgICB3aGlsZSAoY2hpbGQpIHsKQEAgLTgyOCw3ICs4MTYsNyBAQCB2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZC0+c2V0U3RhdGljWChib3JkZXJSaWdodCgpK3BhZGRpbmdSaWdodCgpKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNTdGF0aWNZKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRTdGF0aWNZKG1faGVpZ2h0KTsKKyAgICAgICAgICAg
ICAgICAgICAgY2hpbGQtPnNldFN0YXRpY1koaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIGNo
aWxkID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfSAKQEAgLTgzNyw3ICs4MjUsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlv
dXRWZXJ0aWNhbEJvCiAgICAgICAgICAgICBjaGlsZC0+Y2FsY1ZlcnRpY2FsTWFyZ2lucygpOwog
ICAgIAogICAgICAgICAgICAgLy8gQWRkIGluIHRoZSBjaGlsZCdzIG1hcmdpblRvcCB0byBvdXIg
aGVpZ2h0LgotICAgICAgICAgICAgbV9oZWlnaHQgKz0gY2hpbGQtPm1hcmdpblRvcCgpOworICAg
ICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgY2hpbGQtPm1hcmdpblRvcCgpKTsKICAgICAK
ICAgICAgICAgICAgIC8vIE5vdyBkbyBhIGxheW91dC4KICAgICAgICAgICAgIGNoaWxkLT5sYXlv
dXRJZk5lZWRlZCgpOwpAQCAtODY0LDM5ICs4NTIsMzkgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJv
eDo6bGF5b3V0VmVydGljYWxCbwogICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgLy8g
UGxhY2UgdGhlIGNoaWxkLgotICAgICAgICAgICAgcGxhY2VDaGlsZChjaGlsZCwgY2hpbGRYLCBt
X2hlaWdodCk7Ci0gICAgICAgICAgICBtX2hlaWdodCArPSBjaGlsZC0+aGVpZ2h0KCkgKyBjaGls
ZC0+bWFyZ2luQm90dG9tKCk7CisgICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGlsZFgs
IGhlaWdodCgpKTsKKyAgICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGNoaWxkLT5oZWln
aHQoKSArIGNoaWxkLT5tYXJnaW5Cb3R0b20oKSk7CiAgICAgCiAgICAgICAgICAgICBpZiAoY2hp
bGQtPmlzUmVuZGVyQmxvY2soKSkKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJC
bG9jayo+KGNoaWxkKS0+YWRkVmlzdWFsT3ZlcmZsb3coc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sq
PihjaGlsZCktPmZsb2F0UmVjdCgpKTsKIAogICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgY2hp
bGQgaGFzIG1hZGUgb3VyIG92ZXJmbG93IG5lZWQgdG8gZ3Jvdy4KLSAgICAgICAgICAgIG1fb3Zl
cmZsb3dXaWR0aCA9IG1heChjaGlsZC0+eFBvcygpICsgY2hpbGQtPm92ZXJmbG93V2lkdGgoZmFs
c2UpLCBtX292ZXJmbG93V2lkdGgpOwotICAgICAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4o
Y2hpbGQtPnhQb3MoKSArIGNoaWxkLT5vdmVyZmxvd0xlZnQoZmFsc2UpLCBtX292ZXJmbG93TGVm
dCk7CisgICAgICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgoY2hpbGQtPngoKSArIGNoaWxk
LT5vdmVyZmxvd1dpZHRoKGZhbHNlKSwgbV9vdmVyZmxvd1dpZHRoKTsKKyAgICAgICAgICAgIG1f
b3ZlcmZsb3dMZWZ0ID0gbWluKGNoaWxkLT54KCkgKyBjaGlsZC0+b3ZlcmZsb3dMZWZ0KGZhbHNl
KSwgbV9vdmVyZmxvd0xlZnQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjaGlsZCA9IGl0
ZXJhdG9yLm5leHQoKTsKICAgICAgICAgfQogCi0gICAgICAgIHlQb3MgPSBtX2hlaWdodDsKKyAg
ICAgICAgeVBvcyA9IGhlaWdodCgpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpdGVyYXRvci5m
aXJzdCgpICYmIGhhc0xpbmVJZkVtcHR5KCkpCi0gICAgICAgICAgICBtX2hlaWdodCArPSBsaW5l
SGVpZ2h0KHRydWUsIHRydWUpOworICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbGlu
ZUhlaWdodCh0cnVlLCB0cnVlKSk7CiAgICAgCi0gICAgICAgIG1faGVpZ2h0ICs9IHRvQWRkOwor
ICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyB0b0FkZCk7CiAKICAgICAgICAgLy8gTmVnYXRp
dmUgbWFyZ2lucyBjYW4gY2F1c2Ugb3VyIGhlaWdodCB0byBzaHJpbmsgYmVsb3cgb3VyIG1pbmlt
YWwgaGVpZ2h0IChib3JkZXIvcGFkZGluZykuCiAgICAgICAgIC8vIElmIHRoaXMgaGFwcGVucywg
ZW5zdXJlIHRoYXQgdGhlIGNvbXB1dGVkIGhlaWdodCBpcyBpbmNyZWFzZWQgdG8gdGhlIG1pbmlt
YWwgaGVpZ2h0LgotICAgICAgICBpZiAobV9oZWlnaHQgPCBtaW5IZWlnaHQpCi0gICAgICAgICAg
ICBtX2hlaWdodCA9IG1pbkhlaWdodDsKKyAgICAgICAgaWYgKGhlaWdodCgpIDwgbWluSGVpZ2h0
KQorICAgICAgICAgICAgc2V0SGVpZ2h0KG1pbkhlaWdodCk7CiAKICAgICAgICAgLy8gQWx3YXlz
IG1ha2Ugc3VyZSBvdXIgb3ZlcmZsb3doZWlnaHQgaXMgYXQgbGVhc3Qgb3VyIGhlaWdodC4KLSAg
ICAgICAgaWYgKG1fb3ZlcmZsb3dIZWlnaHQgPCBtX2hlaWdodCkKLSAgICAgICAgICAgIG1fb3Zl
cmZsb3dIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgaWYgKG1fb3ZlcmZsb3dIZWlnaHQgPCBo
ZWlnaHQoKSkKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBoZWlnaHQoKTsKIAogICAg
ICAgICAvLyBOb3cgd2UgaGF2ZSB0byBjYWxjIG91ciBoZWlnaHQsIHNvIHdlIGtub3cgaG93IG11
Y2ggc3BhY2Ugd2UgaGF2ZSByZW1haW5pbmcuCi0gICAgICAgIG9sZEhlaWdodCA9IG1faGVpZ2h0
OworICAgICAgICBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICAgICAgY2FsY0hlaWdodCgpOwot
ICAgICAgICBpZiAob2xkSGVpZ2h0ICE9IG1faGVpZ2h0KQorICAgICAgICBpZiAob2xkSGVpZ2h0
ICE9IGhlaWdodCgpKQogICAgICAgICAgICAgaGVpZ2h0U3BlY2lmaWVkID0gdHJ1ZTsKIAogICAg
ICAgICByZW1haW5pbmdTcGFjZSA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgY29udGVu
dEhlaWdodCgpIC0geVBvczsKQEAgLTEwMjgsNyArMTAxNiw3IEBAIHZvaWQgUmVuZGVyRmxleGli
bGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHJl
bWFpbmluZ1NwYWNlL3RvdGFsQ2hpbGRyZW47CiAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmlu
Z1NwYWNlIC09IChyZW1haW5pbmdTcGFjZS90b3RhbENoaWxkcmVuKTsKICAgICAgICAgICAgICAg
ICAgICAgdG90YWxDaGlsZHJlbi0tOwotICAgICAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNo
aWxkLCBjaGlsZC0+eFBvcygpLCBjaGlsZC0+eVBvcygpK29mZnNldCk7CisgICAgICAgICAgICAg
ICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNoaWxkLT54KCksIGNoaWxkLT55KCkrb2Zmc2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTA0Myw3ICsxMDMxLDcgQEAgdm9pZCBSZW5kZXJG
bGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwogICAgICAgICAgICAgICAgICAgICBjaGlsZCA9
IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNoaWxkLT54UG9z
KCksIGNoaWxkLT55UG9zKCkrb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNo
aWxkLCBjaGlsZC0+eCgpLCBjaGlsZC0+eSgpK29mZnNldCk7CiAgICAgICAgICAgICAgICAgY2hp
bGQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwNTUs
MjggKzEwNDMsMjggQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwog
ICAgIH0KICAgICAKICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1p
bihjaGlsZC0+eVBvcygpICsgY2hpbGQtPm92ZXJmbG93VG9wKGZhbHNlKSwgbV9vdmVyZmxvd1Rv
cCk7CisgICAgICAgIG1fb3ZlcmZsb3dUb3AgPSBtaW4oY2hpbGQtPnkoKSArIGNoaWxkLT5vdmVy
Zmxvd1RvcChmYWxzZSksIG1fb3ZlcmZsb3dUb3ApOwogCi0gICAgICAgIFJlbmRlck9iamVjdCog
bGFzdENoaWxkID0gY2hpbGQ7CisgICAgICAgIFJlbmRlckJveCogbGFzdENoaWxkID0gY2hpbGQ7
CiAgICAgICAgIHdoaWxlICgoY2hpbGQgPSBpdGVyYXRvci5uZXh0KCkpKSB7CiAgICAgICAgICAg
ICBpZiAoIWNoaWxkLT5pc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICBsYXN0Q2hpbGQg
PSBjaGlsZDsKICAgICAgICAgfQotICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KGxhc3RD
aGlsZC0+eVBvcygpICsgbGFzdENoaWxkLT5vdmVyZmxvd0hlaWdodChmYWxzZSksIG1fb3ZlcmZs
b3dIZWlnaHQpOworICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KGxhc3RDaGlsZC0+eSgp
ICsgbGFzdENoaWxkLT5vdmVyZmxvd0hlaWdodChmYWxzZSksIG1fb3ZlcmZsb3dIZWlnaHQpOwog
ICAgIH0KIAogICAgIC8vIFNvIHRoYXQgdGhlIGNhbGNIZWlnaHQgaW4gbGF5b3V0QmxvY2soKSBr
bm93cyB0byByZWxheW91dCBwb3NpdGlvbmVkIG9iamVjdHMgYmVjYXVzZSBvZgogICAgIC8vIGEg
aGVpZ2h0IGNoYW5nZSwgd2UgcmV2ZXJ0IG91ciBoZWlnaHQgYmFjayB0byB0aGUgaW50cmluc2lj
IGhlaWdodCBiZWZvcmUgcmV0dXJuaW5nLgogICAgIGlmIChoZWlnaHRTcGVjaWZpZWQpCi0gICAg
ICAgIG1faGVpZ2h0ID0gb2xkSGVpZ2h0OyAKKyAgICAgICAgc2V0SGVpZ2h0KG9sZEhlaWdodCk7
IAogfQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94OjpwbGFjZUNoaWxkKFJlbmRlck9iamVjdCog
Y2hpbGQsIGludCB4LCBpbnQgeSkKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnBsYWNlQ2hpbGQo
UmVuZGVyQm94KiBjaGlsZCwgaW50IHgsIGludCB5KQogewotICAgIEludFJlY3Qgb2xkUmVjdChj
aGlsZC0+eFBvcygpLCBjaGlsZC0+eVBvcygpICwgY2hpbGQtPndpZHRoKCksIGNoaWxkLT5oZWln
aHQoKSk7CisgICAgSW50UmVjdCBvbGRSZWN0KGNoaWxkLT54KCksIGNoaWxkLT55KCkgLCBjaGls
ZC0+d2lkdGgoKSwgY2hpbGQtPmhlaWdodCgpKTsKIAogICAgIC8vIFBsYWNlIHRoZSBjaGlsZC4K
LSAgICBjaGlsZC0+c2V0UG9zKHgsIHkpOworICAgIGNoaWxkLT5zZXRMb2NhdGlvbih4LCB5KTsK
IAogICAgIC8vIElmIHRoZSBjaGlsZCBtb3ZlZCwgd2UgaGF2ZSB0byByZXBhaW50IGl0IGFzIHdl
bGwgYXMgYW55IGZsb2F0aW5nL3Bvc2l0aW9uZWQKICAgICAvLyBkZXNjZW5kYW50cy4gIEFuIGV4
Y2VwdGlvbiBpcyBpZiB3ZSBuZWVkIGEgbGF5b3V0LiAgSW4gdGhpcyBjYXNlLCB3ZSBrbm93IHdl
J3JlIGdvaW5nIHRvCkBAIC0xMDg1LDcgKzEwNzMsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94
OjpwbGFjZUNoaWxkKFJlbmRlCiAgICAgICAgIGNoaWxkLT5yZXBhaW50RHVyaW5nTGF5b3V0SWZN
b3ZlZChvbGRSZWN0KTsKIH0KIAotaW50IFJlbmRlckZsZXhpYmxlQm94OjphbGxvd2VkQ2hpbGRG
bGV4KFJlbmRlck9iamVjdCogY2hpbGQsIGJvb2wgZXhwYW5kaW5nLCB1bnNpZ25lZCBpbnQgZ3Jv
dXApCitpbnQgUmVuZGVyRmxleGlibGVCb3g6OmFsbG93ZWRDaGlsZEZsZXgoUmVuZGVyQm94KiBj
aGlsZCwgYm9vbCBleHBhbmRpbmcsIHVuc2lnbmVkIGludCBncm91cCkKIHsKICAgICBpZiAoY2hp
bGQtPmlzUG9zaXRpb25lZCgpIHx8IGNoaWxkLT5zdHlsZSgpLT5ib3hGbGV4KCkgPT0gMC4wZiB8
fCBjaGlsZC0+c3R5bGUoKS0+Ym94RmxleEdyb3VwKCkgIT0gZ3JvdXApCiAgICAgICAgIHJldHVy
biAwOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCShyZXZpc2lvbiA0
MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDEwICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRmxl
eGluZ0NoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9mbGV4aW5nQ2hpbGRyZW47IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNTdHJldGNoaW5nQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX3N0cmV0
Y2hpbmdDaGlsZHJlbjsgfQogCi0gICAgdm9pZCBwbGFjZUNoaWxkKFJlbmRlck9iamVjdCogY2hp
bGQsIGludCB4LCBpbnQgeSk7CisgICAgdm9pZCBwbGFjZUNoaWxkKFJlbmRlckJveCogY2hpbGQs
IGludCB4LCBpbnQgeSk7CiAKIHByb3RlY3RlZDoKLSAgICBpbnQgYWxsb3dlZENoaWxkRmxleChS
ZW5kZXJPYmplY3QqIGNoaWxkLCBib29sIGV4cGFuZGluZywgdW5zaWduZWQgZ3JvdXApOworICAg
IGludCBhbGxvd2VkQ2hpbGRGbGV4KFJlbmRlckJveCogY2hpbGQsIGJvb2wgZXhwYW5kaW5nLCB1
bnNpZ25lZCBncm91cCk7CiAKICAgICBib29sIGhhc011bHRpcGxlTGluZXMoKSBjb25zdCB7IHJl
dHVybiBzdHlsZSgpLT5ib3hMaW5lcygpID09IE1VTFRJUExFOyB9CiAgICAgYm9vbCBpc1ZlcnRp
Y2FsKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym94T3JpZW50KCkgPT0gVkVSVElDQUw7IH0K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsNyArNTAw
LDcgQEAgSW50UmVjdCBSZW5kZXJGbG93OjphYnNvbHV0ZUNsaXBwZWRPdmVyZgogICAgICAgICAv
LyBOb3cgaW52YWxpZGF0ZSBhIHJlY3RhbmdsZS4KICAgICAgICAgaW50IG93ID0gc3R5bGUoKSA/
IHN0eWxlKCktPm91dGxpbmVTaXplKCkgOiAwOwogICAgICAgICBpZiAoaXNDb21wYWN0KCkpCi0g
ICAgICAgICAgICBsZWZ0IC09IG1feDsKKyAgICAgICAgICAgIGxlZnQgLT0geCgpOwogICAgICAg
ICAKICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGQgaW4gdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9m
ZnNldHMgb2YgYW55IGlubGluZXMgKGluY2x1ZGluZyB1cykgdXAgdG8gb3VyCiAgICAgICAgIC8v
IGNvbnRhaW5pbmcgYmxvY2suCkBAIC01NTIsOSArNTUyLDkgQEAgaW50IFJlbmRlckZsb3c6Omxv
d2VzdFBvc2l0aW9uKGJvb2wgaW5jbAogewogICAgIEFTU0VSVCghaXNJbmxpbmVGbG93KCkpOwog
ICAgIGlmICghaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgJiYgKGhhc092ZXJmbG93Q2xpcCgpIHx8
IGhhc0NvbnRyb2xDbGlwKCkpKQotICAgICAgICByZXR1cm4gaW5jbHVkZVNlbGYgJiYgbV93aWR0
aCA+IDAgPyBvdmVyZmxvd0hlaWdodChmYWxzZSkgOiAwOworICAgICAgICByZXR1cm4gaW5jbHVk
ZVNlbGYgJiYgd2lkdGgoKSA+IDAgPyBvdmVyZmxvd0hlaWdodChmYWxzZSkgOiAwOwogCi0gICAg
aW50IGJvdHRvbSA9IGluY2x1ZGVTZWxmICYmIG1fd2lkdGggPiAwID8gbV9oZWlnaHQgOiAwOwor
ICAgIGludCBib3R0b20gPSBpbmNsdWRlU2VsZiAmJiB3aWR0aCgpID4gMCA/IGhlaWdodCgpIDog
MDsKICAgICBpZiAoIWhhc0NvbHVtbnMoKSkgewogICAgICAgICAvLyBGSVhNRTogQ29tZSB1cCB3
aXRoIGEgd2F5IHRvIHVzZSB0aGUgbGF5ZXIgdHJlZSB0byBhdm9pZCB2aXNpdGluZyBhbGwgdGhl
IGtpZHMuCiAgICAgICAgIC8vIEZvciBub3csIHdlIGhhdmUgdG8gZGVzY2VuZCBpbnRvIGFsbCB0
aGUgY2hpbGRyZW4sIHNpbmNlIHdlIG1heSBoYXZlIGEgaHVnZSBhYnMgZGl2IGluc2lkZQpAQCAt
NTYyLDcgKzU2Miw3IEBAIGludCBSZW5kZXJGbG93Ojpsb3dlc3RQb3NpdGlvbihib29sIGluY2wK
ICAgICAgICAgLy8gdGhlIGFicyBkaXYuCiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjID0g
Zmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYg
KCFjLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgIWMtPmlzVGV4dCgpICYmICFjLT5pc0lu
bGluZUZsb3coKSkKLSAgICAgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBjLT55UG9z
KCkgKyBjLT5sb3dlc3RQb3NpdGlvbihmYWxzZSkpOworICAgICAgICAgICAgICAgIGJvdHRvbSA9
IG1heChib3R0b20sIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KGMpLT55KCkgKyBjLT5sb3dlc3RQ
b3NpdGlvbihmYWxzZSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NzYsMTcgKzU3NiwxOCBA
QCBpbnQgUmVuZGVyRmxvdzo6cmlnaHRtb3N0UG9zaXRpb24oYm9vbCBpCiB7CiAgICAgQVNTRVJU
KCFpc0lubGluZUZsb3coKSk7CiAgICAgaWYgKCFpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciAmJiAo
aGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzQ29udHJvbENsaXAoKSkpCi0gICAgICAgIHJldHVybiBp
bmNsdWRlU2VsZiAmJiBtX2hlaWdodCA+IDAgPyBvdmVyZmxvd1dpZHRoKGZhbHNlKSA6IDA7Cisg
ICAgICAgIHJldHVybiBpbmNsdWRlU2VsZiAmJiBoZWlnaHQoKSA+IDAgPyBvdmVyZmxvd1dpZHRo
KGZhbHNlKSA6IDA7CisKKyAgICBpbnQgcmlnaHQgPSBpbmNsdWRlU2VsZiAmJiBoZWlnaHQoKSA+
IDAgPyB3aWR0aCgpIDogMDsKIAotICAgIGludCByaWdodCA9IGluY2x1ZGVTZWxmICYmIG1faGVp
Z2h0ID4gMCA/IG1fd2lkdGggOiAwOwogICAgIGlmICghaGFzQ29sdW1ucygpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSB3YXkgdG8gdXNlIHRoZSBsYXllciB0cmVlIHRvIGF2
b2lkIHZpc2l0aW5nIGFsbCB0aGUga2lkcy4KICAgICAgICAgLy8gRm9yIG5vdywgd2UgaGF2ZSB0
byBkZXNjZW5kIGludG8gYWxsIHRoZSBjaGlsZHJlbiwgc2luY2Ugd2UgbWF5IGhhdmUgYSBodWdl
IGFicyBkaXYgaW5zaWRlCiAgICAgICAgIC8vIGEgdGlueSByZWwgZGl2IGJ1cmllZCBzb21ld2hl
cmUgZGVlcCBpbiBvdXIgY2hpbGQgdHJlZS4gIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGdldCB0
bwogICAgICAgICAvLyB0aGUgYWJzIGRpdi4KICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGMg
PSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICBp
ZiAoIWMtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYy0+aXNUZXh0KCkgJiYgIWMtPmlz
SW5saW5lRmxvdygpKQotICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBjLT54UG9z
KCkgKyBjLT5yaWdodG1vc3RQb3NpdGlvbihmYWxzZSkpOworICAgICAgICAgICAgaWYgKCFjLT5p
c0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgYy0+aXNCb3goKSAmJiAhYy0+aXNJbmxpbmVGbG93
KCkpCisgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHN0YXRpY19jYXN0PFJlbmRl
ckJveCo+KGMpLT54KCkgKyBjLT5yaWdodG1vc3RQb3NpdGlvbihmYWxzZSkpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC02MDAsMTcgKzYwMSwxNyBAQCBpbnQgUmVuZGVyRmxvdzo6bGVmdG1vc3RQ
b3NpdGlvbihib29sIGluCiB7CiAgICAgQVNTRVJUKCFpc0lubGluZUZsb3coKSk7CiAgICAgaWYg
KCFpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciAmJiAoaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzQ29u
dHJvbENsaXAoKSkpCi0gICAgICAgIHJldHVybiBpbmNsdWRlU2VsZiAmJiBtX2hlaWdodCA+IDAg
PyBvdmVyZmxvd0xlZnQoZmFsc2UpIDogbV93aWR0aDsKKyAgICAgICAgcmV0dXJuIGluY2x1ZGVT
ZWxmICYmIGhlaWdodCgpID4gMCA/IG92ZXJmbG93TGVmdChmYWxzZSkgOiB3aWR0aCgpOwogCi0g
ICAgaW50IGxlZnQgPSBpbmNsdWRlU2VsZiAmJiBtX2hlaWdodCA+IDAgPyAwIDogbV93aWR0aDsK
KyAgICBpbnQgbGVmdCA9IGluY2x1ZGVTZWxmICYmIGhlaWdodCgpID4gMCA/IDAgOiB3aWR0aCgp
OwogICAgIGlmICghaGFzQ29sdW1ucygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBDb21lIHVwIHdp
dGggYSB3YXkgdG8gdXNlIHRoZSBsYXllciB0cmVlIHRvIGF2b2lkIHZpc2l0aW5nIGFsbCB0aGUg
a2lkcy4KICAgICAgICAgLy8gRm9yIG5vdywgd2UgaGF2ZSB0byBkZXNjZW5kIGludG8gYWxsIHRo
ZSBjaGlsZHJlbiwgc2luY2Ugd2UgbWF5IGhhdmUgYSBodWdlIGFicyBkaXYgaW5zaWRlCiAgICAg
ICAgIC8vIGEgdGlueSByZWwgZGl2IGJ1cmllZCBzb21ld2hlcmUgZGVlcCBpbiBvdXIgY2hpbGQg
dHJlZS4gIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGdldCB0bwogICAgICAgICAvLyB0aGUgYWJz
IGRpdi4KICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGMgPSBmaXJzdENoaWxkKCk7IGM7IGMg
PSBjLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoIWMtPmlzRmxvYXRpbmdPclBv
c2l0aW9uZWQoKSAmJiAhYy0+aXNUZXh0KCkgJiYgIWMtPmlzSW5saW5lRmxvdygpKQotICAgICAg
ICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgYy0+eFBvcygpICsgYy0+bGVmdG1vc3RQb3NpdGlv
bihmYWxzZSkpOworICAgICAgICAgICAgaWYgKCFjLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkg
JiYgYy0+aXNCb3goKSAmJiAhYy0+aXNJbmxpbmVGbG93KCkpCisgICAgICAgICAgICAgICAgbGVm
dCA9IG1pbihsZWZ0LCBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjKS0+eCgpICsgYy0+bGVmdG1v
c3RQb3NpdGlvbihmYWxzZSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02ODcsNyArNjg4LDcg
QEAgSW50UmVjdCBSZW5kZXJGbG93Ojpsb2NhbENhcmV0UmVjdChJbmxpbgogICAgICAgICAgICAg
Ly8gRklYTUU6IHdoeSBjYWxsIGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoKSB0d2ljZSBoZXJl
LCB0b28/CiAgICAgICAgICAgICBGbG9hdFBvaW50IGFic1JpZ2h0UG9pbnQgPSBsb2NhbFRvQWJz
b2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQobXlSaWdodCwgMCkpOwogCi0gICAgICAgICAgICBp
bnQgY29udGFpbmVyUmlnaHQgPSBjb250YWluaW5nQmxvY2soKS0+eFBvcygpICsgY29udGFpbmlu
Z0Jsb2NrV2lkdGgoKTsKKyAgICAgICAgICAgIGludCBjb250YWluZXJSaWdodCA9IGNvbnRhaW5p
bmdCbG9jaygpLT54KCkgKyBjb250YWluaW5nQmxvY2tXaWR0aCgpOwogICAgICAgICAgICAgRmxv
YXRQb2ludCBhYnNDb250YWluZXJQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxv
YXRQb2ludChjb250YWluZXJSaWdodCwgMCkpOwogCiAgICAgICAgICAgICAqZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lID0gYWJzQ29udGFpbmVyUG9pbnQueCgpIC0gYWJzUmlnaHRQb2ludC54KCk7CkBA
IC03MTksMjYgKzcyMCwyNyBAQCB2b2lkIFJlbmRlckZsb3c6OmFkZEZvY3VzUmluZ1JlY3RzKEdy
YXBoCiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZEZvY3VzUmluZ1JlY3QoSW50UmVj
dCh0eCArIGN1cnItPnhQb3MoKSwgdHkgKyBjdXJyLT55UG9zKCksIGN1cnItPndpZHRoKCksIGN1
cnItPmhlaWdodCgpKSk7CiAKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJz
dENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAg
aWYgKCFjdXJyLT5pc1RleHQoKSAmJiAhY3Vyci0+aXNMaXN0TWFya2VyKCkpIHsKKyAgICAgICAg
ICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpICYmIGN1cnIt
PmlzQm94KCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0
PFJlbmRlckJveCo+KGN1cnIpOwogICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9zOwogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0
cmFuc2Zvcm1zLgogICAgICAgICAgICAgICAgIGlmIChjdXJyLT5sYXllcigpKSAKICAgICAgICAg
ICAgICAgICAgICAgcG9zID0gY3Vyci0+bG9jYWxUb0Fic29sdXRlKCk7CiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwb3MgPSBGbG9hdFBvaW50KHR4ICsgY3Vyci0+
eFBvcygpLCB0eSArIGN1cnItPnlQb3MoKSk7Ci0gICAgICAgICAgICAgICAgY3Vyci0+YWRkRm9j
dXNSaW5nUmVjdHMoZ3JhcGhpY3NDb250ZXh0LCBwb3MueCgpLCBwb3MueSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcG9zID0gRmxvYXRQb2ludCh0eCArIGJveC0+eCgpLCB0eSArIGJveC0+eSgp
KTsKKyAgICAgICAgICAgICAgICBib3gtPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4
dCwgcG9zLngoKSwgcG9zLnkoKSk7CiAgICAgICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGNv
bnRpbnVhdGlvbigpKSB7CiAgICAgICAgIGlmIChpc0lubGluZSgpKQogICAgICAgICAgICAgY29u
dGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggLSBjb250YWluaW5nQmxv
Y2soKS0+eFBvcygpICsgY29udGludWF0aW9uKCktPnhQb3MoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAtIGNvbnRhaW5pbmdCbG9jaygpLT55UG9z
KCkgKyBjb250aW51YXRpb24oKS0+eVBvcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eCAtIGNvbnRhaW5pbmdCbG9jaygpLT54KCkgKyBjb250aW51
YXRpb24oKS0+eCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5IC0gY29udGFpbmluZ0Jsb2NrKCktPnkoKSArIGNvbnRpbnVhdGlvbigpLT55KCkpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVj
dHMoZ3JhcGhpY3NDb250ZXh0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eCAtIHhQb3MoKSArIGNvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2so
KS0+eFBvcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5IC0geVBvcygpICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT55UG9zKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0geCgp
ICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT54KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSB5KCkgKyBjb250aW51YXRpb24o
KS0+Y29udGFpbmluZ0Jsb2NrKCktPnkoKSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDggKzEyNiw4IEBA
IHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gQWRkIGluIG91ciBvZmZzZXRzLgotICAgIHR4ICs9IG1feDsKLSAgICB0eSAr
PSBtX3k7CisgICAgdHggKz0geCgpOworICAgIHR5ICs9IG1fZnJhbWVSZWN0LnkoKTsKIAogICAg
IGludCByb3dzID0gZnJhbWVTZXQoKS0+dG90YWxSb3dzKCk7CiAgICAgaW50IGNvbHMgPSBmcmFt
ZVNldCgpLT50b3RhbENvbHMoKTsKQEAgLTQ1Nyw4ICs0NTcsOCBAQCB2b2lkIFJlbmRlckZyYW1l
U2V0OjpsYXlvdXQoKQogICAgICAgICBvbGRCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxv
d1JlY3QoKTsKIAogICAgIGlmICghcGFyZW50KCktPmlzRnJhbWVTZXQoKSAmJiAhZG9jdW1lbnQo
KS0+cHJpbnRpbmcoKSkgewotICAgICAgICBtX3dpZHRoID0gdmlldygpLT52aWV3V2lkdGgoKTsK
LSAgICAgICAgbV9oZWlnaHQgPSB2aWV3KCktPnZpZXdIZWlnaHQoKTsKKyAgICAgICAgc2V0V2lk
dGgodmlldygpLT52aWV3V2lkdGgoKSk7CisgICAgICAgIHNldEhlaWdodCh2aWV3KCktPnZpZXdI
ZWlnaHQoKSk7CiAgICAgfQogCiAgICAgc2l6ZV90IGNvbHMgPSBmcmFtZVNldCgpLT50b3RhbENv
bHMoKTsKQEAgLTQ3MCw4ICs0NzAsOCBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlvdXQoKQog
ICAgIH0KIAogICAgIGludCBib3JkZXJUaGlja25lc3MgPSBmcmFtZVNldCgpLT5ib3JkZXIoKTsK
LSAgICBsYXlPdXRBeGlzKG1fcm93cywgZnJhbWVTZXQoKS0+cm93TGVuZ3RocygpLCBtX2hlaWdo
dCAtIChyb3dzIC0gMSkgKiBib3JkZXJUaGlja25lc3MpOwotICAgIGxheU91dEF4aXMobV9jb2xz
LCBmcmFtZVNldCgpLT5jb2xMZW5ndGhzKCksIG1fd2lkdGggLSAoY29scyAtIDEpICogYm9yZGVy
VGhpY2tuZXNzKTsKKyAgICBsYXlPdXRBeGlzKG1fcm93cywgZnJhbWVTZXQoKS0+cm93TGVuZ3Ro
cygpLCBoZWlnaHQoKSAtIChyb3dzIC0gMSkgKiBib3JkZXJUaGlja25lc3MpOworICAgIGxheU91
dEF4aXMobV9jb2xzLCBmcmFtZVNldCgpLT5jb2xMZW5ndGhzKCksIHdpZHRoKCkgLSAoY29scyAt
IDEpICogYm9yZGVyVGhpY2tuZXNzKTsKIAogICAgIHBvc2l0aW9uRnJhbWVzKCk7CiAKQEAgLTQ5
MSw3ICs0OTEsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlvdXQoKQogCiB2b2lkIFJlbmRl
ckZyYW1lU2V0Ojpwb3NpdGlvbkZyYW1lcygpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOwog
ICAgIGlmICghY2hpbGQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTA0LDcgKzUwNCw3IEBAIHZv
aWQgUmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzKCkKICAgICAgICAgaW50IHhQb3MgPSAw
OwogICAgICAgICBpbnQgaGVpZ2h0ID0gbV9yb3dzLm1fc2l6ZXNbcl07CiAgICAgICAgIGZvciAo
aW50IGMgPSAwOyBjIDwgY29sczsgYysrKSB7Ci0gICAgICAgICAgICBjaGlsZC0+c2V0UG9zKHhQ
b3MsIHlQb3MpOworICAgICAgICAgICAgY2hpbGQtPnNldExvY2F0aW9uKHhQb3MsIHlQb3MpOwog
ICAgICAgICAgICAgaW50IHdpZHRoID0gbV9jb2xzLm1fc2l6ZXNbY107CiAKICAgICAgICAgICAg
IC8vIGhhcyB0byBiZSByZXNpemVkIGFuZCBpdHNlbGYgcmVzaXplIGl0cyBjb250ZW50cwpAQCAt
NTE3LDcgKzUxNyw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzKCkKIAog
ICAgICAgICAgICAgeFBvcyArPSB3aWR0aCArIGJvcmRlclRoaWNrbmVzczsKIAotICAgICAgICAg
ICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTI1LDcgKzUyNSw3IEBAIHZvaWQgUmVuZGVy
RnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzKCkKICAgICB9CiAKICAgICAvLyBhbGwgdGhlIHJlbWFp
bmluZyBmcmFtZXMgYXJlIGhpZGRlbiB0byBhdm9pZCB1Z2x5IHNwdXJpb3VzIHVuZmxvd2VkIGZy
YW1lcwotICAgIGZvciAoOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewor
ICAgIGZvciAoOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgewogICAg
ICAgICBjaGlsZC0+c2V0V2lkdGgoMCk7CiAgICAgICAgIGNoaWxkLT5zZXRIZWlnaHQoMCk7CiAg
ICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dChmYWxzZSk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjggKzQzLDI4
IEBAIFJlbmRlckhUTUxDYW52YXM6OlJlbmRlckhUTUxDYW52YXMoSFRNTEMKIAogdm9pZCBSZW5k
ZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSkKIHsKLSAgICBJbnRSZWN0IHJlY3QgPSBjb250ZW50Qm94KCk7CisgICAgSW50UmVj
dCByZWN0ID0gY29udGVudEJveFJlY3QoKTsKICAgICByZWN0Lm1vdmUodHgsIHR5KTsKICAgICBz
dGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KG5vZGUoKSktPnBhaW50KHBhaW50SW5mby5j
b250ZXh0LCByZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpjYW52YXNTaXplQ2hh
bmdlZCgpCiB7Ci0gICAgSW50U2l6ZSBzaXplID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1l
bnQqPihub2RlKCkpLT5zaXplKCk7Ci0gICAgSW50U2l6ZSB6b29tZWRTaXplKHNpemUud2lkdGgo
KSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSwgc2l6ZS5oZWlnaHQoKSAqIHN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSk7CisgICAgSW50U2l6ZSBjYW52YXNTaXplID0gc3RhdGljX2Nhc3Q8SFRN
TENhbnZhc0VsZW1lbnQqPihub2RlKCkpLT5zaXplKCk7CisgICAgSW50U2l6ZSB6b29tZWRTaXpl
KGNhbnZhc1NpemUud2lkdGgoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSwgY2FudmFzU2l6
ZS5oZWlnaHQoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAKLSAgICBpZiAoc2l6ZSA9
PSBpbnRyaW5zaWNTaXplKCkpCisgICAgaWYgKGNhbnZhc1NpemUgPT0gaW50cmluc2ljU2l6ZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRJbnRyaW5zaWNTaXplKHNpemUpOworICAgIHNl
dEludHJpbnNpY1NpemUoY2FudmFzU2l6ZSk7CiAKICAgICBpZiAoIXByZWZXaWR0aHNEaXJ0eSgp
KQogICAgICAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7CiAKLSAgICBJbnRTaXplIG9sZFNp
emUgPSBJbnRTaXplKG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBJbnRTaXplIG9sZFNpemUgPSBz
aXplKCk7CiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwotICAgIGlmIChvbGRT
aXplID09IEludFNpemUobV93aWR0aCwgbV9oZWlnaHQpKQorICAgIGlmIChvbGRTaXplID09IHNp
emUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFzZWxmTmVlZHNMYXlvdXQoKSkKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsMjEgKzI4
MSwyMSBAQCB2b2lkIFJlbmRlckltYWdlOjppbWFnZUNoYW5nZWQoV3JhcHBlZEltCiAgICAgICAg
IC8vIGxheW91dCB3aGVuIHdlIGdldCBhZGRlZCBpbiB0byB0aGUgcmVuZGVyIHRyZWUgaGllcmFy
Y2h5IGxhdGVyLgogICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgICAg
IC8vIGxldHMgc2VlIGlmIHdlIG5lZWQgdG8gcmVsYXlvdXQgYXQgYWxsLi4KLSAgICAgICAgICAg
IGludCBvbGR3aWR0aCA9IG1fd2lkdGg7Ci0gICAgICAgICAgICBpbnQgb2xkaGVpZ2h0ID0gbV9o
ZWlnaHQ7CisgICAgICAgICAgICBpbnQgb2xkd2lkdGggPSB3aWR0aCgpOworICAgICAgICAgICAg
aW50IG9sZGhlaWdodCA9IGhlaWdodCgpOwogICAgICAgICAgICAgaWYgKCFwcmVmV2lkdGhzRGly
dHkoKSkKICAgICAgICAgICAgICAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7CiAgICAgICAg
ICAgICBjYWxjV2lkdGgoKTsKICAgICAgICAgICAgIGNhbGNIZWlnaHQoKTsKIAotICAgICAgICAg
ICAgaWYgKGltYWdlU2l6ZUNoYW5nZWQgfHwgbV93aWR0aCAhPSBvbGR3aWR0aCB8fCBtX2hlaWdo
dCAhPSBvbGRoZWlnaHQpIHsKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemVDaGFuZ2VkIHx8IHdp
ZHRoKCkgIT0gb2xkd2lkdGggfHwgaGVpZ2h0KCkgIT0gb2xkaGVpZ2h0KSB7CiAgICAgICAgICAg
ICAgICAgc2hvdWxkUmVwYWludCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmICghc2VsZk5l
ZWRzTGF5b3V0KCkpCiAgICAgICAgICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX3dpZHRoID0gb2xkd2lkdGg7Ci0gICAgICAg
ICAgICBtX2hlaWdodCA9IG9sZGhlaWdodDsKKyAgICAgICAgICAgIHNldFdpZHRoKG9sZHdpZHRo
KTsKKyAgICAgICAgICAgIHNldEhlaWdodChvbGRoZWlnaHQpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0zMDQsMTEgKzMwNCwxMSBAQCB2b2lkIFJlbmRlckltYWdlOjppbWFnZUNoYW5nZWQoV3Jh
cHBlZEltCiAgICAgICAgIGlmIChyZWN0KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW1hZ2UgY2hh
bmdlZCByZWN0IGlzIGluIHNvdXJjZSBpbWFnZSBjb29yZGluYXRlcyAocHJlLXpvb21pbmcpLAog
ICAgICAgICAgICAgLy8gc28gbWFwIGZyb20gdGhlIGJvdW5kcyBvZiB0aGUgaW1hZ2UgdG8gdGhl
IGNvbnRlbnRzQm94LgotICAgICAgICAgICAgcmVwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KG1hcFJlY3QoKnJlY3QsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlU2l6ZSgxLjBmKSks
IGNvbnRlbnRCb3goKSkpOworICAgICAgICAgICAgcmVwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KG1hcFJlY3QoKnJlY3QsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlU2l6ZSgxLjBm
KSksIGNvbnRlbnRCb3hSZWN0KCkpKTsKICAgICAgICAgICAgIC8vIEd1YXJkIGFnYWluc3QgdG9v
LWxhcmdlIGNoYW5nZWQgcmVjdHMuCi0gICAgICAgICAgICByZXBhaW50UmVjdC5pbnRlcnNlY3Qo
Y29udGVudEJveCgpKTsKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChjb250ZW50
Qm94UmVjdCgpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXBhaW50UmVjdCA9IGNv
bnRlbnRCb3goKTsKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gY29udGVudEJveFJlY3QoKTsK
ICAgICAgICAgCiAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwogICAgIH0K
QEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50
SW5mCiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQo
KSAhPSBudWxsQXRvbSAmJiAhcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR4IC0gbV94LCB0eSAtIG1feSwgc3R5
bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOworICAgICAgICAgICAgcGFpbnRDdXN0b21IaWdobGln
aHQodHggLSB4KCksIHR5IC0gbV9mcmFtZVJlY3QueSgpLCBzdHlsZSgpLT5oaWdobGlnaHQoKSwg
dHJ1ZSk7CiAjZW5kaWYKIAogICAgICAgICBJbnRTaXplIGNvbnRlbnRTaXplKGNXaWR0aCwgY0hl
aWdodCk7CkBAIC00MjQsOCArNDI0LDggQEAgYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VAogICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgX3gsIF95LCBfdHgsIF90eSwgaGl0VGVzdEFjdGlvbik7CiAKICAg
ICBpZiAoaW5zaWRlICYmIGVsZW1lbnQoKSkgewotICAgICAgICBpbnQgdHggPSBfdHggKyBtX3g7
Ci0gICAgICAgIGludCB0eSA9IF90eSArIG1feTsKKyAgICAgICAgaW50IHR4ID0gX3R4ICsgeCgp
OworICAgICAgICBpbnQgdHkgPSBfdHkgKyBtX2ZyYW1lUmVjdC55KCk7CiAgICAgICAgIAogICAg
ICAgICBIVE1MTWFwRWxlbWVudCogbWFwID0gaW1hZ2VNYXAoKTsKICAgICAgICAgaWYgKG1hcCkg
ewpAQCAtNDkwLDggKzQ5MCwxMCBAQCBib29sIFJlbmRlckltYWdlOjppc0hlaWdodFNwZWNpZmll
ZCgpIGNvCiBpbnQgUmVuZGVySW1hZ2U6OmNhbGNSZXBsYWNlZFdpZHRoKGJvb2wgaW5jbHVkZU1h
eFdpZHRoKSBjb25zdAogewogICAgIGlmIChpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSkKLSAgICAg
ICAgaWYgKFJlbmRlck9iamVjdCogY2IgPSBpc1Bvc2l0aW9uZWQoKSA/IGNvbnRhaW5lcigpIDog
Y29udGFpbmluZ0Jsb2NrKCkpCi0gICAgICAgICAgICBzZXRJbWFnZUNvbnRhaW5lclNpemUoSW50
U2l6ZShjYi0+YXZhaWxhYmxlV2lkdGgoKSwgY2ItPmF2YWlsYWJsZUhlaWdodCgpKSk7CisgICAg
ICAgIGlmIChSZW5kZXJPYmplY3QqIGNiID0gaXNQb3NpdGlvbmVkKCkgPyBjb250YWluZXIoKSA6
IGNvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgICAgICAgICBpZiAoY2ItPmlzQm94KCkpCisgICAg
ICAgICAgICAgICAgc2V0SW1hZ2VDb250YWluZXJTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8UmVu
ZGVyQm94Kj4oY2IpLT5hdmFpbGFibGVXaWR0aCgpLCBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihj
YiktPmF2YWlsYWJsZUhlaWdodCgpKSk7CisgICAgICAgIH0KIAogICAgIGludCB3aWR0aDsKICAg
ICBpZiAoaXNXaWR0aFNwZWNpZmllZCgpKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MiwxNCArMjkyLDE2IEBAIHZvaWQgUmVuZGVySW5saW5l
OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjwKICAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QodHgg
KyBjdXJyLT54UG9zKCksIHR5ICsgY3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5o
ZWlnaHQoKSkpOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghY3Vyci0+
aXNUZXh0KCkpCi0gICAgICAgICAgICBjdXJyLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCB0eCArIGN1
cnItPnhQb3MoKSwgdHkgKyBjdXJyLT55UG9zKCksIGZhbHNlKTsKKyAgICAgICAgaWYgKGN1cnIt
PmlzQm94KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyQm94Kj4oY3Vycik7CisgICAgICAgICAgICBjdXJyLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCB0
eCArIGJveC0+eCgpLCB0eSArIGJveC0+eSgpLCBmYWxzZSk7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBpZiAoY29udGludWF0aW9uKCkgJiYgdG9wTGV2ZWwpCiAgICAgICAgIGNvbnRpbnVhdGlv
bigpLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHggLSBjb250YWluaW5nQmxvY2soKS0+eFBvcygpICsgY29udGludWF0aW9uKCkt
PnhQb3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSBjb250
YWluaW5nQmxvY2soKS0+eVBvcygpICsgY29udGludWF0aW9uKCktPnlQb3MoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggLSBjb250YWluaW5nQmxvY2soKS0+eCgp
ICsgY29udGludWF0aW9uKCktPngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHkgLSBjb250YWluaW5nQmxvY2soKS0+eSgpICsgY29udGludWF0aW9uKCktPnkoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGV2ZWwpOwogfQogCkBA
IC0zMjQsNyArMzI2LDcgQEAgYm9vbCBSZW5kZXJJbmxpbmU6OnJlcXVpcmVzTGF5ZXIoKQogICAg
IHJldHVybiBpc1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzTWFzaygp
OwogfQogCi1pbnQgUmVuZGVySW5saW5lOjp3aWR0aCgpIGNvbnN0CitpbnQgUmVuZGVySW5saW5l
Ojpib3VuZGluZ0JveFdpZHRoKCkgY29uc3QKIHsKICAgICAvLyBSZXR1cm4gdGhlIHdpZHRoIG9m
IHRoZSBtaW5pbWFsIGxlZnQgc2lkZSBhbmQgdGhlIG1heGltYWwgcmlnaHQgc2lkZS4KICAgICBp
bnQgbGVmdFNpZGUgPSAwOwpAQCAtMzM5LDcgKzM0MSw3IEBAIGludCBSZW5kZXJJbmxpbmU6Ondp
ZHRoKCkgY29uc3QKICAgICByZXR1cm4gcmlnaHRTaWRlIC0gbGVmdFNpZGU7CiB9CiAKLWludCBS
ZW5kZXJJbmxpbmU6OmhlaWdodCgpIGNvbnN0CitpbnQgUmVuZGVySW5saW5lOjpib3VuZGluZ0Jv
eEhlaWdodCgpIGNvbnN0CiB7CiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81Mjg5NzIxPiwg
Zm9yIGFuIHVua25vd24gcmVhc29uIHRoZSBsaW5rZWQgbGlzdCBoZXJlIGlzIHNvbWV0aW1lcyBp
bmNvbnNpc3RlbnQsIGZpcnN0IGlzIG5vbi16ZXJvIGFuZCBsYXN0IGlzIHplcm8uICBXZSBoYXZl
IGJlZW4KICAgICAvLyB1bmFibGUgdG8gcmVwcm9kdWNlIHRoaXMgYXQgYWxsIChhbmQgY29uc2Vx
dWVudGx5IHVuYWJsZSB0byBmaWd1cmUgb3Qgd2h5IHRoaXMgaXMgaGFwcGVuaW5nKS4gIFRoZSBh
c3NlcnQgd2lsbCBob3BlZnVsbHkgY2F0Y2ggdGhlIHByb2JsZW0gaW4gZGVidWcKQEAgLTM4NSwx
NCArMzg3LDE0IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJJbmxpbmU6OnBvc2l0aW9uRm8KIHsK
ICAgICAvLyBUcmFuc2xhdGUgdGhlIGNvb3JkcyBmcm9tIHRoZSBwcmUtYW5vbnltb3VzIGJsb2Nr
IHRvIHRoZSBwb3N0LWFub255bW91cyBibG9jay4KICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250
YWluaW5nQmxvY2soKTsKLSAgICBpbnQgcGFyZW50QmxvY2tYID0gY2ItPnhQb3MoKSArIHg7Ci0g
ICAgaW50IHBhcmVudEJsb2NrWSA9IGNiLT55UG9zKCkgKyB5OworICAgIGludCBwYXJlbnRCbG9j
a1ggPSBjYi0+eCgpICsgeDsKKyAgICBpbnQgcGFyZW50QmxvY2tZID0gY2ItPnkoKSArIHk7CiAg
ICAgZm9yIChSZW5kZXJGbG93KiBjID0gY29udGludWF0aW9uKCk7IGM7IGMgPSBjLT5jb250aW51
YXRpb24oKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIGNvbnRCbG9jayA9IGM7CisgICAgICAg
IFJlbmRlckZsb3cqIGNvbnRCbG9jayA9IGM7CiAgICAgICAgIGlmIChjLT5pc0lubGluZSgpKQog
ICAgICAgICAgICAgY29udEJsb2NrID0gYy0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIGlm
IChjLT5pc0lubGluZSgpIHx8IGMtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVybiBj
LT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKHBhcmVudEJsb2NrWCAtIGNvbnRCbG9jay0+eFBvcygp
LCBwYXJlbnRCbG9ja1kgLSBjb250QmxvY2stPnlQb3MoKSk7CisgICAgICAgICAgICByZXR1cm4g
Yy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhwYXJlbnRCbG9ja1ggLSBjb250QmxvY2stPngoKSwg
cGFyZW50QmxvY2tZIC0gY29udEJsb2NrLT55KCkpOwogICAgIH0KIAogICAgIHJldHVybiBSZW5k
ZXJGbG93Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKHgsIHkpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEzICs1OSwxMyBAQCBwdWJsaWM6CiAgICAg
Ly8gb3ZlcnJpZGVzIFJlbmRlck9iamVjdAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVy
KCk7CiAKLSAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGhl
aWdodCgpIGNvbnN0OworICAgIGludCBib3VuZGluZ0JveFdpZHRoKCkgY29uc3Q7CisgICAgaW50
IGJvdW5kaW5nQm94SGVpZ2h0KCkgY29uc3Q7CiAKLSAgICAvLyB1c2VkIHRvIGNhbGN1bGF0ZSBv
ZmZzZXRXaWR0aC9IZWlnaHQuICBPdmVycmlkZGVuIGJ5IGlubGluZXMgKFJlbmRlckZsb3cpIHRv
IHJldHVybgotICAgIC8vIHRoZSByZW1haW5pbmcgd2lkdGggb24gYSBnaXZlbiBsaW5lIChhbmQg
dGhlIGhlaWdodCBvZiBhIHNpbmdsZSBsaW5lKS4KICAgICB2aXJ0dWFsIGludCBvZmZzZXRMZWZ0
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgb2Zmc2V0VG9wKCkgY29uc3Q7CisgICAgdmlydHVh
bCBpbnQgb2Zmc2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiBib3VuZGluZ0JveFdpZHRoKCk7IH0K
KyAgICB2aXJ0dWFsIGludCBvZmZzZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBib3VuZGluZ0Jv
eEhlaWdodCgpOyB9CiAKICAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+Jiwg
aW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQg
YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDQwMDc4KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNyAr
Mjc3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKCkKICAgICAKICAgICBp
ZiAoaGFzVHJhbnNmb3JtKSB7CiAgICAgICAgIG1fdHJhbnNmb3JtLT5yZXNldCgpOwotICAgICAg
ICByZW5kZXJlcigpLT5zdHlsZSgpLT5hcHBseVRyYW5zZm9ybSgqbV90cmFuc2Zvcm0sIHJlbmRl
cmVyKCktPmJvcmRlckJveCgpLnNpemUoKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnN0eWxlKCkt
PmFwcGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwgcmVuZGVyZXIoKS0+Ym9yZGVyQm94UmVjdCgp
LnNpemUoKSk7CiAgICAgfQogfQogCkBAIC0zNzcsMjcgKzM3NywyNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKICAgICAvLyBDbGVhciBvdXIgY2FjaGVkIGNsaXAg
cmVjdCBpbmZvcm1hdGlvbi4KICAgICBjbGVhckNsaXBSZWN0cygpOwogCi0gICAgaW50IHggPSBy
ZW5kZXJlcigpLT54UG9zKCk7Ci0gICAgaW50IHkgPSByZW5kZXJlcigpLT55UG9zKCkgLSByZW5k
ZXJlcigpLT5ib3JkZXJUb3BFeHRyYSgpOworICAgIGludCB4ID0gcmVuZGVyZXIoKS0+eCgpOwor
ICAgIGludCB5ID0gcmVuZGVyZXIoKS0+eSgpIC0gcmVuZGVyZXIoKS0+Ym9yZGVyVG9wRXh0cmEo
KTsKIAogICAgIGlmICghcmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCkgJiYgcmVuZGVyZXIoKS0+
cGFyZW50KCkpIHsKICAgICAgICAgLy8gV2UgbXVzdCBhZGp1c3Qgb3VyIHBvc2l0aW9uIGJ5IHdh
bGtpbmcgdXAgdGhlIHJlbmRlciB0cmVlIGxvb2tpbmcgZm9yIHRoZQogICAgICAgICAvLyBuZWFy
ZXN0IGVuY2xvc2luZyBvYmplY3Qgd2l0aCBhIGxheWVyLgotICAgICAgICBSZW5kZXJPYmplY3Qq
IGN1cnIgPSByZW5kZXJlcigpLT5wYXJlbnQoKTsKKyAgICAgICAgUmVuZGVyQm94KiBjdXJyID0g
cmVuZGVyZXIoKS0+cGFyZW50Qm94KCk7CiAgICAgICAgIHdoaWxlIChjdXJyICYmICFjdXJyLT5o
YXNMYXllcigpKSB7CiAgICAgICAgICAgICBpZiAoIWN1cnItPmlzVGFibGVSb3coKSkgewogICAg
ICAgICAgICAgICAgIC8vIFJvd3MgYW5kIGNlbGxzIHNoYXJlIHRoZSBzYW1lIGNvb3JkaW5hdGUg
c3BhY2UgKHRoYXQgb2YgdGhlIHNlY3Rpb24pLgogICAgICAgICAgICAgICAgIC8vIE9taXQgdGhl
bSB3aGVuIGNvbXB1dGluZyBvdXIgeHBvcy95cG9zLgotICAgICAgICAgICAgICAgIHggKz0gY3Vy
ci0+eFBvcygpOwotICAgICAgICAgICAgICAgIHkgKz0gY3Vyci0+eVBvcygpOworICAgICAgICAg
ICAgICAgIHggKz0gY3Vyci0+eCgpOworICAgICAgICAgICAgICAgIHkgKz0gY3Vyci0+eSgpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOworICAgICAg
ICAgICAgY3VyciA9IGN1cnItPnBhcmVudEJveCgpOwogICAgICAgICB9CiAgICAgICAgIHkgKz0g
Y3Vyci0+Ym9yZGVyVG9wRXh0cmEoKTsKICAgICAgICAgaWYgKGN1cnItPmlzVGFibGVSb3coKSkg
ewogICAgICAgICAgICAgLy8gUHV0IG91cnNlbHZlcyBpbnRvIHRoZSByb3cgY29vcmRpbmF0ZSBz
cGFjZS4KLSAgICAgICAgICAgIHggLT0gY3Vyci0+eFBvcygpOwotICAgICAgICAgICAgeSAtPSBj
dXJyLT55UG9zKCk7CisgICAgICAgICAgICB4IC09IGN1cnItPngoKTsKKyAgICAgICAgICAgIHkg
LT0gY3Vyci0+eSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MjMsMTAgKzQyMywxOCBAQCB2
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKICAgICB9IGVsc2UgaWYgKHBh
cmVudCgpKQogICAgICAgICBwYXJlbnQoKS0+c3VidHJhY3RTY3JvbGxlZENvbnRlbnRPZmZzZXQo
eCwgeSk7CiAgICAgCi0gICAgc2V0UG9zKHgseSk7CisgICAgLy8gRklYTUU6IFdlJ2QgcmVhbGx5
IGxpa2UgdG8ganVzdCBnZXQgcmlkIG9mIHRoZSBjb25jZXB0IG9mIGEgbGF5ZXIgcmVjdGFuZ2xl
IGFuZCByZWx5IG9uIHRoZSByZW5kZXJlcnMuCiAKLSAgICBzZXRXaWR0aChyZW5kZXJlcigpLT53
aWR0aCgpKTsKLSAgICBzZXRIZWlnaHQocmVuZGVyZXIoKS0+aGVpZ2h0KCkgKyByZW5kZXJlcigp
LT5ib3JkZXJUb3BFeHRyYSgpICsgcmVuZGVyZXIoKS0+Ym9yZGVyQm90dG9tRXh0cmEoKSk7Cisg
ICAgc2V0UG9zKHgsIHkpOworCisgICAgaWYgKHJlbmRlcmVyKCktPmlzUmVuZGVySW5saW5lKCkp
IHsKKyAgICAgICAgUmVuZGVySW5saW5lKiBpbmxpbmVGbG93ID0gc3RhdGljX2Nhc3Q8UmVuZGVy
SW5saW5lKj4ocmVuZGVyZXIoKSk7CisgICAgICAgIHNldFdpZHRoKGlubGluZUZsb3ctPmJvdW5k
aW5nQm94V2lkdGgoKSk7CisgICAgICAgIHNldEhlaWdodChpbmxpbmVGbG93LT5ib3VuZGluZ0Jv
eEhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZXRXaWR0aChyZW5kZXJlcigpLT53
aWR0aCgpKTsKKyAgICAgICAgc2V0SGVpZ2h0KHJlbmRlcmVyKCktPmhlaWdodCgpICsgcmVuZGVy
ZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKSArIHJlbmRlcmVyKCktPmJvcmRlckJvdHRvbUV4dHJhKCkp
OworICAgIH0KIAogICAgIGlmICghcmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKICAg
ICAgICAgaWYgKHJlbmRlcmVyKCktPm92ZXJmbG93V2lkdGgoKSA+IHJlbmRlcmVyKCktPndpZHRo
KCkpCkBAIC0xMTcxLDcgKzExNzksNyBAQCBzdGF0aWMgSW50UmVjdCByZXNpemVyQ29ybmVyUmVj
dChjb25zdCBSCiAKIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBj
b25zdAogewotICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCh0aGlzLCByZW5kZXJlcigpLT5i
b3JkZXJCb3goKSkuaXNFbXB0eSgpOworICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCh0aGlz
LCByZW5kZXJlcigpLT5ib3JkZXJCb3hSZWN0KCkpLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBSZW5k
ZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHJlY3QpCkBAIC0xMTg5LDcgKzExOTcsNyBAQCBQYXNzUmVmUHRyPFNjcm9s
bGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0Owog
ICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSByZW5kZXJlcigpLT5ub2RlKCktPnNo
YWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShS
ZW5kZXJTdHlsZTo6U0NST0xMQkFSKTsKICAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUp
Ci0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFy
KHRoaXMsIG9yaWVudGF0aW9uLCByZW5kZXJlcigpLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpLT5yZW5kZXJlcigpKTsKKyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVh
dGVDdXN0b21TY3JvbGxiYXIodGhpcywgb3JpZW50YXRpb24sIHJlbmRlcmVyKCktPm5vZGUoKS0+
c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlckJveCgpKTsKICAgICBlbHNlCiAgICAgICAgIHdp
ZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9u
LCBSZWd1bGFyU2Nyb2xsYmFyKTsKICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgpLT52aWV3KCkt
PmFkZENoaWxkKHdpZGdldC5nZXQoKSk7ICAgICAgICAKQEAgLTEyNzksNyArMTI4Nyw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm8KICAgICBpZiAoIW1faEJhciAm
JiAhbV92QmFyICYmICghcmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIo
KS0+c3R5bGUoKS0+cmVzaXplKCkgPT0gUkVTSVpFX05PTkUpKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgSW50UmVjdCBib3JkZXJCb3ggPSByZW5kZXJlcigpLT5ib3JkZXJCb3goKTsKKyAg
ICBJbnRSZWN0IGJvcmRlckJveCA9IHJlbmRlcmVyKCktPmJvcmRlckJveFJlY3QoKTsKICAgICBJ
bnRSZWN0IHNjcm9sbENvcm5lcihzY3JvbGxDb3JuZXJSZWN0KHRoaXMsIGJvcmRlckJveCkpOwog
ICAgIEludFJlY3QgYWJzQm91bmRzKGJvcmRlckJveC54KCkgKyB0eCwgYm9yZGVyQm94LnkoKSAr
IHR5LCBib3JkZXJCb3gud2lkdGgoKSwgYm9yZGVyQm94LmhlaWdodCgpKTsKICAgICBpZiAobV92
QmFyKQpAQCAtMTI5NSw5ICsxMzAzLDkgQEAgdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRpb25PdmVy
Zmxvd0NvbnRybwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faEJhci0+
aGVpZ2h0KCkpKTsKICAgICAKICAgICBpZiAobV9zY3JvbGxDb3JuZXIpCi0gICAgICAgIG1fc2Ny
b2xsQ29ybmVyLT5zZXRSZWN0KHNjcm9sbENvcm5lcik7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVy
LT5zZXRGcmFtZVJlY3Qoc2Nyb2xsQ29ybmVyKTsKICAgICBpZiAobV9yZXNpemVyKQotICAgICAg
ICBtX3Jlc2l6ZXItPnNldFJlY3QocmVzaXplckNvcm5lclJlY3QodGhpcywgYm9yZGVyQm94KSk7
CisgICAgICAgIG1fcmVzaXplci0+c2V0RnJhbWVSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMs
IGJvcmRlckJveCkpOwogfQogCiBpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFdpZHRoKCkKQEAgLTE0
OTMsNyArMTUwMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scygK
IAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKIHsKLSAg
ICBJbnRSZWN0IGNvcm5lclJlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KHRoaXMsIHJlbmRlcmVyKCkt
PmJvcmRlckJveCgpKTsKKyAgICBJbnRSZWN0IGNvcm5lclJlY3QgPSBzY3JvbGxDb3JuZXJSZWN0
KHRoaXMsIHJlbmRlcmVyKCktPmJvcmRlckJveFJlY3QoKSk7CiAgICAgSW50UmVjdCBhYnNSZWN0
ID0gSW50UmVjdChjb3JuZXJSZWN0LngoKSArIHR4LCBjb3JuZXJSZWN0LnkoKSArIHR5LCBjb3Ju
ZXJSZWN0LndpZHRoKCksIGNvcm5lclJlY3QuaGVpZ2h0KCkpOwogICAgIGlmICghYWJzUmVjdC5p
bnRlcnNlY3RzKGRhbWFnZVJlY3QpKQogICAgICAgICByZXR1cm47CkBAIC0xNTE2LDcgKzE1MjQs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDCiAgICAgaWYgKHJl
bmRlcmVyKCktPnN0eWxlKCktPnJlc2l6ZSgpID09IFJFU0laRV9OT05FKQogICAgICAgICByZXR1
cm47CiAKLSAgICBJbnRSZWN0IGNvcm5lclJlY3QgPSByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBy
ZW5kZXJlcigpLT5ib3JkZXJCb3goKSk7CisgICAgSW50UmVjdCBjb3JuZXJSZWN0ID0gcmVzaXpl
ckNvcm5lclJlY3QodGhpcywgcmVuZGVyZXIoKS0+Ym9yZGVyQm94UmVjdCgpKTsKICAgICBJbnRS
ZWN0IGFic1JlY3QgPSBJbnRSZWN0KGNvcm5lclJlY3QueCgpICsgdHgsIGNvcm5lclJlY3QueSgp
ICsgdHksIGNvcm5lclJlY3Qud2lkdGgoKSwgY29ybmVyUmVjdC5oZWlnaHQoKSk7CiAgICAgaWYg
KCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3
MjQsOCArMTczMiw4IEBAIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVyKiByb28K
ICAgICBjYWxjdWxhdGVSZWN0cyhyb290TGF5ZXIsIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5k
cywgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwgdGVtcG9yYXJ5Q2xp
cFJlY3RzKTsKICAgICBpbnQgeCA9IGxheWVyQm91bmRzLngoKTsKICAgICBpbnQgeSA9IGxheWVy
Qm91bmRzLnkoKTsKLSAgICBpbnQgdHggPSB4IC0gcmVuZGVyZXIoKS0+eFBvcygpOwotICAgIGlu
dCB0eSA9IHkgLSByZW5kZXJlcigpLT55UG9zKCkgKyByZW5kZXJlcigpLT5ib3JkZXJUb3BFeHRy
YSgpOworICAgIGludCB0eCA9IHggLSByZW5kZXJlcigpLT54KCk7CisgICAgaW50IHR5ID0geSAt
IHJlbmRlcmVyKCktPnkoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgIC8vIEVuc3VyZSBvdXIgbGlzdHMgYXJlIHVwLXRv
LWRhdGUuCiAgICAgdXBkYXRlWk9yZGVyTGlzdHMoKTsKQEAgLTE5NDgsOCArMTk1Niw4IEBAIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAvLyBOZXh0IHdlIHdh
bnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBjaGlsZCBSZW5kZXJPYmpl
Y3RzIG9mIHRoZSBsYXllci4KICAgICBpZiAoZmdSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkg
JiYgCiAgICAgICAgIHJlbmRlcmVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0
UG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueCgpIC0gcmVu
ZGVyZXIoKS0+eFBvcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRz
LnkoKSAtIHJlbmRlcmVyKCktPnlQb3MoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCks
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLngoKSAtIHJlbmRlcmVy
KCktPngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckJvdW5kcy55KCkgLSBy
ZW5kZXJlcigpLT55KCkgKyByZW5kZXJlcigpLT5ib3JkZXJUb3BFeHRyYSgpLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBIaXRUZXN0RGVzY2VuZGFudHMpKSB7CiAgICAgICAgIC8vIEZv
ciBwb3NpdGlvbmVkIGdlbmVyYXRlZCBjb250ZW50LCB3ZSBtaWdodCBzdGlsbCBub3QgaGF2ZSBh
CiAgICAgICAgIC8vIG5vZGUgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIHRoZSBsYXllciBsZXZlbCwg
c2luY2Ugbm9uZSBvZgpAQCAtMTk3OCw4ICsxOTg2LDggQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxh
eWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1v
dXNlIGlzIGluc2lkZSB0aGlzIGxheWVyIGJ1dCBub3QgYW55IG9mIGl0cyBjaGlsZHJlbi4KICAg
ICBpZiAoYmdSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkgJiYKICAgICAgICAgcmVuZGVyZXIo
KS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQb2ludCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsYXllckJvdW5kcy54KCkgLSByZW5kZXJlcigpLT54UG9zKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueSgpIC0gcmVuZGVyZXIoKS0+eVBv
cygpICsgcmVuZGVyZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsYXllckJvdW5kcy54KCkgLSByZW5kZXJlcigpLT54KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueSgpIC0gcmVuZGVyZXIoKS0+eSgpICsgcmVuZGVy
ZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRU
ZXN0U2VsZikpIHsKICAgICAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb2RlKCkgfHwgIXJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKSkgewogICAgICAgICAgICAgTm9kZSogZSA9IGVuY2xvc2luZ0Vs
ZW1lbnQoKTsKQEAgLTIxMjIsNyArMjEzMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0
ZVJlY3RzKGNvbnN0IFIKICAgICBpbnQgeCA9IDA7CiAgICAgaW50IHkgPSAwOwogICAgIGNvbnZl
cnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgeCwgeSk7Ci0gICAgbGF5ZXJCb3VuZHMgPSBJbnRS
ZWN0KHgseSx3aWR0aCgpLGhlaWdodCgpKTsKKyAgICBsYXllckJvdW5kcyA9IEludFJlY3QoeCwg
eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgY2xpcCByZWN0
cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGNoaWxkIGxheWVycy4KICAgICBpZiAocmVuZGVyZXIo
KS0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIoKS0+aGFzQ2xpcCgpKSB7CkBAIC0yMjE3
LDEyICsyMjI1LDEyIEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFIK
ICAgICAgICAgaW50IGxlZnQgPSBmaXJzdEJveC0+eFBvcygpOwogICAgICAgICBmb3IgKElubGlu
ZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94LT5uZXh0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+bmV4dExpbmVCb3goKSkKICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgY3Vyci0+eFBv
cygpKTsKLSAgICAgICAgcmVzdWx0ID0gSW50UmVjdChtX3ggKyBsZWZ0LCBtX3kgKyAodG9wIC0g
cmVuZGVyZXIoKS0+eVBvcygpKSwgd2lkdGgoKSwgYm90dG9tIC0gdG9wKTsKKyAgICAgICAgcmVz
dWx0ID0gSW50UmVjdChtX3ggKyBsZWZ0LCBtX3kgKyAodG9wIC0gcmVuZGVyZXIoKS0+eSgpKSwg
d2lkdGgoKSwgYm90dG9tIC0gdG9wKTsKICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyKCktPmlzVGFi
bGVSb3coKSkgewogICAgICAgICAvLyBPdXIgYm91bmRpbmcgYm94IGlzIGp1c3QgdGhlIHVuaW9u
IG9mIGFsbCBvZiBvdXIgY2VsbHMnIGJvcmRlci9vdmVyZmxvdyByZWN0cy4KICAgICAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGNoaWxkID0gcmVuZGVyZXIoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5p
c1RhYmxlQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBiYm94ID0gY2hpbGQtPmJv
cmRlckJveCgpOworICAgICAgICAgICAgICAgIEludFJlY3QgYmJveCA9IHN0YXRpY19jYXN0PFJl
bmRlckJveCo+KGNoaWxkKS0+Ym9yZGVyQm94UmVjdCgpOwogICAgICAgICAgICAgICAgIGJib3gu
bW92ZSgwLCBjaGlsZC0+Ym9yZGVyVG9wRXh0cmEoKSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuaXRlKGJib3gpOwogICAgICAgICAgICAgICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0ID0gcmVu
ZGVyZXIoKS0+b3ZlcmZsb3dSZWN0KGZhbHNlKTsKQEAgLTIyMzYsNyArMjI0NCw3IEBAIEludFJl
Y3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFIKICAgICAgICAgaWYgKHJlbmRlcmVy
KCktPmhhc01hc2soKSkKICAgICAgICAgICAgIHJlc3VsdCA9IHJlbmRlcmVyKCktPm1hc2tDbGlw
UmVjdCgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEludFJlY3QgYmJveCA9IHJlbmRl
cmVyKCktPmJvcmRlckJveCgpOworICAgICAgICAgICAgSW50UmVjdCBiYm94ID0gcmVuZGVyZXIo
KS0+Ym9yZGVyQm94UmVjdCgpOwogICAgICAgICAgICAgcmVzdWx0ID0gYmJveDsKICAgICAgICAg
ICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0ID0gcmVuZGVyZXIoKS0+b3ZlcmZsb3dSZWN0KGZhbHNl
KTsKICAgICAgICAgICAgIGlmIChiYm94ICE9IG92ZXJmbG93UmVjdCkKQEAgLTIyNDQsNyArMjI1
Miw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFIKICAgICAgICAg
fQogCiAgICAgICAgIC8vIFdlIGhhdmUgdG8gYWRqdXN0IHRoZSB4L3kgb2YgdGhpcyByZXN1bHQg
c28gdGhhdCBpdCBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgbGF5ZXIuCi0gICAg
ICAgIC8vIFdlIGFsc28gaGF2ZSB0byBhZGQgaW4gYm9yZGVyVG9wRXh0cmEgaGVyZSwgc2luY2Ug
Ym9yZGVyQm94KCksIGluIG9yZGVyIHRvIHBsYXkgd2VsbCB3aXRoIG1ldGhvZHMgbGlrZQorICAg
ICAgICAvLyBXZSBhbHNvIGhhdmUgdG8gYWRkIGluIGludHJpbnNpY1BhZGRpbmdUb3AgaGVyZSwg
c2luY2UgYm9yZGVyQm94UmVjdCgpLCBpbiBvcmRlciB0byBwbGF5IHdlbGwgd2l0aCBtZXRob2Rz
IGxpa2UKICAgICAgICAgLy8gZmxvYXRSZWN0IHRoYXQgZGVhbCB3aXRoIGNoaWxkIGNvbnRlbnQs
IHVzZXMgYW4gb3JpZ2luIG9mICgwLDApIHRoYXQgaXMgYXQgdGhlIGNoaWxkIGNvbnRlbnQgYm94
IChzbwogICAgICAgICAvLyBib3JkZXIgYm94IHJldHVybnMgYSB5IGNvb3JkIG9mIC1ib3JkZXJU
b3BFeHRyYSgpLiAgVGhlIGxheWVyLCBob3dldmVyLCB1c2VzIHRoZSBvdXRlciBib3guICBUaGlz
IGlzIGFsbAogICAgICAgICAvLyByZWFsbHkgY29uZnVzaW5nLgpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lk
IFJlbmRlckxpc3RCb3g6OmNhbGNIZWlnaHQoKQogICAgIGludCB0b0FkZCA9IHBhZGRpbmdUb3Ao
KSArIHBhZGRpbmdCb3R0b20oKSArIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCk7CiAgCiAg
ICAgaW50IGl0ZW1IZWlnaHQgPSBSZW5kZXJMaXN0Qm94OjppdGVtSGVpZ2h0KCk7Ci0gICAgbV9o
ZWlnaHQgPSBpdGVtSGVpZ2h0ICogc2l6ZSgpIC0gcm93U3BhY2luZyArIHRvQWRkOworICAgIHNl
dEhlaWdodChpdGVtSGVpZ2h0ICogc2l6ZSgpIC0gcm93U3BhY2luZyArIHRvQWRkKTsKICAgICAK
ICAgICBSZW5kZXJCbG9jazo6Y2FsY0hlaWdodCgpOwogICAgIApAQCAtNTc4LDcgKzU3OCw3IEBA
IHZvaWQgUmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXcKIAogSW50UmVjdCBSZW5k
ZXJMaXN0Qm94Ojpjb250cm9sQ2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpIGNvbnN0CiB7Ci0gICAg
SW50UmVjdCBjbGlwUmVjdCA9IGNvbnRlbnRCb3goKTsKKyAgICBJbnRSZWN0IGNsaXBSZWN0ID0g
Y29udGVudEJveFJlY3QoKTsKICAgICBjbGlwUmVjdC5tb3ZlKHR4LCB0eSk7CiAgICAgcmV0dXJu
IGNsaXBSZWN0OwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2
aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNSwxMiArMjM1LDEyIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06Omxh
eW91dCgpCiB2b2lkIFJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxpc3RNYXJrZXIoKQogewogICAg
IGlmIChtX21hcmtlciAmJiAhbV9tYXJrZXItPmlzSW5zaWRlKCkgJiYgbV9tYXJrZXItPmlubGlu
ZUJveFdyYXBwZXIoKSkgewotICAgICAgICBpbnQgbWFya2VyT2xkWCA9IG1fbWFya2VyLT54UG9z
KCk7CisgICAgICAgIGludCBtYXJrZXJPbGRYID0gbV9tYXJrZXItPngoKTsKICAgICAgICAgaW50
IHlPZmZzZXQgPSAwOwogICAgICAgICBpbnQgeE9mZnNldCA9IDA7Ci0gICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBvID0gbV9tYXJrZXItPnBhcmVudCgpOyBvICE9IHRoaXM7IG8gPSBvLT5wYXJl
bnQoKSkgewotICAgICAgICAgICAgeU9mZnNldCArPSBvLT55UG9zKCk7Ci0gICAgICAgICAgICB4
T2Zmc2V0ICs9IG8tPnhQb3MoKTsKKyAgICAgICAgZm9yIChSZW5kZXJCb3gqIG8gPSBtX21hcmtl
ci0+cGFyZW50Qm94KCk7IG8gIT0gdGhpczsgbyA9IG8tPnBhcmVudEJveCgpKSB7CisgICAgICAg
ICAgICB5T2Zmc2V0ICs9IG8tPnkoKTsKKyAgICAgICAgICAgIHhPZmZzZXQgKz0gby0+eCgpOwog
ICAgICAgICB9CiAKICAgICAgICAgYm9vbCBhZGp1c3RPdmVyZmxvdyA9IGZhbHNlOwpAQCAtMjY3
LDEyICsyNjcsMTIgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKAog
CiAgICAgICAgIGlmIChhZGp1c3RPdmVyZmxvdykgewogICAgICAgICAgICAgSW50UmVjdCBtYXJr
ZXJSZWN0KG1hcmtlclhQb3MgKyB4T2Zmc2V0LCB5T2Zmc2V0LCBtX21hcmtlci0+d2lkdGgoKSwg
bV9tYXJrZXItPmhlaWdodCgpKTsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogbyA9IG1fbWFy
a2VyOworICAgICAgICAgICAgUmVuZGVyQm94KiBvID0gbV9tYXJrZXI7CiAgICAgICAgICAgICBk
byB7Ci0gICAgICAgICAgICAgICAgbyA9IG8tPnBhcmVudCgpOworICAgICAgICAgICAgICAgIG8g
PSBvLT5wYXJlbnRCb3goKTsKICAgICAgICAgICAgICAgICBpZiAoby0+aXNSZW5kZXJCbG9jaygp
KQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG8pLT5hZGRW
aXN1YWxPdmVyZmxvdyhtYXJrZXJSZWN0KTsKLSAgICAgICAgICAgICAgICBtYXJrZXJSZWN0Lm1v
dmUoLW8tPnhQb3MoKSwgLW8tPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgbWFya2VyUmVjdC5t
b3ZlKC1vLT54KCksIC1vLT55KCkpOwogICAgICAgICAgICAgfSB3aGlsZSAobyAhPSB0aGlzKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVt
Ojpwb3NpdGlvbkxpc3RNYXJrZXIoCiAKIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBpZiAoIW1faGVpZ2h0KQor
ICAgIGlmICghaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlckJsb2NrOjpw
YWludChwYWludEluZm8sIHR4LCB0eSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDcgKzUzMCw3IEBAIHZvaWQgUmVu
ZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBJbnRSZWN0IG1hcmtlciA9IGdl
dFJlbGF0aXZlTWFya2VyUmVjdCgpOwogICAgIG1hcmtlci5tb3ZlKHR4LCB0eSk7CiAKLSAgICBJ
bnRSZWN0IGJveCh0eCArIG1feCwgdHkgKyBtX3ksIG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBJ
bnRSZWN0IGJveCh0eCArIHgoKSwgdHkgKyBtX2ZyYW1lUmVjdC55KCksIHdpZHRoKCksIGhlaWdo
dCgpKTsKIAogICAgIGlmIChib3gueSgpID4gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgfHwgYm94
LnkoKSArIGJveC5oZWlnaHQoKSA8IHBhaW50SW5mby5yZWN0LnkoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNjM2LDExICs2MzYsMTEgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpsYXlvdXQoKQog
ICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5KCkpOwogCiAgICAgaWYgKGlzSW1hZ2UoKSkgewot
ICAgICAgICBtX3dpZHRoID0gbV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSkud2lkdGgoKTsKLSAgICAgICAgbV9oZWlnaHQgPSBtX2ltYWdlLT5pbWFnZVNp
emUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS5oZWlnaHQoKTsKKyAgICAgICAgc2V0
V2lkdGgobV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSku
d2lkdGgoKSk7CisgICAgICAgIHNldEhlaWdodChtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS5oZWlnaHQoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
bV93aWR0aCA9IG1pblByZWZXaWR0aCgpOwotICAgICAgICBtX2hlaWdodCA9IHN0eWxlKCktPmZv
bnQoKS5oZWlnaHQoKTsKKyAgICAgICAgc2V0V2lkdGgobWluUHJlZldpZHRoKCkpOworICAgICAg
ICBzZXRIZWlnaHQoc3R5bGUoKS0+Zm9udCgpLmhlaWdodCgpKTsKICAgICB9CiAKICAgICBtX21h
cmdpbkxlZnQgPSBtX21hcmdpblJpZ2h0ID0gMDsKQEAgLTY2MSw3ICs2NjEsNyBAQCB2b2lkIFJl
bmRlckxpc3RNYXJrZXI6OmltYWdlQ2hhbmdlZChXcmFwCiAgICAgaWYgKG8gIT0gbV9pbWFnZS0+
ZGF0YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV93aWR0aCAhPSBtX2ltYWdlLT5p
bWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS53aWR0aCgpIHx8IG1faGVp
Z2h0ICE9IG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
LmhlaWdodCgpIHx8IG1faW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKKyAgICBpZiAod2lkdGgoKSAh
PSBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS53aWR0
aCgpIHx8IGhlaWdodCgpICE9IG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCkpLmhlaWdodCgpIHx8IG1faW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKICAgICAg
ICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgZWxzZQogICAgICAg
ICByZXBhaW50KCk7CkBAIC04MjksNyArODI5LDcgQEAgYm9vbCBSZW5kZXJMaXN0TWFya2VyOjpp
c0luc2lkZSgpIGNvbnN0CiBJbnRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OmdldFJlbGF0aXZlTWFy
a2VyUmVjdCgpCiB7CiAgICAgaWYgKGlzSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
bV94LCBtX3ksIG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpLndpZHRoKCksIG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoeCgpLCBtX2ZyYW1lUmVj
dC55KCksIG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
LndpZHRoKCksIG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpLmhlaWdodCgpKTsKIAogICAgIHN3aXRjaCAoc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpKSB7
CiAgICAgICAgIGNhc2UgRElTQzoKQEAgLTgzOSw3ICs4MzksNyBAQCBJbnRSZWN0IFJlbmRlckxp
c3RNYXJrZXI6OmdldFJlbGF0aXZlTWFyCiAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0g
c3R5bGUoKS0+Zm9udCgpOwogICAgICAgICAgICAgaW50IGFzY2VudCA9IGZvbnQuYXNjZW50KCk7
CiAgICAgICAgICAgICBpbnQgYnVsbGV0V2lkdGggPSAoYXNjZW50ICogMiAvIDMgKyAxKSAvIDI7
Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdChtX3ggKyAxLCBtX3kgKyAzICogKGFzY2VudCAt
IGFzY2VudCAqIDIgLyAzKSAvIDIsIGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCk7CisgICAgICAg
ICAgICByZXR1cm4gSW50UmVjdCh4KCkgKyAxLCBtX2ZyYW1lUmVjdC55KCkgKyAzICogKGFzY2Vu
dCAtIGFzY2VudCAqIDIgLyAzKSAvIDIsIGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCk7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBMTk9ORToKICAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7
CkBAIC04NjYsNyArODY2LDcgQEAgSW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2
ZU1hcgogICAgICAgICAgICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgobV90ZXh0KTsKICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyIHBlcmlvZFNwYWNlWzJdID0geyAnLicsICcgJyB9OwogICAg
ICAgICAgICAgaW50IHBlcmlvZFNwYWNlV2lkdGggPSBmb250LndpZHRoKFRleHRSdW4ocGVyaW9k
U3BhY2UsIDIpKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KG1feCwgbV95ICsgZm9udC5h
c2NlbnQoKSwgaXRlbVdpZHRoICsgcGVyaW9kU3BhY2VXaWR0aCwgZm9udC5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gSW50UmVjdCh4KCksIG1fZnJhbWVSZWN0LnkoKSArIGZvbnQuYXNj
ZW50KCksIGl0ZW1XaWR0aCArIHBlcmlvZFNwYWNlV2lkdGgsIGZvbnQuaGVpZ2h0KCkpOwogICAg
IH0KIAogICAgIHJldHVybiBJbnRSZWN0KCk7CkBAIC04ODksNyArODg5LDcgQEAgSW50UmVjdCBS
ZW5kZXJMaXN0TWFya2VyOjpzZWxlY3Rpb25SZWN0KAogICAgICAgICByZXR1cm4gSW50UmVjdCgp
OwogCiAgICAgUm9vdElubGluZUJveCogcm9vdCA9IGlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgp
OwotICAgIEludFJlY3QgcmVjdCgwLCByb290LT5zZWxlY3Rpb25Ub3AoKSAtIHlQb3MoKSwgd2lk
dGgoKSwgcm9vdC0+c2VsZWN0aW9uSGVpZ2h0KCkpOworICAgIEludFJlY3QgcmVjdCgwLCByb290
LT5zZWxlY3Rpb25Ub3AoKSAtIHkoKSwgd2lkdGgoKSwgcm9vdC0+c2VsZWN0aW9uSGVpZ2h0KCkp
OwogICAgICAgICAgICAgCiAgICAgaWYgKGNsaXBUb1Zpc2libGVDb250ZW50KQogICAgICAgICBj
b21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyZWN0KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1hcnF1ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1hcnF1ZWUuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1hcnF1ZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgYm9vbCBSZW5k
ZXJNYXJxdWVlOjppc0hvcml6b250YWwoKSBjb25zdAogCiBpbnQgUmVuZGVyTWFycXVlZTo6Y29t
cHV0ZVBvc2l0aW9uKEVNYXJxdWVlRGlyZWN0aW9uIGRpciwgYm9vbCBzdG9wQXRDb250ZW50RWRn
ZSkKIHsKLSAgICBSZW5kZXJPYmplY3QqIG8gPSBtX2xheWVyLT5yZW5kZXJlcigpOworICAgIFJl
bmRlckJveCogbyA9IG1fbGF5ZXItPnJlbmRlcmVyKCk7CiAgICAgUmVuZGVyU3R5bGUqIHMgPSBv
LT5zdHlsZSgpOwogICAgIGlmIChpc0hvcml6b250YWwoKSkgewogICAgICAgICBib29sIGx0ciA9
IHMtPmRpcmVjdGlvbigpID09IExUUjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
ZGlhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJ
KHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDUsMTYgKzEwNSwxNiBAQCBNZWRpYVBsYXllciogUmVuZGVyTWVk
aWE6OnBsYXllcigpIGNvbnN0CiAKIHZvaWQgUmVuZGVyTWVkaWE6OmxheW91dCgpCiB7Ci0gICAg
SW50U2l6ZSBvbGRTaXplID0gY29udGVudEJveCgpLnNpemUoKTsKKyAgICBJbnRTaXplIG9sZFNp
emUgPSBjb250ZW50Qm94UmVjdCgpLnNpemUoKTsKIAogICAgIFJlbmRlclJlcGxhY2VkOjpsYXlv
dXQoKTsKIAotICAgIFJlbmRlck9iamVjdCogY29udHJvbHNSZW5kZXJlciA9IG1fY29udHJvbHNT
aGFkb3dSb290ID8gbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkgOiAwOworICAgIFJl
bmRlckJveCogY29udHJvbHNSZW5kZXJlciA9IG1fY29udHJvbHNTaGFkb3dSb290ID8gbV9jb250
cm9sc1NoYWRvd1Jvb3QtPnJlbmRlckJveCgpIDogMDsKICAgICBpZiAoIWNvbnRyb2xzUmVuZGVy
ZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBJbnRTaXplIG5ld1NpemUgPSBjb250ZW50Qm94KCku
c2l6ZSgpOworICAgIEludFNpemUgbmV3U2l6ZSA9IGNvbnRlbnRCb3hSZWN0KCkuc2l6ZSgpOwog
ICAgIGlmIChuZXdTaXplICE9IG9sZFNpemUgfHwgY29udHJvbHNSZW5kZXJlci0+bmVlZHNMYXlv
dXQoKSkgewotICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5zZXRQb3MoYm9yZGVyTGVmdCgpICsg
cGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOworICAgICAgICBjb250
cm9sc1JlbmRlcmVyLT5zZXRMb2NhdGlvbihib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBi
b3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CiAgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnN0
eWxlKCktPnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKICAgICAg
ICAgY29udHJvbHNSZW5kZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKG5ld1NpemUud2lk
dGgoKSwgRml4ZWQpKTsKICAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQo
dHJ1ZSwgZmFsc2UpOwpAQCAtNDQwLDcgKzQ0MCw3IEBAIGludCBSZW5kZXJNZWRpYTo6bG93ZXN0
UG9zaXRpb24oYm9vbCBpbmMKICAgICBpZiAoIW1fY29udHJvbHNTaGFkb3dSb290IHx8ICFtX2Nv
bnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGJvdHRvbTsKICAg
ICAKLSAgICByZXR1cm4gbWF4KGJvdHRvbSwgIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJl
cigpLT55UG9zKCkgKyBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKS0+bG93ZXN0UG9z
aXRpb24oaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGluY2x1ZGVTZWxmKSk7CisgICAgcmV0dXJu
IG1heChib3R0b20sICBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyQm94KCktPnkoKSArIG1f
Y29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpLT5sb3dlc3RQb3NpdGlvbihpbmNsdWRlT3Zl
cmZsb3dJbnRlcmlvciwgaW5jbHVkZVNlbGYpKTsKIH0KIAogaW50IFJlbmRlck1lZGlhOjpyaWdo
dG1vc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVT
ZWxmKSBjb25zdApAQCAtNDQ5LDcgKzQ0OSw3IEBAIGludCBSZW5kZXJNZWRpYTo6cmlnaHRtb3N0
UG9zaXRpb24oYm9vbCAKICAgICBpZiAoIW1fY29udHJvbHNTaGFkb3dSb290IHx8ICFtX2NvbnRy
b2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIAot
ICAgIHJldHVybiBtYXgocmlnaHQsIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpLT54
UG9zKCkgKyBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKS0+cmlnaHRtb3N0UG9zaXRp
b24oaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGluY2x1ZGVTZWxmKSk7CisgICAgcmV0dXJuIG1h
eChyaWdodCwgbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlckJveCgpLT54KCkgKyBtX2NvbnRy
b2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKS0+cmlnaHRtb3N0UG9zaXRpb24oaW5jbHVkZU92ZXJm
bG93SW50ZXJpb3IsIGluY2x1ZGVTZWxmKSk7CiB9CiAKIGludCBSZW5kZXJNZWRpYTo6bGVmdG1v
c3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxm
KSBjb25zdApAQCAtNDU4LDcgKzQ1OCw3IEBAIGludCBSZW5kZXJNZWRpYTo6bGVmdG1vc3RQb3Np
dGlvbihib29sIGkKICAgICBpZiAoIW1fY29udHJvbHNTaGFkb3dSb290IHx8ICFtX2NvbnRyb2xz
U2hhZG93Um9vdC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGxlZnQ7CiAgICAgCi0gICAg
cmV0dXJuIG1pbihsZWZ0LCBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKS0+eFBvcygp
ICsgIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpLT5sZWZ0bW9zdFBvc2l0aW9uKGlu
Y2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBpbmNsdWRlU2VsZikpOworICAgIHJldHVybiBtaW4obGVm
dCwgbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlckJveCgpLT54KCkgKyAgbV9jb250cm9sc1No
YWRvd1Jvb3QtPnJlbmRlcmVyKCktPmxlZnRtb3N0UG9zaXRpb24oaW5jbHVkZU92ZXJmbG93SW50
ZXJpb3IsIGluY2x1ZGVTZWxmKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQs
OCArMjI0LDggQEAgSW50UmVjdCBSZW5kZXJNZW51TGlzdDo6Y29udHJvbENsaXBSZWN0KAogICAg
ICAgICAgICAgICAgICAgIGNvbnRlbnRXaWR0aCgpLCAKICAgICAgICAgICAgICAgICAgICBjb250
ZW50SGVpZ2h0KCkpOwogICAgIAotICAgIEludFJlY3QgaW5uZXJCb3godHggKyBtX2lubmVyQmxv
Y2stPnhQb3MoKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ0xlZnQoKSwgCi0gICAgICAgICAgICAg
ICAgICAgdHkgKyBtX2lubmVyQmxvY2stPnlQb3MoKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ1Rv
cCgpLAorICAgIEludFJlY3QgaW5uZXJCb3godHggKyBtX2lubmVyQmxvY2stPngoKSArIG1faW5u
ZXJCbG9jay0+cGFkZGluZ0xlZnQoKSwgCisgICAgICAgICAgICAgICAgICAgdHkgKyBtX2lubmVy
QmxvY2stPnkoKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ1RvcCgpLAogICAgICAgICAgICAgICAg
ICAgIG1faW5uZXJCbG9jay0+Y29udGVudFdpZHRoKCksIAogICAgICAgICAgICAgICAgICAgIG1f
aW5uZXJCbG9jay0+Y29udGVudEhlaWdodCgpKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsNyBAQCBSZW5kZXJPYmplY3Q6
OlJlbmRlck9iamVjdChOb2RlKiBub2RlKQogICAgICwgbV9wYWludEJhY2tncm91bmQoZmFsc2Up
CiAgICAgLCBtX2lzQW5vbnltb3VzKG5vZGUgPT0gbm9kZS0+ZG9jdW1lbnQoKSkKICAgICAsIG1f
aXNUZXh0KGZhbHNlKQorICAgICwgbV9pc0JveChmYWxzZSkKICAgICAsIG1faW5saW5lKHRydWUp
CiAgICAgLCBtX3JlcGxhY2VkKGZhbHNlKQogICAgICwgbV9pc0RyYWdnaW5nKGZhbHNlKQpAQCAt
NTA0LDgzICs1MDUsNiBAQCBSZW5kZXJCbG9jayogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVCbG9j
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJPYmplY3Q6Om9mZnNldExlZnQoKSBjb25z
dAotewotICAgIFJlbmRlck9iamVjdCogb2Zmc2V0UGFyID0gb2Zmc2V0UGFyZW50KCk7Ci0gICAg
aWYgKCFvZmZzZXRQYXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIGludCB4ID0geFBvcygpIC0g
b2Zmc2V0UGFyLT5ib3JkZXJMZWZ0KCk7Ci0gICAgaWYgKCFpc1Bvc2l0aW9uZWQoKSkgewotICAg
ICAgICBpZiAoaXNSZWxQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICB4ICs9IHN0YXRpY19jYXN0
PGNvbnN0IFJlbmRlckJveCo+KHRoaXMpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpOwotICAg
ICAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBwYXJlbnQoKTsKLSAgICAgICAgd2hpbGUgKGN1cnIg
JiYgY3VyciAhPSBvZmZzZXRQYXIpIHsKLSAgICAgICAgICAgIHggKz0gY3Vyci0+eFBvcygpOwot
ICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChvZmZzZXRQYXItPmlzQm9keSgpICYmICFvZmZzZXRQYXItPmlzUmVsUG9zaXRpb25lZCgpICYm
ICFvZmZzZXRQYXItPmlzUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgeCArPSBvZmZzZXRQYXIt
PnhQb3MoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLWludCBSZW5kZXJPYmplY3Q6Om9m
ZnNldFRvcCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyT2JqZWN0KiBvZmZzZXRQYXIgPSBvZmZzZXRQ
YXJlbnQoKTsKLSAgICBpZiAoIW9mZnNldFBhcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaW50
IHkgPSB5UG9zKCkgLSBib3JkZXJUb3BFeHRyYSgpIC0gb2Zmc2V0UGFyLT5ib3JkZXJUb3AoKTsK
LSAgICBpZiAoIWlzUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlmIChpc1JlbFBvc2l0aW9uZWQo
KSkKLSAgICAgICAgICAgIHkgKz0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94Kj4odGhpcykt
PnJlbGF0aXZlUG9zaXRpb25PZmZzZXRZKCk7Ci0gICAgICAgIFJlbmRlck9iamVjdCogY3VyciA9
IHBhcmVudCgpOwotICAgICAgICB3aGlsZSAoY3VyciAmJiBjdXJyICE9IG9mZnNldFBhcikgewot
ICAgICAgICAgICAgaWYgKCFjdXJyLT5pc1RhYmxlUm93KCkpCi0gICAgICAgICAgICAgICAgeSAr
PSBjdXJyLT55UG9zKCk7Ci0gICAgICAgICAgICBjdXJyID0gY3Vyci0+cGFyZW50KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG9mZnNldFBhci0+aXNCb2R5KCkgJiYgIW9mZnNldFBhci0+aXNS
ZWxQb3NpdGlvbmVkKCkgJiYgIW9mZnNldFBhci0+aXNQb3NpdGlvbmVkKCkpCi0gICAgICAgICAg
ICB5ICs9IG9mZnNldFBhci0+eVBvcygpOwotICAgIH0KLSAgICByZXR1cm4geTsKLX0KLQotUmVu
ZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6Om9mZnNldFBhcmVudCgpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IEl0IGZlZWxzIGxpa2UgdGhpcyBmdW5jdGlvbiBjb3VsZCBhbG1vc3QgYmUgd3JpdHRl
biB1c2luZyBjb250YWluaW5nIGJsb2Nrcy4KLSAgICBpZiAoaXNCb2R5KCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgYm9vbCBza2lwVGFibGVzID0gaXNQb3NpdGlvbmVkKCkgfHwgaXNSZWxQ
b3NpdGlvbmVkKCk7Ci0gICAgZmxvYXQgY3Vyclpvb20gPSBzdHlsZSgpLT5lZmZlY3RpdmVab29t
KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gcGFyZW50KCk7Ci0gICAgd2hpbGUgKGN1cnIg
JiYgKCFjdXJyLT5lbGVtZW50KCkgfHwKLSAgICAgICAgICAgICAgICAgICAgKCFjdXJyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhY3Vyci0+aXNSZWxQb3NpdGlvbmVkKCkgJiYgIWN1cnItPmlzQm9keSgp
KSkpIHsKLSAgICAgICAgTm9kZSogZWxlbWVudCA9IGN1cnItPmVsZW1lbnQoKTsKLSAgICAgICAg
aWYgKCFza2lwVGFibGVzICYmIGVsZW1lbnQpIHsKLSAgICAgICAgICAgIGJvb2wgaXNUYWJsZUVs
ZW1lbnQgPSBlbGVtZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKSB8fAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUodGRUYWcpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZyk7Ci0K
LSNpZiBFTkFCTEUoV01MKQotICAgICAgICAgICAgaWYgKCFpc1RhYmxlRWxlbWVudCAmJiBlbGVt
ZW50LT5pc1dNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICBpc1RhYmxlRWxlbWVudCA9IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoV01MTmFtZXM6OnRhYmxlVGFnKSB8fAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShXTUxOYW1lczo6dGRUYWcpOwot
I2VuZGlmCi0KLSAgICAgICAgICAgIGlmIChpc1RhYmxlRWxlbWVudCkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IG5ld1pvb20gPSBjdXJyLT5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIGlmIChjdXJyWm9vbSAhPSBuZXdab29tKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGN1cnJab29tID0gbmV3Wm9vbTsKLSAgICAgICAg
Y3VyciA9IGN1cnItPnBhcmVudCgpOwotICAgIH0KLSAgICByZXR1cm4gY3VycjsKLX0KLQogaW50
IFJlbmRlck9iamVjdDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPnZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoKSA6IDA7CkBAIC01OTEsNTIgKzUxNSw2IEBAIGludCBSZW5kZXJPYmplY3Q6
Omhvcml6b250YWxTY3JvbGxiYXJIZWkKICAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3Jv
bGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwog
fQogCi0vLyBNb3JlIElFIGV4dGVuc2lvbnMuICBjbGllbnRXaWR0aCBhbmQgY2xpZW50SGVpZ2h0
IHJlcHJlc2VudCB0aGUgaW50ZXJpb3Igb2YgYW4gb2JqZWN0Ci0vLyBleGNsdWRpbmcgYm9yZGVy
IGFuZCBzY3JvbGxiYXIuCi1pbnQgUmVuZGVyT2JqZWN0OjpjbGllbnRXaWR0aCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHdpZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCgpOwotfQotCi1pbnQgUmVuZGVyT2JqZWN0OjpjbGllbnRIZWln
aHQoKSBjb25zdAotewotICAgIHJldHVybiBoZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVy
Qm90dG9tKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7Ci19Ci0KLS8vIHNjcm9sbFdp
ZHRoL3Njcm9sbEhlaWdodCB3aWxsIGJlIHRoZSBzYW1lIGFzIGNsaWVudFdpZHRoL2NsaWVudEhl
aWdodCB1bmxlc3MgdGhlCi0vLyBvYmplY3QgaGFzIG92ZXJmbG93OmhpZGRlbi9zY3JvbGwvYXV0
byBzcGVjaWZpZWQgYW5kIGFsc28gaGFzIG92ZXJmbG93LgotaW50IFJlbmRlck9iamVjdDo6c2Ny
b2xsV2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSA/IGxheWVy
KCktPnNjcm9sbFdpZHRoKCkgOiBvdmVyZmxvd1dpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJPYmpl
Y3Q6OnNjcm9sbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgp
ID8gbGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCkgOiBvdmVyZmxvd0hlaWdodCgpOwotfQotCi1pbnQg
UmVuZGVyT2JqZWN0OjpzY3JvbGxMZWZ0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzT3ZlcmZs
b3dDbGlwKCkgPyBsYXllcigpLT5zY3JvbGxYT2Zmc2V0KCkgOiAwOwotfQotCi1pbnQgUmVuZGVy
T2JqZWN0OjpzY3JvbGxUb3AoKSBjb25zdAotewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAo
KSA/IGxheWVyKCktPnNjcm9sbFlPZmZzZXQoKSA6IDA7Ci19Ci0KLXZvaWQgUmVuZGVyT2JqZWN0
OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdMZWZ0KQotewotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAo
KSkKLSAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsVG9YT2Zmc2V0KG5ld0xlZnQpOwotfQotCi12b2lk
IFJlbmRlck9iamVjdDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3ApCi17Ci0gICAgaWYgKGhhc092
ZXJmbG93Q2xpcCgpKQotICAgICAgICBsYXllcigpLT5zY3JvbGxUb1lPZmZzZXQobmV3VG9wKTsK
LX0KLQogYm9vbCBSZW5kZXJPYmplY3Q6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKIHsKICAg
ICBSZW5kZXJMYXllciogbCA9IGxheWVyKCk7CkBAIC02NzYsNyArNTU0LDcgQEAgYm9vbCBSZW5k
ZXJPYmplY3Q6Omhhc1N0YXRpY1koKSBjb25zdAogICAgIHJldHVybiAoc3R5bGUoKS0+dG9wKCku
aXNBdXRvKCkgJiYgc3R5bGUoKS0+Ym90dG9tKCkuaXNBdXRvKCkpIHx8IHN0eWxlKCktPnRvcCgp
LmlzU3RhdGljKCk7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjptYXJrQWxsRGVzY2VuZGFudHNX
aXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRlck9iamVjdCopCit2b2lkIFJlbmRlck9iamVjdDo6bWFy
a0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqKQogewogfQogCkBA
IC0xNjk3LDkyICsxNTc1LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50Qm94U2hhZG93KEdy
YXBoaQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OmFkZExpbmVCb3hSZWN0cyhWZWN0
b3I8SW50UmVjdD4mLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJvb2wpCi17Ci19Ci0KLXZvaWQgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwg
aW50IHR5LCBib29sIHRvcExldmVsKQotewotICAgIC8vIEZvciBibG9ja3MgaW5zaWRlIGlubGlu
ZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNsdWRlIG1hcmdpbnMgc28gdGhhdCB3ZSBydW4gcmlnaHQg
dXAgdG8gdGhlCi0gICAgLy8gaW5saW5lIGJveGVzIGFib3ZlIGFuZCBiZWxvdyB1cyAodGh1cyBn
ZXR0aW5nIG1lcmdlZCB3aXRoIHRoZW0gdG8gZm9ybSBhIHNpbmdsZSBpcnJlZ3VsYXIKLSAgICAv
LyBzaGFwZSkuCi0gICAgUmVuZGVyRmxvdyogY29udGludWF0aW9uID0gdmlydHVhbENvbnRpbnVh
dGlvbigpOwotICAgIGlmICh0b3BMZXZlbCAmJiBjb250aW51YXRpb24pIHsKLSAgICAgICAgcmVj
dHMuYXBwZW5kKEludFJlY3QodHgsIHR5IC0gY29sbGFwc2VkTWFyZ2luVG9wKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCksIGhlaWdodCgpICsgY29sbGFwc2VkTWFyZ2lu
VG9wKCkgKyBjb2xsYXBzZWRNYXJnaW5Cb3R0b20oKSkpOwotICAgICAgICBjb250aW51YXRpb24t
PmFic29sdXRlUmVjdHMocmVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eCAtIHhQb3MoKSArIGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCktPnhQb3MoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geVBvcygpICsgY29udGlu
dWF0aW9uLT5jb250YWluaW5nQmxvY2soKS0+eVBvcygpLCB0b3BMZXZlbCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkg
KyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSkpOwotfQotCi1JbnRSZWN0
IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1z
KQotewotICAgIGlmICh1c2VUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+
IHF1YWRzOwotICAgICAgICBhYnNvbHV0ZVF1YWRzKHF1YWRzKTsKLQotICAgICAgICBzaXplX3Qg
biA9IHF1YWRzLnNpemUoKTsKLSAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKLSAgICAKLSAgICAgICAgSW50UmVjdCByZXN1bHQgPSBxdWFkc1swXS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG47ICsraSkK
LSAgICAgICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IGFic1Bv
cyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwotICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKLSAgICBh
YnNvbHV0ZVJlY3RzKHJlY3RzLCBhYnNQb3MueCgpLCBhYnNQb3MueSgpKTsKLQotICAgIHNpemVf
dCBuID0gcmVjdHMuc2l6ZSgpOwotICAgIGlmICghbikKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
KTsKLQotICAgIEludFJlY3QgcmVzdWx0ID0gcmVjdHNbMF07Ci0gICAgZm9yIChzaXplX3QgaSA9
IDE7IGkgPCBuOyArK2kpCi0gICAgICAgIHJlc3VsdC51bml0ZShyZWN0c1tpXSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBSZW5kZXJPYmplY3Q6OmNvbGxlY3RBYnNvbHV0ZUxpbmVC
b3hRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9vbCkKLXsK
LX0KLQotdm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4m
IHF1YWRzLCBib29sIHRvcExldmVsKQotewotICAgIC8vIEZvciBibG9ja3MgaW5zaWRlIGlubGlu
ZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNsdWRlIG1hcmdpbnMgc28gdGhhdCB3ZSBydW4gcmlnaHQg
dXAgdG8gdGhlCi0gICAgLy8gaW5saW5lIGJveGVzIGFib3ZlIGFuZCBiZWxvdyB1cyAodGh1cyBn
ZXR0aW5nIG1lcmdlZCB3aXRoIHRoZW0gdG8gZm9ybSBhIHNpbmdsZSBpcnJlZ3VsYXIKLSAgICAv
LyBzaGFwZSkuCi0gICAgUmVuZGVyRmxvdyogY29udGludWF0aW9uID0gdmlydHVhbENvbnRpbnVh
dGlvbigpOwotICAgIGlmICh0b3BMZXZlbCAmJiBjb250aW51YXRpb24pIHsKLSAgICAgICAgRmxv
YXRSZWN0IGxvY2FsUmVjdCgwLCAtY29sbGFwc2VkTWFyZ2luVG9wKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2lkdGgoKSwgaGVpZ2h0KCkgKyBjb2xsYXBzZWRNYXJnaW5Ub3AoKSAr
IGNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpKTsKLSAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9B
YnNvbHV0ZVF1YWQobG9jYWxSZWN0KSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbi0+YWJzb2x1dGVR
dWFkcyhxdWFkcywgdG9wTGV2ZWwpOwotICAgIH0gZWxzZQotICAgICAgICBxdWFkcy5hcHBlbmQo
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBi
b3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSkpKTsKLX0KLQotdm9pZCBSZW5k
ZXJPYmplY3Q6OmFkZEFic29sdXRlUmVjdEZvckxheWVyKEludFJlY3QmIHJlc3VsdCkKLXsKLSAg
ICBpZiAoaGFzTGF5ZXIoKSkKLSAgICAgICAgcmVzdWx0LnVuaXRlKGFic29sdXRlQm91bmRpbmdC
b3hSZWN0KCkpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgp
OyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY3Vy
cmVudC0+YWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIocmVzdWx0KTsKLX0KLQotSW50UmVjdCBSZW5k
ZXJPYmplY3Q6OnBhaW50aW5nUm9vdFJlY3QoSW50UmVjdCYgdG9wTGV2ZWxSZWN0KQotewotICAg
IEludFJlY3QgcmVzdWx0ID0gYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKLSAgICB0b3BMZXZl
bFJlY3QgPSByZXN1bHQ7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENo
aWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQotICAgICAg
ICBjdXJyZW50LT5hZGRBYnNvbHV0ZVJlY3RGb3JMYXllcihyZXN1bHQpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KIHZvaWQgUmVuZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocmVjdC5pc0Vt
cHR5KCkpCkBAIC0xNzk2LDIzICsxNTg4LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFkZFBERlVS
TFJlY3QoR3JhcGhpYwogICAgIGNvbnRleHQtPnNldFVSTEZvclJlY3Qobm9kZS0+ZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwoaHJlZiksIHJlY3QpOwogfQogCi0KLXZvaWQgUmVuZGVyT2JqZWN0Ojph
ZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4
LCBpbnQgdHkpCi17Ci0gICAgLy8gRm9yIGJsb2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhl
YWQgYW5kIGluY2x1ZGUgbWFyZ2lucyBzbyB0aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKLSAg
ICAvLyBpbmxpbmUgYm94ZXMgYWJvdmUgYW5kIGJlbG93IHVzICh0aHVzIGdldHRpbmcgbWVyZ2Vk
IHdpdGggdGhlbSB0byBmb3JtIGEgc2luZ2xlIGlycmVndWxhcgotICAgIC8vIHNoYXBlKS4KLSAg
ICBSZW5kZXJGbG93KiBjb250aW51YXRpb24gPSB2aXJ0dWFsQ29udGludWF0aW9uKCk7Ci0gICAg
aWYgKGNvbnRpbnVhdGlvbikgewotICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZEZvY3VzUmlu
Z1JlY3QoSW50UmVjdCh0eCwgdHkgLSBjb2xsYXBzZWRNYXJnaW5Ub3AoKSwgd2lkdGgoKSwgaGVp
Z2h0KCkgKyBjb2xsYXBzZWRNYXJnaW5Ub3AoKSArIGNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpKSk7
Ci0gICAgICAgIGNvbnRpbnVhdGlvbi0+YWRkRm9jdXNSaW5nUmVjdHMoZ3JhcGhpY3NDb250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0geFBvcygpICsg
Y29udGludWF0aW9uLT5jb250YWluaW5nQmxvY2soKS0+eFBvcygpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geVBvcygpICsgY29udGludWF0aW9uLT5jb250
YWluaW5nQmxvY2soKS0+eVBvcygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5hZGRGb2N1c1JpbmdSZWN0KEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkp
OwotfQotCi12b2lkIFJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpCit2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgb25seVVzZVBhc3NlZEluQm91bmRzKQogewog
ICAgIGlmICghaGFzT3V0bGluZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xODMxLDcgKzE2MDcs
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKEdyYXBoaWNzCiAgICAgICAgIGlm
ICghdGhlbWUoKS0+c3VwcG9ydHNGb2N1c1Jpbmcoc3R5bGUpKSB7CiAgICAgICAgICAgICAvLyBP
bmx5IHBhaW50IHRoZSBmb2N1cyByaW5nIGJ5IGhhbmQgaWYgdGhlIHRoZW1lIGlzbid0IGFibGUg
dG8gZHJhdyB0aGUgZm9jdXMgcmluZy4KICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+aW5p
dEZvY3VzUmluZyhvdywgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+b3V0bGluZVN0
eWxlSXNBdXRvKCkpCisgICAgICAgICAgICBpZiAoc3R5bGUtPm91dGxpbmVTdHlsZUlzQXV0bygp
ICYmICFvbmx5VXNlUGFzc2VkSW5Cb3VuZHMpCiAgICAgICAgICAgICAgICAgYWRkRm9jdXNSaW5n
UmVjdHMoZ3JhcGhpY3NDb250ZXh0LCB0eCwgdHkpOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIGFkZFBERlVSTFJlY3QoZ3JhcGhpY3NDb250ZXh0LCBncmFwaGljc0NvbnRleHQt
PmZvY3VzUmluZ0JvdW5kaW5nUmVjdCgpKTsKQEAgLTE4NjQsNiArMTY0MCw1NyBAQCB2b2lkIFJl
bmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKEdyYXBoaWNzCiAgICAgICAgICAgICAgICBCU0JvdHRv
bSwgQ29sb3Iob2MpLCBzdHlsZS0+Y29sb3IoKSwgb3MsIG93LCBvdyk7CiB9CiAKK3ZvaWQgUmVu
ZGVyT2JqZWN0OjphZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgdW5zaWduZWQsIHVu
c2lnbmVkLCBib29sKQoreworfQorCitJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3Vu
ZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1zKQoreworICAgIGlmICh1c2VUcmFuc2Zvcm1z
KSB7CisgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgICAgICBhYnNvbHV0ZVF1
YWRzKHF1YWRzKTsKKworICAgICAgICBzaXplX3QgbiA9IHF1YWRzLnNpemUoKTsKKyAgICAgICAg
aWYgKCFuKQorICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAKKyAgICAgICAgSW50
UmVjdCByZXN1bHQgPSBxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMTsgaSA8IG47ICsraSkKKyAgICAgICAgICAgIHJlc3VsdC51bml0ZShx
dWFkc1tpXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOworICAg
IFZlY3RvcjxJbnRSZWN0PiByZWN0czsKKyAgICBhYnNvbHV0ZVJlY3RzKHJlY3RzLCBhYnNQb3Mu
eCgpLCBhYnNQb3MueSgpKTsKKworICAgIHNpemVfdCBuID0gcmVjdHMuc2l6ZSgpOworICAgIGlm
ICghbikKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIEludFJlY3QgcmVzdWx0ID0g
cmVjdHNbMF07CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBuOyArK2kpCisgICAgICAgIHJl
c3VsdC51bml0ZShyZWN0c1tpXSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBSZW5k
ZXJPYmplY3Q6OmFkZEFic29sdXRlUmVjdEZvckxheWVyKEludFJlY3QmIHJlc3VsdCkKK3sKKyAg
ICBpZiAoaGFzTGF5ZXIoKSkKKyAgICAgICAgcmVzdWx0LnVuaXRlKGFic29sdXRlQm91bmRpbmdC
b3hSZWN0KCkpOworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgp
OyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY3Vy
cmVudC0+YWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIocmVzdWx0KTsKK30KKworSW50UmVjdCBSZW5k
ZXJPYmplY3Q6OnBhaW50aW5nUm9vdFJlY3QoSW50UmVjdCYgdG9wTGV2ZWxSZWN0KQoreworICAg
IEludFJlY3QgcmVzdWx0ID0gYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKKyAgICB0b3BMZXZl
bFJlY3QgPSByZXN1bHQ7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENo
aWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQorICAgICAg
ICBjdXJyZW50LT5hZGRBYnNvbHV0ZVJlY3RGb3JMYXllcihyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludChQYWludEluZm8mIC8qcGFpbnRJ
bmZvKi8sIGludCAvKnR4Ki8sIGludCAvKnR5Ki8pCiB7CiB9CkBAIC0yNTU3LDYgKzIzODQsOCBA
QCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6Y29udGFpbmVyKCkgCiAgICAgICAgIC8vIGFz
IHdlIGNhbi4gIElmIHdlJ3JlIGluIHRoZSB0cmVlLCB3ZSdsbCBnZXQgdGhlIHJvb3QuICBJZiB3
ZQogICAgICAgICAvLyBhcmVuJ3Qgd2UnbGwgZ2V0IHRoZSByb290IG9mIG91ciBsaXR0bGUgc3Vi
dHJlZSAobW9zdCBsaWtlbHkKICAgICAgICAgLy8gd2UnbGwganVzdCByZXR1cm4gMCkuCisgICAg
ICAgIC8vIEZJWE1FOiBUaGUgZGVmaW5pdGlvbiBvZiB2aWV3KCkgaGFzIGNoYW5nZWQgdG8gbm90
IGNyYXdsIHVwIHRoZSByZW5kZXIgdHJlZS4gIEl0IG1pZ2h0CisgICAgICAgIC8vIGJlIHNhZmUg
bm93IHRvIHVzZSBpdC4KICAgICAgICAgd2hpbGUgKG8gJiYgby0+cGFyZW50KCkgJiYgIShvLT5o
YXNUcmFuc2Zvcm0oKSAmJiBvLT5pc1JlbmRlckJsb2NrKCkpKQogICAgICAgICAgICAgbyA9IG8t
PnBhcmVudCgpOwogICAgIH0gZWxzZSBpZiAocG9zID09IEFic29sdXRlUG9zaXRpb24pIHsKQEAg
LTI1OTYsMTQgKzI0MjUsMTQgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21PYmplY3RM
aXN0cwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG91dGVybW9zdEJsb2NrKQotICAgICAgICAg
ICAgb3V0ZXJtb3N0QmxvY2stPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQo
dGhpcyk7CisgICAgICAgICAgICBvdXRlcm1vc3RCbG9jay0+bWFya0FsbERlc2NlbmRhbnRzV2l0
aEZsb2F0c0ZvckxheW91dChzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPih0aGlzKSk7CiAgICAgfQog
CiAgICAgaWYgKGlzUG9zaXRpb25lZCgpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogcDsKICAg
ICAgICAgZm9yIChwID0gcGFyZW50KCk7IHA7IHAgPSBwLT5wYXJlbnQoKSkgewogICAgICAgICAg
ICAgaWYgKHAtPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJCbG9jayo+KHApLT5yZW1vdmVQb3NpdGlvbmVkT2JqZWN0KHRoaXMpOworICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ocCktPnJlbW92ZVBvc2l0aW9uZWRPYmpl
Y3Qoc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4odGhpcykpOwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtMjczNCwxNCArMjU2MywxNCBAQCB2b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlSGl0VGVzdFJl
c3VsdChICiAgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCkt
PnZpcnR1YWxDb250aW51YXRpb24oKSAmJiBub2RlLT5yZW5kZXJlcigpICE9IHRoaXMpIHsKICAg
ICAgICAgICAgIC8vIFdlJ3JlIGluIHRoZSBjb250aW51YXRpb24gb2YgYSBzcGxpdCBpbmxpbmUu
ICBBZGp1c3Qgb3VyIGxvY2FsIHBvaW50IHRvIGJlIGluIHRoZSBjb29yZGluYXRlIHNwYWNlCiAg
ICAgICAgICAgICAvLyBvZiB0aGUgcHJpbmNpcGFsIHJlbmRlcmVyJ3MgY29udGFpbmluZyBibG9j
ay4gIFRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgdGhlIGlubmVyTm9uU2hhcmVkTm9kZS4KLSAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogZmlyc3RCbG9jayA9IG5vZGUtPnJlbmRlcmVyKCktPmNvbnRh
aW5pbmdCbG9jaygpOworICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGZpcnN0QmxvY2sgPSBub2Rl
LT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgLy8gR2V0IG91ciBjb250YWluaW5nIGJsb2NrLgotICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiBibG9jayA9IHRoaXM7CisgICAgICAgICAgICBSZW5kZXJCb3gqIGJsb2NrID0gc3RhdGljX2Nh
c3Q8UmVuZGVyQm94Kj4odGhpcyk7CiAgICAgICAgICAgICBpZiAoaXNJbmxpbmUoKSkKICAgICAg
ICAgICAgICAgICBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAKLSAgICAgICAg
ICAgIGxvY2FsUG9pbnQubW92ZShibG9jay0+eFBvcygpIC0gZmlyc3RCbG9jay0+eFBvcygpLCBi
bG9jay0+eVBvcygpIC0gZmlyc3RCbG9jay0+eVBvcygpKTsKKyAgICAgICAgICAgIGxvY2FsUG9p
bnQubW92ZShibG9jay0+eCgpIC0gZmlyc3RCbG9jay0+eCgpLCBibG9jay0+eSgpIC0gZmlyc3RC
bG9jay0+eSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vZGUobm9k
ZSk7CkBAIC0zMDAwLDE2ICsyODI5LDE4IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVXaWRn
ZXRQb3NpdGlvbigKIHZvaWQgUmVuZGVyT2JqZWN0OjphZGREYXNoYm9hcmRSZWdpb25zKFZlY3Rv
cjxEYXNoYm9hcmRSZWdpb25WYWx1ZT4mIHJlZ2lvbnMpCiB7CiAgICAgLy8gQ29udmVydCB0aGUg
c3R5bGUgcmVnaW9ucyB0byBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICBpZiAoc3R5bGUoKS0+
dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAh
PSBWSVNJQkxFIHx8ICFpc0JveCgpKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVuZGVy
Qm94KiBib3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPih0aGlzKTsKIAogICAgIGNvbnN0IFZl
Y3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIHN0eWxlUmVnaW9ucyA9IHN0eWxlKCktPmRhc2hi
b2FyZFJlZ2lvbnMoKTsKICAgICB1bnNpZ25lZCBpLCBjb3VudCA9IHN0eWxlUmVnaW9ucy5zaXpl
KCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgU3R5bGVEYXNo
Ym9hcmRSZWdpb24gc3R5bGVSZWdpb24gPSBzdHlsZVJlZ2lvbnNbaV07CiAKLSAgICAgICAgaW50
IHcgPSB3aWR0aCgpOwotICAgICAgICBpbnQgaCA9IGhlaWdodCgpOworICAgICAgICBpbnQgdyA9
IGJveC0+d2lkdGgoKTsKKyAgICAgICAgaW50IGggPSBib3gtPmhlaWdodCgpOwogCiAgICAgICAg
IERhc2hib2FyZFJlZ2lvblZhbHVlIHJlZ2lvbjsKICAgICAgICAgcmVnaW9uLmxhYmVsID0gc3R5
bGVSZWdpb24ubGFiZWw7CkBAIC0zMTI5LDI2ICsyOTYwLDYgQEAgaW50IFJlbmRlck9iamVjdDo6
bWF4Qm90dG9tTWFyZ2luKGJvb2wgcAogICAgIHJldHVybiBwb3NpdGl2ZSA/IG1heCgwLCBtYXJn
aW5Cb3R0b20oKSkgOiAtbWluKDAsIG1hcmdpbkJvdHRvbSgpKTsKIH0KIAotSW50UmVjdCBSZW5k
ZXJPYmplY3Q6OmNvbnRlbnRCb3goKSBjb25zdAotewotICAgIHJldHVybiBJbnRSZWN0KGJvcmRl
ckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpLAotICAg
ICAgICBjb250ZW50V2lkdGgoKSwgY29udGVudEhlaWdodCgpKTsKLX0KLQotSW50UmVjdCBSZW5k
ZXJPYmplY3Q6OmFic29sdXRlQ29udGVudEJveCgpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0
ID0gY29udGVudEJveCgpOwotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRl
Rm9yQ29udGVudChGbG9hdFBvaW50KCkpOwotICAgIHJlY3QubW92ZShhYnNQb3MueCgpLCBhYnNQ
b3MueSgpKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotRmxvYXRRdWFkIFJlbmRlck9iamVjdDo6
YWJzb2x1dGVDb250ZW50UXVhZCgpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gY29udGVu
dEJveCgpOwotICAgIHJldHVybiBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyZWN0KSk7
Ci19Ci0KIHZvaWQgUmVuZGVyT2JqZWN0OjphZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhJ
bnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIGludCBvdXRsaW5lU2l6ZSA9ICFpc0lubGluZSgp
ICYmIHZpcnR1YWxDb250aW51YXRpb24oKSA/IHZpcnR1YWxDb250aW51YXRpb24oKS0+c3R5bGUo
KS0+b3V0bGluZVNpemUoKSA6IHN0eWxlKCktPm91dGxpbmVTaXplKCk7CkBAIC0zMTc0LDE4ICsy
OTg1LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFkanVzdFJlY3RGb3JPdXRsaW5lQQogICAgICAg
ICByZWN0LmluZmxhdGUob3V0bGluZVNpemUpOwogfQogCi1JbnRSZWN0IFJlbmRlck9iamVjdDo6
YWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGJveCA9IGJvcmRl
ckJveCgpOwotICAgIGFkanVzdFJlY3RGb3JPdXRsaW5lQW5kU2hhZG93KGJveCk7Ci0KLSAgICBG
bG9hdFF1YWQgYWJzT3V0bGluZVF1YWQgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChi
b3gpKTsKLSAgICBib3ggPSBhYnNPdXRsaW5lUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwot
ICAgIGJveC5tb3ZlKHZpZXcoKS0+bGF5b3V0RGVsdGEoKSk7Ci0KLSAgICByZXR1cm4gYm94Owot
fQotCiBib29sIFJlbmRlck9iamVjdDo6aXNTY3JvbGxhYmxlKCkgY29uc3QKIHsKICAgICBSZW5k
ZXJMYXllciogbCA9IGVuY2xvc2luZ0xheWVyKCk7CkBAIC0zMjAyLDYzICszMDAxLDYgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OmltYWdlQ2hhbmdlZChDYWNoZWRJbQogICAgIGltYWdlQ2hhbmdlZChz
dGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KGltYWdlKSwgcmVjdCk7CiB9CiAKLUludFJlY3Qg
UmVuZGVyT2JqZWN0OjpyZWZsZWN0aW9uQm94KCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlc3Vs
dDsKLSAgICBpZiAoIW1fc3R5bGUtPmJveFJlZmxlY3QoKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICBJbnRSZWN0IGJveCA9IGJvcmRlckJveCgpOwotICAgIHJlc3VsdCA9IGJveDsKLSAg
ICBzd2l0Y2ggKG1fc3R5bGUtPmJveFJlZmxlY3QoKS0+ZGlyZWN0aW9uKCkpIHsKLSAgICAgICAg
Y2FzZSBSZWZsZWN0aW9uQmVsb3c6Ci0gICAgICAgICAgICByZXN1bHQubW92ZSgwLCBib3guaGVp
Z2h0KCkgKyByZWZsZWN0aW9uT2Zmc2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUmVmbGVjdGlvbkFib3ZlOgotICAgICAgICAgICAgcmVzdWx0Lm1vdmUoMCwgLWJveC5o
ZWlnaHQoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBSZWZsZWN0aW9uTGVmdDoKLSAgICAgICAgICAgIHJlc3VsdC5tb3ZlKC1ib3gud2lk
dGgoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSwgMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBSZWZsZWN0aW9uUmlnaHQ6Ci0gICAgICAgICAgICByZXN1bHQubW92ZShib3gud2lk
dGgoKSArIHJlZmxlY3Rpb25PZmZzZXQoKSwgMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IFJlbmRlck9iamVjdDo6cmVmbGVjdGlvbk9m
ZnNldCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3N0eWxlLT5ib3hSZWZsZWN0KCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIGlmIChtX3N0eWxlLT5ib3hSZWZsZWN0KCktPmRpcmVjdGlvbigpID09
IFJlZmxlY3Rpb25MZWZ0IHx8IG1fc3R5bGUtPmJveFJlZmxlY3QoKS0+ZGlyZWN0aW9uKCkgPT0g
UmVmbGVjdGlvblJpZ2h0KQotICAgICAgICByZXR1cm4gbV9zdHlsZS0+Ym94UmVmbGVjdCgpLT5v
ZmZzZXQoKS5jYWxjVmFsdWUoYm9yZGVyQm94KCkud2lkdGgoKSk7Ci0gICAgcmV0dXJuIG1fc3R5
bGUtPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCkuY2FsY1ZhbHVlKGJvcmRlckJveCgpLmhlaWdodCgp
KTsKLX0KLQotSW50UmVjdCBSZW5kZXJPYmplY3Q6OnJlZmxlY3RlZFJlY3QoY29uc3QgSW50UmVj
dCYgcikgY29uc3QKLXsKLSAgICBpZiAoIW1fc3R5bGUtPmJveFJlZmxlY3QoKSkKLSAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKLQotICAgIEludFJlY3QgYm94ID0gYm9yZGVyQm94KCk7Ci0gICAg
SW50UmVjdCByZXN1bHQgPSByOwotICAgIHN3aXRjaCAobV9zdHlsZS0+Ym94UmVmbGVjdCgpLT5k
aXJlY3Rpb24oKSkgewotICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxvdzoKLSAgICAgICAgICAg
IHJlc3VsdC5zZXRZKGJveC5ib3R0b20oKSArIHJlZmxlY3Rpb25PZmZzZXQoKSArIChib3guYm90
dG9tKCkgLSByLmJvdHRvbSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBS
ZWZsZWN0aW9uQWJvdmU6Ci0gICAgICAgICAgICByZXN1bHQuc2V0WShib3gueSgpIC0gcmVmbGVj
dGlvbk9mZnNldCgpIC0gYm94LmhlaWdodCgpICsgKGJveC5ib3R0b20oKSAtIHIuYm90dG9tKCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlZmxlY3Rpb25MZWZ0OgotICAg
ICAgICAgICAgcmVzdWx0LnNldFgoYm94LngoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSAtIGJveC53
aWR0aCgpICsgKGJveC5yaWdodCgpIC0gci5yaWdodCgpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBSZWZsZWN0aW9uUmlnaHQ6Ci0gICAgICAgICAgICByZXN1bHQuc2V0WChi
b3gucmlnaHQoKSArIHJlZmxlY3Rpb25PZmZzZXQoKSArIChib3gucmlnaHQoKSAtIHIucmlnaHQo
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
ICNpZiBFTkFCTEUoU1ZHKQogCiBGbG9hdFJlY3QgUmVuZGVyT2JqZWN0OjpyZWxhdGl2ZUJCb3go
Ym9vbCkgY29uc3QKQEAgLTMyNjgsNyArMzAxMCw3IEBAIEZsb2F0UmVjdCBSZW5kZXJPYmplY3Q6
OnJlbGF0aXZlQkJveChib28KIAogVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyT2JqZWN0Ojps
b2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4
KDEsIDAsIDAsIDEsIHhQb3MoKSwgeVBvcygpKTsKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25N
YXRyaXgoKTsKIH0KIAogVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyT2JqZWN0OjphYnNvbHV0
ZVRyYW5zZm9ybSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNp
b24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNiArNTAsNyBAQCBjbGFzcyBJbmxpbmVGbG93Qm94OwogY2xhc3MgUG9zaXRp
b247CiBjbGFzcyBSZW5kZXJBcmVuYTsKIGNsYXNzIFJlbmRlckJsb2NrOworY2xhc3MgUmVuZGVy
Qm94OwogY2xhc3MgUmVuZGVyRmxvdzsKIGNsYXNzIFJlbmRlckZyYW1lU2V0OwogY2xhc3MgUmVu
ZGVyTGF5ZXI7CkBAIC0zMjksNiArMzMwLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNQb3NpdGlv
bmVkKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbmVkOyB9IC8vIGFic29sdXRlIG9yIGZpeGVk
IHBvc2l0aW9uaW5nCiAgICAgYm9vbCBpc1JlbFBvc2l0aW9uZWQoKSBjb25zdCB7IHJldHVybiBt
X3JlbFBvc2l0aW9uZWQ7IH0gLy8gcmVsYXRpdmUgcG9zaXRpb25pbmcKICAgICBib29sIGlzVGV4
dCgpIGNvbnN0ICB7IHJldHVybiBtX2lzVGV4dDsgfQorICAgIGJvb2wgaXNCb3goKSBjb25zdCB7
IHJldHVybiBtX2lzQm94OyB9CiAgICAgYm9vbCBpc0lubGluZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5saW5lOyB9ICAvLyBpbmxpbmUgb2JqZWN0CiAgICAgYm9vbCBpc0NvbXBhY3QoKSBjb25zdCB7
IHJldHVybiBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gQ09NUEFDVDsgfSAvLyBjb21wYWN0IG9iamVj
dAogICAgIGJvb2wgaXNSdW5JbigpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmRpc3BsYXkoKSA9
PSBSVU5fSU47IH0gLy8gcnVuLWluIG9iamVjdApAQCAtMzcwLDcgKzM3Miw2IEBAIHB1YmxpYzoK
ICAgICAKICAgICBib29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVHJhbnNm
b3JtOyB9CiAgICAgYm9vbCBoYXNNYXNrKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKSAmJiBzdHls
ZSgpLT5oYXNNYXNrKCk7IH0KLSAgICB2aXJ0dWFsIEludFJlY3QgbWFza0NsaXBSZWN0KCkgeyBy
ZXR1cm4gYm9yZGVyQm94KCk7IH0KIAogcHJpdmF0ZToKICAgICBib29sIGluY2x1ZGVWZXJ0aWNh
bFNjcm9sbGJhclNpemUoKSBjb25zdCB7IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiAoc3R5
bGUoKS0+b3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCB8fCBzdHlsZSgpLT5vdmVyZmxvd1koKSA9PSBP
QVVUTyk7IH0KQEAgLTQwMiw3ICs0MDMsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyT2JqZWN0KiBj
b250YWluZXIoKSBjb25zdDsKICAgICBSZW5kZXJPYmplY3QqIGhvdmVyQW5jZXN0b3IoKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5
b3V0KFJlbmRlck9iamVjdCogZmxvYXRUb1JlbW92ZSA9IDApOworICAgIHZpcnR1YWwgdm9pZCBt
YXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRlckJveCogZmxvYXRUb1Jl
bW92ZSA9IDApOwogICAgIHZvaWQgbWFya0NvbnRhaW5pbmdCbG9ja3NGb3JMYXlvdXQoYm9vbCBz
Y2hlZHVsZVJlbGF5b3V0ID0gdHJ1ZSwgUmVuZGVyT2JqZWN0KiBuZXdSb290ID0gMCk7CiAgICAg
dm9pZCBzZXROZWVkc0xheW91dChib29sIGIsIGJvb2wgbWFya1BhcmVudHMgPSB0cnVlKTsKICAg
ICB2b2lkIHNldENoaWxkTmVlZHNMYXlvdXQoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzID0gdHJ1
ZSk7CkBAIC00MjIsNyArNDIzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0RmxvYXRpbmcoYm9v
bCBiID0gdHJ1ZSkgeyBtX2Zsb2F0aW5nID0gYjsgfQogICAgIHZvaWQgc2V0SW5saW5lKGJvb2wg
YiA9IHRydWUpIHsgbV9pbmxpbmUgPSBiOyB9CiAgICAgdm9pZCBzZXRIYXNCb3hEZWNvcmF0aW9u
cyhib29sIGIgPSB0cnVlKSB7IG1fcGFpbnRCYWNrZ3JvdW5kID0gYjsgfQotICAgIHZvaWQgc2V0
UmVuZGVyVGV4dCgpIHsgbV9pc1RleHQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRJc1RleHQoKSB7
IG1faXNUZXh0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0SXNCb3goKSB7IG1faXNCb3ggPSB0cnVl
OyB9CiAgICAgdm9pZCBzZXRSZXBsYWNlZChib29sIGIgPSB0cnVlKSB7IG1fcmVwbGFjZWQgPSBi
OyB9CiAgICAgdm9pZCBzZXRIYXNPdmVyZmxvd0NsaXAoYm9vbCBiID0gdHJ1ZSkgeyBtX2hhc092
ZXJmbG93Q2xpcCA9IGI7IH0KICAgICB2b2lkIHNldEhhc0xheWVyKGJvb2wgYiA9IHRydWUpIHsg
bV9oYXNMYXllciA9IGI7IH0KQEAgLTQ3OSw3ICs0ODEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2b2lkIHBhaW50
Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgsIGNv
bnN0IFJlbmRlclN0eWxlKiwgYm9vbCBiZWdpbiA9IHRydWUsIGJvb2wgZW5kID0gdHJ1ZSk7CiAg
ICAgYm9vbCBwYWludE5pbmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50
IHR5LCBpbnQgdywgaW50IGgsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgTmluZVBpZWNlSW1h
Z2UmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwotICAgIHZvaWQg
cGFpbnRPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50
IGgsIGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCBwYWludEJveFNoYWRvdyhHcmFwaGlj
c0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHls
ZSosIGJvb2wgYmVnaW4gPSB0cnVlLCBib29sIGVuZCA9IHRydWUpOwogCiAgICAgLy8gUmVuZGVy
Qm94IGltcGxlbWVudHMgdGhpcy4KQEAgLTUxOSwxMSArNTIwLDYgQEAgcHVibGljOgogICAgIC8v
IHJlcGFpbnQgYW5kIGRvIG5vdCBuZWVkIGEgcmVsYXlvdXQKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlRnJvbUVsZW1lbnQoKSB7IH0KIAotICAgIC8vIEJsb2NrIGZsb3dzIHN1YmNsYXNzIGF2YWls
YWJsZVdpZHRoIHRvIGhhbmRsZSBtdWx0aSBjb2x1bW4gbGF5b3V0IChzaHJpbmtpbmcgdGhlIHdp
ZHRoIGF2YWlsYWJsZSB0byBjaGlsZHJlbiB3aGVuIGxheWluZyBvdXQuKQotICAgIHZpcnR1YWwg
aW50IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gY29udGVudFdpZHRoKCk7IH0KLSAg
ICAKLSAgICB2aXJ0dWFsIGludCBhdmFpbGFibGVIZWlnaHQoKSBjb25zdCB7IHJldHVybiAwOyB9
Ci0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2lkZ2V0UG9zaXRpb24oKTsKIAogI2lmIEVOQUJM
RShEQVNIQk9BUkRfU1VQUE9SVCkKQEAgLTU2MCwzNyArNTU2LDE4IEBAIHB1YmxpYzoKICAgICAv
LyByZXR1cm4ganVzdCB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluaW5nIGJsb2NrCiAgICAgdmly
dHVhbCBpbnQgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KCkgY29uc3Q7CiAKLSAgICAvLyBjb250ZW50
IGFyZWEgKGJveCBtaW51cyBwYWRkaW5nL2JvcmRlcikKLSAgICBJbnRSZWN0IGNvbnRlbnRCb3go
KSBjb25zdDsKLSAgICAvLyBhYnNvbHV0ZSBjb29yZHMgb2YgY29udGVudCBhcmVhLiBJZ25vcmVz
IHRyYW5zZm9ybXMuCi0gICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdDsKLSAg
ICAvLyBjb250ZW50IHJlY3QgY29udmVydGVkIHRvIGFic29sdXRlIGNvb3JkcywgdGFraW5nIHRy
YW5zZm9ybXMgaW50byBhY2NvdW50Ci0gICAgRmxvYXRRdWFkIGFic29sdXRlQ29udGVudFF1YWQo
KSBjb25zdDsKLSAgICAKLSAgICBpbnQgY29udGVudFdpZHRoKCkgY29uc3QgeyByZXR1cm4gY2xp
ZW50V2lkdGgoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQoKTsgfQotICAgIGludCBj
b250ZW50SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gY2xpZW50SGVpZ2h0KCkgLSBwYWRkaW5nVG9w
KCkgLSBwYWRkaW5nQm90dG9tKCk7IH0KLQogICAgIC8vIHVzZWQgYnkgZmxleGlibGUgYm94ZXMg
dG8gaW1wb3NlIGEgZmxleGVkIHdpZHRoL2hlaWdodCBvdmVycmlkZQogICAgIHZpcnR1YWwgaW50
IG92ZXJyaWRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGludCBvdmVy
cmlkZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgaW50IG92ZXJyaWRl
SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRPdmVycmlk
ZVNpemUoaW50IC8qb3ZlcnJpZGVTaXplKi8pIHsgfQogCi0gICAgLy8gcmVsYXRpdmUgdG8gcGFy
ZW50IG5vZGUKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zKGludCAvKnhQb3MqLywgaW50IC8qeVBv
cyovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0V2lkdGgoaW50IC8qd2lkdGgqLykgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEhlaWdodChpbnQgLypoZWlnaHQqLykgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBzZXRQb3MocmVjdC54KCksIHJl
Y3QueSgpKTsgc2V0V2lkdGgocmVjdC53aWR0aCgpKTsgc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkp
OyB9Ci0KLSAgICB2aXJ0dWFsIGludCB4UG9zKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgaW50IHlQb3MoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KICAgICAvLyBDb252ZXJ0IHRo
ZSBnaXZlbiBsb2NhbCBwb2ludCB0byBhYnNvbHV0ZSBjb29yZGluYXRlcwogICAgIC8vIEZJWE1F
OiBUZW1wb3JhcnkuIElmIHVzZVRyYW5zZm9ybXMgaXMgdHJ1ZSwgdGFrZSB0cmFuc2Zvcm1zIGlu
dG8gYWNjb3VudC4gRXZlbnR1YWxseSBsb2NhbFRvQWJzb2x1dGUoKSB3aWxsIGFsd2F5cyBiZSB0
cmFuc2Zvcm0tYXdhcmUuCiAgICAgdmlydHVhbCBGbG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZShG
bG9hdFBvaW50IGxvY2FsUG9pbnQgPSBGbG9hdFBvaW50KCksIGJvb2wgZml4ZWQgPSBmYWxzZSwg
Ym9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgRmxvYXRQb2lu
dCBhYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludCwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVz
ZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVz
ZWQgdG8gZGVhbCB3aXRoIHRoZSBleHRyYSB0b3Agc3BhY2UgdGhhdCBjYW4gb2NjdXIgaW4gdGFi
bGUgY2VsbHMgKGNhbGxlZCBib3JkZXJUb3BFeHRyYSkuCisgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyB1c2VkIHRvIGRlYWwgd2l0aCB0aGUgZXh0cmEgdG9wIHNwYWNlIHRoYXQgY2FuIG9jY3VyIGlu
IHRhYmxlIGNlbGxzIChjYWxsZWQgaW50cmluc2ljUGFkZGluZ1RvcCkuCiAgICAgLy8gVGhlIGNo
aWxkcmVuIG9mIHRoZSBjZWxsIGRvIG5vdCBmYWN0b3IgdGhpcyBzcGFjZSBpbiwgc28gd2UgaGF2
ZSB0byBhZGQgaXQgaW4uICBBbnkgY29kZSB0aGF0IHdhbnRzIHRvCiAgICAgLy8gYWNjdXJhdGVs
eSBkZWFsIHdpdGggdGhlIGNvbnRlbnRzIG9mIGEgY2VsbCBtdXN0IGNhbGwgdGhpcyBmdW5jdGlv
biBpbnN0YWQgb2YgYWJzb2x1dGVQb3NpdGlvbi4KICAgICBGbG9hdFBvaW50IGxvY2FsVG9BYnNv
bHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29s
IGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdApAQCAtNjA1
LDU1ICs1ODIsNiBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuIHRoZSBvZmZzZXQgZnJvbSB0aGUg
Y29udGFpbmVyKCkgcmVuZGVyZXIgKGV4Y2x1ZGluZyB0cmFuc2Zvcm1zKQogICAgIHZpcnR1YWwg
SW50U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCopIGNvbnN0OwogCi0gICAg
Ly8gd2lkdGggYW5kIGhlaWdodCBhcmUgd2l0aG91dCBtYXJnaW5zIGJ1dCBpbmNsdWRlIHBhZGRp
bmdzIGFuZCBib3JkZXJzCi0gICAgdmlydHVhbCBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0gICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAg
dmlydHVhbCBJbnRSZWN0IGJvcmRlckJveCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoMCwgMCwg
d2lkdGgoKSwgaGVpZ2h0KCkpOyB9Ci0gICAgLy8gQm91bmRzIG9mIHRoZSBvdXRsaW5lIGJveCBp
biBhYnNvbHV0ZSBjb29yZHMuIFJlc3BlY3RzIHRyYW5zZm9ybXMKLSAgICBJbnRSZWN0IGFic29s
dXRlT3V0bGluZUJvdW5kcygpIGNvbnN0OwotCi0gICAgLy8gVGhlIGhlaWdodCBvZiBhIGJsb2Nr
IHdoZW4geW91IGluY2x1ZGUgbm9ybWFsIGZsb3cgb3ZlcmZsb3cgc3BpbGxhZ2Ugb3V0IG9mIHRo
ZSBib3R0b20KLSAgICAvLyBvZiB0aGUgYmxvY2sgKGUuZy4sIGEgPGRpdiBzdHlsZT0iaGVpZ2h0
OjI1cHgiPiB0aGF0IGhhcyBhIDEwMHB4IHRhbGwgaW1hZ2UgaW5zaWRlCi0gICAgLy8gaXQgd291
bGQgaGF2ZSBhbiBvdmVyZmxvdyBoZWlnaHQgb2YgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkg
KyAxMDBweC4KLSAgICB2aXJ0dWFsIGludCBvdmVyZmxvd0hlaWdodChib29sIC8qaW5jbHVkZUlu
dGVyaW9yKi8gPSB0cnVlKSBjb25zdCB7IHJldHVybiBoZWlnaHQoKTsgfQotICAgIHZpcnR1YWwg
aW50IG92ZXJmbG93V2lkdGgoYm9vbCAvKmluY2x1ZGVJbnRlcmlvciovID0gdHJ1ZSkgY29uc3Qg
eyByZXR1cm4gd2lkdGgoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRPdmVyZmxvd0hlaWdodChp
bnQpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRPdmVyZmxvd1dpZHRoKGludCkgeyB9Ci0gICAg
dmlydHVhbCBpbnQgb3ZlcmZsb3dMZWZ0KGJvb2wgLyppbmNsdWRlSW50ZXJpb3IqLyA9IHRydWUp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBvdmVyZmxvd1RvcChib29sIC8q
aW5jbHVkZUludGVyaW9yKi8gPSB0cnVlKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVh
bCBJbnRSZWN0IG92ZXJmbG93UmVjdChib29sIC8qaW5jbHVkZUludGVyaW9yKi8gPSB0cnVlKSBj
b25zdCB7IHJldHVybiBib3JkZXJCb3goKTsgfQotCi0gICAgLy8gSUUgZXh0ZW5zaW9ucy4gVXNl
ZCB0byBjYWxjdWxhdGUgb2Zmc2V0V2lkdGgvSGVpZ2h0LiAgT3ZlcnJpZGRlbiBieSBpbmxpbmVz
IChSZW5kZXJGbG93KQotICAgIC8vIHRvIHJldHVybiB0aGUgcmVtYWluaW5nIHdpZHRoIG9uIGEg
Z2l2ZW4gbGluZSAoYW5kIHRoZSBoZWlnaHQgb2YgYSBzaW5nbGUgbGluZSkuCi0gICAgdmlydHVh
bCBpbnQgb2Zmc2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiB3aWR0aCgpOyB9Ci0gICAgdmlydHVh
bCBpbnQgb2Zmc2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gaGVpZ2h0KCkgKyBib3JkZXJUb3BF
eHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsgfQotCi0gICAgLy8gSUUgZXh0ZW5zaW9ucy4g
IEFsc28gc3VwcG9ydGVkIGJ5IEdlY2tvLiAgV2Ugb3ZlcnJpZGUgaW4gcmVuZGVyIGZsb3cgdG8g
Z2V0IHRoZQotICAgIC8vIGxlZnQgYW5kIHRvcCBjb3JyZWN0LiAtZHdoCi0gICAgdmlydHVhbCBp
bnQgb2Zmc2V0TGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IG9mZnNldFRvcCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBvZmZzZXRQYXJlbnQoKSBjb25zdDsKLQotICAg
IC8vIE1vcmUgSUUgZXh0ZW5zaW9ucy4gIGNsaWVudFdpZHRoIGFuZCBjbGllbnRIZWlnaHQgcmVw
cmVzZW50IHRoZSBpbnRlcmlvciBvZiBhbiBvYmplY3QKLSAgICAvLyBleGNsdWRpbmcgYm9yZGVy
IGFuZCBzY3JvbGxiYXIuICBjbGllbnRMZWZ0L1RvcCBhcmUganVzdCB0aGUgYm9yZGVyTGVmdFdp
ZHRoIGFuZCBib3JkZXJUb3BXaWR0aC4KLSAgICBpbnQgY2xpZW50TGVmdCgpIGNvbnN0IHsgcmV0
dXJuIGJvcmRlckxlZnQoKTsgfQotICAgIGludCBjbGllbnRUb3AoKSBjb25zdCB7IHJldHVybiBi
b3JkZXJUb3AoKTsgfQotICAgIGludCBjbGllbnRXaWR0aCgpIGNvbnN0OwotICAgIGludCBjbGll
bnRIZWlnaHQoKSBjb25zdDsKLQotICAgIC8vIHNjcm9sbFdpZHRoL3Njcm9sbEhlaWdodCB3aWxs
IGJlIHRoZSBzYW1lIGFzIGNsaWVudFdpZHRoL2NsaWVudEhlaWdodCB1bmxlc3MgdGhlCi0gICAg
Ly8gb2JqZWN0IGhhcyBvdmVyZmxvdzpoaWRkZW4vc2Nyb2xsL2F1dG8gc3BlY2lmaWVkIGFuZCBh
bHNvIGhhcyBvdmVyZmxvdy4KLSAgICAvLyBzY3JvbGxMZWZ0L1RvcCByZXR1cm4gdGhlIGN1cnJl
bnQgc2Nyb2xsIHBvc2l0aW9uLiAgVGhlc2UgbWV0aG9kcyBhcmUgdmlydHVhbCBzbyB0aGF0IG9i
amVjdHMgbGlrZQotICAgIC8vIHRleHRhcmVhcyBjYW4gc2Nyb2xsIHNoYWRvdyBjb250ZW50IChi
dXQgcHJldGVuZCB0aGF0IHRoZXkgYXJlIHRoZSBvYmplY3RzIHRoYXQgYXJlCi0gICAgLy8gc2Ny
b2xsaW5nKS4KLSAgICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBpbnQgc2Nyb2xsVG9wKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Nyb2xsTGVmdChpbnQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxUb3Ao
aW50KTsKLQogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYpOwogICAgIHZpcnR1YWwgYm9vbCBj
YW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBhdXRvc2Nyb2xsKCk7CkBAIC02ODksMzAgKzYxNywyNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBpbnQgcGFkZGluZ0xlZnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBwYWRkaW5nUmlnaHQo
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IGJvcmRlclRvcCgpIGNvbnN0IHsgcmV0dXJuIHN0
eWxlKCktPmJvcmRlclRvcFdpZHRoKCk7IH0KLSAgICB2aXJ0dWFsIGludCBib3JkZXJCb3R0b20o
KSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgpOyB9CiAgICAgdmly
dHVhbCBpbnQgYm9yZGVyVG9wRXh0cmEoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVh
bCBpbnQgYm9yZGVyQm90dG9tRXh0cmEoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0
dWFsIGludCBib3JkZXJUb3AoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJUb3BXaWR0
aCgpOyB9CisgICAgdmlydHVhbCBpbnQgYm9yZGVyQm90dG9tKCkgY29uc3QgeyByZXR1cm4gc3R5
bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKTsgfQogICAgIHZpcnR1YWwgaW50IGJvcmRlckxlZnQo
KSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKTsgfQogICAgIHZpcnR1
YWwgaW50IGJvcmRlclJpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym9yZGVyUmlnaHRX
aWR0aCgpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkTGluZUJveFJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gVUlO
VF9NQVgsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwotCi0gICAgdmlydHVhbCB2
b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHksIGJvb2wg
dG9wTGV2ZWwgPSB0cnVlKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mLCBpbnQsIGludCwgYm9vbCA9IHRydWUpIHsgfQogICAgIC8vIEZJWE1F
OiB1c2VUcmFuc2Zvcm1zIHNob3VsZCBnbyBhd2F5IGV2ZW50dWFsbHkKICAgICBJbnRSZWN0IGFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAg
IC8vIEJ1aWxkIGFuIGFycmF5IG9mIHF1YWRzIGluIGFic29sdXRlIGNvb3JkcyBmb3IgbGluZSBi
b3hlcwotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0QWJzb2x1dGVMaW5lQm94UXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNl
dCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgdG9wTGV2ZWwg
PSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEFic29sdXRlTGluZUJveFF1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JiwgdW5zaWduZWQgLypzdGFydE9mZnNldCovID0gMCwgdW5zaWduZWQg
LyplbmRPZmZzZXQqLyA9IFVJTlRfTUFYLCBib29sIC8qdXNlU2VsZWN0aW9uSGVpZ2h0Ki8gPSBm
YWxzZSkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+JiwgYm9vbCAvKnRvcExldmVsKi8gPSB0cnVlKSB7IH07CiAKICAgICAvLyB0aGUgcmVjdCB0
aGF0IHdpbGwgYmUgcGFpbnRlZCBpZiB0aGlzIG9iamVjdCBpcyBwYXNzZWQgYXMgdGhlIHBhaW50
aW5nUm9vdAogICAgIEludFJlY3QgcGFpbnRpbmdSb290UmVjdChJbnRSZWN0JiB0b3BMZXZlbFJl
Y3QpOwogCi0gICAgdm9pZCBhZGRQREZVUkxSZWN0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0Nv
bnRleHQqLCBpbnQgdHgsIGludCB0eSk7Ci0KICAgICB2aXJ0dWFsIGludCBtaW5QcmVmV2lkdGgo
KSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBpbnQgbWF4UHJlZldpZHRoKCkgY29u
c3QgeyByZXR1cm4gMDsgfQogCkBAIC03NTYsNyArNjgxLDcgQEAgcHVibGljOgogICAgIC8vIFJl
dHVybnMgdGhlIHJlY3QgdGhhdCBzaG91bGQgYmUgcmVwYWludGVkIHdoZW5ldmVyIHRoaXMgb2Jq
ZWN0IGNoYW5nZXMuICBUaGUgcmVjdCBpcyBpbiB0aGUgdmlldydzCiAgICAgLy8gY29vcmRpbmF0
ZSBzcGFjZS4gIFRoaXMgbWV0aG9kIGRlYWxzIHdpdGggb3V0bGluZXMgYW5kIG92ZXJmbG93Lgog
ICAgIHZpcnR1YWwgSW50UmVjdCBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLQorICAg
IAogICAgIEludFJlY3QgZ2V0QWJzb2x1dGVSZXBhaW50UmVjdFdpdGhPdXRsaW5lKGludCBvdyk7
CiAKICAgICAvLyBHaXZlbiBhIHJlY3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3BhY2Us
IHRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSByZWN0YW5nbGUgdG8gdGhlIHZpZXcncwpAQCAtNzgz
LDEwICs3MDgsNiBAQCBwdWJsaWM6CiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IHN0eWxlKCktPm9wYWNpdHkoKTsgfQogCiAgICAgYm9vbCBoYXNSZWZsZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNSZWZsZWN0aW9uOyB9Ci0gICAgSW50UmVjdCByZWZsZWN0aW9uQm94KCkg
Y29uc3Q7Ci0gICAgaW50IHJlZmxlY3Rpb25PZmZzZXQoKSBjb25zdDsKLSAgICAvLyBHaXZlbiBh
IHJlY3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3BhY2UsIHJldHVybnMgdGhlIGNvcnJl
c3BvbmRpbmcgcmVjdCBpbiB0aGUgcmVmbGVjdGlvbi4KLSAgICBJbnRSZWN0IHJlZmxlY3RlZFJl
Y3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCiAgICAgLy8gQXBwbGllZCBhcyBhICJzbG9wIiB0
byBkaXJ0eSByZWN0IGNoZWNrcyBkdXJpbmcgdGhlIG91dGxpbmUgcGFpbnRpbmcgcGhhc2UncyBk
aXJ0eS1yZWN0IGNoZWNrcy4KICAgICBpbnQgbWF4aW1hbE91dGxpbmVTaXplKFBhaW50UGhhc2Up
IGNvbnN0OwpAQCAtOTE0LDYgKzgzNSw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdmlzaWJsZVRv
SGl0VGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJ
QkxFICYmIHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSAhPSBQRV9OT05FOyB9CiAgICAgCisgICAg
dmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCosIGludCAvKnR4
Ki8sIGludCAvKnR5Ki8pIHsgfTsKKyAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVPdXRsaW5l
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9CisKIHByb3RlY3RlZDoKICAgICAv
LyBPdmVycmlkZXMgc2hvdWxkIGNhbGwgdGhlIHN1cGVyY2xhc3MgYXQgdGhlIGVuZAogICAgIHZp
cnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoUmVuZGVyU3R5bGU6OkRpZmYsIGNvbnN0IFJlbmRl
clN0eWxlKiBuZXdTdHlsZSk7CkBAIC05MjIsNiArODQ2LDkgQEAgcHJvdGVjdGVkOgogICAgIAog
ICAgIHZpcnR1YWwgdm9pZCBwcmludEJveERlY29yYXRpb25zKEdyYXBoaWNzQ29udGV4dCosIGlu
dCAvKngqLywgaW50IC8qeSovLCBpbnQgLyp3Ki8sIGludCAvKmgqLywgaW50IC8qdHgqLywgaW50
IC8qdHkqLykgeyB9CiAKKyAgICB2b2lkIHBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBp
bnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSosIGJvb2wgb25s
eVVzZVBhc3NlZEluQm91bmRzID0gZmFsc2UpOworICAgIHZvaWQgYWRkUERGVVJMUmVjdChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKICAgICB2aXJ0dWFsIEludFJlY3Qgdmll
d1JlY3QoKSBjb25zdDsKIAogICAgIGludCBnZXRWZXJ0aWNhbFBvc2l0aW9uKGJvb2wgZmlyc3RM
aW5lKSBjb25zdDsKQEAgLTk1OCw2ICs4ODUsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2lz
QW5vbnltb3VzICAgICAgICAgICAgICAgOiAxOwogICAgIGJvb2wgbV9pc1RleHQgICAgICAgICAg
ICAgICAgICAgIDogMTsKKyAgICBib29sIG1faXNCb3ggICAgICAgICAgICAgICAgICAgICA6IDE7
CiAgICAgYm9vbCBtX2lubGluZSAgICAgICAgICAgICAgICAgICAgOiAxOwogICAgIGJvb2wgbV9y
ZXBsYWNlZCAgICAgICAgICAgICAgICAgIDogMTsKICAgICBib29sIG1faXNEcmFnZ2luZyAgICAg
ICAgICAgICAgICA6IDE7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcAkocmV2aXNpb24g
NDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsMTIgKzg4LDExIEBAIHZvaWQgUmVuZGVyUGFydDo6dXBkYXRlV2lkZ2V0UG9zaXRp
b24oKQogICAgIGlmICghbV93aWRnZXQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbnQg
d2lkdGgsIGhlaWdodDsKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgp
OwogICAgIGFic1Bvcy5tb3ZlKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRlclRv
cCgpICsgcGFkZGluZ1RvcCgpKTsKLSAgICB3aWR0aCA9IG1fd2lkdGggLSBib3JkZXJMZWZ0KCkg
LSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpOwotICAgIGhl
aWdodCA9IG1faGVpZ2h0IC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIHBhZGRpbmdU
b3AoKSAtIHBhZGRpbmdCb3R0b20oKTsKLSAgICBJbnRSZWN0IG5ld0JvdW5kcyhhYnNQb3MueCgp
LCBhYnNQb3MueSgpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpbnQgdyA9IHdpZHRoKCkgLSBib3Jk
ZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgp
OworICAgIGludCBoID0gaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0g
cGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgpOworICAgIEludFJlY3QgbmV3Qm91bmRzKGFi
c1Bvcy54KCksIGFic1Bvcy55KCksIHcsIGgpOwogICAgIGJvb2wgYm91bmRzQ2hhbmdlZCA9IG5l
d0JvdW5kcyAhPSBtX3dpZGdldC0+ZnJhbWVSZWN0KCk7CiAgICAgaWYgKGJvdW5kc0NoYW5nZWQp
IHsKICAgICAgICAgLy8gVGhlIHdpZGdldCBjaGFuZ2VkIHBvc2l0aW9ucy4gIFVwZGF0ZSB0aGUg
ZnJhbWUgZ2VvbWV0cnkuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAkocmV2aXNpb24g
NDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTcyLDkgKzE3Miw2IEBAIHZvaWQgUmVuZGVyUGF0aDo6bGF5b3V0KCkKIAogICAgIG1f
YWJzb2x1dGVCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKIAotICAgIHNl
dFdpZHRoKG1fYWJzb2x1dGVCb3VuZHMud2lkdGgoKSk7Ci0gICAgc2V0SGVpZ2h0KG1fYWJzb2x1
dGVCb3VuZHMuaGVpZ2h0KCkpOwotCiAgICAgaWYgKGNoZWNrRm9yUmVwYWludCkKICAgICAgICAg
cmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBvbGRPdXRsaW5lQm94KTsKIApA
QCAtMjYwLDcgKzI1Nyw3IEBAIHZvaWQgUmVuZGVyUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEkKIAogICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91dGxp
bmVXaWR0aCgpKQogICAgICAgICBwYWludE91dGxpbmUocGFpbnRJbmZvLmNvbnRleHQsIHN0YXRp
Y19jYXN0PGludD4oYm91bmRpbmdCb3gueCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0Jv
eC55KCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0JveC53aWR0aCgp
KSwgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0JveC5oZWlnaHQoKSksIHN0eWxlKCkpOworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0JveC53aWR0aCgpKSwgc3RhdGljX2Nh
c3Q8aW50Pihib3VuZGluZ0JveC5oZWlnaHQoKSksIHN0eWxlKCksIHRydWUpOwogICAgIAogICAg
IHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CkBAIC00ODUsNiArNDgyLDEzIEBAIEZs
b2F0UmVjdCBSZW5kZXJQYXRoOjpkcmF3TWFya2Vyc0lmTmVlZGUKICAgICByZXR1cm4gYm91bmRz
OwogfQogCitJbnRSZWN0IFJlbmRlclBhdGg6OmFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0
Cit7CisgICAgSW50UmVjdCByZXN1bHQgPSBtX2Fic29sdXRlQm91bmRzOworICAgIGFkanVzdFJl
Y3RGb3JPdXRsaW5lQW5kU2hhZG93KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clBhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmgJKHJl
dmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIHN0cm9rZUNvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tlID0gdHJ1ZSkgY29uc3Q7CiAK
ICAgICAvLyBSZXR1cm5zIGFuIHVuc2NhbGVkIGJvdW5kaW5nIGJveCAobm90IGV2ZW4gaW5jbHVk
aW5nIGxvY2FsVHJhbnNmb3JtKCkpIGZvciB0aGlzIHZlY3RvciBwYXRoCi0gICAgdmlydHVhbCBG
bG9hdFJlY3QgcmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNvbnN0Owor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0KGJvb2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNvbnN0Owog
CiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0OwogICAgIHZvaWQgc2V0UGF0aChjb25zdCBQ
YXRoJiBuZXdQYXRoKTsKQEAgLTczLDYgKzczLDggQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0
IGRyYXdNYXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgUGF0aCYpIGNvbnN0OwogICAgIAorICAgIHZpcnR1YWwgSW50UmVjdCBhYnNvbHV0ZU91
dGxpbmVCb3VuZHMoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1hcEFic29s
dXRlUG9pbnRUb0xvY2FsKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKIApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcg
QEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6bGF5b3V0KCkKICAgICAgICAgb2xkT3V0bGluZUJveCA9
IGFic29sdXRlT3V0bGluZUJvdW5kcygpOwogICAgIH0KICAgICAKLSAgICBtX2hlaWdodCA9IG1p
bmltdW1SZXBsYWNlZEhlaWdodCgpOworICAgIHNldEhlaWdodChtaW5pbXVtUmVwbGFjZWRIZWln
aHQoKSk7CiAgICAgCiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwpAQCAtMTEw
LDggKzExMCw4IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGEKICAg
ICBpZiAoIXNob3VsZFBhaW50KHBhaW50SW5mbywgdHgsIHR5KSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIHR4ICs9IG1feDsKLSAgICB0eSArPSBtX3k7CisgICAgdHggKz0geCgpOworICAg
IHR5ICs9IG1fZnJhbWVSZWN0LnkoKTsKICAgICAKICAgICBpZiAoaGFzQm94RGVjb3JhdGlvbnMo
KSAmJiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSkgCiAgICAgICAgIHBhaW50Qm94RGVjb3Jh
dGlvbnMocGFpbnRJbmZvLCB0eCwgdHkpOwpAQCAtMTU5LDggKzE1OSw4IEBAIGJvb2wgUmVuZGVy
UmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50SW4KICAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0
eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGludCBjdXJyZW50
VFggPSB0eCArIG1feDsKLSAgICBpbnQgY3VycmVudFRZID0gdHkgKyBtX3k7CisgICAgaW50IGN1
cnJlbnRUWCA9IHR4ICsgeCgpOworICAgIGludCBjdXJyZW50VFkgPSB0eSArIG1fZnJhbWVSZWN0
LnkoKTsKIAogICAgIC8vIEVhcmx5IGV4aXQgaWYgdGhlIGVsZW1lbnQgdG91Y2hlcyB0aGUgZWRn
ZXMuCiAgICAgaW50IHRvcCA9IGN1cnJlbnRUWSArIG92ZXJmbG93VG9wKCk7CkBAIC0yMTUsNyAr
MjE1LDcgQEAgdW5zaWduZWQgUmVuZGVyUmVwbGFjZWQ6OmNhcmV0TWF4UmVuZGVyZQogICAgIHJl
dHVybiAxOyAKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlclJlcGxhY2VkOjpwb3NpdGlvbkZv
ckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSkKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJSZXBsYWNl
ZDo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeFBvcywgaW50IHlQb3MpCiB7CiAgICAgSW5s
aW5lQm94KiBib3ggPSBpbmxpbmVCb3hXcmFwcGVyKCk7CiAgICAgaWYgKCFib3gpCkBAIC0yMjgs
MTkgKzIyOCwxOSBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyUmVwbGFjZWQ6OnBvc2l0aW9uCiAg
ICAgaW50IHRvcCA9IHJvb3QtPnRvcE92ZXJmbG93KCk7CiAgICAgaW50IGJvdHRvbSA9IHJvb3Qt
Pm5leHRSb290Qm94KCkgPyByb290LT5uZXh0Um9vdEJveCgpLT50b3BPdmVyZmxvdygpIDogcm9v
dC0+Ym90dG9tT3ZlcmZsb3coKTsKIAotICAgIGlmICh5ICsgeVBvcygpIDwgdG9wKQorICAgIGlm
ICh5UG9zICsgeSgpIDwgdG9wKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVsZW1l
bnQoKSwgY2FyZXRNaW5PZmZzZXQoKSwgRE9XTlNUUkVBTSk7IC8vIGNvb3JkaW5hdGVzIGFyZSBh
Ym92ZQogICAgIAotICAgIGlmICh5ICsgeVBvcygpID49IGJvdHRvbSkKKyAgICBpZiAoeVBvcyAr
IHkoKSA+PSBib3R0b20pCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgp
LCBjYXJldE1heE9mZnNldCgpLCBET1dOU1RSRUFNKTsgLy8gY29vcmRpbmF0ZXMgYXJlIGJlbG93
CiAgICAgCiAgICAgaWYgKGVsZW1lbnQoKSkgewotICAgICAgICBpZiAoeCA8PSB3aWR0aCgpIC8g
MikKKyAgICAgICAgaWYgKHhQb3MgPD0gd2lkdGgoKSAvIDIpCiAgICAgICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKGVsZW1lbnQoKSwgMCwgRE9XTlNUUkVBTSk7CiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCAxLCBET1dOU1RSRUFNKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gUmVuZGVyQm94Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKHgsIHkpOworICAgIHJl
dHVybiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeFBvcywgeVBvcyk7CiB9CiAK
IEludFJlY3QgUmVuZGVyUmVwbGFjZWQ6OnNlbGVjdGlvblJlY3QoYm9vbCBjbGlwVG9WaXNpYmxl
Q29udGVudCkKQEAgLTI3NSw3ICsyNzUsNyBAQCBJbnRSZWN0IFJlbmRlclJlcGxhY2VkOjpsb2Nh
bFNlbGVjdGlvblJlCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAgCiAgICAgUm9vdElu
bGluZUJveCogcm9vdCA9IG1faW5saW5lQm94V3JhcHBlci0+cm9vdCgpOwotICAgIHJldHVybiBJ
bnRSZWN0KDAsIHJvb3QtPnNlbGVjdGlvblRvcCgpIC0geVBvcygpLCB3aWR0aCgpLCByb290LT5z
ZWxlY3Rpb25IZWlnaHQoKSk7CisgICAgcmV0dXJuIEludFJlY3QoMCwgcm9vdC0+c2VsZWN0aW9u
VG9wKCkgLSB5KCksIHdpZHRoKCksIHJvb3QtPnNlbGVjdGlvbkhlaWdodCgpKTsKIH0KIAogdm9p
ZCBSZW5kZXJSZXBsYWNlZDo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgcykKQEAg
LTMyNyw3ICszMjcsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjphZGp1c3RPdmVyZmxvd0ZvckJv
CiB7CiAgICAgSW50UmVjdCBvdmVyZmxvdzsKICAgICBmb3IgKFNoYWRvd0RhdGEqIGJveFNoYWRv
dyA9IHN0eWxlKCktPmJveFNoYWRvdygpOyBib3hTaGFkb3c7IGJveFNoYWRvdyA9IGJveFNoYWRv
dy0+bmV4dCkgewotICAgICAgICBJbnRSZWN0IHNoYWRvdyA9IGJvcmRlckJveCgpOworICAgICAg
ICBJbnRSZWN0IHNoYWRvdyA9IGJvcmRlckJveFJlY3QoKTsKICAgICAgICAgc2hhZG93Lm1vdmUo
Ym94U2hhZG93LT54LCBib3hTaGFkb3ctPnkpOwogICAgICAgICBzaGFkb3cuaW5mbGF0ZShib3hT
aGFkb3ctPmJsdXIpOwogICAgICAgICBvdmVyZmxvdy51bml0ZShzaGFkb3cpOwpAQCAtMzM2LDcg
KzMzNiw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmFkanVzdE92ZXJmbG93Rm9yQm8KICAgICBp
ZiAoIW92ZXJmbG93LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoIWdPdmVyZmxvd1JlY3RNYXAp
CiAgICAgICAgICAgICBnT3ZlcmZsb3dSZWN0TWFwID0gbmV3IE92ZXJmbG93UmVjdE1hcCgpOwot
ICAgICAgICBvdmVyZmxvdy51bml0ZShib3JkZXJCb3goKSk7CisgICAgICAgIG92ZXJmbG93LnVu
aXRlKGJvcmRlckJveFJlY3QoKSk7CiAgICAgICAgIGdPdmVyZmxvd1JlY3RNYXAtPnNldCh0aGlz
LCBvdmVyZmxvdyk7CiAgICAgICAgIG1faGFzT3ZlcmZsb3cgPSB0cnVlOwogICAgIH0gZWxzZSBp
ZiAobV9oYXNPdmVyZmxvdykgewpAQCAtMzg2LDcgKzM4Niw3IEBAIEludFJlY3QgUmVuZGVyUmVw
bGFjZWQ6Om92ZXJmbG93UmVjdChib28KICAgICBpZiAobV9oYXNPdmVyZmxvdykKICAgICAgICAg
cmV0dXJuIGdPdmVyZmxvd1JlY3RNYXAtPmZpbmQodGhpcyktPnNlY29uZDsKIAotICAgIHJldHVy
biBib3JkZXJCb3goKTsKKyAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogfQogCiBJbnRSZWN0
IFJlbmRlclJlcGxhY2VkOjphYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0Miwx
MyBAQCBSZW5kZXJSZXBsaWNhOjp+UmVuZGVyUmVwbGljYSgpCiAgICAgCiB2b2lkIFJlbmRlclJl
cGxpY2E6OmxheW91dCgpCiB7Ci0gICAgSW50UmVjdCBib3ggPSBwYXJlbnQoKS0+Ym9yZGVyQm94
KCk7Ci0gICAgbV94ID0gYm94LngoKTsKLSAgICBtX3kgPSBib3gueSgpOwotICAgIG1fd2lkdGgg
PSBib3gud2lkdGgoKTsKLSAgICBtX2hlaWdodCA9IGJveC5oZWlnaHQoKTsKKyAgICBtX2ZyYW1l
UmVjdCA9IHBhcmVudEJveCgpLT5ib3JkZXJCb3hSZWN0KCk7CiAgICAgc2V0TmVlZHNMYXlvdXQo
ZmFsc2UpOwogfQogCiB2b2lkIFJlbmRlclJlcGxpY2E6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAg
ICBtX21pblByZWZXaWR0aCA9IHBhcmVudCgpLT53aWR0aCgpOworICAgIG1fbWluUHJlZldpZHRo
ID0gcGFyZW50Qm94KCktPndpZHRoKCk7CiAgICAgbV9tYXhQcmVmV2lkdGggPSBtX21pblByZWZX
aWR0aDsKICAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwogfQpAQCAtNjIsOCArNTgsOCBA
QCB2b2lkIFJlbmRlclJlcGxpY2E6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgaWYgKHBhaW50
SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZU1hc2spCiAgICAgICAgIHJldHVybjsKICAKLSAgICB0eCArPSBtX3g7Ci0gICAg
dHkgKz0gbV95OworICAgIHR4ICs9IHgoKTsKKyAgICB0eSArPSBtX2ZyYW1lUmVjdC55KCk7CiAK
ICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAg
ICAvLyBUdXJuIGFyb3VuZCBhbmQgcGFpbnQgdGhlIHBhcmVudCBsYXllci4gVXNlIHRlbXBvcmFy
eSBjbGlwUmVjdHMsIHNvIHRoYXQgdGhlIGxheWVyIGRvZXNuJ3QgZW5kIHVwIGNhY2hpbmcgY2xp
cCByZWN0cwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCShy
ZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NSw3ICszNTUsNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRh
aW5lcjo6cGFpbnQoUGFpbnRJbmZvCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsK
ICAgICAKICAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRs
aW5lV2lkdGgoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAg
cGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCBtX2Fic29sdXRlQm91bmRzLngoKSwgbV9h
YnNvbHV0ZUJvdW5kcy55KCksIG1fYWJzb2x1dGVCb3VuZHMud2lkdGgoKSwgbV9hYnNvbHV0ZUJv
dW5kcy5oZWlnaHQoKSwgc3R5bGUoKSk7CisgICAgICAgIHBhaW50T3V0bGluZShwYWludEluZm8u
Y29udGV4dCwgbV9hYnNvbHV0ZUJvdW5kcy54KCksIG1fYWJzb2x1dGVCb3VuZHMueSgpLCBtX2Fi
c29sdXRlQm91bmRzLndpZHRoKCksIG1fYWJzb2x1dGVCb3VuZHMuaGVpZ2h0KCksIHN0eWxlKCks
IHRydWUpOwogfQogCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdDb250YWluZXI6OnZp
ZXdwb3J0VHJhbnNmb3JtKCkgY29uc3QKQEAgLTQzMSw2ICs0MzEsMTMgQEAgYm9vbCBSZW5kZXJT
VkdDb250YWluZXI6Om5vZGVBdFBvaW50KGNvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAorSW50
UmVjdCBSZW5kZXJTVkdDb250YWluZXI6OmFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0Cit7
CisgICAgSW50UmVjdCByZXN1bHQgPSBtX2Fic29sdXRlQm91bmRzOworICAgIGFkanVzdFJlY3RG
b3JPdXRsaW5lQW5kU2hhZG93KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0NvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Nv
bnRhaW5lci5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0NvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmly
c3RDaGlsZDsgfQogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RDaGlsZDsgfQogCi0gICAgdmlydHVhbCBpbnQgd2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9oZWlnaHQ7IH0KKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9
CisgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAKICAgICB2aXJ0
dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkZENo
aWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAw
KTsKQEAgLTg5LDYgKzg5LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCisgICAgdmlydHVhbCBJbnRSZWN0IGFi
c29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIGFwcGx5Q29udGVudFRyYW5zZm9ybXMoUGFpbnRJbmZvJik7CiAgICAgdmlydHVhbCB2b2lk
IGFwcGx5QWRkaXRpb25hbFRyYW5zZm9ybXMoUGFpbnRJbmZvJik7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBA
IHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmxheW91dCgpCiAgICAgY2FsY3VsYXRlTG9jYWxUcmFuc2Zv
cm0oKTsKICAgICAKICAgICAvLyBtaW5pbXVtIGhlaWdodAotICAgIG1faGVpZ2h0ID0gZXJyb3JP
Y2N1cnJlZCgpID8gaW50cmluc2ljU2l6ZSgpLmhlaWdodCgpIDogMDsKKyAgICBzZXRIZWlnaHQo
ZXJyb3JPY2N1cnJlZCgpID8gaW50cmluc2ljU2l6ZSgpLmhlaWdodCgpIDogMCk7CiAKICAgICBj
YWxjV2lkdGgoKTsKICAgICBjYWxjSGVpZ2h0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDggKzEy
OSw4IEBAIEludFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZUFic28KICAgICAvLyBC
dXQgZG8gdGFrZSB0aGUgY29udGFpbmluZ0Jsb2NrcydzIGNvbnRhaW5lciBwb3NpdGlvbiBpbnRv
IGFjY291bnQsIGllLiBTVkcgdGV4dCBpbiBzY3JvbGxhYmxlIDxkaXY+LgogICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGh0bWxQYXJlbnRDdG0gPSByb290LT5SZW5kZXJDb250YWluZXI6OmFic29s
dXRlVHJhbnNmb3JtKCk7CiAKLSAgICBGbG9hdFJlY3QgZml4ZWRSZWN0KG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQocmVjdC54KCkgKyBhYnNQb3MueCgpIC0geFBvcygpIC0gaHRtbFBhcmVudEN0bS5l
KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChyZWN0
LnkoKSArIGFic1Bvcy55KCkgLSB5UG9zKCkgLSBodG1sUGFyZW50Q3RtLmYoKSksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgRmxvYXRSZWN0IGZpeGVkUmVjdChuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KHJlY3QueCgpICsgYWJzUG9zLngoKSAtIChmaXJzdFRleHRCb3goKSA/IGZp
cnN0VGV4dEJveCgpLT54UG9zKCkgOiAwKSAtIGh0bWxQYXJlbnRDdG0uZSgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocmVjdC55KCkgKyBhYnNQb3Mu
eSgpIC0gKGZpcnN0VGV4dEJveCgpID8gZmlyc3RUZXh0Qm94KCktPnlQb3MoKSA6IDApIC0gaHRt
bFBhcmVudEN0bS5mKCkpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogICAgIC8vIEZJ
WE1FOiBicm9rZW4gd2l0aCBDU1MgdHJhbnNmb3JtcwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaXhlZFJlY3QpKTsKIH0KQEAgLTE1NSw3
ICsxNTUsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4dDo6cG9zCiAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCAwLCBET1dOU1RSRUFNKTsKIAog
ICAgIFNWR1Jvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSB0ZXh0Qm94LT5zdmdSb290SW5saW5lQm94
KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+b2JqZWN0
KCkgOiAwOworICAgIFJlbmRlckJsb2NrKiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+Ymxv
Y2soKSA6IDA7CiAKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihlbGVtZW50KCksIDAsIERPV05TVFJFQU0pOwpAQCAtMTYzLDcgKzE2Myw3IEBAIFZpc2li
bGVQb3NpdGlvbiBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3MKICAgICBpbnQgb2Zmc2V0ID0gMDsK
IAogICAgIGZvciAoU1ZHSW5saW5lVGV4dEJveCogYm94ID0gdGV4dEJveDsgYm94OyBib3ggPSBz
dGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oYm94LT5uZXh0VGV4dEJveCgpKSkgewotICAg
ICAgICBpZiAoYm94LT5zdmdDaGFyYWN0ZXJIaXRzUG9zaXRpb24oeCArIG9iamVjdC0+eFBvcygp
LCB5ICsgb2JqZWN0LT55UG9zKCksIG9mZnNldCkpIHsKKyAgICAgICAgaWYgKGJveC0+c3ZnQ2hh
cmFjdGVySGl0c1Bvc2l0aW9uKHggKyBvYmplY3QtPngoKSwgeSArIG9iamVjdC0+eSgpLCBvZmZz
ZXQpKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgYXQgdGhlIGVuZC9zdGFydCBvZiB0
aGUgYm94LCBzdG9wIGxvb2tpbmcgZm9yIG90aGVyIHNlbGVjdGVkIGJveGVzLgogICAgICAgICAg
ICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAgICAgICAgICAgICAgICAgaWYgKG9m
ZnNldCA8PSAoaW50KSBib3gtPmVuZCgpICsgMSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jvb3QuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOCArMTAyLDggQEAgdm9pZCBSZW5kZXJT
VkdSb290OjpsYXlvdXQoKQogCiAgICAgbV9hYnNvbHV0ZUJvdW5kcyA9IGFic29sdXRlQ2xpcHBl
ZE92ZXJmbG93UmVjdCgpOwogICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNW
R1NWR0VsZW1lbnQqPihlbGVtZW50KCkpOwotICAgIG1fd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+
KG1fd2lkdGggKiBzdmctPmN1cnJlbnRTY2FsZSgpKTsKLSAgICBtX2hlaWdodCA9IHN0YXRpY19j
YXN0PGludD4obV9oZWlnaHQgKiBzdmctPmN1cnJlbnRTY2FsZSgpKTsKKyAgICBzZXRXaWR0aChz
dGF0aWNfY2FzdDxpbnQ+KHdpZHRoKCkgKiBzdmctPmN1cnJlbnRTY2FsZSgpKSk7CisgICAgc2V0
SGVpZ2h0KHN0YXRpY19jYXN0PGludD4oaGVpZ2h0KCkgKiBzdmctPmN1cnJlbnRTY2FsZSgpKSk7
CiAgICAgCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoc2VsZk5lZWRz
TGF5b3V0KCkpIC8vIGVpdGhlciBib3VuZHMgb3IgdHJhbnNmb3JtIGNoYW5nZWQsIGZvcmNlIGtp
ZHMgdG8gcmVsYXlvdXQKQEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmFw
cGx5Q29udGVudFRyYW5zZm9yCiAgICAgLy8gVHJhbnNsYXRlIGZyb20gcGFyZW50IG9mZnNldHMg
KGh0bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0aXZlIHRyYW5zZm9ybSAoc3ZnIHJlbmRlcmVycykK
ICAgICBJbnRQb2ludCBvcmlnaW47CiAgICAgb3JpZ2luLm1vdmUocGFyZW50WCwgcGFyZW50WSk7
Ci0gICAgb3JpZ2luLm1vdmUobV94LCBtX3kpOworICAgIG9yaWdpbi5tb3ZlKHgoKSwgbV9mcmFt
ZVJlY3QueSgpKTsKICAgICBvcmlnaW4ubW92ZShib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKTsK
ICAgICBvcmlnaW4ubW92ZShwYWRkaW5nTGVmdCgpLCBwYWRkaW5nVG9wKCkpOwogCkBAIC0xNjUs
NyArMTY1LDcgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpwYWludChQYWludEluZm8mIHBhaQogCiAg
ICAgLy8gVGhpcyBzaG91bGQgb25seSBleGlzdCBmb3IgPHN2Zz4gcmVuZGVyZXJzCiAgICAgaWYg
KGhhc0JveERlY29yYXRpb25zKCkgJiYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpIAotICAg
ICAgICBwYWludEJveERlY29yYXRpb25zKHBhaW50SW5mbywgbV94ICsgcGFyZW50WCwgbV95ICsg
cGFyZW50WSk7CisgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB4KCkgKyBw
YXJlbnRYLCBtX2ZyYW1lUmVjdC55KCkgKyBwYXJlbnRZKTsKIAogICAgIGlmICghZmlyc3RDaGls
ZCgpKSB7CiAjaWYgRU5BQkxFKFNWR19GSUxURVJTKQpAQCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQg
UmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVRdWFkcyhWZWN0b3IKIFRyYW5zZm9ybWF0aW9uTWF0cml4
IFJlbmRlclNWR1Jvb3Q6OmFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjdG0gPSBSZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7
Ci0gICAgY3RtLnRyYW5zbGF0ZShtX3gsIG1feSk7CisgICAgY3RtLnRyYW5zbGF0ZSh4KCksIG1f
ZnJhbWVSZWN0LnkoKSk7CiAgICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZH
U1ZHRWxlbWVudCo+KGVsZW1lbnQoKSk7CiAgICAgY3RtLnNjYWxlKHN2Zy0+Y3VycmVudFNjYWxl
KCkpOwogICAgIGN0bS50cmFuc2xhdGUoc3ZnLT5jdXJyZW50VHJhbnNsYXRlKCkueCgpLCBzdmct
PmN1cnJlbnRUcmFuc2xhdGUoKS55KCkpOwpAQCAtMzA4LDggKzMwOCw4IEBAIGJvb2wgUmVuZGVy
U1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAgICBpZiAoIXZpZXdwb3J0KCkuaXNFbXB0
eSgpCiAgICAgICAgICYmIHN0eWxlKCktPm92ZXJmbG93WCgpID09IE9ISURERU4KICAgICAgICAg
JiYgc3R5bGUoKS0+b3ZlcmZsb3dZKCkgPT0gT0hJRERFTikgewotICAgICAgICBpbnQgdHggPSBt
X3ggLSBfdHggKyBzeDsKLSAgICAgICAgaW50IHR5ID0gbV95IC0gX3R5ICsgc3k7CisgICAgICAg
IGludCB0eCA9IHgoKSAtIF90eCArIHN4OworICAgICAgICBpbnQgdHkgPSBtX2ZyYW1lUmVjdC55
KCkgLSBfdHkgKyBzeTsKIAogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRo
aW5nIGF0IGFsbC4KICAgICAgICAgSW50UmVjdCBvdmVyZmxvd0JveCA9IG92ZXJmbG93UmVjdChm
YWxzZSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVFNwYW4uY3BwCShyZXZpc2lvbiA0
MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RTcGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmgiCiAKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUg
IlNWR0lubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCiAKQEAg
LTQyLDEzICs0MywxMyBAQCB2b2lkIFJlbmRlclNWR1RTcGFuOjphYnNvbHV0ZVJlY3RzKFZlY3Rv
CiAgICAgSW5saW5lUnVuQm94KiBmaXJzdEJveCA9IGZpcnN0TGluZUJveCgpOwogCiAgICAgU1ZH
Um9vdElubGluZUJveCogcm9vdEJveCA9IGZpcnN0Qm94ID8gc3RhdGljX2Nhc3Q8U1ZHSW5saW5l
VGV4dEJveCo+KGZpcnN0Qm94KS0+c3ZnUm9vdElubGluZUJveCgpIDogMDsKLSAgICBSZW5kZXJP
YmplY3QqIG9iamVjdCA9IHJvb3RCb3ggPyByb290Qm94LT5vYmplY3QoKSA6IDA7CisgICAgUmVu
ZGVyQm94KiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+YmxvY2soKSA6IDA7CiAKICAgICBp
ZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHhSZWYgPSBvYmplY3QtPnhQ
b3MoKSArIHhQb3MoKTsKLSAgICBpbnQgeVJlZiA9IG9iamVjdC0+eVBvcygpICsgeVBvcygpOwor
ICAgIGludCB4UmVmID0gb2JqZWN0LT54KCkgKyB4KCk7CisgICAgaW50IHlSZWYgPSBvYmplY3Qt
PnkoKSArIHkoKTsKICAKICAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94OyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewogICAgICAgICBGbG9hdFJlY3QgcmVj
dCh4UmVmICsgY3Vyci0+eFBvcygpLCB5UmVmICsgY3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgp
LCBjdXJyLT5oZWlnaHQoKSk7CkBAIC02MiwxMyArNjMsMTMgQEAgdm9pZCBSZW5kZXJTVkdUU3Bh
bjo6YWJzb2x1dGVRdWFkcyhWZWN0bwogICAgIElubGluZVJ1bkJveCogZmlyc3RCb3ggPSBmaXJz
dExpbmVCb3goKTsKIAogICAgIFNWR1Jvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBmaXJzdEJveCA/
IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihmaXJzdEJveCktPnN2Z1Jvb3RJbmxpbmVC
b3goKSA6IDA7Ci0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+
b2JqZWN0KCkgOiAwOworICAgIFJlbmRlckJveCogb2JqZWN0ID0gcm9vdEJveCA/IHJvb3RCb3gt
PmJsb2NrKCkgOiAwOwogCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGludCB4UmVmID0gb2JqZWN0LT54UG9zKCkgKyB4UG9zKCk7Ci0gICAgaW50IHlSZWYgPSBvYmpl
Y3QtPnlQb3MoKSArIHlQb3MoKTsKKyAgICBpbnQgeFJlZiA9IG9iamVjdC0+eCgpICsgeCgpOwor
ICAgIGludCB5UmVmID0gb2JqZWN0LT55KCkgKyB5KCk7CiAgCiAgICAgZm9yIChJbmxpbmVSdW5C
b3gqIGN1cnIgPSBmaXJzdEJveDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsK
ICAgICAgICAgRmxvYXRSZWN0IHJlY3QoeFJlZiArIGN1cnItPnhQb3MoKSwgeVJlZiArIGN1cnIt
PnlQb3MoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpOwpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgdm9p
ZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogICAgIFNWR1RleHRFbGVtZW50KiB0ZXh0ID0gc3Rh
dGljX2Nhc3Q8U1ZHVGV4dEVsZW1lbnQqPihlbGVtZW50KCkpOwogICAgIGludCB4T2Zmc2V0ID0g
KGludCkodGV4dC0+eCgpLT5nZXRGaXJzdCgpLnZhbHVlKHRleHQpKTsKICAgICBpbnQgeU9mZnNl
dCA9IChpbnQpKHRleHQtPnkoKS0+Z2V0Rmlyc3QoKS52YWx1ZSh0ZXh0KSk7Ci0gICAgc2V0UG9z
KHhPZmZzZXQsIHlPZmZzZXQpOworICAgIHNldExvY2F0aW9uKHhPZmZzZXQsIHlPZmZzZXQpOwog
ICAgIAogICAgIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7CiAKQEAgLTIzMSw3ICsyMzEsNyBA
QCBGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6cmVsYXRpdmVCQm94KGJvCiAgICAgICAgIHJlcGFp
bnRSZWN0LmluZmxhdGUoc3Ryb2tlV2lkdGgpOwogICAgIH0KIAotICAgIHJlcGFpbnRSZWN0Lm1v
dmUoeFBvcygpLCB5UG9zKCkpOworICAgIHJlcGFpbnRSZWN0Lm1vdmUoeCgpLCB5KCkpOwogICAg
IHJldHVybiByZXBhaW50UmVjdDsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVGV4dFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1RleHRQYXRoLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdUZXh0UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJSZW5kZXJTVkdUZXh0UGF0aC5oIgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCiAjaW5j
bHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCkBA
IC04MiwxMyArODMsMTMgQEAgdm9pZCBSZW5kZXJTVkdUZXh0UGF0aDo6YWJzb2x1dGVSZWN0cyhW
ZQogICAgIElubGluZVJ1bkJveCogZmlyc3RCb3ggPSBmaXJzdExpbmVCb3goKTsKIAogICAgIFNW
R1Jvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBmaXJzdEJveCA/IHN0YXRpY19jYXN0PFNWR0lubGlu
ZVRleHRCb3gqPihmaXJzdEJveCktPnN2Z1Jvb3RJbmxpbmVCb3goKSA6IDA7Ci0gICAgUmVuZGVy
T2JqZWN0KiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+b2JqZWN0KCkgOiAwOworICAgIFJl
bmRlckJsb2NrKiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+YmxvY2soKSA6IDA7CiAKICAg
ICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHhSZWYgPSBvYmplY3Qt
PnhQb3MoKSArIHhQb3MoKTsKLSAgICBpbnQgeVJlZiA9IG9iamVjdC0+eVBvcygpICsgeVBvcygp
OworICAgIGludCB4UmVmID0gb2JqZWN0LT54KCkgKyB4KCk7CisgICAgaW50IHlSZWYgPSBvYmpl
Y3QtPnkoKSArIHkoKTsKIAogICAgIGZvciAoSW5saW5lUnVuQm94KiBjdXJyID0gZmlyc3RCb3g7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBy
ZWN0KHhSZWYgKyBjdXJyLT54UG9zKCksIHlSZWYgKyBjdXJyLT55UG9zKCksIGN1cnItPndpZHRo
KCksIGN1cnItPmhlaWdodCgpKTsKQEAgLTEwMiwxMyArMTAzLDEzIEBAIHZvaWQgUmVuZGVyU1ZH
VGV4dFBhdGg6OmFic29sdXRlUXVhZHMoVmUKICAgICBJbmxpbmVSdW5Cb3gqIGZpcnN0Qm94ID0g
Zmlyc3RMaW5lQm94KCk7CiAKICAgICBTVkdSb290SW5saW5lQm94KiByb290Qm94ID0gZmlyc3RC
b3ggPyBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oZmlyc3RCb3gpLT5zdmdSb290SW5s
aW5lQm94KCkgOiAwOwotICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcm9vdEJveCA/IHJvb3RC
b3gtPm9iamVjdCgpIDogMDsKKyAgICBSZW5kZXJCbG9jayogb2JqZWN0ID0gcm9vdEJveCA/IHJv
b3RCb3gtPmJsb2NrKCkgOiAwOwogCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGludCB4UmVmID0gb2JqZWN0LT54UG9zKCkgKyB4UG9zKCk7Ci0gICAgaW50IHlSZWYg
PSBvYmplY3QtPnlQb3MoKSArIHlQb3MoKTsKKyAgICBpbnQgeFJlZiA9IG9iamVjdC0+eCgpICsg
eCgpOworICAgIGludCB5UmVmID0gb2JqZWN0LT55KCkgKyB5KCk7CiAKICAgICBmb3IgKElubGlu
ZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3go
KSkgewogICAgICAgICBGbG9hdFJlY3QgcmVjdCh4UmVmICsgY3Vyci0+eFBvcygpLCB5UmVmICsg
Y3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCShyZXZp
c2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIGJvb2wgUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXI6Om5vZGVBdFAKICAgICAgICAgJiYgc3R5bGUoKS0+b3ZlcmZsb3dY
KCkgPT0gT0hJRERFTgogICAgICAgICAmJiBzdHlsZSgpLT5vdmVyZmxvd1koKSA9PSBPSElEREVO
KSB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgot
ICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gb3ZlcmZsb3dSZWN0KGZhbHNlKTsKKyAgICAg
ICAgSW50UmVjdCBvdmVyZmxvd0JveCA9IEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkp
OwogICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKF90eCwgX3R5KTsKICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY3RtID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRyYW5zZm9ybSgpOwogICAg
ICAgICBjdG0udHJhbnNsYXRlKHZpZXdwb3J0KCkueCgpLCB2aWV3cG9ydCgpLnkoKSk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTIgKzMwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTY3Jv
bGxiYXI+IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGJhckNs
aWVudCogY2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTY3JvbGxiYXI6OmNy
ZWF0ZUN1c3RvbVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24sIFJlbmRlckJveCogcmVuZGVyZXIpCiB7CiAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBSZW5kZXJTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlvbiwgcmVuZGVy
ZXIpKTsKIH0KIAotUmVuZGVyU2Nyb2xsYmFyOjpSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xp
ZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQorUmVuZGVyU2Nyb2xsYmFyOjpSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYmFy
Q2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBSZW5kZXJC
b3gqIHJlbmRlcmVyKQogICAgIDogU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIFJlZ3Vs
YXJTY3JvbGxiYXIsIFJlbmRlclNjcm9sbGJhclRoZW1lOjpyZW5kZXJTY3JvbGxiYXJUaGVtZSgp
KQogICAgICwgbV9vd25lcihyZW5kZXJlcikKIHsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBSZW5k
ZXJTY3JvbGxiYXI6OnNldFBhcmVudChTY3JvbGxWaQogewogICAgIFNjcm9sbGJhcjo6c2V0UGFy
ZW50KHBhcmVudCk7CiAgICAgaWYgKCFwYXJlbnQpIHsKLSAgICAgICAgLy8gRGVzdHJveSBhbGwg
b2YgdGhlIHNjcm9sbGJhcidzIFJlbmRlck9iamVjdHMuCisgICAgICAgIC8vIERlc3Ryb3kgYWxs
IG9mIHRoZSBzY3JvbGxiYXIncyBSZW5kZXJCb3hlcy4KICAgICAgICAgdXBkYXRlU2Nyb2xsYmFy
UGFydHModHJ1ZSk7CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFy
LmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE3ICszMiwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRl
clNjcm9sbGJhclBhcnQ7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIAogY2xhc3MgUmVuZGVyU2Nyb2xs
YmFyIDogcHVibGljIFNjcm9sbGJhciB7CiBwcm90ZWN0ZWQ6Ci0gICAgUmVuZGVyU2Nyb2xsYmFy
KFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBSZW5kZXJPYmplY3QqKTsK
KyAgICBSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRp
b24sIFJlbmRlckJveCopOwogCiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFNjcm9sbGJhcjsK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZUN1c3RvbVNjcm9sbGJhcihT
Y3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgUmVuZGVyT2JqZWN0Kik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVDdXN0b21TY3JvbGxiYXIoU2Ny
b2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFJlbmRlckJveCopOwogICAgIHZp
cnR1YWwgflJlbmRlclNjcm9sbGJhcigpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChT
Y3JvbGxWaWV3Kik7CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBzdHlsZUNoYW5nZWQoKTsKIAotICAgIFJlbmRlck9iamVjdCogb3duaW5nUmVuZGVyZXIoKSBj
b25zdCB7IHJldHVybiBtX293bmVyOyB9CisgICAgUmVuZGVyQm94KiBvd25pbmdSZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7IH0KIAogICAgIHZvaWQgcGFpbnRQYXJ0KEdyYXBoaWNz
Q29udGV4dCosIFNjcm9sbGJhclBhcnQsIGNvbnN0IEludFJlY3QmKTsKIApAQCAtNzQsNyArNzQs
NyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFNjcm9sbGJhclBz
ZXVkb1N0eWxlKFNjcm9sbGJhclBhcnQsIFJlbmRlclN0eWxlOjpQc2V1ZG9JZCk7CiAgICAgdm9p
ZCB1cGRhdGVTY3JvbGxiYXJQYXJ0KFNjcm9sbGJhclBhcnQsIGJvb2wgZGVzdHJveSA9IGZhbHNl
KTsKIAotICAgIFJlbmRlck9iamVjdCogbV9vd25lcjsKKyAgICBSZW5kZXJCb3gqIG1fb3duZXI7
CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVuZGVyU2Nyb2xsYmFyUGFydCo+IG1fcGFydHM7CiB9
OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAkocmV2
aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTQgKzQ1LDE0IEBAIFJlbmRlclNjcm9sbGJhclBhcnQ6
On5SZW5kZXJTY3JvbGxiYXJQYXIKIAogdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpsYXlvdXQo
KQogewotICAgIHNldFBvcygwLCAwKTsgLy8gV2UgZG9uJ3Qgd29ycnkgYWJvdXQgcG9zaXRpb25p
bmcgb3Vyc2VsdmVzLiAgV2UncmUganVzdCBkZXRlcm1pbmluZyBvdXIgbWluaW11bSB3aWR0aC9o
ZWlnaHQuCisgICAgc2V0TG9jYXRpb24oSW50UG9pbnQoKSk7IC8vIFdlIGRvbid0IHdvcnJ5IGFi
b3V0IHBvc2l0aW9uaW5nIG91cnNlbHZlcy4gIFdlJ3JlIGp1c3QgZGV0ZXJtaW5pbmcgb3VyIG1p
bmltdW0gd2lkdGgvaGVpZ2h0LgogICAgIGlmIChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQogICAgICAgICBsYXlvdXRIb3Jpem9udGFsUGFydCgpOwog
ICAgIGVsc2UKICAgICAgICAgbGF5b3V0VmVydGljYWxQYXJ0KCk7CiAKLSAgICBtX292ZXJmbG93
V2lkdGggPSBtYXgobV93aWR0aCwgbV9vdmVyZmxvd1dpZHRoKTsKLSAgICBtX292ZXJmbG93SGVp
Z2h0ID0gbWF4KG1faGVpZ2h0LCBtX292ZXJmbG93SGVpZ2h0KTsKKyAgICBtX292ZXJmbG93V2lk
dGggPSBtYXgod2lkdGgoKSwgbV9vdmVyZmxvd1dpZHRoKTsKKyAgICBtX292ZXJmbG93SGVpZ2h0
ID0gbWF4KGhlaWdodCgpLCBtX292ZXJmbG93SGVpZ2h0KTsKICAgICAKICAgICBzZXROZWVkc0xh
eW91dChmYWxzZSk7CiB9CkBAIC02MCwxMSArNjAsMTEgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXJQ
YXJ0OjpsYXlvdXQoKQogdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpsYXlvdXRIb3Jpem9udGFs
UGFydCgpCiB7CiAgICAgaWYgKG1fcGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpIHsKLSAgICAgICAg
bV93aWR0aCA9IG1fc2Nyb2xsYmFyLT53aWR0aCgpOworICAgICAgICBzZXRXaWR0aChtX3Njcm9s
bGJhci0+d2lkdGgoKSk7CiAgICAgICAgIGNvbXB1dGVTY3JvbGxiYXJIZWlnaHQoKTsKICAgICB9
IGVsc2UgewogICAgICAgICBjb21wdXRlU2Nyb2xsYmFyV2lkdGgoKTsKLSAgICAgICAgbV9oZWln
aHQgPSBtX3Njcm9sbGJhci0+aGVpZ2h0KCk7CisgICAgICAgIHNldEhlaWdodChtX3Njcm9sbGJh
ci0+aGVpZ2h0KCkpOwogICAgIH0KIH0KIApAQCAtNzIsOSArNzIsOSBAQCB2b2lkIFJlbmRlclNj
cm9sbGJhclBhcnQ6OmxheW91dFZlcnRpY2FsCiB7CiAgICAgaWYgKG1fcGFydCA9PSBTY3JvbGxi
YXJCR1BhcnQpIHsKICAgICAgICAgY29tcHV0ZVNjcm9sbGJhcldpZHRoKCk7Ci0gICAgICAgIG1f
aGVpZ2h0ID0gbV9zY3JvbGxiYXItPmhlaWdodCgpOworICAgICAgICBzZXRIZWlnaHQobV9zY3Jv
bGxiYXItPmhlaWdodCgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX3dpZHRoID0gbV9zY3Jv
bGxiYXItPndpZHRoKCk7CisgICAgICAgIHNldFdpZHRoKG1fc2Nyb2xsYmFyLT53aWR0aCgpKTsK
ICAgICAgICAgY29tcHV0ZVNjcm9sbGJhckhlaWdodCgpOwogICAgIH0gCiB9CkBAIC04OSwxMCAr
ODksMTAgQEAgc3RhdGljIGludCBjYWxjU2Nyb2xsYmFyVGhpY2tuZXNzVXNpbmcoYwogdm9pZCBS
ZW5kZXJTY3JvbGxiYXJQYXJ0Ojpjb21wdXRlU2Nyb2xsYmFyV2lkdGgoKQogewogICAgIGludCB2
aXNpYmxlU2l6ZSA9IG1fc2Nyb2xsYmFyLT5vd25pbmdSZW5kZXJlcigpLT53aWR0aCgpIC0gbV9z
Y3JvbGxiYXItPm93bmluZ1JlbmRlcmVyKCktPmJvcmRlckxlZnQoKSAtIG1fc2Nyb2xsYmFyLT5v
d25pbmdSZW5kZXJlcigpLT5ib3JkZXJSaWdodCgpOwotICAgIGludCB3aWR0aCA9IGNhbGNTY3Jv
bGxiYXJUaGlja25lc3NVc2luZyhzdHlsZSgpLT53aWR0aCgpLCB2aXNpYmxlU2l6ZSk7CisgICAg
aW50IHcgPSBjYWxjU2Nyb2xsYmFyVGhpY2tuZXNzVXNpbmcoc3R5bGUoKS0+d2lkdGgoKSwgdmlz
aWJsZVNpemUpOwogICAgIGludCBtaW5XaWR0aCA9IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2lu
ZyhzdHlsZSgpLT5taW5XaWR0aCgpLCB2aXNpYmxlU2l6ZSk7Ci0gICAgaW50IG1heFdpZHRoID0g
c3R5bGUoKS0+bWF4V2lkdGgoKS5pc1VuZGVmaW5lZCgpID8gd2lkdGggOiBjYWxjU2Nyb2xsYmFy
VGhpY2tuZXNzVXNpbmcoc3R5bGUoKS0+bWF4V2lkdGgoKSwgdmlzaWJsZVNpemUpOwotICAgIG1f
d2lkdGggPSBtYXgobWluV2lkdGgsIG1pbihtYXhXaWR0aCwgd2lkdGgpKTsKKyAgICBpbnQgbWF4
V2lkdGggPSBzdHlsZSgpLT5tYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkgPyB3IDogY2FsY1Njcm9s
bGJhclRoaWNrbmVzc1VzaW5nKHN0eWxlKCktPm1heFdpZHRoKCksIHZpc2libGVTaXplKTsKKyAg
ICBzZXRXaWR0aChtYXgobWluV2lkdGgsIG1pbihtYXhXaWR0aCwgdykpKTsKICAgICAKICAgICAv
LyBCdXR0b25zIGFuZCB0cmFjayBwaWVjZXMgY2FuIGFsbCBoYXZlIG1hcmdpbnMgYWxvbmcgdGhl
IGF4aXMgb2YgdGhlIHNjcm9sbGJhci4gCiAgICAgbV9tYXJnaW5MZWZ0ID0gc3R5bGUoKS0+bWFy
Z2luTGVmdCgpLmNhbGNNaW5WYWx1ZSh2aXNpYmxlU2l6ZSk7CkBAIC0xMDIsMTAgKzEwMiwxMCBA
QCB2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OmNvbXB1dGVTY3JvbGxiCiB2b2lkIFJlbmRlclNj
cm9sbGJhclBhcnQ6OmNvbXB1dGVTY3JvbGxiYXJIZWlnaHQoKQogewogICAgIGludCB2aXNpYmxl
U2l6ZSA9IG1fc2Nyb2xsYmFyLT5vd25pbmdSZW5kZXJlcigpLT5oZWlnaHQoKSAtICBtX3Njcm9s
bGJhci0+b3duaW5nUmVuZGVyZXIoKS0+Ym9yZGVyVG9wKCkgLSBtX3Njcm9sbGJhci0+b3duaW5n
UmVuZGVyZXIoKS0+Ym9yZGVyQm90dG9tKCk7Ci0gICAgaW50IGhlaWdodCA9IGNhbGNTY3JvbGxi
YXJUaGlja25lc3NVc2luZyhzdHlsZSgpLT5oZWlnaHQoKSwgdmlzaWJsZVNpemUpOworICAgIGlu
dCBoID0gY2FsY1Njcm9sbGJhclRoaWNrbmVzc1VzaW5nKHN0eWxlKCktPmhlaWdodCgpLCB2aXNp
YmxlU2l6ZSk7CiAgICAgaW50IG1pbkhlaWdodCA9IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2lu
ZyhzdHlsZSgpLT5taW5IZWlnaHQoKSwgdmlzaWJsZVNpemUpOwotICAgIGludCBtYXhIZWlnaHQg
PSBzdHlsZSgpLT5tYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gaGVpZ2h0IDogY2FsY1Njcm9s
bGJhclRoaWNrbmVzc1VzaW5nKHN0eWxlKCktPm1heEhlaWdodCgpLCB2aXNpYmxlU2l6ZSk7Ci0g
ICAgbV9oZWlnaHQgPSBtYXgobWluSGVpZ2h0LCBtaW4obWF4SGVpZ2h0LCBoZWlnaHQpKTsKKyAg
ICBpbnQgbWF4SGVpZ2h0ID0gc3R5bGUoKS0+bWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IGgg
OiBjYWxjU2Nyb2xsYmFyVGhpY2tuZXNzVXNpbmcoc3R5bGUoKS0+bWF4SGVpZ2h0KCksIHZpc2li
bGVTaXplKTsKKyAgICBzZXRIZWlnaHQobWF4KG1pbkhlaWdodCwgbWluKG1heEhlaWdodCwgaCkp
KTsKIAogICAgIC8vIEJ1dHRvbnMgYW5kIHRyYWNrIHBpZWNlcyBjYW4gYWxsIGhhdmUgbWFyZ2lu
cyBhbG9uZyB0aGUgYXhpcyBvZiB0aGUgc2Nyb2xsYmFyLiAKICAgICBtX21hcmdpblRvcCA9IHN0
eWxlKCktPm1hcmdpblRvcCgpLmNhbGNNaW5WYWx1ZSh2aXNpYmxlU2l6ZSk7CkBAIC0xNDQsNyAr
MTQ0LDcgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjppbWFnZUNoYW5nZWQoVwogdm9pZCBS
ZW5kZXJTY3JvbGxiYXJQYXJ0OjpwYWludEludG9SZWN0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAv
LyBNYWtlIHN1cmUgb3VyIGRpbWVuc2lvbnMgbWF0Y2ggdGhlIHJlY3QuCi0gICAgc2V0UG9zKHJl
Y3QueCgpIC0gdHgsIHJlY3QueSgpIC0gdHkpOworICAgIHNldExvY2F0aW9uKHJlY3QueCgpIC0g
dHgsIHJlY3QueSgpIC0gdHkpOwogICAgIHNldFdpZHRoKHJlY3Qud2lkdGgoKSk7CiAgICAgc2V0
SGVpZ2h0KHJlY3QuaGVpZ2h0KCkpOwogICAgIHNldE92ZXJmbG93V2lkdGgobWF4KHJlY3Qud2lk
dGgoKSwgb3ZlcmZsb3dXaWR0aCgpKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
bGlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5j
cHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDkgKzEwNSw5IEBAIHZvaWQgSFRNTFNsaWRlclRodW1i
RWxlbWVudDo6ZGVmYXVsdEV2ZW4KICAgICAgICAgICAgIEZsb2F0UG9pbnQgY3VyUG9pbnQgPSBz
bGlkZXItPmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50KG1vdXNlRXZlbnQtPnBhZ2VYKCksIG1v
dXNlRXZlbnQtPnBhZ2VZKCkpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBpbnQgbmV3UG9z
aXRpb24gPSBzbGlkZXItPnBvc2l0aW9uRm9yT2Zmc2V0KAogICAgICAgICAgICAgICAgIEludFBv
aW50KG1faW5pdGlhbFBvc2l0aW9uICsgY3VyUG9pbnQueCgpIC0gbV9pbml0aWFsQ2xpY2tQb2lu
dC54KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgKHJlbmRlcmVyKCktPndpZHRoKCkgLyAy
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICArIChyZW5kZXJCb3goKS0+d2lkdGgoKSAvIDIp
LCAKICAgICAgICAgICAgICAgICAgICAgbV9pbml0aWFsUG9zaXRpb24gKyBjdXJQb2ludC55KCkg
LSBtX2luaXRpYWxDbGlja1BvaW50LnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgKyAocmVu
ZGVyZXIoKS0+aGVpZ2h0KCkgLyAyKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgKyAocmVu
ZGVyQm94KCktPmhlaWdodCgpIC8gMikpKTsKICAgICAgICAgICAgIGlmIChzbGlkZXItPmN1cnJl
bnRQb3NpdGlvbigpICE9IG5ld1Bvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgc2xpZGVyLT5z
ZXRDdXJyZW50UG9zaXRpb24obmV3UG9zaXRpb24pOwogICAgICAgICAgICAgICAgIHNsaWRlci0+
dmFsdWVDaGFuZ2VkKCk7CkBAIC0yMTMsMTIgKzIxMywxMiBAQCB2b2lkIFJlbmRlclNsaWRlcjo6
bGF5b3V0KCkKICAgICAKICAgICBpZiAobV90aHVtYiAmJiBtX3RodW1iLT5yZW5kZXJlcigpKSB7
CiAgICAgICAgICAgICAKLSAgICAgICAgaW50IG9sZFdpZHRoID0gbV93aWR0aDsKKyAgICAgICAg
aW50IG9sZFdpZHRoID0gd2lkdGgoKTsKICAgICAgICAgY2FsY1dpZHRoKCk7Ci0gICAgICAgIGlu
dCBvbGRIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgaW50IG9sZEhlaWdodCA9IGhlaWdodCgp
OwogICAgICAgICBjYWxjSGVpZ2h0KCk7CiAgICAgICAgIAotICAgICAgICBpZiAob2xkV2lkdGgg
IT0gbV93aWR0aCB8fCBvbGRIZWlnaHQgIT0gbV9oZWlnaHQpCisgICAgICAgIGlmIChvbGRXaWR0
aCAhPSB3aWR0aCgpIHx8IG9sZEhlaWdodCAhPSBoZWlnaHQoKSkKICAgICAgICAgICAgIHJlbGF5
b3V0Q2hpbGRyZW4gPSB0cnVlOyAgCiAKICAgICAgICAgLy8gQWxsb3cgdGhlIHRoZW1lIHRvIHNl
dCB0aGUgc2l6ZSBvZiB0aGUgdGh1bWIKQEAgLTI2OCw4ICsyNjgsOCBAQCBib29sIFJlbmRlclNs
aWRlcjo6bW91c2VFdmVudElzSW5UaHVtYihNCiAgICAgfSBlbHNlIAogI2VuZGlmCiAgICAgewot
ICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX3RodW1iLT5yZW5kZXJlcigpLT5hYnNv
bHV0ZVRvTG9jYWwoRmxvYXRQb2ludChldnQtPnBhZ2VYKCksIGV2dC0+cGFnZVkoKSksIGZhbHNl
LCB0cnVlKTsKLSAgICAgICAgSW50UmVjdCB0aHVtYkJvdW5kcyA9IG1fdGh1bWItPnJlbmRlcmVy
KCktPmJvcmRlckJveCgpOworICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX3RodW1i
LT5yZW5kZXJCb3goKS0+YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQoZXZ0LT5wYWdlWCgpLCBl
dnQtPnBhZ2VZKCkpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIEludFJlY3QgdGh1bWJCb3VuZHMg
PSBtX3RodW1iLT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpOwogICAgICAgICByZXR1cm4g
dGh1bWJCb3VuZHMuY29udGFpbnMocm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKICAgICB9
CiB9CkBAIC0zNTEsOSArMzUxLDkgQEAgaW50IFJlbmRlclNsaWRlcjo6cG9zaXRpb25Gb3JPZmZz
ZXQoY29ucwogICAgCiAgICAgaW50IHBvc2l0aW9uOwogICAgIGlmIChzdHlsZSgpLT5hcHBlYXJh
bmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBwb3NpdGlvbiA9IHAueSgpIC0g
bV90aHVtYi0+cmVuZGVyZXIoKS0+aGVpZ2h0KCkgLyAyOworICAgICAgICBwb3NpdGlvbiA9IHAu
eSgpIC0gbV90aHVtYi0+cmVuZGVyQm94KCktPmhlaWdodCgpIC8gMjsKICAgICBlbHNlCi0gICAg
ICAgIHBvc2l0aW9uID0gcC54KCkgLSBtX3RodW1iLT5yZW5kZXJlcigpLT53aWR0aCgpIC8gMjsK
KyAgICAgICAgcG9zaXRpb24gPSBwLngoKSAtIG1fdGh1bWItPnJlbmRlckJveCgpLT53aWR0aCgp
IC8gMjsKICAgICAKICAgICByZXR1cm4gbWF4KDAsIG1pbihwb3NpdGlvbiwgdHJhY2tTaXplKCkp
KTsKIH0KQEAgLTM5NSw4ICszOTUsOCBAQCBpbnQgUmVuZGVyU2xpZGVyOjp0cmFja1NpemUoKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xp
ZGVyVmVydGljYWxQYXJ0KQotICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCgpIC0gbV90aHVt
Yi0+cmVuZGVyZXIoKS0+aGVpZ2h0KCk7Ci0gICAgcmV0dXJuIGNvbnRlbnRXaWR0aCgpIC0gbV90
aHVtYi0+cmVuZGVyZXIoKS0+d2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQo
KSAtIG1fdGh1bWItPnJlbmRlckJveCgpLT5oZWlnaHQoKTsKKyAgICByZXR1cm4gY29udGVudFdp
ZHRoKCkgLSBtX3RodW1iLT5yZW5kZXJCb3goKS0+d2lkdGgoKTsKIH0KIAogdm9pZCBSZW5kZXJT
bGlkZXI6OmZvcndhcmRFdmVudChFdmVudCogZXZ0KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSwxMiArMjE5LDEyIEBAIHZvaWQgUmVuZGVyVGFi
bGU6OmNhbGNXaWR0aCgpCiAgICAgTGVuZ3RoVHlwZSB3aWR0aFR5cGUgPSBzdHlsZSgpLT53aWR0
aCgpLnR5cGUoKTsKICAgICBpZiAod2lkdGhUeXBlID4gUmVsYXRpdmUgJiYgc3R5bGUoKS0+d2lk
dGgoKS5pc1Bvc2l0aXZlKCkpIHsKICAgICAgICAgLy8gUGVyY2VudCBvciBmaXhlZCB0YWJsZQot
ICAgICAgICBtX3dpZHRoID0gc3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxl
V2lkdGgpOwotICAgICAgICBtX3dpZHRoID0gbWF4KG1pblByZWZXaWR0aCgpLCBtX3dpZHRoKTsK
KyAgICAgICAgc2V0V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxl
V2lkdGgpKTsKKyAgICAgICAgc2V0V2lkdGgobWF4KG1pblByZWZXaWR0aCgpLCB3aWR0aCgpKSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQW4gYXV0byB3aWR0aCB0YWJsZSBzaG91bGQgc2hy
aW5rIHRvIGZpdCB3aXRoaW4gdGhlIGxpbmUgd2lkdGggaWYgbmVjZXNzYXJ5IGluIG9yZGVyIHRv
IAogICAgICAgICAvLyBhdm9pZCBvdmVybGFwcGluZyBmbG9hdHMuCi0gICAgICAgIGF2YWlsYWJs
ZVdpZHRoID0gY2ItPmxpbmVXaWR0aChtX3kpOworICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGNi
LT5saW5lV2lkdGgobV9mcmFtZVJlY3QueSgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFN1YnRy
YWN0IG91dCBhbnkgZml4ZWQgbWFyZ2lucyBmcm9tIG91ciBhdmFpbGFibGUgd2lkdGggZm9yIGF1
dG8gd2lkdGggdGFibGVzLgogICAgICAgICBpbnQgbWFyZ2luVG90YWwgPSAwOwpAQCAtMjM3LDEw
ICsyMzcsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY1dpZHRoKCkKICAgICAgICAgaW50IGF2
YWlsQ29udGVudFdpZHRoID0gbWF4KDAsIGF2YWlsYWJsZVdpZHRoIC0gbWFyZ2luVG90YWwpOwog
ICAgICAgICAKICAgICAgICAgLy8gRW5zdXJlIHdlIGFyZW4ndCBiaWdnZXIgdGhhbiBvdXIgbWF4
IHdpZHRoIG9yIHNtYWxsZXIgdGhhbiBvdXIgbWluIHdpZHRoLgotICAgICAgICBtX3dpZHRoID0g
bWluKGF2YWlsQ29udGVudFdpZHRoLCBtYXhQcmVmV2lkdGgoKSk7CisgICAgICAgIHNldFdpZHRo
KG1pbihhdmFpbENvbnRlbnRXaWR0aCwgbWF4UHJlZldpZHRoKCkpKTsKICAgICB9CiAgICAgCi0g
ICAgbV93aWR0aCA9IG1heChtX3dpZHRoLCBtaW5QcmVmV2lkdGgoKSk7CisgICAgc2V0V2lkdGgo
bWF4KHdpZHRoKCksIG1pblByZWZXaWR0aCgpKSk7CiAKICAgICAvLyBGaW5hbGx5LCB3aXRoIG91
ciB0cnVlIHdpZHRoIGRldGVybWluZWQsIGNvbXB1dGUgb3VyIG1hcmdpbnMgZm9yIHJlYWwuCiAg
ICAgbV9tYXJnaW5SaWdodCA9IDA7CkBAIC0yNjUsMjQgKzI2NSwyNCBAQCB2b2lkIFJlbmRlclRh
YmxlOjpsYXlvdXQoKQogICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91
bmRzKCk7CiAgICAgfQogICAgIAotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hl
cih2aWV3KCksIHRoaXMsIEludFNpemUobV94LCBtX3kpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50
YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgbV9mcmFtZVJlY3Qu
eSgpKSk7CiAKLSAgICBtX2hlaWdodCA9IDA7CisgICAgc2V0SGVpZ2h0KDApOwogICAgIG1fb3Zl
cmZsb3dIZWlnaHQgPSAwOwogICAgIG1fb3ZlcmZsb3dUb3AgPSAwOwogICAgIGluaXRNYXhNYXJn
aW5WYWx1ZXMoKTsKICAgICAKLSAgICBpbnQgb2xkV2lkdGggPSBtX3dpZHRoOworICAgIGludCBv
bGRXaWR0aCA9IHdpZHRoKCk7CiAgICAgY2FsY1dpZHRoKCk7CiAKLSAgICBpZiAobV9jYXB0aW9u
ICYmIG1fd2lkdGggIT0gb2xkV2lkdGgpCisgICAgaWYgKG1fY2FwdGlvbiAmJiB3aWR0aCgpICE9
IG9sZFdpZHRoKQogICAgICAgICBtX2NhcHRpb24tPnNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNl
KTsKIAogICAgIC8vIEZJWE1FOiBUaGUgb3B0aW1pc2F0aW9uIGJlbG93IGRvZXNuJ3Qgd29yayBz
aW5jZSB0aGUgaW50ZXJuYWwgdGFibGUKICAgICAvLyBsYXlvdXQgY291bGQgaGF2ZSBjaGFuZ2Vk
LiAgd2UgbmVlZCB0byBhZGQgYSBmbGFnIHRvIHRoZSB0YWJsZQogICAgIC8vIGxheW91dCB0aGF0
IHRlbGxzIHVzIGlmIHNvbWV0aGluZyBoYXMgY2hhbmdlZCBpbiB0aGUgbWluIG1heAogICAgIC8v
IGNhbGN1bGF0aW9ucyB0byBkbyBpdCBjb3JyZWN0bHkuCi0vLyAgICAgaWYgKCBvbGRXaWR0aCAh
PSBtX3dpZHRoIHx8IGNvbHVtbnMuc2l6ZSgpICsgMSAhPSBjb2x1bW5Qb3Muc2l6ZSgpICkKKy8v
ICAgICBpZiAoIG9sZFdpZHRoICE9IHdpZHRoKCkgfHwgY29sdW1ucy5zaXplKCkgKyAxICE9IGNv
bHVtblBvcy5zaXplKCkgKQogICAgIG1fdGFibGVMYXlvdXQtPmxheW91dCgpOwogCiAgICAgc2V0
Q2VsbFdpZHRocygpOwpAQCAtMzA1LDcgKzMwNSw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91
dCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX292ZXJmbG93V2lkdGggPSBtX3dpZHRoICsg
KGNvbGxhcHNpbmcgPyBvdXRlckJvcmRlclJpZ2h0KCkgLSBib3JkZXJSaWdodCgpIDogMCk7Cisg
ICAgbV9vdmVyZmxvd1dpZHRoID0gd2lkdGgoKSArIChjb2xsYXBzaW5nID8gb3V0ZXJCb3JkZXJS
aWdodCgpIC0gYm9yZGVyUmlnaHQoKSA6IDApOwogICAgIG1fb3ZlcmZsb3dMZWZ0ID0gY29sbGFw
c2luZyA/IGJvcmRlckxlZnQoKSAtIG91dGVyQm9yZGVyTGVmdCgpIDogMDsKIAogICAgIC8vIElm
IGFueSB0YWJsZSBzZWN0aW9uIG1vdmVkIHZlcnRpY2FsbHksIHdlIHdpbGwganVzdCByZXBhaW50
IGV2ZXJ5dGhpbmcgZnJvbSB0aGF0CkBAIC0zMTYsMjggKzMxNiwyOCBAQCB2b2lkIFJlbmRlclRh
YmxlOjpsYXlvdXQoKQogCiAgICAgLy8gRklYTUU6IENvbGxhcHNlIGNhcHRpb24gbWFyZ2luLgog
ICAgIGlmIChtX2NhcHRpb24gJiYgbV9jYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9uU2lkZSgpICE9
IENBUEJPVFRPTSkgewotICAgICAgICBJbnRSZWN0IGNhcHRpb25SZWN0KG1fY2FwdGlvbi0+eFBv
cygpLCBtX2NhcHRpb24tPnlQb3MoKSwgbV9jYXB0aW9uLT53aWR0aCgpLCBtX2NhcHRpb24tPmhl
aWdodCgpKTsKKyAgICAgICAgSW50UmVjdCBjYXB0aW9uUmVjdChtX2NhcHRpb24tPngoKSwgbV9j
YXB0aW9uLT55KCksIG1fY2FwdGlvbi0+d2lkdGgoKSwgbV9jYXB0aW9uLT5oZWlnaHQoKSk7CiAK
LSAgICAgICAgbV9jYXB0aW9uLT5zZXRQb3MobV9jYXB0aW9uLT5tYXJnaW5MZWZ0KCksIG1faGVp
Z2h0KTsKKyAgICAgICAgbV9jYXB0aW9uLT5zZXRMb2NhdGlvbihtX2NhcHRpb24tPm1hcmdpbkxl
ZnQoKSwgaGVpZ2h0KCkpOwogICAgICAgICBpZiAoIXNlbGZOZWVkc0xheW91dCgpICYmIG1fY2Fw
dGlvbi0+Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpCiAgICAgICAgICAgICBtX2NhcHRp
b24tPnJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKGNhcHRpb25SZWN0KTsKIAotICAgICAgICBt
X2hlaWdodCArPSBtX2NhcHRpb24tPmhlaWdodCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Ub3AoKSAr
IG1fY2FwdGlvbi0+bWFyZ2luQm90dG9tKCk7Ci0gICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWlu
KG1fb3ZlcmZsb3dMZWZ0LCBtX2NhcHRpb24tPnhQb3MoKSArIG1fY2FwdGlvbi0+b3ZlcmZsb3dM
ZWZ0KGZhbHNlKSk7Ci0gICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lk
dGgsIG1fY2FwdGlvbi0+eFBvcygpICsgbV9jYXB0aW9uLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSk7
Ci0gICAgICAgIG1fb3ZlcmZsb3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgbV9jYXB0aW9uLT55
UG9zKCkgKyBtX2NhcHRpb24tPm92ZXJmbG93VG9wKGZhbHNlKSk7Ci0gICAgICAgIG1fb3ZlcmZs
b3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgbV9jYXB0aW9uLT55UG9zKCkgKyBtX2Nh
cHRpb24tPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQo
KSArIG1fY2FwdGlvbi0+aGVpZ2h0KCkgKyBtX2NhcHRpb24tPm1hcmdpblRvcCgpICsgbV9jYXB0
aW9uLT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1fb3Zl
cmZsb3dMZWZ0LCBtX2NhcHRpb24tPngoKSArIG1fY2FwdGlvbi0+b3ZlcmZsb3dMZWZ0KGZhbHNl
KSk7CisgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lkdGgsIG1fY2Fw
dGlvbi0+eCgpICsgbV9jYXB0aW9uLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSk7CisgICAgICAgIG1f
b3ZlcmZsb3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgbV9jYXB0aW9uLT55KCkgKyBtX2NhcHRp
b24tPm92ZXJmbG93VG9wKGZhbHNlKSk7CisgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgo
bV9vdmVyZmxvd0hlaWdodCwgbV9jYXB0aW9uLT55KCkgKyBtX2NhcHRpb24tPm92ZXJmbG93SGVp
Z2h0KGZhbHNlKSk7CiAKLSAgICAgICAgaWYgKG1faGVpZ2h0ICE9IG9sZFRhYmxlVG9wKSB7Cisg
ICAgICAgIGlmIChoZWlnaHQoKSAhPSBvbGRUYWJsZVRvcCkgewogICAgICAgICAgICAgc2VjdGlv
bk1vdmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1vdmVkU2VjdGlvblRvcCA9IG1pbihtX2hlaWdo
dCwgb2xkVGFibGVUb3ApOworICAgICAgICAgICAgbW92ZWRTZWN0aW9uVG9wID0gbWluKGhlaWdo
dCgpLCBvbGRUYWJsZVRvcCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpbnQgYnBUb3AgPSBi
b3JkZXJUb3AoKSArIChjb2xsYXBzaW5nID8gMCA6IHBhZGRpbmdUb3AoKSk7CiAgICAgaW50IGJw
Qm90dG9tID0gYm9yZGVyQm90dG9tKCkgKyAoY29sbGFwc2luZyA/IDAgOiBwYWRkaW5nQm90dG9t
KCkpOwogICAgIAotICAgIG1faGVpZ2h0ICs9IGJwVG9wOworICAgIHNldEhlaWdodChoZWlnaHQo
KSArIGJwVG9wKTsKIAogICAgIGlmICghaXNQb3NpdGlvbmVkKCkpCiAgICAgICAgIGNhbGNIZWln
aHQoKTsKQEAgLTM2MSw3ICszNjEsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogICAg
IGlmICghbV9maXJzdEJvZHkgJiYgdGggPiBjYWxjdWxhdGVkSGVpZ2h0ICYmICFzdHlsZSgpLT5o
dG1sSGFja3MoKSkgewogICAgICAgICAvLyBDb21wbGV0ZWx5IGVtcHR5IHRhYmxlcyAod2l0aCBu
byBzZWN0aW9ucyBvciBhbnl0aGluZykgc2hvdWxkIGF0IGxlYXN0IGhvbm9yIHNwZWNpZmllZCBo
ZWlnaHQKICAgICAgICAgLy8gaW4gc3RyaWN0IG1vZGUuCi0gICAgICAgIG1faGVpZ2h0ICs9IHRo
OworICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyB0aCk7CiAgICAgfQogICAgIAogICAgIGlu
dCBibCA9IGJvcmRlckxlZnQoKTsKQEAgLTM3MSwzOCArMzcxLDM4IEBAIHZvaWQgUmVuZGVyVGFi
bGU6OmxheW91dCgpCiAgICAgLy8gcG9zaXRpb24gdGhlIHRhYmxlIHNlY3Rpb25zCiAgICAgUmVu
ZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gbV9oZWFkID8gbV9oZWFkIDogKG1fZmlyc3RCb2R5
ID8gbV9maXJzdEJvZHkgOiBtX2Zvb3QpOwogICAgIHdoaWxlIChzZWN0aW9uKSB7Ci0gICAgICAg
IGlmICghc2VjdGlvbk1vdmVkICYmIHNlY3Rpb24tPnlQb3MoKSAhPSBtX2hlaWdodCkgeworICAg
ICAgICBpZiAoIXNlY3Rpb25Nb3ZlZCAmJiBzZWN0aW9uLT55KCkgIT0gaGVpZ2h0KCkpIHsKICAg
ICAgICAgICAgIHNlY3Rpb25Nb3ZlZCA9IHRydWU7Ci0gICAgICAgICAgICBtb3ZlZFNlY3Rpb25U
b3AgPSBtaW4obV9oZWlnaHQsIHNlY3Rpb24tPnlQb3MoKSkgKyBzZWN0aW9uLT5vdmVyZmxvd1Rv
cChmYWxzZSk7CisgICAgICAgICAgICBtb3ZlZFNlY3Rpb25Ub3AgPSBtaW4oaGVpZ2h0KCksIHNl
Y3Rpb24tPnkoKSkgKyBzZWN0aW9uLT5vdmVyZmxvd1RvcChmYWxzZSk7CiAgICAgICAgIH0KLSAg
ICAgICAgc2VjdGlvbi0+c2V0UG9zKGJsLCBtX2hlaWdodCk7CisgICAgICAgIHNlY3Rpb24tPnNl
dExvY2F0aW9uKGJsLCBoZWlnaHQoKSk7CiAKLSAgICAgICAgbV9oZWlnaHQgKz0gc2VjdGlvbi0+
aGVpZ2h0KCk7Ci0gICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1fb3ZlcmZsb3dMZWZ0LCBz
ZWN0aW9uLT54UG9zKCkgKyBzZWN0aW9uLT5vdmVyZmxvd0xlZnQoZmFsc2UpKTsKLSAgICAgICAg
bV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgc2VjdGlvbi0+eFBvcygpICsg
c2VjdGlvbi0+b3ZlcmZsb3dXaWR0aChmYWxzZSkpOwotICAgICAgICBtX292ZXJmbG93VG9wID0g
bWluKG1fb3ZlcmZsb3dUb3AsIHNlY3Rpb24tPnlQb3MoKSArIHNlY3Rpb24tPm92ZXJmbG93VG9w
KGZhbHNlKSk7Ci0gICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdo
dCwgc2VjdGlvbi0+eVBvcygpICsgc2VjdGlvbi0+b3ZlcmZsb3dIZWlnaHQoZmFsc2UpKTsKKyAg
ICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgc2VjdGlvbi0+aGVpZ2h0KCkpOworICAgICAgICBt
X292ZXJmbG93TGVmdCA9IG1pbihtX292ZXJmbG93TGVmdCwgc2VjdGlvbi0+eCgpICsgc2VjdGlv
bi0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSk7CisgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heCht
X292ZXJmbG93V2lkdGgsIHNlY3Rpb24tPngoKSArIHNlY3Rpb24tPm92ZXJmbG93V2lkdGgoZmFs
c2UpKTsKKyAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9wLCBzZWN0aW9u
LT55KCkgKyBzZWN0aW9uLT5vdmVyZmxvd1RvcChmYWxzZSkpOworICAgICAgICBtX292ZXJmbG93
SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIHNlY3Rpb24tPnkoKSArIHNlY3Rpb24tPm92
ZXJmbG93SGVpZ2h0KGZhbHNlKSk7CiAgICAgICAgIHNlY3Rpb24gPSBzZWN0aW9uQmVsb3coc2Vj
dGlvbik7CiAgICAgfQogCi0gICAgbV9oZWlnaHQgKz0gYnBCb3R0b207CisgICAgc2V0SGVpZ2h0
KGhlaWdodCgpICsgYnBCb3R0b20pOwogCiAgICAgaWYgKG1fY2FwdGlvbiAmJiBtX2NhcHRpb24t
PnN0eWxlKCktPmNhcHRpb25TaWRlKCkgPT0gQ0FQQk9UVE9NKSB7Ci0gICAgICAgIEludFJlY3Qg
Y2FwdGlvblJlY3QobV9jYXB0aW9uLT54UG9zKCksIG1fY2FwdGlvbi0+eVBvcygpLCBtX2NhcHRp
b24tPndpZHRoKCksIG1fY2FwdGlvbi0+aGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IGNhcHRp
b25SZWN0KG1fY2FwdGlvbi0+eCgpLCBtX2NhcHRpb24tPnkoKSwgbV9jYXB0aW9uLT53aWR0aCgp
LCBtX2NhcHRpb24tPmhlaWdodCgpKTsKIAotICAgICAgICBtX2NhcHRpb24tPnNldFBvcyhtX2Nh
cHRpb24tPm1hcmdpbkxlZnQoKSwgbV9oZWlnaHQpOworICAgICAgICBtX2NhcHRpb24tPnNldExv
Y2F0aW9uKG1fY2FwdGlvbi0+bWFyZ2luTGVmdCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIGlmICgh
c2VsZk5lZWRzTGF5b3V0KCkgJiYgbV9jYXB0aW9uLT5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlv
dXQoKSkKICAgICAgICAgICAgIG1fY2FwdGlvbi0+cmVwYWludER1cmluZ0xheW91dElmTW92ZWQo
Y2FwdGlvblJlY3QpOwogCi0gICAgICAgIG1faGVpZ2h0ICs9IG1fY2FwdGlvbi0+aGVpZ2h0KCkg
KyBtX2NhcHRpb24tPm1hcmdpblRvcCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Cb3R0b20oKTsKLSAg
ICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIG1fY2FwdGlvbi0+eFBv
cygpICsgbV9jYXB0aW9uLT5vdmVyZmxvd0xlZnQoZmFsc2UpKTsKLSAgICAgICAgbV9vdmVyZmxv
d1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgbV9jYXB0aW9uLT54UG9zKCkgKyBtX2NhcHRp
b24tPm92ZXJmbG93V2lkdGgoZmFsc2UpKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsg
bV9jYXB0aW9uLT5oZWlnaHQoKSArIG1fY2FwdGlvbi0+bWFyZ2luVG9wKCkgKyBtX2NhcHRpb24t
Pm1hcmdpbkJvdHRvbSgpKTsKKyAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4obV9vdmVyZmxv
d0xlZnQsIG1fY2FwdGlvbi0+eCgpICsgbV9jYXB0aW9uLT5vdmVyZmxvd0xlZnQoZmFsc2UpKTsK
KyAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgbV9jYXB0aW9u
LT54KCkgKyBtX2NhcHRpb24tPm92ZXJmbG93V2lkdGgoZmFsc2UpKTsKICAgICB9CiAKICAgICBp
ZiAoaXNQb3NpdGlvbmVkKCkpCiAgICAgICAgIGNhbGNIZWlnaHQoKTsKIAotICAgIG1fb3ZlcmZs
b3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgbV9oZWlnaHQpOworICAgIG1fb3ZlcmZs
b3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgaGVpZ2h0KCkpOwogCiAgICAgLy8gdGFi
bGUgY2FuIGJlIGNvbnRhaW5pbmcgYmxvY2sgb2YgcG9zaXRpb25lZCBlbGVtZW50cy4KICAgICAv
LyBGSVhNRTogT25seSBwYXNzIHRydWUgaWYgd2lkdGggb3IgaGVpZ2h0IGNoYW5nZWQuCkBAIC00
MTEsOSArNDExLDkgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICBpZiAoIWhhc092
ZXJmbG93Q2xpcCgpKSB7CiAgICAgICAgIGZvciAoU2hhZG93RGF0YSogYm94U2hhZG93ID0gc3R5
bGUoKS0+Ym94U2hhZG93KCk7IGJveFNoYWRvdzsgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0
KSB7CiAgICAgICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1pbihtX292ZXJmbG93TGVmdCwgYm94
U2hhZG93LT54IC0gYm94U2hhZG93LT5ibHVyKTsKLSAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0
aCA9IG1heChtX292ZXJmbG93V2lkdGgsIG1fd2lkdGggKyBib3hTaGFkb3ctPnggKyBib3hTaGFk
b3ctPmJsdXIpOworICAgICAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dX
aWR0aCwgd2lkdGgoKSArIGJveFNoYWRvdy0+eCArIGJveFNoYWRvdy0+Ymx1cik7CiAgICAgICAg
ICAgICBtX292ZXJmbG93VG9wID0gbWluKG1fb3ZlcmZsb3dUb3AsIGJveFNoYWRvdy0+eSAtIGJv
eFNoYWRvdy0+Ymx1cik7Ci0gICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3Zl
cmZsb3dIZWlnaHQsIG1faGVpZ2h0ICsgYm94U2hhZG93LT55ICsgYm94U2hhZG93LT5ibHVyKTsK
KyAgICAgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgaGVp
Z2h0KCkgKyBib3hTaGFkb3ctPnkgKyBib3hTaGFkb3ctPmJsdXIpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAoaGFzUmVmbGVjdGlvbigpKSB7CkBAIC00NDcsOCArNDQ3LDggQEAg
dm9pZCBSZW5kZXJUYWJsZTo6c2V0Q2VsbFdpZHRocygpCiAKIHZvaWQgUmVuZGVyVGFibGU6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICB0eCArPSB4
UG9zKCk7Ci0gICAgdHkgKz0geVBvcygpOworICAgIHR4ICs9IHgoKTsKKyAgICB0eSArPSB5KCk7
CiAKICAgICBQYWludFBoYXNlIHBhaW50UGhhc2UgPSBwYWludEluZm8ucGhhc2U7CiAKQEAgLTEx
MjgsNyArMTEyOCw3IEBAIGludCBSZW5kZXJUYWJsZTo6Z2V0QmFzZWxpbmVPZkZpcnN0TGluZUIK
ICAgICBpZiAoIWZpcnN0Tm9uRW1wdHlTZWN0aW9uKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAg
ICByZXR1cm4gZmlyc3ROb25FbXB0eVNlY3Rpb24tPnlQb3MoKSArIGZpcnN0Tm9uRW1wdHlTZWN0
aW9uLT5nZXRCYXNlbGluZU9mRmlyc3RMaW5lQm94KCk7CisgICAgcmV0dXJuIGZpcnN0Tm9uRW1w
dHlTZWN0aW9uLT55KCkgKyBmaXJzdE5vbkVtcHR5U2VjdGlvbi0+Z2V0QmFzZWxpbmVPZkZpcnN0
TGluZUJveCgpOwogfQogCiBJbnRSZWN0IFJlbmRlclRhYmxlOjpnZXRPdmVyZmxvd0NsaXBSZWN0
KGludCB0eCwgaW50IHR5KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMywxMCArMTIzLDEwIEBAIHZvaWQgUmVuZGVyVGFibGVD
ZWxsOjpjYWxjV2lkdGgoKQogewogfQogCi12b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2V0V2lkdGgo
aW50IHdpZHRoKQordm9pZCBSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZVdpZHRoKGludCB3KQogewot
ICAgIGlmICh3aWR0aCAhPSBtX3dpZHRoKSB7Ci0gICAgICAgIG1fd2lkdGggPSB3aWR0aDsKKyAg
ICBpZiAodyAhPSB3aWR0aCgpKSB7CisgICAgICAgIHNldFdpZHRoKHcpOwogICAgICAgICBtX3dp
ZHRoQ2hhbmdlZCA9IHRydWU7CiAgICAgfQogfQpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgUmVu
ZGVyVGFibGVDZWxsOjpjb21wdXRlQWJzb2x1dGVSZXAKICAgICByLnNldFkoci55KCkgKyBtX3Rv
cEV4dHJhKTsKICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwogICAgIGlmICgoIXYgfHwgIXYt
PmxheW91dFN0YXRlRW5hYmxlZCgpKSAmJiBwYXJlbnQoKSkKLSAgICAgICAgci5tb3ZlKC1wYXJl
bnQoKS0+eFBvcygpLCAtcGFyZW50KCktPnlQb3MoKSk7IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1l
IGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCisgICAgICAg
IHIubW92ZSgtcGFyZW50Qm94KCktPngoKSwgLXBhcmVudEJveCgpLT55KCkpOyAvLyBSb3dzIGFy
ZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0
IGluLgogICAgIFJlbmRlckJsb2NrOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyLCBmaXhl
ZCk7CiB9CiAKQEAgLTIwMSw3ICsyMDEsNyBAQCBGbG9hdFBvaW50IFJlbmRlclRhYmxlQ2VsbDo6
bG9jYWxUb0Fic29sCiAgICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKICAgICBpZiAoKCF2IHx8
ICF2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSkgJiYgcGFyZW50KCkpIHsKICAgICAgICAgLy8gUm93
cyBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRoZWlyIG9m
ZnNldCBpbi4KLSAgICAgICAgbG9jYWxQb2ludC5tb3ZlKC1wYXJlbnQoKS0+eFBvcygpLCAtcGFy
ZW50KCktPnlQb3MoKSk7CisgICAgICAgIGxvY2FsUG9pbnQubW92ZSgtcGFyZW50Qm94KCktPngo
KSwgLXBhcmVudEJveCgpLT55KCkpOwogICAgIH0KICAgICByZXR1cm4gUmVuZGVyQmxvY2s6Omxv
Y2FsVG9BYnNvbHV0ZShsb2NhbFBvaW50LCBmaXhlZCwgdXNlVHJhbnNmb3Jtcyk7CiB9CkBAIC0y
MTEsNyArMjExLDcgQEAgRmxvYXRQb2ludCBSZW5kZXJUYWJsZUNlbGw6OmFic29sdXRlVG9Mbwog
ICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IFJlbmRlckJsb2NrOjphYnNvbHV0ZVRvTG9jYWwo
Y29udGFpbmVyUG9pbnQsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zKTsKICAgICBpZiAocGFyZW50KCkp
IHsKICAgICAgICAgLy8gUm93cyBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSwgc28g
YWRkIHRoZWlyIG9mZnNldCBiYWNrIGluLgotICAgICAgICBsb2NhbFBvaW50Lm1vdmUocGFyZW50
KCktPnhQb3MoKSwgcGFyZW50KCktPnlQb3MoKSk7CisgICAgICAgIGxvY2FsUG9pbnQubW92ZShw
YXJlbnRCb3goKS0+eCgpLCBwYXJlbnRCb3goKS0+eSgpKTsKICAgICB9CiAgICAgcmV0dXJuIGxv
Y2FsUG9pbnQ7CiB9CkBAIC0yMjEsNyArMjIxLDcgQEAgRmxvYXRRdWFkIFJlbmRlclRhYmxlQ2Vs
bDo6bG9jYWxUb0Fic29sdQogICAgIEZsb2F0UXVhZCBxdWFkID0gbG9jYWxRdWFkOwogICAgIGlm
IChwYXJlbnQoKSkgewogICAgICAgICAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBjb29yZGluYXRl
IHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLgotICAgICAgICBxdWFkLm1vdmUo
LXBhcmVudCgpLT54UG9zKCksIC1wYXJlbnQoKS0+eVBvcygpKTsKKyAgICAgICAgcXVhZC5tb3Zl
KC1wYXJlbnRCb3goKS0+eCgpLCAtcGFyZW50Qm94KCktPnkoKSk7CiAgICAgfQogICAgIHJldHVy
biBSZW5kZXJCbG9jazo6bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkLCBmaXhlZCk7CiB9CkBAIC02
MzAsMTUgKzYzMCwxNSBAQCBpbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmQm90dG9tKGJv
CiAKIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHkpCiB7Ci0gICAgdHggKz0gbV94OwotICAgIHR5ICs9IG1feTsKKyAgICB0eCAr
PSB4KCk7CisgICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwogCiAgICAgLy8gY2hlY2sgaWYgd2Ug
bmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuLi4KICAgICBpbnQgb3MgPSAyICogbWF4aW1hbE91
dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7CiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEUpIHsKICAgICAgICAgaWYgKHR5IC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJUb3Ao
KSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8Ci0gICAgICAgICAgICAgICAgdHkg
KyBtX3RvcEV4dHJhICsgbV9oZWlnaHQgKyBtX2JvdHRvbUV4dHJhICsgdGFibGUoKS0+b3V0ZXJC
b3JkZXJCb3R0b20oKSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKKyAgICAgICAgICAgICAg
ICB0eSArIG1fdG9wRXh0cmEgKyBoZWlnaHQoKSArIG1fYm90dG9tRXh0cmEgKyB0YWJsZSgpLT5v
dXRlckJvcmRlckJvdHRvbSgpIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBpbnQgdyA9IHdpZHRoKCk7CiAgICAgICAgIGludCBoID0gaGVp
Z2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKQEAgLTgwNyw4
ICs4MDcsOCBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChiYWNrZ3JvdW5kT2JqZWN0ICE9IHRoaXMpIHsKLSAgICAg
ICAgdHggKz0gbV94OwotICAgICAgICB0eSArPSBtX3kgKyBtX3RvcEV4dHJhOworICAgICAgICB0
eCArPSB4KCk7CisgICAgICAgIHR5ICs9IG1fZnJhbWVSZWN0LnkoKSArIG1fdG9wRXh0cmE7CiAg
ICAgfQogCiAgICAgaW50IHcgPSB3aWR0aCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNXaWR0
aCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRXaWR0aChpbnQpOworICAgIHZvaWQgdXBkYXRlV2lk
dGgoaW50KTsKIAogICAgIHZpcnR1YWwgYm9vbCBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdG
bG9hdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKQEAgLTk2LDkgKzk2LDYgQEAgcHVibGlj
OgogICAgIHZvaWQgcGFpbnRDb2xsYXBzZWRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiwgaW50IHgs
IGludCB5LCBpbnQgdywgaW50IGgpOwogICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kc0JlaGluZENl
bGwoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHksIFJlbmRlck9iamVjdCogYmFja2dyb3VuZE9i
amVjdCk7CiAKLSAgICAvLyBMaWUgYWJvdXQgcG9zaXRpb24gdG8gb3V0c2lkZSBvYnNlcnZlcnMu
Ci0gICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0IHsgcmV0dXJuIG1feSArIG1fdG9wRXh0cmE7
IH0KLQogICAgIHZpcnR1YWwgSW50UmVjdCBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYsIGJv
b2wgZml4ZWQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCBGbG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0
ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBGbG9hdFBvaW50KCksIGJvb2wgZml4ZWQgPSBmYWxz
ZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OwpAQCAtMTI0LDcgKzEyMSw3IEBA
IHByaXZhdGU6CiAgICAgaW50IG1fY29sdW1uU3BhbjsKICAgICBpbnQgbV90b3BFeHRyYSA6IDMx
OwogICAgIGludCBtX2JvdHRvbUV4dHJhIDogMzE7Ci0gICAgYm9vbCBtX3dpZHRoQ2hhbmdlZCA6
IDE7CisgICAgYm9vbCBtX3dpZHRoQ2hhbmdlZDogMTsKICAgICBpbnQgbV9wZXJjZW50YWdlSGVp
Z2h0OwogfTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgaWYgKCFlbnN1cmVSb3dzKG1fY1JvdyArIDEp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2dyaWRbbV9jUm93XS5yb3dSZW5kZXJlciA9IGNo
aWxkOworICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGFibGVSb3cqPihjaGlsZCk7CiAKICAgICBpZiAoIWJlZm9yZUNoaWxkKSB7CiAgICAgICAgIG1f
Z3JpZFttX2NSb3ddLmhlaWdodCA9IGNoaWxkLT5zdHlsZSgpLT5oZWlnaHQoKTsKQEAgLTE3NCw3
ICsxNzQsNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6ZW5zdXJlUm93cyhpbnQgCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDZWxsKFJlbmRl
clRhYmxlQ2VsbCogY2VsbCwgUmVuZGVyT2JqZWN0KiByb3cpCit2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6YWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFJlbmRlclRhYmxlUm93KiByb3cp
CiB7CiAgICAgaW50IHJTcGFuID0gY2VsbC0+cm93U3BhbigpOwogICAgIGludCBjU3BhbiA9IGNl
bGwtPmNvbFNwYW4oKTsKQEAgLTI4MywxMSArMjgzLDExIEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0
aW9uOjpzZXRDZWxsV2lkdGhzKCkKICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZVB1c2hl
ci5kaWRQdXNoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlY2huaWNhbGx5LCB3
ZSBzaG91bGQgYWxzbyBwdXNoIHN0YXRlIGZvciB0aGUgcm93LCBidXQgc2luY2UKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHJvd3MgZG9uJ3QgcHVzaCBhIGNvb3JkaW5hdGUgdHJhbnNmb3Jt
LCB0aGF0J3Mgbm90IG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlUHVz
aGVyLnB1c2godGhpcywgSW50U2l6ZShtX3gsIG1feSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGVQdXNoZXIucHVzaCh0aGlzLCBJbnRTaXplKHgoKSwgbV9mcmFtZVJlY3QueSgpKSk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2VsbC0+cmVwYWlu
dCgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjZWxsLT5zZXRXaWR0aCh3
KTsKKyAgICAgICAgICAgICAgICBjZWxsLT51cGRhdGVXaWR0aCh3KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTMzMyw3ICszMzMsNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0
aW9uOjpjYWxjUm93SGVpZ2h0KCkKICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlUHVzaGVyLmRp
ZFB1c2goKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBUZWNobmljYWxseSwgd2Ugc2hvdWxk
IGFsc28gcHVzaCBzdGF0ZSBmb3IgdGhlIHJvdywgYnV0IHNpbmNlCiAgICAgICAgICAgICAgICAg
ICAgIC8vIHJvd3MgZG9uJ3QgcHVzaCBhIGNvb3JkaW5hdGUgdHJhbnNmb3JtLCB0aGF0J3Mgbm90
IG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAgICAgICAgc3RhdGVQdXNoZXIucHVzaCh0aGlzLCBJ
bnRTaXplKG1feCwgbV95KSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlUHVzaGVyLnB1c2go
dGhpcywgSW50U2l6ZSh4KCksIG1fZnJhbWVSZWN0LnkoKSkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBjZWxsLT5zZXRPdmVycmlkZVNpemUoLTEpOwogICAgICAgICAgICAg
ICAgIGNlbGwtPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwpAQCAtMzg0LDkgKzM4
NCw5IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHQKICAgICBpbnQg
dG90YWxSb3dzID0gbV9ncmlkUm93czsKICAgICAKICAgICAvLyBTZXQgdGhlIHdpZHRoIG9mIG91
ciBzZWN0aW9uIG5vdy4gIFRoZSByb3dzIHdpbGwgYWxzbyBiZSB0aGlzIHdpZHRoLgotICAgIG1f
d2lkdGggPSB0YWJsZSgpLT5jb250ZW50V2lkdGgoKTsKKyAgICBzZXRXaWR0aCh0YWJsZSgpLT5j
b250ZW50V2lkdGgoKSk7CiAgICAgbV9vdmVyZmxvd0xlZnQgPSAwOwotICAgIG1fb3ZlcmZsb3dX
aWR0aCA9IG1fd2lkdGg7CisgICAgbV9vdmVyZmxvd1dpZHRoID0gd2lkdGgoKTsKICAgICBtX292
ZXJmbG93VG9wID0gMDsKICAgICBtX292ZXJmbG93SGVpZ2h0ID0gMDsKICAgICBtX2hhc092ZXJm
bG93aW5nQ2VsbCA9IGZhbHNlOwpAQCAtNDU0LDEzICs0NTQsMTMgQEAgaW50IFJlbmRlclRhYmxl
U2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdAogICAgIGludCB2c3BhY2luZyA9IHRhYmxlKCktPnZC
b3JkZXJTcGFjaW5nKCk7CiAgICAgaW50IG5FZmZDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygp
OwogCi0gICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywg
SW50U2l6ZShtX3gsIG1feSkpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hl
cih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCBtX2ZyYW1lUmVjdC55KCkpKTsKIAogICAgIGZv
ciAoaW50IHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKICAgICAgICAgLy8gU2V0IHRoZSBy
b3cncyB4L3kgcG9zaXRpb24gYW5kIHdpZHRoL2hlaWdodC4KLSAgICAgICAgaWYgKFJlbmRlck9i
amVjdCogcm93UmVuZGVyZXIgPSBtX2dyaWRbcl0ucm93UmVuZGVyZXIpIHsKLSAgICAgICAgICAg
IHJvd1JlbmRlcmVyLT5zZXRQb3MoMCwgbV9yb3dQb3Nbcl0pOwotICAgICAgICAgICAgcm93UmVu
ZGVyZXItPnNldFdpZHRoKG1fd2lkdGgpOworICAgICAgICBpZiAoUmVuZGVyVGFibGVSb3cqIHJv
d1JlbmRlcmVyID0gbV9ncmlkW3JdLnJvd1JlbmRlcmVyKSB7CisgICAgICAgICAgICByb3dSZW5k
ZXJlci0+c2V0TG9jYXRpb24oMCwgbV9yb3dQb3Nbcl0pOworICAgICAgICAgICAgcm93UmVuZGVy
ZXItPnNldFdpZHRoKHdpZHRoKCkpOwogICAgICAgICAgICAgcm93UmVuZGVyZXItPnNldEhlaWdo
dChtX3Jvd1Bvc1tyICsgMV0gLSBtX3Jvd1Bvc1tyXSAtIHZzcGFjaW5nKTsKICAgICAgICAgfQog
CkBAIC01NTIsMTcgKzU1MiwxNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dz
KGludCB0CiAgICAgICAgICAgICBpZiAoKHRlICE9IG9sZFRlIHx8IGJlID4gb2xkQmUpICYmICF0
YWJsZSgpLT5zZWxmTmVlZHNMYXlvdXQoKSAmJiBjZWxsLT5jaGVja0ZvclJlcGFpbnREdXJpbmdM
YXlvdXQoKSkKICAgICAgICAgICAgICAgICBjZWxsLT5yZXBhaW50KCk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIEludFJlY3Qgb2xkQ2VsbFJlY3QoY2VsbC0+eFBvcygpLCBjZWxsLT55UG9z
KCkgLSBjZWxsLT5ib3JkZXJUb3BFeHRyYSgpICwgY2VsbC0+d2lkdGgoKSwgY2VsbC0+aGVpZ2h0
KCkpOworICAgICAgICAgICAgSW50UmVjdCBvbGRDZWxsUmVjdChjZWxsLT54KCksIGNlbGwtPnko
KSAtIGNlbGwtPmJvcmRlclRvcEV4dHJhKCkgLCBjZWxsLT53aWR0aCgpLCBjZWxsLT5oZWlnaHQo
KSk7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJU
TCkgewotICAgICAgICAgICAgICAgIGNlbGwtPnNldFBvcyh0YWJsZSgpLT5jb2x1bW5Qb3NpdGlv
bnMoKVtuRWZmQ29sc10gLSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKVt0YWJsZSgpLT5jb2xU
b0VmZkNvbChjZWxsLT5jb2woKSArIGNlbGwtPmNvbFNwYW4oKSldICsgaHNwYWNpbmcsIG1fcm93
UG9zW3JpbmR4XSk7CisgICAgICAgICAgICAgICAgY2VsbC0+c2V0TG9jYXRpb24odGFibGUoKS0+
Y29sdW1uUG9zaXRpb25zKClbbkVmZkNvbHNdIC0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKClb
dGFibGUoKS0+Y29sVG9FZmZDb2woY2VsbC0+Y29sKCkgKyBjZWxsLT5jb2xTcGFuKCkpXSArIGhz
cGFjaW5nLCBtX3Jvd1Bvc1tyaW5keF0pOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgY2VsbC0+c2V0UG9zKHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpW2NdICsgaHNwYWNp
bmcsIG1fcm93UG9zW3JpbmR4XSk7CisgICAgICAgICAgICAgICAgY2VsbC0+c2V0TG9jYXRpb24o
dGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKClbY10gKyBoc3BhY2luZywgbV9yb3dQb3NbcmluZHhd
KTsKIAotICAgICAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIGNl
bGwtPnhQb3MoKSArIGNlbGwtPm92ZXJmbG93TGVmdChmYWxzZSkpOwotICAgICAgICAgICAgbV9v
dmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgY2VsbC0+eFBvcygpICsgY2VsbC0+
b3ZlcmZsb3dXaWR0aChmYWxzZSkpOwotICAgICAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbiht
X292ZXJmbG93VG9wLCBjZWxsLT55UG9zKCkgKyBjZWxsLT5vdmVyZmxvd1RvcChmYWxzZSkpOwot
ICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBjZWxs
LT55UG9zKCkgKyBjZWxsLT5vdmVyZmxvd0hlaWdodChmYWxzZSkpOworICAgICAgICAgICAgbV9v
dmVyZmxvd0xlZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIGNlbGwtPngoKSArIGNlbGwtPm92ZXJm
bG93TGVmdChmYWxzZSkpOworICAgICAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3Zl
cmZsb3dXaWR0aCwgY2VsbC0+eCgpICsgY2VsbC0+b3ZlcmZsb3dXaWR0aChmYWxzZSkpOworICAg
ICAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9wLCBjZWxsLT55KCkgKyBj
ZWxsLT5vdmVyZmxvd1RvcChmYWxzZSkpOworICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9
IG1heChtX292ZXJmbG93SGVpZ2h0LCBjZWxsLT55KCkgKyBjZWxsLT5vdmVyZmxvd0hlaWdodChm
YWxzZSkpOwogICAgICAgICAgICAgbV9oYXNPdmVyZmxvd2luZ0NlbGwgfD0gY2VsbC0+b3ZlcmZs
b3dMZWZ0KGZhbHNlKSB8fCBjZWxsLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSA+IGNlbGwtPndpZHRo
KCkgfHwgY2VsbC0+b3ZlcmZsb3dUb3AoZmFsc2UpIHx8IGNlbGwtPm92ZXJmbG93SGVpZ2h0KGZh
bHNlKSA+IGNlbGwtPmhlaWdodCgpOwogCiAgICAgICAgICAgICAvLyBJZiB0aGUgY2VsbCBtb3Zl
ZCwgd2UgaGF2ZSB0byByZXBhaW50IGl0IGFzIHdlbGwgYXMgYW55IGZsb2F0aW5nL3Bvc2l0aW9u
ZWQKQEAgLTU3NSw5ICs1NzUsOSBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dz
KGludCB0CiAKICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKIAotICAgIG1faGVpZ2h0ID0gbV9yb3dQ
b3NbdG90YWxSb3dzXTsKLSAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWln
aHQsIG1faGVpZ2h0KTsKLSAgICByZXR1cm4gbV9oZWlnaHQ7CisgICAgc2V0SGVpZ2h0KG1fcm93
UG9zW3RvdGFsUm93c10pOworICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hl
aWdodCwgaGVpZ2h0KCkpOworICAgIHJldHVybiBoZWlnaHQoKTsKIH0KIAogaW50IFJlbmRlclRh
YmxlU2VjdGlvbjo6bG93ZXN0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwg
Ym9vbCBpbmNsdWRlU2VsZikgY29uc3QKQEAgLTU4OSw3ICs1ODksNyBAQCBpbnQgUmVuZGVyVGFi
bGVTZWN0aW9uOjpsb3dlc3RQb3NpdGlvbihiCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHJvdyA9
IGZpcnN0Q2hpbGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGNlbGwgPSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9
IGNlbGwtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjZWxsLT5pc1RhYmxlQ2Vs
bCgpKQotICAgICAgICAgICAgICAgIGJvdHRvbSA9IG1heChib3R0b20sIGNlbGwtPnlQb3MoKSAr
IGNlbGwtPmxvd2VzdFBvc2l0aW9uKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgYm90dG9tID0g
bWF4KGJvdHRvbSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oY2VsbCktPnkoKSArIGNl
bGwtPmxvd2VzdFBvc2l0aW9uKGZhbHNlKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02
MDUsNyArNjA1LDcgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6cmlnaHRtb3N0UG9zaXRpbwog
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93
LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxsID0gcm93
LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7CiAgICAg
ICAgICAgICBpZiAoY2VsbC0+aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgICAgICAgICByaWdodCA9
IG1heChyaWdodCwgY2VsbC0+eFBvcygpICsgY2VsbC0+cmlnaHRtb3N0UG9zaXRpb24oZmFsc2Up
KTsKKyAgICAgICAgICAgICAgICByaWdodCA9IG1heChyaWdodCwgc3RhdGljX2Nhc3Q8UmVuZGVy
VGFibGVDZWxsKj4oY2VsbCktPngoKSArIGNlbGwtPnJpZ2h0bW9zdFBvc2l0aW9uKGZhbHNlKSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02MjEsNyArNjIxLDcgQEAgaW50IFJlbmRlclRh
YmxlU2VjdGlvbjo6bGVmdG1vc3RQb3NpdGlvbgogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByb3cg
PSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjZWxsID0gcm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwg
PSBjZWxsLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2VsbC0+aXNUYWJsZUNl
bGwoKSkKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIGNlbGwtPnhQb3MoKSArIGNl
bGwtPmxlZnRtb3N0UG9zaXRpb24oZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbWlu
KGxlZnQsIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ2VsbCo+KGNlbGwpLT54KCkgKyBjZWxsLT5s
ZWZ0bW9zdFBvc2l0aW9uKGZhbHNlKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC04NTEs
NyArODUxLDcgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Z2V0QmFzZWxpbmVPZkZpcgogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlyc3RSb3ctPnNpemUoKTsgKytpKSB7CiAgICAgICAg
IFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGZpcnN0Um93LT5hdChpKS5jZWxsOwogICAgICAgICBp
ZiAoY2VsbCkKLSAgICAgICAgICAgIGZpcnN0TGluZUJhc2VsaW5lID0gbWF4KGZpcnN0TGluZUJh
c2VsaW5lLCBjZWxsLT55UG9zKCkgKyBjZWxsLT5wYWRkaW5nVG9wKCkgKyBjZWxsLT5ib3JkZXJU
b3AoKSArIGNlbGwtPmNvbnRlbnRIZWlnaHQoKSk7CisgICAgICAgICAgICBmaXJzdExpbmVCYXNl
bGluZSA9IG1heChmaXJzdExpbmVCYXNlbGluZSwgY2VsbC0+eSgpICsgY2VsbC0+cGFkZGluZ1Rv
cCgpICsgY2VsbC0+Ym9yZGVyVG9wKCkgKyBjZWxsLT5jb250ZW50SGVpZ2h0KCkpOwogICAgIH0K
IAogICAgIHJldHVybiBmaXJzdExpbmVCYXNlbGluZTsKQEAgLTg3MSw4ICs4NzEsOCBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvCiAgICAgaWYgKCF0b3RhbFJvd3Mg
fHwgIXRvdGFsQ29scykKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHggKz0gbV94OwotICAgIHR5
ICs9IG1feTsKKyAgICB0eCArPSB4KCk7CisgICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwogCiAg
ICAgLy8gQ2hlY2sgd2hpY2ggcm93cyBhbmQgY29scyBhcmUgdmlzaWJsZSBhbmQgb25seSBwYWlu
dCB0aGVzZS4KICAgICAvLyBGSVhNRTogQ291bGQgdXNlIGEgYmluYXJ5IHNlYXJjaCBoZXJlLgpA
QCAtOTkyLDExICs5OTIsMTMgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlY2FsY0NlbGxz
KCkKICAgICAgICAgICAgIG1fY0NvbCA9IDA7CiAgICAgICAgICAgICBpZiAoIWVuc3VyZVJvd3Mo
bV9jUm93ICsgMSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2dyaWRb
bV9jUm93XS5yb3dSZW5kZXJlciA9IHJvdzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVu
ZGVyVGFibGVSb3cqIHRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVSb3cqPihyb3cp
OworICAgICAgICAgICAgbV9ncmlkW21fY1Jvd10ucm93UmVuZGVyZXIgPSB0YWJsZVJvdzsKIAog
ICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNlbGwgPSByb3ctPmZpcnN0Q2hpbGQoKTsg
Y2VsbDsgY2VsbCA9IGNlbGwtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
Y2VsbC0+aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgYWRkQ2VsbChzdGF0aWNf
Y2FzdDxSZW5kZXJUYWJsZUNlbGwqPihjZWxsKSwgcm93KTsKKyAgICAgICAgICAgICAgICAgICAg
YWRkQ2VsbChzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNlbGwqPihjZWxsKSwgdGFibGVSb3cpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTA1NiwyMCArMTA1OCwyMCBAQCBS
ZW5kZXJPYmplY3QqIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVtb3ZlCiB9CiAKIC8vIEhpdCBUZXN0
aW5nCi1ib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlU2VjdGlv
bjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFj
dGlvbiBhY3Rpb24pCiB7CiAgICAgLy8gVGFibGUgc2VjdGlvbnMgY2Fubm90IGV2ZXIgYmUgaGl0
IHRlc3RlZC4gIEVmZmVjdGl2ZWx5IHRoZXkgZG8gbm90IGV4aXN0LgogICAgIC8vIEp1c3QgZm9y
d2FyZCB0byBvdXIgY2hpbGRyZW4gYWx3YXlzLgotICAgIHR4ICs9IG1feDsKLSAgICB0eSArPSBt
X3k7CisgICAgdHggKz0geCgpOworICAgIHR5ICs9IG1fZnJhbWVSZWN0LnkoKTsKIAogICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgdG8gc2tp
cCBvdmVyIGlubGluZSBmbG93cywgc2luY2UgdGhleSBjYW4gc2hvdyB1cCBpbnNpZGUgdGFibGUg
cm93cwogICAgICAgICAvLyBhdCB0aGUgbW9tZW50IChhIGRlbW90ZWQgaW5saW5lIDxmb3JtPiBm
b3IgZXhhbXBsZSkuIElmIHdlIGV2ZXIgaW1wbGVtZW50IGEKICAgICAgICAgLy8gdGFibGUtc3Bl
Y2lmaWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQgZG8gZm9yIHBlcmZvcm1hbmNl
IHJlYXNvbnMgYW55d2F5KSwKICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hl
Y2suCi0gICAgICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgIWNoaWxkLT5pc0lubGluZUZs
b3coKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHks
IGFjdGlvbikpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQ
b2ludCh4IC0gdHgsIHkgLSB0eSkpOworICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYm
ICFjaGlsZC0+aXNJbmxpbmVGbG93KCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBhY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyVGFibGVDZWxsOworY2xh
c3MgUmVuZGVyVGFibGVSb3c7CiAKIGNsYXNzIFJlbmRlclRhYmxlU2VjdGlvbiA6IHB1YmxpYyBS
ZW5kZXJDb250YWluZXIgewogcHVibGljOgpAQCAtNDksNyArNTAsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGludCBnZXRCYXNlbGluZU9mRmlyc3RMaW5lQm94KCkgY29uc3Q7CiAKLSAgICB2
b2lkIGFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiwgUmVuZGVyT2JqZWN0KiByb3cpOworICAgIHZv
aWQgYWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqLCBSZW5kZXJUYWJsZVJvdyogcm93KTsKIAogICAg
IHZvaWQgc2V0Q2VsbFdpZHRocygpOwogICAgIGludCBjYWxjUm93SGVpZ2h0KCk7CkBAIC02Niw3
ICs2Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0cnVjdCBSb3dTdHJ1Y3QgewogICAgICAgICBSb3cq
IHJvdzsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByb3dSZW5kZXJlcjsKKyAgICAgICAgUmVuZGVy
VGFibGVSb3cqIHJvd1JlbmRlcmVyOwogICAgICAgICBpbnQgYmFzZWxpbmU7CiAgICAgICAgIExl
bmd0aCBoZWlnaHQ7CiAgICAgfTsKQEAgLTc3LDkgKzc4LDkgQEAgcHVibGljOgogICAgIHZvaWQg
YXBwZW5kQ29sdW1uKGludCBwb3MpOwogICAgIHZvaWQgc3BsaXRDb2x1bW4oaW50IHBvcywgaW50
IG5ld1NpemUpOwogCi0gICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dXaWR0aChib29sIGluY2x1ZGVJ
bnRlcmlvciA9IHRydWUpIGNvbnN0IHsgcmV0dXJuICghaW5jbHVkZUludGVyaW9yICYmIGhhc092
ZXJmbG93Q2xpcCgpKSA/IG1fd2lkdGggOiBtX292ZXJmbG93V2lkdGg7IH0KKyAgICB2aXJ0dWFs
IGludCBvdmVyZmxvd1dpZHRoKGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3QgeyBy
ZXR1cm4gKCFpbmNsdWRlSW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkpID8gd2lkdGgoKSA6
IG1fb3ZlcmZsb3dXaWR0aDsgfQogICAgIHZpcnR1YWwgaW50IG92ZXJmbG93TGVmdChib29sIGlu
Y2x1ZGVJbnRlcmlvciA9IHRydWUpIGNvbnN0IHsgcmV0dXJuICghaW5jbHVkZUludGVyaW9yICYm
IGhhc092ZXJmbG93Q2xpcCgpKSA/IDAgOiBtX292ZXJmbG93TGVmdDsgfQotICAgIHZpcnR1YWwg
aW50IG92ZXJmbG93SGVpZ2h0KGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3QgeyBy
ZXR1cm4gKCFpbmNsdWRlSW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkpID8gbV9oZWlnaHQg
OiBtX292ZXJmbG93SGVpZ2h0OyB9CisgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dIZWlnaHQoYm9v
bCBpbmNsdWRlSW50ZXJpb3IgPSB0cnVlKSBjb25zdCB7IHJldHVybiAoIWluY2x1ZGVJbnRlcmlv
ciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkgPyBoZWlnaHQoKSA6IG1fb3ZlcmZsb3dIZWlnaHQ7IH0K
ICAgICB2aXJ0dWFsIGludCBvdmVyZmxvd1RvcChib29sIGluY2x1ZGVJbnRlcmlvciA9IHRydWUp
IGNvbnN0IHsgcmV0dXJuICghaW5jbHVkZUludGVyaW9yICYmIGhhc092ZXJmbG93Q2xpcCgpKSA/
IDAgOiBtX292ZXJmbG93VG9wOyB9CiAKICAgICB2aXJ0dWFsIGludCBsb3dlc3RQb3NpdGlvbihi
b29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdDsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBA
IFJlbmRlclRleHQ6OlJlbmRlclRleHQoTm9kZSogbm9kZSwgUGFzc1IKICAgICAgLCBtX2lzQWxs
QVNDSUkoY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKG1fdGV4dC5nZXQoKSkpCiB7CiAgICAgQVNTRVJU
KG1fdGV4dCk7Ci0gICAgc2V0UmVuZGVyVGV4dCgpOworICAgIHNldElzVGV4dCgpOwogICAgIG1f
dGV4dCA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPihtX3RleHQpKTsKIAogICAgIHZpZXcoKS0+ZnJhbWVWaWV3KCktPnNl
dElzVmlzdWFsbHlOb25FbXB0eSgpOwpAQCAtNzM1LDcgKzczNSw3IEBAIGJvb2wgUmVuZGVyVGV4
dDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgKICAgICByZXR1cm4gY3VyclBvcyA+PSAoZnJvbSAr
IGxlbik7CiB9CiAKLWludCBSZW5kZXJUZXh0OjptaW5YUG9zKCkgY29uc3QKK2ludCBSZW5kZXJU
ZXh0Ojpib3VuZGluZ0JveFgoKSBjb25zdAogewogICAgIGlmICghbV9maXJzdFRleHRCb3gpCiAg
ICAgICAgIHJldHVybiAwOwpAQCAtNzQ3LDE2ICs3NDcsMjggQEAgaW50IFJlbmRlclRleHQ6Om1p
blhQb3MoKSBjb25zdAogICAgIHJldHVybiBtaW5YUG9zOwogfQogCi1pbnQgUmVuZGVyVGV4dDo6
eFBvcygpIGNvbnN0CitpbnQgUmVuZGVyVGV4dDo6Ym91bmRpbmdCb3hZKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fZmlyc3RUZXh0Qm94KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1F
OiB3ZSBzaG91bGQgbm90IHVzZSBhbiBhcmJpdHJhcnkgdmFsdWUgbGlrZSB0aGlzLiAgUGVyaGFw
cyB3ZSBzaG91bGQgdXNlIElOVF9NQVguCisgICAgaW50IG1pbllQb3MgPSA2NjY2NjY2OworICAg
IGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94
LT5uZXh0VGV4dEJveCgpKQorICAgICAgICBtaW5ZUG9zID0gbWluKG1pbllQb3MsIHN0YXRpY19j
YXN0PGludD4oYm94LT5tX3kpKTsKKyAgICByZXR1cm4gbWluWVBvczsKK30KKworaW50IFJlbmRl
clRleHQ6OmZpcnN0UnVuWCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZmlyc3RUZXh0Qm94ID8g
bV9maXJzdFRleHRCb3gtPm1feCA6IDA7CiB9CiAKLWludCBSZW5kZXJUZXh0Ojp5UG9zKCkgY29u
c3QKK2ludCBSZW5kZXJUZXh0OjpmaXJzdFJ1blkoKSBjb25zdAogewogICAgIHJldHVybiBtX2Zp
cnN0VGV4dEJveCA/IG1fZmlyc3RUZXh0Qm94LT5tX3kgOiAwOwogfQotCisgICAgCiB2b2lkIFJl
bmRlclRleHQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQogewogICAg
IElubGluZVRleHRCb3gqIGJveDsKQEAgLTk3Myw3ICs5ODUsNyBAQCB2b2lkIFJlbmRlclRleHQ6
OnNldFRleHQoUGFzc1JlZlB0cjxTdHJpCiAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7CiB9CiAKLWludCBSZW5kZXJUZXh0OjpoZWlnaHQoKSBjb25zdAoraW50IFJlbmRl
clRleHQ6OmJvdW5kaW5nQm94SGVpZ2h0KCkgY29uc3QKIHsKICAgICBpbnQgcmV0dmFsID0gMDsK
ICAgICBpZiAoZmlyc3RUZXh0Qm94KCkpCkBAIC0xMDY1LDcgKzEwNzcsNyBAQCB1bnNpZ25lZCBp
bnQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgCiAgICAgcmV0dXJuIHc7CiB9CiAKLWludCBS
ZW5kZXJUZXh0Ojp3aWR0aCgpIGNvbnN0CitpbnQgUmVuZGVyVGV4dDo6Ym91bmRpbmdCb3hXaWR0
aCgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBub3QgdXNlIGFuIGFyYml0cmFy
eSB2YWx1ZSBsaWtlIHRoaXMuICBQZXJoYXBzIHdlIHNob3VsZCB1c2UgSU5UX01BWC4KICAgICBp
bnQgbWlueCA9IDEwMDAwMDAwMDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9u
IDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03MCw4ICs3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgd2lkdGgo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiwgaW50IHhQb3MpIGNvbnN0
OwogICAgIHZpcnR1YWwgdW5zaWduZWQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVu
LCBpbnQgeFBvcywgYm9vbCBmaXJzdExpbmUgPSBmYWxzZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBp
bnQgd2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJv
eCA9IGZhbHNlKSBjb25zdDsKIApAQCAtODUsMTIgKzgzLDE2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NYXhXLCBpbnQmIGVuZE1heFcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQmIG1pblcsIGludCYgbWF4VywgYm9vbCYgc3RyaXBGcm9u
dFNwYWNlcyk7CiAKLSAgICAvLyByZXR1cm5zIHRoZSBtaW5pbXVtIHggcG9zaXRpb24gb2YgYWxs
IHJ1bnMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudC4KLSAgICAvLyBkZWZhdWx0cyB0byAwLgotICAg
IGludCBtaW5YUG9zKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0aGUgbGVmdG1vc3QgKGFuZCB0
b3Btb3N0KSBwb3NpdGlvbiBvZiB0aGUgYm91bmRpbmcgYm94IHRoYXQgZW5jbG9zZXMgYWxsIHRl
eHQgcnVucworICAgIGludCBib3VuZGluZ0JveFgoKSBjb25zdDsKKyAgICBpbnQgYm91bmRpbmdC
b3hZKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRo
ZSBib3VuZGluZyBib3ggdGhhdCBlbmNsb3NlcyBhbGwgdGV4dCBydW5zLgorICAgIGludCBib3Vu
ZGluZ0JveFdpZHRoKCkgY29uc3Q7CisgICAgaW50IGJvdW5kaW5nQm94SGVpZ2h0KCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIGludCB4UG9zKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgeVBvcygp
IGNvbnN0OworICAgIGludCBmaXJzdFJ1blgoKSBjb25zdDsKKyAgICBpbnQgZmlyc3RSdW5ZKCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFBvc2l0aW9uSGludChib29sIGZpcnN0
TGluZSkgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsMTIgKzEyNiwxMiBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sOjpjcmVhdGVTdWJ0cmVlSWZOCiAKIGludCBSZW5kZXJUZXh0Q29udHJvbDo6dGV4
dEJsb2NrSGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9oZWlnaHQgLSBwYWRkaW5nVG9w
KCkgLSBwYWRkaW5nQm90dG9tKCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpOworICAg
IHJldHVybiBoZWlnaHQoKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKSAtIGJvcmRl
clRvcCgpIC0gYm9yZGVyQm90dG9tKCk7CiB9CiAKIGludCBSZW5kZXJUZXh0Q29udHJvbDo6dGV4
dEJsb2NrV2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBtX3dpZHRoIC0gcGFkZGluZ0xlZnQo
KSAtIHBhZGRpbmdSaWdodCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKQorICAgIHJl
dHVybiB3aWR0aCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpIC0gYm9yZGVyTGVm
dCgpIC0gYm9yZGVyUmlnaHQoKQogICAgICAgICAgICAtIG1faW5uZXJUZXh0LT5yZW5kZXJlcigp
LT5wYWRkaW5nTGVmdCgpIC0gbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPnBhZGRpbmdSaWdodCgp
OwogfQogCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0U2Vs
ZWN0aW9uUmFuZwogCiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKLSAgICBpZiAo
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCAhbV9pbm5lclRleHQgfHwgIW1faW5u
ZXJUZXh0LT5yZW5kZXJlcigpIHx8ICFtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+aGVpZ2h0KCkp
IHsKKyAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCAhbV9pbm5lclRl
eHQgfHwgIW1faW5uZXJUZXh0LT5yZW5kZXJlcigpIHx8ICFtX2lubmVyVGV4dC0+cmVuZGVyQm94
KCktPmhlaWdodCgpKSB7CiAgICAgICAgIGNhY2hlU2VsZWN0aW9uKHN0YXJ0LCBlbmQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNDE4LDI1ICs0MTgsMjUgQEAgaW50IFJlbmRlclRleHRD
b250cm9sOjpzY3JvbGxiYXJUaGlja25lcwogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjYWxj
SGVpZ2h0KCkKIHsKLSAgICBtX2hlaWdodCA9IG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5ib3Jk
ZXJUb3AoKSArIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5ib3JkZXJCb3R0b20oKSArCi0gICAg
ICAgICAgICAgICBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+cGFkZGluZ1RvcCgpICsgbV9pbm5l
clRleHQtPnJlbmRlcmVyKCktPnBhZGRpbmdCb3R0b20oKSArCi0gICAgICAgICAgICAgICBtX2lu
bmVyVGV4dC0+cmVuZGVyZXIoKS0+bWFyZ2luVG9wKCkgKyBtX2lubmVyVGV4dC0+cmVuZGVyZXIo
KS0+bWFyZ2luQm90dG9tKCk7CisgICAgc2V0SGVpZ2h0KG1faW5uZXJUZXh0LT5yZW5kZXJlcigp
LT5ib3JkZXJUb3AoKSArIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5ib3JkZXJCb3R0b20oKSAr
CisgICAgICAgICAgICAgIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5wYWRkaW5nVG9wKCkgKyBt
X2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+cGFkZGluZ0JvdHRvbSgpICsKKyAgICAgICAgICAgICAg
bV9pbm5lclRleHQtPnJlbmRlcmVyKCktPm1hcmdpblRvcCgpICsgbV9pbm5lclRleHQtPnJlbmRl
cmVyKCktPm1hcmdpbkJvdHRvbSgpKTsKIAogICAgIGFkanVzdENvbnRyb2xIZWlnaHRCYXNlZE9u
TGluZUhlaWdodChtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+bGluZUhlaWdodCh0cnVlLCB0cnVl
KSk7Ci0gICAgbV9oZWlnaHQgKz0gcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpICsgYm9y
ZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKTsKKyAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBwYWRk
aW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgp
KTsKIAogICAgIC8vIFdlIGFyZSBhYmxlIHRvIGhhdmUgYSBob3Jpem9udGFsIHNjcm9sbGJhciBp
ZiB0aGUgb3ZlcmZsb3cgc3R5bGUgaXMgc2Nyb2xsLCBvciBpZiBpdHMgYXV0byBhbmQgdGhlcmUn
cyBubyB3b3JkIHdyYXAuCiAgICAgaWYgKG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgp
LT5vdmVyZmxvd1goKSA9PSBPU0NST0xMIHx8ICAobV9pbm5lclRleHQtPnJlbmRlcmVyKCktPnN0
eWxlKCktPm92ZXJmbG93WCgpID09IE9BVVRPICYmIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5z
dHlsZSgpLT53b3JkV3JhcCgpID09IE5vcm1hbFdvcmRXcmFwKSkKLSAgICAgICAgbV9oZWlnaHQg
Kz0gc2Nyb2xsYmFyVGhpY2tuZXNzKCk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIHNj
cm9sbGJhclRoaWNrbmVzcygpKTsKIAogICAgIFJlbmRlckJsb2NrOjpjYWxjSGVpZ2h0KCk7CiB9
CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmhpdElubmVyVGV4dEJsb2NrKEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyVGV4
dENvbnRyb2w6OmhpdElubmVyVGV4dEJsb2NrKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQ
b3MsIGludCB5UG9zLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICByZXN1bHQuc2V0SW5uZXJOb2Rl
KG1faW5uZXJUZXh0LmdldCgpKTsKLSAgICByZXN1bHQuc2V0TG9jYWxQb2ludChJbnRQb2ludCh4
IC0gdHggLSBtX3ggLSBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+eFBvcygpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHkgLSB0eSAtIG1feSAtIG1faW5uZXJUZXh0LT5yZW5k
ZXJlcigpLT55UG9zKCkpKTsKKyAgICByZXN1bHQuc2V0TG9jYWxQb2ludChJbnRQb2ludCh4UG9z
IC0gdHggLSB4KCkgLSBtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPngoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB5UG9zIC0gdHkgLSB5KCkgLSBtX2lubmVyVGV4dC0+cmVu
ZGVyQm94KCktPnkoKSkpOwogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpmb3J3YXJkRXZl
bnQoRXZlbnQqIGV2ZW50KQpAQCAtNDQ4LDcgKzQ0OCw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2w6OmZvcndhcmRFdmVudChFdmUKIAogSW50UmVjdCBSZW5kZXJUZXh0Q29udHJvbDo6Y29udHJv
bENsaXBSZWN0KGludCB0eCwgaW50IHR5KSBjb25zdAogewotICAgIEludFJlY3QgY2xpcFJlY3Qg
PSBjb250ZW50Qm94KCk7CisgICAgSW50UmVjdCBjbGlwUmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7
CiAgICAgY2xpcFJlY3QubW92ZSh0eCwgdHkpOwogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5j
cHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNCArNTQsMTQgQEAgdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6c3VidHJlZQogCiB2b2lkIFJlbmRlclRleHRDb250
cm9sTXVsdGlMaW5lOjpsYXlvdXQoKQogewotICAgIGludCBvbGRIZWlnaHQgPSBtX2hlaWdodDsK
KyAgICBpbnQgb2xkSGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgY2FsY0hlaWdodCgpOwogCi0gICAg
aW50IG9sZFdpZHRoID0gbV93aWR0aDsKKyAgICBpbnQgb2xkV2lkdGggPSB3aWR0aCgpOwogICAg
IGNhbGNXaWR0aCgpOwogCi0gICAgYm9vbCByZWxheW91dENoaWxkcmVuID0gb2xkSGVpZ2h0ICE9
IG1faGVpZ2h0IHx8IG9sZFdpZHRoICE9IG1fd2lkdGg7Ci0gICAgUmVuZGVyT2JqZWN0KiBpbm5l
clRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBib29s
IHJlbGF5b3V0Q2hpbGRyZW4gPSBvbGRIZWlnaHQgIT0gaGVpZ2h0KCkgfHwgb2xkV2lkdGggIT0g
d2lkdGgoKTsKKyAgICBSZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxl
bWVudCgpLT5yZW5kZXJCb3goKTsKIAogICAgIC8vIFNldCB0aGUgdGV4dCBibG9jayBoZWlnaHQK
ICAgICBpbnQgZGVzaXJlZEhlaWdodCA9IHRleHRCbG9ja0hlaWdodCgpOwpAQCAtMTA0LDcgKzEw
NCw3IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6cHJlZmVycmUKIAogdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6YWRqdXN0Q29udHJvbEhlaWdodEJhc2VkT25MaW5l
SGVpZ2h0KGludCBsaW5lSGVpZ2h0KQogewotICAgIG1faGVpZ2h0ICs9IGxpbmVIZWlnaHQgKiBz
dGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4obm9kZSgpKS0+cm93cygpOworICAgIHNl
dEhlaWdodChoZWlnaHQoKSArIGxpbmVIZWlnaHQgKiBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFF
bGVtZW50Kj4obm9kZSgpKS0+cm93cygpKTsKIH0KIAogaW50IFJlbmRlclRleHRDb250cm9sTXVs
dGlMaW5lOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wsIGJvb2wpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlz
aW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDMyICsxOTcsMzIgQEAgdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50KAogICAgIFJlbmRlclRleHRDb250cm9sOjpwYWlu
dChwYWludEluZm8sIHR4LCB0eSk7CiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VCbG9ja0JhY2tncm91bmQgJiYgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IpIHsK
LSAgICAgICAgSW50UmVjdCBjb250ZW50c1JlY3QgPSBjb250ZW50Qm94KCk7CisgICAgICAgIElu
dFJlY3QgY29udGVudHNSZWN0ID0gY29udGVudEJveFJlY3QoKTsKIAogICAgICAgICAvLyBDb252
ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkcyB1c2VkIGZvciBwYWludGluZyB0aGUgY29udGVu
dAotICAgICAgICBjb250ZW50c1JlY3QubW92ZSh0eCArIHhQb3MoKSwgdHkgKyB5UG9zKCkpOwor
ICAgICAgICBjb250ZW50c1JlY3QubW92ZSh0eCArIHgoKSwgdHkgKyB5KCkpOwogICAgICAgICB0
aGVtZSgpLT5wYWludENhcHNMb2NrSW5kaWNhdG9yKHRoaXMsIHBhaW50SW5mbywgY29udGVudHNS
ZWN0KTsKICAgICB9CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlv
dXQoKQogewotICAgIGludCBvbGRIZWlnaHQgPSBtX2hlaWdodDsKKyAgICBpbnQgb2xkSGVpZ2h0
ID0gaGVpZ2h0KCk7CiAgICAgY2FsY0hlaWdodCgpOwogCi0gICAgaW50IG9sZFdpZHRoID0gbV93
aWR0aDsKKyAgICBpbnQgb2xkV2lkdGggPSB3aWR0aCgpOwogICAgIGNhbGNXaWR0aCgpOwogCi0g
ICAgYm9vbCByZWxheW91dENoaWxkcmVuID0gb2xkSGVpZ2h0ICE9IG1faGVpZ2h0IHx8IG9sZFdp
ZHRoICE9IG1fd2lkdGg7CisgICAgYm9vbCByZWxheW91dENoaWxkcmVuID0gb2xkSGVpZ2h0ICE9
IGhlaWdodCgpIHx8IG9sZFdpZHRoICE9IHdpZHRoKCk7CiAKLSAgICBSZW5kZXJPYmplY3QqIGlu
bmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOwotICAgIFJl
bmRlck9iamVjdCogaW5uZXJCbG9ja1JlbmRlcmVyID0gbV9pbm5lckJsb2NrID8gbV9pbm5lckJs
b2NrLT5yZW5kZXJlcigpIDogMDsKKyAgICBSZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0g
aW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKTsKKyAgICBSZW5kZXJCb3gqIGlubmVyQmxv
Y2tSZW5kZXJlciA9IG1faW5uZXJCbG9jayA/IG1faW5uZXJCbG9jay0+cmVuZGVyQm94KCkgOiAw
OwogCiAgICAgLy8gU2V0IHRoZSB0ZXh0IGJsb2NrIGhlaWdodAogICAgIGludCBkZXNpcmVkSGVp
Z2h0ID0gdGV4dEJsb2NrSGVpZ2h0KCk7CiAgICAgaW50IGN1cnJlbnRIZWlnaHQgPSBpbm5lclRl
eHRSZW5kZXJlci0+aGVpZ2h0KCk7CiAKLSAgICBpZiAobV9pbm5lckJsb2NrIHx8IGN1cnJlbnRI
ZWlnaHQgPiBtX2hlaWdodCkgeworICAgIGlmIChtX2lubmVyQmxvY2sgfHwgY3VycmVudEhlaWdo
dCA+IGhlaWdodCgpKSB7CiAgICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9IGN1cnJlbnRIZWln
aHQpCiAgICAgICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAgaW5uZXJU
ZXh0UmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoZGVzaXJlZEhlaWdodCwgRml4
ZWQpKTsKQEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6bGF5b3V0CiAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCktPnNldFdpZHRoKExlbmd0
aChkZXNpcmVkV2lkdGgsIEZpeGVkKSk7CiAKICAgICBpZiAobV9pbm5lckJsb2NrKSB7Ci0gICAg
ICAgIGludCBpbm5lckJsb2NrV2lkdGggPSBtX3dpZHRoIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRp
bmdSaWdodCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKTsKKyAgICAgICAgaW50IGlu
bmVyQmxvY2tXaWR0aCA9IHdpZHRoKCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCkg
LSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpOwogICAgICAgICBpZiAoaW5uZXJCbG9ja1dp
ZHRoICE9IGlubmVyQmxvY2tSZW5kZXJlci0+d2lkdGgoKSkKICAgICAgICAgICAgIHJlbGF5b3V0
Q2hpbGRyZW4gPSB0cnVlOwogICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCktPnNl
dFdpZHRoKExlbmd0aChpbm5lckJsb2NrV2lkdGgsIEZpeGVkKSk7CkBAIC0yNTQsMTIgKzI1NCwx
MiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgLy8gRG9u
J3QgZG8gdGhpcyBmb3Igc2VhcmNoIGZpZWxkcywgc2luY2Ugd2UgZG9uJ3QgaG9ub3IgaGVpZ2h0
IGZvciB0aGVtCiAgICAgaWYgKCFtX2lubmVyQmxvY2spIHsKICAgICAgICAgY3VycmVudEhlaWdo
dCA9IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRIZWln
aHQgPCBtX2hlaWdodCkKLSAgICAgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zZXRQb3MoaW5u
ZXJUZXh0UmVuZGVyZXItPnhQb3MoKSwgKG1faGVpZ2h0IC0gY3VycmVudEhlaWdodCkgLyAyKTsK
KyAgICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgPCBoZWlnaHQoKSkKKyAgICAgICAgICAgIGlubmVy
VGV4dFJlbmRlcmVyLT5zZXRMb2NhdGlvbihpbm5lclRleHRSZW5kZXJlci0+eCgpLCAoaGVpZ2h0
KCkgLSBjdXJyZW50SGVpZ2h0KSAvIDIpOwogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgLy8gSWYgd2UncmUgd2l0aGluIHRoZSB0ZXh0
IGNvbnRyb2wsIHdlIHdhbnQgdG8gYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgaW5uZXIgdGV4dCBi
bG9jayBlbGVtZW50LCBpbiBjYXNlIHRoZSBwb2ludAogICAgIC8vIHdhcyBvbiB0aGUgY29udHJv
bCBidXQgbm90IG9uIHRoZSBpbm5lciBlbGVtZW50IChzZWUgUmFkYXIgNDYxNzg0MSkuCkBAIC0y
NjcsMzcgKzI2NywzNyBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0
CiAgICAgLy8gSW4gYSBzZWFyY2ggZmllbGQsIHdlIHdhbnQgdG8gYWN0IGFzIGlmIHdlJ3ZlIGhp
dCB0aGUgcmVzdWx0cyBibG9jayBpZiB3ZSdyZSB0byB0aGUgbGVmdCBvZiB0aGUgaW5uZXIgdGV4
dCBibG9jaywKICAgICAvLyBhbmQgYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgY2xvc2UgYmxvY2sg
aWYgd2UncmUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBpbm5lciB0ZXh0IGJsb2NrLgogCi0gICAgaWYg
KCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0
eCwgdHksIGhpdFRlc3RBY3Rpb24pKQorICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBoaXRUZXN0QWN0aW9u
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSAh
PSBlbGVtZW50KCkgJiYgcmVzdWx0LmlubmVyTm9kZSgpICE9IG1faW5uZXJCbG9jay5nZXQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaGl0SW5uZXJUZXh0QmxvY2socmVzdWx0LCB4
LCB5LCB0eCwgdHkpOworICAgIGhpdElubmVyVGV4dEJsb2NrKHJlc3VsdCwgeFBvcywgeVBvcywg
dHgsIHR5KTsKIAogICAgIGlmICghbV9pbm5lckJsb2NrKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIE5vZGUqIGlubmVyTm9kZSA9IDA7Ci0gICAgUmVuZGVyT2JqZWN0KiBpbm5lckJsb2Nr
UmVuZGVyZXIgPSBtX2lubmVyQmxvY2stPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBp
bm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBS
ZW5kZXJCb3gqIGlubmVyQmxvY2tSZW5kZXJlciA9IG1faW5uZXJCbG9jay0+cmVuZGVyQm94KCk7
CisgICAgUmVuZGVyQm94KiBpbm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+
cmVuZGVyQm94KCk7CiAKICAgICBJbnRQb2ludCBsb2NhbFBvaW50ID0gcmVzdWx0LmxvY2FsUG9p
bnQoKTsKLSAgICBsb2NhbFBvaW50Lm1vdmUoLWlubmVyQmxvY2tSZW5kZXJlci0+eFBvcygpLCAt
aW5uZXJCbG9ja1JlbmRlcmVyLT55UG9zKCkpOworICAgIGxvY2FsUG9pbnQubW92ZSgtaW5uZXJC
bG9ja1JlbmRlcmVyLT54KCksIC1pbm5lckJsb2NrUmVuZGVyZXItPnkoKSk7CiAKLSAgICBpbnQg
dGV4dExlZnQgPSB0eCArIG1feCArIGlubmVyQmxvY2tSZW5kZXJlci0+eFBvcygpICsgaW5uZXJU
ZXh0UmVuZGVyZXItPnhQb3MoKTsKLSAgICBpZiAobV9yZXN1bHRzQnV0dG9uICYmIG1fcmVzdWx0
c0J1dHRvbi0+cmVuZGVyZXIoKSAmJiB4IDwgdGV4dExlZnQpCisgICAgaW50IHRleHRMZWZ0ID0g
dHggKyB4KCkgKyBpbm5lckJsb2NrUmVuZGVyZXItPngoKSArIGlubmVyVGV4dFJlbmRlcmVyLT54
KCk7CisgICAgaWYgKG1fcmVzdWx0c0J1dHRvbiAmJiBtX3Jlc3VsdHNCdXR0b24tPnJlbmRlcmVy
KCkgJiYgeFBvcyA8IHRleHRMZWZ0KQogICAgICAgICBpbm5lck5vZGUgPSBtX3Jlc3VsdHNCdXR0
b24uZ2V0KCk7CiAKICAgICBpZiAoIWlubmVyTm9kZSkgewogICAgICAgICBpbnQgdGV4dFJpZ2h0
ID0gdGV4dExlZnQgKyBpbm5lclRleHRSZW5kZXJlci0+d2lkdGgoKTsKLSAgICAgICAgaWYgKG1f
Y2FuY2VsQnV0dG9uICYmIG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpICYmIHggPiB0ZXh0Umln
aHQpCisgICAgICAgIGlmIChtX2NhbmNlbEJ1dHRvbiAmJiBtX2NhbmNlbEJ1dHRvbi0+cmVuZGVy
ZXIoKSAmJiB4UG9zID4gdGV4dFJpZ2h0KQogICAgICAgICAgICAgaW5uZXJOb2RlID0gbV9jYW5j
ZWxCdXR0b24uZ2V0KCk7CiAgICAgfQogCiAgICAgaWYgKGlubmVyTm9kZSkgewogICAgICAgICBy
ZXN1bHQuc2V0SW5uZXJOb2RlKGlubmVyTm9kZSk7Ci0gICAgICAgIGxvY2FsUG9pbnQubW92ZSgt
aW5uZXJOb2RlLT5yZW5kZXJlcigpLT54UG9zKCksIC1pbm5lck5vZGUtPnJlbmRlcmVyKCktPnlQ
b3MoKSk7CisgICAgICAgIGxvY2FsUG9pbnQubW92ZSgtaW5uZXJOb2RlLT5yZW5kZXJCb3goKS0+
eCgpLCAtaW5uZXJOb2RlLT5yZW5kZXJCb3goKS0+eSgpKTsKICAgICB9CiAKICAgICByZXN1bHQu
c2V0TG9jYWxQb2ludChsb2NhbFBvaW50KTsKQEAgLTMwNiw3ICszMDYsNyBAQCBib29sIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIFJlbmRlck9iamVj
dCogaW5uZXJUZXh0UmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7Cisg
ICAgUmVuZGVyQm94KiBpbm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVu
ZGVyQm94KCk7CiAKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2
ZW50KSB7CiAgICAgICAgIGlmIChpbm5lclRleHRSZW5kZXJlcikgewpAQCAtMzI0LDkgKzMyNCw5
IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpmb3J3YXIKICAgICB9CiAKICAg
ICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBpbm5lclRleHRSZW5kZXJlci0+YWJzb2x1dGVUb0xv
Y2FsKEZsb2F0UG9pbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+cGFnZVgoKSwg
c3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+cGFnZVkoKSksIGZhbHNlLCB0cnVlKTsK
LSAgICBpZiAobV9yZXN1bHRzQnV0dG9uICYmIGxvY2FsUG9pbnQueCgpIDwgaW5uZXJUZXh0UmVu
ZGVyZXItPmJvcmRlckJveCgpLngoKSkKKyAgICBpZiAobV9yZXN1bHRzQnV0dG9uICYmIGxvY2Fs
UG9pbnQueCgpIDwgaW5uZXJUZXh0UmVuZGVyZXItPmJvcmRlckJveFJlY3QoKS54KCkpCiAgICAg
ICAgIG1fcmVzdWx0c0J1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgZWxz
ZSBpZiAobV9jYW5jZWxCdXR0b24gJiYgbG9jYWxQb2ludC54KCkgPiBpbm5lclRleHRSZW5kZXJl
ci0+Ym9yZGVyQm94KCkucmlnaHQoKSkKKyAgICBlbHNlIGlmIChtX2NhbmNlbEJ1dHRvbiAmJiBs
b2NhbFBvaW50LngoKSA+IGlubmVyVGV4dFJlbmRlcmVyLT5ib3JkZXJCb3hSZWN0KCkucmlnaHQo
KSkKICAgICAgICAgbV9jYW5jZWxCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwog
ICAgIGVsc2UKICAgICAgICAgUmVuZGVyVGV4dENvbnRyb2w6OmZvcndhcmRFdmVudChldmVudCk7
CkBAIC0zNzksMTIgKzM3OSwxMiBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0
ZXh0QmxvCiB7CiAgICAgaW50IHdpZHRoID0gUmVuZGVyVGV4dENvbnRyb2w6OnRleHRCbG9ja1dp
ZHRoKCk7CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZXN1bHRzUmVuZGVyZXIgPSBtX3Jlc3Vs
dHNCdXR0b24gPyBtX3Jlc3VsdHNCdXR0b24tPnJlbmRlcmVyKCkgOiAwKSB7CisgICAgaWYgKFJl
bmRlckJveCogcmVzdWx0c1JlbmRlcmVyID0gbV9yZXN1bHRzQnV0dG9uID8gbV9yZXN1bHRzQnV0
dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5jYWxjV2lk
dGgoKTsKICAgICAgICAgd2lkdGggLT0gcmVzdWx0c1JlbmRlcmVyLT53aWR0aCgpICsgcmVzdWx0
c1JlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgKyByZXN1bHRzUmVuZGVyZXItPm1hcmdpblJpZ2h0KCk7
CiAgICAgfQogCi0gICAgaWYgKFJlbmRlck9iamVjdCogY2FuY2VsUmVuZGVyZXIgPSBtX2NhbmNl
bEJ1dHRvbiA/IG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpIDogMCkgeworICAgIGlmIChSZW5k
ZXJCb3gqIGNhbmNlbFJlbmRlcmVyID0gbV9jYW5jZWxCdXR0b24gPyBtX2NhbmNlbEJ1dHRvbi0+
cmVuZGVyQm94KCkgOiAwKSB7CiAgICAgICAgIGNhbmNlbFJlbmRlcmVyLT5jYWxjV2lkdGgoKTsK
ICAgICAgICAgd2lkdGggLT0gY2FuY2VsUmVuZGVyZXItPndpZHRoKCkgKyBjYW5jZWxSZW5kZXJl
ci0+bWFyZ2luTGVmdCgpICsgY2FuY2VsUmVuZGVyZXItPm1hcmdpblJpZ2h0KCk7CiAgICAgfQpA
QCAtNDEzLDI1ICs0MTMsMjUgQEAgaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJl
ZmVycgogCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRqdXN0Q29udHJvbEhl
aWdodEJhc2VkT25MaW5lSGVpZ2h0KGludCBsaW5lSGVpZ2h0KQogewotICAgIGlmIChSZW5kZXJP
YmplY3QqIHJlc3VsdHNSZW5kZXJlciA9IG1fcmVzdWx0c0J1dHRvbiA/IG1fcmVzdWx0c0J1dHRv
bi0+cmVuZGVyZXIoKSA6IDApIHsKKyAgICBpZiAoUmVuZGVyQm94KiByZXN1bHRzUmVuZGVyZXIg
PSBtX3Jlc3VsdHNCdXR0b24gPyBtX3Jlc3VsdHNCdXR0b24tPnJlbmRlckJveCgpIDogMCkgewog
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KHJlc3VsdHNSZW5kZXJlciktPmNhbGNI
ZWlnaHQoKTsKLSAgICAgICAgbV9oZWlnaHQgPSBtYXgobV9oZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZXN1bHRzUmVuZGVyZXIt
PmJvcmRlckJvdHRvbSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1JlbmRlcmVy
LT5wYWRkaW5nVG9wKCkgKyByZXN1bHRzUmVuZGVyZXItPnBhZGRpbmdCb3R0b20oKSArCi0gICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdHNSZW5kZXJlci0+bWFyZ2luVG9wKCkgKyByZXN1bHRz
UmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpKTsKKyAgICAgICAgc2V0SGVpZ2h0KG1heChoZWlnaHQo
KSwKKyAgICAgICAgICAgICAgICAgIHJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZXN1
bHRzUmVuZGVyZXItPmJvcmRlckJvdHRvbSgpICsKKyAgICAgICAgICAgICAgICAgIHJlc3VsdHNS
ZW5kZXJlci0+cGFkZGluZ1RvcCgpICsgcmVzdWx0c1JlbmRlcmVyLT5wYWRkaW5nQm90dG9tKCkg
KworICAgICAgICAgICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5tYXJnaW5Ub3AoKSArIHJlc3Vs
dHNSZW5kZXJlci0+bWFyZ2luQm90dG9tKCkpKTsKICAgICAgICAgbGluZUhlaWdodCA9IG1heChs
aW5lSGVpZ2h0LCByZXN1bHRzUmVuZGVyZXItPmhlaWdodCgpKTsKICAgICB9CiAKLSAgICBpZiAo
UmVuZGVyT2JqZWN0KiBjYW5jZWxSZW5kZXJlciA9IG1fY2FuY2VsQnV0dG9uID8gbV9jYW5jZWxC
dXR0b24tPnJlbmRlcmVyKCkgOiAwKSB7CisgICAgaWYgKFJlbmRlckJveCogY2FuY2VsUmVuZGVy
ZXIgPSBtX2NhbmNlbEJ1dHRvbiA/IG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApIHsK
ICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjYW5jZWxSZW5kZXJlciktPmNhbGNI
ZWlnaHQoKTsKLSAgICAgICAgbV9oZWlnaHQgPSBtYXgobV9oZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgIGNhbmNlbFJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGNhbmNlbFJlbmRlcmVyLT5i
b3JkZXJCb3R0b20oKSArCi0gICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFJlbmRlcmVyLT5w
YWRkaW5nVG9wKCkgKyBjYW5jZWxSZW5kZXJlci0+cGFkZGluZ0JvdHRvbSgpICsKLSAgICAgICAg
ICAgICAgICAgICAgICAgY2FuY2VsUmVuZGVyZXItPm1hcmdpblRvcCgpICsgY2FuY2VsUmVuZGVy
ZXItPm1hcmdpbkJvdHRvbSgpKTsKKyAgICAgICAgc2V0SGVpZ2h0KG1heChoZWlnaHQoKSwKKyAg
ICAgICAgICAgICAgICAgIGNhbmNlbFJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGNhbmNlbFJlbmRl
cmVyLT5ib3JkZXJCb3R0b20oKSArCisgICAgICAgICAgICAgICAgICBjYW5jZWxSZW5kZXJlci0+
cGFkZGluZ1RvcCgpICsgY2FuY2VsUmVuZGVyZXItPnBhZGRpbmdCb3R0b20oKSArCisgICAgICAg
ICAgICAgICAgICBjYW5jZWxSZW5kZXJlci0+bWFyZ2luVG9wKCkgKyBjYW5jZWxSZW5kZXJlci0+
bWFyZ2luQm90dG9tKCkpKTsKICAgICAgICAgbGluZUhlaWdodCA9IG1heChsaW5lSGVpZ2h0LCBj
YW5jZWxSZW5kZXJlci0+aGVpZ2h0KCkpOwogICAgIH0KIAotICAgIG1faGVpZ2h0ICs9IGxpbmVI
ZWlnaHQ7CisgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbGluZUhlaWdodCk7CiB9CiAKIHZvaWQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTdWJ0cmVlSWZOZWVkZWQoKQpAQCAt
Njk1LDcgKzY5NSw3IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFAK
IHsKICAgICBpbnQgcGFkZGluZyA9IHBhZGRpbmdMZWZ0KCk7CiAKLSAgICBpZiAoUmVuZGVyT2Jq
ZWN0KiByZXN1bHRzUmVuZGVyZXIgPSBtX3Jlc3VsdHNCdXR0b24gPyBtX3Jlc3VsdHNCdXR0b24t
PnJlbmRlcmVyKCkgOiAwKQorICAgIGlmIChSZW5kZXJCb3gqIHJlc3VsdHNSZW5kZXJlciA9IG1f
cmVzdWx0c0J1dHRvbiA/IG1fcmVzdWx0c0J1dHRvbi0+cmVuZGVyQm94KCkgOiAwKQogICAgICAg
ICBwYWRkaW5nICs9IHJlc3VsdHNSZW5kZXJlci0+d2lkdGgoKTsKIAogICAgIHJldHVybiBwYWRk
aW5nOwpAQCAtNzA1LDcgKzcwNSw3IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmNsaWVudFAKIHsKICAgICBpbnQgcGFkZGluZyA9IHBhZGRpbmdSaWdodCgpOwogCi0gICAgaWYg
KFJlbmRlck9iamVjdCogY2FuY2VsUmVuZGVyZXIgPSBtX2NhbmNlbEJ1dHRvbiA/IG1fY2FuY2Vs
QnV0dG9uLT5yZW5kZXJlcigpIDogMCkKKyAgICBpZiAoUmVuZGVyQm94KiBjYW5jZWxSZW5kZXJl
ciA9IG1fY2FuY2VsQnV0dG9uID8gbV9jYW5jZWxCdXR0b24tPnJlbmRlckJveCgpIDogMCkKICAg
ICAgICAgcGFkZGluZyArPSBjYW5jZWxSZW5kZXJlci0+d2lkdGgoKTsKIAogICAgIHJldHVybiBw
YWRkaW5nOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gNDAwNzUp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3MSw5ICszNzEsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyhSZW5k
ZQogI2lmIEVOQUJMRShWSURFTykKIGJvb2wgUmVuZGVyVGhlbWU6OmhpdFRlc3RNZWRpYUNvbnRy
b2xQYXJ0KFJlbmRlck9iamVjdCogbywgY29uc3QgSW50UG9pbnQmIGFic1BvaW50KQogewotICAg
IEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG8tPmFic29sdXRlVG9Mb2NhbChhYnNQb2ludCwgZmFs
c2UsIHRydWUpOyAgLy8gcmVzcGVjdCB0cmFuc2Zvcm1zCisgICAgaWYgKCFvLT5pc0JveCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gby0+Ym9yZGVyQm94KCkuY29udGFp
bnMocm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKKyAgICBGbG9hdFBvaW50IGxvY2FsUG9p
bnQgPSBvLT5hYnNvbHV0ZVRvTG9jYWwoYWJzUG9pbnQsIGZhbHNlLCB0cnVlKTsgIC8vIHJlc3Bl
Y3QgdHJhbnNmb3JtcworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihvKS0+Ym9y
ZGVyQm94UmVjdCgpLmNvbnRhaW5zKHJvdW5kZWRJbnRQb2ludChsb2NhbFBvaW50KSk7CiB9CiAj
ZW5kaWYKIApAQCAtNDgwLDEwICs0ODIsMTMgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3Jt
SW5hY3RpdmVMaXN0QgogCiBpbnQgUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24oY29uc3Qg
UmVuZGVyT2JqZWN0KiBvKSBjb25zdAogeworICAgIGlmICghby0+aXNCb3goKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKICNpZiBVU0UoTkVXX1RIRU1FKQotICAgIHJldHVybiBvLT5oZWlnaHQoKSAr
IG8tPm1hcmdpblRvcCgpICsgbV90aGVtZS0+YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoby0+
c3R5bGUoKS0+YXBwZWFyYW5jZSgpKSAqIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94Kj4obyktPmhlaWdodCgpICsgby0+
bWFyZ2luVG9wKCkgKyBtX3RoZW1lLT5iYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChvLT5zdHls
ZSgpLT5hcHBlYXJhbmNlKCkpICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogI2Vsc2UK
LSAgICByZXR1cm4gby0+aGVpZ2h0KCkgKyBvLT5tYXJnaW5Ub3AoKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94Kj4obyktPmhlaWdodCgpICsgby0+bWFyZ2luVG9wKCk7
CiAjZW5kaWYKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlz
aW9uIDQwMDc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEyNTQsNiArMTI1NCw5IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dFNlYXJjaEZpZWxkU3QKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIGlucHV0ID0gby0+bm9k
ZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5p
c0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBzZXRTZWFyY2hDZWxsU3RhdGUo
aW5wdXQtPnJlbmRlcmVyKCksIHIpOwogCiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9
IHRoaXMtPnNlYXJjaCgpOwpAQCAtMTI2NCw3ICsxMjY3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTZWFyY2hGaWVsZENhbgogCiAgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpOwogCi0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJj
aCBjYW5jZWxCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyZXIoKS0+Ym9y
ZGVyQm94KCkpXTsKKyAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1
dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVj
dCgpKV07CiAgICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQtPnJl
bmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKIAogICAgIEZsb2F0UmVjdCB1bnpvb21lZFJl
Y3QobG9jYWxCb3VuZHMpOwpAQCAtMTMyOCw2ICsxMzMxLDkgQEAgdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0U2VhcmNoRmllbGRSZQogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIGlucHV0ID0gby0+
bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigp
LT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBzZXRTZWFyY2hDZWxsU3Rh
dGUoaW5wdXQtPnJlbmRlcmVyKCksIHIpOwogCiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJj
aCA9IHRoaXMtPnNlYXJjaCgpOwpAQCAtMTMzNSw3ICsxMzQxLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgIGlmIChbc2VhcmNoIHNlYXJjaE1lbnVUZW1w
bGF0ZV0gIT0gbmlsKQogICAgICAgICBbc2VhcmNoIHNldFNlYXJjaE1lbnVUZW1wbGF0ZTpuaWxd
OwogCi0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0
Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyZXIoKS0+Ym9yZGVyQm94KCkpXTsKKyAgICBG
bG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6
TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07CiAgICAgbG9jYWxC
b3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2Fs
Qm91bmRzLCByKTsKIAogICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJh
bWU6bG9jYWxCb3VuZHMgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50Vmll
dygpXTsKQEAgLTEzNTUsNiArMTM2MSw5IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNl
YXJjaEZpZWxkUmUKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUo
KS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNC
b3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlu
cHV0LT5yZW5kZXJlcigpLCByKTsKIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0
aGlzLT5zZWFyY2goKTsKQEAgLTEzNjYsNyArMTM3NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50U2VhcmNoRmllbGRSZXMKIAogICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKTsKIAotICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2gg
c2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlcmVyKCktPmJvcmRl
ckJveCgpKV07CisgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0
b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3Qo
KSldOwogICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5yZW5k
ZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CiAgICAgCiAgICAgSW50UmVjdCB1bnpvb21lZFJl
Y3QobG9jYWxCb3VuZHMpOwpAQCAtMTU5NCwxMCArMTYwMywxMyBAQCBTdHJpbmcgUmVuZGVyVGhl
bWVNYWM6OmV4dHJhTWVkaWFDb250cm9sCiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OmhpdFRlc3RN
ZWRpYUNvbnRyb2xQYXJ0KFJlbmRlck9iamVjdCogbywgY29uc3QgSW50UG9pbnQmIGFic1BvaW50
KQogeworICAgIGlmICghby0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKICAgICBpZiAobWVkaWFDb250cm9sbGVyVGhlbWUoKSA9PSBNZWRpYUNvbnRyb2xsZXJUaGVt
ZVFUKSB7CiAgICAgICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHlsZSgpLT5hcHBlYXJhbmNl
KCk7CiAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG8tPmFic29sdXRlVG9Mb2NhbChh
YnNQb2ludCwgZmFsc2UsIHRydWUpOyAgLy8gcmVzcGVjdCB0cmFuc2Zvcm1zCi0gICAgICAgIHJl
dHVybiB3a0hpdFRlc3RNZWRpYVVJUGFydChwYXJ0IC0gTWVkaWFGdWxsc2NyZWVuQnV0dG9uUGFy
dCwgTWVkaWFDb250cm9sbGVyVGhlbWVRVCwgQ0dSZWN0KG8tPmJvcmRlckJveCgpKSwgQ0dQb2lu
dChsb2NhbFBvaW50KSk7CisgICAgICAgIHJldHVybiB3a0hpdFRlc3RNZWRpYVVJUGFydChwYXJ0
IC0gTWVkaWFGdWxsc2NyZWVuQnV0dG9uUGFydCwgTWVkaWFDb250cm9sbGVyVGhlbWVRVCwgQ0dS
ZWN0KHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG8pLT5ib3JkZXJCb3hSZWN0KCkpLCBDR1BvaW50
KGxvY2FsUG9pbnQpKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gUmVuZGVyVGhl
bWU6OmhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KG8sIGFic1BvaW50KTsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5o
IgogI2luY2x1ZGUgIlJlbmRlckJSLmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTE4MCw3ICsxODEsMjYgQEAgc3RhdGljIFRleHRT
dHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgICAgICB9CiAgICAgfQogCi0gICAgSW50
UmVjdCByKG8ueFBvcygpLCBvLnlQb3MoKSwgby53aWR0aCgpLCBvLmhlaWdodCgpKTsKKyAgICBJ
bnRSZWN0IHI7CisgICAgaWYgKG8uaXNUZXh0KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdvdWxk
IGJlIGJldHRlciB0byBkdW1wIHRoZSBib3VuZGluZyBib3ggeCBhbmQgeSByYXRoZXIgdGhhbiB0
aGUgZmlyc3QgcnVuJ3MgeCBhbmQgeSwgYnV0IHRoYXQgd291bGQgaW52b2x2ZSB1cGRhdGluZwor
ICAgICAgICAvLyBtYW55IHRlc3QgcmVzdWx0cy4KKyAgICAgICAgY29uc3QgUmVuZGVyVGV4dCYg
dGV4dCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRleHQmPihvKTsKKyAgICAgICAgciA9IElu
dFJlY3QodGV4dC5maXJzdFJ1blgoKSwgdGV4dC5maXJzdFJ1blkoKSwgdGV4dC5ib3VuZGluZ0Jv
eFdpZHRoKCksIHRleHQuYm91bmRpbmdCb3hIZWlnaHQoKSk7CisgICAgfSBlbHNlIGlmIChvLmlz
Qm94KCkpIHsKKyAgICAgICAgaWYgKG8uaXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IFdvdWxkIGJlIGJldHRlciBub3QgdG8ganVzdCBkdW1wIDAsIDAgYXMgdGhlIHgg
YW5kIHkgaGVyZS4KKyAgICAgICAgICAgIGNvbnN0IFJlbmRlcklubGluZSYgaW5saW5lRmxvdyA9
IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlcklubGluZSY+KG8pOworICAgICAgICAgICAgciA9IElu
dFJlY3QoMCwgMCwgaW5saW5lRmxvdy5ib3VuZGluZ0JveFdpZHRoKCksIGlubGluZUZsb3cuYm91
bmRpbmdCb3hIZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogV2UgY2FuJ3QganVzdCB1c2UgdGhlIGFjdHVhbCBmcmFtZVJlY3Qgb2YgdGhlIGJveCBiZWNh
dXNlIGR1bXAgcmVuZGVyIHRyZWUgZHVtcHMgdGhlICJpbm5lciBib3giIG9mIHRhYmxlIGNlbGxz
LgorICAgICAgICAgICAgLy8gQmVjYXVzZSBvZiB0aGUgbGllIHdlIGhhdmUgdG8gY2FsbCB5KCku
ICBXZSB3b3VsZCBsaWtlIHRvIGZpeCBkdW1wIHJlbmRlciB0cmVlIHRvIGR1bXAgdGhlIGFjdHVh
bCBkaW1lbnNpb25zIG9mIHRoZSB0YWJsZQorICAgICAgICAgICAgLy8gY2VsbCBpbmNsdWRpbmcg
dGhlIGV4dHJhIGludHJpbnNpYyBwYWRkaW5nLgorICAgICAgICAgICAgY29uc3QgUmVuZGVyQm94
JiBib3ggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCb3gmPihvKTsKKyAgICAgICAgICAgIHIg
PSBJbnRSZWN0KGJveC54KCksIGJveC55KCksIGJveC53aWR0aCgpLCBib3guaGVpZ2h0KCkpOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgdHMgPDwgIiAiIDw8IHI7CiAKICAgICBpZiAoIShvLmlz
VGV4dCgpICYmICFvLmlzQlIoKSkpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZGVvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJ
KHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgUmVuZGVyVmlkZW86OnZpZGVvU2l6
ZUNoYW5nZWQoKQogCiBJbnRSZWN0IFJlbmRlclZpZGVvOjp2aWRlb0JveCgpIGNvbnN0IAogewot
ICAgIEludFJlY3QgY29udGVudFJlY3QgPSBjb250ZW50Qm94KCk7CisgICAgSW50UmVjdCBjb250
ZW50UmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgCiAgICAgaWYgKGludHJpbnNpY1NpemUo
KS5pc0VtcHR5KCkgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gSW50
UmVjdCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDQwMDc1KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDEwICs1MCw3IEBAIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWUKIAog
ICAgIC8vIGluaXQgUmVuZGVyT2JqZWN0IGF0dHJpYnV0ZXMKICAgICBzZXRJbmxpbmUoZmFsc2Up
OwotCi0gICAgLy8gdHJ5IHRvIGNvbnRyYWluIHRoZSB3aWR0aCB0byB0aGUgdmlld3Mgd2lkdGgK
LSAgICBtX3dpZHRoID0gMDsKLSAgICBtX2hlaWdodCA9IDA7CisgICAgCiAgICAgbV9taW5QcmVm
V2lkdGggPSAwOwogICAgIG1fbWF4UHJlZldpZHRoID0gMDsKIApAQCAtNzMsMTMgKzcwLDEzIEBA
IFJlbmRlclZpZXc6On5SZW5kZXJWaWV3KCkKIHZvaWQgUmVuZGVyVmlldzo6Y2FsY0hlaWdodCgp
CiB7CiAgICAgaWYgKCFwcmludGluZygpICYmIG1fZnJhbWVWaWV3KQotICAgICAgICBtX2hlaWdo
dCA9IHZpZXdIZWlnaHQoKTsKKyAgICAgICAgc2V0SGVpZ2h0KHZpZXdIZWlnaHQoKSk7CiB9CiAK
IHZvaWQgUmVuZGVyVmlldzo6Y2FsY1dpZHRoKCkKIHsKICAgICBpZiAoIXByaW50aW5nKCkgJiYg
bV9mcmFtZVZpZXcpCi0gICAgICAgIG1fd2lkdGggPSB2aWV3V2lkdGgoKTsKKyAgICAgICAgc2V0
V2lkdGgodmlld1dpZHRoKCkpOwogICAgIG1fbWFyZ2luTGVmdCA9IDA7CiAgICAgbV9tYXJnaW5S
aWdodCA9IDA7CiB9CkBAIC05NiwxMCArOTMsMTAgQEAgdm9pZCBSZW5kZXJWaWV3OjpjYWxjUHJl
ZldpZHRocygpCiB2b2lkIFJlbmRlclZpZXc6OmxheW91dCgpCiB7CiAgICAgaWYgKHByaW50aW5n
KCkpCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBtX3dpZHRoOwor
ICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gd2lkdGgoKTsKIAogICAg
IC8vIFVzZSBjYWxjV2lkdGgvSGVpZ2h0IHRvIGdldCB0aGUgbmV3IHdpZHRoL2hlaWdodCwgc2lu
Y2UgdGhpcyB3aWxsIHRha2UgdGhlIGZ1bGwgcGFnZSB6b29tIGZhY3RvciBpbnRvIGFjY291bnQu
Ci0gICAgYm9vbCByZWxheW91dENoaWxkcmVuID0gIXByaW50aW5nKCkgJiYgKCFtX2ZyYW1lVmll
dyB8fCBtX3dpZHRoICE9IHZpZXdXaWR0aCgpIHx8IG1faGVpZ2h0ICE9IHZpZXdIZWlnaHQoKSk7
CisgICAgYm9vbCByZWxheW91dENoaWxkcmVuID0gIXByaW50aW5nKCkgJiYgKCFtX2ZyYW1lVmll
dyB8fCB3aWR0aCgpICE9IHZpZXdXaWR0aCgpIHx8IGhlaWdodCgpICE9IHZpZXdIZWlnaHQoKSk7
CiAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4pIHsKICAgICAgICAgc2V0Q2hpbGROZWVkc0xheW91
dCh0cnVlLCBmYWxzZSk7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKQEAgLTExOCw4
ICsxMTUsOCBAQCB2b2lkIFJlbmRlclZpZXc6OmxheW91dCgpCiAgICAgICAgIFJlbmRlckJsb2Nr
OjpsYXlvdXQoKTsKIAogICAgIC8vIEVuc3VyZSB0aGF0IGRvY1dpZHRoKCkgPj0gd2lkdGgoKSBh
bmQgZG9jSGVpZ2h0KCkgPj0gaGVpZ2h0KCkuCi0gICAgc2V0T3ZlcmZsb3dXaWR0aChtX3dpZHRo
KTsKLSAgICBzZXRPdmVyZmxvd0hlaWdodChtX2hlaWdodCk7CisgICAgc2V0T3ZlcmZsb3dXaWR0
aCh3aWR0aCgpKTsKKyAgICBzZXRPdmVyZmxvd0hlaWdodChoZWlnaHQoKSk7CiAKICAgICBzZXRP
dmVyZmxvd1dpZHRoKGRvY1dpZHRoKCkpOwogICAgIHNldE92ZXJmbG93SGVpZ2h0KGRvY0hlaWdo
dCgpKTsKQEAgLTUxNCw3ICs1MTEsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnJlbW92ZVdpZGdldChS
ZW5kZXJPYmplCiBJbnRSZWN0IFJlbmRlclZpZXc6OnZpZXdSZWN0KCkgY29uc3QKIHsKICAgICBp
ZiAocHJpbnRpbmcoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgbV93aWR0aCwgbV9o
ZWlnaHQpOworICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7
CiAgICAgaWYgKG1fZnJhbWVWaWV3KQogICAgICAgICByZXR1cm4gbV9mcmFtZVZpZXctPnZpc2li
bGVDb250ZW50UmVjdCgpOwogICAgIHJldHVybiBJbnRSZWN0KCk7CkBAIC01MjIsNyArNTE5LDcg
QEAgSW50UmVjdCBSZW5kZXJWaWV3Ojp2aWV3UmVjdCgpIGNvbnN0CiAKIGludCBSZW5kZXJWaWV3
Ojpkb2NIZWlnaHQoKSBjb25zdAogewotICAgIGludCBoID0gbV9oZWlnaHQ7CisgICAgaW50IGgg
PSBoZWlnaHQoKTsKICAgICBpbnQgbG93ZXN0UG9zID0gbG93ZXN0UG9zaXRpb24oKTsKICAgICBp
ZiAobG93ZXN0UG9zID4gaCkKICAgICAgICAgaCA9IGxvd2VzdFBvczsKQEAgLTUzMSw3ICs1Mjgs
NyBAQCBpbnQgUmVuZGVyVmlldzo6ZG9jSGVpZ2h0KCkgY29uc3QKICAgICAvLyBJbnN0ZWFkIG9m
IHRoaXMgZGggY29tcHV0YXRpb24gd2Ugc2hvdWxkIGtlZXAgdGhlIHJlc3VsdAogICAgIC8vIHdo
ZW4gd2UgY2FsbCBSZW5kZXJCbG9jazo6bGF5b3V0LgogICAgIGludCBkaCA9IDA7Ci0gICAgZm9y
IChSZW5kZXJPYmplY3QqIGMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygp
KQorICAgIGZvciAoUmVuZGVyQm94KiBjID0gZmlyc3RDaGlsZEJveCgpOyBjOyBjID0gYy0+bmV4
dFNpYmxpbmdCb3goKSkKICAgICAgICAgZGggKz0gYy0+aGVpZ2h0KCkgKyBjLT5tYXJnaW5Ub3Ao
KSArIGMtPm1hcmdpbkJvdHRvbSgpOwogCiAgICAgaWYgKGRoID4gaCkKQEAgLTU0MiwxMiArNTM5
LDEyIEBAIGludCBSZW5kZXJWaWV3Ojpkb2NIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyVmll
dzo6ZG9jV2lkdGgoKSBjb25zdAogewotICAgIGludCB3ID0gbV93aWR0aDsKKyAgICBpbnQgdyA9
IHdpZHRoKCk7CiAgICAgaW50IHJpZ2h0bW9zdFBvcyA9IHJpZ2h0bW9zdFBvc2l0aW9uKCk7CiAg
ICAgaWYgKHJpZ2h0bW9zdFBvcyA+IHcpCiAgICAgICAgIHcgPSByaWdodG1vc3RQb3M7Ci0KLSAg
ICBmb3IgKFJlbmRlck9iamVjdCAqYyA9IGZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMtPm5leHRTaWJs
aW5nKCkpIHsKKyAgICAKKyAgICBmb3IgKFJlbmRlckJveCogYyA9IGZpcnN0Q2hpbGRCb3goKTsg
YzsgYyA9IGMtPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgaW50IGR3ID0gYy0+d2lkdGgo
KSArIGMtPm1hcmdpbkxlZnQoKSArIGMtPm1hcmdpblJpZ2h0KCk7CiAgICAgICAgIGlmIChkdyA+
IHcpCiAgICAgICAgICAgICB3ID0gZHc7CkBAIC01NzgsNyArNTc1LDcgQEAgaW50IFJlbmRlclZp
ZXc6OnZpZXdXaWR0aCgpIGNvbnN0CiAKIC8vIFRoZSBpZGVhIGhlcmUgaXMgdG8gdGFrZSBpbnRv
IGFjY291bnQgd2hhdCBvYmplY3QgaXMgbW92aW5nIHRoZSBwYWdpbmF0aW9uIHBvaW50LCBhbmQK
IC8vIHRodXMgY2hvb3NlIHRoZSBiZXN0IHBsYWNlIHRvIGNob3AgaXQuCi12b2lkIFJlbmRlclZp
ZXc6OnNldEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyT2JqZWN0KiBmb3JSZW5kZXJlciwg
Ym9vbCBmb3JjZWRCcmVhaykKK3ZvaWQgUmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KGlu
dCB5LCBSZW5kZXJCb3gqIGZvclJlbmRlcmVyLCBib29sIGZvcmNlZEJyZWFrKQogewogICAgIC8v
IE5vYm9keSBlbHNlIGNhbiBzZXQgYSBwYWdlIGJyZWFrIG9uY2Ugd2UgaGF2ZSBhIGZvcmNlZCBi
cmVhay4KICAgICBpZiAobV9mb3JjZWRQYWdlQnJlYWspCkBAIC01OTIsOSArNTg5LDggQEAgdm9p
ZCBSZW5kZXJWaWV3OjpzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IAogICAgIH0KIAogICAgIC8vIHBy
ZWZlciB0aGUgd2lkZXN0IG9iamVjdCB3aG8gdHJpZXMgdG8gbW92ZSB0aGUgcGFnaW5hdGlvbiBw
b2ludAotICAgIGludCB3aWR0aCA9IGZvclJlbmRlcmVyLT53aWR0aCgpOwotICAgIGlmICh3aWR0
aCA+IG1fdHJ1bmNhdG9yV2lkdGgpIHsKLSAgICAgICAgbV90cnVuY2F0b3JXaWR0aCA9IHdpZHRo
OworICAgIGlmIChmb3JSZW5kZXJlci0+d2lkdGgoKSA+IG1fdHJ1bmNhdG9yV2lkdGgpIHsKKyAg
ICAgICAgbV90cnVuY2F0b3JXaWR0aCA9IGZvclJlbmRlcmVyLT53aWR0aCgpOwogICAgICAgICBt
X2Jlc3RUcnVuY2F0ZWRBdCA9IHk7CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UHJpbnRJ
bWFnZXMoYm9vbCBlbmFibGUpIHsgbV9wcmludEltYWdlcyA9IGVuYWJsZTsgfQogICAgIGJvb2wg
cHJpbnRJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX3ByaW50SW1hZ2VzOyB9CiAgICAgdm9pZCBz
ZXRUcnVuY2F0ZWRBdChpbnQgeSkgeyBtX3RydW5jYXRlZEF0ID0geTsgbV9iZXN0VHJ1bmNhdGVk
QXQgPSBtX3RydW5jYXRvcldpZHRoID0gMDsgbV9mb3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsgfQot
ICAgIHZvaWQgc2V0QmVzdFRydW5jYXRlZEF0KGludCB5LCBSZW5kZXJPYmplY3QgKmZvclJlbmRl
cmVyLCBib29sIGZvcmNlZEJyZWFrID0gZmFsc2UpOworICAgIHZvaWQgc2V0QmVzdFRydW5jYXRl
ZEF0KGludCB5LCBSZW5kZXJCb3gqIGZvclJlbmRlcmVyLCBib29sIGZvcmNlZEJyZWFrID0gZmFs
c2UpOwogICAgIGludCBiZXN0VHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Jlc3RUcnVu
Y2F0ZWRBdDsgfQogCiAgICAgaW50IHRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV90cnVu
Y2F0ZWRBdDsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZpc2lvbiA0
MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Miw4ICsxNzIsOCBAQCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWluCiAgICAgaWYgKCFzaG91bGRQYWludChwYWludEluZm8sIHR4LCB0eSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHR4ICs9IG1feDsKLSAgICB0eSArPSBtX3k7CisgICAgdHggKz0geCgp
OworICAgIHR5ICs9IG1fZnJhbWVSZWN0LnkoKTsKIAogICAgIGlmIChoYXNCb3hEZWNvcmF0aW9u
cygpICYmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pKQogICAgICAgICBwYWludEJveERlY29y
YXRpb25zKHBhaW50SW5mbywgdHgsIHR5KTsKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIFJlbmRl
cldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWluCiAKICNpZiBQTEFURk9STShNQUMpCiAgICAg
aWYgKHN0eWxlKCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodCh0eCAt
IG1feCwgdHkgLSBtX3ksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKKyAgICAgICAgcGFp
bnRDdXN0b21IaWdobGlnaHQodHggLSB4KCksIHR5IC0gbV9mcmFtZVJlY3QueSgpLCBzdHlsZSgp
LT5oaWdobGlnaHQoKSwgdHJ1ZSk7CiAjZW5kaWYKIAogICAgIGlmIChtX3dpZGdldCkgewpAQCAt
MjIyLDEwICsyMjIsMTAgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnVwZGF0ZVdpZGdldFBvc2l0aW9u
KAogICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CiAgICAgYWJzUG9z
Lm1vdmUoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCkpOwogCi0gICAgaW50IHdpZHRoID0gbV93aWR0aCAtIGJvcmRlckxlZnQoKSAtIGJvcmRl
clJpZ2h0KCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCk7Ci0gICAgaW50IGhlaWdo
dCA9IG1faGVpZ2h0IC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIHBhZGRpbmdUb3Ao
KSAtIHBhZGRpbmdCb3R0b20oKTsKKyAgICBpbnQgdyA9IHdpZHRoKCkgLSBib3JkZXJMZWZ0KCkg
LSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpOworICAgIGlu
dCBoID0gaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gcGFkZGluZ1Rv
cCgpIC0gcGFkZGluZ0JvdHRvbSgpOwogCi0gICAgSW50UmVjdCBuZXdCb3VuZHMoYWJzUG9zLngo
KSwgYWJzUG9zLnkoKSwgd2lkdGgsIGhlaWdodCk7CisgICAgSW50UmVjdCBuZXdCb3VuZHMoYWJz
UG9zLngoKSwgYWJzUG9zLnkoKSwgdywgaCk7CiAgICAgSW50UmVjdCBvbGRCb3VuZHMobV93aWRn
ZXQtPmZyYW1lUmVjdCgpKTsKICAgICBpZiAobmV3Qm91bmRzICE9IG9sZEJvdW5kcykgewogICAg
ICAgICAvLyBUaGUgd2lkZ2V0IGNoYW5nZWQgcG9zaXRpb25zLiAgVXBkYXRlIHRoZSBmcmFtZSBn
ZW9tZXRyeS4KQEAgLTI3MSw3ICsyNzEsNyBAQCBib29sIFJlbmRlcldpZGdldDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0CiAgICAgCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkg
b3ZlciB0aGUgd2lkZ2V0IGl0c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGlu
ZyBhcmVhKS4KICAgICBpZiAoaW5zaWRlICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9k
ZSgpID09IGVsZW1lbnQoKSkKLSAgICAgICAgcmVzdWx0LnNldElzT3ZlcldpZGdldChjb250ZW50
Qm94KCkuY29udGFpbnMocmVzdWx0LmxvY2FsUG9pbnQoKSkpOworICAgICAgICByZXN1bHQuc2V0
SXNPdmVyV2lkZ2V0KGNvbnRlbnRCb3hSZWN0KCkuY29udGFpbnMocmVzdWx0LmxvY2FsUG9pbnQo
KSkpOwogICAgIHJldHVybiBpbnNpZGU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgcHVibGljOgogCiAgICAgSW5s
aW5lQm94KiBjbG9zZXN0TGVhZkNoaWxkRm9yWFBvcyhpbnQgeCwgYm9vbCBvbmx5RWRpdGFibGVM
ZWF2ZXMgPSBmYWxzZSk7CiAKLSAgICBWZWN0b3I8UmVuZGVyT2JqZWN0Kj4mIGZsb2F0cygpCisg
ICAgVmVjdG9yPFJlbmRlckJveCo+JiBmbG9hdHMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFp
c0RpcnR5KCkpOwogICAgICAgICBpZiAoIW1fb3ZlcmZsb3cpCkBAIC0xMjcsNyArMTI3LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9vdmVyZmxvdy0+ZmxvYXRzOwogICAgIH0KIAotICAg
IFZlY3RvcjxSZW5kZXJPYmplY3QqPiogZmxvYXRzUHRyKCkgeyBBU1NFUlQoIWlzRGlydHkoKSk7
IHJldHVybiBtX292ZXJmbG93ID8gJm1fb3ZlcmZsb3ctPmZsb2F0cyA6IDA7IH0KKyAgICBWZWN0
b3I8UmVuZGVyQm94Kj4qIGZsb2F0c1B0cigpIHsgQVNTRVJUKCFpc0RpcnR5KCkpOyByZXR1cm4g
bV9vdmVyZmxvdyA/ICZtX292ZXJmbG93LT5mbG9hdHMgOiAwOyB9CiAKIHByb3RlY3RlZDoKICAg
ICAvLyBOb3JtYWxseSB3ZSBhcmUgb25seSBhcyB0YWxsIGFzIHRoZSBzdHlsZSBvbiBvdXIgYmxv
Y2sgZGljdGF0ZXMsIGJ1dCB3ZSBtaWdodCBoYXZlIGNvbnRlbnQKQEAgLTE1OCw3ICsxNTgsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIGludCBtX3NlbGVjdGlvbkJvdHRvbTsKICAgICAgICAgLy8g
RmxvYXRzIGhhbmdpbmcgb2ZmIHRoZSBsaW5lIGFyZSBwdXNoZWQgaW50byB0aGlzIHZlY3RvciBk
dXJpbmcgbGF5b3V0LiBJdCBpcyBvbmx5CiAgICAgICAgIC8vIGdvb2QgZm9yIGFzIGxvbmcgYXMg
dGhlIGxpbmUgaGFzIG5vdCBiZWVuIG1hcmtlZCBkaXJ0eS4KLSAgICAgICAgVmVjdG9yPFJlbmRl
ck9iamVjdCo+IGZsb2F0czsKKyAgICAgICAgVmVjdG9yPFJlbmRlckJveCo+IGZsb2F0czsKICAg
ICBwcml2YXRlOgogICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90KSB0aHJvdygpOwog
ICAgIH07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAkocmV2aXNp
b24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsOSArNDMsMTAgQEAgaW50IFNWR0lubGluZUZsb3dCb3g6OnBsYWNl
Qm94ZXNIb3Jpem9udAogICAgIHJldHVybiAwOwogfQogCi12b2lkIFNWR0lubGluZUZsb3dCb3g6
OnZlcnRpY2FsbHlBbGlnbkJveGVzKGludCYpCitpbnQgU1ZHSW5saW5lRmxvd0JveDo6dmVydGlj
YWxseUFsaWduQm94ZXMoaW50KQogewogICAgIC8vIG5vLW9wCisgICAgcmV0dXJuIDA7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGlu
ZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93
Qm94LmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lRmxv
d0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5
KTsKICAgICB2aXJ0dWFsIGludCBwbGFjZUJveGVzSG9yaXpvbnRhbGx5KGludCB4LCBpbnQmIGxl
ZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdmVydGljYWxseUFsaWduQm94ZXMoaW50JiBoZWlnaHRPZkJsb2Nr
KTsKKyAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQgaGVpZ2h0T2ZCbG9j
ayk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDcg
KzMyOSw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0KICAgICAg
ICAgcmV0dXJuIHRzOwogCiAgICAgVmVjdG9yPFNWR1RleHRDaHVuaz4mIGNodW5rcyA9IGNvbnN0
X2Nhc3Q8VmVjdG9yPFNWR1RleHRDaHVuaz4mID4oYm94LT5zdmdUZXh0Q2h1bmtzKCkpOwotICAg
IHRzIDw8ICIgYXQgKCIgPDwgdGV4dC54UG9zKCkgPDwgIiwiIDw8IHRleHQueVBvcygpIDw8ICIp
IHNpemUgIiA8PCBib3gtPndpZHRoKCkgPDwgIngiIDw8IGJveC0+aGVpZ2h0KCkgPDwgIiBjb250
YWlucyAiIDw8IGNodW5rcy5zaXplKCkgPDwgIiBjaHVuayhzKSI7CisgICAgdHMgPDwgIiBhdCAo
IiA8PCB0ZXh0LngoKSA8PCAiLCIgPDwgdGV4dC55KCkgPDwgIikgc2l6ZSAiIDw8IGJveC0+d2lk
dGgoKSA8PCAieCIgPDwgYm94LT5oZWlnaHQoKSA8PCAiIGNvbnRhaW5zICIgPDwgY2h1bmtzLnNp
emUoKSA8PCAiIGNodW5rKHMpIjsKIAogICAgIGlmICh0ZXh0LnBhcmVudCgpICYmICh0ZXh0LnBh
cmVudCgpLT5zdHlsZSgpLT5jb2xvcigpICE9IHRleHQuc3R5bGUoKS0+Y29sb3IoKSkpCiAgICAg
ICAgIHRzIDw8ICIgW2NvbG9yPSIgPDwgdGV4dC5zdHlsZSgpLT5jb2xvcigpLm5hbWUoKSA8PCAi
XSI7CkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyUwogICAgICAgICAgICAgdHMgPDwgIiB7IiA8PCB0YWdOYW1lIDw8ICJ9IjsKICAgICB9
CiAKLSAgICB0cyA8PCAiIGF0ICgiIDw8IHRleHQueFBvcygpIDw8ICIsIiA8PCB0ZXh0LnlQb3Mo
KSA8PCAiKSBzaXplICIgPDwgdGV4dC53aWR0aCgpIDw8ICJ4IiA8PCB0ZXh0LmhlaWdodCgpIDw8
ICJcbiI7CisgICAgdHMgPDwgIiBhdCAoIiA8PCB0ZXh0LmZpcnN0UnVuWCgpIDw8ICIsIiA8PCB0
ZXh0LmZpcnN0UnVuWSgpIDw8ICIpIHNpemUgIiA8PCB0ZXh0LmJvdW5kaW5nQm94V2lkdGgoKSA8
PCAieCIgPDwgdGV4dC5ib3VuZGluZ0JveEhlaWdodCgpIDw8ICJcbiI7CiAgICAgd3JpdGVTVkdJ
bmxpbmVUZXh0KHRzLCB0ZXh0LCBpbmRlbnQpOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9T
VkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSb290LmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5oIgogI2luY2x1ZGUgIlNWR0lu
bGluZVRleHRCb3guaCIKQEAgLTYxMSwxMCArNjEyLDEwIEBAIGludCBTVkdSb290SW5saW5lQm94
OjpwbGFjZUJveGVzSG9yaXpvbnQKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBTVkdSb290SW5s
aW5lQm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQmIGhlaWdodE9mQmxvY2spCitpbnQgU1ZH
Um9vdElubGluZUJveDo6dmVydGljYWxseUFsaWduQm94ZXMoaW50KQogewogICAgIC8vIGhlaWdo
dCBpcyBzZXQgYnkgbGF5b3V0SW5saW5lQm94ZXMuCi0gICAgaGVpZ2h0T2ZCbG9jayA9IGhlaWdo
dCgpOworICAgIHJldHVybiBoZWlnaHQoKTsKIH0KIAogZmxvYXQgY3VtbXVsYXRlZFdpZHRoT2ZJ
bmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2Up
CkBAIC04ODcsNyArODg4LDcgQEAgdm9pZCBTVkdSb290SW5saW5lQm94Ojpjb21wdXRlUGVyQ2hh
cmFjdAogICAgIC8vIEZpbmFsbHkgdGhlIHRvcCBsZWZ0IHBvc2l0aW9uIG9mIG91ciBib3ggaXMg
a25vd24uCiAgICAgLy8gUHJvcG9nYXRlIHRoaXMga25vd25sZWRnZSB0byBvdXIgUmVuZGVyU1ZH
VGV4dCBwYXJlbnQuCiAgICAgRmxvYXRQb2ludCB0b3BMZWZ0ID0gdG9wTGVmdFBvc2l0aW9uT2ZD
aGFyYWN0ZXJSYW5nZShtX3N2Z0NoYXJzKTsKLSAgICBvYmplY3QoKS0+c2V0UG9zKChpbnQpIGZs
b29yZih0b3BMZWZ0LngoKSksIChpbnQpIGZsb29yZih0b3BMZWZ0LnkoKSkpOworICAgIGJsb2Nr
KCktPnNldExvY2F0aW9uKChpbnQpIGZsb29yZih0b3BMZWZ0LngoKSksIChpbnQpIGZsb29yZih0
b3BMZWZ0LnkoKSkpOwogCiAgICAgLy8gTGF5b3V0IGFsbCBJbmxpbmVUZXh0L0Zsb3cgYm94ZXMK
ICAgICAvLyBCRVdBUkU6IFRoaXMgcmVxdWlyZXMgdGhlIHJvb3QgdG9wL2xlZnQgcG9zaXRpb24g
dG8gYmUgc2V0IGNvcnJlY3RseSBiZWZvcmUhCkBAIC0xMDM4LDEwICsxMDM5LDEwIEBAIHZvaWQg
U1ZHUm9vdElubGluZUJveDo6bGF5b3V0SW5saW5lQm94ZXMKICAgICAgICAgICAgIGludCBtaW5Z
ID0gZW5jbG9zZWRTdHJpbmdSZWN0LnkoKTsKICAgICAgICAgICAgIGludCBtYXhZID0gbWluWSAr
IGVuY2xvc2VkU3RyaW5nUmVjdC5oZWlnaHQoKTsKIAotICAgICAgICAgICAgY3Vyci0+c2V0WFBv
cyhtaW5YIC0gb2JqZWN0KCktPnhQb3MoKSk7CisgICAgICAgICAgICBjdXJyLT5zZXRYUG9zKG1p
blggLSBibG9jaygpLT54KCkpOwogICAgICAgICAgICAgY3Vyci0+c2V0V2lkdGgoZW5jbG9zZWRT
dHJpbmdSZWN0LndpZHRoKCkpOwogCi0gICAgICAgICAgICBjdXJyLT5zZXRZUG9zKG1pblkgLSBv
YmplY3QoKS0+eVBvcygpKTsKKyAgICAgICAgICAgIGN1cnItPnNldFlQb3MobWluWSAtIGJsb2Nr
KCktPnkoKSk7CiAgICAgICAgICAgICBjdXJyLT5zZXRCYXNlbGluZShmb250LmFzY2VudCgpKTsK
ICAgICAgICAgICAgIGN1cnItPnNldEhlaWdodChlbmNsb3NlZFN0cmluZ1JlY3QuaGVpZ2h0KCkp
OwogCkBAIC0xMDcxLDEwICsxMDcyLDEwIEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0
SW5saW5lQm94ZXMKICAgICAKICAgICAgICAgICAgIGxheW91dElubGluZUJveGVzKGZsb3dCb3gs
IGl0LCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZKTsKIAotICAgICAgICAgICAgY3Vyci0+c2V0WFBv
cyhtaW5YIC0gb2JqZWN0KCktPnhQb3MoKSk7CisgICAgICAgICAgICBjdXJyLT5zZXRYUG9zKG1p
blggLSBibG9jaygpLT54KCkpOwogICAgICAgICAgICAgY3Vyci0+c2V0V2lkdGgobWF4WCAtIG1p
blgpOwogCi0gICAgICAgICAgICBjdXJyLT5zZXRZUG9zKG1pblkgLSBvYmplY3QoKS0+eVBvcygp
KTsKKyAgICAgICAgICAgIGN1cnItPnNldFlQb3MobWluWSAtIGJsb2NrKCktPnkoKSk7CiAgICAg
ICAgICAgICBjdXJyLT5zZXRCYXNlbGluZShmb250LmFzY2VudCgpKTsKICAgICAgICAgICAgIGN1
cnItPnNldEhlaWdodChtYXhZIC0gbWluWSk7CiAKQEAgLTEwOTMsMTAgKzEwOTQsMTAgQEAgdm9p
ZCBTVkdSb290SW5saW5lQm94OjpsYXlvdXRJbmxpbmVCb3hlcwogICAgIH0KIAogICAgIGlmIChz
dGFydC0+aXNSb290SW5saW5lQm94KCkpIHsKLSAgICAgICAgaW50IHRvcCA9IGxvd1kgLSBvYmpl
Y3QoKS0+eVBvcygpOwotICAgICAgICBpbnQgYm90dG9tID0gaGlnaFkgLSBvYmplY3QoKS0+eVBv
cygpOworICAgICAgICBpbnQgdG9wID0gbG93WSAtIGJsb2NrKCktPnkoKTsKKyAgICAgICAgaW50
IGJvdHRvbSA9IGhpZ2hZIC0gYmxvY2soKS0+eSgpOwogCi0gICAgICAgIHN0YXJ0LT5zZXRYUG9z
KGxvd1ggLSBvYmplY3QoKS0+eFBvcygpKTsKKyAgICAgICAgc3RhcnQtPnNldFhQb3MobG93WCAt
IGJsb2NrKCktPngoKSk7CiAgICAgICAgIHN0YXJ0LT5zZXRZUG9zKHRvcCk7CiAKICAgICAgICAg
c3RhcnQtPnNldFdpZHRoKGhpZ2hYIC0gbG93WCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9T
VkdSb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9v
dElubGluZUJveC5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jv
b3RJbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHkpOwogCiAgICAgdmlydHVhbCBpbnQgcGxhY2VCb3hlc0hvcml6b250YWxseShpbnQgeCwg
aW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgYm9vbCYgbmVlZHNXb3JkU3Bh
Y2luZyk7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRpY2FsbHlBbGlnbkJveGVzKGludCYgaGVpZ2h0
T2ZCbG9jayk7CisgICAgdmlydHVhbCBpbnQgdmVydGljYWxseUFsaWduQm94ZXMoaW50IGhlaWdo
dE9mQmxvY2spOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQZXJDaGFyYWN0ZXJMYXlvdXRJ
bmZvcm1hdGlvbigpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY2LDcgKzU2Niw3
IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RMaW4KIHZvaWQgUmVuZGVy
QmxvY2s6OmNvbXB1dGVIb3Jpem9udGFsUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiBs
aW5lQm94LCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgYm9v
bCByZWFjaGVkRW5kKQogewogICAgIC8vIEZpcnN0IGRldGVybWluZSBvdXIgdG90YWwgd2lkdGgu
Ci0gICAgaW50IGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRoKG1faGVpZ2h0KTsKKyAgICBpbnQg
YXZhaWxhYmxlV2lkdGggPSBsaW5lV2lkdGgoaGVpZ2h0KCkpOwogICAgIGludCB0b3RXaWR0aCA9
IGxpbmVCb3gtPmdldEZsb3dTcGFjaW5nV2lkdGgoKTsKICAgICBib29sIG5lZWRzV29yZFNwYWNp
bmcgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBudW1TcGFjZXMgPSAwOwpAQCAtNTk3LDcgKzU5Nyw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVIb3Jpem9udGFsUG9zaXQKICAgICAgICAgICAg
IHItPm1fYm94LT5zZXRXaWR0aChydC0+d2lkdGgoci0+bV9zdGFydCwgci0+bV9zdG9wIC0gci0+
bV9zdGFydCwgdG90V2lkdGgsIG1fZmlyc3RMaW5lKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXIt
Pm1fb2JqZWN0LT5pc0lubGluZUZsb3coKSkgewogICAgICAgICAgICAgci0+bV9vYmplY3QtPmNh
bGNXaWR0aCgpOwotICAgICAgICAgICAgci0+bV9ib3gtPnNldFdpZHRoKHItPm1fb2JqZWN0LT53
aWR0aCgpKTsKKyAgICAgICAgICAgIHItPm1fYm94LT5zZXRXaWR0aChzdGF0aWNfY2FzdDxSZW5k
ZXJCb3gqPihyLT5tX29iamVjdCktPndpZHRoKCkpOwogICAgICAgICAgICAgaWYgKCFyLT5tX2Nv
bXBhY3QpCiAgICAgICAgICAgICAgICAgIHRvdFdpZHRoICs9IHItPm1fb2JqZWN0LT5tYXJnaW5M
ZWZ0KCkgKyByLT5tX29iamVjdC0+bWFyZ2luUmlnaHQoKTsKICAgICAgICAgfQpAQCAtNjExLDcg
KzYxMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVIb3Jpem9udGFsUG9zaXQKICAgICAv
LyB3ZSBub3cgZXhhbWluZSBvdXIgdGV4dC1hbGlnbiBwcm9wZXJ0eSBpbiBvcmRlciB0byBkZXRl
cm1pbmUgd2hlcmUgdG8gcG9zaXRpb24gdGhlCiAgICAgLy8gb2JqZWN0cyBob3Jpem9udGFsbHku
ICBUaGUgdG90YWwgd2lkdGggb2YgdGhlIGxpbmUgY2FuIGJlIGluY3JlYXNlZCBpZiB3ZSBlbmQg
dXAKICAgICAvLyBqdXN0aWZ5aW5nIHRleHQuCi0gICAgaW50IHggPSBsZWZ0T2Zmc2V0KG1faGVp
Z2h0KTsKKyAgICBpbnQgeCA9IGxlZnRPZmZzZXQoaGVpZ2h0KCkpOwogICAgIHN3aXRjaCh0ZXh0
QWxpZ24pIHsKICAgICAgICAgY2FzZSBMRUZUOgogICAgICAgICBjYXNlIFdFQktJVF9MRUZUOgpA
QCAtNzIwLDEyICs3MjAsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6b250YWxQ
b3NpdAogCiB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlVmVydGljYWxQb3NpdGlvbnNGb3JMaW5l
KFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIEJpZGlSdW4qIGZpcnN0UnVuKQogewotICAgIGxpbmVC
b3gtPnZlcnRpY2FsbHlBbGlnbkJveGVzKG1faGVpZ2h0KTsKLSAgICBsaW5lQm94LT5zZXRCbG9j
a0hlaWdodChtX2hlaWdodCk7CisgICAgc2V0SGVpZ2h0KGxpbmVCb3gtPnZlcnRpY2FsbHlBbGln
bkJveGVzKGhlaWdodCgpKSk7CisgICAgbGluZUJveC0+c2V0QmxvY2tIZWlnaHQoaGVpZ2h0KCkp
OwogCiAgICAgLy8gU2VlIGlmIHRoZSBsaW5lIHNwaWxsZWQgb3V0LiAgSWYgc28gc2V0IG92ZXJm
bG93IGhlaWdodCBhY2NvcmRpbmdseS4KICAgICBpbnQgYm90dG9tT2ZMaW5lID0gbGluZUJveC0+
Ym90dG9tT3ZlcmZsb3coKTsKLSAgICBpZiAoYm90dG9tT2ZMaW5lID4gbV9oZWlnaHQgJiYgYm90
dG9tT2ZMaW5lID4gbV9vdmVyZmxvd0hlaWdodCkKKyAgICBpZiAoYm90dG9tT2ZMaW5lID4gaGVp
Z2h0KCkgJiYgYm90dG9tT2ZMaW5lID4gbV9vdmVyZmxvd0hlaWdodCkKICAgICAgICAgbV9vdmVy
Zmxvd0hlaWdodCA9IGJvdHRvbU9mTGluZTsKIAogICAgIC8vIE5vdyBtYWtlIHN1cmUgd2UgcGxh
Y2UgcmVwbGFjZWQgcmVuZGVyIG9iamVjdHMgY29ycmVjdGx5LgpAQCAtNzM2LDcgKzczNiw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVWZXJ0aWNhbFBvc2l0aW8KICAgICAgICAgLy8gQWxp
Z24gcG9zaXRpb25lZCBib3hlcyB3aXRoIHRoZSB0b3Agb2YgdGhlIGxpbmUgYm94LiAgVGhpcyBp
cwogICAgICAgICAvLyBhIHJlYXNvbmFibGUgYXBwcm94aW1hdGlvbiBvZiBhbiBhcHByb3ByaWF0
ZSB5IHBvc2l0aW9uLgogICAgICAgICBpZiAoci0+bV9vYmplY3QtPmlzUG9zaXRpb25lZCgpKQot
ICAgICAgICAgICAgci0+bV9ib3gtPnNldFlQb3MobV9oZWlnaHQpOworICAgICAgICAgICAgci0+
bV9ib3gtPnNldFlQb3MoaGVpZ2h0KCkpOwogCiAgICAgICAgIC8vIFBvc2l0aW9uIGlzIHVzZWQg
dG8gcHJvcGVybHkgcG9zaXRpb24gYm90aCByZXBsYWNlZCBlbGVtZW50cyBhbmQKICAgICAgICAg
Ly8gdG8gdXBkYXRlIHRoZSBzdGF0aWMgbm9ybWFsIGZsb3cgeC95IG9mIHBvc2l0aW9uZWQgZWxl
bWVudHMuCkBAIC04MDAsNyArODAwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5l
Q2hpbGRyZW4oYgogICAgIAogICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSAwOwogICAgICAgICAKLSAg
ICBtX2hlaWdodCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOworICAgIHNldEhlaWdodChi
b3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CiAgICAgaW50IHRvQWRkID0gYm9yZGVyQm90dG9t
KCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7CiAKICAg
ICAvLyBGaWd1cmUgb3V0IGlmIHdlIHNob3VsZCBjbGVhciBvdXQgb3VyIGxpbmUgYm94ZXMuCkBA
IC04MzAsNiArODMwLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4o
YgogICAgICAgICB3aGlsZSAobykgewogICAgICAgICAgICAgby0+aW52YWxpZGF0ZVZlcnRpY2Fs
UG9zaXRpb24oKTsKICAgICAgICAgICAgIGlmIChvLT5pc1JlcGxhY2VkKCkgfHwgby0+aXNGbG9h
dGluZygpIHx8IG8tPmlzUG9zaXRpb25lZCgpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94
KiBib3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihvKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbiB8fCBvLT5zdHlsZSgpLT53aWR0aCgp
LmlzUGVyY2VudCgpIHx8IG8tPnN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKQogICAgICAg
ICAgICAgICAgICAgICBvLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKICAgICAg
ICAgICAgICAgICAgICAgCkBAIC04MzgsMTAgKzg0MCwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAgICAgIG8tPnNldFByZWZXaWR0
aHNEaXJ0eSh0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAo
by0+aXNQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIG8tPmNvbnRhaW5pbmdCbG9j
aygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KG8pOworICAgICAgICAgICAgICAgICAgICBvLT5j
b250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChib3gpOwogICAgICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoby0+aXNGbG9hdGluZygpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRzLmFwcGVuZChGbG9hdFdpdGhSZWN0KG8pKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0cy5hcHBlbmQoRmxvYXRXaXRoUmVjdChib3gp
KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZnVsbExheW91dCB8fCBvLT5uZWVkc0xh
eW91dCgpKSAvLyBSZXBsYWNlZCBlbGVtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgby0+
ZGlydHlMaW5lQm94ZXMoZnVsbExheW91dCk7CiAKQEAgLTg5NSw4ICs4OTcsOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAKICAgICAgICAgaWYgKHN0YXJ0TGlu
ZSkgewogICAgICAgICAgICAgdXNlUmVwYWludEJvdW5kcyA9IHRydWU7Ci0gICAgICAgICAgICBy
ZXBhaW50VG9wID0gbV9oZWlnaHQ7Ci0gICAgICAgICAgICByZXBhaW50Qm90dG9tID0gbV9oZWln
aHQ7CisgICAgICAgICAgICByZXBhaW50VG9wID0gaGVpZ2h0KCk7CisgICAgICAgICAgICByZXBh
aW50Qm90dG9tID0gaGVpZ2h0KCk7CiAgICAgICAgICAgICBSZW5kZXJBcmVuYSogYXJlbmEgPSBy
ZW5kZXJBcmVuYSgpOwogICAgICAgICAgICAgUm9vdElubGluZUJveCogYm94ID0gc3RhcnRMaW5l
OwogICAgICAgICAgICAgd2hpbGUgKGJveCkgewpAQCAtOTI5LDcgKzkzMSw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgYm9vbCBlbmRMaW5lTWF0
Y2hlZCA9IGZhbHNlOwogICAgICAgICBib29sIGNoZWNrRm9yRW5kTGluZU1hdGNoID0gZW5kTGlu
ZTsKICAgICAgICAgYm9vbCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IGZhbHNlOwotICAg
ICAgICBpbnQgbGFzdEhlaWdodCA9IG1faGVpZ2h0OworICAgICAgICBpbnQgbGFzdEhlaWdodCA9
IGhlaWdodCgpOwogCiAgICAgICAgIHdoaWxlICghZW5kLmF0RW5kKCkpIHsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNrIG5lY2Vzc2FyeSBiZWZvcmUgdGhlIGZpcnN0IGl0ZXJh
dGlvbiBvciBjYW4gaXQgYmUgbW92ZWQgdG8gdGhlIGVuZD8KQEAgLTEwNzIsNyArMTA3NCw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAg
ICBsYXN0RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBsYXN0SGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAgICAgICBsYXN0SGVp
Z2h0ID0gaGVpZ2h0KCk7CiAgICAgICAgICAgICBzTnVtTWlkcG9pbnRzID0gMDsKICAgICAgICAg
ICAgIHNDdXJyTWlkcG9pbnQgPSAwOwogICAgICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24o
ZW5kKTsKQEAgLTEwODEsNyArMTA4Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGlu
ZUNoaWxkcmVuKGIKICAgICAgICAgaWYgKGVuZExpbmUpIHsKICAgICAgICAgICAgIGlmIChlbmRM
aW5lTWF0Y2hlZCkgewogICAgICAgICAgICAgICAgIC8vIEF0dGFjaCBhbGwgdGhlIHJlbWFpbmlu
ZyBsaW5lcywgYW5kIHRoZW4gYWRqdXN0IHRoZWlyIHktcG9zaXRpb25zIGFzIG5lZWRlZC4KLSAg
ICAgICAgICAgICAgICBpbnQgZGVsdGEgPSBtX2hlaWdodCAtIGVuZExpbmVZUG9zOworICAgICAg
ICAgICAgICAgIGludCBkZWx0YSA9IGhlaWdodCgpIC0gZW5kTGluZVlQb3M7CiAgICAgICAgICAg
ICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsgbGluZTsgbGluZSA9IGxp
bmUtPm5leHRSb290Qm94KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbGluZS0+YXR0YWNoTGlu
ZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGEpIHsKQEAgLTEwODksMTcgKzEwOTEs
MTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9IG1heChyZXBhaW50Qm90dG9tLCBsaW5lLT5i
b3R0b21PdmVyZmxvdygpICsgbWF4KGRlbHRhLCAwKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lLT5hZGp1c3RQb3NpdGlvbigwLCBkZWx0YSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJPYmplY3QqPiogY2xlYW5MaW5l
RmxvYXRzID0gbGluZS0+ZmxvYXRzUHRyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxSZW5kZXJPYmplY3QqPjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoVmVjdG9yPFJlbmRlck9iamVjdCo+Ojpp
dGVyYXRvciBmID0gY2xlYW5MaW5lRmxvYXRzLT5iZWdpbigpOyBmICE9IGVuZDsgKytmKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsb2F0VG9wID0gKCpmKS0+eVBvcygpIC0g
KCpmKS0+bWFyZ2luVG9wKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVy
Qm94Kj4qIGNsZWFuTGluZUZsb2F0cyA9IGxpbmUtPmZsb2F0c1B0cigpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGVuZCA9IGNsZWFuTGlu
ZUZsb2F0cy0+ZW5kKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxSZW5k
ZXJCb3gqPjo6aXRlcmF0b3IgZiA9IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgZiAhPSBlbmQ7
ICsrZikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbG9hdFRvcCA9ICgqZikt
PnkoKSAtICgqZiktPm1hcmdpblRvcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydEZsb2F0aW5nT2JqZWN0KCpmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hl
aWdodCA9IGZsb2F0VG9wICsgZGVsdGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
SGVpZ2h0KGZsb2F0VG9wICsgZGVsdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBv
c2l0aW9uTmV3RmxvYXRzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9oZWlnaHQg
PSBsYXN0Um9vdEJveCgpLT5ibG9ja0hlaWdodCgpOworICAgICAgICAgICAgICAgIHNldEhlaWdo
dChsYXN0Um9vdEJveCgpLT5ibG9ja0hlaWdodCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgLy8gRGVsZXRlIGFsbCB0aGUgcmVtYWluaW5nIGxpbmVzLgogICAgICAg
ICAgICAgICAgIElubGluZVJ1bkJveCogbGluZSA9IGVuZExpbmU7CkBAIC0xMTM1LDE2ICsxMTM3
LDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICBzQ3Vy
ck1pZHBvaW50ID0gMDsKIAogICAgIC8vIE5vdyBhZGQgaW4gdGhlIGJvdHRvbSBib3JkZXIvcGFk
ZGluZy4KLSAgICBtX2hlaWdodCArPSB0b0FkZDsKKyAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyB0
b0FkZCk7CiAKICAgICAvLyBBbHdheXMgbWFrZSBzdXJlIHRoaXMgaXMgYXQgbGVhc3Qgb3VyIGhl
aWdodC4KLSAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1faGVpZ2h0LCBtX292ZXJmbG93SGVp
Z2h0KTsKKyAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KGhlaWdodCgpLCBtX292ZXJmbG93SGVp
Z2h0KTsKIAogICAgIC8vIFNlZSBpZiBhbnkgbGluZXMgc3BpbGwgb3V0IG9mIHRoZSBibG9jay4g
IElmIHNvLCB3ZSBuZWVkIHRvIHVwZGF0ZSBvdXIgb3ZlcmZsb3cgd2lkdGguCiAgICAgY2hlY2tM
aW5lc0Zvck92ZXJmbG93KCk7CiAKICAgICBpZiAoIWZpcnN0TGluZUJveCgpICYmIGhhc0xpbmVJ
ZkVtcHR5KCkpCi0gICAgICAgIG1faGVpZ2h0ICs9IGxpbmVIZWlnaHQodHJ1ZSwgdHJ1ZSk7Cisg
ICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGxpbmVIZWlnaHQodHJ1ZSwgdHJ1ZSkpOwogCiAg
ICAgLy8gU2VlIGlmIHdlIGhhdmUgYW55IGxpbmVzIHRoYXQgc3BpbGwgb3V0IG9mIG91ciBibG9j
ay4gIElmIHdlIGRvLCB0aGVuIHdlIHdpbGwgcG9zc2libHkgbmVlZCB0bwogICAgIC8vIHRydW5j
YXRlIHRleHQuCkBAIC0xMTYxLDEwICsxMTYzLDEwIEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJs
b2NrOjpkZXRlcm1pbmVTdGEKICAgICBpZiAoIWZ1bGxMYXlvdXQpIHsKICAgICAgICAgc2l6ZV90
IGZsb2F0SW5kZXggPSAwOwogICAgICAgICBmb3IgKGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3Vy
ciAmJiAhY3Vyci0+aXNEaXJ0eSgpOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgewotICAg
ICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJPYmplY3QqPiogY2xlYW5MaW5lRmxvYXRzID0gY3Vy
ci0+ZmxvYXRzUHRyKCkpIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8UmVuZGVyT2JqZWN0Kj46
Oml0ZXJhdG9yIGVuZCA9IGNsZWFuTGluZUZsb2F0cy0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAg
Zm9yIChWZWN0b3I8UmVuZGVyT2JqZWN0Kj46Oml0ZXJhdG9yIG8gPSBjbGVhbkxpbmVGbG9hdHMt
PmJlZ2luKCk7IG8gIT0gZW5kOyArK28pIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBmID0gKm87CisgICAgICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckJveCo+KiBjbGVhbkxp
bmVGbG9hdHMgPSBjdXJyLT5mbG9hdHNQdHIoKSkgeworICAgICAgICAgICAgICAgIFZlY3RvcjxS
ZW5kZXJCb3gqPjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgbyA9IGNsZWFuTGlu
ZUZsb2F0cy0+YmVnaW4oKTsgbyAhPSBlbmQ7ICsrbykgeworICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJCb3gqIGYgPSAqbzsKICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSBuZXdTaXplKGYt
PndpZHRoKCkgKyBmLT5tYXJnaW5MZWZ0KCkgK2YtPm1hcmdpblJpZ2h0KCksIGYtPmhlaWdodCgp
ICsgZi0+bWFyZ2luVG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20oKSk7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChmbG9hdEluZGV4IDwgZmxvYXRzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChmbG9hdHNbZmxvYXRJbmRleF0ub2JqZWN0ICE9IGYpIHsKQEAgLTEyMjYsMTUgKzEy
MjgsMTUgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YQogCiAgICAg
bnVtQ2xlYW5GbG9hdHMgPSAwOwogICAgIGlmICghZmxvYXRzLmlzRW1wdHkoKSkgewotICAgICAg
ICBpbnQgc2F2ZWRIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgaW50IHNhdmVkSGVpZ2h0ID0g
aGVpZ2h0KCk7CiAgICAgICAgIC8vIFJlc3RvcmUgZmxvYXRzIGZyb20gY2xlYW4gbGluZXMuCiAg
ICAgICAgIFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBmaXJzdFJvb3RCb3goKTsKICAgICAgICAgd2hp
bGUgKGxpbmUgIT0gY3VycikgewotICAgICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJPYmplY3Qq
PiogY2xlYW5MaW5lRmxvYXRzID0gbGluZS0+ZmxvYXRzUHRyKCkpIHsKLSAgICAgICAgICAgICAg
ICBWZWN0b3I8UmVuZGVyT2JqZWN0Kj46Oml0ZXJhdG9yIGVuZCA9IGNsZWFuTGluZUZsb2F0cy0+
ZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChWZWN0b3I8UmVuZGVyT2JqZWN0Kj46Oml0ZXJh
dG9yIGYgPSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCk7IGYgIT0gZW5kOyArK2YpIHsKKyAgICAg
ICAgICAgIGlmIChWZWN0b3I8UmVuZGVyQm94Kj4qIGNsZWFuTGluZUZsb2F0cyA9IGxpbmUtPmZs
b2F0c1B0cigpKSB7CisgICAgICAgICAgICAgICAgVmVjdG9yPFJlbmRlckJveCo+OjppdGVyYXRv
ciBlbmQgPSBjbGVhbkxpbmVGbG9hdHMtPmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoVmVj
dG9yPFJlbmRlckJveCo+OjppdGVyYXRvciBmID0gY2xlYW5MaW5lRmxvYXRzLT5iZWdpbigpOyBm
ICE9IGVuZDsgKytmKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0
KCpmKTsKLSAgICAgICAgICAgICAgICAgICAgbV9oZWlnaHQgPSAoKmYpLT55UG9zKCkgLSAoKmYp
LT5tYXJnaW5Ub3AoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0SGVpZ2h0KCgqZiktPnkoKSAt
ICgqZiktPm1hcmdpblRvcCgpKTsKICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9h
dHMoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0c1tudW1DbGVhbkZsb2F0c10u
b2JqZWN0ID09ICpmKTsKICAgICAgICAgICAgICAgICAgICAgbnVtQ2xlYW5GbG9hdHMrKzsKQEAg
LTEyNDIsNyArMTI0NCw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVT
dGEKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgp
OwogICAgICAgICB9Ci0gICAgICAgIG1faGVpZ2h0ID0gc2F2ZWRIZWlnaHQ7CisgICAgICAgIHNl
dEhlaWdodChzYXZlZEhlaWdodCk7CiAgICAgfQogCiAgICAgbV9maXJzdExpbmUgPSAhbGFzdDsK
QEAgLTEyNTEsNyArMTI1Myw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1p
bmVTdGEKICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0T2JqOwogICAgIGludCBwb3MgPSAwOwogICAg
IGlmIChsYXN0KSB7Ci0gICAgICAgIG1faGVpZ2h0ID0gbGFzdC0+YmxvY2tIZWlnaHQoKTsKKyAg
ICAgICAgc2V0SGVpZ2h0KGxhc3QtPmJsb2NrSGVpZ2h0KCkpOwogICAgICAgICBzdGFydE9iaiA9
IGxhc3QtPmxpbmVCcmVha09iaigpOwogICAgICAgICBwb3MgPSBsYXN0LT5saW5lQnJlYWtQb3Mo
KTsKICAgICAgICAgcmVzb2x2ZXIuc2V0U3RhdHVzKGxhc3QtPmxpbmVCcmVha0JpZGlTdGF0dXMo
KSk7CkBAIC0xMzExLDEyICsxMzEzLDEyIEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRM
aW5lKGNvbnN0IEkKICAgICAgICAgaWYgKHJlc29sdmVyLnN0YXR1cygpICE9IGVuZExpbmVTdGF0
dXMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaW50IGRlbHRhID0gbV9o
ZWlnaHQgLSBlbmRZUG9zOworICAgICAgICBpbnQgZGVsdGEgPSBoZWlnaHQoKSAtIGVuZFlQb3M7
CiAgICAgICAgIGlmICghZGVsdGEgfHwgIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICAgICAgLy8gU2VlIGlmIGFueSBmbG9hdHMgZW5kIGluIHRoZSBy
YW5nZSBhbG9uZyB3aGljaCB3ZSB3YW50IHRvIHNoaWZ0IHRoZSBsaW5lcyB2ZXJ0aWNhbGx5Lgot
ICAgICAgICBpbnQgdG9wID0gbWluKG1faGVpZ2h0LCBlbmRZUG9zKTsKKyAgICAgICAgaW50IHRv
cCA9IG1pbihoZWlnaHQoKSwgZW5kWVBvcyk7CiAKICAgICAgICAgUm9vdElubGluZUJveCogbGFz
dExpbmUgPSBlbmRMaW5lOwogICAgICAgICB3aGlsZSAoUm9vdElubGluZUJveCogbmV4dExpbmUg
PSBsYXN0TGluZS0+bmV4dFJvb3RCb3goKSkKQEAgLTEzNDcsMTAgKzEzNDksMTAgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoY29uc3QgSQogICAgICAgICAgICAgaWYgKHJlc3Vs
dCkKICAgICAgICAgICAgICAgICBlbmRZUG9zID0gbGluZS0+YmxvY2tIZWlnaHQoKTsKIAotICAg
ICAgICAgICAgaW50IGRlbHRhID0gbV9oZWlnaHQgLSBlbmRZUG9zOworICAgICAgICAgICAgaW50
IGRlbHRhID0gaGVpZ2h0KCkgLSBlbmRZUG9zOwogICAgICAgICAgICAgaWYgKGRlbHRhICYmIG1f
ZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIGFueSBmbG9hdHMg
ZW5kIGluIHRoZSByYW5nZSBhbG9uZyB3aGljaCB3ZSB3YW50IHRvIHNoaWZ0IHRoZSBsaW5lcyB2
ZXJ0aWNhbGx5LgotICAgICAgICAgICAgICAgIGludCB0b3AgPSBtaW4obV9oZWlnaHQsIGVuZFlQ
b3MpOworICAgICAgICAgICAgICAgIGludCB0b3AgPSBtaW4oaGVpZ2h0KCksIGVuZFlQb3MpOwog
CiAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogbGFzdExpbmUgPSBlbmRMaW5lOwogICAg
ICAgICAgICAgICAgIHdoaWxlIChSb290SW5saW5lQm94KiBuZXh0TGluZSA9IGxhc3RMaW5lLT5u
ZXh0Um9vdEJveCgpKQpAQCAtMTQ1OSw3ICsxNDYxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2tp
cFRyYWlsaW5nV2hpdGVzcGFjZQogICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSAmJiAhcmVx
dWlyZXNMaW5lQm94KGl0ZXJhdG9yKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9
IGl0ZXJhdG9yLm9iajsKICAgICAgICAgaWYgKG9iamVjdC0+aXNGbG9hdGluZygpKSB7Ci0gICAg
ICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdChvYmplY3QpOworICAgICAgICAgICAgaW5zZXJ0
RmxvYXRpbmdPYmplY3Qoc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ob2JqZWN0KSk7CiAgICAgICAg
IH0gZWxzZSBpZiAob2JqZWN0LT5pc1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgLy8gRklY
TUU6IFRoZSBtYXRoIGhlcmUgaXMgYWN0dWFsbHkgbm90IHJlYWxseSByaWdodC4gIEl0J3MgYSBi
ZXN0LWd1ZXNzIGFwcHJveGltYXRpb24gdGhhdAogICAgICAgICAgICAgLy8gd2lsbCB3b3JrIGZv
ciB0aGUgY29tbW9uIGNhc2VzCkBAIC0xNDY4LDE5ICsxNDcwLDE5IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnNraXBUcmFpbGluZ1doaXRlc3BhY2UKICAgICAgICAgICAgICAgICAvLyBBIHJlbGF0aXZl
IHBvc2l0aW9uZWQgaW5saW5lIGVuY2xvc2VzIHVzLiAgSW4gdGhpcyBjYXNlLCB3ZSBhbHNvIGhh
dmUgdG8gZGV0ZXJtaW5lIG91cgogICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIGFzIHRob3Vn
aCB3ZSB3ZXJlIGFuIGlubGluZS4gIFNldCB8c3RhdGljWHwgYW5kIHxzdGF0aWNZfCBvbiB0aGUg
cmVsYXRpdmUgcG9zaXRpb25lZAogICAgICAgICAgICAgICAgIC8vIGlubGluZSBzbyB0aGF0IHdl
IGNhbiBvYnRhaW4gdGhlIHZhbHVlIGxhdGVyLgotICAgICAgICAgICAgICAgIGMtPnNldFN0YXRp
Y1goc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbGVmdE9mZnNldChtX2hlaWdodCkgOiBy
aWdodE9mZnNldChtX2hlaWdodCkpOwotICAgICAgICAgICAgICAgIGMtPnNldFN0YXRpY1kobV9o
ZWlnaHQpOworICAgICAgICAgICAgICAgIGMtPnNldFN0YXRpY1goc3R5bGUoKS0+ZGlyZWN0aW9u
KCkgPT0gTFRSID8gbGVmdE9mZnNldChoZWlnaHQoKSkgOiByaWdodE9mZnNldChoZWlnaHQoKSkp
OworICAgICAgICAgICAgICAgIGMtPnNldFN0YXRpY1koaGVpZ2h0KCkpOwogICAgICAgICAgICAg
fQogICAgIAogICAgICAgICAgICAgaWYgKG9iamVjdC0+aGFzU3RhdGljWCgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKG9iamVjdC0+c3R5bGUoKS0+aXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBl
KCkpCi0gICAgICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0U3RhdGljWChzdHlsZSgpLT5kaXJl
Y3Rpb24oKSA9PSBMVFIgPyBsZWZ0T2Zmc2V0KG1faGVpZ2h0KSA6IHdpZHRoKCkgLSByaWdodE9m
ZnNldChtX2hlaWdodCkpOworICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnNldFN0YXRpY1go
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbGVmdE9mZnNldChoZWlnaHQoKSkgOiB3aWR0
aCgpIC0gcmlnaHRPZmZzZXQoaGVpZ2h0KCkpKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0U3RhdGljWChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyUmlnaHQoKSArIHBh
ZGRpbmdSaWdodCgpKTsKICAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIGlmIChvYmpl
Y3QtPmhhc1N0YXRpY1koKSkKLSAgICAgICAgICAgICAgICBvYmplY3QtPnNldFN0YXRpY1kobV9o
ZWlnaHQpOworICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0U3RhdGljWShoZWlnaHQoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgaXRlcmF0b3IuaW5jcmVtZW50KCk7CiAgICAgfQpAQCAtMTQ4OCwx
MyArMTQ5MCwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpza2lwVHJhaWxpbmdXaGl0ZXNwYWNlCiAK
IGludCBSZW5kZXJCbG9jazo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZl
ciYgcmVzb2x2ZXIpCiB7Ci0gICAgaW50IGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRoKG1faGVp
Z2h0KTsKKyAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBsaW5lV2lkdGgoaGVpZ2h0KCkpOwogICAg
IHdoaWxlICghcmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3go
cmVzb2x2ZXIucG9zaXRpb24oKSkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBy
ZXNvbHZlci5wb3NpdGlvbigpLm9iajsKICAgICAgICAgaWYgKG9iamVjdC0+aXNGbG9hdGluZygp
KSB7Ci0gICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdChvYmplY3QpOworICAgICAgICAg
ICAgaW5zZXJ0RmxvYXRpbmdPYmplY3Qoc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ob2JqZWN0KSk7
CiAgICAgICAgICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOwotICAgICAgICAgICAgYXZhaWxhYmxl
V2lkdGggPSBsaW5lV2lkdGgobV9oZWlnaHQpOworICAgICAgICAgICAgYXZhaWxhYmxlV2lkdGgg
PSBsaW5lV2lkdGgoaGVpZ2h0KCkpOwogICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC0+aXNQb3Np
dGlvbmVkKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgbWF0aCBoZXJlIGlzIGFjdHVh
bGx5IG5vdCByZWFsbHkgcmlnaHQuICBJdCdzIGEgYmVzdC1ndWVzcyBhcHByb3hpbWF0aW9uIHRo
YXQKICAgICAgICAgICAgIC8vIHdpbGwgd29yayBmb3IgdGhlIGNvbW1vbiBjYXNlcwpAQCAtMTUw
MywxOSArMTUwNSwxOSBAQCBpbnQgUmVuZGVyQmxvY2s6OnNraXBMZWFkaW5nV2hpdGVzcGFjZShJ
CiAgICAgICAgICAgICAgICAgLy8gQSByZWxhdGl2ZSBwb3NpdGlvbmVkIGlubGluZSBlbmNsb3Nl
cyB1cy4gIEluIHRoaXMgY2FzZSwgd2UgYWxzbyBoYXZlIHRvIGRldGVybWluZSBvdXIKICAgICAg
ICAgICAgICAgICAvLyBwb3NpdGlvbiBhcyB0aG91Z2ggd2Ugd2VyZSBhbiBpbmxpbmUuICBTZXQg
fHN0YXRpY1h8IGFuZCB8c3RhdGljWXwgb24gdGhlIHJlbGF0aXZlIHBvc2l0aW9uZWQKICAgICAg
ICAgICAgICAgICAvLyBpbmxpbmUgc28gdGhhdCB3ZSBjYW4gb2J0YWluIHRoZSB2YWx1ZSBsYXRl
ci4KLSAgICAgICAgICAgICAgICBjLT5zZXRTdGF0aWNYKHN0eWxlKCktPmRpcmVjdGlvbigpID09
IExUUiA/IGxlZnRPZmZzZXQobV9oZWlnaHQpIDogcmlnaHRPZmZzZXQobV9oZWlnaHQpKTsKLSAg
ICAgICAgICAgICAgICBjLT5zZXRTdGF0aWNZKG1faGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBj
LT5zZXRTdGF0aWNYKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGxlZnRPZmZzZXQoaGVp
Z2h0KCkpIDogcmlnaHRPZmZzZXQoaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAgICBjLT5zZXRT
dGF0aWNZKGhlaWdodCgpKTsKICAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIGlmIChv
YmplY3QtPmhhc1N0YXRpY1goKSkgewogICAgICAgICAgICAgICAgIGlmIChvYmplY3QtPnN0eWxl
KCktPmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlwZSgpKQotICAgICAgICAgICAgICAgICAgICBv
YmplY3QtPnNldFN0YXRpY1goc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbGVmdE9mZnNl
dChtX2hlaWdodCkgOiB3aWR0aCgpIC0gcmlnaHRPZmZzZXQobV9oZWlnaHQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgb2JqZWN0LT5zZXRTdGF0aWNYKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UiA/IGxlZnRPZmZzZXQoaGVpZ2h0KCkpIDogd2lkdGgoKSAtIHJpZ2h0T2Zmc2V0KGhlaWdodCgp
KSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnNl
dFN0YXRpY1goc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gYm9yZGVyTGVmdCgpICsgcGFk
ZGluZ0xlZnQoKSA6IGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSk7CiAgICAgICAgICAg
ICB9CiAgICAgCiAgICAgICAgICAgICBpZiAob2JqZWN0LT5oYXNTdGF0aWNZKCkpCi0gICAgICAg
ICAgICAgICAgb2JqZWN0LT5zZXRTdGF0aWNZKG1faGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBv
YmplY3QtPnNldFN0YXRpY1koaGVpZ2h0KCkpOwogICAgICAgICB9CiAgICAgICAgIHJlc29sdmVy
LmluY3JlbWVudCgpOwogICAgIH0KQEAgLTE1NDUsNyArMTU0Nyw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmZpdEJlbG93RmxvYXRzKGludCB3aWQKICAgICBBU1NFUlQod2lkdGhUb0ZpdCA+IGF2YWls
YWJsZVdpZHRoKTsKIAogICAgIGludCBmbG9hdEJvdHRvbTsKLSAgICBpbnQgbGFzdEZsb2F0Qm90
dG9tID0gbV9oZWlnaHQ7CisgICAgaW50IGxhc3RGbG9hdEJvdHRvbSA9IGhlaWdodCgpOwogICAg
IGludCBuZXdMaW5lV2lkdGggPSBhdmFpbGFibGVXaWR0aDsKICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgICBmbG9hdEJvdHRvbSA9IG5leHRGbG9hdEJvdHRvbUJlbG93KGxhc3RGbG9hdEJvdHRv
bSk7CkBAIC0xNTU5LDcgKzE1NjEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpmaXRCZWxvd0Zsb2F0
cyhpbnQgd2lkCiAgICAgfQogCiAgICAgaWYgKG5ld0xpbmVXaWR0aCA+IGF2YWlsYWJsZVdpZHRo
KSB7Ci0gICAgICAgIG1faGVpZ2h0ID0gbGFzdEZsb2F0Qm90dG9tOworICAgICAgICBzZXRIZWln
aHQobGFzdEZsb2F0Qm90dG9tKTsKICAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBuZXdMaW5lV2lk
dGg7CiAgICAgfQogfQpAQCAtMTY1MiwxMyArMTY1NCwxNCBAQCBJbmxpbmVJdGVyYXRvciBSZW5k
ZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgIGlmIChvLT5pc0Zsb2F0aW5nT3JQb3NpdGlv
bmVkKCkpIHsKICAgICAgICAgICAgIC8vIGFkZCB0byBzcGVjaWFsIG9iamVjdHMuLi4KICAgICAg
ICAgICAgIGlmIChvLT5pc0Zsb2F0aW5nKCkpIHsKLSAgICAgICAgICAgICAgICBpbnNlcnRGbG9h
dGluZ09iamVjdChvKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGZsb2F0Qm94ID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyQm94Kj4obyk7CisgICAgICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdP
YmplY3QoZmxvYXRCb3gpOwogICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGl0IGZpdHMgaW4g
dGhlIGN1cnJlbnQgbGluZS4KICAgICAgICAgICAgICAgICAvLyBJZiBpdCBkb2VzLCBwb3NpdGlv
biBpdCBub3csIG90aGVyd2lzZSwgcG9zaXRpb24KICAgICAgICAgICAgICAgICAvLyBpdCBhZnRl
ciBtb3ZpbmcgdG8gbmV4dCBsaW5lIChpbiBuZXdMaW5lKCkgZnVuYykKLSAgICAgICAgICAgICAg
ICBpZiAoZmxvYXRzRml0T25MaW5lICYmIG8tPndpZHRoKCkgKyBvLT5tYXJnaW5MZWZ0KCkgKyBv
LT5tYXJnaW5SaWdodCgpICsgdyArIHRtcFcgPD0gd2lkdGgpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZmxvYXRzRml0T25MaW5lICYmIGZsb2F0Qm94LT53aWR0aCgpICsgZmxvYXRCb3gtPm1hcmdp
bkxlZnQoKSArIGZsb2F0Qm94LT5tYXJnaW5SaWdodCgpICsgdyArIHRtcFcgPD0gd2lkdGgpIHsK
ICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKLSAgICAgICAgICAgICAg
ICAgICAgd2lkdGggPSBsaW5lV2lkdGgobV9oZWlnaHQpOworICAgICAgICAgICAgICAgICAgICB3
aWR0aCA9IGxpbmVXaWR0aChoZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0c0ZpdE9uTGluZSA9IGZhbHNlOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChvLT5pc1Bvc2l0aW9uZWQoKSkgewpAQCAtMTY3Nyw3ICsxNjgwLDcgQEAgSW5saW5l
SXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgICAgICAgICAgICAgIC8vIGFu
ZCBkZXRlcm1pbmUgb3VyIHN0YXRpYyB5IHBvc2l0aW9uIG5vdy4KICAgICAgICAgICAgICAgICBi
b29sIG5lZWRUb1NldFN0YXRpY1kgPSBvLT5oYXNTdGF0aWNZKCk7CiAgICAgICAgICAgICAgICAg
aWYgKG8tPmhhc1N0YXRpY1koKSAmJiBpc0lubGluZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgby0+c2V0U3RhdGljWShtX2hlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIG8tPnNldFN0
YXRpY1koaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgICAgICBuZWVkVG9TZXRTdGF0aWNZID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMTcyNiw2ICsx
NzI5LDggQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgICAg
ICAgICAgdG1wVyArPSBvLT5tYXJnaW5MZWZ0KCkgKyBvLT5ib3JkZXJMZWZ0KCkgKyBvLT5wYWRk
aW5nTGVmdCgpICsKICAgICAgICAgICAgICAgICAgICAgby0+bWFyZ2luUmlnaHQoKSArIG8tPmJv
cmRlclJpZ2h0KCkgKyBvLT5wYWRkaW5nUmlnaHQoKTsKICAgICAgICAgfSBlbHNlIGlmIChvLT5p
c1JlcGxhY2VkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCogcmVwbGFjZWRCb3ggPSBzdGF0
aWNfY2FzdDxSZW5kZXJCb3gqPihvKTsKKwogICAgICAgICAgICAgLy8gQnJlYWsgb24gcmVwbGFj
ZWQgZWxlbWVudHMgaWYgZWl0aGVyIGhhcyBub3JtYWwgd2hpdGUtc3BhY2UuCiAgICAgICAgICAg
ICBpZiAoKGF1dG9XcmFwIHx8IFJlbmRlclN0eWxlOjphdXRvV3JhcChsYXN0V1MpKSAmJiAoIW8t
PmlzSW1hZ2UoKSB8fCBhbGxvd0ltYWdlc1RvQnJlYWspKSB7CiAgICAgICAgICAgICAgICAgdyAr
PSB0bXBXOwpAQCAtMTc1NSw3ICsxNzYwLDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6
OmZpbmROZXh0TGluZQogICAgICAgICAgICAgICAgICAgICBpZ25vcmluZ1NwYWNlcyA9IHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
dG1wVyArPSBvLT53aWR0aCgpICsgby0+bWFyZ2luTGVmdCgpICsgby0+bWFyZ2luUmlnaHQoKSAr
IGlubGluZVdpZHRoKG8pOworICAgICAgICAgICAgICAgIHRtcFcgKz0gcmVwbGFjZWRCb3gtPndp
ZHRoKCkgKyByZXBsYWNlZEJveC0+bWFyZ2luTGVmdCgpICsgcmVwbGFjZWRCb3gtPm1hcmdpblJp
Z2h0KCkgKyBpbmxpbmVXaWR0aChvKTsKICAgICAgICAgfSBlbHNlIGlmIChvLT5pc1RleHQoKSkg
ewogICAgICAgICAgICAgaWYgKCFwb3MpCiAgICAgICAgICAgICAgICAgYXBwbGllZFN0YXJ0V2lk
dGggPSBmYWxzZTsKQEAgLTIxNzIsNyArMjE3Nyw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJs
b2NrOjpmaW5kTmV4dExpbmUKIAogdm9pZCBSZW5kZXJCbG9jazo6Y2hlY2tMaW5lc0Zvck92ZXJm
bG93KCkKIHsKLSAgICBtX292ZXJmbG93V2lkdGggPSBtX3dpZHRoOworICAgIG1fb3ZlcmZsb3dX
aWR0aCA9IHdpZHRoKCk7CiAgICAgZm9yIChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290
Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgIG1fb3Zl
cmZsb3dMZWZ0ID0gbWluKGN1cnItPmxlZnRPdmVyZmxvdygpLCBtX292ZXJmbG93TGVmdCk7CiAg
ICAgICAgIG1fb3ZlcmZsb3dUb3AgPSBtaW4oY3Vyci0+dG9wT3ZlcmZsb3coKSwgbV9vdmVyZmxv
d1RvcCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9zdmcv
U1ZHTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDggKzMwMSwxMSBAQCBmbG9hdCBT
VkdMZW5ndGg6OlBlcmNlbnRhZ2VPZlZpZXdwb3J0KGZsCiAgICAgICAgIH0KICAgICB9IGVsc2Ug
aWYgKGNvbnRleHQtPnBhcmVudCgpICYmICFjb250ZXh0LT5wYXJlbnQoKS0+aXNTVkdFbGVtZW50
KCkpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb250ZXh0LT5yZW5k
ZXJlcigpKSB7Ci0gICAgICAgICAgICB3aWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpOwotICAgICAg
ICAgICAgaGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpOworICAgICAgICAgICAgaWYgKHJlbmRl
cmVyLT5pc0JveCgpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSBzdGF0aWNf
Y2FzdDxSZW5kZXJCb3gqPihyZW5kZXJlcik7CisgICAgICAgICAgICAgICAgd2lkdGggPSBib3gt
PndpZHRoKCk7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gYm94LT5oZWlnaHQoKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlJlbmRlck5vZGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRl
ck5vZGUubW0JKHJldmlzaW9uIDQwMDc1KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRl
ck5vZGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgIldlYkZy
YW1lVmlldy5oIgogI2ltcG9ydCAiV2ViSFRNTFZpZXcuaCIKICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJXaWRnZXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9XaWRnZXQuaD4KQEAgLTg4LDggKzg5LDI3IEBAIHN0YXRpYyBXZWJSZW5kZXJOb2Rl
ICpjb3B5UmVuZGVyTm9kZShSZW4KIAogICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCB0cmFuc2Zv
cm1zCiAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBub2RlLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQ
b2ludCgpKTsKKyAgICBpbnQgeCA9IDA7CisgICAgaW50IHkgPSAwOworICAgIGludCB3aWR0aCA9
IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisgICAgaWYgKG5vZGUtPmlzQm94KCkpIHsKKyAgICAg
ICAgUmVuZGVyQm94KiBib3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihub2RlKTsKKyAgICAg
ICAgeCA9IGJveC0+eCgpOworICAgICAgICB5ID0gYm94LT55KCk7CisgICAgICAgIHdpZHRoID0g
Ym94LT53aWR0aCgpOworICAgICAgICBoZWlnaHQgPSBib3gtPmhlaWdodCgpOworICAgIH0gZWxz
ZSBpZiAobm9kZS0+aXNUZXh0KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFByZXNlcnZlIG9sZCBi
ZWhhdmlvciBldmVuIHRob3VnaCBpdCdzIHN0cmFuZ2UuCisgICAgICAgIFJlbmRlclRleHQqIHRl
eHQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obm9kZSk7CisgICAgICAgIHggPSB0ZXh0LT5m
aXJzdFJ1blgoKTsKKyAgICAgICAgeSA9IHRleHQtPmZpcnN0UnVuWSgpOworICAgICAgICB3aWR0
aCA9IHRleHQtPmJvdW5kaW5nQm94V2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gdGV4dC0+Ym91
bmRpbmdCb3hIZWlnaHQoKTsKKyAgICB9CisgICAgCiAgICAgV2ViUmVuZGVyTm9kZSAqcmVzdWx0
ID0gW1tXZWJSZW5kZXJOb2RlIGFsbG9jXSBpbml0V2l0aE5hbWU6bmFtZQotICAgICAgICBwb3Np
dGlvbjphYnNQb3MgcmVjdDpOU01ha2VSZWN0KG5vZGUtPnhQb3MoKSwgbm9kZS0+eVBvcygpLCBu
b2RlLT53aWR0aCgpLCBub2RlLT5oZWlnaHQoKSkKKyAgICAgICAgcG9zaXRpb246YWJzUG9zIHJl
Y3Q6TlNNYWtlUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KQogICAgICAgICB2aWV3OnZpZXcgY2hp
bGRyZW46Y2hpbGRyZW5dOwogCiAgICAgW25hbWUgcmVsZWFzZV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26914</attachid>
            <date>2009-01-21 16:13:05 -0800</date>
            <delta_ts>2009-01-21 16:58:57 -0800</delta_ts>
            <desc>Patch that passes all layout tests</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>415419</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDEwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTM1IEBACisyMDA5LTAxLTIxICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzQ1MworCisgICAgICAgIERldmlydHVhbGl6ZSB0aGUgd2lkdGgvaGVpZ2h0L3gveSBt
ZXRob2RzIG9mIHRoZSByZW5kZXIgdHJlZS4gIFRoZSBtZXRob2RzIGFyZSBub3cgbm9uLXZpcnR1
YWwgb24gUmVuZGVyQm94LgorICAgICAgICBNYW55IGZ1bmN0aW9ucyB0aGF0IHdlcmUgcHJldmlv
dXNseSBpbiBSZW5kZXJPYmplY3QuY3BwIGFyZSBub3cgaW4gUmVuZGVyQm94LmNwcC4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuYmFz
ZS5leHA6CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzaXppbmdCb3gpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENvcm5l
cik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpnZXRMb3dlclJpZ2h0Q29ybmVy
KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpvZmZzZXRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Om9mZnNldFRvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpvZmZzZXRXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpvZmZzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6b2Zm
c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNsaWVudExlZnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xpZW50VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OmNsaWVudFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNsaWVudEhl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzY3JvbGxMZWZ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRv
cCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzY3JvbGxXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpzY3JvbGxIZWlnaHQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbmRlckJveCk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpnZXRSZWN0KToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAqIGRvbS9Qb3Np
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5j
dFBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6aGFzUmVuZGVyZWROb25B
bm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRp
b246OmlzQ2FuZGlkYXRlKToKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSk6CisgICAgICAg
ICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVFZGl0Q29tbWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKToKKyAgICAg
ICAgKiBlZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6aXNEZWxldGFibGVFbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
cmVtb3ZlTm9kZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjppbnNpZGVWaXNpYmxlQXJlYSk6CisgICAgICAgICogZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZlcnRpY2FsU2Nyb2xsRGlzdGFuY2Up
OgorICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2FibGUpOgorICAgICAgICAqIGh0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OndpbGxEcmF3KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNGb2N1c2Fi
bGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpoZWlnaHQpOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdl
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmRyYXdOb2RlSGlnaGxpZ2h0KToKKyAgICAgICAgKiBwYWdlL0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgICogcGFn
ZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpjcmVhdGVTY3Jv
bGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVEYXNoYm9hcmRSZWdp
b25zKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aW1hZ2VSZWN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUJveDo6cmVuZGVyQm94KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6YWRqdXN0UG9z
aXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94
OjpwbGFjZUJveGVzSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dC
b3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dC
b3g6OnBsYWNlQm94ZXNWZXJ0aWNhbGx5KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQXBwbGV0OjpjcmVhdGVXaWRnZXRJZk5lY2Vzc2FyeSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpvdmVyZmxvd0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6b3Zl
cmZsb3dXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6b3ZlcmZsb3dSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1NlbGZDb2xsYXBzaW5nQmxvY2sp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmFkanVzdFBvc2l0aW9uZWRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6aGFuZGxlU3BlY2lhbENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpo
YW5kbGVQb3NpdGlvbmVkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omhh
bmRsZUZsb2F0aW5nQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmhhbmRs
ZUNvbXBhY3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0Q29t
cGFjdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoYW5kbGVSdW5J
bkNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmVzdGltYXRlVmVydGljYWxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lSG9yaXpvbnRhbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoYW5kbGVCb3R0b21PZkJsb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRPbmx5UG9zaXRpb25lZE9iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmpl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXJrUG9zaXRpb25lZE9iamVj
dHNGb3JMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVy
aGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpwYWludEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
cGFpbnRDb250aW51YXRpb25PdXRsaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpjbGlwT3V0UG9z
aXRpb25lZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpbGxTZWxl
Y3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpmaWxsQmxvY2tTZWxl
Y3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsZWZ0U2VsZWN0aW9u
T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyaWdodFNlbGVjdGlvbk9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0UG9zaXRpb25lZE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25lZE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25lZE9i
amVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5ld0xpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6Omxvd2VzdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpyaWdodG1vc3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGVmdG1vc3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xl
YXJGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5n
RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXJrQWxsRGVzY2VuZGFu
dHNXaXRoRmxvYXRzRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpn
ZXRDbGVhckRlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JDb29yZGluYXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Z2V0QmFzZWxpbmVPZkZpcnN0TGluZUJveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Z2V0QmFzZWxpbmVPZkxhc3RMaW5lQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OmdldEhlaWdodEZvckxpbmVDb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdFdp
dGhSZWN0OjpGbG9hdFdpdGhSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpo
YXNPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Q29t
cGFjdEluZm86OmNvbXBhY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkNvbXBh
Y3RJbmZvOjpzZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpSZW5kZXJCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpvZmZzZXRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b2Zmc2V0
VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b2Zmc2V0UGFyZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpZW50V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpjbGllbnRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpz
Y3JvbGxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbExlZnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjpzY3JvbGxUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xs
VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmFic29sdXRlUXVhZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6YWJzb2x1dGVPdXRsaW5lQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZWZsZWN0
aW9uQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVmbGVjdGlvbk9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlZmxlY3RlZFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpvdmVycmlkZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6b3ZlcnJpZGVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpu
b2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bWFza0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6cmVwYWludExheWVyUmVjdHNGb3JJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6Z2V0T3ZlcmZsb3dDbGlwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmdldENsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFpbmlu
Z0Jsb2NrV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvZmZzZXRGcm9tQ29udGFpbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6Y2FsY1dpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6Y2FsY1dpZHRoVXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjSG9y
aXpvbnRhbE1hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjSGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FsY1BlcmNlbnRhZ2VIZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjUmVwbGFjZWRIZWlnaHRVc2luZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja1dpZHRoRm9yUG9zaXRp
b25lZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0hlaWdo
dEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJzb2x1
dGVIb3Jpem9udGFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FsY0Fic29sdXRl
VmVydGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0
aWNhbFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhv
cml6b250YWxSZXBsYWNlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbGNBYnNv
bHV0ZVZlcnRpY2FsUmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2Nh
bENhcmV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omxvd2VzdFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmlnaHRtb3N0UG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpsZWZ0bW9zdFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6bG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OngpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp5KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpo
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRYKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0WSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNl
dFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0SGVpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0TG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6bW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmZyYW1l
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldEZyYW1lUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmJvcmRlckJveFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb250ZW50Qm94UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnByZXZpb3VzU2libGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5l
eHRTaWJsaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFyZW50Qm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3ZlcmZsb3dIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd1dpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6c2V0T3ZlcmZsb3dIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpzZXRPdmVyZmxvd1dpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3ZlcmZs
b3dMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3ZlcmZsb3dUb3ApOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb250ZW50V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb250ZW50SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b2Zmc2V0V2lk
dGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvZmZzZXRIZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGllbnRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6Y2xpZW50VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YXZhaWxh
YmxlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp0cnlMYXlvdXREb2luZ1Bv
c2l0aW9uZWRNb3ZlbWVudE9ubHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCdXR0b24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpjb250cm9sQ2xpcFJlY3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29u
dGFpbmVyOjpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQ29udGFpbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OmZpcnN0
Q2hpbGRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjpsYXN0Q2hpbGRC
b3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGaWVsZHNldDo6Y2FsY1ByZWZXaWR0aHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmllbGRzZXQ6OmxheW91dExlZ2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGaWVsZHNldDo6ZmluZExlZ2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWVsZHNl
dDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWVsZHNl
dDo6cGFpbnRNYXNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6Om1heEZpbGVuYW1lV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmxleEJveEl0ZXJhdG9yOjpGbGV4Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
RmxleEJveEl0ZXJhdG9yOjpmaXJzdCk6CisgICAgICAgIChXZWJDb3JlOjpGbGV4Qm94SXRlcmF0
b3I6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmNhbGNIb3Jp
em9udGFsUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6
Y2FsY1ZlcnRpY2FsUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJs
ZUJveDo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6
OmxheW91dEhvcml6b250YWxCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVC
b3g6OmxheW91dFZlcnRpY2FsQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxl
Qm94OjpwbGFjZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94Ojph
bGxvd2VkQ2hpbGRGbGV4KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3gu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGbG93OjphYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxvdzo6bG93ZXN0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvdzo6cmlnaHRtb3N0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxv
dzo6bGVmdG1vc3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93Ojpsb2Nh
bENhcmV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93OjphZGRGb2N1c1JpbmdS
ZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGcmFtZVNldDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0Ojpw
b3NpdGlvbkZyYW1lcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpjYW52YXNTaXplQ2hhbmdlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckltYWdlOjppbWFnZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6
OnBhaW50UmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpjYWxjUmVwbGFjZWRXaWR0aCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbmxpbmU6OmFic29sdXRlUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjpib3VuZGluZ0JveFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGlu
ZTo6Ym91bmRpbmdCb3hIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpw
b3NpdGlvbkZvckNvb3JkaW5hdGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5l
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6Om9mZnNldFdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6b2Zmc2V0SGVpZ2h0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVw
ZGF0ZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYmFyQ29y
bmVyUHJlc2VudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3JlYXRlU2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29u
dHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6Y2FsY3VsYXRlUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJvdW5k
aW5nQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpjYWxjSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpc3RCb3g6OmNvbnRyb2xDbGlwUmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpwb3Np
dGlvbkxpc3RNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMaXN0TWFya2VyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtl
cjo6aW1hZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6Omdl
dFJlbGF0aXZlTWFya2VyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2Vy
OjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpjb21wdXRlUG9zaXRpb24pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNZWRpYTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpsb3dlc3RQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6cmlnaHRtb3N0UG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OmxlZnRtb3N0UG9zaXRpb24pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNZW51TGlzdDo6Y29udHJvbENsaXBSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6UmVuZGVy
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bWFya0FsbERlc2NlbmRh
bnRzV2l0aEZsb2F0c0ZvckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6
OnBhaW50T3V0bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFkZExpbmVC
b3hSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlQm91bmRp
bmdCb3hSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWRkQWJzb2x1dGVS
ZWN0Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpwYWludGluZ1Jv
b3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29udGFpbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbU9iamVjdExpc3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6dXBkYXRlSGl0VGVzdFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFkZERhc2hib2FyZFJlZ2lvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpsb2NhbFRyYW5zZm9ybSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpp
c0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omhhc01hc2spOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZXRJc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpzZXRJc0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6
OmJvcmRlclRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmJvcmRlckJvdHRv
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlUmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb2xsZWN0QWJzb2x1dGVMaW5lQm94UXVhZHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVF1YWRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aGFzUmVmbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6YWJzb2x1dGVPdXRsaW5lQm91bmRzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUGFydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXJ0Ojp1cGRhdGVX
aWRnZXRQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclBhdGg6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OmFic29sdXRl
T3V0bGluZUJvdW5kcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhdGguaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUmVwbGFjZWQ6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpwb3NpdGlvbkZvckNvb3JkaW5hdGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpsb2NhbFNlbGVjdGlvblJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmFkanVzdE92ZXJmbG93Rm9yQm94
U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpvdmVyZmxvd1JlY3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclJlcGxpY2E6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBs
aWNhOjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsaWNhOjpw
YWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6YWJzb2x1dGVPdXRsaW5lQm91bmRzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdDb250YWluZXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRh
aW5lcjo6aGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6OmxheW91dCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHSW5saW5lVGV4dDo6Y29tcHV0ZUFic29sdXRlUmVjdEZvclJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jvb3Q6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojph
cHBseUNvbnRlbnRUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmFic29sdXRlVHJhbnNm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVFNwYW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHVFNwYW46OmFic29sdXRlUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHVFNwYW46OmFic29sdXRlUXVhZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmxheW91dCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpyZWxhdGl2ZUJCb3gpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdUZXh0UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdUZXh0UGF0aDo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdU
ZXh0UGF0aDo6YWJzb2x1dGVRdWFkcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1ZpZXdwb3J0
Q29udGFpbmVyOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3JvbGxiYXI6OlJlbmRlclNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3JvbGxiYXI6OnNldFBhcmVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU2Nyb2xsYmFyOjpvd25pbmdSZW5kZXJlcik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclNjcm9sbGJhclBhcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xs
YmFyUGFydDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclBhcnQ6
OmxheW91dEhvcml6b250YWxQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJh
clBhcnQ6OmxheW91dFZlcnRpY2FsUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3Jv
bGxiYXJQYXJ0Ojpjb21wdXRlU2Nyb2xsYmFyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2Nyb2xsYmFyUGFydDo6Y29tcHV0ZVNjcm9sbGJhckhlaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTY3JvbGxiYXJQYXJ0OjpwYWludEludG9SZWN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyU2xpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTbGlkZXJUaHVt
YkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2xpZGVyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjptb3VzZUV2
ZW50SXNJblRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6cG9zaXRpb25G
b3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjp0cmFja1NpemUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6Y2FsY1dpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjps
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlOjpnZXRCYXNlbGluZU9mRmlyc3RMaW5lQm94KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlQ2VsbDo6dXBkYXRlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVDZWxsOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNlbGw6OmxvY2FsVG9BYnNvbHV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZUNlbGw6OmFic29sdXRlVG9Mb2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZUNlbGw6OmxvY2FsVG9BYnNvbHV0ZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVDZWxsOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBh
aW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZVNlY3Rpb246OnNldENlbGxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZVNlY3Rpb246Omxvd2VzdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlU2VjdGlvbjo6cmlnaHRtb3N0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpsZWZ0bW9zdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlU2VjdGlvbjo6Z2V0QmFzZWxpbmVPZkZpcnN0TGluZUJveCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlU2VjdGlvbjo6cmVjYWxjQ2VsbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVTZWN0aW9uOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpvdmVyZmxv
d1dpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6b3ZlcmZsb3dI
ZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHQ6OlJlbmRlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dDo6Ym91bmRpbmdCb3hYKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmJvdW5k
aW5nQm94WSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpmaXJzdFJ1blgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Zmlyc3RSdW5ZKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHQ6OmJvdW5kaW5nQm94SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OmJvdW5kaW5nQm94V2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjp0ZXh0QmxvY2tIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnRleHRCbG9ja1dpZHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY0hlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Q29udHJvbDo6aGl0SW5uZXJUZXh0QmxvY2spOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dENvbnRyb2w6OmNvbnRyb2xDbGlwUmVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmFkanVzdENvbnRyb2xIZWlnaHRCYXNlZE9uTGluZUhl
aWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpm
b3J3YXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjp0ZXh0QmxvY2tXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmFkanVzdENvbnRyb2xIZWlnaHRCYXNlZE9uTGluZUhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xp
ZW50UGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6aGl0VGVzdE1lZGlh
Q29udHJvbFBhcnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJWaWRlby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6dmlkZW9Cb3gpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclZpZXc6OlJlbmRlclZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6Y2Fs
Y0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjYWxjV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclZpZXc6OnZpZXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmRvY0hl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojpkb2NXaWR0aCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRCZXN0VHJ1bmNhdGVkQXQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcldpZGdldDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpmbG9hdHNQdHIpOgorICAgICAgICAq
IHJlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lu
bGluZUZsb3dCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
U1ZHSW5saW5lRmxvd0JveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29y
ZTo6d3JpdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OmNvbXB1dGVQZXJDaGFyYWN0ZXJM
YXlvdXRJbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94Ojps
YXlvdXRJbmxpbmVCb3hlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3gu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvYmlkaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y29tcHV0ZUhvcml6b250YWxQb3NpdGlvbnNGb3JMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlVmVydGljYWxQb3NpdGlvbnNGb3JMaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnNraXBUcmFpbGluZ1doaXRlc3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnNraXBMZWFkaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6Zml0QmVsb3dGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpjaGVja0xpbmVzRm9yT3ZlcmZsb3cpOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoOjpQZXJjZW50YWdlT2ZWaWV3cG9ydCk6CisK
IDIwMDktMDEtMjEgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEp1c3RpbiBHYXJjaWEuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiA0MDA3NSkK
KysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtNzM0LDYgKzcz
NCwxMCBAQCBfX1pOSzdXZWJDb3JlMTJJY29uRGF0YWJhc2UxMmRhdGFiYXNlUGF0CiBfX1pOSzdX
ZWJDb3JlMTJJY29uRGF0YWJhc2UyNHNob3VsZFN0b3BUaHJlYWRBY3Rpdml0eUV2CiBfX1pOSzdX
ZWJDb3JlMTJJY29uRGF0YWJhc2U5aXNFbmFibGVkRXYKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9i
amVjdDE0ZW5jbG9zaW5nTGF5ZXJFdgorX19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDE2Ym91bmRp
bmdCb3hXaWR0aEV2CitfX1pOSzdXZWJDb3JlMTBSZW5kZXJUZXh0MTdib3VuZGluZ0JveEhlaWdo
dEV2CitfX1pOSzdXZWJDb3JlMTBSZW5kZXJUZXh0OWZpcnN0UnVuWEV2CitfX1pOSzdXZWJDb3Jl
MTBSZW5kZXJUZXh0OWZpcnN0UnVuWUV2CiBfX1pOSzdXZWJDb3JlMTJTaGFyZWRCdWZmZXI0ZGF0
YUV2CiBfX1pOSzdXZWJDb3JlMTJTaGFyZWRCdWZmZXI0c2l6ZUV2CiBfX1pOSzdXZWJDb3JlMTJU
ZXh0RW5jb2Rpbmc2ZGVjb2RlRVBLY21iUmIKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBhaXIuaCIKICNp
bmNsdWRlICJSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCiAjaW5jbHVkZSAiU2hhZG93VmFsdWUuaCIKICNpbmNsdWRlICJXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5oIgogCkBAIC0zOTUsNyArMzk1LDExIEBAIHN0YXRpYyBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBnZXRCb3JkZXJSYWQKIAogc3RhdGljIEludFJlY3Qgc2l6aW5nQm94KFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLT5ib3hT
aXppbmcoKSA9PSBDT05URU5UX0JPWCA/IHJlbmRlcmVyLT5jb250ZW50Qm94KCkgOiByZW5kZXJl
ci0+Ym9yZGVyQm94KCk7CisgICAgaWYgKCFyZW5kZXJlci0+aXNCb3goKSkKKyAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKKyAgICAKKyAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJl
bmRlckJveCo+KHJlbmRlcmVyKTsKKyAgICByZXR1cm4gYm94LT5zdHlsZSgpLT5ib3hTaXppbmco
KSA9PSBDT05URU5UX0JPWCA/IGJveC0+Y29udGVudEJveFJlY3QoKSA6IGJveC0+Ym9yZGVyQm94
UmVjdCgpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gY29tcHV0ZWRUcmFuc2Zv
cm0oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZp
c2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
SW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJvb3RJbmxp
bmVCb3guaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTY5MSwxMCArNjkyLDEy
IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0VXBwZXJMZWZ0Q29ybmVyKEYKICAgICAgICAgfSBl
bHNlIGlmICgoby0+aXNUZXh0KCkgJiYgIW8tPmlzQlIoKSkgfHwgby0+aXNSZXBsYWNlZCgpKSB7
CiAgICAgICAgICAgICBwb2ludCA9IG8tPmNvbnRhaW5lcigpLT5sb2NhbFRvQWJzb2x1dGUoKTsK
ICAgICAgICAgICAgIGlmIChvLT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+
KG8pLT5maXJzdFRleHRCb3goKSkgewotICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUoc3RhdGlj
X2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+bWluWFBvcygpLAorICAgICAgICAgICAgICAgIHBvaW50
Lm1vdmUoc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+Ym91bmRpbmdCb3hYKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pLT5maXJz
dFRleHRCb3goKS0+cm9vdCgpLT50b3BPdmVyZmxvdygpKTsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUoby0+eFBvcygpLCBvLT55UG9zKCkpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19j
YXN0PFJlbmRlckJveCo+KG8pOworICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUoYm94LT54KCks
IGJveC0+eSgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgfQpAQCAtNzE3LDkgKzcyMCwxMCBAQCBib29sIENvbnRhaW5lck5vZGU6Omdl
dExvd2VyUmlnaHRDb3JuZXIoCiAgICAgUmVuZGVyT2JqZWN0ICpvID0gcmVuZGVyZXIoKTsKICAg
ICBpZiAoIW8tPmlzSW5saW5lKCkgfHwgby0+aXNSZXBsYWNlZCgpKQogICAgIHsKKyAgICAgICAg
UmVuZGVyQm94KiBib3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihvKTsKICAgICAgICAgcG9p
bnQgPSBvLT5sb2NhbFRvQWJzb2x1dGUoKTsKLSAgICAgICAgcG9pbnQubW92ZShvLT53aWR0aCgp
LAotICAgICAgICAgICAgICAgICAgIG8tPmhlaWdodCgpICsgby0+Ym9yZGVyVG9wRXh0cmEoKSAr
IG8tPmJvcmRlckJvdHRvbUV4dHJhKCkpOworICAgICAgICBwb2ludC5tb3ZlKGJveC0+d2lkdGgo
KSwKKyAgICAgICAgICAgICAgICAgICBib3gtPmhlaWdodCgpICsgYm94LT5ib3JkZXJUb3BFeHRy
YSgpICsgYm94LT5ib3JkZXJCb3R0b21FeHRyYSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC03NDEsMTMgKzc0NSwxMyBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2Vy
UmlnaHRDb3JuZXIoCiAgICAgICAgIH0KICAgICAgICAgaWYgKG8tPmlzVGV4dCgpIHx8IG8tPmlz
UmVwbGFjZWQoKSkgewogICAgICAgICAgICAgcG9pbnQgPSBvLT5jb250YWluZXIoKS0+bG9jYWxU
b0Fic29sdXRlKCk7Ci0gICAgICAgICAgICBpbnQgeE9mZnNldDsKLSAgICAgICAgICAgIGlmIChv
LT5pc1RleHQoKSkKLSAgICAgICAgICAgICAgICB4T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dCAqPihvKS0+bWluWFBvcygpICsgby0+d2lkdGgoKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB4T2Zmc2V0ID0gby0+eFBvcygpICsgby0+d2lkdGgoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgcG9pbnQubW92ZSh4T2Zmc2V0LCBvLT55UG9zKCkgKyBvLT5oZWln
aHQoKSk7CisgICAgICAgICAgICBpZiAoby0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBS
ZW5kZXJUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG8pOworICAgICAgICAg
ICAgICAgIHBvaW50Lm1vdmUodGV4dC0+Ym91bmRpbmdCb3hYKCkgKyB0ZXh0LT5ib3VuZGluZ0Jv
eFdpZHRoKCksIHRleHQtPmJvdW5kaW5nQm94SGVpZ2h0KCkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJv
eCo+KG8pOworICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUoYm94LT54KCkgKyBib3gtPndpZHRo
KCksIGJveC0+eSgpICsgYm94LT5oZWlnaHQoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0
MDA3NSkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQs
NyArMjc0LDcgQEAgc3RhdGljIGludCBhZGp1c3RGb3JBYnNvbHV0ZVpvb20oaW50IHZhbAogaW50
IEVsZW1lbnQ6Om9mZnNldExlZnQoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmQgPSBy
ZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3goKSkKICAgICAg
ICAgcmV0dXJuIGFkanVzdEZvckxvY2FsWm9vbShyZW5kLT5vZmZzZXRMZWZ0KCksIHJlbmQpOwog
ICAgIHJldHVybiAwOwogfQpAQCAtMjgyLDcgKzI4Miw3IEBAIGludCBFbGVtZW50OjpvZmZzZXRM
ZWZ0KCkKIGludCBFbGVtZW50OjpvZmZzZXRUb3AoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJPYmplY3Qq
IHJlbmQgPSByZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3go
KSkKICAgICAgICAgcmV0dXJuIGFkanVzdEZvckxvY2FsWm9vbShyZW5kLT5vZmZzZXRUb3AoKSwg
cmVuZCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yOTAsNyArMjkwLDcgQEAgaW50IEVsZW1lbnQ6
Om9mZnNldFRvcCgpCiBpbnQgRWxlbWVudDo6b2Zmc2V0V2lkdGgoKQogewogICAgIGRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChSZW5k
ZXJPYmplY3QqIHJlbmQgPSByZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJCb3gqIHJlbmQgPSBy
ZW5kZXJCb3goKSkKICAgICAgICAgcmV0dXJuIGFkanVzdEZvckFic29sdXRlWm9vbShyZW5kLT5v
ZmZzZXRXaWR0aCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTI5OCw3ICsyOTgsNyBA
QCBpbnQgRWxlbWVudDo6b2Zmc2V0V2lkdGgoKQogaW50IEVsZW1lbnQ6Om9mZnNldEhlaWdodCgp
CiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJl
bmRlckJveCogcmVuZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZXR1cm4gYWRqdXN0Rm9yQWJz
b2x1dGVab29tKHJlbmQtPm9mZnNldEhlaWdodCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsKIH0K
QEAgLTMwNiw3ICszMDYsNyBAQCBpbnQgRWxlbWVudDo6b2Zmc2V0SGVpZ2h0KCkKIEVsZW1lbnQq
IEVsZW1lbnQ6Om9mZnNldFBhcmVudCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9
IHJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgpKQogICAg
ICAgICBpZiAoUmVuZGVyT2JqZWN0KiBvZmZzZXRQYXJlbnQgPSByZW5kLT5vZmZzZXRQYXJlbnQo
KSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ob2Zmc2V0UGFyZW50
LT5lbGVtZW50KCkpOwogICAgIHJldHVybiAwOwpAQCAtMzE2LDcgKzMxNiw3IEBAIGludCBFbGVt
ZW50OjpjbGllbnRMZWZ0KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmQgPSByZW5k
ZXJlcigpKQorICAgIGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3goKSkKICAgICAgICAg
cmV0dXJuIGFkanVzdEZvckFic29sdXRlWm9vbShyZW5kLT5jbGllbnRMZWZ0KCksIHJlbmQpOwog
ICAgIHJldHVybiAwOwogfQpAQCAtMzI1LDcgKzMyNSw3IEBAIGludCBFbGVtZW50OjpjbGllbnRU
b3AoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwogCi0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisgICAg
aWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZXR1cm4gYWRqdXN0
Rm9yQWJzb2x1dGVab29tKHJlbmQtPmNsaWVudFRvcCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsK
IH0KQEAgLTM0NCw3ICszNDQsNyBAQCBpbnQgRWxlbWVudDo6Y2xpZW50V2lkdGgoKQogICAgIH0K
ICAgICAKIAotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmQgPSByZW5kZXJlcigpKQorICAgIGlm
IChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3goKSkKICAgICAgICAgcmV0dXJuIGFkanVzdEZv
ckFic29sdXRlWm9vbShyZW5kLT5jbGllbnRXaWR0aCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsK
IH0KQEAgLTM2Myw3ICszNjMsNyBAQCBpbnQgRWxlbWVudDo6Y2xpZW50SGVpZ2h0KCkKICAgICAg
ICAgICAgIHJldHVybiB2aWV3LT5sYXlvdXRIZWlnaHQoKTsKICAgICB9CiAgICAgCi0gICAgaWYg
KFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlckJveCogcmVu
ZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZXR1cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29tKHJl
bmQtPmNsaWVudEhlaWdodCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTM3MSw3ICsz
NzEsNyBAQCBpbnQgRWxlbWVudDo6Y2xpZW50SGVpZ2h0KCkKIGludCBFbGVtZW50OjpzY3JvbGxM
ZWZ0KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kID0gcmVuZGVyZXIoKSkKKyAgICBp
ZiAoUmVuZGVyQm94KiByZW5kID0gcmVuZGVyQm94KCkpCiAgICAgICAgIHJldHVybiBhZGp1c3RG
b3JBYnNvbHV0ZVpvb20ocmVuZC0+c2Nyb2xsTGVmdCgpLCByZW5kKTsKICAgICByZXR1cm4gMDsK
IH0KQEAgLTM3OSw3ICszNzksNyBAQCBpbnQgRWxlbWVudDo6c2Nyb2xsTGVmdCgpCiBpbnQgRWxl
bWVudDo6c2Nyb2xsVG9wKCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kID0gcmVuZGVy
ZXIoKSkKKyAgICBpZiAoUmVuZGVyQm94KiByZW5kID0gcmVuZGVyQm94KCkpCiAgICAgICAgIHJl
dHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20ocmVuZC0+c2Nyb2xsVG9wKCksIHJlbmQpOwogICAg
IHJldHVybiAwOwogfQpAQCAtMzg3LDIxICszODcsMjEgQEAgaW50IEVsZW1lbnQ6OnNjcm9sbFRv
cCgpCiB2b2lkIEVsZW1lbnQ6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCiB7CiAgICAgZG9j
dW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYg
KFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlckJveCogcmVu
ZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZW5kLT5zZXRTY3JvbGxMZWZ0KHN0YXRpY19jYXN0
PGludD4obmV3TGVmdCAqIHJlbmQtPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogfQogCiB2
b2lkIEVsZW1lbnQ6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQogewogICAgIGRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJP
YmplY3QqIHJlbmQgPSByZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5k
ZXJCb3goKSkKICAgICAgICAgcmVuZC0+c2V0U2Nyb2xsVG9wKHN0YXRpY19jYXN0PGludD4obmV3
VG9wICogcmVuZC0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiB9CiAKIGludCBFbGVtZW50
OjpzY3JvbGxXaWR0aCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZCA9IHJlbmRlcmVy
KCkpCisgICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgpKQogICAgICAgICByZXR1
cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29tKHJlbmQtPnNjcm9sbFdpZHRoKCksIHJlbmQpOwogICAg
IHJldHVybiAwOwogfQpAQCAtNDA5LDcgKzQwOSw3IEBAIGludCBFbGVtZW50OjpzY3JvbGxXaWR0
aCgpCiBpbnQgRWxlbWVudDo6c2Nyb2xsSGVpZ2h0KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0
KiByZW5kID0gcmVuZGVyZXIoKSkKKyAgICBpZiAoUmVuZGVyQm94KiByZW5kID0gcmVuZGVyQm94
KCkpCiAgICAgICAgIHJldHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20ocmVuZC0+c2Nyb2xsSGVp
Z2h0KCksIHJlbmQpOwogICAgIHJldHVybiAwOwogfQpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDQwMDc1KQor
KysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3NiwxNCArNTc2LDE3
IEBAIGJvb2wgTm9kZTo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdAogICAgIHJldHVybiBp
c0NvbnRlbnRFZGl0YWJsZSgpOwogfQogCitSZW5kZXJCb3gqIE5vZGU6OnJlbmRlckJveCgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKCFtX3JlbmRlcmVyIHx8IG1fcmVuZGVyZXItPmlzQm94KCkpOwor
ICAgIHJldHVybiBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlzQm94KCkgPyBzdGF0aWNfY2Fz
dDxjb25zdCBSZW5kZXJCb3gqIGNvbnN0PihtX3JlbmRlcmVyKSA6IDA7Cit9CisKIEludFJlY3Qg
Tm9kZTo6Z2V0UmVjdCgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIHRyYW5z
Zm9ybXMKLSAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9
IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZSgpOwotICAgICAgICByZXR1cm4gSW50UmVjdChy
b3VuZGVkSW50UG9pbnQoYWJzUG9zKSwKLSAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZShy
ZW5kZXJlcigpLT53aWR0aCgpLCByZW5kZXJlcigpLT5oZWlnaHQoKSArIHJlbmRlcmVyKCktPmJv
cmRlclRvcEV4dHJhKCkgKyByZW5kZXJlcigpLT5ib3JkZXJCb3R0b21FeHRyYSgpKSk7Ci0gICAg
fQorICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXIoKS0+YWJzb2x1
dGVCb3VuZGluZ0JveFJlY3QoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCkluZGV4OiBX
ZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZp
c2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NiArNTIsNyBAQCBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVs
RXZlbnQ7CiBjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmVuZGVyQXJlbmE7CitjbGFzcyBS
ZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNz
IFN0cmluZ0J1aWxkZXI7CkBAIC0zNzQsNiArMzc1LDEwIEBAIHB1YmxpYzoKICAgICBSZW5kZXJP
YmplY3QqIHByZXZpb3VzUmVuZGVyZXIoKTsKICAgICB2b2lkIHNldFJlbmRlcmVyKFJlbmRlck9i
amVjdCogcmVuZGVyZXIpIHsgbV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9CiAgICAgCisgICAgLy8g
VXNlIHdpdGggY2F1dGlvbi4gRG9lcyBubyB0eXBlIGNoZWNraW5nLiAgTW9zdGx5IGEgY29udmVu
aWVuY2UgbWV0aG9kIGZvciBzaGFkb3cgbm9kZXMgb2YgZm9ybSBjb250cm9scywgd2hlcmUgd2Ug
a25vdyBleGFjdGx5CisgICAgLy8gd2hhdCBraW5kIG9mIHJlbmRlcmVyIHdlIG1hZGUuCisgICAg
UmVuZGVyQm94KiByZW5kZXJCb3goKSBjb25zdDsKKyAgICAKICAgICB2b2lkIGNoZWNrU2V0UHJl
Zml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9v
bCBpc0Rlc2NlbmRhbnRPZihjb25zdCBOb2RlKikgY29uc3Q7CiAgICAgYm9vbCBjb250YWlucyhj
b25zdCBOb2RlKikgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdl
YkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBA
IHN0YXRpYyBib29sIGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmMKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIC8vIFRoZXJlIGlzIGEgVmlzaWJsZVBvc2l0aW9uIGluc2lkZSBh
biBlbXB0eSBpbmxpbmUtYmxvY2sgY29udGFpbmVyLgotICAgIHJldHVybiBub2RlLT5yZW5kZXJl
cigpLT5pc1JlcGxhY2VkKCkgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhub2RlKSAmJiBu
b2RlLT5yZW5kZXJlcigpLT5oZWlnaHQoKSAhPSAwICYmICFub2RlLT5maXJzdENoaWxkKCk7Cisg
ICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSAmJiBjYW5IYXZlQ2hpbGRy
ZW5Gb3JFZGl0aW5nKG5vZGUpICYmIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG5vZGUtPnJlbmRl
cmVyKCkpLT5oZWlnaHQoKSAhPSAwICYmICFub2RlLT5maXJzdENoaWxkKCk7CiB9CiAKIHN0YXRp
YyBOb2RlKiBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShOb2RlKiBub2RlKQpAQCAtNTM2LDkgKzUz
NiwxMSBAQCBib29sIFBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0RlCiB7CiAgICAg
UmVuZGVyT2JqZWN0KiBzdG9wID0gcmVuZGVyZXItPm5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJl
bigpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0ICpvID0gcmVuZGVyZXItPmZpcnN0Q2hpbGQoKTsg
byAmJiBvICE9IHN0b3A7IG8gPSBvLT5uZXh0SW5QcmVPcmRlcigpKQotICAgICAgICBpZiAoby0+
ZWxlbWVudCgpICYmIG8tPmhlaWdodCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAKKyAgICAgICAgaWYgKG8tPmVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKChv
LT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obyktPmJvdW5kaW5nQm94SGVp
Z2h0KCkpIHx8CisgICAgICAgICAgICAgICAgKG8tPmlzQm94KCkgJiYgc3RhdGljX2Nhc3Q8UmVu
ZGVyQm94Kj4obyktPmhlaWdodCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNTY5LDcgKzU3MSw3IEBAIGJvb2wg
UG9zaXRpb246OmlzQ2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIChvZmZzZXQoKSA9
PSAwIHx8IG9mZnNldCgpID09IG1heERlZXBPZmZzZXQobm9kZSgpKSkgJiYgIW5vZGVJc1VzZXJT
ZWxlY3ROb25lKG5vZGUoKS0+cGFyZW50KCkpOwogCiAgICAgaWYgKCFub2RlKCktPmhhc1RhZ05h
bWUoaHRtbFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgIWhhc1JlbmRlcmVkTm9u
QW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSAmJgotICAgICAgIChyZW5k
ZXJlci0+aGVpZ2h0KCkgfHwgbm9kZSgpLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkKKyAgICAgICAo
c3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocmVuZGVyZXIpLT5oZWlnaHQoKSB8fCBub2RlKCktPmhh
c1RhZ05hbWUoYm9keVRhZykpKQogICAgICAgICByZXR1cm4gb2Zmc2V0KCkgPT0gMCAmJiAhbm9k
ZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpKTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2Rv
bS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
I2luY2x1ZGUgIlBvc2l0aW9uSXRlcmF0b3IuaCIKIAogI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUg
Imh0bWxlZGl0aW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE1MSw3ICsxNTEsNyBA
QCBib29sIFBvc2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKCkgY29uCiAgICAgICAgIHJldHVy
biAoYXRTdGFydE9mTm9kZSgpIHx8IGF0RW5kT2ZOb2RlKCkpICYmICFQb3NpdGlvbjo6bm9kZUlz
VXNlclNlbGVjdE5vbmUobV9wYXJlbnQtPnBhcmVudCgpKTsKIAogICAgIGlmICghbV9wYXJlbnQt
Pmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgIVBvc2l0
aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChyZW5kZXJl
cikgJiYKLSAgICAgICAocmVuZGVyZXItPmhlaWdodCgpIHx8IG1fcGFyZW50LT5oYXNUYWdOYW1l
KGJvZHlUYWcpKSkKKyAgICAgICAoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihyZW5kZXJlcikt
PmhlaWdodCgpIHx8IG1fcGFyZW50LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkKICAgICAgICAgcmV0
dXJuIGF0U3RhcnRPZk5vZGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1f
cGFyZW50KTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEs
NyBAQAogI2luY2x1ZGUgIlJlbW92ZU5vZGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaCIKICNpbmNsdWRlICJSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiU2V0Tm9kZUF0
dHJpYnV0ZUNvbW1hbmQuaCIKICNpbmNsdWRlICJTcGxpdEVsZW1lbnRDb21tYW5kLmgiCiAjaW5j
bHVkZSAiU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCIKQEAgLTU5MCw3ICs1OTEsOCBAQCBQYXNzUmVm
UHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjphCiAgICAgCiAgICAgLy8gYXBwZW5kIHRo
ZSBwbGFjZWhvbGRlciB0byBtYWtlIHN1cmUgaXQgZm9sbG93cwogICAgIC8vIGFueSB1bnJlbmRl
cmVkIGJsb2NrcwotICAgIGlmIChyZW5kZXJlci0+aGVpZ2h0KCkgPT0gMCB8fCAocmVuZGVyZXIt
PmlzTGlzdEl0ZW0oKSAmJiByZW5kZXJlci0+aXNFbXB0eSgpKSkKKyAgICBSZW5kZXJCbG9jayog
YmxvY2sgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KHJlbmRlcmVyKTsKKyAgICBpZiAoYmxv
Y2stPmhlaWdodCgpID09IDAgfHwgKGJsb2NrLT5pc0xpc3RJdGVtKCkgJiYgYmxvY2stPmlzRW1w
dHkoKSkpCiAgICAgICAgIHJldHVybiBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKGNvbnRhaW5lcik7
CiAKICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBACiAjaW5j
bHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZUNv
bW1hbmQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3gu
aCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTcxLDcgKzcxLDExIEBAIHN0YXRpYyBib29sIGlzRGVsZXRhYmxlRWxlbWVudChjb25z
dCBOb2QKICAgICBjb25zdCB1bnNpZ25lZCBtaW5pbXVtVmlzaWJsZUJvcmRlcnMgPSAzOwogCiAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFy
ZW5kZXJlciB8fCByZW5kZXJlci0+d2lkdGgoKSA8IG1pbmltdW1XaWR0aCB8fCByZW5kZXJlci0+
aGVpZ2h0KCkgPCBtaW5pbXVtSGVpZ2h0KQorICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVy
LT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9
IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmRlcmVyKTsKKyAgICBpZiAoYm94LT53aWR0aCgp
IDwgbWluaW11bVdpZHRoIHx8IGJveC0+aGVpZ2h0KCkgPCBtaW5pbXVtSGVpZ2h0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocmVuZGVyZXItPmlzVGFibGUoKSkKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQwMDc1
KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgIlJl
bmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAj
aW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgpAQCAtMzU3LDcgKzM1
OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSgKICAgICAgICAg
Ly8gbWFrZSBzdXJlIGVtcHR5IGNlbGwgaGFzIHNvbWUgaGVpZ2h0CiAgICAgICAgIHVwZGF0ZUxh
eW91dCgpOwogICAgICAgICBSZW5kZXJPYmplY3QgKnIgPSBub2RlLT5yZW5kZXJlcigpOwotICAg
ICAgICBpZiAociAmJiByLT5pc1RhYmxlQ2VsbCgpICYmIHItPmNvbnRlbnRIZWlnaHQoKSA8PSAw
KQorICAgICAgICBpZiAociAmJiByLT5pc1RhYmxlQ2VsbCgpICYmIHN0YXRpY19jYXN0PFJlbmRl
clRhYmxlQ2VsbCo+KHIpLT5jb250ZW50SGVpZ2h0KCkgPD0gMCkKICAgICAgICAgICAgIGluc2Vy
dEJsb2NrUGxhY2Vob2xkZXIoUG9zaXRpb24obm9kZSwwKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3MSw3ICsyMDcxLDcgQEAgYm9vbCBF
ZGl0b3I6Omluc2lkZVZpc2libGVBcmVhKGNvbnN0IEludAogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIEludFJlY3QgcmVjdEluUGFnZUNvb3JkcyA9IGNvbnRhaW5lci0+Z2V0T3ZlcmZsb3dD
bGlwUmVjdCgwLCAwKTsKLSAgICBJbnRSZWN0IHJlY3RJbkZyYW1lQ29vcmRzID0gSW50UmVjdChy
ZW5kZXJlci0+eFBvcygpICogLTEsIHJlbmRlcmVyLT55UG9zKCkgKiAtMSwKKyAgICBJbnRSZWN0
IHJlY3RJbkZyYW1lQ29vcmRzID0gSW50UmVjdChyZW5kZXJlci0+eCgpICogLTEsIHJlbmRlcmVy
LT55KCkgKiAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RJblBh
Z2VDb29yZHMud2lkdGgoKSwgcmVjdEluUGFnZUNvb3Jkcy5oZWlnaHQoKSk7CiAKICAgICByZXR1
cm4gcmVjdEluRnJhbWVDb29yZHMuY29udGFpbnMocG9pbnQpOwpAQCAtMjA5Nyw3ICsyMDk3LDcg
QEAgYm9vbCBFZGl0b3I6Omluc2lkZVZpc2libGVBcmVhKFJhbmdlKiByYQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIEludFJlY3QgcmVjdEluUGFnZUNvb3JkcyA9IGNvbnRhaW5lci0+Z2V0
T3ZlcmZsb3dDbGlwUmVjdCgwLCAwKTsKLSAgICBJbnRSZWN0IHJlY3RJbkZyYW1lQ29vcmRzID0g
SW50UmVjdChyZW5kZXJlci0+eFBvcygpICogLTEsIHJlbmRlcmVyLT55UG9zKCkgKiAtMSwKKyAg
ICBJbnRSZWN0IHJlY3RJbkZyYW1lQ29vcmRzID0gSW50UmVjdChyZW5kZXJlci0+eCgpICogLTEs
IHJlbmRlcmVyLT55KCkgKiAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlY3RJblBhZ2VDb29yZHMud2lkdGgoKSwgcmVjdEluUGFnZUNvb3Jkcy5oZWlnaHQoKSk7CiAg
ICAgSW50UmVjdCByZXN1bHRSZWN0ID0gcmFuZ2UtPmJvdW5kaW5nQm94KCk7CiAgICAgCkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDE0ICsyMjUs
MTQgQEAgc3RhdGljIGludCB2ZXJ0aWNhbFNjcm9sbERpc3RhbmNlKEZyYW1lKgogICAgIGlmICgh
Zm9jdXNlZE5vZGUpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBmb2N1c2VkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQorICAgIGlm
ICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICBpZiAoIXN0eWxl
KQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIShzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1ND
Uk9MTCB8fCBzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT0FVVE8gfHwgcmVuZGVyZXItPmlzVGV4dEFy
ZWEoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGludCBoZWlnaHQgPSByZW5kZXJlci0+Y2xp
ZW50SGVpZ2h0KCk7CisgICAgaW50IGhlaWdodCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJl
bmRlcmVyKS0+Y2xpZW50SGVpZ2h0KCk7CiAgICAgcmV0dXJuIG1heCgoaGVpZ2h0ICsgMSkgLyAy
LCBoZWlnaHQgLSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTMgKzEwNywxNiBAQCBi
b29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhCiAgICAgaWYgKCFkb2N1bWVu
dCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+dGFic1RvTGlua3MoZXZlbnQpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXJlbmRlcmVyKCkpCisgICAgaWYgKCFyZW5kZXJl
cigpIHx8ICFyZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgLy8gQmVmb3JlIGNhbGxpbmcgYWJzb2x1dGVSZWN0cywgY2hlY2sgZm9yIHRoZSBjb21t
b24gY2FzZSB3aGVyZSB0aGUgcmVuZGVyZXIKICAgICAvLyBvciBvbmUgb2YgdGhlIGNvbnRpbnVh
dGlvbnMgaXMgbm9uLWVtcHR5LCBzaW5jZSB0aGlzIGlzIGEgZmFzdGVyIGNoZWNrIGFuZAogICAg
IC8vIGFsbW9zdCBhbHdheXMgcmV0dXJucyB0cnVlLgotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBy
ID0gcmVuZGVyZXIoKTsgcjsgciA9IHItPnZpcnR1YWxDb250aW51YXRpb24oKSkKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmRlcmVyKCkpOworICAgIGlm
IChib3gtPndpZHRoKCkgPiAwICYmIGJveC0+aGVpZ2h0KCkgPiAwKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBmb3IgKFJlbmRlckZsb3cqIHIgPSBib3gtPnZpcnR1YWxDb250aW51YXRpb24o
KTsgcjsgciA9IHItPmNvbnRpbnVhdGlvbigpKQogICAgICAgICBpZiAoci0+d2lkdGgoKSA+IDAg
JiYgci0+aGVpZ2h0KCkgPiAwKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsOCArMTU1LDgg
QEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6d2lsbERyYXcoY29uc3QgRgogewogICAgIG1faW1h
Z2VCdWZmZXItPmNsZWFySW1hZ2UoKTsKICAgICAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBybyA9
IHJlbmRlcmVyKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gcm8tPmNvbnRlbnRC
b3goKTsKKyAgICBpZiAoUmVuZGVyQm94KiBybyA9IHJlbmRlckJveCgpKSB7CisgICAgICAgIEZs
b2F0UmVjdCBkZXN0UmVjdCA9IHJvLT5jb250ZW50Qm94UmVjdCgpOwogICAgICAgICBGbG9hdFJl
Y3QgciA9IG1hcFJlY3QocmVjdCwgRmxvYXRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpLCBkZXN0UmVjdCk7CiAgICAgICAgIHIuaW50ZXJzZWN0KGRlc3RSZWN0KTsK
ICAgICAgICAgaWYgKG1fZGlydHlSZWN0LmNvbnRhaW5zKHIpKQpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsx
OTksNyBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxlCiB7CiAgICAg
aWYgKGRpc2FibGVkKCkgfHwgIXJlbmRlcmVyKCkgfHwgCiAgICAgICAgIChyZW5kZXJlcigpLT5z
dHlsZSgpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB8
fCAKLSAgICAgICAgcmVuZGVyZXIoKS0+d2lkdGgoKSA9PSAwIHx8IHJlbmRlcmVyKCktPmhlaWdo
dCgpID09IDApCisgICAgICAgICFyZW5kZXJlcigpLT5pc0JveCgpIHx8IHN0YXRpY19jYXN0PFJl
bmRlckJveCo+KHJlbmRlcmVyKCkpLT53aWR0aCgpID09IDAgfHwgc3RhdGljX2Nhc3Q8UmVuZGVy
Qm94Kj4ocmVuZGVyZXIoKSktPmhlaWdodCgpID09IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNl
LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDcgQEAgaW50IEhUTUxGcmFtZUVs
ZW1lbnRCYXNlOjp3aWR0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIGRv
Y3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJl
dHVybiByZW5kZXJlcigpLT53aWR0aCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJC
b3gqPihyZW5kZXJlcigpKS0+d2lkdGgoKTsKIH0KIAogaW50IEhUTUxGcmFtZUVsZW1lbnRCYXNl
OjpoZWlnaHQoKSBjb25zdApAQCAtMzIwLDcgKzMyMCw3IEBAIGludCBIVE1MRnJhbWVFbGVtZW50
QmFzZTo6aGVpZ2h0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgZG9jdW1l
bnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJu
IHJlbmRlcmVyKCktPmhlaWdodCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gq
PihyZW5kZXJlcigpKS0+aGVpZ2h0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2
LDcgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKGJvb2wgaWdub3JlUAogICAgIGVsc2UK
ICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKLSAgICByZXR1cm4gcmVuZGVy
ZXIoKSA/IHJlbmRlcmVyKCktPmNvbnRlbnRXaWR0aCgpIDogMDsKKyAgICByZXR1cm4gcmVuZGVy
Qm94KCkgPyByZW5kZXJCb3goKS0+Y29udGVudFdpZHRoKCkgOiAwOwogfQogCiBpbnQgSFRNTElt
YWdlRWxlbWVudDo6aGVpZ2h0KGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKSBjb25zdApA
QCAtMjUwLDcgKzI1MCw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQoYm9vbCBpZ25v
cmUKICAgICBlbHNlCiAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogCi0gICAg
cmV0dXJuIHJlbmRlcmVyKCkgPyByZW5kZXJlcigpLT5jb250ZW50SGVpZ2h0KCkgOiAwOworICAg
IHJldHVybiByZW5kZXJCb3goKSA/IHJlbmRlckJveCgpLT5jb250ZW50SGVpZ2h0KCkgOiAwOwog
fQogCiBpbnQgSFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbFdpZHRoKCkgY29uc3QKSW5kZXg6IFdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0MDA3NSkK
KysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzYwLDEyICsyNzYwLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJh
d05vZGVIaWdobGkKICAgICBpZiAoIW1faGlnaGxpZ2h0ZWROb2RlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9oaWdobGlnaHRlZE5vZGUtPnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyQm94KiByZW5kZXJlciA9IG1faGlnaGxpZ2h0ZWROb2RlLT5yZW5k
ZXJCb3goKTsKICAgICBGcmFtZSogY29udGFpbmluZ0ZyYW1lID0gbV9oaWdobGlnaHRlZE5vZGUt
PmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhY29udGFpbmluZ0Zy
YW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSByZW5kZXJl
ci0+Y29udGVudEJveCgpOworICAgIEludFJlY3QgY29udGVudEJveCA9IHJlbmRlcmVyLT5jb250
ZW50Qm94UmVjdCgpOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhZGQgbWV0aG9kcyB0byBS
ZW5kZXJPYmplY3QgdG8gb2J0YWluIHRoZXNlIHJlY3RzPwogICAgIEludFJlY3QgcGFkZGluZ0Jv
eChjb250ZW50Qm94LngoKSAtIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLCBjb250ZW50Qm94Lnko
KSAtIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCksCkluZGV4OiBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcGFnZS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3NywxMiAr
MTE3NywxMiBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liCiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIGNoZWNrIGZvciBvbmUtZGltZW5zaW9uYWwgaW1h
Z2UKLSAgICAgICAgaWYgKG1fcmVuZGVyZXItPmhlaWdodCgpIDw9IDEgfHwgbV9yZW5kZXJlci0+
d2lkdGgoKSA8PSAxKQorICAgICAgICBSZW5kZXJJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJJbWFnZSo+KG1fcmVuZGVyZXIpOworICAgICAgICBpZiAoaW1hZ2UtPmhlaWdodCgpIDw9
IDEgfHwgaW1hZ2UtPndpZHRoKCkgPD0gMSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAKICAgICAgICAgLy8gY2hlY2sgd2hldGhlciByZW5kZXJlZCBpbWFnZSB3YXMgc3RyZXRj
aGVkIGZyb20gb25lLWRpbWVuc2lvbmFsIGZpbGUgaW1hZ2UKICAgICAgICAgaWYgKGlzTmF0aXZl
SW1hZ2UoKSkgewotICAgICAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8
UmVuZGVySW1hZ2UqPihtX3JlbmRlcmVyKTsKICAgICAgICAgICAgIGlmIChpbWFnZS0+Y2FjaGVk
SW1hZ2UoKSkgewogICAgICAgICAgICAgICAgIEludFNpemUgaW1hZ2VTaXplID0gaW1hZ2UtPmNh
Y2hlZEltYWdlKCktPmltYWdlU2l6ZShpbWFnZS0+dmlldygpLT56b29tRmFjdG9yKCkpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBpbWFnZVNpemUuaGVpZ2h0KCkgPD0gMSB8fCBpbWFnZVNpemUu
d2lkdGgoKSA8PSAxOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCwxMiArMjg4LDEy
IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBGcmFtZVZpZXc6OmNyZWF0ZVMKICAgICAvLyBUcnkg
dGhlIDxib2R5PiBlbGVtZW50IGZpcnN0IGFzIGEgc2Nyb2xsYmFyIHNvdXJjZS4KICAgICBFbGVt
ZW50KiBib2R5ID0gZG9jLT5ib2R5KCk7CiAgICAgaWYgKGJvZHkgJiYgYm9keS0+cmVuZGVyZXIo
KSAmJiBib2R5LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShSZW5kZXJTdHls
ZTo6U0NST0xMQkFSKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3Vz
dG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBib2R5LT5yZW5kZXJlcigpKTsKKyAgICAg
ICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9y
aWVudGF0aW9uLCBib2R5LT5yZW5kZXJCb3goKSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIDxib2R5
PiBkaWRuJ3QgaGF2ZSBhIGN1c3RvbSBzdHlsZSwgdGhlbiB0aGUgcm9vdCBlbGVtZW50IG1pZ2h0
LgogICAgIEVsZW1lbnQqIGRvY0VsZW1lbnQgPSBkb2MtPmRvY3VtZW50RWxlbWVudCgpOwogICAg
IGlmIChkb2NFbGVtZW50ICYmIGRvY0VsZW1lbnQtPnJlbmRlcmVyKCkgJiYgZG9jRWxlbWVudC0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNDUk9MTEJB
UikpCi0gICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJh
cih0aGlzLCBvcmllbnRhdGlvbiwgZG9jRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgICAgIHJl
dHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcih0aGlzLCBvcmllbnRh
dGlvbiwgZG9jRWxlbWVudC0+cmVuZGVyQm94KCkpOwogICAgICAgICAKICAgICAvLyBJZiB3ZSBo
YXZlIGFuIG93bmluZyBpZnJhbWUvZnJhbWUgZWxlbWVudCwgdGhlbiBpdCBjYW4gc2V0IHRoZSBj
dXN0b20gc2Nyb2xsYmFyIGFsc28uCiAgICAgUmVuZGVyUGFydCogZnJhbWVSZW5kZXJlciA9IG1f
ZnJhbWUtPm93bmVyUmVuZGVyZXIoKTsKQEAgLTEwOTUsNyArMTA5NSw3IEBAIHZvaWQgRnJhbWVW
aWV3Ojp1cGRhdGVEYXNoYm9hcmRSZWdpb25zKCkKICAgICBpZiAoIWRvY3VtZW50LT5oYXNEYXNo
Ym9hcmRSZWdpb25zKCkpCiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8RGFzaGJvYXJkUmVn
aW9uVmFsdWU+IG5ld1JlZ2lvbnM7Ci0gICAgZG9jdW1lbnQtPnJlbmRlcmVyKCktPmNvbGxlY3RE
YXNoYm9hcmRSZWdpb25zKG5ld1JlZ2lvbnMpOworICAgIGRvY3VtZW50LT5yZW5kZXJCb3goKS0+
Y29sbGVjdERhc2hib2FyZFJlZ2lvbnMobmV3UmVnaW9ucyk7CiAgICAgaWYgKG5ld1JlZ2lvbnMg
PT0gZG9jdW1lbnQtPmRhc2hib2FyZFJlZ2lvbnMoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGRv
Y3VtZW50LT5zZXREYXNoYm9hcmRSZWdpb25zKG5ld1JlZ2lvbnMpOwpJbmRleDogV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNv
cmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MCw3ICsxMzAsNyBAQCBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGCiAg
ICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBDb252ZXJ0IHRoZSBUcmFuc2Zvcm1P
cGVyYXRpb25zIGludG8gbWF0cmljZXMKLSAgICAgICAgSW50U2l6ZSBzaXplID0gYW5pbS0+cmVu
ZGVyZXIoKS0+Ym9yZGVyQm94KCkuc2l6ZSgpOworICAgICAgICBJbnRTaXplIHNpemUgPSBhbmlt
LT5yZW5kZXJlcigpLT5pc0JveCgpID8gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4oYW5pbS0+cmVu
ZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKS5zaXplKCkgOiBJbnRTaXplKCk7CiAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGZyb21UOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
b1Q7CiAgICAgICAgIGZyb20uYXBwbHkoc2l6ZSwgZnJvbVQpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
SGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
SGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBJbnRS
ZWN0IEhpdFRlc3RSZXN1bHQ6OmltYWdlUmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFpbWFnZSgp
KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVk
Tm9kZS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisgICAgcmV0dXJuIG1faW5u
ZXJOb25TaGFyZWROb2RlLT5yZW5kZXJCb3goKS0+YWJzb2x1dGVDb250ZW50Qm94KCk7CiB9CiAK
IEtVUkwgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVSTCgpIGNvbnN0CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVGbG93Qm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyQXJlbmEuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSb290SW5s
aW5lQm94LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC04NCw2ICs4NSwxMiBAQCB2b2lk
IElubGluZUJveDo6c2hvd1RyZWVGb3JUaGlzKCkgY29uc3QKIH0KICNlbmRpZgogCitSZW5kZXJC
b3gqIElubGluZUJveDo6cmVuZGVyQm94KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9vYmplY3Qt
PmlzQm94KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihtX29iamVjdCk7
Cit9CisKIGludCBJbmxpbmVCb3g6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QgCiB7IAogICAgIHJl
dHVybiBtX29iamVjdC0+Y2FyZXRNaW5PZmZzZXQoKTsgCkBAIC0xMjksOCArMTM2LDEwIEBAIHZv
aWQgSW5saW5lQm94OjphZGp1c3RQb3NpdGlvbihpbnQgZHgsIGkKIHsKICAgICBtX3ggKz0gZHg7
CiAgICAgbV95ICs9IGR5OwotICAgIGlmIChtX29iamVjdC0+aXNSZXBsYWNlZCgpIHx8IG1fb2Jq
ZWN0LT5pc0JSKCkpCi0gICAgICAgIG1fb2JqZWN0LT5zZXRQb3MobV9vYmplY3QtPnhQb3MoKSAr
IGR4LCBtX29iamVjdC0+eVBvcygpICsgZHkpOworICAgIGlmIChtX29iamVjdC0+aXNSZXBsYWNl
ZCgpKSB7CisgICAgICAgIFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4o
bV9vYmplY3QpOworICAgICAgICBib3gtPm1vdmUoZHgsIGR5KTsKKyAgICB9CiB9CiAKIHZvaWQg
SW5saW5lQm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiA0MDA3NSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CitjbGFz
cyBSZW5kZXJCb3g7CiBjbGFzcyBSb290SW5saW5lQm94OwogCiBzdHJ1Y3QgSGl0VGVzdFJlcXVl
c3Q7CkBAIC0yMzksNiArMjQwLDkgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgdmlzaWJsZVRv
SGl0VGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG9iamVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5
KCkgPT0gVklTSUJMRSAmJiBvYmplY3QoKS0+c3R5bGUoKS0+cG9pbnRlckV2ZW50cygpICE9IFBF
X05PTkU7IH0KICAgICAKKyAgICAvLyBVc2Ugd2l0aCBjYXV0aW9uISBUaGUgdHlwZSBpcyBub3Qg
Y2hlY2tlZCEKKyAgICBSZW5kZXJCb3gqIHJlbmRlckJveCgpIGNvbnN0OworCiBwdWJsaWM6CiAg
ICAgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNSw3ICszMjUsNyBAQCBpbnQgSW5saW5lRmxv
d0JveDo6cGxhY2VCb3hlc0hvcml6b250YWxsCiAgICAgICAgICAgICAgICAgICAgIC8vIE91ciBv
ZmZzZXQgdGhhdCB3ZSBjYWNoZSBuZWVkcyB0byBiZSBmcm9tIHRoZSBlZGdlIG9mIHRoZSByaWdo
dCBib3JkZXIgYm94IGFuZAogICAgICAgICAgICAgICAgICAgICAvLyBub3QgdGhlIGxlZnQgYm9y
ZGVyIGJveC4gIFdlIGhhdmUgdG8gc3VidHJhY3QgfHh8IGZyb20gdGhlIHdpZHRoIG9mIHRoZSBi
bG9jawogICAgICAgICAgICAgICAgICAgICAvLyAod2hpY2ggY2FuIGJlIG9idGFpbmVkIGZyb20g
dGhlIHJvb3QgbGluZSBib3gpLgotICAgICAgICAgICAgICAgICAgICBjdXJyLT5zZXRYUG9zKHJv
b3QoKS0+b2JqZWN0KCktPndpZHRoKCkteCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnItPnNl
dFhQb3Mocm9vdCgpLT5ibG9jaygpLT53aWR0aCgpLXgpOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOyAvLyBUaGUgcG9zaXRpb25lZCBvYmplY3QgaGFzIG5vIGVmZmVjdCBvbiB0aGUgd2lkdGgu
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY3Vyci0+b2JqZWN0KCktPmlzSW5saW5l
RmxvdygpKSB7CkBAIC0zNDEsOCArMzQxLDggQEAgaW50IElubGluZUZsb3dCb3g6OnBsYWNlQm94
ZXNIb3Jpem9udGFsbAogICAgICAgICAgICAgfSBlbHNlIGlmICghY3Vyci0+b2JqZWN0KCktPmlz
Q29tcGFjdCgpICYmICghY3Vyci0+b2JqZWN0KCktPmlzTGlzdE1hcmtlcigpIHx8IHN0YXRpY19j
YXN0PFJlbmRlckxpc3RNYXJrZXIqPihjdXJyLT5vYmplY3QoKSktPmlzSW5zaWRlKCkpKSB7CiAg
ICAgICAgICAgICAgICAgeCArPSBjdXJyLT5vYmplY3QoKS0+bWFyZ2luTGVmdCgpOwogICAgICAg
ICAgICAgICAgIGN1cnItPnNldFhQb3MoeCk7Ci0gICAgICAgICAgICAgICAgbGVmdFBvc2l0aW9u
ID0gbWluKHggKyBjdXJyLT5vYmplY3QoKS0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSwgbGVmdFBvc2l0
aW9uKTsKLSAgICAgICAgICAgICAgICByaWdodFBvc2l0aW9uID0gbWF4KHggKyBjdXJyLT5vYmpl
Y3QoKS0+b3ZlcmZsb3dXaWR0aChmYWxzZSksIHJpZ2h0UG9zaXRpb24pOworICAgICAgICAgICAg
ICAgIGxlZnRQb3NpdGlvbiA9IG1pbih4ICsgY3Vyci0+cmVuZGVyQm94KCktPm92ZXJmbG93TGVm
dChmYWxzZSksIGxlZnRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgcmlnaHRQb3NpdGlvbiA9
IG1heCh4ICsgY3Vyci0+cmVuZGVyQm94KCktPm92ZXJmbG93V2lkdGgoZmFsc2UpLCByaWdodFBv
c2l0aW9uKTsKICAgICAgICAgICAgICAgICB4ICs9IGN1cnItPndpZHRoKCkgKyBjdXJyLT5vYmpl
Y3QoKS0+bWFyZ2luUmlnaHQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzU1LDcg
KzM1NSw3IEBAIGludCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGwKICAgICBy
ZXR1cm4geDsKIH0KIAotdm9pZCBJbmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhp
bnQmIGhlaWdodE9mQmxvY2spCitpbnQgSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94
ZXMoaW50IGhlaWdodE9mQmxvY2spCiB7CiAgICAgaW50IG1heFBvc2l0aW9uVG9wID0gMDsKICAg
ICBpbnQgbWF4UG9zaXRpb25Cb3R0b20gPSAwOwpAQCAtMzg5LDYgKzM4OSw4IEBAIHZvaWQgSW5s
aW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMKICAgICAgICAgc2hyaW5rQm94ZXNXaXRo
Tm9UZXh0Q2hpbGRyZW4odG9wUG9zaXRpb24sIGJvdHRvbVBvc2l0aW9uKTsKICAgICAKICAgICBo
ZWlnaHRPZkJsb2NrICs9IG1heEhlaWdodDsKKyAgICAKKyAgICByZXR1cm4gaGVpZ2h0T2ZCbG9j
azsKIH0KIAogdm9pZCBJbmxpbmVGbG93Qm94OjphZGp1c3RNYXhBc2NlbnRBbmREZXNjZW50KGlu
dCYgbWF4QXNjZW50LCBpbnQmIG1heERlc2NlbnQsCkBAIC01MjIsOCArNTI0LDggQEAgdm9pZCBJ
bmxpbmVGbG93Qm94OjpwbGFjZUJveGVzVmVydGljYWxseQogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoY3Vyci0+b2JqZWN0KCktPmhhc1JlZmxlY3Rpb24oKSkgewotICAgICAgICAg
ICAgICAgIG92ZXJmbG93VG9wID0gbWluKG92ZXJmbG93VG9wLCBjdXJyLT5vYmplY3QoKS0+cmVm
bGVjdGlvbkJveCgpLnkoKSk7Ci0gICAgICAgICAgICAgICAgb3ZlcmZsb3dCb3R0b20gPSBtYXgo
b3ZlcmZsb3dCb3R0b20sIGN1cnItPm9iamVjdCgpLT5yZWZsZWN0aW9uQm94KCkuYm90dG9tKCkp
OworICAgICAgICAgICAgICAgIG92ZXJmbG93VG9wID0gbWluKG92ZXJmbG93VG9wLCBjdXJyLT5y
ZW5kZXJCb3goKS0+cmVmbGVjdGlvbkJveCgpLnkoKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZs
b3dCb3R0b20gPSBtYXgob3ZlcmZsb3dCb3R0b20sIGN1cnItPnJlbmRlckJveCgpLT5yZWZsZWN0
aW9uQm94KCkuYm90dG9tKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY3Vy
ci0+aXNJbmxpbmVGbG93Qm94KCkpIHsKQEAgLTUzNSw4ICs1MzcsOCBAQCB2b2lkIElubGluZUZs
b3dCb3g6OnBsYWNlQm94ZXNWZXJ0aWNhbGx5CiAgICAgICAgIH0gZWxzZSBpZiAoIWN1cnItPm9i
amVjdCgpLT5pc0JSKCkpIHsKICAgICAgICAgICAgIG5ld1kgKz0gY3Vyci0+b2JqZWN0KCktPm1h
cmdpblRvcCgpOwogICAgICAgICAgICAgbmV3SGVpZ2h0ID0gY3Vyci0+aGVpZ2h0KCkgLSAoY3Vy
ci0+b2JqZWN0KCktPm1hcmdpblRvcCgpICsgY3Vyci0+b2JqZWN0KCktPm1hcmdpbkJvdHRvbSgp
KTsKLSAgICAgICAgICAgIG92ZXJmbG93VG9wID0gY3Vyci0+b2JqZWN0KCktPm92ZXJmbG93VG9w
KGZhbHNlKTsKLSAgICAgICAgICAgIG92ZXJmbG93Qm90dG9tID0gY3Vyci0+b2JqZWN0KCktPm92
ZXJmbG93SGVpZ2h0KGZhbHNlKSAtIG5ld0hlaWdodDsKKyAgICAgICAgICAgIG92ZXJmbG93VG9w
ID0gY3Vyci0+cmVuZGVyQm94KCktPm92ZXJmbG93VG9wKGZhbHNlKTsKKyAgICAgICAgICAgIG92
ZXJmbG93Qm90dG9tID0gY3Vyci0+cmVuZGVyQm94KCktPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSAt
IG5ld0hlaWdodDsKICAgICAgICAgfQogCiAgICAgICAgIGN1cnItPnNldFlQb3MobmV3WSk7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzEx
NSw3IEBAIHB1YmxpYzoKICAgICBpbnQgZ2V0Rmxvd1NwYWNpbmdXaWR0aCgpOwogICAgIGJvb2wg
b25FbmRDaGFpbihSZW5kZXJPYmplY3QqIGVuZE9iamVjdCk7CiAgICAgdmlydHVhbCBpbnQgcGxh
Y2VCb3hlc0hvcml6b250YWxseShpbnQgeCwgaW50JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQ
b3NpdGlvbiwgYm9vbCYgbmVlZHNXb3JkU3BhY2luZyk7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRp
Y2FsbHlBbGlnbkJveGVzKGludCYgaGVpZ2h0T2ZCbG9jayk7CisgICAgdmlydHVhbCBpbnQgdmVy
dGljYWxseUFsaWduQm94ZXMoaW50IGhlaWdodE9mQmxvY2spOwogICAgIHZvaWQgY29tcHV0ZUxv
Z2ljYWxCb3hIZWlnaHRzKGludCYgbWF4UG9zaXRpb25Ub3AsIGludCYgbWF4UG9zaXRpb25Cb3R0
b20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtYXhBc2NlbnQsIGlu
dCYgbWF4RGVzY2VudCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICB2b2lkIGFkanVzdE1heEFzY2Vu
dEFuZERlc2NlbnQoaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2VudCwKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQXBwbGV0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJBcHBsZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMCArNjYsMTAgQEAg
dm9pZCBSZW5kZXJBcHBsZXQ6OmNyZWF0ZVdpZGdldElmTmVjZXNzYQogICAgIC8vIEluIG9yZGVy
IHRvIHdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbSBhbmQgaGF2ZSBhIGNvcnJlY3Qgc2l6ZSBmcm9t
IHRoZSBzdGFydCwgd2Ugd2lsbAogICAgIC8vIHVzZSBmaXhlZCB3aWR0aHMvaGVpZ2h0cyBmcm9t
IHRoZSBzdHlsZSBzeXN0ZW0gd2hlbiB3ZSBjYW4sIHNpbmNlIHRoZSB3aWRnZXQgbWlnaHQKICAg
ICAvLyBub3QgaGF2ZSBhbiBhY2N1cmF0ZSBtX3dpZHRoL21faGVpZ2h0LgotICAgIGludCB3aWR0
aCA9IHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpID8gc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgp
IDogCi0gICAgICAgIG1fd2lkdGggLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFk
ZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpOwotICAgIGludCBoZWlnaHQgPSBzdHlsZSgpLT5o
ZWlnaHQoKS5pc0ZpeGVkKCkgPyBzdHlsZSgpLT5oZWlnaHQoKS52YWx1ZSgpIDoKLSAgICAgICAg
bV9oZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gcGFkZGluZ1RvcCgpIC0g
cGFkZGluZ0JvdHRvbSgpOworICAgIGludCBjb250ZW50V2lkdGggPSBzdHlsZSgpLT53aWR0aCgp
LmlzRml4ZWQoKSA/IHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA6IAorICAgICAgICB3aWR0aCgp
IC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5n
UmlnaHQoKTsKKyAgICBpbnQgY29udGVudEhlaWdodCA9IHN0eWxlKCktPmhlaWdodCgpLmlzRml4
ZWQoKSA/IHN0eWxlKCktPmhlaWdodCgpLnZhbHVlKCkgOgorICAgICAgICBoZWlnaHQoKSAtIGJv
cmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9t
KCk7CiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNU
YWdOYW1lKHBhcmFtVGFnKSkgewogICAgICAgICAgICAgSFRNTFBhcmFtRWxlbWVudCogcCA9IHN0
YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnQqPihjaGlsZCk7CkBAIC04MCw3ICs4MCw3IEBAIHZv
aWQgUmVuZGVyQXBwbGV0OjpjcmVhdGVXaWRnZXRJZk5lY2Vzc2EKIAogICAgIEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKLSAgICBzZXRXaWRn
ZXQoZnJhbWUtPmxvYWRlcigpLT5jcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KEludFNpemUod2lkdGgs
IGhlaWdodCksIGVsZW1lbnQsIG1fYXJncykpOworICAgIHNldFdpZGdldChmcmFtZS0+bG9hZGVy
KCktPmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoSW50U2l6ZShjb250ZW50V2lkdGgsIGNvbnRlbnRI
ZWlnaHQpLCBlbGVtZW50LCBtX2FyZ3MpKTsKIH0KIAogdm9pZCBSZW5kZXJBcHBsZXQ6OmxheW91
dCgpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA0MDA3NSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIy
LDEwICs0MjIsMTAgQEAgaW50IFJlbmRlckJsb2NrOjpvdmVyZmxvd0hlaWdodChib29sIGluYwog
ICAgICAgICBpbnQgc2hhZG93SGVpZ2h0ID0gMDsKICAgICAgICAgZm9yIChTaGFkb3dEYXRhKiBi
b3hTaGFkb3cgPSBzdHlsZSgpLT5ib3hTaGFkb3coKTsgYm94U2hhZG93OyBib3hTaGFkb3cgPSBi
b3hTaGFkb3ctPm5leHQpCiAgICAgICAgICAgICBzaGFkb3dIZWlnaHQgPSBtYXgoYm94U2hhZG93
LT55ICsgYm94U2hhZG93LT5ibHVyLCBzaGFkb3dIZWlnaHQpOwotICAgICAgICBpbnQgaGVpZ2h0
ID0gbV9oZWlnaHQgKyBzaGFkb3dIZWlnaHQ7CisgICAgICAgIGludCBpbmZsYXRlZEhlaWdodCA9
IGhlaWdodCgpICsgc2hhZG93SGVpZ2h0OwogICAgICAgICBpZiAoaGFzUmVmbGVjdGlvbigpKQot
ICAgICAgICAgICAgaGVpZ2h0ID0gbWF4KGhlaWdodCwgcmVmbGVjdGlvbkJveCgpLmJvdHRvbSgp
KTsKLSAgICAgICAgcmV0dXJuIGhlaWdodDsKKyAgICAgICAgICAgIGluZmxhdGVkSGVpZ2h0ID0g
bWF4KGluZmxhdGVkSGVpZ2h0LCByZWZsZWN0aW9uQm94KCkuYm90dG9tKCkpOworICAgICAgICBy
ZXR1cm4gaW5mbGF0ZWRIZWlnaHQ7CiAgICAgfQogICAgIHJldHVybiBtX292ZXJmbG93SGVpZ2h0
OwogfQpAQCAtNDM2LDEwICs0MzYsMTAgQEAgaW50IFJlbmRlckJsb2NrOjpvdmVyZmxvd1dpZHRo
KGJvb2wgaW5jbAogICAgICAgICBpbnQgc2hhZG93V2lkdGggPSAwOwogICAgICAgICBmb3IgKFNo
YWRvd0RhdGEqIGJveFNoYWRvdyA9IHN0eWxlKCktPmJveFNoYWRvdygpOyBib3hTaGFkb3c7IGJv
eFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCkKICAgICAgICAgICAgIHNoYWRvd1dpZHRoID0gbWF4
KGJveFNoYWRvdy0+eCArIGJveFNoYWRvdy0+Ymx1ciwgc2hhZG93V2lkdGgpOwotICAgICAgICBp
bnQgd2lkdGggPSBtX3dpZHRoICsgc2hhZG93V2lkdGg7CisgICAgICAgIGludCBpbmZsYXRlZFdp
ZHRoID0gd2lkdGgoKSArIHNoYWRvd1dpZHRoOwogICAgICAgICBpZiAoaGFzUmVmbGVjdGlvbigp
KQotICAgICAgICAgICAgd2lkdGggPSBtYXgod2lkdGgsIHJlZmxlY3Rpb25Cb3goKS5yaWdodCgp
KTsKLSAgICAgICAgcmV0dXJuIHdpZHRoOworICAgICAgICAgICAgaW5mbGF0ZWRXaWR0aCA9IG1h
eChpbmZsYXRlZFdpZHRoLCByZWZsZWN0aW9uQm94KCkucmlnaHQoKSk7CisgICAgICAgIHJldHVy
biBpbmZsYXRlZFdpZHRoOwogICAgIH0KICAgICByZXR1cm4gbV9vdmVyZmxvd1dpZHRoOwogfQpA
QCAtNDc1LDcgKzQ3NSw3IEBAIGludCBSZW5kZXJCbG9jazo6b3ZlcmZsb3dUb3AoYm9vbCBpbmNs
dWQKIEludFJlY3QgUmVuZGVyQmxvY2s6Om92ZXJmbG93UmVjdChib29sIGluY2x1ZGVJbnRlcmlv
cikgY29uc3QKIHsKICAgICBpZiAoIWluY2x1ZGVJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAo
KSkgewotICAgICAgICBJbnRSZWN0IGJveCA9IGJvcmRlckJveCgpOworICAgICAgICBJbnRSZWN0
IGJveCA9IGJvcmRlckJveFJlY3QoKTsKICAgICAgICAgaW50IHNoYWRvd0xlZnQgPSAwOwogICAg
ICAgICBpbnQgc2hhZG93UmlnaHQgPSAwOwogICAgICAgICBpbnQgc2hhZG93VG9wID0gMDsKQEAg
LTUwOCw3ICs1MDgsNyBAQCBJbnRSZWN0IFJlbmRlckJsb2NrOjpvdmVyZmxvd1JlY3QoYm9vbCBp
CiAgICAgfQogCiAgICAgaWYgKCFpbmNsdWRlSW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkp
Ci0gICAgICAgIHJldHVybiBib3JkZXJCb3goKTsKKyAgICAgICAgcmV0dXJuIGJvcmRlckJveFJl
Y3QoKTsKICAgICBpbnQgbCA9IG92ZXJmbG93TGVmdChpbmNsdWRlSW50ZXJpb3IpOwogICAgIGlu
dCB0ID0gbWluKG92ZXJmbG93VG9wKGluY2x1ZGVJbnRlcmlvciksIC1ib3JkZXJUb3BFeHRyYSgp
KTsKICAgICByZXR1cm4gSW50UmVjdChsLCB0LCBvdmVyZmxvd1dpZHRoKGluY2x1ZGVJbnRlcmlv
cikgLSBsLCBtYXgob3ZlcmZsb3dIZWlnaHQoaW5jbHVkZUludGVyaW9yKSwgaGVpZ2h0KCkgKyBi
b3JkZXJCb3R0b21FeHRyYSgpKSAtIHQpOwpAQCAtNTIyLDcgKzUyMiw3IEBAIGJvb2wgUmVuZGVy
QmxvY2s6OmlzU2VsZkNvbGxhcHNpbmdCbG9jaygKICAgICAvLyAoYykgaGF2ZSBib3JkZXIvcGFk
ZGluZywKICAgICAvLyAoZCkgaGF2ZSBhIG1pbi1oZWlnaHQKICAgICAvLyAoZSkgaGF2ZSBzcGVj
aWZpZWQgdGhhdCBvbmUgb2Ygb3VyIG1hcmdpbnMgY2FuJ3QgY29sbGFwc2UgdXNpbmcgYSBDU1Mg
ZXh0ZW5zaW9uCi0gICAgaWYgKG1faGVpZ2h0ID4gMCB8fAorICAgIGlmIChoZWlnaHQoKSA+IDAg
fHwKICAgICAgICAgaXNUYWJsZSgpIHx8IChib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20o
KSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKSAhPSAwIHx8CiAgICAgICAgIHN0eWxlKCkt
Pm1pbkhlaWdodCgpLmlzUG9zaXRpdmUoKSB8fCAKICAgICAgICAgc3R5bGUoKS0+bWFyZ2luVG9w
Q29sbGFwc2UoKSA9PSBNU0VQQVJBVEUgfHwgc3R5bGUoKS0+bWFyZ2luQm90dG9tQ29sbGFwc2Uo
KSA9PSBNU0VQQVJBVEUpCkBAIC01NzAsOCArNTcwLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0KCkKICAgICAvLyBJdCdzIHNhZmUgdG8gY2hlY2sgZm9yIGNvbnRyb2wgY2xpcCBoZXJlLCBz
aW5jZSBjb250cm9scyBjYW4gbmV2ZXIgYmUgdGFibGUgY2VsbHMuCiAgICAgaWYgKGhhc0NvbnRy
b2xDbGlwKCkpIHsKICAgICAgICAgLy8gQmVjYXVzZSBvZiB0aGUgbGlnaHR3ZWlnaHQgY2xpcCwg
dGhlcmUgY2FuIG5ldmVyIGJlIGFueSBvdmVyZmxvdyBmcm9tIGNoaWxkcmVuLgotICAgICAgICBt
X292ZXJmbG93V2lkdGggPSBtX3dpZHRoOwotICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbV9o
ZWlnaHQ7CisgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IHdpZHRoKCk7CisgICAgICAgIG1fb3Zl
cmZsb3dIZWlnaHQgPSBoZWlnaHQoKTsKICAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSAwOwogICAg
ICAgICBtX292ZXJmbG93VG9wID0gMDsKICAgICB9CkBAIC01OTUsMjQgKzU5NSwyNSBAQCB2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgIG9sZE91dGxpbmVC
b3ggPSBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsKICAgICB9CiAKLSAgICBMYXlvdXRTdGF0ZU1h
aW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHhQb3MoKSwgeVBvcygp
KSwgbV9oYXNDb2x1bW5zIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7Cisg
ICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6
ZSh4KCksIHkoKSksIG1faGFzQ29sdW1ucyB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0
aW9uKCkpOwogCi0gICAgaW50IG9sZFdpZHRoID0gbV93aWR0aDsKKyAgICBpbnQgb2xkV2lkdGgg
PSB3aWR0aCgpOwogICAgIGludCBvbGRDb2x1bW5XaWR0aCA9IGRlc2lyZWRDb2x1bW5XaWR0aCgp
OwogCiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2FsY0NvbHVtbldpZHRoKCk7CiAKLSAgICBtX292
ZXJmbG93V2lkdGggPSBtX3dpZHRoOworICAgIG1fb3ZlcmZsb3dXaWR0aCA9IHdpZHRoKCk7CiAg
ICAgbV9vdmVyZmxvd0xlZnQgPSAwOwogCi0gICAgaWYgKG9sZFdpZHRoICE9IG1fd2lkdGggfHwg
b2xkQ29sdW1uV2lkdGggIT0gZGVzaXJlZENvbHVtbldpZHRoKCkpCisgICAgaWYgKG9sZFdpZHRo
ICE9IHdpZHRoKCkgfHwgb2xkQ29sdW1uV2lkdGggIT0gZGVzaXJlZENvbHVtbldpZHRoKCkpCiAg
ICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCiAgICAgY2xlYXJGbG9hdHMoKTsKIAot
ICAgIGludCBwcmV2aW91c0hlaWdodCA9IG1faGVpZ2h0OwotICAgIG1faGVpZ2h0ID0gMDsKKyAg
ICBpbnQgcHJldmlvdXNIZWlnaHQgPSBoZWlnaHQoKTsKKyAgICBzZXRIZWlnaHQoMCk7CisKICAg
ICBtX292ZXJmbG93SGVpZ2h0ID0gMDsKIAogICAgIC8vIFdlIHVzZSBmb3VyIHZhbHVlcywgbWF4
VG9wUG9zLCBtYXhQb3NOZWcsIG1heEJvdHRvbVBvcywgYW5kIG1heEJvdHRvbU5lZywgdG8gdHJh
Y2sKQEAgLTY1OCwyNSArNjU5LDI1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJv
b2wgcmVsYXkKIAogICAgIC8vIEV4cGFuZCBvdXIgaW50cmluc2ljIGhlaWdodCB0byBlbmNvbXBh
c3MgZmxvYXRzLgogICAgIGludCB0b0FkZCA9IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRv
bSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwotICAgIGlmIChmbG9hdEJvdHRvbSgp
ID4gKG1faGVpZ2h0IC0gdG9BZGQpICYmIChpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpIHx8
IGlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fAorICAgIGlm
IChmbG9hdEJvdHRvbSgpID4gKGhlaWdodCgpIC0gdG9BZGQpICYmIChpc0lubGluZUJsb2NrT3JJ
bmxpbmVUYWJsZSgpIHx8IGlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSB8fCBoYXNPdmVyZmxvd0Ns
aXAoKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmVudCgpICYm
IHBhcmVudCgpLT5pc0ZsZXhpYmxlQm94KCkgfHwgbV9oYXNDb2x1bW5zKSkpCi0gICAgICAgIG1f
aGVpZ2h0ID0gZmxvYXRCb3R0b20oKSArIHRvQWRkOworICAgICAgICBzZXRIZWlnaHQoZmxvYXRC
b3R0b20oKSArIHRvQWRkKTsKICAgICAKICAgICAvLyBOb3cgbGF5IG91dCBvdXIgY29sdW1ucyB3
aXRoaW4gdGhpcyBpbnRyaW5zaWMgaGVpZ2h0LCBzaW5jZSB0aGV5IGNhbiBzbGlnaHRseSBhZmZl
Y3QgdGhlIGludHJpbnNpYyBoZWlnaHQgYXMKICAgICAvLyB3ZSBhZGp1c3QgZm9yIGNsZWFuIGNv
bHVtbiBicmVha3MuCiAgICAgaW50IHNpbmdsZUNvbHVtbkJvdHRvbSA9IGxheW91dENvbHVtbnMo
KTsKIAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbmV3IGhlaWdodC4KLSAgICBpbnQgb2xkSGVpZ2h0
ID0gbV9oZWlnaHQ7CisgICAgaW50IG9sZEhlaWdodCA9IGhlaWdodCgpOwogICAgIGNhbGNIZWln
aHQoKTsKLSAgICBpZiAob2xkSGVpZ2h0ICE9IG1faGVpZ2h0KSB7Ci0gICAgICAgIGlmIChvbGRI
ZWlnaHQgPiBtX2hlaWdodCAmJiBtYXhGbG9hdEJvdHRvbSA+IG1faGVpZ2h0ICYmICFjaGlsZHJl
bklubGluZSgpKSB7CisgICAgaWYgKG9sZEhlaWdodCAhPSBoZWlnaHQoKSkgeworICAgICAgICBp
ZiAob2xkSGVpZ2h0ID4gaGVpZ2h0KCkgJiYgbWF4RmxvYXRCb3R0b20gPiBoZWlnaHQoKSAmJiAh
Y2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAgICAgLy8gT25lIG9mIG91ciBjaGlsZHJlbidz
IGZsb2F0cyBtYXkgaGF2ZSBiZWNvbWUgYW4gb3ZlcmhhbmdpbmcgZmxvYXQgZm9yIHVzLiBXZSBu
ZWVkIHRvIGxvb2sgZm9yIGl0LgogICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCbG9ja0Zsb3coKSAmJiAhY2hpbGQtPmlzRmxv
YXRpbmdPclBvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayog
YmxvY2sgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGJsb2NrLT5mbG9hdEJvdHRvbSgpICsgYmxvY2stPnlQb3MoKSA+IG1faGVpZ2h0
KQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3ZlcmhhbmdpbmdGbG9hdHMoYmxvY2ssIC1i
bG9jay0+eFBvcygpLCAtYmxvY2stPnlQb3MoKSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPmZsb2F0Qm90dG9tKCkgKyBibG9jay0+eSgpID4gaGVpZ2h0KCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRPdmVyaGFuZ2luZ0Zsb2F0cyhibG9jaywgLWJsb2NrLT54
KCksIC1ibG9jay0+eSgpLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC02ODQsMjAgKzY4NSwxOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgIGxheW91dENvbHVtbnMoc2luZ2xlQ29sdW1uQm90
dG9tKTsKIAogICAgICAgICAvLyBJZiB0aGUgYmxvY2sgZ290IGV4cGFuZGVkIGluIHNpemUsIHRo
ZW4gaW5jcmVhc2Ugb3VyIG92ZXJmbG93aGVpZ2h0IHRvIG1hdGNoLgotICAgICAgICBpZiAobV9v
dmVyZmxvd0hlaWdodCA+IG1faGVpZ2h0KQorICAgICAgICBpZiAobV9vdmVyZmxvd0hlaWdodCA+
IGhlaWdodCgpKQogICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCAtPSB0b0FkZDsKLSAgICAg
ICAgaWYgKG1fb3ZlcmZsb3dIZWlnaHQgPCBtX2hlaWdodCkKLSAgICAgICAgICAgIG1fb3ZlcmZs
b3dIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgaWYgKG1fb3ZlcmZsb3dIZWlnaHQgPCBoZWln
aHQoKSkKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBoZWlnaHQoKTsKICAgICB9Ci0g
ICAgaWYgKHByZXZpb3VzSGVpZ2h0ICE9IG1faGVpZ2h0KQorICAgIGlmIChwcmV2aW91c0hlaWdo
dCAhPSBoZWlnaHQoKSkKICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CiAKICAgICAv
LyBTb21lIGNsYXNzZXMgb2Ygb2JqZWN0cyAoZmxvYXRzIGFuZCBmaWVsZHNldHMgd2l0aCBubyBz
cGVjaWZpZWQgaGVpZ2h0cyBhbmQgdGFibGUgY2VsbHMpIGV4cGFuZCB0byBlbmNvbXBhc3MKICAg
ICAvLyBvdmVyaGFuZ2luZyBmbG9hdHMuCi0gICAgaWYgKGhhc092ZXJoYW5naW5nRmxvYXRzKCkg
JiYgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpIHsKLSAgICAgICAgbV9oZWln
aHQgPSBmbG9hdEJvdHRvbSgpOwotICAgICAgICBtX2hlaWdodCArPSBib3JkZXJCb3R0b20oKSAr
IHBhZGRpbmdCb3R0b20oKTsKLSAgICB9CisgICAgaWYgKGhhc092ZXJoYW5naW5nRmxvYXRzKCkg
JiYgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCisgICAgICAgIHNldEhlaWdo
dChmbG9hdEJvdHRvbSgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkpOwogCiAg
ICAgaWYgKChpc0NlbGwgfHwgaXNJbmxpbmUoKSB8fCBpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkg
fHwgaXNSb290KCkpICYmICFoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzQ29udHJvbENsaXAoKSkK
ICAgICAgICAgYWRkVmlzdWFsT3ZlcmZsb3coZmxvYXRSZWN0KCkpOwpAQCAtNzA3LDE1ICs3MDYs
MTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIHBvc2l0
aW9uTGlzdE1hcmtlcigpOwogCiAgICAgLy8gQWx3YXlzIGVuc3VyZSBvdXIgb3ZlcmZsb3cgd2lk
dGgvaGVpZ2h0IGFyZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyBvdXIgd2lkdGgvaGVpZ2h0LgotICAg
IG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lkdGgsIG1fd2lkdGgpOwotICAgIG1f
b3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgbV9oZWlnaHQpOworICAgIG1f
b3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lkdGgsIHdpZHRoKCkpOworICAgIG1fb3Zl
cmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgaGVpZ2h0KCkpOwogCiAgICAgaWYg
KCFoYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBmb3IgKFNoYWRvd0RhdGEqIGJveFNoYWRv
dyA9IHN0eWxlKCktPmJveFNoYWRvdygpOyBib3hTaGFkb3c7IGJveFNoYWRvdyA9IGJveFNoYWRv
dy0+bmV4dCkgewogICAgICAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4obV9vdmVyZmxvd0xl
ZnQsIGJveFNoYWRvdy0+eCAtIGJveFNoYWRvdy0+Ymx1cik7Ci0gICAgICAgICAgICBtX292ZXJm
bG93V2lkdGggPSBtYXgobV9vdmVyZmxvd1dpZHRoLCBtX3dpZHRoICsgYm94U2hhZG93LT54ICsg
Ym94U2hhZG93LT5ibHVyKTsKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292
ZXJmbG93V2lkdGgsIHdpZHRoKCkgKyBib3hTaGFkb3ctPnggKyBib3hTaGFkb3ctPmJsdXIpOwog
ICAgICAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9wLCBib3hTaGFkb3ct
PnkgLSBib3hTaGFkb3ctPmJsdXIpOwotICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1h
eChtX292ZXJmbG93SGVpZ2h0LCBtX2hlaWdodCArIGJveFNoYWRvdy0+eSArIGJveFNoYWRvdy0+
Ymx1cik7CisgICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWln
aHQsIGhlaWdodCgpICsgYm94U2hhZG93LT55ICsgYm94U2hhZG93LT5ibHVyKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKGhhc1JlZmxlY3Rpb24oKSkgewpAQCAtNzUyLDcgKzc1
MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAg
ICAgIHJlcGFpbnRSZWN0LnNldFkoeSk7CiAKICAgICAgICAgICAgIC8vIERvbid0IGFsbG93IHRo
aXMgcmVjdCB0byBzcGlsbCBvdXQgb2Ygb3VyIG92ZXJmbG93IGJveC4KLSAgICAgICAgICAgIHJl
cGFpbnRSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0KSk7Cisg
ICAgICAgICAgICByZXBhaW50UmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBo
ZWlnaHQoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSByZWN0IGlz
IHN0aWxsIG5vbi1lbXB0eSBhZnRlciBpbnRlcnNlY3RpbmcgZm9yIG92ZXJmbG93IGFib3ZlCkBA
IC03NzUsNyArNzc0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9zaXRpb25lZEJsb2Nr
KAogICAgIH0KIAogICAgIGlmIChjaGlsZC0+aGFzU3RhdGljWSgpKSB7Ci0gICAgICAgIGludCB5
ID0gbV9oZWlnaHQ7CisgICAgICAgIGludCB5ID0gaGVpZ2h0KCk7CiAgICAgICAgIGlmICghbWFy
Z2luSW5mby5jYW5Db2xsYXBzZVdpdGhUb3AoKSkgewogICAgICAgICAgICAgY2hpbGQtPmNhbGNW
ZXJ0aWNhbE1hcmdpbnMoKTsKICAgICAgICAgICAgIGludCBtYXJnaW5Ub3AgPSBjaGlsZC0+bWFy
Z2luVG9wKCk7CkBAIC04MTAsMTUgKzgwOSwxNSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RG
bG9hdGluZ0Jsb2NrKGNvCiAgICAgLy8gaHR0cDovL3d3dy5oaXhpZS5jaC90ZXN0cy9hZGhvYy9j
c3MvYm94L2Jsb2NrL21hcmdpbi1jb2xsYXBzZS8wNDYuaHRtbCBmb3IKICAgICAvLyBhbiBleGFt
cGxlIG9mIHRoaXMgc2NlbmFyaW8uCiAgICAgaW50IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8u
Y2FuQ29sbGFwc2VXaXRoVG9wKCkgPyAwIDogbWFyZ2luSW5mby5tYXJnaW4oKTsKLSAgICBtX2hl
aWdodCArPSBtYXJnaW5PZmZzZXQ7CisgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbWFyZ2luT2Zm
c2V0KTsKICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOwotICAgIG1faGVpZ2h0IC09IG1hcmdpbk9m
ZnNldDsKKyAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgLSBtYXJnaW5PZmZzZXQpOwogfQogCi1SZW5k
ZXJPYmplY3QqIFJlbmRlckJsb2NrOjpoYW5kbGVTcGVjaWFsQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgY29uc3QgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgQ29tcGFjdEluZm8mIGNvbXBhY3RJ
bmZvLCBib29sJiBoYW5kbGVkKQorUmVuZGVyQm94KiBSZW5kZXJCbG9jazo6aGFuZGxlU3BlY2lh
bENoaWxkKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIENv
bXBhY3RJbmZvJiBjb21wYWN0SW5mbywgYm9vbCYgaGFuZGxlZCkKIHsKICAgICAvLyBIYW5kbGUg
cG9zaXRpb25lZCBjaGlsZHJlbiBmaXJzdC4KLSAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBoYW5k
bGVQb3NpdGlvbmVkQ2hpbGQoY2hpbGQsIG1hcmdpbkluZm8sIGhhbmRsZWQpOworICAgIFJlbmRl
ckJveCogbmV4dCA9IGhhbmRsZVBvc2l0aW9uZWRDaGlsZChjaGlsZCwgbWFyZ2luSW5mbywgaGFu
ZGxlZCk7CiAgICAgaWYgKGhhbmRsZWQpIHJldHVybiBuZXh0OwogICAgIAogICAgIC8vIEhhbmRs
ZSBmbG9hdGluZyBjaGlsZHJlbiBuZXh0LgpAQCAtODM0LDMxICs4MzMsMzEgQEAgUmVuZGVyT2Jq
ZWN0KiBSZW5kZXJCbG9jazo6aGFuZGxlU3BlY2lhbAogfQogCiAKLVJlbmRlck9iamVjdCogUmVu
ZGVyQmxvY2s6OmhhbmRsZVBvc2l0aW9uZWRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25z
dCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBib29sJiBoYW5kbGVkKQorUmVuZGVyQm94KiBSZW5k
ZXJCbG9jazo6aGFuZGxlUG9zaXRpb25lZENoaWxkKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1h
cmdpbkluZm8mIG1hcmdpbkluZm8sIGJvb2wmIGhhbmRsZWQpCiB7CiAgICAgaWYgKGNoaWxkLT5p
c1Bvc2l0aW9uZWQoKSkgewogICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgY2hpbGQt
PmNvbnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGNoaWxkKTsKICAgICAg
ICAgYWRqdXN0UG9zaXRpb25lZEJsb2NrKGNoaWxkLCBtYXJnaW5JbmZvKTsKLSAgICAgICAgcmV0
dXJuIGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAgICByZXR1cm4gY2hpbGQtPm5leHRTaWJs
aW5nQm94KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CiB9CiAKLVJlbmRlck9iamVjdCogUmVu
ZGVyQmxvY2s6OmhhbmRsZUZsb2F0aW5nQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgY29uc3Qg
TWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgYm9vbCYgaGFuZGxlZCkKK1JlbmRlckJveCogUmVuZGVy
QmxvY2s6OmhhbmRsZUZsb2F0aW5nQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTWFyZ2lu
SW5mbyYgbWFyZ2luSW5mbywgYm9vbCYgaGFuZGxlZCkKIHsKICAgICBpZiAoY2hpbGQtPmlzRmxv
YXRpbmcoKSkgewogICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgaW5zZXJ0RmxvYXRp
bmdPYmplY3QoY2hpbGQpOwogICAgICAgICBhZGp1c3RGbG9hdGluZ0Jsb2NrKG1hcmdpbkluZm8p
OwotICAgICAgICByZXR1cm4gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIHJldHVybiBj
aGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIDA7CiB9CiAK
LVJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OmhhbmRsZUNvbXBhY3RDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBDb21wYWN0SW5mbyYgY29tcGFjdEluZm8sIGJvb2wmIGhhbmRsZWQpCitSZW5k
ZXJCb3gqIFJlbmRlckJsb2NrOjpoYW5kbGVDb21wYWN0Q2hpbGQoUmVuZGVyQm94KiBjaGlsZCwg
Q29tcGFjdEluZm8mIGNvbXBhY3RJbmZvLCBib29sJiBoYW5kbGVkKQogewogICAgIC8vIEZJWE1F
OiBXZSBvbmx5IGRlYWwgd2l0aCBvbmUgY29tcGFjdCBhdCBhIHRpbWUuICBJdCBpcyB1bmNsZWFy
IHdoYXQgc2hvdWxkIGJlCiAgICAgLy8gZG9uZSBpZiBtdWx0aXBsZSBjb250aWd1b3VzIGNvbXBh
Y3RzIGFyZSBlbmNvdW50ZXJlZC4gIEZvciBub3cgd2UgYXNzdW1lIHRoYXQKQEAgLTg4MSwxMiAr
ODgwLDEyIEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OmhhbmRsZUNvbXBhY3QKICAgICAg
ICAgICAgICAgICAvLyBUaGUgY29tcGFjdCB3aWxsIGZpdCBpbiB0aGUgbWFyZ2luLgogICAgICAg
ICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGNvbXBhY3RJbmZvLnNl
dChjaGlsZCwgY3Vycik7Ci0gICAgICAgICAgICAgICAgY2hpbGQtPnNldFBvcygwLDApOyAvLyBU
aGlzIHBvc2l0aW9uIHdpbGwgYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBjb21wYWN0J3MKKyAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjaGlsZCktPnNldExvY2F0aW9u
KEludFBvaW50KCkpOyAvLyBUaGlzIHBvc2l0aW9uIHdpbGwgYmUgdXBkYXRlZCB0byByZWZsZWN0
IHRoZSBjb21wYWN0J3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRl
c2lyZWQgcG9zaXRpb24gYW5kIHRoZSBsaW5lIGJveCBmb3IgdGhlIGNvbXBhY3Qgd2lsbAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGljayB0aGF0IHBvc2l0aW9uIHVw
LgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgY2hpbGQu
Ci0gICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gY2hpbGQtPm5leHRTaWJsaW5n
KCk7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBuZXh0ID0gY2hpbGQtPm5leHRTaWJsaW5n
Qm94KCk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBOb3cgaW5zZXJ0IHRoZSBjaGlsZCB1bmRlciB8
Y3VycnwuCkBAIC05MDAsMjQgKzg5OSwyNCBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckJsb2NrOjpo
YW5kbGVDb21wYWN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6Omluc2Vy
dENvbXBhY3RJZk5lZWRlZChSZW5kZXJPYmplY3QqIGNoaWxkLCBDb21wYWN0SW5mbyYgY29tcGFj
dEluZm8pCit2b2lkIFJlbmRlckJsb2NrOjppbnNlcnRDb21wYWN0SWZOZWVkZWQoUmVuZGVyQm94
KiBjaGlsZCwgQ29tcGFjdEluZm8mIGNvbXBhY3RJbmZvKQogewogICAgIGlmIChjb21wYWN0SW5m
by5tYXRjaGVzKGNoaWxkKSkgewogICAgICAgICAvLyBXZSBoYXZlIGEgY29tcGFjdCBjaGlsZCB0
byBzcXVlZXplIGluLgotICAgICAgICBSZW5kZXJPYmplY3QqIGNvbXBhY3RDaGlsZCA9IGNvbXBh
Y3RJbmZvLmNvbXBhY3QoKTsKKyAgICAgICAgUmVuZGVyQm94KiBjb21wYWN0Q2hpbGQgPSBjb21w
YWN0SW5mby5jb21wYWN0KCk7CiAgICAgICAgIGludCBjb21wYWN0WFBvcyA9IGJvcmRlckxlZnQo
KSArIHBhZGRpbmdMZWZ0KCkgKyBjb21wYWN0Q2hpbGQtPm1hcmdpbkxlZnQoKTsKICAgICAgICAg
aWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkgewogICAgICAgICAgICAgY29tcGFjdENo
aWxkLT5jYWxjV2lkdGgoKTsgLy8gaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugb2YgdGhlIGNhcHBl
ZCBtYXh3aWR0aAogICAgICAgICAgICAgY29tcGFjdFhQb3MgPSB3aWR0aCgpIC0gYm9yZGVyUmln
aHQoKSAtIHBhZGRpbmdSaWdodCgpIC0gbWFyZ2luUmlnaHQoKSAtCiAgICAgICAgICAgICAgICAg
Y29tcGFjdENoaWxkLT53aWR0aCgpIC0gY29tcGFjdENoaWxkLT5tYXJnaW5SaWdodCgpOwogICAg
ICAgICB9Ci0gICAgICAgIGNvbXBhY3RYUG9zIC09IGNoaWxkLT54UG9zKCk7IC8vIFB1dCBjb21w
YWN0WFBvcyBpbnRvIHRoZSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgICAgIGNvbXBh
Y3RDaGlsZC0+c2V0UG9zKGNvbXBhY3RYUG9zLCBjb21wYWN0Q2hpbGQtPnlQb3MoKSk7IC8vIFNl
dCB0aGUgeCBwb3NpdGlvbi4KKyAgICAgICAgY29tcGFjdFhQb3MgLT0gY2hpbGQtPngoKTsgLy8g
UHV0IGNvbXBhY3RYUG9zIGludG8gdGhlIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZS4KKyAgICAg
ICAgY29tcGFjdENoaWxkLT5zZXRMb2NhdGlvbihjb21wYWN0WFBvcywgY29tcGFjdENoaWxkLT55
KCkpOyAvLyBTZXQgdGhlIHggcG9zaXRpb24uCiAgICAgICAgIGNvbXBhY3RJbmZvLmNsZWFyKCk7
CiAgICAgfQogfQogCi1SZW5kZXJPYmplY3QqIFJlbmRlckJsb2NrOjpoYW5kbGVSdW5JbkNoaWxk
KFJlbmRlck9iamVjdCogY2hpbGQsIGJvb2wmIGhhbmRsZWQpCitSZW5kZXJCb3gqIFJlbmRlckJs
b2NrOjpoYW5kbGVSdW5JbkNoaWxkKFJlbmRlckJveCogY2hpbGQsIGJvb2wmIGhhbmRsZWQpCiB7
CiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBydW4taW4gZWxlbWVudCB3aXRoIGlubGluZSBjaGls
ZHJlbi4gIElmIHRoZQogICAgIC8vIGNoaWxkcmVuIGFyZW4ndCBpbmxpbmUsIHRoZW4ganVzdCB0
cmVhdCB0aGUgcnVuLWluIGFzIGEgbm9ybWFsCkBAIC05MzIsMTAgKzkzMSwxMCBAQCBSZW5kZXJP
YmplY3QqIFJlbmRlckJsb2NrOjpoYW5kbGVSdW5JbkNoCiAgICAgICAgICAgICAvLyBwb3NpdGlv
bi4KICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgY2hpbGQtPnNldElu
bGluZSh0cnVlKTsKLSAgICAgICAgICAgIGNoaWxkLT5zZXRQb3MoMCwwKTsKKyAgICAgICAgICAg
IGNoaWxkLT5zZXRMb2NhdGlvbigwLDApOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBS
ZW1vdmUgdGhlIGNoaWxkLgotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBSZW5kZXJCb3gqIG5leHQgPSBjaGlsZC0+bmV4
dFNpYmxpbmdCb3goKTsKICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIC8vIE5vdyBpbnNlcnQgdGhlIGNoaWxkIHVuZGVyIHxjdXJy
fC4KQEAgLTk0Niw3ICs5NDUsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckJsb2NrOjpoYW5kbGVS
dW5JbkNoCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFy
Z2lucyhSZW5kZXJPYmplY3QqIGNoaWxkLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBpbnQgeVBv
c0VzdGltYXRlKQordm9pZCBSZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKFJlbmRlckJveCog
Y2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIGludCB5UG9zRXN0aW1hdGUpCiB7CiAgICAg
Ly8gR2V0IG91ciBtYXggcG9zIGFuZCBuZWcgdG9wIG1hcmdpbnMuCiAgICAgaW50IHBvc1RvcCA9
IGNoaWxkLT5tYXhUb3BNYXJnaW4odHJ1ZSk7CkBAIC05OTEsNyArOTkwLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKFJlbmRlcgogICAgIGlmIChtYXJnaW5JbmZvLnF1aXJr
Q29udGFpbmVyKCkgJiYgbWFyZ2luSW5mby5hdFRvcE9mQmxvY2soKSAmJiAocG9zVG9wIC0gbmVn
VG9wKSkKICAgICAgICAgbWFyZ2luSW5mby5zZXRUb3BRdWlyayh0b3BRdWlyayk7CiAKLSAgICBp
bnQgeXBvcyA9IG1faGVpZ2h0OworICAgIGludCB5cG9zID0gaGVpZ2h0KCk7CiAgICAgaWYgKGNo
aWxkLT5pc1NlbGZDb2xsYXBzaW5nQmxvY2soKSkgewogICAgICAgICAvLyBUaGlzIGNoaWxkIGhh
cyBubyBoZWlnaHQuICBXZSBuZWVkIHRvIGNvbXB1dGUgb3VyCiAgICAgICAgIC8vIHBvc2l0aW9u
IGJlZm9yZSB3ZSBjb2xsYXBzZSB0aGUgY2hpbGQncyBtYXJnaW5zIHRvZ2V0aGVyLApAQCAtMTAx
MCwyMCArMTAwOSwyMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVy
CiAgICAgICAgICAgICAvLyBpcyBjb3JyZWN0LCBzaW5jZSBpdCBjb3VsZCBoYXZlIG92ZXJmbG93
aW5nIGNvbnRlbnQKICAgICAgICAgICAgIC8vIHRoYXQgbmVlZHMgdG8gYmUgcG9zaXRpb25lZCBj
b3JyZWN0bHkgKGUuZy4sIGEgYmxvY2sgdGhhdAogICAgICAgICAgICAgLy8gaGFkIGEgc3BlY2lm
aWVkIGhlaWdodCBvZiAwIGJ1dCB0aGF0IGFjdHVhbGx5IGhhZCBzdWJjb250ZW50KS4KLSAgICAg
ICAgICAgIHlwb3MgPSBtX2hlaWdodCArIGNvbGxhcHNlZFRvcFBvcyAtIGNvbGxhcHNlZFRvcE5l
ZzsKKyAgICAgICAgICAgIHlwb3MgPSBoZWlnaHQoKSArIGNvbGxhcHNlZFRvcFBvcyAtIGNvbGxh
cHNlZFRvcE5lZzsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChjaGlsZC0+c3R5bGUo
KS0+bWFyZ2luVG9wQ29sbGFwc2UoKSA9PSBNU0VQQVJBVEUpIHsKLSAgICAgICAgICAgIG1faGVp
Z2h0ICs9IG1hcmdpbkluZm8ubWFyZ2luKCkgKyBjaGlsZC0+bWFyZ2luVG9wKCk7Ci0gICAgICAg
ICAgICB5cG9zID0gbV9oZWlnaHQ7CisgICAgICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBt
YXJnaW5JbmZvLm1hcmdpbigpICsgY2hpbGQtPm1hcmdpblRvcCgpKTsKKyAgICAgICAgICAgIHlw
b3MgPSBoZWlnaHQoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICghbWFyZ2luSW5mby5h
dFRvcE9mQmxvY2soKSB8fAogICAgICAgICAgICAgKCFtYXJnaW5JbmZvLmNhbkNvbGxhcHNlVG9w
V2l0aENoaWxkcmVuKCkKICAgICAgICAgICAgICAmJiAoIXN0eWxlKCktPmh0bWxIYWNrcygpIHx8
ICFtYXJnaW5JbmZvLnF1aXJrQ29udGFpbmVyKCkgfHwgIW1hcmdpbkluZm8udG9wUXVpcmsoKSkp
KSB7CiAgICAgICAgICAgICAvLyBXZSdyZSBjb2xsYXBzaW5nIHdpdGggYSBwcmV2aW91cyBzaWJs
aW5nJ3MgbWFyZ2lucyBhbmQgbm90CiAgICAgICAgICAgICAvLyB3aXRoIHRoZSB0b3Agb2YgdGhl
IGJsb2NrLgotICAgICAgICAgICAgbV9oZWlnaHQgKz0gbWF4KG1hcmdpbkluZm8ucG9zTWFyZ2lu
KCksIHBvc1RvcCkgLSBtYXgobWFyZ2luSW5mby5uZWdNYXJnaW4oKSwgbmVnVG9wKTsKLSAgICAg
ICAgICAgIHlwb3MgPSBtX2hlaWdodDsKKyAgICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSAr
IG1heChtYXJnaW5JbmZvLnBvc01hcmdpbigpLCBwb3NUb3ApIC0gbWF4KG1hcmdpbkluZm8ubmVn
TWFyZ2luKCksIG5lZ1RvcCkpOworICAgICAgICAgICAgeXBvcyA9IGhlaWdodCgpOwogICAgICAg
ICB9CiAKICAgICAgICAgbWFyZ2luSW5mby5zZXRQb3NNYXJnaW4oY2hpbGQtPm1heEJvdHRvbU1h
cmdpbih0cnVlKSk7CkBAIC0xMDM2LDcgKzEwMzUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb2xs
YXBzZU1hcmdpbnMoUmVuZGVyCiAgICAgfQogCiAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJ
bnRTaXplKDAsIHlQb3NFc3RpbWF0ZSAtIHlwb3MpKTsKLSAgICBjaGlsZC0+c2V0UG9zKGNoaWxk
LT54UG9zKCksIHlwb3MpOworICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+eCgpLCB5cG9z
KTsKICAgICBpZiAoeXBvcyAhPSB5UG9zRXN0aW1hdGUpIHsKICAgICAgICAgaWYgKGNoaWxkLT5z
aHJpbmtUb0F2b2lkRmxvYXRzKCkpCiAgICAgICAgICAgICAvLyBUaGUgY2hpbGQncyB3aWR0aCBk
ZXBlbmRzIG9uIHRoZSBsaW5lIHdpZHRoLgpAQCAtMTA1Myw3ICsxMDUyLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKFJlbmRlcgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZChSZW5kZXJPYmplY3QqIGNoaWxkLCBNYXJnaW5JbmZv
JiBtYXJnaW5JbmZvLCBpbnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xkVG9wTmVnTWFyZ2luKQor
dm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZChSZW5kZXJCb3gqIGNoaWxkLCBN
YXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBpbnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xkVG9wTmVn
TWFyZ2luKQogewogICAgIGludCBoZWlnaHRJbmNyZWFzZSA9IGdldENsZWFyRGVsdGEoY2hpbGQp
OwogICAgIGlmICghaGVpZ2h0SW5jcmVhc2UpCkBAIC0xMDYxLDcgKzEwNjAsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpjbGVhckZsb2F0c0lmTmVlZGVkKFJlCiAKICAgICAvLyBUaGUgY2hpbGQgbmVl
ZHMgdG8gYmUgbG93ZXJlZC4gIE1vdmUgdGhlIGNoaWxkIHNvIHRoYXQgaXQganVzdCBjbGVhcnMg
dGhlIGZsb2F0LgogICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZSgwLCAtaGVpZ2h0
SW5jcmVhc2UpKTsKLSAgICBjaGlsZC0+c2V0UG9zKGNoaWxkLT54UG9zKCksIGNoaWxkLT55UG9z
KCkgKyBoZWlnaHRJbmNyZWFzZSk7CisgICAgY2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54KCks
IGNoaWxkLT55KCkgKyBoZWlnaHRJbmNyZWFzZSk7CiAKICAgICBpZiAoY2hpbGQtPmlzU2VsZkNv
bGxhcHNpbmdCbG9jaygpKSB7CiAgICAgICAgIC8vIEZvciBzZWxmLWNvbGxhcHNpbmcgYmxvY2tz
IHRoYXQgY2xlYXIsIHRoZXkgY2FuIHN0aWxsIGNvbGxhcHNlIHRoZWlyCkBAIC0xMDcxLDcgKzEw
NzAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0c0lmTmVlZGVkKFJlCiAgICAgICAg
IG1hcmdpbkluZm8uc2V0TmVnTWFyZ2luKG1heChjaGlsZC0+bWF4VG9wTWFyZ2luKGZhbHNlKSwg
Y2hpbGQtPm1heEJvdHRvbU1hcmdpbihmYWxzZSkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFk
anVzdCBvdXIgaGVpZ2h0IHN1Y2ggdGhhdCB3ZSBhcmUgcmVhZHkgdG8gYmUgY29sbGFwc2VkIHdp
dGggc3Vic2VxdWVudCBzaWJsaW5ncy4KLSAgICAgICAgbV9oZWlnaHQgPSBjaGlsZC0+eVBvcygp
IC0gbWF4KDAsIG1hcmdpbkluZm8ubWFyZ2luKCkpOworICAgICAgICBzZXRIZWlnaHQoY2hpbGQt
PnkoKSAtIG1heCgwLCBtYXJnaW5JbmZvLm1hcmdpbigpKSk7CiAgICAgICAgIAogICAgICAgICAv
LyBTZXQgYSBmbGFnIHRoYXQgd2UgY2xlYXJlZCBhIGZsb2F0IHNvIHRoYXQgd2Uga25vdyBib3Ro
IHRvIGluY3JlYXNlIHRoZSBoZWlnaHQgb2YgdGhlIGJsb2NrCiAgICAgICAgIC8vIHRvIGNvbXBl
bnNhdGUgZm9yIHRoZSBjbGVhciBhbmQgdG8gYXZvaWQgY29sbGFwc2luZyBvdXIgbWFyZ2lucyB3
aXRoIHRoZSBwYXJlbnQgYmxvY2sncwpAQCAtMTA3OSw3ICsxMDc4LDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZChSZQogICAgICAgICBtYXJnaW5JbmZvLnNldFNlbGZD
b2xsYXBzaW5nQmxvY2tDbGVhcmVkRmxvYXQodHJ1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIC8v
IEluY3JlYXNlIG91ciBoZWlnaHQgYnkgdGhlIGFtb3VudCB3ZSBoYWQgdG8gY2xlYXIuCi0gICAg
ICAgIG1faGVpZ2h0ICs9IGhlaWdodEluY3JlYXNlOworICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0
KCkgKyBoZWlnaHRJbmNyZWFzZSk7CiAgICAgCiAgICAgaWYgKG1hcmdpbkluZm8uY2FuQ29sbGFw
c2VXaXRoVG9wKCkpIHsKICAgICAgICAgLy8gV2UgY2FuIG5vIGxvbmdlciBjb2xsYXBzZSB3aXRo
IHRoZSB0b3Agb2YgdGhlIGJsb2NrIHNpbmNlIGEgY2xlYXIKQEAgLTExMDksNyArMTEwOCw3IEBA
IGludCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVWZXJ0aWNhbFBvc2l0aW8KIHsKICAgICAvLyBGSVhN
RTogV2UgbmVlZCB0byBlbGltaW5hdGUgdGhlIGVzdGltYXRpb24gb2YgdmVydGljYWwgcG9zaXRp
b24sIGJlY2F1c2Ugd2hlbiBpdCdzIHdyb25nIHdlIHNvbWV0aW1lcyB0cmlnZ2VyIGEgcGF0aG9s
b2dpY2FsCiAgICAgLy8gcmVsYXlvdXQgaWYgdGhlcmUgYXJlIGludHJ1ZGluZyBmbG9hdHMuCi0g
ICAgaW50IHlQb3NFc3RpbWF0ZSA9IG1faGVpZ2h0OworICAgIGludCB5UG9zRXN0aW1hdGUgPSBo
ZWlnaHQoKTsKICAgICBpZiAoIW1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoVG9wKCkpIHsKICAg
ICAgICAgaW50IGNoaWxkTWFyZ2luVG9wID0gY2hpbGQtPnNlbGZOZWVkc0xheW91dCgpID8gY2hp
bGQtPm1hcmdpblRvcCgpIDogY2hpbGQtPmNvbGxhcHNlZE1hcmdpblRvcCgpOwogICAgICAgICB5
UG9zRXN0aW1hdGUgKz0gbWF4KG1hcmdpbkluZm8ubWFyZ2luKCksIGNoaWxkTWFyZ2luVG9wKTsK
QEAgLTExMTcsNyArMTExNiw3IEBAIGludCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVWZXJ0aWNhbFBv
c2l0aW8KICAgICByZXR1cm4geVBvc0VzdGltYXRlOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpk
ZXRlcm1pbmVIb3Jpem9udGFsUG9zaXRpb24oUmVuZGVyT2JqZWN0KiBjaGlsZCkKK3ZvaWQgUmVu
ZGVyQmxvY2s6OmRldGVybWluZUhvcml6b250YWxQb3NpdGlvbihSZW5kZXJCb3gqIGNoaWxkKQog
ewogICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgaW50IHhQ
b3MgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwpAQCAtMTEyOCw3ICsxMTI3LDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lSG9yaXpvbnRhbFBvcwogICAgICAgICAvLyBTb21l
IG9iamVjdHMgKGUuZy4sIHRhYmxlcywgaG9yaXpvbnRhbCBydWxlcywgb3ZlcmZsb3c6YXV0byBi
bG9ja3MpIGF2b2lkIGZsb2F0cy4gIFRoZXkgbmVlZAogICAgICAgICAvLyB0byBzaGlmdCBvdmVy
IGFzIG5lY2Vzc2FyeSB0byBkb2RnZSBhbnkgZmxvYXRzIHRoYXQgbWlnaHQgZ2V0IGluIHRoZSB3
YXkuCiAgICAgICAgIGlmIChjaGlsZC0+YXZvaWRzRmxvYXRzKCkpIHsKLSAgICAgICAgICAgIGlu
dCBsZWZ0T2ZmID0gbGVmdE9mZnNldChtX2hlaWdodCk7CisgICAgICAgICAgICBpbnQgbGVmdE9m
ZiA9IGxlZnRPZmZzZXQoaGVpZ2h0KCkpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnRleHRB
bGlnbigpICE9IFdFQktJVF9DRU5URVIgJiYgY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKS50
eXBlKCkgIT0gQXV0bykgewogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bWFyZ2luTGVmdCgp
IDwgMCkKICAgICAgICAgICAgICAgICAgICAgbGVmdE9mZiArPSBjaGlsZC0+bWFyZ2luTGVmdCgp
OwpAQCAtMTE0MCwxNyArMTEzOSwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVIb3Jp
em9udGFsUG9zCiAgICAgICAgICAgICAgICAgLy8gd2lkdGggY29tcHV0YXRpb24gd2lsbCB0YWtl
IGludG8gYWNjb3VudCB0aGUgZGVsdGEgYmV0d2VlbiB8bGVmdE9mZnwgYW5kIHx4UG9zfAogICAg
ICAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGp1c3QgcGFzcyB0aGUgY29udGVudCB3aWR0
aCBpbiBkaXJlY3RseSB0byB0aGUgfGNhbGNIb3Jpem9udGFsTWFyZ2luc3wKICAgICAgICAgICAg
ICAgICAvLyBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCb3gq
PihjaGlsZCktPmNhbGNIb3Jpem9udGFsTWFyZ2lucyhjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVm
dCgpLCBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKSwgbGluZVdpZHRoKGNoaWxkLT55UG9z
KCkpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+Y2FsY0hvcml6b250YWxNYXJnaW5zKGNoaWxk
LT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCksIGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpLCBs
aW5lV2lkdGgoY2hpbGQtPnkoKSkpOwogICAgICAgICAgICAgICAgIGNoUG9zID0gbGVmdE9mZiAr
IGNoaWxkLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
dmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRTaXplKGNoaWxkLT54UG9zKCkgLSBjaFBvcywgMCkp
OwotICAgICAgICBjaGlsZC0+c2V0UG9zKGNoUG9zLCBjaGlsZC0+eVBvcygpKTsKKyAgICAgICAg
dmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRTaXplKGNoaWxkLT54KCkgLSBjaFBvcywgMCkpOwor
ICAgICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hQb3MsIGNoaWxkLT55KCkpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGludCB4UG9zID0gbV93aWR0aCAtIGJvcmRlclJpZ2h0KCkgLSBwYWRkaW5n
UmlnaHQoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICAgICAgaW50IHhQb3MgPSB3
aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdSaWdodCgpIC0gdmVydGljYWxTY3JvbGxi
YXJXaWR0aCgpOwogICAgICAgICBpbnQgY2hQb3MgPSB4UG9zIC0gKGNoaWxkLT53aWR0aCgpICsg
Y2hpbGQtPm1hcmdpblJpZ2h0KCkpOwogICAgICAgICBpZiAoY2hpbGQtPmF2b2lkc0Zsb2F0cygp
KSB7Ci0gICAgICAgICAgICBpbnQgcmlnaHRPZmYgPSByaWdodE9mZnNldChtX2hlaWdodCk7Cisg
ICAgICAgICAgICBpbnQgcmlnaHRPZmYgPSByaWdodE9mZnNldChoZWlnaHQoKSk7CiAgICAgICAg
ICAgICBpZiAoc3R5bGUoKS0+dGV4dEFsaWduKCkgIT0gV0VCS0lUX0NFTlRFUiAmJiBjaGlsZC0+
c3R5bGUoKS0+bWFyZ2luUmlnaHQoKS50eXBlKCkgIT0gQXV0bykgewogICAgICAgICAgICAgICAg
IGlmIChjaGlsZC0+bWFyZ2luUmlnaHQoKSA8IDApCiAgICAgICAgICAgICAgICAgICAgIHJpZ2h0
T2ZmIC09IGNoaWxkLT5tYXJnaW5SaWdodCgpOwpAQCAtMTE2MSwxMiArMTE2MCwxMiBAQCB2b2lk
IFJlbmRlckJsb2NrOjpkZXRlcm1pbmVIb3Jpem9udGFsUG9zCiAgICAgICAgICAgICAgICAgLy8g
d2lkdGggY29tcHV0YXRpb24gd2lsbCB0YWtlIGludG8gYWNjb3VudCB0aGUgZGVsdGEgYmV0d2Vl
biB8cmlnaHRPZmZ8IGFuZCB8eFBvc3wKICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGNh
biBqdXN0IHBhc3MgdGhlIGNvbnRlbnQgd2lkdGggaW4gZGlyZWN0bHkgdG8gdGhlIHxjYWxjSG9y
aXpvbnRhbE1hcmdpbnN8CiAgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24uCi0gICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4oY2hpbGQpLT5jYWxjSG9yaXpvbnRhbE1hcmdp
bnMoY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKSwgY2hpbGQtPnN0eWxlKCktPm1hcmdpblJp
Z2h0KCksIGxpbmVXaWR0aChjaGlsZC0+eVBvcygpKSk7CisgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyQm94Kj4oY2hpbGQpLT5jYWxjSG9yaXpvbnRhbE1hcmdpbnMoY2hpbGQtPnN0
eWxlKCktPm1hcmdpbkxlZnQoKSwgY2hpbGQtPnN0eWxlKCktPm1hcmdpblJpZ2h0KCksIGxpbmVX
aWR0aChjaGlsZC0+eSgpKSk7CiAgICAgICAgICAgICAgICAgY2hQb3MgPSByaWdodE9mZiAtIGNo
aWxkLT5tYXJnaW5SaWdodCgpIC0gY2hpbGQtPndpZHRoKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRTaXplKGNoaWxkLT54UG9z
KCkgLSBjaFBvcywgMCkpOwotICAgICAgICBjaGlsZC0+c2V0UG9zKGNoUG9zLCBjaGlsZC0+eVBv
cygpKTsKKyAgICAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRTaXplKGNoaWxkLT54KCkg
LSBjaFBvcywgMCkpOworICAgICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hQb3MsIGNoaWxkLT55
KCkpOwogICAgIH0KIH0KIApAQCAtMTIwNSwxNyArMTIwNCwxNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpoYW5kbGVCb3R0b21PZkJsb2NrKGluCiAgICAgLy8gSWYgd2UgY2FuJ3QgY29sbGFwc2Ugd2l0
aCBjaGlsZHJlbiB0aGVuIGdvIGFoZWFkIGFuZCBhZGQgaW4gdGhlIGJvdHRvbSBtYXJnaW4uCiAg
ICAgaWYgKCFtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aEJvdHRvbSgpICYmICFtYXJnaW5JbmZv
LmNhbkNvbGxhcHNlV2l0aFRvcCgpCiAgICAgICAgICYmICghc3R5bGUoKS0+aHRtbEhhY2tzKCkg
fHwgIW1hcmdpbkluZm8ucXVpcmtDb250YWluZXIoKSB8fCAhbWFyZ2luSW5mby5ib3R0b21RdWly
aygpKSkKLSAgICAgICAgbV9oZWlnaHQgKz0gbWFyZ2luSW5mby5tYXJnaW4oKTsKKyAgICAgICAg
c2V0SGVpZ2h0KGhlaWdodCgpICsgbWFyZ2luSW5mby5tYXJnaW4oKSk7CiAgICAgICAgIAogICAg
IC8vIE5vdyBhZGQgaW4gb3VyIGJvdHRvbSBib3JkZXIvcGFkZGluZy4KLSAgICBtX2hlaWdodCAr
PSBib3R0b207CisgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgYm90dG9tKTsKIAogICAgIC8vIE5l
Z2F0aXZlIG1hcmdpbnMgY2FuIGNhdXNlIG91ciBoZWlnaHQgdG8gc2hyaW5rIGJlbG93IG91ciBt
aW5pbWFsIGhlaWdodCAoYm9yZGVyL3BhZGRpbmcpLgogICAgIC8vIElmIHRoaXMgaGFwcGVucywg
ZW5zdXJlIHRoYXQgdGhlIGNvbXB1dGVkIGhlaWdodCBpcyBpbmNyZWFzZWQgdG8gdGhlIG1pbmlt
YWwgaGVpZ2h0LgotICAgIG1faGVpZ2h0ID0gbWF4KG1faGVpZ2h0LCB0b3AgKyBib3R0b20pOwor
ICAgIHNldEhlaWdodChtYXgoaGVpZ2h0KCksIHRvcCArIGJvdHRvbSkpOwogCiAgICAgLy8gQWx3
YXlzIG1ha2Ugc3VyZSBvdXIgb3ZlcmZsb3cgaGVpZ2h0IGlzIGF0IGxlYXN0IG91ciBoZWlnaHQu
Ci0gICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX2hlaWdodCwgbV9vdmVyZmxvd0hlaWdodCk7
CisgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChoZWlnaHQoKSwgbV9vdmVyZmxvd0hlaWdodCk7
CiAKICAgICAvLyBVcGRhdGUgb3VyIGJvdHRvbSBjb2xsYXBzZWQgbWFyZ2luIGluZm8uCiAgICAg
c2V0Q29sbGFwc2VkQm90dG9tTWFyZ2luKG1hcmdpbkluZm8pOwpAQCAtMTI0NCw3ICsxMjQzLDgg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbihibwogICAgIGludCB0b3Ag
PSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKICAgICBpbnQgYm90dG9tID0gYm9yZGVyQm90
dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7CiAK
LSAgICBtX2hlaWdodCA9IG1fb3ZlcmZsb3dIZWlnaHQgPSB0b3A7CisgICAgbV9vdmVyZmxvd0hl
aWdodCA9IHRvcDsKKyAgICBzZXRIZWlnaHQobV9vdmVyZmxvd0hlaWdodCk7CiAKICAgICAvLyBU
aGUgbWFyZ2luIHN0cnVjdCBjYWNoZXMgYWxsIG91ciBjdXJyZW50IG1hcmdpbiBjb2xsYXBzaW5n
IHN0YXRlLiAgVGhlIGNvbXBhY3Qgc3RydWN0IGNhY2hlcyBzdGF0ZSB3aGVuIHdlIGVuY291bnRl
ciBjb21wYWN0cywKICAgICBNYXJnaW5JbmZvIG1hcmdpbkluZm8odGhpcywgdG9wLCBib3R0b20p
OwpAQCAtMTI1NywxMCArMTI1NywxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0No
aWxkcmVuKGJvCiAgICAgaW50IHByZXZpb3VzRmxvYXRCb3R0b20gPSAwOwogICAgIG1heEZsb2F0
Qm90dG9tID0gMDsKIAotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7Cisg
ICAgUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsKICAgICB3aGlsZSAoY2hpbGQp
IHsKICAgICAgICAgaWYgKGxlZ2VuZCA9PSBjaGlsZCkgewotICAgICAgICAgICAgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nQm94KCk7CiAgICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGUgbGVnZW5kLCBzaW5j
ZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHBvc2l0aW9uZWQgdXAgaW4gdGhlIGZpZWxkc2V0J3MgYm9y
ZGVyLgogICAgICAgICB9CiAKQEAgLTEyODAsNyArMTI4MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8KICAgICAgICAgLy8gSGFuZGxlIHRoZSBmb3VyIHR5cGVz
IG9mIHNwZWNpYWwgZWxlbWVudHMgZmlyc3QuICBUaGVzZSBpbmNsdWRlIHBvc2l0aW9uZWQgY29u
dGVudCwgZmxvYXRpbmcgY29udGVudCwgY29tcGFjdHMgYW5kCiAgICAgICAgIC8vIHJ1bi1pbnMu
ICBXaGVuIHdlIGVuY291bnRlciB0aGVzZSBmb3VyIHR5cGVzIG9mIG9iamVjdHMsIHdlIGRvbid0
IGFjdHVhbGx5IGxheSB0aGVtIG91dCBhcyBub3JtYWwgZmxvdyBibG9ja3MuCiAgICAgICAgIGJv
b2wgaGFuZGxlZCA9IGZhbHNlOwotICAgICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBoYW5kbGVT
cGVjaWFsQ2hpbGQoY2hpbGQsIG1hcmdpbkluZm8sIGNvbXBhY3RJbmZvLCBoYW5kbGVkKTsKKyAg
ICAgICAgUmVuZGVyQm94KiBuZXh0ID0gaGFuZGxlU3BlY2lhbENoaWxkKGNoaWxkLCBtYXJnaW5J
bmZvLCBjb21wYWN0SW5mbywgaGFuZGxlZCk7CiAgICAgICAgIGlmIChoYW5kbGVkKSB7CiAgICAg
ICAgICAgICBjaGlsZCA9IG5leHQ7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEzMDEsMTMg
KzEzMDEsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbihibwogICAg
ICAgICBpbnQgeVBvc0VzdGltYXRlID0gZXN0aW1hdGVWZXJ0aWNhbFBvc2l0aW9uKGNoaWxkLCBt
YXJnaW5JbmZvKTsKIAogICAgICAgICAvLyBDYWNoZSBvdXIgb2xkIHJlY3Qgc28gdGhhdCB3ZSBj
YW4gZGlydHkgdGhlIHByb3BlciByZXBhaW50IHJlY3RzIGlmIHRoZSBjaGlsZCBtb3Zlcy4KLSAg
ICAgICAgSW50UmVjdCBvbGRSZWN0KGNoaWxkLT54UG9zKCksIGNoaWxkLT55UG9zKCkgLCBjaGls
ZC0+d2lkdGgoKSwgY2hpbGQtPmhlaWdodCgpKTsKKyAgICAgICAgSW50UmVjdCBvbGRSZWN0KGNo
aWxkLT54KCksIGNoaWxkLT55KCkgLCBjaGlsZC0+d2lkdGgoKSwgY2hpbGQtPmhlaWdodCgpKTsK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIEludFNpemUgb2xkTGF5b3V0RGVsdGEgPSB2aWV3KCkt
PmxheW91dERlbHRhKCk7CiAjZW5kaWYKICAgICAgICAgLy8gR28gYWhlYWQgYW5kIHBvc2l0aW9u
IHRoZSBjaGlsZCBhcyB0aG91Z2ggaXQgZGlkbid0IGNvbGxhcHNlIHdpdGggdGhlIHRvcC4KLSAg
ICAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRTaXplKDAsIGNoaWxkLT55UG9zKCkgLSB5
UG9zRXN0aW1hdGUpKTsKLSAgICAgICAgY2hpbGQtPnNldFBvcyhjaGlsZC0+eFBvcygpLCB5UG9z
RXN0aW1hdGUpOworICAgICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNpemUoMCwgY2hp
bGQtPnkoKSAtIHlQb3NFc3RpbWF0ZSkpOworICAgICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hp
bGQtPngoKSwgeVBvc0VzdGltYXRlKTsKIAogICAgICAgICBib29sIG1hcmtEZXNjZW5kYW50c1dp
dGhGbG9hdHMgPSBmYWxzZTsKICAgICAgICAgaWYgKHlQb3NFc3RpbWF0ZSAhPSBvbGRSZWN0Lnko
KSAmJiAhY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkLT5jb250YWluc0Zsb2F0cygpKQpA
QCAtMTMxNiw3ICsxMzE2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJl
bihibwogICAgICAgICAgICAgLy8gSWYgYW4gZWxlbWVudCBtaWdodCBiZSBhZmZlY3RlZCBieSB0
aGUgcHJlc2VuY2Ugb2YgZmxvYXRzLCB0aGVuIGFsd2F5cyBtYXJrIGl0IGZvcgogICAgICAgICAg
ICAgLy8gbGF5b3V0LgogICAgICAgICAgICAgaW50IGZiID0gbWF4KHByZXZpb3VzRmxvYXRCb3R0
b20sIGZsb2F0Qm90dG9tKCkpOwotICAgICAgICAgICAgaWYgKGZiID4gbV9oZWlnaHQgfHwgZmIg
PiB5UG9zRXN0aW1hdGUpCisgICAgICAgICAgICBpZiAoZmIgPiBoZWlnaHQoKSB8fCBmYiA+IHlQ
b3NFc3RpbWF0ZSkKICAgICAgICAgICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzID0g
dHJ1ZTsKICAgICAgICAgfQogCkBAIC0xMzQ3LDI1ICsxMzQ3LDI1IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8KICAgICAgICAgZGV0ZXJtaW5lSG9yaXpvbnRhbFBv
c2l0aW9uKGNoaWxkKTsKIAogICAgICAgICAvLyBVcGRhdGUgb3VyIGhlaWdodCBub3cgdGhhdCB0
aGUgY2hpbGQgaGFzIGJlZW4gcGxhY2VkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uLgotICAgICAg
ICBtX2hlaWdodCArPSBjaGlsZC0+aGVpZ2h0KCk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQo
KSArIGNoaWxkLT5oZWlnaHQoKSk7CiAgICAgICAgIGlmIChjaGlsZC0+c3R5bGUoKS0+bWFyZ2lu
Qm90dG9tQ29sbGFwc2UoKSA9PSBNU0VQQVJBVEUpIHsKLSAgICAgICAgICAgIG1faGVpZ2h0ICs9
IGNoaWxkLT5tYXJnaW5Cb3R0b20oKTsKKyAgICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSAr
IGNoaWxkLT5tYXJnaW5Cb3R0b20oKSk7CiAgICAgICAgICAgICBtYXJnaW5JbmZvLmNsZWFyTWFy
Z2luKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyBvdmVyaGFuZ2lu
ZyBmbG9hdHMgdGhhdCBpbnRydWRlIGludG8gZm9sbG93aW5nIHNpYmxpbmdzIChvciBwb3NzaWJs
eSBvdXQKICAgICAgICAgLy8gb2YgdGhpcyBibG9jayksIHRoZW4gdGhlIHBhcmVudCBnZXRzIG5v
dGlmaWVkIG9mIHRoZSBmbG9hdHMgbm93LgotICAgICAgICBtYXhGbG9hdEJvdHRvbSA9IG1heCht
YXhGbG9hdEJvdHRvbSwgYWRkT3ZlcmhhbmdpbmdGbG9hdHMoc3RhdGljX2Nhc3Q8UmVuZGVyQmxv
Y2sgKj4oY2hpbGQpLCAtY2hpbGQtPnhQb3MoKSwgLWNoaWxkLT55UG9zKCksICFjaGlsZE5lZWRl
ZExheW91dCkpOworICAgICAgICBtYXhGbG9hdEJvdHRvbSA9IG1heChtYXhGbG9hdEJvdHRvbSwg
YWRkT3ZlcmhhbmdpbmdGbG9hdHMoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjaGlsZCksIC1j
aGlsZC0+eCgpLCAtY2hpbGQtPnkoKSwgIWNoaWxkTmVlZGVkTGF5b3V0KSk7CiAKICAgICAgICAg
Ly8gVXBkYXRlIG91ciBvdmVyZmxvdyBpbiBjYXNlIHRoZSBjaGlsZCBzcGlsbHMgb3V0IHRoZSBi
bG9jay4KLSAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9wLCBjaGlsZC0+
eVBvcygpICsgY2hpbGQtPm92ZXJmbG93VG9wKGZhbHNlKSk7Ci0gICAgICAgIG1fb3ZlcmZsb3dI
ZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgbV9oZWlnaHQgKyBjaGlsZC0+b3ZlcmZsb3dI
ZWlnaHQoZmFsc2UpIC0gY2hpbGQtPmhlaWdodCgpKTsKLSAgICAgICAgbV9vdmVyZmxvd1dpZHRo
ID0gbWF4KGNoaWxkLT54UG9zKCkgKyBjaGlsZC0+b3ZlcmZsb3dXaWR0aChmYWxzZSksIG1fb3Zl
cmZsb3dXaWR0aCk7Ci0gICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKGNoaWxkLT54UG9zKCkg
KyBjaGlsZC0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSwgbV9vdmVyZmxvd0xlZnQpOworICAgICAgICBt
X292ZXJmbG93VG9wID0gbWluKG1fb3ZlcmZsb3dUb3AsIGNoaWxkLT55KCkgKyBjaGlsZC0+b3Zl
cmZsb3dUb3AoZmFsc2UpKTsKKyAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJm
bG93SGVpZ2h0LCBoZWlnaHQoKSArIGNoaWxkLT5vdmVyZmxvd0hlaWdodChmYWxzZSkgLSBjaGls
ZC0+aGVpZ2h0KCkpOworICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgoY2hpbGQtPngoKSAr
IGNoaWxkLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSwgbV9vdmVyZmxvd1dpZHRoKTsKKyAgICAgICAg
bV9vdmVyZmxvd0xlZnQgPSBtaW4oY2hpbGQtPngoKSArIGNoaWxkLT5vdmVyZmxvd0xlZnQoZmFs
c2UpLCBtX292ZXJmbG93TGVmdCk7CiAgICAgICAgIAogICAgICAgICAvLyBJbnNlcnQgb3VyIGNv
bXBhY3QgaW50byB0aGUgYmxvY2sgbWFyZ2luIGlmIHdlIGhhdmUgb25lLgogICAgICAgICBpbnNl
cnRDb21wYWN0SWZOZWVkZWQoY2hpbGQsIGNvbXBhY3RJbmZvKTsKIAotICAgICAgICBJbnRTaXpl
IGNoaWxkT2Zmc2V0KGNoaWxkLT54UG9zKCkgLSBvbGRSZWN0LngoKSwgY2hpbGQtPnlQb3MoKSAt
IG9sZFJlY3QueSgpKTsKKyAgICAgICAgSW50U2l6ZSBjaGlsZE9mZnNldChjaGlsZC0+eCgpIC0g
b2xkUmVjdC54KCksIGNoaWxkLT55KCkgLSBvbGRSZWN0LnkoKSk7CiAgICAgICAgIGlmIChjaGls
ZE9mZnNldC53aWR0aCgpIHx8IGNoaWxkT2Zmc2V0LmhlaWdodCgpKSB7CiAgICAgICAgICAgICB2
aWV3KCktPmFkZExheW91dERlbHRhKGNoaWxkT2Zmc2V0KTsKIApAQCAtMTM4MCw3ICsxMzgwLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbihibwogICAgICAgICAgICAg
Y2hpbGQtPnJlcGFpbnQoKTsKIAogICAgICAgICBBU1NFUlQob2xkTGF5b3V0RGVsdGEgPT0gdmll
dygpLT5sYXlvdXREZWx0YSgpKTsKLSAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKKyAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICB9CiAKICAg
ICAvLyBOb3cgZG8gdGhlIGhhbmRsaW5nIG9mIHRoZSBib3R0b20gb2YgdGhlIGJsb2NrLCBhZGRp
bmcgaW4gb3VyIGJvdHRvbSBib3JkZXIvcGFkZGluZyBhbmQKQEAgLTEzOTMsNyArMTM5Myw3IEBA
IGJvb2wgUmVuZGVyQmxvY2s6OmxheW91dE9ubHlQb3NpdGlvbmVkT2IKICAgICBpZiAoIXBvc0No
aWxkTmVlZHNMYXlvdXQoKSB8fCBub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkgfHwgc2VsZk5lZWRz
TGF5b3V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIExheW91dFN0YXRlTWFpbnRh
aW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUoeFBvcygpLCB5UG9zKCkpLCBt
X2hhc0NvbHVtbnMgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKKyAgICBM
YXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgo
KSwgeSgpKSwgbV9oYXNDb2x1bW5zIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24o
KSk7CiAKICAgICBpZiAobmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKSkgewogICAgICAg
ICB0cnlMYXlvdXREb2luZ1Bvc2l0aW9uZWRNb3ZlbWVudE9ubHkoKTsKQEAgLTE0MTYsNyArMTQx
Niw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmxheW91dE9ubHlQb3NpdGlvbmVkT2IKIHZvaWQgUmVu
ZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikK
IHsKICAgICBpZiAobV9wb3NpdGlvbmVkT2JqZWN0cykgewotICAgICAgICBSZW5kZXJPYmplY3Qq
IHI7CisgICAgICAgIFJlbmRlckJveCogcjsKICAgICAgICAgSXRlcmF0b3IgZW5kID0gbV9wb3Np
dGlvbmVkT2JqZWN0cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX3Bvc2l0
aW9uZWRPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIHIg
PSAqaXQ7CkBAIC0xNDQzLDcgKzE0NDMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRQb3Np
dGlvbmVkT2JqZWN0CiB2b2lkIFJlbmRlckJsb2NrOjptYXJrUG9zaXRpb25lZE9iamVjdHNGb3JM
YXlvdXQoKQogewogICAgIGlmIChtX3Bvc2l0aW9uZWRPYmplY3RzKSB7Ci0gICAgICAgIFJlbmRl
ck9iamVjdCogcjsKKyAgICAgICAgUmVuZGVyQm94KiByOwogICAgICAgICBJdGVyYXRvciBlbmQg
PSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9
IG1fcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgciA9ICppdDsKQEAgLTE0NzIsNyArMTQ3Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJl
cGFpbnRPdmVyaGFuZ2luZ0Zsb2EKICAgICAgICAgICAgIC8vIE9ubHkgcmVwYWludCB0aGUgb2Jq
ZWN0IGlmIGl0IGlzIG92ZXJoYW5naW5nLCBpcyBub3QgaW4gaXRzIG93biBsYXllciwgYW5kCiAg
ICAgICAgICAgICAvLyBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gcGFpbnQgKG1fc2hvdWxkUGFp
bnQgaXMgc2V0KS4gV2hlbiBwYWludEFsbERlc2NlbmRhbnRzIGlzIHRydWUsIHRoZSBsYXR0ZXIK
ICAgICAgICAgICAgIC8vIGNvbmRpdGlvbiBpcyByZXBsYWNlZCB3aXRoIGJlaW5nIGEgZGVzY2Vu
ZGFudCBvZiB1cy4KLSAgICAgICAgICAgIGlmIChyLT5tX2JvdHRvbSA+IG1faGVpZ2h0ICYmIChw
YWludEFsbERlc2NlbmRhbnRzICYmIHItPm1fcmVuZGVyZXItPmlzRGVzY2VuZGFudE9mKHRoaXMp
IHx8IHItPm1fc2hvdWxkUGFpbnQpICYmICFyLT5tX3JlbmRlcmVyLT5oYXNMYXllcigpKSB7ICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHItPm1fYm90dG9tID4gaGVpZ2h0KCkgJiYg
KHBhaW50QWxsRGVzY2VuZGFudHMgJiYgci0+bV9yZW5kZXJlci0+aXNEZXNjZW5kYW50T2YodGhp
cykgfHwgci0+bV9zaG91bGRQYWludCkgJiYgIXItPm1fcmVuZGVyZXItPmhhc0xheWVyKCkpIHsg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgci0+bV9yZW5kZXJlci0+cmVwYWludCgp
OwogICAgICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0
cygpOwogICAgICAgICAgICAgfQpAQCAtMTQ4Myw4ICsxNDgzLDggQEAgdm9pZCBSZW5kZXJCbG9j
azo6cmVwYWludE92ZXJoYW5naW5nRmxvYQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgdHggKz0gbV94OwotICAg
IHR5ICs9IG1feTsKKyAgICB0eCArPSB4KCk7CisgICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwog
ICAgIAogICAgIFBhaW50UGhhc2UgcGhhc2UgPSBwYWludEluZm8ucGhhc2U7CiAKQEAgLTE2MTks
MTIgKzE2MTksMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgog
ICAgIGluZm8ucGFpbnRpbmdSb290ID0gcGFpbnRpbmdSb290Rm9yQ2hpbGRyZW4ocGFpbnRJbmZv
KTsKICAgICBib29sIGlzUHJpbnRpbmcgPSBkb2N1bWVudCgpLT5wcmludGluZygpOwogCi0gICAg
Zm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgeyAgICAgICAgCisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxk
ID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3go
KSkgeyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3
YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgogICAgICAgICBpZiAoaXNQcmlu
dGluZyAmJiAhY2hpbGRyZW5JbmxpbmUoKSAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVm
b3JlKCkgPT0gUEJBTFdBWVMgJiYKLSAgICAgICAgICAgIGluUm9vdEJsb2NrQ29udGV4dCgpICYm
ICh0eSArIGNoaWxkLT55UG9zKCkpID4gcGFpbnRJbmZvLnJlY3QueSgpICYmIAotICAgICAgICAg
ICAgKHR5ICsgY2hpbGQtPnlQb3MoKSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgewotICAg
ICAgICAgICAgdmlldygpLT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkgKyBjaGlsZC0+eVBvcygpLCB0
aGlzLCB0cnVlKTsKKyAgICAgICAgICAgIGluUm9vdEJsb2NrQ29udGV4dCgpICYmICh0eSArIGNo
aWxkLT55KCkpID4gcGFpbnRJbmZvLnJlY3QueSgpICYmIAorICAgICAgICAgICAgKHR5ICsgY2hp
bGQtPnkoKSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgdmlldygp
LT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkgKyBjaGlsZC0+eSgpLCB0aGlzLCB0cnVlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xNjMzLDkgKzE2MzMsOSBAQCB2b2lkIFJl
bmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAKICAgICAgICAgLy8gQ2hlY2sgZm9y
IHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFp
bC4KICAgICAgICAgaWYgKGlzUHJpbnRpbmcgJiYgIWNoaWxkcmVuSW5saW5lKCkgJiYgY2hpbGQt
PnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMgJiYgCi0gICAgICAgICAgICBp
blJvb3RCbG9ja0NvbnRleHQoKSAmJiAodHkgKyBjaGlsZC0+eVBvcygpICsgY2hpbGQtPmhlaWdo
dCgpKSA+IHBhaW50SW5mby5yZWN0LnkoKSAmJiAKLSAgICAgICAgICAgICh0eSArIGNoaWxkLT55
UG9zKCkgKyBjaGlsZC0+aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKLSAg
ICAgICAgICAgIHZpZXcoKS0+c2V0QmVzdFRydW5jYXRlZEF0KHR5ICsgY2hpbGQtPnlQb3MoKSAr
IGNoaWxkLT5oZWlnaHQoKSArIG1heCgwLCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQm90dG9tKCkp
LCB0aGlzLCB0cnVlKTsKKyAgICAgICAgICAgIGluUm9vdEJsb2NrQ29udGV4dCgpICYmICh0eSAr
IGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFpbnRJbmZvLnJlY3QueSgpICYmIAor
ICAgICAgICAgICAgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPCBwYWludElu
Zm8ucmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgdmlldygpLT5zZXRCZXN0VHJ1bmNhdGVk
QXQodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpICsgbWF4KDAsIGNoaWxkLT5jb2xs
YXBzZWRNYXJnaW5Cb3R0b20oKSksIHRoaXMsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTcxMiw3ICsxNzEyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
cGFpbnRPYmplY3QoUGFpbnRJbmZvJgogCiAgICAgLy8gNS4gcGFpbnQgb3V0bGluZS4KICAgICBp
ZiAoIWlubGluZUZsb3cgJiYgKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgcGFp
bnRQaGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIGhhc091dGxpbmUoKSAmJiBzdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAgUmVuZGVyT2JqZWN0OjpwYWlu
dE91dGxpbmUocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0
eWxlKCkpOworICAgICAgICBSZW5kZXJCb3g6OnBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4
dCwgdHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSwgc3R5bGUoKSk7CiAKICAgICAvLyA2LiBwYWlu
dCBjb250aW51YXRpb24gb3V0bGluZXMuCiAgICAgaWYgKCFpbmxpbmVGbG93ICYmIChwYWludFBo
YXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxk
T3V0bGluZXMpKSB7CkBAIC0xNzIxLDggKzE3MjEsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWlu
dE9iamVjdChQYWludEluZm8mCiAgICAgICAgICAgICBpZiAoIWlubGluZUZsb3ctPmhhc0xheWVy
KCkpCiAgICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrKCktPmFkZENvbnRpbnVhdGlvbldp
dGhPdXRsaW5lKGlubGluZUZsb3cpOwogICAgICAgICAgICAgZWxzZSBpZiAoIWlubGluZUZsb3ct
PmZpcnN0TGluZUJveCgpKQotICAgICAgICAgICAgICAgIGlubGluZUZsb3ctPnBhaW50T3V0bGlu
ZShwYWludEluZm8uY29udGV4dCwgdHggLSB4UG9zKCkgKyBpbmxpbmVGbG93LT5jb250YWluaW5n
QmxvY2soKS0+eFBvcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eSAtIHlQb3MoKSArIGlubGluZUZsb3ctPmNvbnRhaW5pbmdCbG9jaygpLT55UG9zKCkpOwor
ICAgICAgICAgICAgICAgIGlubGluZUZsb3ctPnBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4
dCwgdHggLSB4KCkgKyBpbmxpbmVGbG93LT5jb250YWluaW5nQmxvY2soKS0+eCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAtIHkoKSArIGlubGluZUZsb3ct
PmNvbnRhaW5pbmdCbG9jaygpLT55KCkpOwogICAgICAgICB9CiAgICAgICAgIHBhaW50Q29udGlu
dWF0aW9uT3V0bGluZXMocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgIH0KQEAgLTE3NDgsOCArMTc0
OCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RmxvYXRzKFBhaW50SW5mbyYKICAgICAgICAg
aWYgKHItPm1fc2hvdWxkUGFpbnQgJiYgIXItPm1fcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKICAg
ICAgICAgICAgIFBhaW50SW5mbyBjdXJyZW50UGFpbnRJbmZvKHBhaW50SW5mbyk7CiAgICAgICAg
ICAgICBjdXJyZW50UGFpbnRJbmZvLnBoYXNlID0gcHJlc2VydmVQaGFzZSA/IHBhaW50SW5mby5w
aGFzZSA6IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQ7Ci0gICAgICAgICAgICBpbnQgY3VycmVu
dFRYID0gdHggKyByLT5tX2xlZnQgLSByLT5tX3JlbmRlcmVyLT54UG9zKCkgKyByLT5tX3JlbmRl
cmVyLT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgICAgICBpbnQgY3VycmVudFRZID0gdHkgKyByLT5t
X3RvcCAtIHItPm1fcmVuZGVyZXItPnlQb3MoKSArIHItPm1fcmVuZGVyZXItPm1hcmdpblRvcCgp
OworICAgICAgICAgICAgaW50IGN1cnJlbnRUWCA9IHR4ICsgci0+bV9sZWZ0IC0gci0+bV9yZW5k
ZXJlci0+eCgpICsgci0+bV9yZW5kZXJlci0+bWFyZ2luTGVmdCgpOworICAgICAgICAgICAgaW50
IGN1cnJlbnRUWSA9IHR5ICsgci0+bV90b3AgLSByLT5tX3JlbmRlcmVyLT55KCkgKyByLT5tX3Jl
bmRlcmVyLT5tYXJnaW5Ub3AoKTsKICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBhaW50KGN1
cnJlbnRQYWludEluZm8sIGN1cnJlbnRUWCwgY3VycmVudFRZKTsKICAgICAgICAgICAgIGlmICgh
cHJlc2VydmVQaGFzZSkgewogICAgICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2Ug
PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwpAQCAtMTgyOSw4ICsxODI5LDggQEAg
dm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250aW51YXRpb25PdXRsaQogICAgICAgICBSZW5kZXJG
bG93KiBmbG93ID0gKml0OwogICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBmbG93LT5jb250
YWluaW5nQmxvY2soKTsKICAgICAgICAgZm9yICggOyBibG9jayAmJiBibG9jayAhPSB0aGlzOyBi
bG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxvY2soKSkgewotICAgICAgICAgICAgdHggKz0gYmxv
Y2stPnhQb3MoKTsKLSAgICAgICAgICAgIHR5ICs9IGJsb2NrLT55UG9zKCk7CisgICAgICAgICAg
ICB0eCArPSBibG9jay0+eCgpOworICAgICAgICAgICAgdHkgKz0gYmxvY2stPnkoKTsKICAgICAg
ICAgfQogICAgICAgICBBU1NFUlQoYmxvY2spOyAgIAogICAgICAgICBmbG93LT5wYWludE91dGxp
bmUoaW5mby5jb250ZXh0LCB0eCwgdHkpOwpAQCAtMTkxOSwxNSArMTkxOSwxNSBAQCB2b2lkIFJl
bmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQYWludEluCiAgICAgfQogfQogCi1zdGF0aWMgdm9p
ZCBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMoY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8q
IHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIExpc3RIYXNoU2V0PFJlbmRlck9iamVjdCo+KiBw
b3NpdGlvbmVkT2JqZWN0cykKK3N0YXRpYyB2b2lkIGNsaXBPdXRQb3NpdGlvbmVkT2JqZWN0cyhj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyogcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSwg
TGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj4qIHBvc2l0aW9uZWRPYmplY3RzKQogewogICAgIGlmICgh
cG9zaXRpb25lZE9iamVjdHMpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBMaXN0SGFzaFNl
dDxSZW5kZXJPYmplY3QqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcG9zaXRpb25lZE9iamVjdHMt
PmVuZCgpOwotICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBSZW5kZXJPYmplY3QqIHIgPSAqaXQ7Ci0gICAgICAgIHBhaW50SW5mby0+Y29udGV4
dC0+Y2xpcE91dChJbnRSZWN0KHR4ICsgci0+eFBvcygpLCB0eSArIHItPnlQb3MoKSwgci0+d2lk
dGgoKSwgci0+aGVpZ2h0KCkpKTsKKyAgICBMaXN0SGFzaFNldDxSZW5kZXJCb3gqPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOworICAgIGZvciAoTGlzdEhh
c2hTZXQ8UmVuZGVyQm94Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcG9zaXRpb25lZE9iamVjdHMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJCb3gqIHIgPSAqaXQ7
CisgICAgICAgIHBhaW50SW5mby0+Y29udGV4dC0+Y2xpcE91dChJbnRSZWN0KHR4ICsgci0+eCgp
LCB0eSArIHItPnkoKSwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkpKTsKICAgICB9CiB9CiAKQEAg
LTE5NDEsNyArMTk0MSw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpmaWxsU2VsZWN0aW9uR2Fw
cygKICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5mbywgdHgsIHR5LCBt
X3Bvc2l0aW9uZWRPYmplY3RzKTsKICAgICAgICAgaWYgKGlzQm9keSgpIHx8IGlzUm9vdCgpKSAv
LyBUaGUgPGJvZHk+IG11c3QgbWFrZSBzdXJlIHRvIGV4YW1pbmUgaXRzIGNvbnRhaW5pbmdCbG9j
aydzIHBvc2l0aW9uZWQgb2JqZWN0cy4KICAgICAgICAgICAgIGZvciAoUmVuZGVyQmxvY2sqIGNi
ID0gY29udGFpbmluZ0Jsb2NrKCk7IGNiICYmICFjYi0+aXNSZW5kZXJWaWV3KCk7IGNiID0gY2It
PmNvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICAgICAgICAgIGNsaXBPdXRQb3NpdGlvbmVkT2Jq
ZWN0cyhwYWludEluZm8sIGNiLT54UG9zKCksIGNiLT55UG9zKCksIGNiLT5tX3Bvc2l0aW9uZWRP
YmplY3RzKTsKKyAgICAgICAgICAgICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMocGFpbnRJ
bmZvLCBjYi0+eCgpLCBjYi0+eSgpLCBjYi0+bV9wb3NpdGlvbmVkT2JqZWN0cyk7CiAgICAgICAg
IGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgZm9yIChEZXByZWNhdGVkUHRy
TGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOyBpdC5j
dXJyZW50KCk7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IGl0
LmN1cnJlbnQoKTsKQEAgLTIwMzUsMTAgKzIwMzUsMTAgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6
OmZpbGxCbG9ja1NlbGVjdGlvbgogICAgIEdhcFJlY3RzIHJlc3VsdDsKIAogICAgIC8vIEdvIGFo
ZWFkIGFuZCBqdW1wIHJpZ2h0IHRvIHRoZSBmaXJzdCBibG9jayBjaGlsZCB0aGF0IGNvbnRhaW5z
IHNvbWUgc2VsZWN0ZWQgb2JqZWN0cy4KLSAgICBSZW5kZXJPYmplY3QqIGN1cnI7Ci0gICAgZm9y
IChjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyICYmIGN1cnItPnNlbGVjdGlvblN0YXRlKCkgPT0g
U2VsZWN0aW9uTm9uZTsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsgfQorICAgIFJlbmRl
ckJveCogY3VycjsKKyAgICBmb3IgKGN1cnIgPSBmaXJzdENoaWxkQm94KCk7IGN1cnIgJiYgY3Vy
ci0+c2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lOyBjdXJyID0gY3Vyci0+bmV4dFNp
YmxpbmdCb3goKSkgeyB9CiAKLSAgICBmb3IgKGJvb2wgc2F3U2VsZWN0aW9uRW5kID0gZmFsc2U7
IGN1cnIgJiYgIXNhd1NlbGVjdGlvbkVuZDsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsK
KyAgICBmb3IgKGJvb2wgc2F3U2VsZWN0aW9uRW5kID0gZmFsc2U7IGN1cnIgJiYgIXNhd1NlbGVj
dGlvbkVuZDsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgU2VsZWN0
aW9uU3RhdGUgY2hpbGRTdGF0ZSA9IGN1cnItPnNlbGVjdGlvblN0YXRlKCk7CiAgICAgICAgIGlm
IChjaGlsZFN0YXRlID09IFNlbGVjdGlvbkJvdGggfHwgY2hpbGRTdGF0ZSA9PSBTZWxlY3Rpb25F
bmQpCiAgICAgICAgICAgICBzYXdTZWxlY3Rpb25FbmQgPSB0cnVlOwpAQCAtMjA2MSw3ICsyMDYx
LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxCbG9ja1NlbGVjdGlvbgogICAgICAgICAg
ICAgaWYgKGNoaWxkU3RhdGUgPT0gU2VsZWN0aW9uRW5kIHx8IGNoaWxkU3RhdGUgPT0gU2VsZWN0
aW9uSW5zaWRlKQogICAgICAgICAgICAgICAgIC8vIEZpbGwgdGhlIGdhcCBhYm92ZSB0aGUgb2Jq
ZWN0LgogICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUNlbnRlcihmaWxsVmVydGljYWxTZWxl
Y3Rpb25HYXAobGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSArIGN1cnItPnlQ
b3MoKSwgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgcGFpbnRJbmZvKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSArIGN1
cnItPnkoKSwgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgcGFpbnRJbmZvKSk7CiAKICAgICAg
ICAgICAgIC8vIE9ubHkgZmlsbCBzaWRlIGdhcHMgZm9yIG9iamVjdHMgdGhhdCBwYWludCB0aGVp
ciBvd24gc2VsZWN0aW9uIGlmIHdlIGtub3cgZm9yIHN1cmUgdGhlIHNlbGVjdGlvbiBpcyBnb2lu
ZyB0byBleHRlbmQgYWxsIHRoZSB3YXkgKnBhc3QqCiAgICAgICAgICAgICAvLyBvdXIgb2JqZWN0
LiAgV2Uga25vdyB0aGlzIGlmIHRoZSBzZWxlY3Rpb24gZGlkIG5vdCBlbmQgaW5zaWRlIG91ciBv
YmplY3QuCkBAIC0yMDczLDE5ICsyMDczLDE5IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpmaWxs
QmxvY2tTZWxlY3Rpb24KICAgICAgICAgICAgIGdldEhvcml6b250YWxTZWxlY3Rpb25HYXBJbmZv
KGNoaWxkU3RhdGUsIGxlZnRHYXAsIHJpZ2h0R2FwKTsKIAogICAgICAgICAgICAgaWYgKGxlZnRH
YXApCi0gICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlTGVmdChmaWxsTGVmdFNlbGVjdGlvbkdh
cCh0aGlzLCBjdXJyLT54UG9zKCksIGN1cnItPnlQb3MoKSwgY3Vyci0+aGVpZ2h0KCksIHJvb3RC
bG9jaywgYmxvY2tYLCBibG9ja1ksIHR4LCB0eSwgcGFpbnRJbmZvKSk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuaXRlTGVmdChmaWxsTGVmdFNlbGVjdGlvbkdhcCh0aGlzLCBjdXJyLT54KCks
IGN1cnItPnkoKSwgY3Vyci0+aGVpZ2h0KCksIHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHR4
LCB0eSwgcGFpbnRJbmZvKSk7CiAgICAgICAgICAgICBpZiAocmlnaHRHYXApCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LnVuaXRlUmlnaHQoZmlsbFJpZ2h0U2VsZWN0aW9uR2FwKHRoaXMsIGN1cnIt
PnhQb3MoKSArIGN1cnItPndpZHRoKCksIGN1cnItPnlQb3MoKSwgY3Vyci0+aGVpZ2h0KCksIHJv
b3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHR4LCB0eSwgcGFpbnRJbmZvKSk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuaXRlUmlnaHQoZmlsbFJpZ2h0U2VsZWN0aW9uR2FwKHRoaXMsIGN1cnIt
PngoKSArIGN1cnItPndpZHRoKCksIGN1cnItPnkoKSwgY3Vyci0+aGVpZ2h0KCksIHJvb3RCbG9j
aywgYmxvY2tYLCBibG9ja1ksIHR4LCB0eSwgcGFpbnRJbmZvKSk7CiAKICAgICAgICAgICAgIC8v
IFVwZGF0ZSBsYXN0VG9wIHRvIGJlIGp1c3QgdW5kZXJuZWF0aCB0aGUgb2JqZWN0LiAgbGFzdExl
ZnQgYW5kIGxhc3RSaWdodCBleHRlbmQgYXMgZmFyIGFzCiAgICAgICAgICAgICAvLyB0aGV5IGNh
biB3aXRob3V0IGJ1bXBpbmcgaW50byBmbG9hdGluZyBvciBwb3NpdGlvbmVkIG9iamVjdHMuICBJ
ZGVhbGx5IHRoZXkgd2lsbCBnbyByaWdodCB1cAogICAgICAgICAgICAgLy8gdG8gdGhlIGJvcmRl
ciBvZiB0aGUgcm9vdCBzZWxlY3Rpb24gYmxvY2suCi0gICAgICAgICAgICBsYXN0VG9wID0gKHR5
IC0gYmxvY2tZKSArIChjdXJyLT55UG9zKCkgKyBjdXJyLT5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBsYXN0TGVmdCA9IGxlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBjdXJyLT55UG9zKCkg
KyBjdXJyLT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBsYXN0UmlnaHQgPSByaWdodFNlbGVjdGlv
bk9mZnNldChyb290QmxvY2ssIGN1cnItPnlQb3MoKSArIGN1cnItPmhlaWdodCgpKTsKKyAgICAg
ICAgICAgIGxhc3RUb3AgPSAodHkgLSBibG9ja1kpICsgKGN1cnItPnkoKSArIGN1cnItPmhlaWdo
dCgpKTsKKyAgICAgICAgICAgIGxhc3RMZWZ0ID0gbGVmdFNlbGVjdGlvbk9mZnNldChyb290Qmxv
Y2ssIGN1cnItPnkoKSArIGN1cnItPmhlaWdodCgpKTsKKyAgICAgICAgICAgIGxhc3RSaWdodCA9
IHJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+eSgpICsgY3Vyci0+aGVpZ2h0
KCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNoaWxkU3RhdGUgIT0gU2VsZWN0aW9uTm9uZSkKICAg
ICAgICAgICAgIC8vIFdlIG11c3QgYmUgYSBibG9jayB0aGF0IGhhcyBzb21lIHNlbGVjdGVkIG9i
amVjdCBpbnNpZGUgaXQuICBHbyBhaGVhZCBhbmQgcmVjdXIuCi0gICAgICAgICAgICByZXN1bHQu
dW5pdGUoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjdXJyKS0+ZmlsbFNlbGVjdGlvbkdhcHMo
cm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHggKyBjdXJyLT54UG9zKCksIHR5ICsgY3Vyci0+
eVBvcygpLCAKKyAgICAgICAgICAgIHJlc3VsdC51bml0ZShzdGF0aWNfY2FzdDxSZW5kZXJCbG9j
ayo+KGN1cnIpLT5maWxsU2VsZWN0aW9uR2Fwcyhyb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0
eCArIGN1cnItPngoKSwgdHkgKyBjdXJyLT55KCksIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RU
b3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQsIHBhaW50SW5mbykpOwogICAgIH0KICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMjE2NSwxOSArMjE2NSwxOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpnZXRIb3Jp
em9udGFsU2VsZWN0aW9uCiAgICAgICAgICAgICAgICAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25FbmQgJiYgIWx0cik7CiB9CiAKLWludCBSZW5kZXJCbG9jazo6bGVmdFNlbGVjdGlv
bk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgeSkKK2ludCBSZW5kZXJCbG9jazo6
bGVmdFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgeVBvcykKIHsK
LSAgICBpbnQgbGVmdCA9IGxlZnRPZmZzZXQoeSk7CisgICAgaW50IGxlZnQgPSBsZWZ0T2Zmc2V0
KHlQb3MpOwogICAgIGlmIChsZWZ0ID09IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpIHsK
ICAgICAgICAgaWYgKHJvb3RCbG9jayAhPSB0aGlzKQogICAgICAgICAgICAgLy8gVGhlIGJvcmRl
ciBjYW4gcG90ZW50aWFsbHkgYmUgZnVydGhlciBleHRlbmRlZCBieSBvdXIgY29udGFpbmluZ0Js
b2NrKCkuCi0gICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPmxlZnRTZWxlY3Rp
b25PZmZzZXQocm9vdEJsb2NrLCB5ICsgeVBvcygpKTsKKyAgICAgICAgICAgIHJldHVybiBjb250
YWluaW5nQmxvY2soKS0+bGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIHlQb3MgKyB5KCkp
OwogICAgICAgICByZXR1cm4gbGVmdDsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFJlbmRl
ckJsb2NrKiBjYiA9IHRoaXM7CiAgICAgICAgIHdoaWxlIChjYiAhPSByb290QmxvY2spIHsKLSAg
ICAgICAgICAgIGxlZnQgKz0gY2ItPnhQb3MoKTsKKyAgICAgICAgICAgIGxlZnQgKz0gY2ItPngo
KTsKICAgICAgICAgICAgIGNiID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMjE4NSwzNSArMjE4NSwzNSBAQCBpbnQgUmVuZGVyQmxvY2s6OmxlZnRTZWxlY3Rp
b25PZmZzZXQoUmVuCiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKLWludCBSZW5kZXJCbG9jazo6cmln
aHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IHkpCitpbnQgUmVu
ZGVyQmxvY2s6OnJpZ2h0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGlu
dCB5UG9zKQogewotICAgIGludCByaWdodCA9IHJpZ2h0T2Zmc2V0KHkpOworICAgIGludCByaWdo
dCA9IHJpZ2h0T2Zmc2V0KHlQb3MpOwogICAgIGlmIChyaWdodCA9PSAoY29udGVudFdpZHRoKCkg
KyAoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSkpKSB7CiAgICAgICAgIGlmIChyb290Qmxv
Y2sgIT0gdGhpcykKICAgICAgICAgICAgIC8vIFRoZSBib3JkZXIgY2FuIHBvdGVudGlhbGx5IGJl
IGZ1cnRoZXIgZXh0ZW5kZWQgYnkgb3VyIGNvbnRhaW5pbmdCbG9jaygpLgotICAgICAgICAgICAg
cmV0dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5yaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ss
IHkgKyB5UG9zKCkpOworICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5yaWdo
dFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIHlQb3MgKyB5KCkpOwogICAgICAgICByZXR1cm4g
cmlnaHQ7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBSZW5kZXJCbG9jayogY2IgPSB0aGlz
OwogICAgICAgICB3aGlsZSAoY2IgIT0gcm9vdEJsb2NrKSB7Ci0gICAgICAgICAgICByaWdodCAr
PSBjYi0+eFBvcygpOworICAgICAgICAgICAgcmlnaHQgKz0gY2ItPngoKTsKICAgICAgICAgICAg
IGNiID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVy
biByaWdodDsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0UG9zaXRpb25lZE9iamVjdChS
ZW5kZXJPYmplY3QgKm8pCit2b2lkIFJlbmRlckJsb2NrOjppbnNlcnRQb3NpdGlvbmVkT2JqZWN0
KFJlbmRlckJveCogbykKIHsKICAgICAvLyBDcmVhdGUgdGhlIGxpc3Qgb2Ygc3BlY2lhbCBvYmpl
Y3RzIGlmIHdlIGRvbid0IGFsZWFkeSBoYXZlIG9uZQogICAgIGlmICghbV9wb3NpdGlvbmVkT2Jq
ZWN0cykKLSAgICAgICAgbV9wb3NpdGlvbmVkT2JqZWN0cyA9IG5ldyBMaXN0SGFzaFNldDxSZW5k
ZXJPYmplY3QqPjsKKyAgICAgICAgbV9wb3NpdGlvbmVkT2JqZWN0cyA9IG5ldyBMaXN0SGFzaFNl
dDxSZW5kZXJCb3gqPjsKIAogICAgIG1fcG9zaXRpb25lZE9iamVjdHMtPmFkZChvKTsKIH0KIAot
dm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25lZE9iamVjdChSZW5kZXJPYmplY3QgKm8p
Cit2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCogbykK
IHsKICAgICBpZiAobV9wb3NpdGlvbmVkT2JqZWN0cykKICAgICAgICAgbV9wb3NpdGlvbmVkT2Jq
ZWN0cy0+cmVtb3ZlKG8pOwpAQCAtMjIyNCwxMSArMjIyNCwxMSBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpyZW1vdmVQb3NpdGlvbmVkT2JqZWN0CiAgICAgaWYgKCFtX3Bvc2l0aW9uZWRPYmplY3RzKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgUmVuZGVyT2JqZWN0KiByOworICAgIFJlbmRlckJv
eCogcjsKICAgICAKICAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQo
KTsKICAgICAKLSAgICBWZWN0b3I8UmVuZGVyT2JqZWN0KiwgMTY+IGRlYWRPYmplY3RzOworICAg
IFZlY3RvcjxSZW5kZXJCb3gqLCAxNj4gZGVhZE9iamVjdHM7CiAKICAgICBmb3IgKEl0ZXJhdG9y
IGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIHIgPSAqaXQ7CkBAIC0yMjUyLDcgKzIyNTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpy
ZW1vdmVQb3NpdGlvbmVkT2JqZWN0CiAgICAgICAgIG1fcG9zaXRpb25lZE9iamVjdHMtPnJlbW92
ZShkZWFkT2JqZWN0cy5hdChpKSk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0
aW5nT2JqZWN0KFJlbmRlck9iamVjdCAqbykKK3ZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0
aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHsKICAgICBBU1NFUlQoby0+aXNGbG9hdGluZygpKTsK
IApAQCAtMjI4Niw3ICsyMjg2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdP
YmplY3QoUgogICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hcHBlbmQobmV3T2JqKTsKIH0KIAotdm9p
ZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyT2JqZWN0ICpvKQordm9p
ZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogewogICAg
IGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJh
dG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwpAQCAtMjMyMSw3ICsy
MzIxLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICBs
YXN0RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Z2V0UHJldigpOwogICAgIH0KIAotICAgIGlu
dCB5ID0gbV9oZWlnaHQ7CisgICAgaW50IHkgPSBoZWlnaHQoKTsKICAgICAKICAgICAvLyBUaGUg
ZmxvYXQgY2Fubm90IHN0YXJ0IGFib3ZlIHRoZSB5IHBvc2l0aW9uIG9mIHRoZSBsYXN0IHBvc2l0
aW9uZWQgZmxvYXQuCiAgICAgaWYgKGxhc3RGbG9hdCkKQEAgLTIzMzYsNyArMjMzNiw3IEBAIGJv
b2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gZi0+bV9yZW5kZXJlcjsK
KyAgICAgICAgUmVuZGVyQm94KiBvID0gZi0+bV9yZW5kZXJlcjsKICAgICAgICAgaW50IF9oZWln
aHQgPSBvLT5oZWlnaHQoKSArIG8tPm1hcmdpblRvcCgpICsgby0+bWFyZ2luQm90dG9tKCk7CiAK
ICAgICAgICAgaW50IHJvID0gcmlnaHRPZmZzZXQoKTsgLy8gQ29uc3RhbnQgcGFydCBvZiByaWdo
dCBvZmZzZXQuCkBAIC0yMzQ1LDcgKzIzNDUsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlv
bk5ld0Zsb2F0cygpCiAgICAgICAgIGlmIChybyAtIGxvIDwgZndpZHRoKQogICAgICAgICAgICAg
ZndpZHRoID0gcm8gLSBsbzsgLy8gTmV2ZXIgbG9vayBmb3IgbW9yZSB0aGFuIHdoYXQgd2lsbCBi
ZSBhdmFpbGFibGUuCiAgICAgICAgIAotICAgICAgICBJbnRSZWN0IG9sZFJlY3Qoby0+eFBvcygp
LCBvLT55UG9zKCkgLCBvLT53aWR0aCgpLCBvLT5oZWlnaHQoKSk7CisgICAgICAgIEludFJlY3Qg
b2xkUmVjdChvLT54KCksIG8tPnkoKSAsIG8tPndpZHRoKCksIG8tPmhlaWdodCgpKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChvLT5zdHlsZSgpLT5jbGVhcigpICYgQ0xFRlQpCiAgICAgICAgICAg
ICB5ID0gbWF4KGxlZnRCb3R0b20oKSwgeSk7CkBAIC0yMzYyLDcgKzIzNjIsNyBAQCBib29sIFJl
bmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBmeCA9IG1heCgwLCBmeCk7CiAgICAgICAgICAgICBmLT5tX2xlZnQgPSBmeDsKLSAgICAgICAg
ICAgIG8tPnNldFBvcyhmeCArIG8tPm1hcmdpbkxlZnQoKSwgeSArIG8tPm1hcmdpblRvcCgpKTsK
KyAgICAgICAgICAgIG8tPnNldExvY2F0aW9uKGZ4ICsgby0+bWFyZ2luTGVmdCgpLCB5ICsgby0+
bWFyZ2luVG9wKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaW50IGhlaWdodFJl
bWFpbmluZ0xlZnQgPSAxOwogICAgICAgICAgICAgaW50IGhlaWdodFJlbWFpbmluZ1JpZ2h0ID0g
MTsKQEAgLTIzNzIsNyArMjM3Miw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3Rmxv
YXRzKCkKICAgICAgICAgICAgICAgICBmeCA9IHJpZ2h0UmVsT2Zmc2V0KHksIHJvLCBmYWxzZSwg
JmhlaWdodFJlbWFpbmluZ1JpZ2h0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGYtPm1f
bGVmdCA9IGZ4IC0gZi0+bV93aWR0aDsKLSAgICAgICAgICAgIG8tPnNldFBvcyhmeCAtIG8tPm1h
cmdpblJpZ2h0KCkgLSBvLT53aWR0aCgpLCB5ICsgby0+bWFyZ2luVG9wKCkpOworICAgICAgICAg
ICAgby0+c2V0TG9jYXRpb24oZnggLSBvLT5tYXJnaW5SaWdodCgpIC0gby0+d2lkdGgoKSwgeSAr
IG8tPm1hcmdpblRvcCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGYtPm1fdG9wID0geTsKQEAg
LTI0MDUsOCArMjQwNSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om5ld0xpbmUoRUNsZWFyIGNsZWFy
KQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmICht
X2hlaWdodCA8IG5ld1kpCi0gICAgICAgIG1faGVpZ2h0ID0gbmV3WTsKKyAgICBpZiAoaGVpZ2h0
KCkgPCBuZXdZKQorICAgICAgICBzZXRIZWlnaHQobmV3WSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxv
Y2s6OmFkZFBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRlckJveCogZGVzY2VuZGFudCkKQEAg
LTI2MDMsNyArMjYwMyw3IEBAIGludCBSZW5kZXJCbG9jazo6bG93ZXN0UG9zaXRpb24oYm9vbCBp
bmMKICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwgbV9vdmVyZmxvd0hlaWdodCArIHJlbGF0
aXZlT2Zmc2V0KTsKICAgICAgICAgCiAgICAgaWYgKG1fcG9zaXRpb25lZE9iamVjdHMpIHsKLSAg
ICAgICAgUmVuZGVyT2JqZWN0KiByOworICAgICAgICBSZW5kZXJCb3gqIHI7CiAgICAgICAgIEl0
ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEl0
ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgICAgICByID0gKml0OwpAQCAtMjYxMyw4ICsyNjEzLDggQEAgaW50IFJlbmRl
ckJsb2NrOjpsb3dlc3RQb3NpdGlvbihib29sIGluYwogICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgd29yayBmb3Igb3ZlcmZsb3cgc2VjdGlvbnMgdG9vLgogICAgICAgICAgICAgICAg
IC8vIElmIGEgcG9zaXRpb25lZCBvYmplY3QgbGllcyBjb21wbGV0ZWx5IHRvIHRoZSBsZWZ0IG9m
IHRoZSByb290IGl0IHdpbGwgYmUgdW5yZWFjaGFibGUgdmlhIHNjcm9sbGluZy4KICAgICAgICAg
ICAgICAgICAvLyBUaGVyZWZvcmUgd2Ugc2hvdWxkIG5vdCBhbGxvdyBpdCB0byBjb250cmlidXRl
IHRvIHRoZSBsb3dlc3QgcG9zaXRpb24uCi0gICAgICAgICAgICAgICAgaWYgKCFpc1JlbmRlclZp
ZXcoKSB8fCByLT54UG9zKCkgKyByLT53aWR0aCgpID4gMCB8fCByLT54UG9zKCkgKyByLT5yaWdo
dG1vc3RQb3NpdGlvbihmYWxzZSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBscCA9
IHItPnlQb3MoKSArIHItPmxvd2VzdFBvc2l0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzUmVuZGVyVmlldygpIHx8IHItPngoKSArIHItPndpZHRoKCkgPiAwIHx8IHItPngoKSAr
IHItPnJpZ2h0bW9zdFBvc2l0aW9uKGZhbHNlKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
aW50IGxwID0gci0+eSgpICsgci0+bG93ZXN0UG9zaXRpb24oZmFsc2UpOwogICAgICAgICAgICAg
ICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBscCArIHJlbGF0aXZlT2Zmc2V0KTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yNjYwLDcgKzI2NjAsNyBAQCBpbnQgUmVu
ZGVyQmxvY2s6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgCiAgICAgICAgIHJpZ2h0ID0gbWF4KHJp
Z2h0LCBtX292ZXJmbG93V2lkdGggKyByZWxhdGl2ZU9mZnNldCk7CiAKICAgICBpZiAobV9wb3Np
dGlvbmVkT2JqZWN0cykgewotICAgICAgICBSZW5kZXJPYmplY3QqIHI7CisgICAgICAgIFJlbmRl
ckJveCogcjsKICAgICAgICAgSXRlcmF0b3IgZW5kID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+ZW5k
KCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5iZWdp
bigpIDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICByID0gKml0OwpAQCAtMjY3MCw4
ICsyNjcwLDggQEAgaW50IFJlbmRlckJsb2NrOjpyaWdodG1vc3RQb3NpdGlvbihib29sIAogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd29yayBmb3Igb3ZlcmZsb3cgc2VjdGlvbnMg
dG9vLgogICAgICAgICAgICAgICAgIC8vIElmIGEgcG9zaXRpb25lZCBvYmplY3QgbGllcyBjb21w
bGV0ZWx5IGFib3ZlIHRoZSByb290IGl0IHdpbGwgYmUgdW5yZWFjaGFibGUgdmlhIHNjcm9sbGlu
Zy4KICAgICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUgd2Ugc2hvdWxkIG5vdCBhbGxvdyBpdCB0
byBjb250cmlidXRlIHRvIHRoZSByaWdodG1vc3QgcG9zaXRpb24uCi0gICAgICAgICAgICAgICAg
aWYgKCFpc1JlbmRlclZpZXcoKSB8fCByLT55UG9zKCkgKyByLT5oZWlnaHQoKSA+IDAgfHwgci0+
eVBvcygpICsgci0+bG93ZXN0UG9zaXRpb24oZmFsc2UpID4gMCkgewotICAgICAgICAgICAgICAg
ICAgICBpbnQgcnAgPSByLT54UG9zKCkgKyByLT5yaWdodG1vc3RQb3NpdGlvbihmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSB8fCByLT55KCkgKyByLT5oZWlnaHQo
KSA+IDAgfHwgci0+eSgpICsgci0+bG93ZXN0UG9zaXRpb24oZmFsc2UpID4gMCkgeworICAgICAg
ICAgICAgICAgICAgICBpbnQgcnAgPSByLT54KCkgKyByLT5yaWdodG1vc3RQb3NpdGlvbihmYWxz
ZSk7CiAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBycCArIHJlbGF0aXZl
T2Zmc2V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yNzIyLDcgKzI3
MjIsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmxlZnRtb3N0UG9zaXRpb24oYm9vbCBpCiAgICAgICAg
IGxlZnQgPSBtaW4obGVmdCwgbV9vdmVyZmxvd0xlZnQgKyByZWxhdGl2ZU9mZnNldCk7CiAKICAg
ICBpZiAobV9wb3NpdGlvbmVkT2JqZWN0cykgewotICAgICAgICBSZW5kZXJPYmplY3QqIHI7Cisg
ICAgICAgIFJlbmRlckJveCogcjsKICAgICAgICAgSXRlcmF0b3IgZW5kID0gbV9wb3NpdGlvbmVk
T2JqZWN0cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX3Bvc2l0aW9uZWRP
YmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIHIgPSAqaXQ7
CkBAIC0yNzMyLDggKzI3MzIsOCBAQCBpbnQgUmVuZGVyQmxvY2s6OmxlZnRtb3N0UG9zaXRpb24o
Ym9vbCBpCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3b3JrIGZvciBvdmVyZmxv
dyBzZWN0aW9ucyB0b28uCiAgICAgICAgICAgICAgICAgLy8gSWYgYSBwb3NpdGlvbmVkIG9iamVj
dCBsaWVzIGNvbXBsZXRlbHkgYWJvdmUgdGhlIHJvb3QgaXQgd2lsbCBiZSB1bnJlYWNoYWJsZSB2
aWEgc2Nyb2xsaW5nLgogICAgICAgICAgICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBzaG91bGQgbm90
IGFsbG93IGl0IHRvIGNvbnRyaWJ1dGUgdG8gdGhlIGxlZnRtb3N0IHBvc2l0aW9uLgotICAgICAg
ICAgICAgICAgIGlmICghaXNSZW5kZXJWaWV3KCkgfHwgci0+eVBvcygpICsgci0+aGVpZ2h0KCkg
PiAwIHx8IHItPnlQb3MoKSArIHItPmxvd2VzdFBvc2l0aW9uKGZhbHNlKSA+IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgaW50IGxwID0gci0+eFBvcygpICsgci0+bGVmdG1vc3RQb3NpdGlvbihm
YWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSB8fCByLT55KCkgKyBy
LT5oZWlnaHQoKSA+IDAgfHwgci0+eSgpICsgci0+bG93ZXN0UG9zaXRpb24oZmFsc2UpID4gMCkg
eworICAgICAgICAgICAgICAgICAgICBpbnQgbHAgPSByLT54KCkgKyByLT5sZWZ0bW9zdFBvc2l0
aW9uKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCBscCArIHJl
bGF0aXZlT2Zmc2V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yODM3
LDIyICsyODM3LDIzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKICAgICAvLyBv
dXQgb2YgZmxvdyAobGlrZSBmbG9hdGluZy9wb3NpdGlvbmVkIGVsZW1lbnRzKSwgYW5kIHdlIGFs
c28gc2tpcCBvdmVyIGFueSBvYmplY3RzIHRoYXQgbWF5IGhhdmUgc2hpZnRlZAogICAgIC8vIHRv
IGF2b2lkIGZsb2F0cy4KICAgICBib29sIHBhcmVudEhhc0Zsb2F0cyA9IGZhbHNlOwotICAgIFJl
bmRlck9iamVjdCAqcHJldiA9IHByZXZpb3VzU2libGluZygpOwotICAgIHdoaWxlIChwcmV2ICYm
ICghcHJldi0+aXNSZW5kZXJCbG9jaygpIHx8IHByZXYtPmF2b2lkc0Zsb2F0cygpIHx8IHByZXYt
PmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkpIHsKKyAgICBSZW5kZXJPYmplY3QqIHByZXYgPSBw
cmV2aW91c1NpYmxpbmcoKTsKKyAgICB3aGlsZSAocHJldiAmJiAoIXByZXYtPmlzQm94KCkgfHwg
IXByZXYtPmlzUmVuZGVyQmxvY2soKSB8fCBwcmV2LT5hdm9pZHNGbG9hdHMoKSB8fCBwcmV2LT5p
c0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpKSB7CiAgICAgICAgIGlmIChwcmV2LT5pc0Zsb2F0aW5n
KCkpCiAgICAgICAgICAgICBwYXJlbnRIYXNGbG9hdHMgPSB0cnVlOwogICAgICAgICAgcHJldiA9
IHByZXYtPnByZXZpb3VzU2libGluZygpOwogICAgIH0KIAogICAgIC8vIEZpcnN0IGFkZCBpbiBm
bG9hdHMgZnJvbSB0aGUgcGFyZW50LgotICAgIGludCBvZmZzZXQgPSBtX3k7CisgICAgaW50IG9m
ZnNldCA9IG1fZnJhbWVSZWN0LnkoKTsKICAgICBpZiAocGFyZW50SGFzRmxvYXRzKQogICAgICAg
ICBhZGRJbnRydWRpbmdGbG9hdHMoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sgKj4ocGFyZW50KCkp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50KCktPmJvcmRlckxlZnQoKSArIHBh
cmVudCgpLT5wYWRkaW5nTGVmdCgpLCBvZmZzZXQpOwogCisgICAgCiAgICAgaW50IHhvZmZzZXQg
PSAwOwogICAgIGlmIChwcmV2KQotICAgICAgICBvZmZzZXQgLT0gcHJldi0+eVBvcygpOworICAg
ICAgICBvZmZzZXQgLT0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4ocHJldiktPnkoKTsKICAgICBl
bHNlIHsKICAgICAgICAgcHJldiA9IHBhcmVudCgpOwogICAgICAgICB4b2Zmc2V0ICs9IHByZXYt
PmJvcmRlckxlZnQoKSArIHByZXYtPnBhZGRpbmdMZWZ0KCk7CkBAIC0yOTE2LDcgKzI5MTcsNyBA
QCBpbnQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5nRmxvYXRzKFJlCiAgICAgSW50UmVjdCBm
bG9hdHNPdmVyZmxvd1JlY3Q7CiAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGlu
Z09iamVjdD4gaXQoKmNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cyk7CiAgICAgZm9yIChGbG9hdGlu
Z09iamVjdCogcjsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7Ci0gICAgICAgIGludCBib3R0
b20gPSBjaGlsZC0+eVBvcygpICsgci0+bV9ib3R0b207CisgICAgICAgIGludCBib3R0b20gPSBj
aGlsZC0+eSgpICsgci0+bV9ib3R0b207CiAgICAgICAgIGxvd2VzdEZsb2F0Qm90dG9tID0gbWF4
KGxvd2VzdEZsb2F0Qm90dG9tLCBib3R0b20pOwogCiAgICAgICAgIGlmIChib3R0b20gPiBoZWln
aHQoKSkgewpAQCAtMzAyOSw3ICszMDMwLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6Y29udGFpbnNG
bG9hdChSZW5kZXJPYgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6
bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJPYmplY3QqIGZsb2F0
VG9SZW1vdmUpCit2b2lkIFJlbmRlckJsb2NrOjptYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRz
Rm9yTGF5b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZSkKIHsKICAgICBzZXRDaGlsZE5lZWRz
TGF5b3V0KHRydWUpOwogCkBAIC0zMDQ2LDcgKzMwNDcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpt
YXJrQWxsRGVzY2VuZGFudHNXaXRoCiAgICAgfQogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmdldENs
ZWFyRGVsdGEoUmVuZGVyT2JqZWN0ICpjaGlsZCkKK2ludCBSZW5kZXJCbG9jazo6Z2V0Q2xlYXJE
ZWx0YShSZW5kZXJCb3gqIGNoaWxkKQogewogICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gY29t
cHV0ZSBjbGVhcmFuY2UgaWYgd2UgaGF2ZSBubyBmbG9hdHMuCiAgICAgaWYgKCFjb250YWluc0Zs
b2F0cygpKQpAQCAtMzA3NCwxMSArMzA3NSwxMSBAQCBpbnQgUmVuZGVyQmxvY2s6OmdldENsZWFy
RGVsdGEoUmVuZGVyT2JqCiAgICAgLy8gdG8gZml0KSBhbmQgbm90IGFsbCAod2Ugc2hvdWxkIGJl
IHVzaW5nIG5leHRGbG9hdEJvdHRvbUJlbG93IGFuZCBsb29waW5nKS4KICAgICAvLyBEbyBub3Qg
YWxsb3cgdGFibGVzIHRvIHdyYXAgaW4gcXVpcmtzIG9yIGV2ZW4gaW4gYWxtb3N0IHN0cmljdCBt
b2RlIAogICAgIC8vIChlYmF5IG9uIHRoZSBQTFQsIGZpbmFuY2UueWFob28uY29tIGluIHRoZSBy
ZWFsIHdvcmxkLCB2ZXJzaW9udHJhY2tlci5jb20gZm9yY2VzIGV2ZW4gYWxtb3N0IHN0cmljdCBt
b2RlIG5vdCB0byB3b3JrKQotICAgIGludCByZXN1bHQgPSBjbGVhclNldCA/IG1heCgwLCBib3R0
b20gLSBjaGlsZC0+eVBvcygpKSA6IDA7CisgICAgaW50IHJlc3VsdCA9IGNsZWFyU2V0ID8gbWF4
KDAsIGJvdHRvbSAtIGNoaWxkLT55KCkpIDogMDsKICAgICBpZiAoIXJlc3VsdCAmJiBjaGlsZC0+
YXZvaWRzRmxvYXRzKCkgJiYgY2hpbGQtPnN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIAot
ICAgICAgICBjaGlsZC0+bWluUHJlZldpZHRoKCkgPiBsaW5lV2lkdGgoY2hpbGQtPnlQb3MoKSkg
JiYgY2hpbGQtPm1pblByZWZXaWR0aCgpIDw9IGF2YWlsYWJsZVdpZHRoKCkgJiYgCisgICAgICAg
IGNoaWxkLT5taW5QcmVmV2lkdGgoKSA+IGxpbmVXaWR0aChjaGlsZC0+eSgpKSAmJiBjaGlsZC0+
bWluUHJlZldpZHRoKCkgPD0gYXZhaWxhYmxlV2lkdGgoKSAmJiAKICAgICAgICAgZG9jdW1lbnQo
KS0+aW5TdHJpY3RNb2RlKCkpICAgCi0gICAgICAgIHJlc3VsdCA9IG1heCgwLCBmbG9hdEJvdHRv
bSgpIC0gY2hpbGQtPnlQb3MoKSk7CisgICAgICAgIHJlc3VsdCA9IG1heCgwLCBmbG9hdEJvdHRv
bSgpIC0gY2hpbGQtPnkoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzEwNCw4ICsz
MTA1LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogewogICAg
IGJvb2wgaW5saW5lRmxvdyA9IGlzSW5saW5lRmxvdygpOwogCi0gICAgaW50IHR4ID0gX3R4ICsg
bV94OwotICAgIGludCB0eSA9IF90eSArIG1feSArIGJvcmRlclRvcEV4dHJhKCk7CisgICAgaW50
IHR4ID0gX3R4ICsgeCgpOworICAgIGludCB0eSA9IF90eSArIHkoKTsKIAogICAgIGlmICghaW5s
aW5lRmxvdyAmJiAhaXNSZW5kZXJWaWV3KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVl
ZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuCkBAIC0zMTUwLDggKzMxNTEsOCBAQCBib29sIFJlbmRl
ckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgICAgICAgICBEZXByZWNhdGVkUHRy
TGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwogICAg
ICAgICAgICAgZm9yIChpdC50b0xhc3QoKTsgKG8gPSBpdC5jdXJyZW50KCkpOyAtLWl0KSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG8tPm1fc2hvdWxkUGFpbnQgJiYgIW8tPm1fcmVuZGVyZXItPmhh
c0xheWVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHhvZmZzZXQgPSBzY3JvbGxlZFgg
KyBvLT5tX2xlZnQgKyBvLT5tX3JlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLSBvLT5tX3JlbmRlcmVy
LT54UG9zKCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCB5b2Zmc2V0ID0gIHNjcm9sbGVkWSAr
IG8tPm1fdG9wICsgby0+bV9yZW5kZXJlci0+bWFyZ2luVG9wKCkgLSBvLT5tX3JlbmRlcmVyLT55
UG9zKCk7CisgICAgICAgICAgICAgICAgICAgIGludCB4b2Zmc2V0ID0gc2Nyb2xsZWRYICsgby0+
bV9sZWZ0ICsgby0+bV9yZW5kZXJlci0+bWFyZ2luTGVmdCgpIC0gby0+bV9yZW5kZXJlci0+eCgp
OworICAgICAgICAgICAgICAgICAgICBpbnQgeW9mZnNldCA9ICBzY3JvbGxlZFkgKyBvLT5tX3Rv
cCArIG8tPm1fcmVuZGVyZXItPm1hcmdpblRvcCgpIC0gby0+bV9yZW5kZXJlci0+eSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoby0+bV9yZW5kZXJlci0+aGl0VGVzdChyZXF1ZXN0LCByZXN1
bHQsIEludFBvaW50KF94LCBfeSksIHhvZmZzZXQsIHlvZmZzZXQpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB4b2Zm
c2V0LCBfeSAtIHlvZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMzE2NCw3ICszMTY1LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VAogICAgIC8vIE5vdyBoaXQgdGVzdCBvdXIgYmFja2dyb3VuZAogICAgIGlmICghaW5s
aW5lRmxvdyAmJiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhp
dFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSkgewogICAgICAgICBp
bnQgdG9wRXh0cmEgPSBib3JkZXJUb3BFeHRyYSgpOwotICAgICAgICBJbnRSZWN0IGJvdW5kc1Jl
Y3QodHgsIHR5IC0gdG9wRXh0cmEsIG1fd2lkdGgsIG1faGVpZ2h0ICsgdG9wRXh0cmEgKyBib3Jk
ZXJCb3R0b21FeHRyYSgpKTsKKyAgICAgICAgSW50UmVjdCBib3VuZHNSZWN0KHR4LCB0eSAtIHRv
cEV4dHJhLCB3aWR0aCgpLCBoZWlnaHQoKSArIHRvcEV4dHJhICsgYm9yZGVyQm90dG9tRXh0cmEo
KSk7CiAgICAgICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYm91bmRzUmVjdC5jb250
YWlucyhfeCwgX3kpKSB7CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
SW50UG9pbnQoX3ggLSB0eCwgX3kgLSB0eSArIHRvcEV4dHJhKSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTMzMDAsOCArMzMwMSw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9j
azo6cG9zaXRpb25Gb3IKIAogICAgICAgICBpZiAoeSA8IHRvcCB8fCAoaXNFZGl0YWJsZVJvb3Qg
JiYgKHkgPCBib3R0b20gJiYgeCA8IGxlZnQpKSkgewogICAgICAgICAgICAgaWYgKCFpc0VkaXRh
YmxlUm9vdCkKLSAgICAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjID0gZmlyc3RDaGls
ZCgpKSB7IC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBtYWtlIGFueSBzZW5zZS4gIFRoaXMg
Y2hpbGQgY291bGQgYmUgYW4gaW5saW5lIG9yIGEgcG9zaXRpb25lZCBlbGVtZW50IG9yIGEgZmxv
YXQgb3IgYSBjb21wYWN0LCBldGMuCi0gICAgICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlv
biBwID0gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhjb250ZW50c1ggLSBjLT54UG9zKCksIGNv
bnRlbnRzWSAtIGMtPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgaWYgKFJlbmRlckJveCogYyA9
IGZpcnN0Q2hpbGRCb3goKSkgeyAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgbWFrZSBhbnkg
c2Vuc2UuICBUaGlzIGNoaWxkIGNvdWxkIGJlIGFuIGlubGluZSBvciBhIHBvc2l0aW9uZWQgZWxl
bWVudCBvciBhIGZsb2F0IG9yIGEgY29tcGFjdCwgZXRjLgorICAgICAgICAgICAgICAgICAgICBW
aXNpYmxlUG9zaXRpb24gcCA9IGMtPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoY29udGVudHNYIC0g
Yy0+eCgpLCBjb250ZW50c1kgLSBjLT55KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocC5p
c05vdE51bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTMzMTYsOCArMzMxNyw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9j
azo6cG9zaXRpb25Gb3IKIAogICAgICAgICBpZiAoeSA+PSBib3R0b20gfHwgKGlzRWRpdGFibGVS
b290ICYmICh5ID49IHRvcCAmJiB4ID49IHJpZ2h0KSkpIHsKICAgICAgICAgICAgIGlmICghaXNF
ZGl0YWJsZVJvb3QpCi0gICAgICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogYyA9IGxhc3RD
aGlsZCgpKSB7IC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBtYWtlIGFueSBzZW5zZS4gIFRo
aXMgY2hpbGQgY291bGQgYmUgYW4gaW5saW5lIG9yIGEgcG9zaXRpb25lZCBlbGVtZW50IG9yIGEg
ZmxvYXQgb3IgYSBjb21wYWN0LCBlY3QuCi0gICAgICAgICAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBwID0gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhjb250ZW50c1ggLSBjLT54UG9zKCks
IGNvbnRlbnRzWSAtIGMtPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgaWYgKFJlbmRlckJveCog
YyA9IGxhc3RDaGlsZEJveCgpKSB7IC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBtYWtlIGFu
eSBzZW5zZS4gIFRoaXMgY2hpbGQgY291bGQgYmUgYW4gaW5saW5lIG9yIGEgcG9zaXRpb25lZCBl
bGVtZW50IG9yIGEgZmxvYXQgb3IgYSBjb21wYWN0LCBlY3QuCisgICAgICAgICAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiBwID0gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhjb250ZW50c1gg
LSBjLT54KCksIGNvbnRlbnRzWSAtIGMtPnkoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChw
LmlzTm90TnVsbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMzM2NCwyMCArMzM2NSwyMCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
QmxvY2s6OnBvc2l0aW9uRm9yCiAgICAgfQogICAgIAogICAgIC8vIFNlZSBpZiBhbnkgY2hpbGQg
YmxvY2tzIGV4aXN0IGF0IHRoaXMgeSBjb29yZGluYXRlLgotICAgIGlmIChmaXJzdENoaWxkKCkg
JiYgY29udGVudHNZIDwgZmlyc3RDaGlsZCgpLT55UG9zKCkpCisgICAgaWYgKGZpcnN0Q2hpbGRC
b3goKSAmJiBjb250ZW50c1kgPCBmaXJzdENoaWxkQm94KCktPnkoKSkKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihuLCAwLCBET1dOU1RSRUFNKTsKLSAgICBmb3IgKFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBmaXJzdENoaWxkKCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVy
LT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIHJlbmRlcmVyID0gZmlyc3RD
aGlsZEJveCgpOyByZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5kZXJlci0+bmV4dFNpYmxpbmdCb3go
KSkgewogICAgICAgICBpZiAocmVuZGVyZXItPmhlaWdodCgpID09IDAgfHwgcmVuZGVyZXItPnN0
eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHJlbmRlcmVyLT5pc0Zsb2F0aW5nT3JQ
b3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiBuZXh0ID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCk7CisgICAgICAgIFJlbmRlckJveCogbmV4
dCA9IHJlbmRlcmVyLT5uZXh0U2libGluZ0JveCgpOwogICAgICAgICB3aGlsZSAobmV4dCAmJiBu
ZXh0LT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICBuZXh0ID0gbmV4dC0+
bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5leHQgPSBuZXh0LT5uZXh0U2libGluZ0JveCgp
OwogICAgICAgICBpZiAobmV4dCkgCi0gICAgICAgICAgICBib3R0b20gPSBuZXh0LT55UG9zKCk7
CisgICAgICAgICAgICBib3R0b20gPSBuZXh0LT55KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGJvdHRvbSA9IHRvcCArIHNjcm9sbEhlaWdodCgpOwotICAgICAgICBpZiAoY29udGVudHNZ
ID49IHJlbmRlcmVyLT55UG9zKCkgJiYgY29udGVudHNZIDwgYm90dG9tKQotICAgICAgICAgICAg
cmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKGNvbnRlbnRzWCAtIHJlbmRl
cmVyLT54UG9zKCksIGNvbnRlbnRzWSAtIHJlbmRlcmVyLT55UG9zKCkpOworICAgICAgICBpZiAo
Y29udGVudHNZID49IHJlbmRlcmVyLT55KCkgJiYgY29udGVudHNZIDwgYm90dG9tKQorICAgICAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKGNvbnRlbnRzWCAt
IHJlbmRlcmVyLT54KCksIGNvbnRlbnRzWSAtIHJlbmRlcmVyLT55KCkpOwogICAgIH0KICAgICAK
ICAgICByZXR1cm4gUmVuZGVyRmxvdzo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4LCB5KTsKQEAg
LTM1OTUsMTQgKzM1OTYsMTQgQEAgaW50IFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGludCBl
bmRPZgogICAgICAgICAgICAgY29sQ291bnQrKzsKICAgICB9CiAKLSAgICBtX292ZXJmbG93V2lk
dGggPSBtYXgobV93aWR0aCwgY3VyclggLSBjb2xHYXApOworICAgIG1fb3ZlcmZsb3dXaWR0aCA9
IG1heCh3aWR0aCgpLCBjdXJyWCAtIGNvbEdhcCk7CiAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4o
MCwgY3VyclggKyBkZXNpcmVkQ29sdW1uV2lkdGggKyBjb2xHYXApOwogCiAgICAgbV9vdmVyZmxv
d0hlaWdodCA9IG1heENvbEJvdHRvbTsKICAgICBpbnQgdG9BZGQgPSBib3JkZXJCb3R0b20oKSAr
IHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKICAgICAgICAg
CiAgICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQpCi0gICAgICAgIG1faGVpZ2h0ID0gbV9v
dmVyZmxvd0hlaWdodCArIHRvQWRkOworICAgICAgICBzZXRIZWlnaHQobV9vdmVyZmxvd0hlaWdo
dCArIHRvQWRkKTsKIAogICAgIHYtPnNldFByaW50UmVjdChJbnRSZWN0KCkpOwogICAgIHYtPnNl
dFRydW5jYXRlZEF0KDApOwpAQCAtNDI1MSwxMSArNDI1MiwxMSBAQCBpbnQgUmVuZGVyQmxvY2s6
OmdldEJhc2VsaW5lT2ZGaXJzdExpbmVCCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQog
ICAgIGVsc2UgewotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQo
KTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgZm9yIChSZW5k
ZXJCb3gqIGN1cnIgPSBmaXJzdENoaWxkQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2li
bGluZ0JveCgpKSB7CiAgICAgICAgICAgICBpZiAoIWN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9u
ZWQoKSkgewogICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBjdXJyLT5nZXRCYXNlbGluZU9m
Rmlyc3RMaW5lQm94KCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnItPnlQb3MoKSArIHJlc3VsdDsgLy8gVHJhbnNsYXRl
IHRvIG91ciBjb29yZGluYXRlIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vy
ci0+eSgpICsgcmVzdWx0OyAvLyBUcmFuc2xhdGUgdG8gb3VyIGNvb3JkaW5hdGUgc3BhY2UuCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC00Mjc3LDEyICs0Mjc4LDEyIEBAIGlu
dCBSZW5kZXJCbG9jazo6Z2V0QmFzZWxpbmVPZkxhc3RMaW5lQm8KICAgICB9CiAgICAgZWxzZSB7
CiAgICAgICAgIGJvb2wgaGF2ZU5vcm1hbEZsb3dDaGlsZCA9IGZhbHNlOwotICAgICAgICBmb3Ig
KFJlbmRlck9iamVjdCogY3VyciA9IGxhc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJl
dmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgZm9yIChSZW5kZXJCb3gqIGN1cnIgPSBsYXN0Q2hp
bGRCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZpb3VzU2libGluZ0JveCgpKSB7CiAgICAg
ICAgICAgICBpZiAoIWN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkgewogICAgICAgICAg
ICAgICAgIGhhdmVOb3JtYWxGbG93Q2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGludCBy
ZXN1bHQgPSBjdXJyLT5nZXRCYXNlbGluZU9mTGFzdExpbmVCb3goKTsKICAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyci0+eVBv
cygpICsgcmVzdWx0OyAvLyBUcmFuc2xhdGUgdG8gb3VyIGNvb3JkaW5hdGUgc3BhY2UuCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJyLT55KCkgKyByZXN1bHQ7IC8vIFRyYW5zbGF0ZSB0
byBvdXIgY29vcmRpbmF0ZSBzcGFjZS4KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBpZiAoIWhhdmVOb3JtYWxGbG93Q2hpbGQgJiYgaGFzTGluZUlmRW1wdHkoKSkKQEAgLTQ1MDAs
MTggKzQ1MDEsMTggQEAgaW50IGdldEhlaWdodEZvckxpbmVDb3VudChSZW5kZXJCbG9jayogYgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiBub3JtYWxGbG93Q2hpbGRXaXRob3V0TGluZXMgPSAwOwotICAgICAgICAgICAg
Zm9yIChSZW5kZXJPYmplY3QqIG9iaiA9IGJsb2NrLT5maXJzdENoaWxkKCk7IG9iajsgb2JqID0g
b2JqLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIG5vcm1hbEZsb3dD
aGlsZFdpdGhvdXRMaW5lcyA9IDA7CisgICAgICAgICAgICBmb3IgKFJlbmRlckJveCogb2JqID0g
YmxvY2stPmZpcnN0Q2hpbGRCb3goKTsgb2JqOyBvYmogPSBvYmotPm5leHRTaWJsaW5nQm94KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tMaW5lcyhvYmopKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGludCByZXN1bHQgPSBnZXRIZWlnaHRGb3JMaW5lQ291bnQoc3RhdGljX2Nh
c3Q8UmVuZGVyQmxvY2sqPihvYmopLCBsLCBmYWxzZSwgY291bnQpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdCArIG9iai0+eVBvcygpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxvY2stPmJvcmRlckJvdHRv
bSgpICsgYmxvY2stPnBhZGRpbmdCb3R0b20oKSkgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQgKyBvYmotPnkoKSArIChpbmNsdWRlQm90dG9tID8gKGJsb2NrLT5i
b3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5nQm90dG9tKCkpIDogMCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFvYmotPmlzRmxvYXRpbmdPclBvc2l0
aW9uZWQoKSAmJiAhb2JqLT5pc0NvbXBhY3QoKSAmJiAhb2JqLT5pc1J1bkluKCkpCiAgICAgICAg
ICAgICAgICAgICAgIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyA9IG9iajsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChub3JtYWxGbG93Q2hpbGRXaXRob3V0TGluZXMgJiYgbCA9
PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxGbG93Q2hpbGRXaXRob3V0TGluZXMt
PnlQb3MoKSArIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcy0+aGVpZ2h0KCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcy0+eSgpICsgbm9ybWFs
Rmxvd0NoaWxkV2l0aG91dExpbmVzLT5oZWlnaHQoKTsKICAgICAgICAgfQogICAgIH0KICAgICAK
QEAgLTQ1NTksMTQgKzQ1NjAsMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVy
Rml0KGludAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgZm9yIChSZW5kZXJPYmplY3QqIG9iaiA9IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBv
YmotPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGZvciAoUmVuZGVyQm94KiBvYmogPSBm
aXJzdENoaWxkQm94KCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFvYmotPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAob2JqLT5pc0Jsb2NrRmxvdygpICYmICFvYmotPmhhc092ZXJmbG93
Q2xpcCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sq
PihvYmopLT5hZGp1c3RGb3JCb3JkZXJGaXQoeCArIG9iai0+eFBvcygpLCBsZWZ0LCByaWdodCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG9iaikt
PmFkanVzdEZvckJvcmRlckZpdCh4ICsgb2JqLT54KCksIGxlZnQsIHJpZ2h0KTsKICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAob2JqLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJM
RSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGEgcmVwbGFjZWQgZWxlbWVu
dCBvciBzb21lIGtpbmQgb2Ygbm9uLWJsb2NrLWZsb3cgb2JqZWN0LgotICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCB4ICsgb2JqLT54UG9zKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHggKyBvYmotPnhQb3MoKSArIG9iai0+d2lk
dGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHggKyBvYmot
PngoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IG1heChyaWdodCwgeCArIG9i
ai0+eCgpICsgb2JqLT53aWR0aCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ1NzgsNyArNDU3OSw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmFkanVzdEZvckJvcmRlckZpdChpbnQKICAgICAgICAgICAgIGZvciAoOyAociA9IGl0
LmN1cnJlbnQoKSk7ICsraXQpIHsKICAgICAgICAgICAgICAgICAvLyBPbmx5IGV4YW1pbmUgdGhl
IG9iamVjdCBpZiBvdXIgbV9zaG91bGRQYWludCBmbGFnIGlzIHNldC4KICAgICAgICAgICAgICAg
ICBpZiAoci0+bV9zaG91bGRQYWludCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgZmxvYXRM
ZWZ0ID0gci0+bV9sZWZ0IC0gci0+bV9yZW5kZXJlci0+eFBvcygpICsgci0+bV9yZW5kZXJlci0+
bWFyZ2luTGVmdCgpOworICAgICAgICAgICAgICAgICAgICBpbnQgZmxvYXRMZWZ0ID0gci0+bV9s
ZWZ0IC0gci0+bV9yZW5kZXJlci0+eCgpICsgci0+bV9yZW5kZXJlci0+bWFyZ2luTGVmdCgpOwog
ICAgICAgICAgICAgICAgICAgICBpbnQgZmxvYXRSaWdodCA9IGZsb2F0TGVmdCArIHItPm1fcmVu
ZGVyZXItPndpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgZmxv
YXRMZWZ0KTsKICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIGZsb2F0Umln
aHQpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw4ICsx
MTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBsYXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5
b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludFRvcCwgaW50JiByZXBhaW50Qm90dG9tKTsKIAogICAg
IHZvaWQgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuKTsKLSAg
ICB2b2lkIGluc2VydFBvc2l0aW9uZWRPYmplY3QoUmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9pZCBy
ZW1vdmVQb3NpdGlvbmVkT2JqZWN0KFJlbmRlck9iamVjdCopOworICAgIHZvaWQgaW5zZXJ0UG9z
aXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsKKyAgICB2b2lkIHJlbW92ZVBvc2l0aW9uZWRPYmpl
Y3QoUmVuZGVyQm94Kik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVBvc2l0aW9uZWRPYmplY3Rz
KFJlbmRlckJsb2NrKik7CiAKICAgICB2b2lkIGFkZFBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJl
bmRlckJveCopOwpAQCAtMTI4LDEzICsxMjgsMTMgQEAgcHVibGljOgogCiAgICAgLy8gdGhlIGlt
cGxlbWVudGF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGlzIGluIGJpZGkuY3BwCiAg
ICAgc3RydWN0IEZsb2F0V2l0aFJlY3QgewotICAgICAgICBGbG9hdFdpdGhSZWN0KFJlbmRlck9i
amVjdCogZikKKyAgICAgICAgRmxvYXRXaXRoUmVjdChSZW5kZXJCb3gqIGYpCiAgICAgICAgICAg
ICA6IG9iamVjdChmKQotICAgICAgICAgICAgLCByZWN0KEludFJlY3QoZi0+eFBvcygpIC0gZi0+
bWFyZ2luTGVmdCgpLCBmLT55UG9zKCkgLSBmLT5tYXJnaW5Ub3AoKSwgZi0+d2lkdGgoKSArIGYt
Pm1hcmdpbkxlZnQoKSArIGYtPm1hcmdpblJpZ2h0KCksIGYtPmhlaWdodCgpICsgZi0+bWFyZ2lu
VG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20oKSkpCisgICAgICAgICAgICAsIHJlY3QoSW50UmVjdChm
LT54KCkgLSBmLT5tYXJnaW5MZWZ0KCksIGYtPnkoKSAtIGYtPm1hcmdpblRvcCgpLCBmLT53aWR0
aCgpICsgZi0+bWFyZ2luTGVmdCgpICsgZi0+bWFyZ2luUmlnaHQoKSwgZi0+aGVpZ2h0KCkgKyBm
LT5tYXJnaW5Ub3AoKSArIGYtPm1hcmdpbkJvdHRvbSgpKSkKICAgICAgICAgewogICAgICAgICB9
CiAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3Q7CisgICAgICAgIFJlbmRlckJveCogb2Jq
ZWN0OwogICAgICAgICBJbnRSZWN0IHJlY3Q7CiAgICAgfTsKIApAQCAtMTY5LDE1ICsxNjksMTUg
QEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oUGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHkpOwogICAgIHZvaWQgcGFpbnRDYXJldChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwg
Q2FyZXRUeXBlKTsKIAotICAgIHZvaWQgaW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyT2JqZWN0
Kik7Ci0gICAgdm9pZCByZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJPYmplY3QqKTsKKyAgICB2
b2lkIGluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCopOworICAgIHZvaWQgcmVtb3ZlRmxv
YXRpbmdPYmplY3QoUmVuZGVyQm94Kik7CiAKICAgICAvLyBDYWxsZWQgZnJvbSBsaW5lV2lkdGgs
IHRvIHBvc2l0aW9uIHRoZSBmbG9hdHMgYWRkZWQgaW4gdGhlIGxhc3QgbGluZS4KICAgICAvLyBS
ZXR1cm5zIHR1cmUgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIHBvc2l0aW9uZWQgYW55IGZsb2F0cy4K
ICAgICBib29sIHBvc2l0aW9uTmV3RmxvYXRzKCk7CiAgICAgdm9pZCBjbGVhckZsb2F0cygpOwot
ICAgIGludCBnZXRDbGVhckRlbHRhKFJlbmRlck9iamVjdCogY2hpbGQpOwotICAgIHZpcnR1YWwg
dm9pZCBtYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRlck9iamVjdCog
ZmxvYXRUb1JlbW92ZSA9IDApOworICAgIGludCBnZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hp
bGQpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5
b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZSA9IDApOwogICAgIHZvaWQgbWFya1Bvc2l0aW9u
ZWRPYmplY3RzRm9yTGF5b3V0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNGbG9hdHMo
KSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1w
dHkoKTsgfQpAQCAtMTg1LDcgKzE4NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBh
dm9pZHNGbG9hdHMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNPdmVyaGFuZ2luZ0Zs
b2F0cygpIHsgcmV0dXJuICFoYXNDb2x1bW5zKCkgJiYgZmxvYXRCb3R0b20oKSA+IG1faGVpZ2h0
OyB9CisgICAgdmlydHVhbCBib29sIGhhc092ZXJoYW5naW5nRmxvYXRzKCkgeyByZXR1cm4gIWhh
c0NvbHVtbnMoKSAmJiBmbG9hdEJvdHRvbSgpID4gaGVpZ2h0KCk7IH0KICAgICB2b2lkIGFkZElu
dHJ1ZGluZ0Zsb2F0cyhSZW5kZXJCbG9jayogcHJldiwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0
KTsKICAgICBpbnQgYWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIGNoaWxkLCBpbnQg
eG9mZnNldCwgaW50IHlvZmZzZXQsIGJvb2wgbWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cyk7CiAK
QEAgLTM1Miw3ICszNTIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgVHlwZSB0eXBlKCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQogCi0gICAgICAgIFJlbmRlck9iamVj
dCogbV9yZW5kZXJlcjsKKyAgICAgICAgUmVuZGVyQm94KiBtX3JlbmRlcmVyOwogICAgICAgICBp
bnQgbV90b3A7CiAgICAgICAgIGludCBtX2JvdHRvbTsKICAgICAgICAgaW50IG1fbGVmdDsKQEAg
LTM2NSwxOCArMzY1LDE4IEBAIHByb3RlY3RlZDoKICAgICAvLyBUaGUgZm9sbG93aW5nIGhlbHBl
ciBmdW5jdGlvbnMgYW5kIHN0cnVjdHMgYXJlIHVzZWQgYnkgbGF5b3V0QmxvY2tDaGlsZHJlbi4K
ICAgICBjbGFzcyBDb21wYWN0SW5mbyB7CiAgICAgICAgIC8vIEEgY29tcGFjdCBjaGlsZCB0aGF0
IG5lZWRzIHRvIGJlIGNvbGxhcHNlZCBpbnRvIHRoZSBtYXJnaW4gb2YgdGhlIGZvbGxvd2luZyBi
bG9jay4KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBtX2NvbXBhY3Q7CisgICAgICAgIFJlbmRlckJv
eCogbV9jb21wYWN0OwogCiAgICAgICAgIC8vIFRoZSBibG9jayB3aXRoIHRoZSBvcGVuIG1hcmdp
biB0aGF0IHRoZSBjb21wYWN0IGNoaWxkIGlzIGdvaW5nIHRvIHBsYWNlIGl0c2VsZiB3aXRoaW4u
CiAgICAgICAgIFJlbmRlck9iamVjdCogbV9ibG9jazsKIAogICAgIHB1YmxpYzoKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiBjb21wYWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb21wYWN0OyB9CisgICAg
ICAgIFJlbmRlckJveCogY29tcGFjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGFjdDsgfQogICAg
ICAgICBSZW5kZXJPYmplY3QqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQogICAg
ICAgICBib29sIG1hdGNoZXMoUmVuZGVyT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gbV9j
b21wYWN0ICYmIG1fYmxvY2sgPT0gY2hpbGQ7IH0KIAogICAgICAgICB2b2lkIGNsZWFyKCkgeyBz
ZXQoMCwgMCk7IH0KLSAgICAgICAgdm9pZCBzZXQoUmVuZGVyT2JqZWN0KiBjLCBSZW5kZXJPYmpl
Y3QqIGIpIHsgbV9jb21wYWN0ID0gYzsgbV9ibG9jayA9IGI7IH0KKyAgICAgICAgdm9pZCBzZXQo
UmVuZGVyQm94KiBjLCBSZW5kZXJPYmplY3QqIGIpIHsgbV9jb21wYWN0ID0gYzsgbV9ibG9jayA9
IGI7IH0KIAogICAgICAgICBDb21wYWN0SW5mbygpIHsgY2xlYXIoKTsgfQogICAgIH07CkBAIC00
NDksMjQgKzQ0OSwyNCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGFkanVzdFBvc2l0aW9uZWRC
bG9jayhSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJik7CiAgICAgdm9pZCBh
ZGp1c3RGbG9hdGluZ0Jsb2NrKGNvbnN0IE1hcmdpbkluZm8mKTsKLSAgICBSZW5kZXJPYmplY3Qq
IGhhbmRsZVNwZWNpYWxDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZv
JiwgQ29tcGFjdEluZm8mLCBib29sJiBoYW5kbGVkKTsKLSAgICBSZW5kZXJPYmplY3QqIGhhbmRs
ZUZsb2F0aW5nQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYsIGJv
b2wmIGhhbmRsZWQpOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlUG9zaXRpb25lZENoaWxkKFJl
bmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mLCBib29sJiBoYW5kbGVkKTsKLSAg
ICBSZW5kZXJPYmplY3QqIGhhbmRsZUNvbXBhY3RDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBD
b21wYWN0SW5mbyYsIGJvb2wmIGhhbmRsZWQpOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlUnVu
SW5DaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBib29sJiBoYW5kbGVkKTsKLSAgICB2b2lkIGNv
bGxhcHNlTWFyZ2lucyhSZW5kZXJPYmplY3QqIGNoaWxkLCBNYXJnaW5JbmZvJiwgaW50IHlQb3NF
c3RpbWF0ZSk7Ci0gICAgdm9pZCBjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlck9iamVjdCogY2hp
bGQsIE1hcmdpbkluZm8mLCBpbnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xkVG9wTmVnTWFyZ2lu
KTsKLSAgICB2b2lkIGluc2VydENvbXBhY3RJZk5lZWRlZChSZW5kZXJPYmplY3QqIGNoaWxkLCBD
b21wYWN0SW5mbyYpOworICAgIFJlbmRlckJveCogaGFuZGxlU3BlY2lhbENoaWxkKFJlbmRlckJv
eCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mLCBDb21wYWN0SW5mbyYsIGJvb2wmIGhhbmRsZWQp
OworICAgIFJlbmRlckJveCogaGFuZGxlRmxvYXRpbmdDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBj
b25zdCBNYXJnaW5JbmZvJiwgYm9vbCYgaGFuZGxlZCk7CisgICAgUmVuZGVyQm94KiBoYW5kbGVQ
b3NpdGlvbmVkQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYsIGJvb2wm
IGhhbmRsZWQpOworICAgIFJlbmRlckJveCogaGFuZGxlQ29tcGFjdENoaWxkKFJlbmRlckJveCog
Y2hpbGQsIENvbXBhY3RJbmZvJiwgYm9vbCYgaGFuZGxlZCk7CisgICAgUmVuZGVyQm94KiBoYW5k
bGVSdW5JbkNoaWxkKFJlbmRlckJveCogY2hpbGQsIGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQg
Y29sbGFwc2VNYXJnaW5zKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBpbnQgeVBvc0Vz
dGltYXRlKTsKKyAgICB2b2lkIGNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwg
TWFyZ2luSW5mbyYsIGludCBvbGRUb3BQb3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJnaW4pOwor
ICAgIHZvaWQgaW5zZXJ0Q29tcGFjdElmTmVlZGVkKFJlbmRlckJveCogY2hpbGQsIENvbXBhY3RJ
bmZvJik7CiAgICAgaW50IGVzdGltYXRlVmVydGljYWxQb3NpdGlvbihSZW5kZXJPYmplY3QqIGNo
aWxkLCBjb25zdCBNYXJnaW5JbmZvJik7Ci0gICAgdm9pZCBkZXRlcm1pbmVIb3Jpem9udGFsUG9z
aXRpb24oUmVuZGVyT2JqZWN0KiBjaGlsZCk7CisgICAgdm9pZCBkZXRlcm1pbmVIb3Jpem9udGFs
UG9zaXRpb24oUmVuZGVyQm94KiBjaGlsZCk7CiAgICAgdm9pZCBoYW5kbGVCb3R0b21PZkJsb2Nr
KGludCB0b3AsIGludCBib3R0b20sIE1hcmdpbkluZm8mKTsKICAgICB2b2lkIHNldENvbGxhcHNl
ZEJvdHRvbU1hcmdpbihjb25zdCBNYXJnaW5JbmZvJik7CiAgICAgLy8gRW5kIGhlbHBlciBmdW5j
dGlvbnMgYW5kIHN0cnVjdHMgdXNlZCBieSBsYXlvdXRCbG9ja0NoaWxkcmVuLgogCiBwcml2YXRl
OgotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj46OmNvbnN0X2l0ZXJhdG9y
IEl0ZXJhdG9yOworICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj46OmNvbnN0X2l0
ZXJhdG9yIEl0ZXJhdG9yOwogICAgIERlcHJlY2F0ZWRQdHJMaXN0PEZsb2F0aW5nT2JqZWN0Piog
bV9mbG9hdGluZ09iamVjdHM7Ci0gICAgTGlzdEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj4qIG1fcG9z
aXRpb25lZE9iamVjdHM7CisgICAgTGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj4qIG1fcG9zaXRpb25l
ZE9iamVjdHM7CiAgICAgICAgICAKICAgICAvLyBBbGxvY2F0ZWQgb25seSB3aGVuIHNvbWUgb2Yg
dGhlc2UgZmllbGRzIGhhdmUgbm9uLWRlZmF1bHQgdmFsdWVzCiAgICAgc3RydWN0IE1heE1hcmdp
biB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1
ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBAIC02MCwxMCArNjEsNiBAQCBib29sIFJlbmRlckJveDo6
c19oYWRPdmVyZmxvd0NsaXAgPSBmYWxzCiAKIFJlbmRlckJveDo6UmVuZGVyQm94KE5vZGUqIG5v
ZGUpCiAgICAgOiBSZW5kZXJPYmplY3Qobm9kZSkKLSAgICAsIG1fd2lkdGgoMCkKLSAgICAsIG1f
aGVpZ2h0KDApCi0gICAgLCBtX3goMCkKLSAgICAsIG1feSgwKQogICAgICwgbV9tYXJnaW5MZWZ0
KDApCiAgICAgLCBtX21hcmdpblJpZ2h0KDApCiAgICAgLCBtX21hcmdpblRvcCgwKQpAQCAtNzMs
NiArNzAsNyBAQCBSZW5kZXJCb3g6OlJlbmRlckJveChOb2RlKiBub2RlKQogICAgICwgbV9sYXll
cigwKQogICAgICwgbV9pbmxpbmVCb3hXcmFwcGVyKDApCiB7CisgICAgc2V0SXNCb3goKTsKIH0K
IAogUmVuZGVyQm94Ojp+UmVuZGVyQm94KCkKQEAgLTIxNCw2ICsyMTIsMjY0IEBAIHZvaWQgUmVu
ZGVyQm94OjpzdHlsZURpZENoYW5nZShSZW5kZXJTdHkKICAgICAgICAgZG9jdW1lbnQoKS0+c2V0
VGV4dENvbG9yKHN0eWxlKCktPmNvbG9yKCkpOwogfQogCisKK2ludCBSZW5kZXJCb3g6Om9mZnNl
dExlZnQoKSBjb25zdAoreworICAgIFJlbmRlckJveCogb2Zmc2V0UGFyID0gb2Zmc2V0UGFyZW50
KCk7CisgICAgaWYgKCFvZmZzZXRQYXIpCisgICAgICAgIHJldHVybiAwOworICAgIGludCB4UG9z
ID0geCgpIC0gb2Zmc2V0UGFyLT5ib3JkZXJMZWZ0KCk7CisgICAgaWYgKCFpc1Bvc2l0aW9uZWQo
KSkgeworICAgICAgICBpZiAoaXNSZWxQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICB4UG9zICs9
IHJlbGF0aXZlUG9zaXRpb25PZmZzZXRYKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogY3VyciA9
IHBhcmVudCgpOworICAgICAgICB3aGlsZSAoY3VyciAmJiBjdXJyICE9IG9mZnNldFBhcikgewor
ICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgYXJlIHdlIHN1cHBvc2VkIHRvIGRvIGluc2lkZSBT
VkcgY29udGVudD8KKyAgICAgICAgICAgIGlmIChjdXJyLT5pc0JveCgpICYmICFjdXJyLT5pc1Rh
YmxlUm93KCkpCisgICAgICAgICAgICAgICAgeFBvcyArPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gq
PihjdXJyKS0+eCgpOworICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOworICAgICAg
ICB9CisgICAgICAgIGlmIChvZmZzZXRQYXItPmlzQm9keSgpICYmICFvZmZzZXRQYXItPmlzUmVs
UG9zaXRpb25lZCgpICYmICFvZmZzZXRQYXItPmlzUG9zaXRpb25lZCgpKQorICAgICAgICAgICAg
eFBvcyArPSBvZmZzZXRQYXItPngoKTsKKyAgICB9CisgICAgcmV0dXJuIHhQb3M7Cit9CisKK2lu
dCBSZW5kZXJCb3g6Om9mZnNldFRvcCgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBvZmZzZXRQ
YXIgPSBvZmZzZXRQYXJlbnQoKTsKKyAgICBpZiAoIW9mZnNldFBhcikKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaW50IHlQb3MgPSBtX2ZyYW1lUmVjdC55KCkgLSBvZmZzZXRQYXItPmJvcmRlclRv
cCgpOworICAgIGlmICghaXNQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgaWYgKGlzUmVsUG9zaXRp
b25lZCgpKQorICAgICAgICAgICAgeVBvcyArPSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WSgpOwor
ICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBwYXJlbnQoKTsKKyAgICAgICAgd2hpbGUgKGN1
cnIgJiYgY3VyciAhPSBvZmZzZXRQYXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGFy
ZSB3ZSBzdXBwb3NlZCB0byBkbyBpbnNpZGUgU1ZHIGNvbnRlbnQ/CisgICAgICAgICAgICBpZiAo
Y3Vyci0+aXNCb3goKSAmJiAhY3Vyci0+aXNUYWJsZVJvdygpKQorICAgICAgICAgICAgICAgIHlQ
b3MgKz0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4oY3VyciktPnkoKTsKKyAgICAgICAgICAgIGN1
cnIgPSBjdXJyLT5wYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2Zmc2V0UGFyLT5p
c0JvZHkoKSAmJiAhb2Zmc2V0UGFyLT5pc1JlbFBvc2l0aW9uZWQoKSAmJiAhb2Zmc2V0UGFyLT5p
c1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIHlQb3MgKz0gb2Zmc2V0UGFyLT55KCk7CisgICAg
fQorICAgIHJldHVybiB5UG9zOworfQorCitSZW5kZXJCb3gqIFJlbmRlckJveDo6b2Zmc2V0UGFy
ZW50KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSXQgZmVlbHMgbGlrZSB0aGlzIGZ1bmN0aW9u
IGNvdWxkIGFsbW9zdCBiZSB3cml0dGVuIHVzaW5nIGNvbnRhaW5pbmcgYmxvY2tzLgorICAgIGlm
IChpc0JvZHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBib29sIHNraXBUYWJsZXMgPSBp
c1Bvc2l0aW9uZWQoKSB8fCBpc1JlbFBvc2l0aW9uZWQoKTsKKyAgICBmbG9hdCBjdXJyWm9vbSA9
IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBwYXJl
bnQoKTsKKyAgICB3aGlsZSAoY3VyciAmJiAoIWN1cnItPmVsZW1lbnQoKSB8fAorICAgICAgICAg
ICAgICAgICAgICAoIWN1cnItPmlzUG9zaXRpb25lZCgpICYmICFjdXJyLT5pc1JlbFBvc2l0aW9u
ZWQoKSAmJiAhY3Vyci0+aXNCb2R5KCkpKSkgeworICAgICAgICBOb2RlKiBlbGVtZW50ID0gY3Vy
ci0+ZWxlbWVudCgpOworICAgICAgICBpZiAoIXNraXBUYWJsZXMgJiYgZWxlbWVudCkgeworICAg
ICAgICAgICAgYm9vbCBpc1RhYmxlRWxlbWVudCA9IGVsZW1lbnQtPmhhc1RhZ05hbWUodGFibGVU
YWcpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+aGFzVGFn
TmFtZSh0ZFRhZykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50
LT5oYXNUYWdOYW1lKHRoVGFnKTsKKworI2lmIEVOQUJMRShXTUwpCisgICAgICAgICAgICBpZiAo
IWlzVGFibGVFbGVtZW50ICYmIGVsZW1lbnQtPmlzV01MRWxlbWVudCgpKQorICAgICAgICAgICAg
ICAgIGlzVGFibGVFbGVtZW50ID0gZWxlbWVudC0+aGFzVGFnTmFtZShXTUxOYW1lczo6dGFibGVU
YWcpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5oYXNUYWdO
YW1lKFdNTE5hbWVzOjp0ZFRhZyk7CisjZW5kaWYKKworICAgICAgICAgICAgaWYgKGlzVGFibGVF
bGVtZW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZmxv
YXQgbmV3Wm9vbSA9IGN1cnItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgaWYg
KGN1cnJab29tICE9IG5ld1pvb20pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY3Vyclpv
b20gPSBuZXdab29tOworICAgICAgICBjdXJyID0gY3Vyci0+cGFyZW50KCk7CisgICAgfQorICAg
IHJldHVybiBjdXJyICYmIGN1cnItPmlzQm94KCkgPyBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihj
dXJyKSA6IDA7Cit9CisKKy8vIE1vcmUgSUUgZXh0ZW5zaW9ucy4gIGNsaWVudFdpZHRoIGFuZCBj
bGllbnRIZWlnaHQgcmVwcmVzZW50IHRoZSBpbnRlcmlvciBvZiBhbiBvYmplY3QKKy8vIGV4Y2x1
ZGluZyBib3JkZXIgYW5kIHNjcm9sbGJhci4KK2ludCBSZW5kZXJCb3g6OmNsaWVudFdpZHRoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gd2lkdGgoKSAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0
KCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJCb3g6OmNsaWVu
dEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBi
b3JkZXJCb3R0b20oKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKK30KKworLy8gc2Ny
b2xsV2lkdGgvc2Nyb2xsSGVpZ2h0IHdpbGwgYmUgdGhlIHNhbWUgYXMgY2xpZW50V2lkdGgvY2xp
ZW50SGVpZ2h0IHVubGVzcyB0aGUKKy8vIG9iamVjdCBoYXMgb3ZlcmZsb3c6aGlkZGVuL3Njcm9s
bC9hdXRvIHNwZWNpZmllZCBhbmQgYWxzbyBoYXMgb3ZlcmZsb3cuCitpbnQgUmVuZGVyQm94Ojpz
Y3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpID8gbV9s
YXllci0+c2Nyb2xsV2lkdGgoKSA6IG92ZXJmbG93V2lkdGgoKTsKK30KKworaW50IFJlbmRlckJv
eDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkg
PyBtX2xheWVyLT5zY3JvbGxIZWlnaHQoKSA6IG92ZXJmbG93SGVpZ2h0KCk7Cit9CisKK2ludCBS
ZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNPdmVyZmxvd0Ns
aXAoKSA/IG1fbGF5ZXItPnNjcm9sbFhPZmZzZXQoKSA6IDA7Cit9CisKK2ludCBSZW5kZXJCb3g6
OnNjcm9sbFRvcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpID8gbV9s
YXllci0+c2Nyb2xsWU9mZnNldCgpIDogMDsKK30KKwordm9pZCBSZW5kZXJCb3g6OnNldFNjcm9s
bExlZnQoaW50IG5ld0xlZnQpCit7CisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQorICAgICAg
ICBtX2xheWVyLT5zY3JvbGxUb1hPZmZzZXQobmV3TGVmdCk7Cit9CisKK3ZvaWQgUmVuZGVyQm94
OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKK3sKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkp
CisgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWU9mZnNldChuZXdUb3ApOworfQorCit2b2lkIFJl
bmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGlu
dCB0eSwgYm9vbCB0b3BMZXZlbCkKK3sKKyAgICAvLyBGb3IgYmxvY2tzIGluc2lkZSBpbmxpbmVz
LCB3ZSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5zIHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVw
IHRvIHRoZQorICAgIC8vIGlubGluZSBib3hlcyBhYm92ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0
dGluZyBtZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0gYSBzaW5nbGUgaXJyZWd1bGFyCisgICAgLy8g
c2hhcGUpLgorICAgIFJlbmRlckZsb3cqIGNvbnRpbnVhdGlvbiA9IHZpcnR1YWxDb250aW51YXRp
b24oKTsKKyAgICBpZiAodG9wTGV2ZWwgJiYgY29udGludWF0aW9uKSB7CisgICAgICAgIHJlY3Rz
LmFwcGVuZChJbnRSZWN0KHR4LCB0eSAtIGNvbGxhcHNlZE1hcmdpblRvcCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLCBoZWlnaHQoKSArIGNvbGxhcHNlZE1hcmdpblRv
cCgpICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCkpKTsKKyAgICAgICAgY29udGludWF0aW9uLT5h
YnNvbHV0ZVJlY3RzKHJlY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHggLSB4KCkgKyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9jaygpLT54KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAtIHkoKSArIGNvbnRpbnVhdGlvbi0+Y29u
dGFpbmluZ0Jsb2NrKCktPnkoKSwgdG9wTGV2ZWwpOworICAgIH0gZWxzZQorICAgICAgICByZWN0
cy5hcHBlbmQoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpICsgYm9yZGVyVG9wRXh0
cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCkpKTsKK30KKwordm9pZCBSZW5kZXJCb3g6OmFic29s
dXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sIHRvcExldmVsKQoreworICAg
IC8vIEZvciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNsdWRlIG1h
cmdpbnMgc28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhlCisgICAgLy8gaW5saW5lIGJveGVz
IGFib3ZlIGFuZCBiZWxvdyB1cyAodGh1cyBnZXR0aW5nIG1lcmdlZCB3aXRoIHRoZW0gdG8gZm9y
bSBhIHNpbmdsZSBpcnJlZ3VsYXIKKyAgICAvLyBzaGFwZSkuCisgICAgUmVuZGVyRmxvdyogY29u
dGludWF0aW9uID0gdmlydHVhbENvbnRpbnVhdGlvbigpOworICAgIGlmICh0b3BMZXZlbCAmJiBj
b250aW51YXRpb24pIHsKKyAgICAgICAgRmxvYXRSZWN0IGxvY2FsUmVjdCgwLCAtY29sbGFwc2Vk
TWFyZ2luVG9wKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSwgaGVpZ2h0
KCkgKyBjb2xsYXBzZWRNYXJnaW5Ub3AoKSArIGNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpKTsKKyAg
ICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQobG9jYWxSZWN0KSk7CisgICAg
ICAgIGNvbnRpbnVhdGlvbi0+YWJzb2x1dGVRdWFkcyhxdWFkcywgdG9wTGV2ZWwpOworICAgIH0g
ZWxzZQorICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
MCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9t
RXh0cmEoKSkpKTsKK30KKworSW50UmVjdCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVudEJveCgp
IGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gY29udGVudEJveFJlY3QoKTsKKyAgICBGbG9h
dFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsK
KyAgICByZWN0Lm1vdmUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CisgICAgcmV0dXJuIHJlY3Q7
Cit9CisKK0Zsb2F0UXVhZCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVudFF1YWQoKSBjb25zdAor
eworICAgIEludFJlY3QgcmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CisgICAgcmV0dXJuIGxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHJlY3QpKTsKK30KKworCitJbnRSZWN0IFJlbmRlckJv
eDo6YWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGJveCA9IGJv
cmRlckJveFJlY3QoKTsKKyAgICBhZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhib3gpOwor
CisgICAgRmxvYXRRdWFkIGFic091dGxpbmVRdWFkID0gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9h
dFJlY3QoYm94KSk7CisgICAgYm94ID0gYWJzT3V0bGluZVF1YWQuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKKyAgICBib3gubW92ZSh2aWV3KCktPmxheW91dERlbHRhKCkpOworCisgICAgcmV0dXJu
IGJveDsKK30KKwordm9pZCBSZW5kZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsIGludCB0eSkKK3sKKyAgICAvLyBGb3IgYmxv
Y2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5zIHNvIHRo
YXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRoZQorICAgIC8vIGlubGluZSBib3hlcyBhYm92ZSBhbmQg
YmVsb3cgdXMgKHRodXMgZ2V0dGluZyBtZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0gYSBzaW5nbGUg
aXJyZWd1bGFyCisgICAgLy8gc2hhcGUpLgorICAgIFJlbmRlckZsb3cqIGNvbnRpbnVhdGlvbiA9
IHZpcnR1YWxDb250aW51YXRpb24oKTsKKyAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+YWRkRm9jdXNSaW5nUmVjdChJbnRSZWN0KHR4LCB0eSAtIGNvbGxh
cHNlZE1hcmdpblRvcCgpLCB3aWR0aCgpLCBoZWlnaHQoKSArIGNvbGxhcHNlZE1hcmdpblRvcCgp
ICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCkpKTsKKyAgICAgICAgY29udGludWF0aW9uLT5hZGRG
b2N1c1JpbmdSZWN0cyhncmFwaGljc0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHggLSB4KCkgKyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9jaygp
LT54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSB5KCkg
KyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9jaygpLT55KCkpOworICAgIH0gZWxzZQorICAg
ICAgICBncmFwaGljc0NvbnRleHQtPmFkZEZvY3VzUmluZ1JlY3QoSW50UmVjdCh0eCwgdHksIHdp
ZHRoKCksIGhlaWdodCgpKSk7Cit9CisKKworSW50UmVjdCBSZW5kZXJCb3g6OnJlZmxlY3Rpb25C
b3goKSBjb25zdAoreworICAgIEludFJlY3QgcmVzdWx0OworICAgIGlmICghc3R5bGUoKS0+Ym94
UmVmbGVjdCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIEludFJlY3QgYm94ID0gYm9y
ZGVyQm94UmVjdCgpOworICAgIHJlc3VsdCA9IGJveDsKKyAgICBzd2l0Y2ggKHN0eWxlKCktPmJv
eFJlZmxlY3QoKS0+ZGlyZWN0aW9uKCkpIHsKKyAgICAgICAgY2FzZSBSZWZsZWN0aW9uQmVsb3c6
CisgICAgICAgICAgICByZXN1bHQubW92ZSgwLCBib3guaGVpZ2h0KCkgKyByZWZsZWN0aW9uT2Zm
c2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVmbGVjdGlvbkFib3Zl
OgorICAgICAgICAgICAgcmVzdWx0Lm1vdmUoMCwgLWJveC5oZWlnaHQoKSAtIHJlZmxlY3Rpb25P
ZmZzZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWZsZWN0aW9uTGVm
dDoKKyAgICAgICAgICAgIHJlc3VsdC5tb3ZlKC1ib3gud2lkdGgoKSAtIHJlZmxlY3Rpb25PZmZz
ZXQoKSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWZsZWN0aW9uUmln
aHQ6CisgICAgICAgICAgICByZXN1bHQubW92ZShib3gud2lkdGgoKSArIHJlZmxlY3Rpb25PZmZz
ZXQoKSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworaW50IFJlbmRlckJveDo6cmVmbGVjdGlvbk9mZnNldCgpIGNvbnN0Cit7CisgICAgaWYg
KCFzdHlsZSgpLT5ib3hSZWZsZWN0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChzdHls
ZSgpLT5ib3hSZWZsZWN0KCktPmRpcmVjdGlvbigpID09IFJlZmxlY3Rpb25MZWZ0IHx8IHN0eWxl
KCktPmJveFJlZmxlY3QoKS0+ZGlyZWN0aW9uKCkgPT0gUmVmbGVjdGlvblJpZ2h0KQorICAgICAg
ICByZXR1cm4gc3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5vZmZzZXQoKS5jYWxjVmFsdWUoYm9yZGVy
Qm94UmVjdCgpLndpZHRoKCkpOworICAgIHJldHVybiBzdHlsZSgpLT5ib3hSZWZsZWN0KCktPm9m
ZnNldCgpLmNhbGNWYWx1ZShib3JkZXJCb3hSZWN0KCkuaGVpZ2h0KCkpOworfQorCitJbnRSZWN0
IFJlbmRlckJveDo6cmVmbGVjdGVkUmVjdChjb25zdCBJbnRSZWN0JiByKSBjb25zdAoreworICAg
IGlmICghc3R5bGUoKS0+Ym94UmVmbGVjdCgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOwor
CisgICAgSW50UmVjdCBib3ggPSBib3JkZXJCb3hSZWN0KCk7CisgICAgSW50UmVjdCByZXN1bHQg
PSByOworICAgIHN3aXRjaCAoc3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5kaXJlY3Rpb24oKSkgewor
ICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxvdzoKKyAgICAgICAgICAgIHJlc3VsdC5zZXRZKGJv
eC5ib3R0b20oKSArIHJlZmxlY3Rpb25PZmZzZXQoKSArIChib3guYm90dG9tKCkgLSByLmJvdHRv
bSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWZsZWN0aW9uQWJvdmU6
CisgICAgICAgICAgICByZXN1bHQuc2V0WShib3gueSgpIC0gcmVmbGVjdGlvbk9mZnNldCgpIC0g
Ym94LmhlaWdodCgpICsgKGJveC5ib3R0b20oKSAtIHIuYm90dG9tKCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFJlZmxlY3Rpb25MZWZ0OgorICAgICAgICAgICAgcmVzdWx0
LnNldFgoYm94LngoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSAtIGJveC53aWR0aCgpICsgKGJveC5y
aWdodCgpIC0gci5yaWdodCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBS
ZWZsZWN0aW9uUmlnaHQ6CisgICAgICAgICAgICByZXN1bHQuc2V0WChib3gucmlnaHQoKSArIHJl
ZmxlY3Rpb25PZmZzZXQoKSArIChib3gucmlnaHQoKSAtIHIucmlnaHQoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIGludCBSZW5kZXJCb3g6
Om1pblByZWZXaWR0aCgpIGNvbnN0CiB7CiAgICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgpKQpAQCAt
MjU0LDIyICs1MTAsMTIgQEAgdm9pZCBSZW5kZXJCb3g6OnNldE92ZXJyaWRlU2l6ZShpbnQgcykK
IAogaW50IFJlbmRlckJveDo6b3ZlcnJpZGVXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhh
c092ZXJyaWRlU2l6ZSgpID8gb3ZlcnJpZGVTaXplKCkgOiBtX3dpZHRoOworICAgIHJldHVybiBo
YXNPdmVycmlkZVNpemUoKSA/IG92ZXJyaWRlU2l6ZSgpIDogd2lkdGgoKTsKIH0KIAogaW50IFJl
bmRlckJveDo6b3ZlcnJpZGVIZWlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVycmlk
ZVNpemUoKSA/IG92ZXJyaWRlU2l6ZSgpIDogbV9oZWlnaHQ7Ci19Ci0KLXZvaWQgUmVuZGVyQm94
OjpzZXRQb3MoaW50IHhQb3MsIGludCB5UG9zKQotewotICAgIC8vIE9wdGltaXplIGZvciB0aGUg
Y2FzZSB3aGVyZSB3ZSBkb24ndCBtb3ZlIGF0IGFsbC4KLSAgICBpZiAoeFBvcyA9PSBtX3ggJiYg
eVBvcyA9PSBtX3kpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1feCA9IHhQb3M7Ci0gICAgbV95
ID0geVBvczsKKyAgICByZXR1cm4gaGFzT3ZlcnJpZGVTaXplKCkgPyBvdmVycmlkZVNpemUoKSA6
IGhlaWdodCgpOwogfQogCiBpbnQgUmVuZGVyQm94OjpjYWxjQm9yZGVyQm94V2lkdGgoaW50IHdp
ZHRoKSBjb25zdApAQCAtMzAzLDEwICs1NDksMTAgQEAgaW50IFJlbmRlckJveDo6Y2FsY0NvbnRl
bnRCb3hIZWlnaHQoaW50IAogfQogCiAvLyBIaXQgVGVzdGluZwotYm9vbCBSZW5kZXJCb3g6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQorYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4UG9zLCBpbnQgeVBvcywgaW50IHR4LCBp
bnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewotICAgIHR4ICs9IG1feDsKLSAgICB0eSAr
PSBtX3k7CisgICAgdHggKz0geCgpOworICAgIHR5ICs9IG1fZnJhbWVSZWN0LnkoKTsKIAogICAg
IC8vIENoZWNrIGtpZHMgZmlyc3QuCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewpAQCAt
MzE0LDE2ICs1NjAsMTYgQEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
cwogICAgICAgICAvLyBhdCB0aGUgbW9tZW50IChhIGRlbW90ZWQgaW5saW5lIDxmb3JtPiBmb3Ig
ZXhhbXBsZSkuIElmIHdlIGV2ZXIgaW1wbGVtZW50IGEKICAgICAgICAgLy8gdGFibGUtc3BlY2lm
aWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQgZG8gZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMgYW55d2F5KSwKICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2su
Ci0gICAgICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgIWNoaWxkLT5pc0lubGluZUZsb3co
KSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGFj
dGlvbikpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2lu
dCh4IC0gdHgsIHkgLSB0eSkpOworICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmICFj
aGlsZC0+aXNJbmxpbmVGbG93KCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3Vs
dCwgeFBvcywgeVBvcywgdHgsIHR5LCBhY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgb3Vy
IGJvdW5kcyBuZXh0LiBGb3IgdGhpcyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4g
b25seSBiZSBoaXQgaW4gdGhlCiAgICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1
ZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlrZSBpbWFnZXMpLgotICAgIGlmICh2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5kICYmIEludFJlY3QodHgs
IHR5LCBtX3dpZHRoLCBtX2hlaWdodCkuY29udGFpbnMoeCwgeSkpIHsKLSAgICAgICAgdXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CisgICAgaWYg
KHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYg
SW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKS5jb250YWlucyh4UG9zLCB5UG9zKSkg
eworICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4
LCB5UG9zIC0gdHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zMzQsOCAr
NTgwLDggQEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlcwogCiB2b2lk
IFJlbmRlckJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQog
ewotICAgIHR4ICs9IG1feDsKLSAgICB0eSArPSBtX3k7CisgICAgdHggKz0geCgpOworICAgIHR5
ICs9IG1fZnJhbWVSZWN0LnkoKTsKIAogICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uIEp1
c3QgcGFzcyBwYWludCB0aHJvdWdoIHRvIHRoZSBjaGlsZHJlbgogICAgIFBhaW50SW5mbyBjaGls
ZEluZm8ocGFpbnRJbmZvKTsKQEAgLTQ4OSw3ICs3MzUsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFp
bnRNYXNrSW1hZ2VzKGNvbnN0IFBhCiAKIEludFJlY3QgUmVuZGVyQm94OjptYXNrQ2xpcFJlY3Qo
KQogewotICAgIEludFJlY3QgYmJveCA9IGJvcmRlckJveCgpOworICAgIEludFJlY3QgYmJveCA9
IGJvcmRlckJveFJlY3QoKTsKICAgICBpZiAoc3R5bGUoKS0+bWFza0JveEltYWdlKCkuaW1hZ2Uo
KSkKICAgICAgICAgcmV0dXJuIGJib3g7CiAgICAgCkBAIC02MDYsNyArODUyLDcgQEAgYm9vbCBS
ZW5kZXJCb3g6OnJlcGFpbnRMYXllclJlY3RzRm9ySW1hZwogICAgICAgICAgICAgICAgICAgICAg
ICAgbWF4KGxheWVyUmVuZGVyZXItPmhlaWdodCgpICsgbGF5ZXJSZW5kZXJlci0+bWFyZ2luVG9w
KCkgKyBsYXllclJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSArIGxheWVyUmVuZGVyZXItPmJvcmRl
clRvcCgpICsgbGF5ZXJSZW5kZXJlci0+Ym9yZGVyQm90dG9tKCksIHJoKSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZW5kZXJlciA9IHRoaXM7
Ci0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyUmVjdCA9IGJvcmRlckJveCgpOworICAgICAg
ICAgICAgICAgICAgICByZW5kZXJlclJlY3QgPSBib3JkZXJCb3hSZWN0KCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC04ODcsMTAgKzExMzMsMTAgQEAgdm9pZCBSZW5k
ZXJCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGludAogICAgIFJvb3RJbmxpbmVCb3gqIHIgPSBi
b3hXcmFwID8gYm94V3JhcC0+cm9vdCgpIDogMDsKICAgICBpZiAocikgewogICAgICAgICBGbG9h
dFJlY3Qgcm9vdFJlY3QodHggKyByLT54UG9zKCksIHR5ICsgci0+c2VsZWN0aW9uVG9wKCksIHIt
PndpZHRoKCksIHItPnNlbGVjdGlvbkhlaWdodCgpKTsKLSAgICAgICAgRmxvYXRSZWN0IGltYWdl
UmVjdCh0eCArIG1feCwgcm9vdFJlY3QueSgpLCB3aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSk7
CisgICAgICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QodHggKyB4KCksIHJvb3RSZWN0LnkoKSwgd2lk
dGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KG5vZGUoKSwgdHlwZSwgaW1hZ2VSZWN0LCByb290UmVj
dCwgYmVoaW5kVGV4dCwgZmFsc2UpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEZsb2F0UmVjdCBp
bWFnZVJlY3QodHggKyBtX3gsIHR5ICsgbV95LCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAg
IEZsb2F0UmVjdCBpbWFnZVJlY3QodHggKyB4KCksIHR5ICsgbV9mcmFtZVJlY3QueSgpLCB3aWR0
aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRD
dXN0b21IaWdobGlnaHQobm9kZSgpLCB0eXBlLCBpbWFnZVJlY3QsIGltYWdlUmVjdCwgYmVoaW5k
VGV4dCwgZmFsc2UpOwogICAgIH0KIH0KQEAgLTkwNyw4ICsxMTUzLDggQEAgSW50UmVjdCBSZW5k
ZXJCb3g6OmdldE92ZXJmbG93Q2xpcFJlY3QoaQogCiAgICAgaW50IGNsaXBYID0gdHggKyBiTGVm
dDsKICAgICBpbnQgY2xpcFkgPSB0eSArIGJUb3A7Ci0gICAgaW50IGNsaXBXaWR0aCA9IG1fd2lk
dGggLSBiTGVmdCAtIGJvcmRlclJpZ2h0KCk7Ci0gICAgaW50IGNsaXBIZWlnaHQgPSBtX2hlaWdo
dCAtIGJUb3AgLSBib3JkZXJCb3R0b20oKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0
b21FeHRyYSgpOworICAgIGludCBjbGlwV2lkdGggPSB3aWR0aCgpIC0gYkxlZnQgLSBib3JkZXJS
aWdodCgpOworICAgIGludCBjbGlwSGVpZ2h0ID0gaGVpZ2h0KCkgLSBiVG9wIC0gYm9yZGVyQm90
dG9tKCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKIAogICAgIC8v
IFN1YnRyYWN0IG91dCBzY3JvbGxiYXJzIGlmIHdlIGhhdmUgdGhlbS4KICAgICBpZiAobV9sYXll
cikgewpAQCAtOTIzLDI2ICsxMTY5LDI2IEBAIEludFJlY3QgUmVuZGVyQm94OjpnZXRDbGlwUmVj
dChpbnQgdHgsIGkKIHsKICAgICBpbnQgY2xpcFggPSB0eDsKICAgICBpbnQgY2xpcFkgPSB0eTsK
LSAgICBpbnQgY2xpcFdpZHRoID0gbV93aWR0aDsKLSAgICBpbnQgY2xpcEhlaWdodCA9IG1faGVp
Z2h0OworICAgIGludCBjbGlwV2lkdGggPSB3aWR0aCgpOworICAgIGludCBjbGlwSGVpZ2h0ID0g
aGVpZ2h0KCk7CiAKICAgICBpZiAoIXN0eWxlKCktPmNsaXBMZWZ0KCkuaXNBdXRvKCkpIHsKLSAg
ICAgICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwTGVmdCgpLmNhbGNWYWx1ZShtX3dpZHRoKTsKKyAg
ICAgICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwTGVmdCgpLmNhbGNWYWx1ZSh3aWR0aCgpKTsKICAg
ICAgICAgY2xpcFggKz0gYzsKICAgICAgICAgY2xpcFdpZHRoIC09IGM7CiAgICAgfQogCiAgICAg
aWYgKCFzdHlsZSgpLT5jbGlwUmlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgY2xpcFdpZHRoIC09
IG1fd2lkdGggLSBzdHlsZSgpLT5jbGlwUmlnaHQoKS5jYWxjVmFsdWUobV93aWR0aCk7CisgICAg
ICAgIGNsaXBXaWR0aCAtPSB3aWR0aCgpIC0gc3R5bGUoKS0+Y2xpcFJpZ2h0KCkuY2FsY1ZhbHVl
KHdpZHRoKCkpOwogCiAgICAgaWYgKCFzdHlsZSgpLT5jbGlwVG9wKCkuaXNBdXRvKCkpIHsKLSAg
ICAgICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwVG9wKCkuY2FsY1ZhbHVlKG1faGVpZ2h0KTsKKyAg
ICAgICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwVG9wKCkuY2FsY1ZhbHVlKGhlaWdodCgpKTsKICAg
ICAgICAgY2xpcFkgKz0gYzsKICAgICAgICAgY2xpcEhlaWdodCAtPSBjOwogICAgIH0KIAogICAg
IGlmICghc3R5bGUoKS0+Y2xpcEJvdHRvbSgpLmlzQXV0bygpKQotICAgICAgICBjbGlwSGVpZ2h0
IC09IG1faGVpZ2h0IC0gc3R5bGUoKS0+Y2xpcEJvdHRvbSgpLmNhbGNWYWx1ZShtX2hlaWdodCk7
CisgICAgICAgIGNsaXBIZWlnaHQgLT0gaGVpZ2h0KCkgLSBzdHlsZSgpLT5jbGlwQm90dG9tKCku
Y2FsY1ZhbHVlKGhlaWdodCgpKTsKIAogICAgIHJldHVybiBJbnRSZWN0KGNsaXBYLCBjbGlwWSwg
Y2xpcFdpZHRoLCBjbGlwSGVpZ2h0KTsKIH0KQEAgLTk1Myw3ICsxMTk5LDcgQEAgaW50IFJlbmRl
ckJveDo6Y29udGFpbmluZ0Jsb2NrV2lkdGgoKSBjbwogICAgIGlmICghY2IpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIGlmIChzaHJpbmtUb0F2b2lkRmxvYXRzKCkpCi0gICAgICAgIHJldHVybiBj
Yi0+bGluZVdpZHRoKG1feSk7CisgICAgICAgIHJldHVybiBjYi0+bGluZVdpZHRoKG1fZnJhbWVS
ZWN0LnkoKSk7CiAgICAgcmV0dXJuIGNiLT5hdmFpbGFibGVXaWR0aCgpOwogfQogCkBAIC0xMDAw
LDcgKzEyNDYsNyBAQCBGbG9hdFBvaW50IFJlbmRlckJveDo6bG9jYWxUb0Fic29sdXRlKEZsCiAg
ICAgICAgIGlmICh2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSkgewogICAgICAgICAgICAgTGF5b3V0
U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKTsKICAgICAgICAgICAgIEludFNp
emUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fb2Zmc2V0OwotICAgICAgICAgICAgb2Zmc2V0LmV4
cGFuZChtX3gsIG1feSk7CisgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHgoKSwgbV9mcmFtZVJl
Y3QueSgpKTsKICAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gb2Zmc2V0OwogICAgICAgICAgICAg
aWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBtX2xheWVyKQog
ICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gbV9sYXllci0+cmVsYXRpdmVQb3NpdGlvbk9m
ZnNldCgpOwpAQCAtMTA5MywxMSArMTMzOSwxMSBAQCBJbnRTaXplIFJlbmRlckJveDo6b2Zmc2V0
RnJvbUNvbnRhaW5lcihSCiAgICAgICAgIFJlbmRlckJsb2NrKiBjYjsKICAgICAgICAgaWYgKG8t
PmlzQmxvY2tGbG93KCkgJiYgc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBBYnNvbHV0ZVBvc2l0aW9u
ICYmIHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbgogICAgICAgICAgICAgICAg
ICYmIChjYiA9IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4obykpLT5oYXNDb2x1bW5zKCkpIHsK
LSAgICAgICAgICAgIEludFJlY3QgcmVjdChtX3gsIG1feSwgMSwgMSk7CisgICAgICAgICAgICBJ
bnRSZWN0IHJlY3QoeCgpLCBtX2ZyYW1lUmVjdC55KCksIDEsIDEpOwogICAgICAgICAgICAgY2It
PmFkanVzdFJlY3RGb3JDb2x1bW5zKHJlY3QpOwogICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZChy
ZWN0LngoKSwgcmVjdC55KCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9mZnNldC5l
eHBhbmQobV94LCBtX3kpOworICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZCh4KCksIG1fZnJhbWVS
ZWN0LnkoKSk7CiAgICAgfQogCiAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQpAQCAtMTE0
NCw4ICsxMzkwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBvc2l0aW9uKElubGluZUJveCogYm94KQog
ICAgICAgICBib3gtPnJlbW92ZSgpOwogICAgICAgICBib3gtPmRlc3Ryb3kocmVuZGVyQXJlbmEo
KSk7CiAgICAgfSBlbHNlIGlmIChpc1JlcGxhY2VkKCkpIHsKLSAgICAgICAgbV94ID0gYm94LT54
UG9zKCk7Ci0gICAgICAgIG1feSA9IGJveC0+eVBvcygpOworICAgICAgICBzZXRMb2NhdGlvbihi
b3gtPnhQb3MoKSwgYm94LT55UG9zKCkpOwogICAgICAgICBtX2lubGluZUJveFdyYXBwZXIgPSBi
b3g7CiAgICAgfQogfQpAQCAtMTE5NSw3ICsxNDQwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1
dGVBYnNvbHV0ZVJlcGFpbnRSZQogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkg
PT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBtX2xheWVyKQogICAgICAgICAgICAgICAgIHJlY3QubW92
ZShtX2xheWVyLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkpOwogCi0gICAgICAgICAgICByZWN0
Lm1vdmUobV94LCBtX3kpOworICAgICAgICAgICAgcmVjdC5tb3ZlKHgoKSwgbV9mcmFtZVJlY3Qu
eSgpKTsKICAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRTdGF0ZS0+bV9vZmZzZXQpOwogICAg
ICAgICAgICAgaWYgKGxheW91dFN0YXRlLT5tX2NsaXBwZWQpCiAgICAgICAgICAgICAgICAgcmVj
dC5pbnRlcnNlY3QobGF5b3V0U3RhdGUtPm1fY2xpcFJlY3QpOwpAQCAtMTIxMSw3ICsxNDU2LDcg
QEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZQogICAgICAgICByZXR1
cm47CiAKICAgICBJbnRQb2ludCB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOwotICAgIHRvcExl
ZnQubW92ZShtX3gsIG1feSk7CisgICAgdG9wTGVmdC5tb3ZlKHgoKSwgbV9mcmFtZVJlY3QueSgp
KTsKIAogICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pCiAgICAg
ICAgIGZpeGVkID0gdHJ1ZTsKQEAgLTEyMzMsNyArMTQ3OCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpj
b21wdXRlQWJzb2x1dGVSZXBhaW50UmUKICAgICAgICAgcmVjdCA9IG1fbGF5ZXItPnRyYW5zZm9y
bSgpLT5tYXBSZWN0KHJlY3QpOwogICAgICAgICAvLyBGSVhNRTogdGhpcyBjbG9iYmVycyB0b3BM
ZWZ0IGFkanVzdG1lbnQgZG9uZSBmb3IgbXVsdGljb2wgYWJvdmUKICAgICAgICAgdG9wTGVmdCA9
IHJlY3QubG9jYXRpb24oKTsKLSAgICAgICAgdG9wTGVmdC5tb3ZlKG1feCwgbV95KTsKKyAgICAg
ICAgdG9wTGVmdC5tb3ZlKHgoKSwgbV9mcmFtZVJlY3QueSgpKTsKICAgICB9CiAKICAgICBpZiAo
c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uKQpAQCAtMTI2NywyNCArMTUx
MiwxNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlCiAKIHZvaWQg
UmVuZGVyQm94OjpyZXBhaW50RHVyaW5nTGF5b3V0SWZNb3ZlZChjb25zdCBJbnRSZWN0JiByZWN0
KQogewotICAgIGludCBuZXdYID0gbV94OwotICAgIGludCBuZXdZID0gbV95OwotICAgIGludCBu
ZXdXaWR0aCA9IG1fd2lkdGg7Ci0gICAgaW50IG5ld0hlaWdodCA9IG1faGVpZ2h0OworICAgIGlu
dCBuZXdYID0geCgpOworICAgIGludCBuZXdZID0gbV9mcmFtZVJlY3QueSgpOworICAgIGludCBu
ZXdXaWR0aCA9IHdpZHRoKCk7CisgICAgaW50IG5ld0hlaWdodCA9IGhlaWdodCgpOwogICAgIGlm
IChyZWN0LngoKSAhPSBuZXdYIHx8IHJlY3QueSgpICE9IG5ld1kpIHsKICAgICAgICAgLy8gVGhl
IGNoaWxkIG1vdmVkLiAgSW52YWxpZGF0ZSB0aGUgb2JqZWN0J3Mgb2xkIGFuZCBuZXcgcG9zaXRp
b25zLiAgV2UgaGF2ZSB0byBkbyB0aGlzCiAgICAgICAgIC8vIHNpbmNlIHRoZSBvYmplY3QgbWF5
IG5vdCBoYXZlIGdvdHRlbiBhIGxheW91dC4KLSAgICAgICAgbV94ID0gcmVjdC54KCk7Ci0gICAg
ICAgIG1feSA9IHJlY3QueSgpOwotICAgICAgICBtX3dpZHRoID0gcmVjdC53aWR0aCgpOwotICAg
ICAgICBtX2hlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgICAgIG1fZnJhbWVSZWN0ID0gcmVj
dDsKICAgICAgICAgcmVwYWludCgpOwogICAgICAgICByZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMo
dHJ1ZSk7Ci0KLSAgICAgICAgbV94ID0gbmV3WDsKLSAgICAgICAgbV95ID0gbmV3WTsKLSAgICAg
ICAgbV93aWR0aCA9IG5ld1dpZHRoOwotICAgICAgICBtX2hlaWdodCA9IG5ld0hlaWdodDsKKyAg
ICAgICAgbV9mcmFtZVJlY3QgPSBJbnRSZWN0KG5ld1gsIG5ld1ksIG5ld1dpZHRoLCBuZXdIZWln
aHQpOwogICAgICAgICByZXBhaW50KCk7CiAgICAgICAgIHJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0
cyh0cnVlKTsKICAgICB9CkBAIC0xMzI5LDcgKzE1NjcsNyBAQCB2b2lkIFJlbmRlckJveDo6Y2Fs
Y1dpZHRoKCkKICAgICAvLyB3aWR0aC4gIFVzZSB0aGUgd2lkdGggZnJvbSB0aGUgc3R5bGUgY29u
dGV4dC4KICAgICBpZiAoaGFzT3ZlcnJpZGVTaXplKCkgJiYgIHBhcmVudCgpLT5zdHlsZSgpLT5i
b3hPcmllbnQoKSA9PSBIT1JJWk9OVEFMCiAgICAgICAgICAgICAmJiBwYXJlbnQoKS0+aXNGbGV4
aWJsZUJveCgpICYmIHBhcmVudCgpLT5pc0ZsZXhpbmdDaGlsZHJlbigpKSB7Ci0gICAgICAgIG1f
d2lkdGggPSBvdmVycmlkZVNpemUoKTsKKyAgICAgICAgc2V0V2lkdGgob3ZlcnJpZGVTaXplKCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzM3LDcgKzE1NzUsNyBAQCB2b2lkIFJl
bmRlckJveDo6Y2FsY1dpZHRoKCkKICAgICBib29sIHN0cmV0Y2hpbmcgPSAocGFyZW50KCktPnN0
eWxlKCktPmJveEFsaWduKCkgPT0gQlNUUkVUQ0gpOwogICAgIGJvb2wgdHJlYXRBc1JlcGxhY2Vk
ID0gc2hvdWxkQ2FsY3VsYXRlU2l6ZUFzUmVwbGFjZWQoKSAmJiAoIWluVmVydGljYWxCb3ggfHwg
IXN0cmV0Y2hpbmcpOwogCi0gICAgTGVuZ3RoIHdpZHRoID0gKHRyZWF0QXNSZXBsYWNlZCkgPyBM
ZW5ndGgoY2FsY1JlcGxhY2VkV2lkdGgoKSwgRml4ZWQpIDogc3R5bGUoKS0+d2lkdGgoKTsKKyAg
ICBMZW5ndGggdyA9ICh0cmVhdEFzUmVwbGFjZWQpID8gTGVuZ3RoKGNhbGNSZXBsYWNlZFdpZHRo
KCksIEZpeGVkKSA6IHN0eWxlKCktPndpZHRoKCk7CiAKICAgICBSZW5kZXJCbG9jayogY2IgPSBj
b250YWluaW5nQmxvY2soKTsKICAgICBpbnQgY29udGFpbmVyV2lkdGggPSBtYXgoMCwgY29udGFp
bmluZ0Jsb2NrV2lkdGgoKSk7CkBAIC0xMzUwLDQyICsxNTg4LDQyIEBAIHZvaWQgUmVuZGVyQm94
OjpjYWxjV2lkdGgoKQogICAgICAgICBtX21hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNhbGNNaW5W
YWx1ZShjb250YWluZXJXaWR0aCk7CiAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJnaW5SaWdo
dC5jYWxjTWluVmFsdWUoY29udGFpbmVyV2lkdGgpOwogICAgICAgICBpZiAodHJlYXRBc1JlcGxh
Y2VkKQotICAgICAgICAgICAgbV93aWR0aCA9IG1heCh3aWR0aC52YWx1ZSgpICsgYm9yZGVyTGVm
dCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSwgbWlu
UHJlZldpZHRoKCkpOworICAgICAgICAgICAgc2V0V2lkdGgobWF4KHcudmFsdWUoKSArIGJvcmRl
ckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCks
IG1pblByZWZXaWR0aCgpKSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFdp
ZHRoIGNhbGN1bGF0aW9ucwogICAgIGlmICh0cmVhdEFzUmVwbGFjZWQpCi0gICAgICAgIG1fd2lk
dGggPSB3aWR0aC52YWx1ZSgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRp
bmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKTsKKyAgICAgICAgc2V0V2lkdGgody52YWx1ZSgpICsg
Ym9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmln
aHQoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIENhbGN1bGF0ZSBXaWR0aAotICAgICAgICBt
X3dpZHRoID0gY2FsY1dpZHRoVXNpbmcoV2lkdGgsIGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAg
c2V0V2lkdGgoY2FsY1dpZHRoVXNpbmcoV2lkdGgsIGNvbnRhaW5lcldpZHRoKSk7CiAKICAgICAg
ICAgLy8gQ2FsY3VsYXRlIE1heFdpZHRoCiAgICAgICAgIGlmICghc3R5bGUoKS0+bWF4V2lkdGgo
KS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBpbnQgbWF4VyA9IGNhbGNXaWR0aFVzaW5n
KE1heFdpZHRoLCBjb250YWluZXJXaWR0aCk7Ci0gICAgICAgICAgICBpZiAobV93aWR0aCA+IG1h
eFcpIHsKLSAgICAgICAgICAgICAgICBtX3dpZHRoID0gbWF4VzsKLSAgICAgICAgICAgICAgICB3
aWR0aCA9IHN0eWxlKCktPm1heFdpZHRoKCk7CisgICAgICAgICAgICBpZiAod2lkdGgoKSA+IG1h
eFcpIHsKKyAgICAgICAgICAgICAgICBzZXRXaWR0aChtYXhXKTsKKyAgICAgICAgICAgICAgICB3
ID0gc3R5bGUoKS0+bWF4V2lkdGgoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAg
ICAgIC8vIENhbGN1bGF0ZSBNaW5XaWR0aAogICAgICAgICBpbnQgbWluVyA9IGNhbGNXaWR0aFVz
aW5nKE1pbldpZHRoLCBjb250YWluZXJXaWR0aCk7Ci0gICAgICAgIGlmIChtX3dpZHRoIDwgbWlu
VykgewotICAgICAgICAgICAgbV93aWR0aCA9IG1pblc7Ci0gICAgICAgICAgICB3aWR0aCA9IHN0
eWxlKCktPm1pbldpZHRoKCk7CisgICAgICAgIGlmICh3aWR0aCgpIDwgbWluVykgeworICAgICAg
ICAgICAgc2V0V2lkdGgobWluVyk7CisgICAgICAgICAgICB3ID0gc3R5bGUoKS0+bWluV2lkdGgo
KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChzdHJldGNoZXNUb01pbkludHJpbnNpY1dp
ZHRoKCkpIHsKLSAgICAgICAgbV93aWR0aCA9IG1heChtX3dpZHRoLCBtaW5QcmVmV2lkdGgoKSk7
Ci0gICAgICAgIHdpZHRoID0gTGVuZ3RoKG1fd2lkdGgsIEZpeGVkKTsKKyAgICAgICAgc2V0V2lk
dGgobWF4KHdpZHRoKCksIG1pblByZWZXaWR0aCgpKSk7CisgICAgICAgIHcgPSBMZW5ndGgod2lk
dGgoKSwgRml4ZWQpOwogICAgIH0KIAogICAgIC8vIE1hcmdpbiBjYWxjdWxhdGlvbnMKLSAgICBp
ZiAod2lkdGguaXNBdXRvKCkpIHsKKyAgICBpZiAody5pc0F1dG8oKSkgewogICAgICAgICBtX21h
cmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNhbGNNaW5WYWx1ZShjb250YWluZXJXaWR0aCk7CiAgICAg
ICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJnaW5SaWdodC5jYWxjTWluVmFsdWUoY29udGFpbmVyV2lk
dGgpOwogICAgIH0gZWxzZSB7CkBAIC0xMzk0LDE4ICsxNjMyLDE4IEBAIHZvaWQgUmVuZGVyQm94
OjpjYWxjV2lkdGgoKQogICAgICAgICBjYWxjSG9yaXpvbnRhbE1hcmdpbnMobWFyZ2luTGVmdCwg
bWFyZ2luUmlnaHQsIGNvbnRhaW5lcldpZHRoKTsKICAgICB9CiAKLSAgICBpZiAoY29udGFpbmVy
V2lkdGggJiYgY29udGFpbmVyV2lkdGggIT0gKG1fd2lkdGggKyBtX21hcmdpbkxlZnQgKyBtX21h
cmdpblJpZ2h0KQorICAgIGlmIChjb250YWluZXJXaWR0aCAmJiBjb250YWluZXJXaWR0aCAhPSAo
d2lkdGgoKSArIG1fbWFyZ2luTGVmdCArIG1fbWFyZ2luUmlnaHQpCiAgICAgICAgICAgICAmJiAh
aXNGbG9hdGluZygpICYmICFpc0lubGluZSgpICYmICFjYi0+aXNGbGV4aWJsZUJveCgpKSB7CiAg
ICAgICAgIGlmIChjYi0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAg
bV9tYXJnaW5SaWdodCA9IGNvbnRhaW5lcldpZHRoIC0gbV93aWR0aCAtIG1fbWFyZ2luTGVmdDsK
KyAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjb250YWluZXJXaWR0aCAtIHdpZHRoKCkgLSBt
X21hcmdpbkxlZnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IGNv
bnRhaW5lcldpZHRoIC0gbV93aWR0aCAtIG1fbWFyZ2luUmlnaHQ7CisgICAgICAgICAgICBtX21h
cmdpbkxlZnQgPSBjb250YWluZXJXaWR0aCAtIHdpZHRoKCkgLSBtX21hcmdpblJpZ2h0OwogICAg
IH0KIH0KIAogaW50IFJlbmRlckJveDo6Y2FsY1dpZHRoVXNpbmcoV2lkdGhUeXBlIHdpZHRoVHlw
ZSwgaW50IGN3KQogewotICAgIGludCB3aWR0aCA9IG1fd2lkdGg7CisgICAgaW50IHdpZHRoUmVz
dWx0ID0gd2lkdGgoKTsKICAgICBMZW5ndGggdzsKICAgICBpZiAod2lkdGhUeXBlID09IFdpZHRo
KQogICAgICAgICB3ID0gc3R5bGUoKS0+d2lkdGgoKTsKQEAgLTE0MTgsMTYgKzE2NTYsMTYgQEAg
aW50IFJlbmRlckJveDo6Y2FsY1dpZHRoVXNpbmcoV2lkdGhUeXBlIAogICAgICAgICBpbnQgbWFy
Z2luTGVmdCA9IHN0eWxlKCktPm1hcmdpbkxlZnQoKS5jYWxjTWluVmFsdWUoY3cpOwogICAgICAg
ICBpbnQgbWFyZ2luUmlnaHQgPSBzdHlsZSgpLT5tYXJnaW5SaWdodCgpLmNhbGNNaW5WYWx1ZShj
dyk7CiAgICAgICAgIGlmIChjdykKLSAgICAgICAgICAgIHdpZHRoID0gY3cgLSBtYXJnaW5MZWZ0
IC0gbWFyZ2luUmlnaHQ7CisgICAgICAgICAgICB3aWR0aFJlc3VsdCA9IGN3IC0gbWFyZ2luTGVm
dCAtIG1hcmdpblJpZ2h0OwogCiAgICAgICAgIGlmIChzaXplc1RvSW50cmluc2ljV2lkdGgod2lk
dGhUeXBlKSkgewotICAgICAgICAgICAgd2lkdGggPSBtYXgod2lkdGgsIG1pblByZWZXaWR0aCgp
KTsKLSAgICAgICAgICAgIHdpZHRoID0gbWluKHdpZHRoLCBtYXhQcmVmV2lkdGgoKSk7CisgICAg
ICAgICAgICB3aWR0aFJlc3VsdCA9IG1heCh3aWR0aFJlc3VsdCwgbWluUHJlZldpZHRoKCkpOwor
ICAgICAgICAgICAgd2lkdGhSZXN1bHQgPSBtaW4od2lkdGhSZXN1bHQsIG1heFByZWZXaWR0aCgp
KTsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICB3aWR0aCA9IGNhbGNCb3JkZXJCb3hX
aWR0aCh3LmNhbGNWYWx1ZShjdykpOworICAgICAgICB3aWR0aFJlc3VsdCA9IGNhbGNCb3JkZXJC
b3hXaWR0aCh3LmNhbGNWYWx1ZShjdykpOwogCi0gICAgcmV0dXJuIHdpZHRoOworICAgIHJldHVy
biB3aWR0aFJlc3VsdDsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OnNpemVzVG9JbnRyaW5zaWNXaWR0
aChXaWR0aFR5cGUgd2lkdGhUeXBlKSBjb25zdApAQCAtMTQ3MCwyMCArMTcwOCwyMCBAQCB2b2lk
IFJlbmRlckJveDo6Y2FsY0hvcml6b250YWxNYXJnaW5zKGNvCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoKG1hcmdpbkxlZnQuaXNBdXRvKCkgJiYgbWFyZ2luUmlnaHQuaXNBdXRv
KCkgJiYgbV93aWR0aCA8IGNvbnRhaW5lcldpZHRoKQorICAgIGlmICgobWFyZ2luTGVmdC5pc0F1
dG8oKSAmJiBtYXJnaW5SaWdodC5pc0F1dG8oKSAmJiB3aWR0aCgpIDwgY29udGFpbmVyV2lkdGgp
CiAgICAgICAgICAgICB8fCAoIW1hcmdpbkxlZnQuaXNBdXRvKCkgJiYgIW1hcmdpblJpZ2h0Lmlz
QXV0bygpICYmIGNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBXRUJL
SVRfQ0VOVEVSKSkgewotICAgICAgICBtX21hcmdpbkxlZnQgPSBtYXgoMCwgKGNvbnRhaW5lcldp
ZHRoIC0gbV93aWR0aCkgLyAyKTsKLSAgICAgICAgbV9tYXJnaW5SaWdodCA9IGNvbnRhaW5lcldp
ZHRoIC0gbV93aWR0aCAtIG1fbWFyZ2luTGVmdDsKLSAgICB9IGVsc2UgaWYgKChtYXJnaW5SaWdo
dC5pc0F1dG8oKSAmJiBtX3dpZHRoIDwgY29udGFpbmVyV2lkdGgpCisgICAgICAgIG1fbWFyZ2lu
TGVmdCA9IG1heCgwLCAoY29udGFpbmVyV2lkdGggLSB3aWR0aCgpKSAvIDIpOworICAgICAgICBt
X21hcmdpblJpZ2h0ID0gY29udGFpbmVyV2lkdGggLSB3aWR0aCgpIC0gbV9tYXJnaW5MZWZ0Owor
ICAgIH0gZWxzZSBpZiAoKG1hcmdpblJpZ2h0LmlzQXV0bygpICYmIHdpZHRoKCkgPCBjb250YWlu
ZXJXaWR0aCkKICAgICAgICAgICAgIHx8ICghbWFyZ2luTGVmdC5pc0F1dG8oKSAmJiBjb250YWlu
aW5nQmxvY2soKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMICYmIGNvbnRhaW5pbmdCbG9j
aygpLT5zdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfTEVGVCkpIHsKICAgICAgICAgbV9t
YXJnaW5MZWZ0ID0gbWFyZ2luTGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOwotICAgICAg
ICBtX21hcmdpblJpZ2h0ID0gY29udGFpbmVyV2lkdGggLSBtX3dpZHRoIC0gbV9tYXJnaW5MZWZ0
OwotICAgIH0gZWxzZSBpZiAoKG1hcmdpbkxlZnQuaXNBdXRvKCkgJiYgbV93aWR0aCA8IGNvbnRh
aW5lcldpZHRoKQorICAgICAgICBtX21hcmdpblJpZ2h0ID0gY29udGFpbmVyV2lkdGggLSB3aWR0
aCgpIC0gbV9tYXJnaW5MZWZ0OworICAgIH0gZWxzZSBpZiAoKG1hcmdpbkxlZnQuaXNBdXRvKCkg
JiYgd2lkdGgoKSA8IGNvbnRhaW5lcldpZHRoKQogICAgICAgICAgICAgfHwgKCFtYXJnaW5SaWdo
dC5pc0F1dG8oKSAmJiBjb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0g
TFRSICYmIGNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRf
UklHSFQpKSB7CiAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJnaW5SaWdodC5jYWxjVmFsdWUo
Y29udGFpbmVyV2lkdGgpOwotICAgICAgICBtX21hcmdpbkxlZnQgPSBjb250YWluZXJXaWR0aCAt
IG1fd2lkdGggLSBtX21hcmdpblJpZ2h0OworICAgICAgICBtX21hcmdpbkxlZnQgPSBjb250YWlu
ZXJXaWR0aCAtIHdpZHRoKCkgLSBtX21hcmdpblJpZ2h0OwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIFRoaXMgbWFrZXMgYXV0byBtYXJnaW5zIDAgaWYgd2UgZmFpbGVkIGEgbV93aWR0aCA8IGNv
bnRhaW5lcldpZHRoIHRlc3QgYWJvdmUgKGNzczIuMSwgMTAuMy4zKS4KKyAgICAgICAgLy8gVGhp
cyBtYWtlcyBhdXRvIG1hcmdpbnMgMCBpZiB3ZSBmYWlsZWQgYSB3aWR0aCgpIDwgY29udGFpbmVy
V2lkdGggdGVzdCBhYm92ZSAoY3NzMi4xLCAxMC4zLjMpLgogICAgICAgICBtX21hcmdpbkxlZnQg
PSBtYXJnaW5MZWZ0LmNhbGNNaW5WYWx1ZShjb250YWluZXJXaWR0aCk7CiAgICAgICAgIG1fbWFy
Z2luUmlnaHQgPSBtYXJnaW5SaWdodC5jYWxjTWluVmFsdWUoY29udGFpbmVyV2lkdGgpOwogICAg
IH0KQEAgLTE1MjUsMzAgKzE3NjMsMzAgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNIZWlnaHQoKQog
ICAgICAgICAvLyBCbG9jayBjaGlsZHJlbiBvZiBob3Jpem9udGFsIGZsZXhpYmxlIGJveGVzIGZp
bGwgdGhlIGhlaWdodCBvZiB0aGUgYm94LgogICAgICAgICBpZiAoaC5pc0F1dG8oKSAmJiBwYXJl
bnQoKS0+aXNGbGV4aWJsZUJveCgpICYmIHBhcmVudCgpLT5zdHlsZSgpLT5ib3hPcmllbnQoKSA9
PSBIT1JJWk9OVEFMCiAgICAgICAgICAgICAgICAgJiYgcGFyZW50KCktPmlzU3RyZXRjaGluZ0No
aWxkcmVuKCkpIHsKLSAgICAgICAgICAgIGggPSBMZW5ndGgocGFyZW50KCktPmNvbnRlbnRIZWln
aHQoKSAtIG1hcmdpblRvcCgpIC0gbWFyZ2luQm90dG9tKCkgLQorICAgICAgICAgICAgaCA9IExl
bmd0aChwYXJlbnRCb3goKS0+Y29udGVudEhlaWdodCgpIC0gbWFyZ2luVG9wKCkgLSBtYXJnaW5C
b3R0b20oKSAtCiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclRvcCgpIC0gcGFkZGluZ1Rv
cCgpIC0gYm9yZGVyQm90dG9tKCkgLSBwYWRkaW5nQm90dG9tKCksIEZpeGVkKTsKICAgICAgICAg
ICAgIGNoZWNrTWluTWF4SGVpZ2h0ID0gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
aGVpZ2h0OworICAgICAgICBpbnQgaGVpZ2h0UmVzdWx0OwogICAgICAgICBpZiAoY2hlY2tNaW5N
YXhIZWlnaHQpIHsKLSAgICAgICAgICAgIGhlaWdodCA9IGNhbGNIZWlnaHRVc2luZyhzdHlsZSgp
LT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAoaGVpZ2h0ID09IC0xKQotICAgICAgICAgICAg
ICAgIGhlaWdodCA9IG1faGVpZ2h0OworICAgICAgICAgICAgaGVpZ2h0UmVzdWx0ID0gY2FsY0hl
aWdodFVzaW5nKHN0eWxlKCktPmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChoZWlnaHRSZXN1
bHQgPT0gLTEpCisgICAgICAgICAgICAgICAgaGVpZ2h0UmVzdWx0ID0gaGVpZ2h0KCk7CiAgICAg
ICAgICAgICBpbnQgbWluSCA9IGNhbGNIZWlnaHRVc2luZyhzdHlsZSgpLT5taW5IZWlnaHQoKSk7
IC8vIExlYXZlIGFzIC0xIGlmIHVuc2V0LgotICAgICAgICAgICAgaW50IG1heEggPSBzdHlsZSgp
LT5tYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gaGVpZ2h0IDogY2FsY0hlaWdodFVzaW5nKHN0
eWxlKCktPm1heEhlaWdodCgpKTsKKyAgICAgICAgICAgIGludCBtYXhIID0gc3R5bGUoKS0+bWF4
SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IGhlaWdodFJlc3VsdCA6IGNhbGNIZWlnaHRVc2luZyhz
dHlsZSgpLT5tYXhIZWlnaHQoKSk7CiAgICAgICAgICAgICBpZiAobWF4SCA9PSAtMSkKLSAgICAg
ICAgICAgICAgICBtYXhIID0gaGVpZ2h0OwotICAgICAgICAgICAgaGVpZ2h0ID0gbWluKG1heEgs
IGhlaWdodCk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBtYXgobWluSCwgaGVpZ2h0KTsKKyAgICAg
ICAgICAgICAgICBtYXhIID0gaGVpZ2h0UmVzdWx0OworICAgICAgICAgICAgaGVpZ2h0UmVzdWx0
ID0gbWluKG1heEgsIGhlaWdodFJlc3VsdCk7CisgICAgICAgICAgICBoZWlnaHRSZXN1bHQgPSBt
YXgobWluSCwgaGVpZ2h0UmVzdWx0KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAvLyBU
aGUgb25seSB0aW1lcyB3ZSBkb24ndCBjaGVjayBtaW4vbWF4IGhlaWdodCBhcmUgd2hlbiBhIGZp
eGVkIGxlbmd0aCBoYXMKICAgICAgICAgICAgIC8vIGJlZW4gZ2l2ZW4gYXMgYW4gb3ZlcnJpZGUu
ICBKdXN0IHVzZSB0aGF0LiAgVGhlIHZhbHVlIGhhcyBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQKICAg
ICAgICAgICAgIC8vIGZvciBib3gtc2l6aW5nLgotICAgICAgICAgICAgaGVpZ2h0ID0gaC52YWx1
ZSgpICsgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdUb3AoKSArIHBhZGRp
bmdCb3R0b20oKTsKKyAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGgudmFsdWUoKSArIGJvcmRl
clRvcCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCk7
CiAKLSAgICAgICAgbV9oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgfQorICAgICAgICAgICAgc2V0SGVp
Z2h0KGhlaWdodFJlc3VsdCk7CisgICAgICAgIH0KIAogICAgIC8vIFdpbklFIHF1aXJrOiBUaGUg
PGh0bWw+IGJsb2NrIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGNhbnZhcyBpbiBxdWlya3MgbW9k
ZS4gIFRoZSA8Ym9keT4gYWx3YXlzIGZpbGxzIHRoZQogICAgIC8vIDxodG1sPiBibG9jayBpbiBx
dWlya3MgbW9kZS4gIE9ubHkgYXBwbHkgdGhpcyBxdWlyayBpZiB0aGUgYmxvY2sgaXMgbm9ybWFs
IGZsb3cgYW5kIG5vIGhlaWdodApAQCAtMTU1NywxMiArMTc5NSwxMiBAQCB2b2lkIFJlbmRlckJv
eDo6Y2FsY0hlaWdodCgpCiAgICAgICAgIGludCBtYXJnaW5zID0gY29sbGFwc2VkTWFyZ2luVG9w
KCkgKyBjb2xsYXBzZWRNYXJnaW5Cb3R0b20oKTsKICAgICAgICAgaW50IHZpc0hlaWdodCA9IHZp
ZXcoKS0+dmlld0hlaWdodCgpOwogICAgICAgICBpZiAoaXNSb290KCkpCi0gICAgICAgICAgICBt
X2hlaWdodCA9IG1heChtX2hlaWdodCwgdmlzSGVpZ2h0IC0gbWFyZ2lucyk7CisgICAgICAgICAg
ICBzZXRIZWlnaHQobWF4KGhlaWdodCgpLCB2aXNIZWlnaHQgLSBtYXJnaW5zKSk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgaW50IG1hcmdpbnNCb3JkZXJzUGFkZGluZyA9IG1hcmdpbnMg
KyBwYXJlbnQoKS0+bWFyZ2luVG9wKCkgKyBwYXJlbnQoKS0+bWFyZ2luQm90dG9tKCkKICAgICAg
ICAgICAgICAgICArIHBhcmVudCgpLT5ib3JkZXJUb3AoKSArIHBhcmVudCgpLT5ib3JkZXJCb3R0
b20oKQogICAgICAgICAgICAgICAgICsgcGFyZW50KCktPnBhZGRpbmdUb3AoKSArIHBhcmVudCgp
LT5wYWRkaW5nQm90dG9tKCk7Ci0gICAgICAgICAgICBtX2hlaWdodCA9IG1heChtX2hlaWdodCwg
dmlzSGVpZ2h0IC0gbWFyZ2luc0JvcmRlcnNQYWRkaW5nKTsKKyAgICAgICAgICAgIHNldEhlaWdo
dChtYXgoaGVpZ2h0KCksIHZpc0hlaWdodCAtIG1hcmdpbnNCb3JkZXJzUGFkZGluZykpOwogICAg
ICAgICB9CiAgICAgfQogfQpAQCAtMTYzMyw3ICsxODcxLDcgQEAgaW50IFJlbmRlckJveDo6Y2Fs
Y1BlcmNlbnRhZ2VIZWlnaHQoY29ucwogICAgICAgICBpZiAocmVzdWx0ICE9IC0xKQogICAgICAg
ICAgICAgcmVzdWx0ID0gY2ItPmNhbGNDb250ZW50Qm94SGVpZ2h0KHJlc3VsdCk7CiAgICAgfSBl
bHNlIGlmIChjYi0+aXNSZW5kZXJWaWV3KCkgfHwgKGNiLT5pc0JvZHkoKSAmJiBzdHlsZSgpLT5o
dG1sSGFja3MoKSkgfHwgaXNQb3NpdGlvbmVkV2l0aFNwZWNpZmllZEhlaWdodCkgewotICAgICAg
ICAvLyBEb24ndCBhbGxvdyB0aGlzIHRvIGFmZmVjdCB0aGUgYmxvY2snIG1faGVpZ2h0IG1lbWJl
ciB2YXJpYWJsZSwgc2luY2UgdGhpcworICAgICAgICAvLyBEb24ndCBhbGxvdyB0aGlzIHRvIGFm
ZmVjdCB0aGUgYmxvY2snIGhlaWdodCgpIG1lbWJlciB2YXJpYWJsZSwgc2luY2UgdGhpcwogICAg
ICAgICAvLyBjYW4gZ2V0IGNhbGxlZCB3aGlsZSB0aGUgYmxvY2sgaXMgc3RpbGwgbGF5aW5nIG91
dCBpdHMga2lkcy4KICAgICAgICAgaW50IG9sZEhlaWdodCA9IGNiLT5oZWlnaHQoKTsKICAgICAg
ICAgY2ItPmNhbGNIZWlnaHQoKTsKQEAgLTE3MTQsNyArMTk1Miw3IEBAIGludCBSZW5kZXJCb3g6
OmNhbGNSZXBsYWNlZEhlaWdodFVzaW5nKEwKICAgICAgICAgICAgICAgICByZXR1cm4gY2FsY0Nv
bnRlbnRCb3hIZWlnaHQoaGVpZ2h0LmNhbGNWYWx1ZShuZXdIZWlnaHQpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IGF2YWlsYWJsZUhlaWdodCA9IGlzUG9z
aXRpb25lZCgpID8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0Rm9yUG9zaXRpb25lZChjYikgOiBjYi0+
YXZhaWxhYmxlSGVpZ2h0KCk7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0ID0gaXNQ
b3NpdGlvbmVkKCkgPyBjb250YWluaW5nQmxvY2tIZWlnaHRGb3JQb3NpdGlvbmVkKGNiKSA6IHN0
YXRpY19jYXN0PFJlbmRlckJveCo+KGNiKS0+YXZhaWxhYmxlSGVpZ2h0KCk7CiAKICAgICAgICAg
ICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byB1c2UgdGhlIGJvcmRlci1ib3ggdG8gbWF0Y2ggV2lu
SUUncyBicm9rZW4KICAgICAgICAgICAgIC8vIGJveCBtb2RlbC4gIFRoaXMgaXMgZXNzZW50aWFs
IGZvciBzaXppbmcgaW5zaWRlCkBAIC0xODM3LDEyICsyMDc1LDE5IEBAIGludCBSZW5kZXJCb3g6
OmNvbnRhaW5pbmdCbG9ja1dpZHRoRm9yUG8KICAgICAgICAgcmV0dXJuIG1heCgwLCAoZnJvbVJp
Z2h0IC0gZnJvbUxlZnQpKTsKICAgICB9CiAKLSAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrLT53
aWR0aCgpIC0gY29udGFpbmluZ0Jsb2NrLT5ib3JkZXJMZWZ0KCkgLSBjb250YWluaW5nQmxvY2st
PmJvcmRlclJpZ2h0KCkgLSBjb250YWluaW5nQmxvY2stPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgo
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94Kj4oY29udGFpbmluZ0Js
b2NrKS0+d2lkdGgoKSAtIGNvbnRhaW5pbmdCbG9jay0+Ym9yZGVyTGVmdCgpIC0gY29udGFpbmlu
Z0Jsb2NrLT5ib3JkZXJSaWdodCgpIC0gY29udGFpbmluZ0Jsb2NrLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCk7CiB9CiAKIGludCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0hlaWdodEZvclBv
c2l0aW9uZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluaW5nQmxvY2spIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay0+aGVpZ2h0KCkgLSBjb250YWluaW5nQmxvY2stPmJv
cmRlclRvcCgpIC0gY29udGFpbmluZ0Jsb2NrLT5ib3JkZXJCb3R0b20oKTsKKyAgICBpbnQgaGVp
Z2h0UmVzdWx0OworICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzUmVuZGVySW5saW5lKCkpIHsK
KyAgICAgICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jay0+aXNSZWxQb3NpdGlvbmVkKCkpOworICAg
ICAgICBoZWlnaHRSZXN1bHQgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJJbmxpbmUqPihjb250
YWluaW5nQmxvY2spLT5ib3VuZGluZ0JveEhlaWdodCgpOworICAgIH0gZWxzZQorICAgICAgICBo
ZWlnaHRSZXN1bHQgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCb3gqPihjb250YWluaW5nQmxv
Y2spLT5oZWlnaHQoKTsKKyAgICAKKyAgICByZXR1cm4gaGVpZ2h0UmVzdWx0IC0gY29udGFpbmlu
Z0Jsb2NrLT5ib3JkZXJUb3AoKSAtIGNvbnRhaW5pbmdCbG9jay0+Ym9yZGVyQm90dG9tKCk7CiB9
CiAKIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCkKQEAgLTE4NjcsNyAr
MjExMiw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCkKICAgICAv
LyBOT1RFOiAnc3RhdGljJyBpcyBub3QgYSBsZWdhbCB2YWx1ZSBmb3IgJ2xlZnQnIG9yICdyaWdo
dCcgYXMgb2YgQ1NTIDIuMS4KIAogICAgIC8vIEZJWE1FIDM6IENhbiBwZXJoYXBzIG9wdGltaXpl
IG91dCBjYXNlcyB3aGVuIG1heC13aWR0aC9taW4td2lkdGggYXJlIGdyZWF0ZXIKLSAgICAvLyB0
aGFuIG9yIGxlc3MgdGhhbiB0aGUgY29tcHV0ZWQgbV93aWR0aC4gIEJlIGNhcmVmdWwgb2YgYm94
LXNpemluZyBhbmQKKyAgICAvLyB0aGFuIG9yIGxlc3MgdGhhbiB0aGUgY29tcHV0ZWQgd2lkdGgo
KS4gIEJlIGNhcmVmdWwgb2YgYm94LXNpemluZyBhbmQKICAgICAvLyBwZXJjZW50YWdlIGlzc3Vl
cy4KIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFzZWQgb2ZmIG9mIHRoZSBXM0MgV29ya2lu
ZyBEcmFmdCBmcm9tIEFwcmlsIDExLCAyMDA2IG9mCkBAIC0xOTIzLDI0ICsyMTY4LDI4IEBAIHZv
aWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCkKICAgICAgICAgaWYgKGNvbnRh
aW5lckRpcmVjdGlvbiA9PSBMVFIpIHsKICAgICAgICAgICAgIC8vICdzdGF0aWNYJyBzaG91bGQg
YWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQuCiAgICAg
ICAgICAgICBpbnQgc3RhdGljUG9zaXRpb24gPSBzdGF0aWNYKCkgLSBjb250YWluZXJCbG9jay0+
Ym9yZGVyTGVmdCgpOwotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50
KCk7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQoKSkKLSAgICAg
ICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBwby0+eFBvcygpOworICAgICAgICAgICAgZm9y
IChSZW5kZXJCb3gqIHBvID0gcGFyZW50Qm94KCk7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2Nr
OyBwbyA9IHBvLT5wYXJlbnRCb3goKSkKKyAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiAr
PSBwby0+eCgpOwogICAgICAgICAgICAgbGVmdC5zZXRWYWx1ZShGaXhlZCwgc3RhdGljUG9zaXRp
b24pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwbyA9IHBh
cmVudCgpOworICAgICAgICAgICAgUmVuZGVyQm94KiBwbyA9IHBhcmVudEJveCgpOwogICAgICAg
ICAgICAgLy8gJ3N0YXRpY1gnIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBs
YXlvdXQgb2YgdGhlIHBhcmVudC4KICAgICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9IHN0
YXRpY1goKSArIGNvbnRhaW5lcldpZHRoICsgY29udGFpbmVyQmxvY2stPmJvcmRlclJpZ2h0KCkg
LSBwby0+d2lkdGgoKTsKLSAgICAgICAgICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjb250YWluZXJC
bG9jazsgcG8gPSBwby0+cGFyZW50KCkpCi0gICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24g
LT0gcG8tPnhQb3MoKTsKKyAgICAgICAgICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjb250YWluZXJC
bG9jazsgcG8gPSBwby0+cGFyZW50Qm94KCkpCisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRp
b24gLT0gcG8tPngoKTsKICAgICAgICAgICAgIHJpZ2h0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQ
b3NpdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWlu
dCBlcXVhdGlvbiB2YWx1ZXMgZm9yICd3aWR0aCcgY2FzZS4KKyAgICBpbnQgd2lkdGhSZXN1bHQ7
CisgICAgaW50IHhSZXN1bHQ7CiAgICAgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcyhzdHls
ZSgpLT53aWR0aCgpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVyRGlyZWN0aW9uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyV2lkdGgsIGJvcmRlcnNQbHVzUGFk
ZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJn
aW5MZWZ0LCBtYXJnaW5SaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
d2lkdGgsIG1fbWFyZ2luTGVmdCwgbV9tYXJnaW5SaWdodCwgbV94KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpZHRoUmVzdWx0LCBtX21hcmdpbkxlZnQsIG1fbWFyZ2luUmln
aHQsIHhSZXN1bHQpOworICAgIHNldFdpZHRoKHdpZHRoUmVzdWx0KTsKKyAgICBzZXRYKHhSZXN1
bHQpOwogCiAgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAn
bWF4LXdpZHRoJyBjYXNlLgogICAgIGlmICghc3R5bGUoKS0+bWF4V2lkdGgoKS5pc1VuZGVmaW5l
ZCgpKSB7CkBAIC0xOTU0LDExICsyMjAzLDExIEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1
dGVIb3Jpem9udGFsKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
LCByaWdodCwgbWFyZ2luTGVmdCwgbWFyZ2luUmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF4V2lkdGgsIG1heE1hcmdpbkxlZnQsIG1heE1hcmdpblJpZ2h0LCBt
YXhYUG9zKTsKIAotICAgICAgICBpZiAobV93aWR0aCA+IG1heFdpZHRoKSB7Ci0gICAgICAgICAg
ICBtX3dpZHRoID0gbWF4V2lkdGg7CisgICAgICAgIGlmICh3aWR0aCgpID4gbWF4V2lkdGgpIHsK
KyAgICAgICAgICAgIHNldFdpZHRoKG1heFdpZHRoKTsKICAgICAgICAgICAgIG1fbWFyZ2luTGVm
dCA9IG1heE1hcmdpbkxlZnQ7CiAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWF4TWFyZ2lu
UmlnaHQ7Ci0gICAgICAgICAgICBtX3ggPSBtYXhYUG9zOworICAgICAgICAgICAgbV9mcmFtZVJl
Y3Quc2V0WChtYXhYUG9zKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTk3NCwyMiArMjIyMywy
NSBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1hcmdp
blJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoLCBt
aW5NYXJnaW5MZWZ0LCBtaW5NYXJnaW5SaWdodCwgbWluWFBvcyk7CiAKLSAgICAgICAgaWYgKG1f
d2lkdGggPCBtaW5XaWR0aCkgewotICAgICAgICAgICAgbV93aWR0aCA9IG1pbldpZHRoOworICAg
ICAgICBpZiAod2lkdGgoKSA8IG1pbldpZHRoKSB7CisgICAgICAgICAgICBzZXRXaWR0aChtaW5X
aWR0aCk7CiAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBtaW5NYXJnaW5MZWZ0OwogICAgICAg
ICAgICAgbV9tYXJnaW5SaWdodCA9IG1pbk1hcmdpblJpZ2h0OwotICAgICAgICAgICAgbV94ID0g
bWluWFBvczsKKyAgICAgICAgICAgIG1fZnJhbWVSZWN0LnNldFgobWluWFBvcyk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNXaWR0aCgpICYmIG1f
d2lkdGggPCBtaW5QcmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZykKKyAgICBpZiAoc3Ry
ZXRjaGVzVG9NaW5JbnRyaW5zaWNXaWR0aCgpICYmIHdpZHRoKCkgPCBtaW5QcmVmV2lkdGgoKSAt
IGJvcmRlcnNQbHVzUGFkZGluZykgewogICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFs
dWVzKExlbmd0aChtaW5QcmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZywgRml4ZWQpLCBj
b250YWluZXJCbG9jaywgY29udGFpbmVyRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQs
IG1hcmdpblJpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd2lk
dGgsIG1fbWFyZ2luTGVmdCwgbV9tYXJnaW5SaWdodCwgbV94KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aWR0aFJlc3VsdCwgbV9tYXJnaW5MZWZ0LCBtX21hcmdpblJp
Z2h0LCB4UmVzdWx0KTsKKyAgICAgICAgc2V0V2lkdGgod2lkdGhSZXN1bHQpOworICAgICAgICBz
ZXRYKHhSZXN1bHQpOworICAgIH0KIAotICAgIC8vIFB1dCBtX3dpZHRoIGludG8gY29ycmVjdCBm
b3JtLgotICAgIG1fd2lkdGggKz0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgIC8vIFB1dCB3aWR0
aCgpIGludG8gY29ycmVjdCBmb3JtLgorICAgIHNldFdpZHRoKHdpZHRoKCkgKyBib3JkZXJzUGx1
c1BhZGRpbmcpOwogfQogCiB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFZh
bHVlcyhMZW5ndGggd2lkdGgsIGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyQmxvY2ssIFRl
eHREaXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uLApAQCAtMjIxMSwyMCArMjQ2MywyMiBAQCB2
b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWwoKQogICAgIGlmICh0b3AuaXNBdXRv
KCkgJiYgYm90dG9tLmlzQXV0bygpKSB7CiAgICAgICAgIC8vIHN0YXRpY1kgc2hvdWxkIGFscmVh
ZHkgaGF2ZSBiZWVuIHNldCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50KCkKICAgICAgICAg
aW50IHN0YXRpY1RvcCA9IHN0YXRpY1koKSAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJUb3AoKTsK
LSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7IHBvICYmIHBvICE9IGNv
bnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQoKSkgeworICAgICAgICBmb3IgKFJlbmRlckJv
eCogcG8gPSBwYXJlbnRCb3goKTsgcG8gJiYgcG8gIT0gY29udGFpbmVyQmxvY2s7IHBvID0gcG8t
PnBhcmVudEJveCgpKSB7CiAgICAgICAgICAgICBpZiAoIXBvLT5pc1RhYmxlUm93KCkpCi0gICAg
ICAgICAgICAgICAgc3RhdGljVG9wICs9IHBvLT55UG9zKCk7CisgICAgICAgICAgICAgICAgc3Rh
dGljVG9wICs9IHBvLT55KCk7CiAgICAgICAgIH0KICAgICAgICAgdG9wLnNldFZhbHVlKEZpeGVk
LCBzdGF0aWNUb3ApOwogICAgIH0KIAogCi0gICAgaW50IGhlaWdodDsgLy8gTmVlZGVkIHRvIGNv
bXB1dGUgb3ZlcmZsb3cuCisgICAgaW50IGg7IC8vIE5lZWRlZCB0byBjb21wdXRlIG92ZXJmbG93
LgorICAgIGludCB5OwogCiAgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFs
dWVzIGZvciAnaGVpZ2h0JyBjYXNlLgogICAgIGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKHN0
eWxlKCktPmhlaWdodCgpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVySGVpZ2h0LCBib3JkZXJz
UGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wLCBib3R0b20s
IG1hcmdpblRvcCwgbWFyZ2luQm90dG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlaWdodCwgbV9tYXJnaW5Ub3AsIG1fbWFyZ2luQm90dG9tLCBtX3kpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGgsIG1fbWFyZ2luVG9wLCBtX21hcmdpbkJvdHRvbSwgeSk7Cisg
ICAgc2V0WSh5KTsKIAogICAgIC8vIEF2b2lkIGRvaW5nIGFueSB3b3JrIGluIHRoZSBjb21tb24g
Y2FzZSAod2hlcmUgdGhlIHZhbHVlcyBvZiBtaW4taGVpZ2h0IGFuZCBtYXgtaGVpZ2h0IGFyZSB0
aGVpciBkZWZhdWx0cykuCiAgICAgLy8gc2VlIEZJWE1FIDMKQEAgLTIyNDAsMTEgKzI0OTQsMTEg
QEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsKCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9wLCBib3R0b20sIG1hcmdpblRvcCwgbWFyZ2luQm90dG9t
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQsIG1heE1hcmdp
blRvcCwgbWF4TWFyZ2luQm90dG9tLCBtYXhZUG9zKTsKIAotICAgICAgICBpZiAoaGVpZ2h0ID4g
bWF4SGVpZ2h0KSB7Ci0gICAgICAgICAgICBoZWlnaHQgPSBtYXhIZWlnaHQ7CisgICAgICAgIGlm
IChoID4gbWF4SGVpZ2h0KSB7CisgICAgICAgICAgICBoID0gbWF4SGVpZ2h0OwogICAgICAgICAg
ICAgbV9tYXJnaW5Ub3AgPSBtYXhNYXJnaW5Ub3A7CiAgICAgICAgICAgICBtX21hcmdpbkJvdHRv
bSA9IG1heE1hcmdpbkJvdHRvbTsKLSAgICAgICAgICAgIG1feSA9IG1heFlQb3M7CisgICAgICAg
ICAgICBtX2ZyYW1lUmVjdC5zZXRZKG1heFlQb3MpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0y
MjU5LDE5ICsyNTEzLDE5IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbCgp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCwgYm90dG9tLCBtYXJnaW5U
b3AsIG1hcmdpbkJvdHRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlu
SGVpZ2h0LCBtaW5NYXJnaW5Ub3AsIG1pbk1hcmdpbkJvdHRvbSwgbWluWVBvcyk7CiAKLSAgICAg
ICAgaWYgKGhlaWdodCA8IG1pbkhlaWdodCkgewotICAgICAgICAgICAgaGVpZ2h0ID0gbWluSGVp
Z2h0OworICAgICAgICBpZiAoaCA8IG1pbkhlaWdodCkgeworICAgICAgICAgICAgaCA9IG1pbkhl
aWdodDsKICAgICAgICAgICAgIG1fbWFyZ2luVG9wID0gbWluTWFyZ2luVG9wOwogICAgICAgICAg
ICAgbV9tYXJnaW5Cb3R0b20gPSBtaW5NYXJnaW5Cb3R0b207Ci0gICAgICAgICAgICBtX3kgPSBt
aW5ZUG9zOworICAgICAgICAgICAgbV9mcmFtZVJlY3Quc2V0WShtaW5ZUG9zKTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIC8vIFNldCBmaW5hbCBoZWlnaHQgdmFsdWUuCi0gICAgbV9oZWlnaHQg
PSBoZWlnaHQgKyBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgc2V0SGVpZ2h0KGggKyBib3JkZXJz
UGx1c1BhZGRpbmcpOwogfQogCi12b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxW
YWx1ZXMoTGVuZ3RoIGhlaWdodCwgY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXJCbG9jaywK
K3ZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhMZW5ndGggaCwgY29u
c3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXJCbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgY29udGFpbmVySGVpZ2h0LCBjb25zdCBpbnQg
Ym9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IExlbmd0aCB0b3AsIGNvbnN0IExlbmd0aCBib3R0b20sIGNvbnN0IExlbmd0
aCBtYXJnaW5Ub3AsIGNvbnN0IExlbmd0aCBtYXJnaW5Cb3R0b20sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBoZWlnaHRWYWx1ZSwgaW50JiBtYXJnaW5U
b3BWYWx1ZSwgaW50JiBtYXJnaW5Cb3R0b21WYWx1ZSwgaW50JiB5UG9zKQpAQCAtMjI4MCwxNyAr
MjUzNCwxNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxWYWx1CiAgICAg
Ly8gY29udmVydGVkIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gaW4gY2FsY0Fic29sdXRlVmVydGlj
YWwoKQogICAgIEFTU0VSVCghKHRvcC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpKTsKIAot
ICAgIGludCBjb250ZW50SGVpZ2h0ID0gbV9oZWlnaHQgLSBib3JkZXJzUGx1c1BhZGRpbmc7Cisg
ICAgaW50IGNvbnRlbnRIZWlnaHQgPSBoZWlnaHQoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKIAog
ICAgIGludCB0b3BWYWx1ZSA9IDA7CiAKLSAgICBib29sIGhlaWdodElzQXV0byA9IGhlaWdodC5p
c0F1dG8oKTsKKyAgICBib29sIGhlaWdodElzQXV0byA9IGguaXNBdXRvKCk7CiAgICAgYm9vbCB0
b3BJc0F1dG8gPSB0b3AuaXNBdXRvKCk7CiAgICAgYm9vbCBib3R0b21Jc0F1dG8gPSBib3R0b20u
aXNBdXRvKCk7CiAKICAgICAvLyBIZWlnaHQgaXMgbmV2ZXIgdW5zb2x2ZWQgZm9yIHRhYmxlcy4K
ICAgICBpZiAoaXNUYWJsZSgpKSB7Ci0gICAgICAgIGhlaWdodC5zZXRWYWx1ZShGaXhlZCwgY29u
dGVudEhlaWdodCk7CisgICAgICAgIGguc2V0VmFsdWUoRml4ZWQsIGNvbnRlbnRIZWlnaHQpOwog
ICAgICAgICBoZWlnaHRJc0F1dG8gPSBmYWxzZTsKICAgICB9CiAKQEAgLTIzMDYsNyArMjU2MCw3
IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHUKICAgICAgICAgLy8g
Tk9URTogIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gc29sdmUgZm9yICdib3R0b20nIGluIHRoZSBv
dmVyIGNvbnN0cmFpbmVkCiAgICAgICAgIC8vIGNhc2UgYmVjYXVzZSB0aGUgdmFsdWUgaXMgbm90
IHVzZWQgZm9yIGFueSBmdXJ0aGVyIGNhbGN1bGF0aW9ucy4KIAotICAgICAgICBoZWlnaHRWYWx1
ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0
KSk7CisgICAgICAgIGhlaWdodFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaC5jYWxjVmFs
dWUoY29udGFpbmVySGVpZ2h0KSk7CiAgICAgICAgIHRvcFZhbHVlID0gdG9wLmNhbGNWYWx1ZShj
b250YWluZXJIZWlnaHQpOwogCiAgICAgICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNv
bnRhaW5lckhlaWdodCAtICh0b3BWYWx1ZSArIGhlaWdodFZhbHVlICsgYm90dG9tLmNhbGNWYWx1
ZShjb250YWluZXJIZWlnaHQpICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKQEAgLTIzNzMsNyArMjYy
Nyw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHUKICAgICAgICAg
ICAgIGhlaWdodFZhbHVlID0gY29udGVudEhlaWdodDsKICAgICAgICAgfSBlbHNlIGlmICh0b3BJ
c0F1dG8gJiYgIWhlaWdodElzQXV0byAmJiAhYm90dG9tSXNBdXRvKSB7CiAgICAgICAgICAgICAv
LyBSVUxFIDQ6IChzb2x2ZSBvZiB0b3ApCi0gICAgICAgICAgICBoZWlnaHRWYWx1ZSA9IGNhbGND
b250ZW50Qm94SGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CisgICAg
ICAgICAgICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGguY2FsY1ZhbHVlKGNv
bnRhaW5lckhlaWdodCkpOwogICAgICAgICAgICAgdG9wVmFsdWUgPSBhdmFpbGFibGVTcGFjZSAt
IChoZWlnaHRWYWx1ZSArIGJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoIXRvcElzQXV0byAmJiBoZWlnaHRJc0F1dG8gJiYgIWJvdHRvbUlzQXV0
bykgewogICAgICAgICAgICAgLy8gUlVMRSA1OiAoc29sdmUgb2YgaGVpZ2h0KQpAQCAtMjM4MSw3
ICsyNjM1LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdQogICAg
ICAgICAgICAgaGVpZ2h0VmFsdWUgPSBtYXgoMCwgYXZhaWxhYmxlU3BhY2UgLSAodG9wVmFsdWUg
KyBib3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkpKTsKICAgICAgICAgfSBlbHNlIGlm
ICghdG9wSXNBdXRvICYmICFoZWlnaHRJc0F1dG8gJiYgYm90dG9tSXNBdXRvKSB7CiAgICAgICAg
ICAgICAvLyBSVUxFIDY6IChubyBuZWVkIHNvbHZlIG9mIGJvdHRvbSkKLSAgICAgICAgICAgIGhl
aWdodFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaGVpZ2h0LmNhbGNWYWx1ZShjb250YWlu
ZXJIZWlnaHQpKTsKKyAgICAgICAgICAgIGhlaWdodFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWln
aHQoaC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CiAgICAgICAgICAgICB0b3BWYWx1ZSA9
IHRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0
MjIsOCArMjY3Niw4IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsUmUK
ICAgICAvLyBOT1RFOiBUaGlzIHZhbHVlIG9mIHdpZHRoIGlzIEZJTkFMIGluIHRoYXQgdGhlIG1p
bi9tYXggd2lkdGggY2FsY3VsYXRpb25zCiAgICAgLy8gYXJlIGRlYWx0IHdpdGggaW4gY2FsY1Jl
cGxhY2VkV2lkdGgoKS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RlcHMgdG8gcHJvZHVjZQogICAg
IC8vIGNvcnJlY3QgbWF4L21pbiBpbiB0aGUgbm9uLXJlcGxhY2VkIHZlcnNpb24sIGFyZSBub3Qg
bmVjZXNzYXJ5LgotICAgIG1fd2lkdGggPSBjYWxjUmVwbGFjZWRXaWR0aCgpICsgYm9yZGVyTGVm
dCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKTsKLSAg
ICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJXaWR0aCAtIG1fd2lkdGg7Cisg
ICAgc2V0V2lkdGgoY2FsY1JlcGxhY2VkV2lkdGgoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJp
Z2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCkpOworICAgIGNvbnN0IGludCBh
dmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lcldpZHRoIC0gd2lkdGgoKTsKIAogICAgIC8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qXAogICAgICAqIDIuIElmIGJvdGggJ2xlZnQnIGFuZCAncmlnaHQnIGhhdmUgdGhl
IHZhbHVlICdhdXRvJywgdGhlbiBpZiAnZGlyZWN0aW9uJwpAQCAtMjQzNiwxNSArMjY5MCwxNSBA
QCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFJlCiAgICAgICAgIGlmIChj
b250YWluZXJEaXJlY3Rpb24gPT0gTFRSKSB7CiAgICAgICAgICAgICAvLyAnc3RhdGljWCcgc2hv
dWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50Lgog
ICAgICAgICAgICAgaW50IHN0YXRpY1Bvc2l0aW9uID0gc3RhdGljWCgpIC0gY29udGFpbmVyQmxv
Y2stPmJvcmRlckxlZnQoKTsKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBwbyA9IHBh
cmVudCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFyZW50KCkpCi0g
ICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gcG8tPnhQb3MoKTsKKyAgICAgICAgICAg
IGZvciAoUmVuZGVyQm94KiBwbyA9IHBhcmVudEJveCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJC
bG9jazsgcG8gPSBwby0+cGFyZW50Qm94KCkpCisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRp
b24gKz0gcG8tPngoKTsKICAgICAgICAgICAgIGxlZnQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bv
c2l0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcG8g
PSBwYXJlbnQoKTsKKyAgICAgICAgICAgIFJlbmRlckJveCogcG8gPSBwYXJlbnRCb3goKTsKICAg
ICAgICAgICAgIC8vICdzdGF0aWNYJyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91
Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQuCiAgICAgICAgICAgICBpbnQgc3RhdGljUG9zaXRpb24g
PSBzdGF0aWNYKCkgKyBjb250YWluZXJXaWR0aCArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJSaWdo
dCgpIC0gcG8tPndpZHRoKCk7Ci0gICAgICAgICAgICBmb3IgKDsgcG8gJiYgcG8gIT0gY29udGFp
bmVyQmxvY2s7IHBvID0gcG8tPnBhcmVudCgpKQotICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0
aW9uIC09IHBvLT54UG9zKCk7CisgICAgICAgICAgICBmb3IgKDsgcG8gJiYgcG8gIT0gY29udGFp
bmVyQmxvY2s7IHBvID0gcG8tPnBhcmVudEJveCgpKQorICAgICAgICAgICAgICAgIHN0YXRpY1Bv
c2l0aW9uIC09IHBvLT54KCk7CiAgICAgICAgICAgICByaWdodC5zZXRWYWx1ZShGaXhlZCwgc3Rh
dGljUG9zaXRpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtMjU0MSw3ICsyNzk1LDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxSZQogICAgIFwqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwogICAgIC8vIE5PVEU6ICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNvbHZlIGZvciAncmln
aHQnIHdoZW4gdGhlIGRpcmVjdGlvbiBpcwogICAgIC8vIExUUiBiZWNhdXNlIHRoZSB2YWx1ZSBp
cyBub3QgdXNlZC4KLSAgICBpbnQgdG90YWxXaWR0aCA9IG1fd2lkdGggKyBsZWZ0VmFsdWUgKyBy
aWdodFZhbHVlICsgIG1fbWFyZ2luTGVmdCArIG1fbWFyZ2luUmlnaHQ7CisgICAgaW50IHRvdGFs
V2lkdGggPSB3aWR0aCgpICsgbGVmdFZhbHVlICsgcmlnaHRWYWx1ZSArICBtX21hcmdpbkxlZnQg
KyBtX21hcmdpblJpZ2h0OwogICAgIGlmICh0b3RhbFdpZHRoID4gY29udGFpbmVyV2lkdGggJiYg
KGNvbnRhaW5lckRpcmVjdGlvbiA9PSBSVEwpKQogICAgICAgICBsZWZ0VmFsdWUgPSBjb250YWlu
ZXJXaWR0aCAtICh0b3RhbFdpZHRoIC0gbGVmdFZhbHVlKTsKIApAQCAtMjU1NiwxMiArMjgxMCwx
MiBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFJlCiAgICAgICAgIElu
bGluZUZsb3dCb3gqIGZpcnN0TGluZSA9IGZsb3ctPmZpcnN0TGluZUJveCgpOwogICAgICAgICBJ
bmxpbmVGbG93Qm94KiBsYXN0TGluZSA9IGZsb3ctPmxhc3RMaW5lQm94KCk7CiAgICAgICAgIGlm
IChmaXJzdExpbmUgJiYgbGFzdExpbmUgJiYgZmlyc3RMaW5lICE9IGxhc3RMaW5lKSB7Ci0gICAg
ICAgICAgICBtX3ggPSBsZWZ0VmFsdWUgKyBtX21hcmdpbkxlZnQgKyBsYXN0TGluZS0+Ym9yZGVy
TGVmdCgpICsgKGxhc3RMaW5lLT54UG9zKCkgLSBmaXJzdExpbmUtPnhQb3MoKSk7CisgICAgICAg
ICAgICBtX2ZyYW1lUmVjdC5zZXRYKGxlZnRWYWx1ZSArIG1fbWFyZ2luTGVmdCArIGxhc3RMaW5l
LT5ib3JkZXJMZWZ0KCkgKyAobGFzdExpbmUtPnhQb3MoKSAtIGZpcnN0TGluZS0+eFBvcygpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3ggPSBsZWZ0
VmFsdWUgKyBtX21hcmdpbkxlZnQgKyBjb250YWluZXJCbG9jay0+Ym9yZGVyTGVmdCgpOworICAg
IG1fZnJhbWVSZWN0LnNldFgobGVmdFZhbHVlICsgbV9tYXJnaW5MZWZ0ICsgY29udGFpbmVyQmxv
Y2stPmJvcmRlckxlZnQoKSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0
aWNhbFJlcGxhY2VkKCkKQEAgLTI1OTEsOCArMjg0NSw4IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxj
QWJzb2x1dGVWZXJ0aWNhbFJlcGwKICAgICAvLyBOT1RFOiBUaGlzIHZhbHVlIG9mIGhlaWdodCBp
cyBGSU5BTCBpbiB0aGF0IHRoZSBtaW4vbWF4IGhlaWdodCBjYWxjdWxhdGlvbnMKICAgICAvLyBh
cmUgZGVhbHQgd2l0aCBpbiBjYWxjUmVwbGFjZWRIZWlnaHQoKS4gIFRoaXMgbWVhbnMgdGhhdCB0
aGUgc3RlcHMgdG8gcHJvZHVjZQogICAgIC8vIGNvcnJlY3QgbWF4L21pbiBpbiB0aGUgbm9uLXJl
cGxhY2VkIHZlcnNpb24sIGFyZSBub3QgbmVjZXNzYXJ5LgotICAgIG1faGVpZ2h0ID0gY2FsY1Jl
cGxhY2VkSGVpZ2h0KCkgKyBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ1Rv
cCgpICsgcGFkZGluZ0JvdHRvbSgpOwotICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNv
bnRhaW5lckhlaWdodCAtIG1faGVpZ2h0OworICAgIHNldEhlaWdodChjYWxjUmVwbGFjZWRIZWln
aHQoKSArIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nVG9wKCkgKyBwYWRk
aW5nQm90dG9tKCkpOworICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckhl
aWdodCAtIGhlaWdodCgpOwogCiAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCiAgICAgICogMi4gSWYg
Ym90aCAndG9wJyBhbmQgJ2JvdHRvbScgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCByZXBsYWNlICd0
b3AnCkBAIC0yNjAyLDkgKzI4NTYsOSBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVy
dGljYWxSZXBsCiAgICAgaWYgKHRvcC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpIHsKICAg
ICAgICAgLy8gc3RhdGljWSBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5
b3V0IG9mIHRoZSBwYXJlbnQoKS4KICAgICAgICAgaW50IHN0YXRpY1RvcCA9IHN0YXRpY1koKSAt
IGNvbnRhaW5lckJsb2NrLT5ib3JkZXJUb3AoKTsKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3Qq
IHBvID0gcGFyZW50KCk7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJl
bnQoKSkgeworICAgICAgICBmb3IgKFJlbmRlckJveCogcG8gPSBwYXJlbnRCb3goKTsgcG8gJiYg
cG8gIT0gY29udGFpbmVyQmxvY2s7IHBvID0gcG8tPnBhcmVudEJveCgpKSB7CiAgICAgICAgICAg
ICBpZiAoIXBvLT5pc1RhYmxlUm93KCkpCi0gICAgICAgICAgICAgICAgc3RhdGljVG9wICs9IHBv
LT55UG9zKCk7CisgICAgICAgICAgICAgICAgc3RhdGljVG9wICs9IHBvLT55KCk7CiAgICAgICAg
IH0KICAgICAgICAgdG9wLnNldFZhbHVlKEZpeGVkLCBzdGF0aWNUb3ApOwogICAgIH0KQEAgLTI2
OTMsNyArMjk0Nyw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFJlcGwK
ICAgICAvLyBvciBub3QuCiAKICAgICAvLyBVc2UgY29tcHV0ZWQgdmFsdWVzIHRvIGNhbGN1bGF0
ZSB0aGUgdmVydGljYWwgcG9zaXRpb24uCi0gICAgbV95ID0gdG9wVmFsdWUgKyBtX21hcmdpblRv
cCArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJUb3AoKTsKKyAgICBtX2ZyYW1lUmVjdC5zZXRZKHRv
cFZhbHVlICsgbV9tYXJnaW5Ub3AgKyBjb250YWluZXJCbG9jay0+Ym9yZGVyVG9wKCkpOwogfQog
CiBJbnRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIGludCBj
YXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCkBAIC0yNzA1LDExICsyOTU5
LDExIEBAIEludFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmUKIAogICAgIC8v
IEZJWE1FOiBXaGF0IGFib3V0IGJvcmRlciBhbmQgcGFkZGluZz8KICAgICBjb25zdCBpbnQgY2Fy
ZXRXaWR0aCA9IDE7Ci0gICAgSW50UmVjdCByZWN0KHhQb3MoKSwgeVBvcygpLCBjYXJldFdpZHRo
LCBtX2hlaWdodCk7CisgICAgSW50UmVjdCByZWN0KHgoKSwgeSgpLCBjYXJldFdpZHRoLCBoZWln
aHQoKSk7CiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBib3ggPyBib3gtPmRpcmVjdGlv
bigpIDogc3R5bGUoKS0+ZGlyZWN0aW9uKCk7CiAKICAgICBpZiAoKCFjYXJldE9mZnNldCkgXiAo
ZGlyZWN0aW9uID09IExUUikpCi0gICAgICAgIHJlY3QubW92ZShJbnRTaXplKG1fd2lkdGggLSBj
YXJldFdpZHRoLCAwKSk7CisgICAgICAgIHJlY3QubW92ZShJbnRTaXplKHdpZHRoKCkgLSBjYXJl
dFdpZHRoLCAwKSk7CiAKICAgICBpZiAoYm94KSB7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJv
b3RCb3ggPSBib3gtPnJvb3QoKTsKQEAgLTI3MzEsMTggKzI5ODUsMTggQEAgSW50UmVjdCBSZW5k
ZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZQogICAgICAgICByZWN0LnNldEhlaWdodChmb250
SGVpZ2h0KTsKIAogICAgIGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCi0gICAgICAgICpleHRy
YVdpZHRoVG9FbmRPZkxpbmUgPSB4UG9zKCkgKyBtX3dpZHRoIC0gcmVjdC5yaWdodCgpOworICAg
ICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0geCgpICsgd2lkdGgoKSAtIHJlY3QucmlnaHQo
KTsKIAogICAgIC8vIE1vdmUgdG8gbG9jYWwgY29vcmRzCi0gICAgcmVjdC5tb3ZlKC14UG9zKCks
IC15UG9zKCkpOworICAgIHJlY3QubW92ZSgteCgpLCAteSgpKTsKICAgICByZXR1cm4gcmVjdDsK
IH0KIAogaW50IFJlbmRlckJveDo6bG93ZXN0UG9zaXRpb24oYm9vbCAvKmluY2x1ZGVPdmVyZmxv
d0ludGVyaW9yKi8sIGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0CiB7Ci0gICAgaWYgKCFpbmNsdWRl
U2VsZiB8fCAhbV93aWR0aCkKKyAgICBpZiAoIWluY2x1ZGVTZWxmIHx8ICF3aWR0aCgpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICBpbnQgYm90dG9tID0gbV9oZWlnaHQ7CisgICAgaW50IGJvdHRv
bSA9IGhlaWdodCgpOwogICAgIGlmIChpc1JlbFBvc2l0aW9uZWQoKSkKICAgICAgICAgYm90dG9t
ICs9IHJlbGF0aXZlUG9zaXRpb25PZmZzZXRZKCk7CiAgICAgcmV0dXJuIGJvdHRvbTsKQEAgLTI3
NTAsOSArMzAwNCw5IEBAIGludCBSZW5kZXJCb3g6Omxvd2VzdFBvc2l0aW9uKGJvb2wgLyppbmMK
IAogaW50IFJlbmRlckJveDo6cmlnaHRtb3N0UG9zaXRpb24oYm9vbCAvKmluY2x1ZGVPdmVyZmxv
d0ludGVyaW9yKi8sIGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0CiB7Ci0gICAgaWYgKCFpbmNsdWRl
U2VsZiB8fCAhbV9oZWlnaHQpCisgICAgaWYgKCFpbmNsdWRlU2VsZiB8fCAhaGVpZ2h0KCkpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIGludCByaWdodCA9IG1fd2lkdGg7CisgICAgaW50IHJpZ2h0
ID0gd2lkdGgoKTsKICAgICBpZiAoaXNSZWxQb3NpdGlvbmVkKCkpCiAgICAgICAgIHJpZ2h0ICs9
IHJlbGF0aXZlUG9zaXRpb25PZmZzZXRYKCk7CiAgICAgcmV0dXJuIHJpZ2h0OwpAQCAtMjc2MCwx
MiArMzAxNCwyMSBAQCBpbnQgUmVuZGVyQm94OjpyaWdodG1vc3RQb3NpdGlvbihib29sIC8qCiAK
IGludCBSZW5kZXJCb3g6OmxlZnRtb3N0UG9zaXRpb24oYm9vbCAvKmluY2x1ZGVPdmVyZmxvd0lu
dGVyaW9yKi8sIGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0CiB7Ci0gICAgaWYgKCFpbmNsdWRlU2Vs
ZiB8fCAhbV9oZWlnaHQpCi0gICAgICAgIHJldHVybiBtX3dpZHRoOworICAgIGlmICghaW5jbHVk
ZVNlbGYgfHwgIWhlaWdodCgpKQorICAgICAgICByZXR1cm4gd2lkdGgoKTsKICAgICBpbnQgbGVm
dCA9IDA7CiAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQogICAgICAgICBsZWZ0ICs9IHJlbGF0
aXZlUG9zaXRpb25PZmZzZXRYKCk7CiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKKyNpZiBFTkFCTEUo
U1ZHKQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJCb3g6OmxvY2FsVHJhbnNmb3JtKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoMSwgMCwgMCwgMSwgeCgp
LCB5KCkpOworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0gICAgZW51bSBXaWR0aFR5cGUgeyBXaWR0aCwgTWluV2lkdGgsIE1heFdpZHRo
IH07CitlbnVtIFdpZHRoVHlwZSB7IFdpZHRoLCBNaW5XaWR0aCwgTWF4V2lkdGggfTsKIAogY2xh
c3MgUmVuZGVyQm94IDogcHVibGljIFJlbmRlck9iamVjdCB7CiBwdWJsaWM6CkBAIC0zNiw2ICsz
NiwxMDEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gIlJlbmRlckJveCI7IH0KIAorICAgIGludCB4KCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZVJlY3QueCgpOyB9CisgICAgaW50IHkoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
UmVjdC55KCkgKyBib3JkZXJUb3BFeHRyYSgpOyB9IC8vIEZJWE1FOiBOZWVkIHRvIGRlYWwgd2l0
aCB0aGUgYm9yZGVyVG9wRXh0cmEoKSBsaWUgaW4gYSBzYW5lIHdheS4KKyAgICBpbnQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9CisgICAgaW50IGhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LmhlaWdodCgpOyB9CisgICAgCisgICAgdm9pZCBz
ZXRYKGludCB4KSB7IG1fZnJhbWVSZWN0LnNldFgoeCk7IH0KKyAgICB2b2lkIHNldFkoaW50IHkp
IHsgbV9mcmFtZVJlY3Quc2V0WSh5KTsgfQorICAgIHZvaWQgc2V0V2lkdGgoaW50IHdpZHRoKSB7
IG1fZnJhbWVSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KGludCBo
ZWlnaHQpIHsgbV9mcmFtZVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7IH0KKyAgICAKKyAgICBJbnRQ
b2ludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LmxvY2F0aW9uKCk7IH0g
Ly8gRklYTUU6IEJlIGF3YXJlIHRoYXQgdGhpcyBpcyBub3QgZXF1aXZhbGVudCB0byB4KCksIHko
KSBiZWNhdXNlIG9mIHkoKSdzIGJvcmRlclRvcEV4dHJhKCkgbGllIQorICAgIEludFNpemUgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LnNpemUoKTsgfQorCisgICAgdm9pZCBzZXRM
b2NhdGlvbihjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pIHsgc2V0TG9jYXRpb24obG9jYXRpb24u
eCgpLCBsb2NhdGlvbi55KCkpOyB9CisgICAgdm9pZCBzZXRMb2NhdGlvbihpbnQgeCwgaW50IHkp
CisgICAgeworICAgICAgICAvLyBPcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgZG9uJ3Qg
bW92ZSBhdCBhbGwuCisgICAgICAgIGlmICh4ID09IG1fZnJhbWVSZWN0LngoKSAmJiB5ID09IG1f
ZnJhbWVSZWN0LnkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9mcmFtZVJlY3Qu
c2V0WCh4KTsKKyAgICAgICAgbV9mcmFtZVJlY3Quc2V0WSh5KTsKKyAgICB9CisgICAgdm9pZCBz
ZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9mcmFtZVJlY3Quc2V0U2l6ZShzaXplKTsg
fQorICAgIHZvaWQgbW92ZShpbnQgZHgsIGludCBkeSkgeyBtX2ZyYW1lUmVjdC5tb3ZlKGR4LCBk
eSk7IH0KKworICAgIEludFJlY3QgZnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3Q7IH0KKyAgICB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fZnJh
bWVSZWN0ID0gcmVjdDsgfQorCisgICAgSW50UmVjdCBib3JkZXJCb3hSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gSW50UmVjdCgwLCAtYm9yZGVyVG9wRXh0cmEoKSwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBi
b3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSk7IH0KKyAgICAKKyAgICAvLyBU
aGUgY29udGVudCBhcmVhIG9mIHRoZSBib3ggKGV4Y2x1ZGVzIHBhZGRpbmcgYW5kIGJvcmRlciku
CisgICAgSW50UmVjdCBjb250ZW50Qm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoYm9y
ZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCksIGNv
bnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpOyB9CisgICAgLy8gVGhlIGNvbnRlbnQgYm94
IGluIGFic29sdXRlIGNvb3Jkcy4gSWdub3JlcyB0cmFuc2Zvcm1zLgorICAgIEludFJlY3QgYWJz
b2x1dGVDb250ZW50Qm94KCkgY29uc3Q7CisgICAgLy8gVGhlIGNvbnRlbnQgYm94IGNvbnZlcnRl
ZCB0byBhYnNvbHV0ZSBjb29yZHMgKHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudCkuCisg
ICAgRmxvYXRRdWFkIGFic29sdXRlQ29udGVudFF1YWQoKSBjb25zdDsKKworICAgIC8vIEJvdW5k
cyBvZiB0aGUgb3V0bGluZSBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBSZXNwZWN0cyB0cmFuc2Zv
cm1zCisgICAgdmlydHVhbCBJbnRSZWN0IGFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqLCBpbnQg
dHgsIGludCB0eSk7CisKKyAgICAvLyBVc2UgdGhpcyB3aXRoIGNhdXRpb24hIE5vIHR5cGUgY2hl
Y2tpbmcgaXMgZG9uZSEKKyAgICBSZW5kZXJCb3gqIHByZXZpb3VzU2libGluZ0JveCgpIGNvbnN0
IHsgQVNTRVJUKCFwcmV2aW91c1NpYmxpbmcoKSB8fCBwcmV2aW91c1NpYmxpbmcoKS0+aXNCb3go
KSk7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihwcmV2aW91c1NpYmxpbmcoKSk7IH0K
KyAgICBSZW5kZXJCb3gqIG5leHRTaWJsaW5nQm94KCkgY29uc3QgeyBBU1NFUlQoIW5leHRTaWJs
aW5nKCkgfHwgbmV4dFNpYmxpbmcoKS0+aXNCb3goKSk7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJCb3gqPihuZXh0U2libGluZygpKTsgfQorICAgIFJlbmRlckJveCogcGFyZW50Qm94KCkgY29u
c3QgeyBBU1NFUlQoIXBhcmVudCgpIHx8IHBhcmVudCgpLT5pc0JveCgpKTsgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlbmRlckJveCo+KHBhcmVudCgpKTsgfQorCisgICAgLy8gVGhlIGhlaWdodCBvZiBh
IGJsb2NrIHdoZW4geW91IGluY2x1ZGUgbm9ybWFsIGZsb3cgb3ZlcmZsb3cgc3BpbGxhZ2Ugb3V0
IG9mIHRoZSBib3R0b20KKyAgICAvLyBvZiB0aGUgYmxvY2sgKGUuZy4sIGEgPGRpdiBzdHlsZT0i
aGVpZ2h0OjI1cHgiPiB0aGF0IGhhcyBhIDEwMHB4IHRhbGwgaW1hZ2UgaW5zaWRlCisgICAgLy8g
aXQgd291bGQgaGF2ZSBhbiBvdmVyZmxvdyBoZWlnaHQgb2YgYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCkgKyAxMDBweC4KKyAgICB2aXJ0dWFsIGludCBvdmVyZmxvd0hlaWdodChib29sIC8qaW5j
bHVkZUludGVyaW9yKi8gPSB0cnVlKSBjb25zdCB7IHJldHVybiBoZWlnaHQoKTsgfQorICAgIHZp
cnR1YWwgaW50IG92ZXJmbG93V2lkdGgoYm9vbCAvKmluY2x1ZGVJbnRlcmlvciovID0gdHJ1ZSkg
Y29uc3QgeyByZXR1cm4gd2lkdGgoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPdmVyZmxvd0hl
aWdodChpbnQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPdmVyZmxvd1dpZHRoKGludCkgeyB9
CisgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dMZWZ0KGJvb2wgLyppbmNsdWRlSW50ZXJpb3IqLyA9
IHRydWUpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBvdmVyZmxvd1RvcChi
b29sIC8qaW5jbHVkZUludGVyaW9yKi8gPSB0cnVlKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBJbnRSZWN0IG92ZXJmbG93UmVjdChib29sIC8qaW5jbHVkZUludGVyaW9yKi8gPSB0
cnVlKSBjb25zdCB7IHJldHVybiBib3JkZXJCb3hSZWN0KCk7IH0KKworICAgIGludCBjb250ZW50
V2lkdGgoKSBjb25zdCB7IHJldHVybiBjbGllbnRXaWR0aCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBh
ZGRpbmdSaWdodCgpOyB9CisgICAgaW50IGNvbnRlbnRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBj
bGllbnRIZWlnaHQoKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKTsgfQorCisgICAg
Ly8gSUUgZXh0ZW5zaW9ucy4gVXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0V2lkdGgvSGVpZ2h0LiAg
T3ZlcnJpZGRlbiBieSBpbmxpbmVzIChSZW5kZXJGbG93KQorICAgIC8vIHRvIHJldHVybiB0aGUg
cmVtYWluaW5nIHdpZHRoIG9uIGEgZ2l2ZW4gbGluZSAoYW5kIHRoZSBoZWlnaHQgb2YgYSBzaW5n
bGUgbGluZSkuCisgICAgdmlydHVhbCBpbnQgb2Zmc2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiB3
aWR0aCgpOyB9CisgICAgdmlydHVhbCBpbnQgb2Zmc2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
aGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsgfQorICAg
IHZpcnR1YWwgaW50IG9mZnNldExlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBvZmZzZXRU
b3AoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlckJveCogb2Zmc2V0UGFyZW50KCkgY29uc3Q7
CisKKyAgICAvLyBNb3JlIElFIGV4dGVuc2lvbnMuICBjbGllbnRXaWR0aCBhbmQgY2xpZW50SGVp
Z2h0IHJlcHJlc2VudCB0aGUgaW50ZXJpb3Igb2YgYW4gb2JqZWN0CisgICAgLy8gZXhjbHVkaW5n
IGJvcmRlciBhbmQgc2Nyb2xsYmFyLiAgY2xpZW50TGVmdC9Ub3AgYXJlIGp1c3QgdGhlIGJvcmRl
ckxlZnRXaWR0aCBhbmQgYm9yZGVyVG9wV2lkdGguCisgICAgaW50IGNsaWVudExlZnQoKSBjb25z
dCB7IHJldHVybiBib3JkZXJMZWZ0KCk7IH0KKyAgICBpbnQgY2xpZW50VG9wKCkgY29uc3QgeyBy
ZXR1cm4gYm9yZGVyVG9wKCk7IH0KKyAgICBpbnQgY2xpZW50V2lkdGgoKSBjb25zdDsKKyAgICBp
bnQgY2xpZW50SGVpZ2h0KCkgY29uc3Q7CisKKyAgICAvLyBzY3JvbGxXaWR0aC9zY3JvbGxIZWln
aHQgd2lsbCBiZSB0aGUgc2FtZSBhcyBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgdW5sZXNzIHRo
ZQorICAgIC8vIG9iamVjdCBoYXMgb3ZlcmZsb3c6aGlkZGVuL3Njcm9sbC9hdXRvIHNwZWNpZmll
ZCBhbmQgYWxzbyBoYXMgb3ZlcmZsb3cuCisgICAgLy8gc2Nyb2xsTGVmdC9Ub3AgcmV0dXJuIHRo
ZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4gIFRoZXNlIG1ldGhvZHMgYXJlIHZpcnR1YWwgc28g
dGhhdCBvYmplY3RzIGxpa2UKKyAgICAvLyB0ZXh0YXJlYXMgY2FuIHNjcm9sbCBzaGFkb3cgY29u
dGVudCAoYnV0IHByZXRlbmQgdGhhdCB0aGV5IGFyZSB0aGUgb2JqZWN0cyB0aGF0IGFyZQorICAg
IC8vIHNjcm9sbGluZykuCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsTGVmdCgpIGNvbnN0OworICAg
IHZpcnR1YWwgaW50IHNjcm9sbFRvcCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNjcm9sbFdp
ZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQoaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
b2xsVG9wKGludCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOworICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCB0b3BMZXZlbCA9
IHRydWUpOworICAgIAorICAgIEludFJlY3QgcmVmbGVjdGlvbkJveCgpIGNvbnN0OworICAgIGlu
dCByZWZsZWN0aW9uT2Zmc2V0KCkgY29uc3Q7CisgICAgLy8gR2l2ZW4gYSByZWN0IGluIHRoZSBv
YmplY3QncyBjb29yZGluYXRlIHNwYWNlLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlY3Qg
aW4gdGhlIHJlZmxlY3Rpb24uCisgICAgSW50UmVjdCByZWZsZWN0ZWRSZWN0KGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgs
IGludCB0eSk7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRl
c3RBY3Rpb24pOwogCkBAIC01NSwyMiArMTUwLDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
SW50U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCopIGNvbnN0OwogCi0gICAg
dmlydHVhbCBpbnQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQotICAgIHZpcnR1YWwgaW50
IHlQb3MoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zKGlu
dCB4LCBpbnQgeSk7Ci0KLSAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
d2lkdGg7IH0KLSAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdo
dDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRXaWR0aChpbnQgd2lkdGgpIHsgbV93aWR0aCA9IHdp
ZHRoOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEhlaWdodChpbnQgaGVpZ2h0KSB7IG1faGVpZ2h0
ID0gaGVpZ2h0OyB9Ci0KICAgICB2aXJ0dWFsIGludCBtYXJnaW5Ub3AoKSBjb25zdCB7IHJldHVy
biBtX21hcmdpblRvcDsgfQogICAgIHZpcnR1YWwgaW50IG1hcmdpbkJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFyZ2luQm90dG9tOyB9CiAgICAgdmlydHVhbCBpbnQgbWFyZ2luTGVmdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFyZ2luTGVmdDsgfQogICAgIHZpcnR1YWwgaW50IG1hcmdpblJpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5SaWdodDsgfQogCi0gICAgdmlydHVhbCBJbnRSZWN0
IGJvcmRlckJveCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoMCwgLWJvcmRlclRvcEV4dHJhKCks
IHdpZHRoKCksIGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJh
KCkpOyB9Ci0KICAgICBpbnQgY2FsY0JvcmRlckJveFdpZHRoKGludCB3aWR0aCkgY29uc3Q7CiAg
ICAgaW50IGNhbGNCb3JkZXJCb3hIZWlnaHQoaW50IGhlaWdodCkgY29uc3Q7CiAgICAgaW50IGNh
bGNDb250ZW50Qm94V2lkdGgoaW50IHdpZHRoKSBjb25zdDsKQEAgLTEzMiw2ICsyMTYsOCBAQCBw
dWJsaWM6CiAKICAgICBpbnQgY2FsY1BlcmNlbnRhZ2VIZWlnaHQoY29uc3QgTGVuZ3RoJiBoZWln
aHQpOwogCisgICAgLy8gQmxvY2sgZmxvd3Mgc3ViY2xhc3MgYXZhaWxhYmxlV2lkdGggdG8gaGFu
ZGxlIG11bHRpIGNvbHVtbiBsYXlvdXQgKHNocmlua2luZyB0aGUgd2lkdGggYXZhaWxhYmxlIHRv
IGNoaWxkcmVuIHdoZW4gbGF5aW5nIG91dC4pCisgICAgdmlydHVhbCBpbnQgYXZhaWxhYmxlV2lk
dGgoKSBjb25zdCB7IHJldHVybiBjb250ZW50V2lkdGgoKTsgfQogICAgIHZpcnR1YWwgaW50IGF2
YWlsYWJsZUhlaWdodCgpIGNvbnN0OwogICAgIGludCBhdmFpbGFibGVIZWlnaHRVc2luZyhjb25z
dCBMZW5ndGgmKSBjb25zdDsKIApAQCAtMTY1LDE3ICsyNTEsMjEgQEAgcHVibGljOgogICAgIC8v
IHRoYXQganVzdCB1cGRhdGVzIHRoZSBvYmplY3QncyBwb3NpdGlvbi4KICAgICB2aXJ0dWFsIHZv
aWQgdHJ5TGF5b3V0RG9pbmdQb3NpdGlvbmVkTW92ZW1lbnRPbmx5KCkKICAgICB7Ci0gICAgICAg
IGludCBvbGRXaWR0aCA9IG1fd2lkdGg7CisgICAgICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7
CiAgICAgICAgIGNhbGNXaWR0aCgpOwogICAgICAgICAvLyBJZiB3ZSBzaHJpbmsgdG8gZml0IG91
ciB3aWR0aCBtYXkgaGF2ZSBjaGFuZ2VkLCBzbyB3ZSBzdGlsbCBuZWVkIGZ1bGwgbGF5b3V0Lgot
ICAgICAgICBpZiAob2xkV2lkdGggIT0gbV93aWR0aCkKKyAgICAgICAgaWYgKG9sZFdpZHRoICE9
IHdpZHRoKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhbGNIZWlnaHQoKTsKICAg
ICAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogICAgIH0KIAotICAgIHZpcnR1YWwgSW50UmVj
dCBtYXNrQ2xpcFJlY3QoKTsKKyAgICBJbnRSZWN0IG1hc2tDbGlwUmVjdCgpOwogICAgIAorI2lm
IEVOQUJMRShTVkcpCisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRyYW5z
Zm9ybSgpIGNvbnN0OworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5
bGVXaWxsQ2hhbmdlKFJlbmRlclN0eWxlOjpEaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5
bGUpOwogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShSZW5kZXJTdHlsZTo6RGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKQEAgLTIyMiwxMiArMzEyLDggQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKSA9IDA7CiAKIHByb3RlY3RlZDoK
LSAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSBjb250ZW50cyArIGJvcmRlcnMgKyBwYWRk
aW5nLgotICAgIGludCBtX3dpZHRoOwotICAgIGludCBtX2hlaWdodDsKLQotICAgIGludCBtX3g7
Ci0gICAgaW50IG1feTsKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSBjb250ZW50cyAr
IGJvcmRlcnMgKyBwYWRkaW5nLiAgVGhlIHgveSBsb2NhdGlvbiBpcyByZWxhdGl2ZSB0byBvdXIg
Y29udGFpbmVyICh3aGljaCBpcyBub3QgYWx3YXlzIG91ciBwYXJlbnQpLgorICAgIEludFJlY3Qg
bV9mcmFtZVJlY3Q7CiAKICAgICBpbnQgbV9tYXJnaW5MZWZ0OwogICAgIGludCBtX21hcmdpblJp
Z2h0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCShyZXZpc2lvbiA0MDA3NSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3Miw3ICsxNzIsNyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6dXBkYXRlQmVmb3JlQWZ0ZXJDb250
CiBJbnRSZWN0IFJlbmRlckJ1dHRvbjo6Y29udHJvbENsaXBSZWN0KGludCB0eCwgaW50IHR5KSBj
b25zdAogewogICAgIC8vIENsaXAgdG8gdGhlIHBhZGRpbmcgYm94IHRvIGF0IGxlYXN0IGdpdmUg
Y29udGVudCB0aGUgZXh0cmEgcGFkZGluZyBzcGFjZS4KLSAgICByZXR1cm4gSW50UmVjdCh0eCAr
IGJvcmRlckxlZnQoKSwgdHkgKyBib3JkZXJUb3AoKSwgbV93aWR0aCAtIGJvcmRlckxlZnQoKSAt
IGJvcmRlclJpZ2h0KCksIG1faGVpZ2h0IC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7
CisgICAgcmV0dXJuIEludFJlY3QodHggKyBib3JkZXJMZWZ0KCksIHR5ICsgYm9yZGVyVG9wKCks
IHdpZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpLCBoZWlnaHQoKSAtIGJvcmRl
clRvcCgpIC0gYm9yZGVyQm90dG9tKCkpOwogfQogCiB2b2lkIFJlbmRlckJ1dHRvbjo6dGltZXJG
aXJlZChUaW1lcjxSZW5kZXJCdXR0b24+KikKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29u
dGFpbmVyLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBSZW5k
ZXJDb250YWluZXI6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwogCi0g
ICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6
ZShtX3gsIG1feSkpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3
KCksIHRoaXMsIEludFNpemUoeCgpLCBtX2ZyYW1lUmVjdC55KCkpKTsKIAogICAgIFJlbmRlck9i
amVjdCogY2hpbGQgPSBtX2ZpcnN0Q2hpbGQ7CiAgICAgd2hpbGUgKGNoaWxkKSB7CkBAIC01ODAs
NyArNTgwLDcgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OnJlbW92ZUxlZnRvdmVyQW5vbgogICAg
IGNoaWxkLT5kZXN0cm95KCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJDb250YWluZXI6
OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5KQorVmlzaWJsZVBvc2l0aW9uIFJl
bmRlckNvbnRhaW5lcjo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeFBvcywgaW50IHlQb3Mp
CiB7CiAgICAgLy8gbm8gY2hpbGRyZW4uLi5yZXR1cm4gdGhpcyByZW5kZXIgb2JqZWN0J3MgZWxl
bWVudCwgaWYgdGhlcmUgaXMgb25lLCBhbmQgb2Zmc2V0IDAKICAgICBpZiAoIW1fZmlyc3RDaGls
ZCkKQEAgLTU5MCw4ICs1OTAsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQ29udGFpbmVyOjpw
b3NpdGlvCiAgICAgICAgIGludCByaWdodCA9IGNvbnRlbnRXaWR0aCgpICsgYm9yZGVyUmlnaHQo
KSArIHBhZGRpbmdSaWdodCgpICsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICAg
ICAgaW50IGJvdHRvbSA9IGNvbnRlbnRIZWlnaHQoKSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1Rv
cCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCk7CiAgICAgICAgIAotICAgICAg
ICBpZiAoeCA8IDAgfHwgeCA+IHJpZ2h0IHx8IHkgPCAwIHx8IHkgPiBib3R0b20pIHsKLSAgICAg
ICAgICAgIGlmICh4IDw9IHJpZ2h0IC8gMikKKyAgICAgICAgaWYgKHhQb3MgPCAwIHx8IHhQb3Mg
PiByaWdodCB8fCB5UG9zIDwgMCB8fCB5UG9zID4gYm90dG9tKSB7CisgICAgICAgICAgICBpZiAo
eFBvcyA8PSByaWdodCAvIDIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihQb3NpdGlvbihlbGVtZW50KCksIDApKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGVsZW1lbnQoKSwgbWF4RGVlcE9m
ZnNldChlbGVtZW50KCkpKSk7CkBAIC02MDAsNTUgKzYwMCw2MCBAQCBWaXNpYmxlUG9zaXRpb24g
UmVuZGVyQ29udGFpbmVyOjpwb3NpdGlvCiAKICAgICAvLyBQYXNzIG9mZiB0byB0aGUgY2xvc2Vz
dCBjaGlsZC4KICAgICBpbnQgbWluRGlzdCA9IElOVF9NQVg7Ci0gICAgUmVuZGVyT2JqZWN0KiBj
bG9zZXN0UmVuZGVyZXIgPSAwOwotICAgIGludCBuZXdYID0geDsKLSAgICBpbnQgbmV3WSA9IHk7
CisgICAgUmVuZGVyQm94KiBjbG9zZXN0UmVuZGVyZXIgPSAwOworICAgIGludCBuZXdYID0geFBv
czsKKyAgICBpbnQgbmV3WSA9IHlQb3M7CiAgICAgaWYgKGlzVGFibGVSb3coKSkgewotICAgICAg
ICBuZXdYICs9IHhQb3MoKTsKLSAgICAgICAgbmV3WSArPSB5UG9zKCk7CisgICAgICAgIG5ld1gg
Kz0geCgpOworICAgICAgICBuZXdZICs9IHkoKTsKICAgICB9Ci0gICAgZm9yIChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbV9maXJzdENoaWxkOyByZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5kZXJl
ci0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoIXJlbmRlcmVyLT5maXJzdENoaWxkKCkg
JiYgIXJlbmRlcmVyLT5pc0lubGluZSgpICYmICFyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAKLSAg
ICAgICAgICAgIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkK
KyAgICBmb3IgKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gbV9maXJzdENoaWxkOyByZW5k
ZXJPYmplY3Q7IHJlbmRlck9iamVjdCA9IHJlbmRlck9iamVjdC0+bmV4dFNpYmxpbmcoKSkgewor
ICAgICAgICBpZiAoIXJlbmRlck9iamVjdC0+Zmlyc3RDaGlsZCgpICYmICFyZW5kZXJPYmplY3Qt
PmlzSW5saW5lKCkgJiYgIXJlbmRlck9iamVjdC0+aXNCbG9ja0Zsb3coKSAKKyAgICAgICAgICAg
IHx8IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIGludCB0b3AgPSBib3JkZXJUb3Ao
KSArIHBhZGRpbmdUb3AoKSArIChpc1RhYmxlUm93KCkgPyAwIDogcmVuZGVyZXItPnlQb3MoKSk7
CisgICAgICAgIGlmICghcmVuZGVyT2JqZWN0LT5pc0JveCgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIAorICAgICAgICBSZW5kZXJCb3gqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8
UmVuZGVyQm94Kj4ocmVuZGVyT2JqZWN0KTsKKworICAgICAgICBpbnQgdG9wID0gYm9yZGVyVG9w
KCkgKyBwYWRkaW5nVG9wKCkgKyAoaXNUYWJsZVJvdygpID8gMCA6IHJlbmRlcmVyLT55KCkpOwog
ICAgICAgICBpbnQgYm90dG9tID0gdG9wICsgcmVuZGVyZXItPmNvbnRlbnRIZWlnaHQoKTsKLSAg
ICAgICAgaW50IGxlZnQgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgKGlzVGFibGVS
b3coKSA/IDAgOiByZW5kZXJlci0+eFBvcygpKTsKKyAgICAgICAgaW50IGxlZnQgPSBib3JkZXJM
ZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgKGlzVGFibGVSb3coKSA/IDAgOiByZW5kZXJlci0+eCgp
KTsKICAgICAgICAgaW50IHJpZ2h0ID0gbGVmdCArIHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKTsK
ICAgICAgICAgCi0gICAgICAgIGlmICh4IDw9IHJpZ2h0ICYmIHggPj0gbGVmdCAmJiB5IDw9IHRv
cCAmJiB5ID49IGJvdHRvbSkgeworICAgICAgICBpZiAoeFBvcyA8PSByaWdodCAmJiB4UG9zID49
IGxlZnQgJiYgeVBvcyA8PSB0b3AgJiYgeVBvcyA+PSBib3R0b20pIHsKICAgICAgICAgICAgIGlm
IChyZW5kZXJlci0+aXNUYWJsZVJvdygpKQotICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJl
ci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4ICsgbmV3WCAtIHJlbmRlcmVyLT54UG9zKCksIHkg
KyBuZXdZIC0gcmVuZGVyZXItPnlQb3MoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXIt
PnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCAtIHJlbmRlcmVyLT54UG9zKCksIHkgLSByZW5kZXJl
ci0+eVBvcygpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9y
Q29vcmRpbmF0ZXMoeFBvcyArIG5ld1ggLSByZW5kZXJlci0+eCgpLCB5UG9zICsgbmV3WSAtIHJl
bmRlcmVyLT55KCkpOworICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvckNv
b3JkaW5hdGVzKHhQb3MgLSByZW5kZXJlci0+eCgpLCB5UG9zIC0gcmVuZGVyZXItPnkoKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBGaW5kIHRoZSBkaXN0YW5jZSBmcm9tICh4LCB5KSB0byB0
aGUgYm94LiAgU3BsaXQgdGhlIHNwYWNlIGFyb3VuZCB0aGUgYm94IGludG8gOCBwaWVjZXMKICAg
ICAgICAgLy8gYW5kIHVzZSBhIGRpZmZlcmVudCBjb21wYXJlIGRlcGVuZGluZyBvbiB3aGljaCBw
aWVjZSAoeCwgeSkgaXMgaW4uCiAgICAgICAgIEludFBvaW50IGNtcDsKLSAgICAgICAgaWYgKHgg
PiByaWdodCkgewotICAgICAgICAgICAgaWYgKHkgPCB0b3ApCisgICAgICAgIGlmICh4UG9zID4g
cmlnaHQpIHsKKyAgICAgICAgICAgIGlmICh5UG9zIDwgdG9wKQogICAgICAgICAgICAgICAgIGNt
cCA9IEludFBvaW50KHJpZ2h0LCB0b3ApOwotICAgICAgICAgICAgZWxzZSBpZiAoeSA+IGJvdHRv
bSkKKyAgICAgICAgICAgIGVsc2UgaWYgKHlQb3MgPiBib3R0b20pCiAgICAgICAgICAgICAgICAg
Y21wID0gSW50UG9pbnQocmlnaHQsIGJvdHRvbSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgY21wID0gSW50UG9pbnQocmlnaHQsIHkpOwotICAgICAgICB9IGVsc2UgaWYgKHgg
PCBsZWZ0KSB7Ci0gICAgICAgICAgICBpZiAoeSA8IHRvcCkKKyAgICAgICAgICAgICAgICBjbXAg
PSBJbnRQb2ludChyaWdodCwgeVBvcyk7CisgICAgICAgIH0gZWxzZSBpZiAoeFBvcyA8IGxlZnQp
IHsKKyAgICAgICAgICAgIGlmICh5UG9zIDwgdG9wKQogICAgICAgICAgICAgICAgIGNtcCA9IElu
dFBvaW50KGxlZnQsIHRvcCk7Ci0gICAgICAgICAgICBlbHNlIGlmICh5ID4gYm90dG9tKQorICAg
ICAgICAgICAgZWxzZSBpZiAoeVBvcyA+IGJvdHRvbSkKICAgICAgICAgICAgICAgICBjbXAgPSBJ
bnRQb2ludChsZWZ0LCBib3R0b20pOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGNtcCA9IEludFBvaW50KGxlZnQsIHkpOworICAgICAgICAgICAgICAgIGNtcCA9IEludFBvaW50
KGxlZnQsIHlQb3MpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHkgPCB0b3Ap
Ci0gICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQoeCwgdG9wKTsKKyAgICAgICAgICAgIGlm
ICh5UG9zIDwgdG9wKQorICAgICAgICAgICAgICAgIGNtcCA9IEludFBvaW50KHhQb3MsIHRvcCk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY21wID0gSW50UG9pbnQoeCwgYm90
dG9tKTsKKyAgICAgICAgICAgICAgICBjbXAgPSBJbnRQb2ludCh4UG9zLCBib3R0b20pOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBpbnQgeDFtaW51c3gyID0gY21wLngoKSAtIHg7Ci0g
ICAgICAgIGludCB5MW1pbnVzeTIgPSBjbXAueSgpIC0geTsKKyAgICAgICAgaW50IHgxbWludXN4
MiA9IGNtcC54KCkgLSB4UG9zOworICAgICAgICBpbnQgeTFtaW51c3kyID0gY21wLnkoKSAtIHlQ
b3M7CiAgICAgICAgIAogICAgICAgICBpbnQgZGlzdCA9IHgxbWludXN4MiAqIHgxbWludXN4MiAr
IHkxbWludXN5MiAqIHkxbWludXN5MjsKICAgICAgICAgaWYgKGRpc3QgPCBtaW5EaXN0KSB7CkBA
IC02NTgsNyArNjYzLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckNvbnRhaW5lcjo6cG9zaXRp
bwogICAgIH0KICAgICAKICAgICBpZiAoY2xvc2VzdFJlbmRlcmVyKQotICAgICAgICByZXR1cm4g
Y2xvc2VzdFJlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKG5ld1ggLSBjbG9zZXN0UmVu
ZGVyZXItPnhQb3MoKSwgbmV3WSAtIGNsb3Nlc3RSZW5kZXJlci0+eVBvcygpKTsKKyAgICAgICAg
cmV0dXJuIGNsb3Nlc3RSZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhuZXdYIC0gY2xv
c2VzdFJlbmRlcmVyLT54KCksIG5ld1kgLSBjbG9zZXN0UmVuZGVyZXItPnkoKSk7CiAgICAgCiAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihlbGVtZW50KCksIDAsIERPV05TVFJFQU0pOwogfQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmgJKHJldmlzaW9uIDQwMDc1KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogZmlyc3RDaGls
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZDsgfQogICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQogCisgICAgLy8g
VXNlIHRoaXMgd2l0aCBjYXV0aW9uISBObyB0eXBlIGNoZWNraW5nIGlzIGRvbmUhCisgICAgUmVu
ZGVyQm94KiBmaXJzdENoaWxkQm94KCkgY29uc3QgeyBBU1NFUlQoIWZpcnN0Q2hpbGQoKSB8fCBm
aXJzdENoaWxkKCktPmlzQm94KCkpOyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obV9m
aXJzdENoaWxkKTsgfQorICAgIFJlbmRlckJveCogbGFzdENoaWxkQm94KCkgY29uc3QgeyBBU1NF
UlQoIWxhc3RDaGlsZCgpIHx8IGxhc3RDaGlsZCgpLT5pc0JveCgpKTsgcmV0dXJuIHN0YXRpY19j
YXN0PFJlbmRlckJveCo+KG1fbGFzdENoaWxkKTsgfQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBj
YW5IYXZlQ2hpbGRyZW4oKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVy
T2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqKTsKQEAgLTY1LDcgKzY5LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01B
WCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIGNv
bGxlY3RBYnNvbHV0ZUxpbmVCb3hRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gVUlOVF9NQVgsIGJvb2wgdXNlU2Vs
ZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIFJlbmRl
ck9iamVjdCogbV9maXJzdENoaWxkOwogICAgIFJlbmRlck9iamVjdCogbV9sYXN0Q2hpbGQ7CiB9
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkocmV2aXNpb24gNDAwNzUp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDcgKzQ4LDcgQEAgUmVuZGVyRmllbGRzZXQ6OlJlbmRlckZpZWxkc2V0KE5vZGUqIGVs
ZQogdm9pZCBSZW5kZXJGaWVsZHNldDo6Y2FsY1ByZWZXaWR0aHMoKQogewogICAgIFJlbmRlckJs
b2NrOjpjYWxjUHJlZldpZHRocygpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIGxlZ2VuZCA9IGZp
bmRMZWdlbmQoKSkgeworICAgIGlmIChSZW5kZXJCb3gqIGxlZ2VuZCA9IGZpbmRMZWdlbmQoKSkg
ewogICAgICAgICBpbnQgbGVnZW5kTWluV2lkdGggPSBsZWdlbmQtPm1pblByZWZXaWR0aCgpOwog
CiAgICAgICAgIExlbmd0aCBsZWdlbmRNYXJnaW5MZWZ0ID0gbGVnZW5kLT5zdHlsZSgpLT5tYXJn
aW5MZWZ0KCk7CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgUmVuZGVyRmllbGRzZXQ6OmNhbGNQcmVm
V2lkdGhzKCkKIAogUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6bGF5b3V0TGVnZW5kKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbikKIHsKLSAgICBSZW5kZXJPYmplY3QqIGxlZ2VuZCA9IGZpbmRM
ZWdlbmQoKTsKKyAgICBSZW5kZXJCb3gqIGxlZ2VuZCA9IGZpbmRMZWdlbmQoKTsKICAgICBpZiAo
bGVnZW5kKSB7CiAgICAgICAgIGlmIChyZWxheW91dENoaWxkcmVuKQogICAgICAgICAgICAgbGVn
ZW5kLT5zZXROZWVkc0xheW91dCh0cnVlKTsKQEAgLTc5LDE4ICs3OSwxOCBAQCBSZW5kZXJPYmpl
Y3QqIFJlbmRlckZpZWxkc2V0OjpsYXlvdXRMZWdlCiAgICAgICAgICAgICAgICAgICAgIHhQb3Mg
PSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBjYXNlIENFTlRFUjoKLSAgICAgICAgICAgICAgICAgICAgeFBv
cyA9IChtX3dpZHRoIC0gbGVnZW5kLT53aWR0aCgpKSAvIDI7CisgICAgICAgICAgICAgICAgICAg
IHhQb3MgPSAod2lkdGgoKSAtIGxlZ2VuZC0+d2lkdGgoKSkgLyAyOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICB4UG9zID0gbV93aWR0aCAtIHBhZGRpbmdSaWdodCgpIC0gYm9yZGVyUmlnaHQoKSAtIGxlZ2Vu
ZC0+d2lkdGgoKSAtIGxlZ2VuZC0+bWFyZ2luUmlnaHQoKTsKKyAgICAgICAgICAgICAgICAgICAg
eFBvcyA9IHdpZHRoKCkgLSBwYWRkaW5nUmlnaHQoKSAtIGJvcmRlclJpZ2h0KCkgLSBsZWdlbmQt
PndpZHRoKCkgLSBsZWdlbmQtPm1hcmdpblJpZ2h0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGxlZ2VuZC0+c3R5bGUoKS0+dGV4dEFsaWdu
KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFJJR0hUOgotICAgICAgICAgICAgICAgICAgICB4
UG9zID0gbV93aWR0aCAtIHBhZGRpbmdSaWdodCgpIC0gYm9yZGVyUmlnaHQoKSAtIGxlZ2VuZC0+
d2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgeFBvcyA9IHdpZHRoKCkgLSBwYWRkaW5nUmln
aHQoKSAtIGJvcmRlclJpZ2h0KCkgLSBsZWdlbmQtPndpZHRoKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQ0VOVEVSOgotICAgICAgICAgICAgICAg
ICAgICB4UG9zID0gKG1fd2lkdGggLSBsZWdlbmQtPndpZHRoKCkpIC8gMjsKKyAgICAgICAgICAg
ICAgICAgICAgeFBvcyA9ICh3aWR0aCgpIC0gbGVnZW5kLT53aWR0aCgpKSAvIDI7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgICAgIHhQb3MgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgbGVnZW5kLT5t
YXJnaW5MZWZ0KCk7CkBAIC05OCwxMyArOTgsMTMgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVs
ZHNldDo6bGF5b3V0TGVnZQogICAgICAgICB9CiAgICAgICAgIGludCBiID0gYm9yZGVyVG9wKCk7
CiAgICAgICAgIGludCBoID0gbGVnZW5kLT5oZWlnaHQoKTsKLSAgICAgICAgbGVnZW5kLT5zZXRQ
b3MoeFBvcywgbWF4KChiLWgpLzIsIDApKTsKLSAgICAgICAgbV9oZWlnaHQgPSBtYXgoYixoKSAr
IHBhZGRpbmdUb3AoKTsKKyAgICAgICAgbGVnZW5kLT5zZXRMb2NhdGlvbih4UG9zLCBtYXgoKGIt
aCkvMiwgMCkpOworICAgICAgICBzZXRIZWlnaHQobWF4KGIsaCkgKyBwYWRkaW5nVG9wKCkpOwog
ICAgIH0KICAgICByZXR1cm4gbGVnZW5kOwogfQogCi1SZW5kZXJPYmplY3QqIFJlbmRlckZpZWxk
c2V0OjpmaW5kTGVnZW5kKCkgY29uc3QKK1JlbmRlckJveCogUmVuZGVyRmllbGRzZXQ6OmZpbmRM
ZWdlbmQoKSBjb25zdAogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaXJzdENo
aWxkKCk7IGxlZ2VuZDsgbGVnZW5kID0gbGVnZW5kLT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
IGlmICghbGVnZW5kLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgbGVnZW5kLT5lbGVtZW50
KCkgJiYKQEAgLTExMyw3ICsxMTMsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckZpZWxkc2V0Ojpm
aW5kTGVnZW5kCiAgICAgICAgICAgICB8fCBsZWdlbmQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShX
TUxOYW1lczo6aW5zZXJ0ZWRMZWdlbmRUYWcpCiAjZW5kaWYKICAgICAgICAgICAgKQotICAgICAg
ICAgICAgcmV0dXJuIGxlZ2VuZDsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJCb3gqPihsZWdlbmQpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTEyMiwxMiArMTIy
LDEyIEBAIHZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94RGVjb3JhdGlvbnMKIHsKICAgICBp
bnQgdyA9IHdpZHRoKCk7CiAgICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkg
KyBib3JkZXJCb3R0b21FeHRyYSgpOwotICAgIFJlbmRlck9iamVjdCogbGVnZW5kID0gZmluZExl
Z2VuZCgpOworICAgIFJlbmRlckJveCogbGVnZW5kID0gZmluZExlZ2VuZCgpOwogICAgIGlmICgh
bGVnZW5kKQogICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBhaW50Qm94RGVjb3JhdGlvbnMo
cGFpbnRJbmZvLCB0eCwgdHkpOwogCi0gICAgaW50IHlPZmYgPSAobGVnZW5kLT55UG9zKCkgPiAw
KSA/IDAgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7Ci0gICAgaW50IGxl
Z2VuZEJvdHRvbSA9IHR5ICsgbGVnZW5kLT55UG9zKCkgKyBsZWdlbmQtPmhlaWdodCgpOworICAg
IGludCB5T2ZmID0gKGxlZ2VuZC0+eSgpID4gMCkgPyAwIDogKGxlZ2VuZC0+aGVpZ2h0KCkgLSBi
b3JkZXJUb3AoKSkgLyAyOworICAgIGludCBsZWdlbmRCb3R0b20gPSB0eSArIGxlZ2VuZC0+eSgp
ICsgbGVnZW5kLT5oZWlnaHQoKTsKICAgICBoIC09IHlPZmY7CiAgICAgdHkgKz0geU9mZiAtIGJv
cmRlclRvcEV4dHJhKCk7CiAKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIFJlbmRlckZpZWxkc2V0
OjpwYWludEJveERlY29yYXRpb25zCiAKICAgICAvLyBTYXZlIHRpbWUgYnkgbm90IHNhdmluZyBh
bmQgcmVzdG9yaW5nIHRoZSBHcmFwaGljc0NvbnRleHQgaW4gdGhlIHN0cmFpZ2h0IGJvcmRlciBj
YXNlCiAgICAgaWYgKCFzdHlsZSgpLT5oYXNCb3JkZXJSYWRpdXMoKSkKLSAgICAgICAgcmV0dXJu
IHBhaW50Qm9yZGVyTWludXNMZWdlbmQocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgdywgaCwg
c3R5bGUoKSwgbGVnZW5kLT54UG9zKCksIGxlZ2VuZC0+d2lkdGgoKSwgbGVnZW5kQm90dG9tKTsK
KyAgICAgICAgcmV0dXJuIHBhaW50Qm9yZGVyTWludXNMZWdlbmQocGFpbnRJbmZvLmNvbnRleHQs
IHR4LCB0eSwgdywgaCwgc3R5bGUoKSwgbGVnZW5kLT54KCksIGxlZ2VuZC0+d2lkdGgoKSwgbGVn
ZW5kQm90dG9tKTsKICAgICAKICAgICAvLyBXZSBoYXZlIHJvdW5kZWQgYm9yZGVycywgY3JlYXRl
IGEgY2xpcHBpbmcgcmVnaW9uIAogICAgIC8vIGFyb3VuZCB0aGUgbGVnZW5kIGFuZCBwYWludCB0
aGUgYm9yZGVyIGFzIG5vcm1hbApAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgUmVuZGVyRmllbGRz
ZXQ6OnBhaW50Qm94RGVjb3JhdGlvbnMKICAgICBpbnQgY2xpcFRvcCA9IHR5OwogICAgIGludCBj
bGlwSGVpZ2h0ID0gbWF4KHN0YXRpY19jYXN0PGludD4oc3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgo
KSksIGxlZ2VuZC0+aGVpZ2h0KCkpOwogCi0gICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwT3V0KElu
dFJlY3QodHggKyBsZWdlbmQtPnhQb3MoKSwgY2xpcFRvcCwKKyAgICBncmFwaGljc0NvbnRleHQt
PmNsaXBPdXQoSW50UmVjdCh0eCArIGxlZ2VuZC0+eCgpLCBjbGlwVG9wLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLT53aWR0aCgpLCBjbGlwSGVpZ2h0KSk7
CiAgICAgcGFpbnRCb3JkZXIocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgdywgaCwgc3R5bGUo
KSwgdHJ1ZSwgdHJ1ZSk7CiAKQEAgLTE2OCwxMSArMTY4LDExIEBAIHZvaWQgUmVuZGVyRmllbGRz
ZXQ6OnBhaW50TWFzayhQYWludEluZm8KIAogICAgIGludCB3ID0gd2lkdGgoKTsKICAgICBpbnQg
aCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7Ci0g
ICAgUmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCk7CisgICAgUmVuZGVyQm94KiBs
ZWdlbmQgPSBmaW5kTGVnZW5kKCk7CiAgICAgaWYgKCFsZWdlbmQpCiAgICAgICAgIHJldHVybiBS
ZW5kZXJCbG9jazo6cGFpbnRNYXNrKHBhaW50SW5mbywgdHgsIHR5KTsKIAotICAgIGludCB5T2Zm
ID0gKGxlZ2VuZC0+eVBvcygpID4gMCkgPyAwIDogKGxlZ2VuZC0+aGVpZ2h0KCkgLSBib3JkZXJU
b3AoKSkgLyAyOworICAgIGludCB5T2ZmID0gKGxlZ2VuZC0+eSgpID4gMCkgPyAwIDogKGxlZ2Vu
ZC0+aGVpZ2h0KCkgLSBib3JkZXJUb3AoKSkgLyAyOwogICAgIGggLT0geU9mZjsKICAgICB0eSAr
PSB5T2ZmIC0gYm9yZGVyVG9wRXh0cmEoKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmllbGRzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVs
ZHNldC5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxk
c2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5oZWlnaHQoKS5pc0F1dG8oKTsgfQogICAgIHZpcnR1YWwgYm9vbCBzdHJldGNo
ZXNUb01pbkludHJpbnNpY1dpZHRoKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgUmVu
ZGVyT2JqZWN0KiBmaW5kTGVnZW5kKCkgY29uc3Q7CisgICAgUmVuZGVyQm94KiBmaW5kTGVnZW5k
KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2Uo
UmVuZGVyU3R5bGU6OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCShyZXZpc2lv
biA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OnVwZGF0ZUZyb20KIAogaW50IFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjptYXhG
aWxlbmFtZVdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbWF4KDAsIGNvbnRlbnRXaWR0aCgp
IC0gbV9idXR0b24tPnJlbmRlcmVyKCktPndpZHRoKCkgLSBhZnRlckJ1dHRvblNwYWNpbmcKKyAg
ICByZXR1cm4gbWF4KDAsIGNvbnRlbnRXaWR0aCgpIC0gbV9idXR0b24tPnJlbmRlckJveCgpLT53
aWR0aCgpIC0gYWZ0ZXJCdXR0b25TcGFjaW5nCiAgICAgICAgIC0gKG1fZmlsZUNob29zZXItPmlj
b24oKSA/IGljb25XaWR0aCArIGljb25GaWxlbmFtZVNwYWNpbmcgOiAwKSk7CiB9CiAKQEAgLTE5
MCw3ICsxOTAsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjCiAg
ICAgICAgIAogICAgICAgICAvLyBEZXRlcm1pbmUgd2hlcmUgdGhlIGZpbGVuYW1lIHNob3VsZCBi
ZSBwbGFjZWQKICAgICAgICAgaW50IGNvbnRlbnRMZWZ0ID0gdHggKyBib3JkZXJMZWZ0KCkgKyBw
YWRkaW5nTGVmdCgpOwotICAgICAgICBpbnQgYnV0dG9uQW5kSWNvbldpZHRoID0gbV9idXR0b24t
PnJlbmRlcmVyKCktPndpZHRoKCkgKyBhZnRlckJ1dHRvblNwYWNpbmcKKyAgICAgICAgaW50IGJ1
dHRvbkFuZEljb25XaWR0aCA9IG1fYnV0dG9uLT5yZW5kZXJCb3goKS0+d2lkdGgoKSArIGFmdGVy
QnV0dG9uU3BhY2luZwogICAgICAgICAgICAgKyAobV9maWxlQ2hvb3Nlci0+aWNvbigpID8gaWNv
bldpZHRoICsgaWNvbkZpbGVuYW1lU3BhY2luZyA6IDApOwogICAgICAgICBpbnQgdGV4dFg7CiAg
ICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCkBAIC0yMTMsOSArMjEzLDkg
QEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogICAgICAgICAgICAg
aW50IGljb25ZID0gdHkgKyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIChjb250ZW50SGVp
Z2h0KCkgLSBpY29uSGVpZ2h0KSAvIDI7CiAgICAgICAgICAgICBpbnQgaWNvblg7CiAgICAgICAg
ICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgICAgIGlj
b25YID0gY29udGVudExlZnQgKyBtX2J1dHRvbi0+cmVuZGVyZXIoKS0+d2lkdGgoKSArIGFmdGVy
QnV0dG9uU3BhY2luZzsKKyAgICAgICAgICAgICAgICBpY29uWCA9IGNvbnRlbnRMZWZ0ICsgbV9i
dXR0b24tPnJlbmRlckJveCgpLT53aWR0aCgpICsgYWZ0ZXJCdXR0b25TcGFjaW5nOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGljb25YID0gY29udGVudExlZnQgKyBjb250ZW50
V2lkdGgoKSAtIG1fYnV0dG9uLT5yZW5kZXJlcigpLT53aWR0aCgpIC0gYWZ0ZXJCdXR0b25TcGFj
aW5nIC0gaWNvbldpZHRoOworICAgICAgICAgICAgICAgIGljb25YID0gY29udGVudExlZnQgKyBj
b250ZW50V2lkdGgoKSAtIG1fYnV0dG9uLT5yZW5kZXJCb3goKS0+d2lkdGgoKSAtIGFmdGVyQnV0
dG9uU3BhY2luZyAtIGljb25XaWR0aDsKIAogICAgICAgICAgICAgLy8gRHJhdyB0aGUgZmlsZSBp
Y29uCiAgICAgICAgICAgICBtX2ZpbGVDaG9vc2VyLT5pY29uKCktPnBhaW50KHBhaW50SW5mby5j
b250ZXh0LCBJbnRSZWN0KGljb25YLCBpY29uWSwgaWNvbldpZHRoLCBpY29uSGVpZ2h0KSk7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiA0MDA3
NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsMTEgKzQ1LDExIEBAIHB1YmxpYzoKICAgICAgICAgbGFzdE9yZGluYWwgPSAx
OyAKICAgICAgICAgaWYgKCFmb3J3YXJkKSB7CiAgICAgICAgICAgICAvLyBObyBjaG9pY2UsIHNp
bmNlIHdlJ3JlIGdvaW5nIGJhY2t3YXJkcywgd2UgaGF2ZSB0byBmaW5kIG91dCB0aGUgaGlnaGVz
dCBvcmRpbmFsIHVwIGZyb250LgotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGJv
eC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgUmVuZGVyQm94KiBjaGlsZCA9IGJveC0+Zmly
c3RDaGlsZEJveCgpOwogICAgICAgICAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5ib3hPcmRpbmFsR3JvdXAoKSA+IGxhc3RPcmRpbmFsKQog
ICAgICAgICAgICAgICAgICAgICBsYXN0T3JkaW5hbCA9IGNoaWxkLT5zdHlsZSgpLT5ib3hPcmRp
bmFsR3JvdXAoKTsKLSAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
OworICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02MSwyOSArNjEsMjggQEAgcHVibGlj
OgogICAgICAgICBjdXJyZW50T3JkaW5hbCA9IGZvcndhcmQgPyAwIDogbGFzdE9yZGluYWwrMTsK
ICAgICB9CiAKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0KCkgeworICAgIFJlbmRlckJveCogZmly
c3QoKSB7CiAgICAgICAgIHJlc2V0KCk7CiAgICAgICAgIHJldHVybiBuZXh0KCk7CiAgICAgfQog
ICAgIAotICAgIFJlbmRlck9iamVjdCogbmV4dCgpIHsKLQorICAgIFJlbmRlckJveCogbmV4dCgp
IHsKICAgICAgICAgZG8geyAKICAgICAgICAgICAgIGlmICghY3VycmVudCkgewogICAgICAgICAg
ICAgICAgIGlmIChmb3J3YXJkKSB7CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPcmRpbmFs
Kys7IAogICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE9yZGluYWwgPiBsYXN0T3JkaW5h
bCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50ID0gYm94LT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnQgPSBib3gtPmZpcnN0Q2hpbGRCb3goKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50T3JkaW5hbC0tOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudE9yZGluYWwgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gYm94LT5sYXN0Q2hpbGQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudCA9IGJveC0+bGFzdENoaWxkQm94KCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGN1cnJlbnQgPSBmb3J3YXJkID8gY3VycmVudC0+bmV4dFNpYmxpbmcoKSA6IGN1cnJlbnQtPnBy
ZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBmb3J3YXJkID8gY3Vy
cmVudC0+bmV4dFNpYmxpbmdCb3goKSA6IGN1cnJlbnQtPnByZXZpb3VzU2libGluZ0JveCgpOwog
ICAgICAgICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudC0+c3R5bGUoKS0+Ym94T3JkaW5hbEdy
b3VwKCkgPiBsYXN0T3JkaW5hbCkKICAgICAgICAgICAgICAgICBsYXN0T3JkaW5hbCA9IGN1cnJl
bnQtPnN0eWxlKCktPmJveE9yZGluYWxHcm91cCgpOwogICAgICAgICB9IHdoaWxlICghY3VycmVu
dCB8fCBjdXJyZW50LT5zdHlsZSgpLT5ib3hPcmRpbmFsR3JvdXAoKSAhPSBjdXJyZW50T3JkaW5h
bCB8fApAQCAtOTMsNyArOTIsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgUmVuZGVyRmxl
eGlibGVCb3gqIGJveDsKLSAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQ7CisgICAgUmVuZGVyQm94
KiBjdXJyZW50OwogICAgIGJvb2wgZm9yd2FyZDsKICAgICB1bnNpZ25lZCBpbnQgY3VycmVudE9y
ZGluYWw7CiAgICAgdW5zaWduZWQgaW50IGxhc3RPcmRpbmFsOwpAQCAtMTEyLDEzICsxMTEsMTAg
QEAgUmVuZGVyRmxleGlibGVCb3g6On5SZW5kZXJGbGV4aWJsZUJveCgpCiAKIHZvaWQgUmVuZGVy
RmxleGlibGVCb3g6OmNhbGNIb3Jpem9udGFsUHJlZldpZHRocygpCiB7Ci0gICAgUmVuZGVyT2Jq
ZWN0ICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoY2hpbGQpIHsKKyAgICBmb3Ig
KFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAgIC8vIHBvc2l0aW9uZWQgY2hpbGRyZW4gZG9u
J3QgYWZmZWN0IHRoZSBtaW5tYXh3aWR0aAotICAgICAgICBpZiAoY2hpbGQtPmlzUG9zaXRpb25l
ZCgpIHx8IGNoaWxkLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gQ09MTEFQU0UpIHsKLSAgICAg
ICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGlmIChjaGlsZC0+
aXNQb3NpdGlvbmVkKCkgfHwgY2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBDT0xMQVBT
RSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CiAKICAgICAgICAgLy8gQSBtYXJn
aW4gYmFzaWNhbGx5IGhhcyB0aHJlZSB0eXBlczogZml4ZWQsIHBlcmNlbnRhZ2UsIGFuZCBhdXRv
ICh2YXJpYWJsZSkuCiAgICAgICAgIC8vIEF1dG8gYW5kIHBlcmNlbnRhZ2UgbWFyZ2lucyBzaW1w
bHkgYmVjb21lIDAgd2hlbiBjb21wdXRpbmcgbWluL21heCB3aWR0aC4KQEAgLTEzNCwyMSArMTMw
LDE1IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNIb3Jpem9udGFsUHIKIAogICAgICAg
ICBtX21pblByZWZXaWR0aCArPSBjaGlsZC0+bWluUHJlZldpZHRoKCkgKyBtYXJnaW47CiAgICAg
ICAgIG1fbWF4UHJlZldpZHRoICs9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKSArIG1hcmdpbjsKLQot
ICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgIH0gICAgCiB9CiAKIHZv
aWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNWZXJ0aWNhbFByZWZXaWR0aHMoKQogewotICAgIFJl
bmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUoY2hpbGQgIT0gMCkK
LSAgICB7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgewogICAgICAgICAvLyBQb3NpdGlv
bmVkIGNoaWxkcmVuIGFuZCBjb2xsYXBzZWQgY2hpbGRyZW4gZG9uJ3QgYWZmZWN0IHRoZSBtaW4v
bWF4IHdpZHRoCi0gICAgICAgIGlmIChjaGlsZC0+aXNQb3NpdGlvbmVkKCkgfHwgY2hpbGQtPnN0
eWxlKCktPnZpc2liaWxpdHkoKSA9PSBDT0xMQVBTRSkgewotICAgICAgICAgICAgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1Bvc2l0aW9uZWQoKSB8
fCBjaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IENPTExBUFNFKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KIAogICAgICAgICAvLyBBIG1hcmdpbiBiYXNpY2FsbHkgaGFz
IHRocmVlIHR5cGVzOiBmaXhlZCwgcGVyY2VudGFnZSwgYW5kIGF1dG8gKHZhcmlhYmxlKS4KICAg
ICAgICAgLy8gQXV0by9wZXJjZW50YWdlIG1hcmdpbnMgc2ltcGx5IGJlY29tZSAwIHdoZW4gY29t
cHV0aW5nIG1pbi9tYXggd2lkdGguCkBAIC0xNjYsOCArMTU2LDYgQEAgdm9pZCBSZW5kZXJGbGV4
aWJsZUJveDo6Y2FsY1ZlcnRpY2FsUHJlZgogICAgICAgICAKICAgICAgICAgdyA9IGNoaWxkLT5t
YXhQcmVmV2lkdGgoKSArIG1hcmdpbjsKICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgodywg
bV9tYXhQcmVmV2lkdGgpOwotCi0gICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
CiAgICAgfSAgICAKIH0KIApAQCAtMjIwLDIxICsyMDgsMjEgQEAgdm9pZCBSZW5kZXJGbGV4aWJs
ZUJveDo6bGF5b3V0QmxvY2soYm9vbAogICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVP
dXRsaW5lQm91bmRzKCk7CiAgICAgfQogCi0gICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRl
UHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZShtX3gsIG1feSksIGhhc1RyYW5zZm9ybSgpIHx8
IGhhc1JlZmxlY3Rpb24oKSk7CisgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVy
KHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIG1fZnJhbWVSZWN0LnkoKSksIGhhc1RyYW5zZm9y
bSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7CiAKLSAgICBpbnQgcHJldmlvdXNXaWR0aCA9IG1fd2lk
dGg7Ci0gICAgaW50IHByZXZpb3VzSGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgaW50IHByZXZpb3Vz
V2lkdGggPSB3aWR0aCgpOworICAgIGludCBwcmV2aW91c0hlaWdodCA9IGhlaWdodCgpOwogICAg
IAogICAgIGNhbGNXaWR0aCgpOwogICAgIGNhbGNIZWlnaHQoKTsKLSAgICBtX292ZXJmbG93V2lk
dGggPSBtX3dpZHRoOworICAgIG1fb3ZlcmZsb3dXaWR0aCA9IHdpZHRoKCk7CiAKLSAgICBpZiAo
cHJldmlvdXNXaWR0aCAhPSBtX3dpZHRoIHx8IHByZXZpb3VzSGVpZ2h0ICE9IG1faGVpZ2h0IHx8
CisgICAgaWYgKHByZXZpb3VzV2lkdGggIT0gd2lkdGgoKSB8fCBwcmV2aW91c0hlaWdodCAhPSBo
ZWlnaHQoKSB8fAogICAgICAgICAocGFyZW50KCktPmlzRmxleGlibGVCb3goKSAmJiBwYXJlbnQo
KS0+c3R5bGUoKS0+Ym94T3JpZW50KCkgPT0gSE9SSVpPTlRBTCAmJgogICAgICAgICAgcGFyZW50
KCktPnN0eWxlKCktPmJveEFsaWduKCkgPT0gQlNUUkVUQ0gpKQogICAgICAgICByZWxheW91dENo
aWxkcmVuID0gdHJ1ZTsKIAotICAgIG1faGVpZ2h0ID0gMDsKKyAgICBzZXRIZWlnaHQoMCk7CiAg
ICAgbV9vdmVyZmxvd0hlaWdodCA9IDA7CiAgICAgbV9mbGV4aW5nQ2hpbGRyZW4gPSBtX3N0cmV0
Y2hpbmdDaGlsZHJlbiA9IGZhbHNlOwogCkBAIC0yNTMsMjEgKzI0MSwyMSBAQCB2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sCiAgICAgZWxzZQogICAgICAgICBsYXlvdXRW
ZXJ0aWNhbEJveChyZWxheW91dENoaWxkcmVuKTsKIAotICAgIGludCBvbGRIZWlnaHQgPSBtX2hl
aWdodDsKKyAgICBpbnQgb2xkSGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgY2FsY0hlaWdodCgpOwot
ICAgIGlmIChvbGRIZWlnaHQgIT0gbV9oZWlnaHQpIHsKKyAgICBpZiAob2xkSGVpZ2h0ICE9IGhl
aWdodCgpKSB7CiAgICAgICAgIC8vIElmIHRoZSBibG9jayBnb3QgZXhwYW5kZWQgaW4gc2l6ZSwg
dGhlbiBpbmNyZWFzZSBvdXIgb3ZlcmZsb3doZWlnaHQgdG8gbWF0Y2guCi0gICAgICAgIGlmICht
X292ZXJmbG93SGVpZ2h0ID4gbV9oZWlnaHQpCisgICAgICAgIGlmIChtX292ZXJmbG93SGVpZ2h0
ID4gaGVpZ2h0KCkpCiAgICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0IC09IChib3JkZXJCb3R0
b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7Ci0g
ICAgICAgIGlmIChtX292ZXJmbG93SGVpZ2h0IDwgbV9oZWlnaHQpCi0gICAgICAgICAgICBtX292
ZXJmbG93SGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAgIGlmIChtX292ZXJmbG93SGVpZ2h0IDwg
aGVpZ2h0KCkpCisgICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAg
fQotICAgIGlmIChwcmV2aW91c0hlaWdodCAhPSBtX2hlaWdodCkKKyAgICBpZiAocHJldmlvdXNI
ZWlnaHQgIT0gaGVpZ2h0KCkpCiAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCiAg
ICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMocmVsYXlvdXRDaGlsZHJlbiB8fCBpc1Jvb3QoKSk7
CiAKLSAgICBpZiAoIWlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiBtX2hlaWdodCA9PSAwKSB7
CisgICAgaWYgKCFpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgaGVpZ2h0KCkgPT0gMCkgewog
ICAgICAgICAvLyBXZSBhcmUgYSBibG9jayB3aXRoIG5vIGJvcmRlciBhbmQgcGFkZGluZyBhbmQg
YSBjb21wdXRlZCBoZWlnaHQKICAgICAgICAgLy8gb2YgMC4gIFRoZSBDU1Mgc3BlYyBzdGF0ZXMg
dGhhdCB6ZXJvLWhlaWdodCBibG9ja3MgY29sbGFwc2UgdGhlaXIgbWFyZ2lucwogICAgICAgICAv
LyB0b2dldGhlci4KQEAgLTI4NiwxNSArMjc0LDE1IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6
OmxheW91dEJsb2NrKGJvb2wKICAgICB9CiAKICAgICAvLyBBbHdheXMgZW5zdXJlIG91ciBvdmVy
ZmxvdyB3aWR0aCBpcyBhdCBsZWFzdCBhcyBsYXJnZSBhcyBvdXIgd2lkdGguCi0gICAgaWYgKG1f
b3ZlcmZsb3dXaWR0aCA8IG1fd2lkdGgpCi0gICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1fd2lk
dGg7CisgICAgaWYgKG1fb3ZlcmZsb3dXaWR0aCA8IHdpZHRoKCkpCisgICAgICAgIG1fb3ZlcmZs
b3dXaWR0aCA9IHdpZHRoKCk7CiAKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKSB7CiAgICAg
ICAgIGZvciAoU2hhZG93RGF0YSogYm94U2hhZG93ID0gc3R5bGUoKS0+Ym94U2hhZG93KCk7IGJv
eFNoYWRvdzsgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KSB7CiAgICAgICAgICAgICBtX292
ZXJmbG93TGVmdCA9IG1pbihtX292ZXJmbG93TGVmdCwgYm94U2hhZG93LT54IC0gYm94U2hhZG93
LT5ibHVyKTsKLSAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX292ZXJmbG93V2lk
dGgsIG1fd2lkdGggKyBib3hTaGFkb3ctPnggKyBib3hTaGFkb3ctPmJsdXIpOworICAgICAgICAg
ICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgd2lkdGgoKSArIGJveFNo
YWRvdy0+eCArIGJveFNoYWRvdy0+Ymx1cik7CiAgICAgICAgICAgICBtX292ZXJmbG93VG9wID0g
bWluKG1fb3ZlcmZsb3dUb3AsIGJveFNoYWRvdy0+eSAtIGJveFNoYWRvdy0+Ymx1cik7Ci0gICAg
ICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIG1faGVpZ2h0
ICsgYm94U2hhZG93LT55ICsgYm94U2hhZG93LT5ibHVyKTsKKyAgICAgICAgICAgIG1fb3ZlcmZs
b3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgaGVpZ2h0KCkgKyBib3hTaGFkb3ctPnkg
KyBib3hTaGFkb3ctPmJsdXIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaGFz
UmVmbGVjdGlvbigpKSB7CkBAIC0zMzIsMTEgKzMyMCwxMSBAQCB2b2lkIFJlbmRlckZsZXhpYmxl
Qm94OjpsYXlvdXRIb3Jpem9udGFsCiAgICAgdW5zaWduZWQgaW50IGxvd2VzdEZsZXhHcm91cCA9
IDA7CiAgICAgYm9vbCBoYXZlRmxleCA9IGZhbHNlOwogICAgIGludCByZW1haW5pbmdTcGFjZSA9
IDA7Ci0gICAgbV9vdmVyZmxvd0hlaWdodCA9IG1faGVpZ2h0OworICAgIG1fb3ZlcmZsb3dIZWln
aHQgPSBoZWlnaHQoKTsKIAogICAgIC8vIFRoZSBmaXJzdCB3YWxrIG92ZXIgb3VyIGtpZHMgaXMg
dG8gZmluZCBvdXQgaWYgd2UgaGF2ZSBhbnkgZmxleGlibGUgY2hpbGRyZW4uCiAgICAgRmxleEJv
eEl0ZXJhdG9yIGl0ZXJhdG9yKHRoaXMpOwotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBpdGVy
YXRvci5uZXh0KCk7CisgICAgUmVuZGVyQm94KiBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsKICAg
ICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgY2hpbGQg
ZmxleGVzLgogICAgICAgICBpZiAoIWNoaWxkLT5pc1Bvc2l0aW9uZWQoKSAmJiBjaGlsZC0+c3R5
bGUoKS0+Ym94RmxleCgpID4gMC4wZikgewpAQCAtMzYxLDggKzM0OSw4IEBAIHZvaWQgUmVuZGVy
RmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWwKICAgICAvLyB0aGVpciBwcmVmZXJyZWQgd2lk
dGhzLiAgVGhlIHNlY29uZCBwYXNzIGhhbmRsZXMgZmxleGluZyB0aGUgY2hpbGRyZW4uCiAgICAg
ZG8gewogICAgICAgICAvLyBSZXNldCBvdXIgaGVpZ2h0LgotICAgICAgICBtX2hlaWdodCA9IHlQ
b3M7Ci0gICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgc2V0SGVp
Z2h0KHlQb3MpOworICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgICAg
IHhQb3MgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAvLyBPdXIgZmlyc3QgcGFzcyBpcyBkb25lIHdpdGhvdXQgZmxleGluZy4gIFdlIHNp
bXBseSBsYXkgdGhlIGNoaWxkcmVuCkBAIC00MDAsMjggKzM4OCwyOCBAQCB2b2lkIFJlbmRlckZs
ZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsCiAgICAgICAgICAgICAgICAgbWF4RGVzY2VudCA9
IG1heChtYXhEZXNjZW50LCBkZXNjZW50KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBOb3cgdXBkYXRlIG91ciBoZWlnaHQuCi0gICAgICAgICAgICAgICAgbV9oZWlnaHQg
PSBtYXgoeVBvcyArIG1heEFzY2VudCArIG1heERlc2NlbnQsIG1faGVpZ2h0KTsKKyAgICAgICAg
ICAgICAgICBzZXRIZWlnaHQobWF4KHlQb3MgKyBtYXhBc2NlbnQgKyBtYXhEZXNjZW50LCBoZWln
aHQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1faGVpZ2h0ID0gbWF4KG1faGVpZ2h0LCB5UG9zICsgY2hpbGQtPm1hcmdpblRvcCgpICsgY2hp
bGQtPmhlaWdodCgpICsgY2hpbGQtPm1hcmdpbkJvdHRvbSgpKTsKKyAgICAgICAgICAgICAgICBz
ZXRIZWlnaHQobWF4KGhlaWdodCgpLCB5UG9zICsgY2hpbGQtPm1hcmdpblRvcCgpICsgY2hpbGQt
PmhlaWdodCgpICsgY2hpbGQtPm1hcmdpbkJvdHRvbSgpKSk7CiAKICAgICAgICAgICAgIGNoaWxk
ID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWl0
ZXJhdG9yLmZpcnN0KCkgJiYgaGFzTGluZUlmRW1wdHkoKSkKLSAgICAgICAgICAgIG1faGVpZ2h0
ICs9IGxpbmVIZWlnaHQodHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0
KCkgKyBsaW5lSGVpZ2h0KHRydWUsIHRydWUpKTsKICAgICAgICAgCi0gICAgICAgIG1faGVpZ2h0
ICs9IHRvQWRkOworICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyB0b0FkZCk7CiAKICAgICAg
ICAgLy8gQWx3YXlzIG1ha2Ugc3VyZSBvdXIgb3ZlcmZsb3doZWlnaHQgaXMgYXQgbGVhc3Qgb3Vy
IGhlaWdodC4KLSAgICAgICAgaWYgKG1fb3ZlcmZsb3dIZWlnaHQgPCBtX2hlaWdodCkKLSAgICAg
ICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgaWYgKG1fb3ZlcmZs
b3dIZWlnaHQgPCBoZWlnaHQoKSkKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBoZWln
aHQoKTsKICAgICAgICAgCi0gICAgICAgIG9sZEhlaWdodCA9IG1faGVpZ2h0OworICAgICAgICBv
bGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICAgICAgY2FsY0hlaWdodCgpOwogCiAgICAgICAgIHJl
bGF5b3V0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgaWYgKG9sZEhlaWdodCAhPSBtX2hlaWdo
dCkKKyAgICAgICAgaWYgKG9sZEhlaWdodCAhPSBoZWlnaHQoKSkKICAgICAgICAgICAgIGhlaWdo
dFNwZWNpZmllZCA9IHRydWU7CiAgICAgICAgIAogICAgICAgICAvLyBOb3cgdGhhdCBvdXIgaGVp
Z2h0IGlzIGFjdHVhbGx5IGtub3duLCB3ZSBjYW4gcGxhY2Ugb3VyIGJveGVzLgpAQCAtNDc4LDcg
KzQ2Niw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWwKICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKS0+YWRkVmlzdWFsT3Zl
cmZsb3coc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjaGlsZCktPmZsb2F0UmVjdCgpKTsKIAog
ICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBjaGls
ZFkgKyBjaGlsZC0+b3ZlcmZsb3dIZWlnaHQoZmFsc2UpKTsKLSAgICAgICAgICAgIG1fb3ZlcmZs
b3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgY2hpbGQtPnlQb3MoKSArIGNoaWxkLT5vdmVyZmxv
d1RvcChmYWxzZSkpOworICAgICAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93
VG9wLCBjaGlsZC0+eSgpICsgY2hpbGQtPm92ZXJmbG93VG9wKGZhbHNlKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIHhQb3MgKz0gY2hpbGQtPndpZHRoKCkgKyBjaGlsZC0+bWFyZ2luUmln
aHQoKTsKICAgICAKQEAgLTYxOSw3ICs2MDcsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojps
YXlvdXRIb3Jpem9udGFsCiAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ1NwYWNlIC09IChy
ZW1haW5pbmdTcGFjZS90b3RhbENoaWxkcmVuKTsKICAgICAgICAgICAgICAgICAgICAgdG90YWxD
aGlsZHJlbi0tOwogCi0gICAgICAgICAgICAgICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNoaWxk
LT54UG9zKCkrb2Zmc2V0LCBjaGlsZC0+eVBvcygpKTsKKyAgICAgICAgICAgICAgICAgICAgcGxh
Y2VDaGlsZChjaGlsZCwgY2hpbGQtPngoKStvZmZzZXQsIGNoaWxkLT55KCkpOwogICAgICAgICAg
ICAgICAgICAgICBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkBAIC02MzQsNyArNjIyLDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6
bGF5b3V0SG9yaXpvbnRhbAogICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGl0ZXJhdG9yLm5l
eHQoKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHBsYWNlQ2hpbGQoY2hpbGQsIGNoaWxkLT54UG9zKCkrb2Zmc2V0LCBj
aGlsZC0+eVBvcygpKTsKKyAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGlsZC0+
eCgpK29mZnNldCwgY2hpbGQtPnkoKSk7CiAgICAgICAgICAgICAgICAgY2hpbGQgPSBpdGVyYXRv
ci5uZXh0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY0NiwyMCArNjM0LDIwIEBA
IHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWwKICAgICB9CiAgICAgCiAg
ICAgaWYgKGNoaWxkKSB7Ci0gICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKGNoaWxkLT54UG9z
KCkgKyBjaGlsZC0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSwgbV9vdmVyZmxvd0xlZnQpOworICAgICAg
ICBtX292ZXJmbG93TGVmdCA9IG1pbihjaGlsZC0+eCgpICsgY2hpbGQtPm92ZXJmbG93TGVmdChm
YWxzZSksIG1fb3ZlcmZsb3dMZWZ0KTsKIAotICAgICAgICBSZW5kZXJPYmplY3QqIGxhc3RDaGls
ZCA9IGNoaWxkOworICAgICAgICBSZW5kZXJCb3gqIGxhc3RDaGlsZCA9IGNoaWxkOwogICAgICAg
ICB3aGlsZSAoKGNoaWxkID0gaXRlcmF0b3IubmV4dCgpKSkgewogICAgICAgICAgICAgaWYgKCFj
aGlsZC0+aXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICAgICAgbGFzdENoaWxkID0gY2hpbGQ7
CiAgICAgICAgIH0KLSAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KGxhc3RDaGlsZC0+eFBv
cygpICsgbGFzdENoaWxkLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSwgbV9vdmVyZmxvd1dpZHRoKTsK
KyAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KGxhc3RDaGlsZC0+eCgpICsgbGFzdENoaWxk
LT5vdmVyZmxvd1dpZHRoKGZhbHNlKSwgbV9vdmVyZmxvd1dpZHRoKTsKICAgICB9CiAgICAgCiAg
ICAgLy8gU28gdGhhdCB0aGUgY2FsY0hlaWdodCBpbiBsYXlvdXRCbG9jaygpIGtub3dzIHRvIHJl
bGF5b3V0IHBvc2l0aW9uZWQgb2JqZWN0cyBiZWNhdXNlIG9mCiAgICAgLy8gYSBoZWlnaHQgY2hh
bmdlLCB3ZSByZXZlcnQgb3VyIGhlaWdodCBiYWNrIHRvIHRoZSBpbnRyaW5zaWMgaGVpZ2h0IGJl
Zm9yZSByZXR1cm5pbmcuCiAgICAgaWYgKGhlaWdodFNwZWNpZmllZCkKLSAgICAgICAgbV9oZWln
aHQgPSBvbGRIZWlnaHQ7CisgICAgICAgIHNldEhlaWdodChvbGRIZWlnaHQpOwogfQogCiB2b2lk
IFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJveChib29sIHJlbGF5b3V0Q2hpbGRy
ZW4pCkBAIC02NjcsNyArNjU1LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVy
dGljYWxCbwogICAgIGludCB4UG9zID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAg
ICBpbnQgeVBvcyA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwogICAgIGlmKCBzdHlsZSgp
LT5kaXJlY3Rpb24oKSA9PSBSVEwgKQotICAgICAgICB4UG9zID0gbV93aWR0aCAtIHBhZGRpbmdS
aWdodCgpIC0gYm9yZGVyUmlnaHQoKTsKKyAgICAgICAgeFBvcyA9IHdpZHRoKCkgLSBwYWRkaW5n
UmlnaHQoKSAtIGJvcmRlclJpZ2h0KCk7CiAgICAgaW50IHRvQWRkID0gYm9yZGVyQm90dG9tKCkg
KyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7CiAgICAgYm9v
bCBoZWlnaHRTcGVjaWZpZWQgPSBmYWxzZTsKICAgICBpbnQgb2xkSGVpZ2h0ID0gMDsKQEAgLTY3
OSw3ICs2NjcsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAg
ICAgCiAgICAgLy8gVGhlIGZpcnN0IHdhbGsgb3ZlciBvdXIga2lkcyBpcyB0byBmaW5kIG91dCBp
ZiB3ZSBoYXZlIGFueSBmbGV4aWJsZSBjaGlsZHJlbi4KICAgICBGbGV4Qm94SXRlcmF0b3IgaXRl
cmF0b3IodGhpcyk7Ci0gICAgUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsK
KyAgICBSZW5kZXJCb3gqIGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOwogICAgIHdoaWxlIChjaGls
ZCkgewogICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBjaGlsZCBmbGV4ZXMuCiAgICAg
ICAgIGlmICghY2hpbGQtPmlzUG9zaXRpb25lZCgpICYmIGNoaWxkLT5zdHlsZSgpLT5ib3hGbGV4
KCkgPiAwLjBmKSB7CkBAIC04MDgsOSArNzk2LDkgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6
bGF5b3V0VmVydGljYWxCbwogICAgIC8vIE91ciBmaXJzdCBwYXNzIGlzIGRvbmUgd2l0aG91dCBm
bGV4aW5nLiAgV2Ugc2ltcGx5IGxheSB0aGUgY2hpbGRyZW4KICAgICAvLyBvdXQgd2l0aGluIHRo
ZSBib3guCiAgICAgZG8gewotICAgICAgICBtX2hlaWdodCA9IGJvcmRlclRvcCgpICsgcGFkZGlu
Z1RvcCgpOwotICAgICAgICBpbnQgbWluSGVpZ2h0ID0gbV9oZWlnaHQgKyB0b0FkZDsKLSAgICAg
ICAgbV9vdmVyZmxvd0hlaWdodCA9IG1faGVpZ2h0OworICAgICAgICBzZXRIZWlnaHQoYm9yZGVy
VG9wKCkgKyBwYWRkaW5nVG9wKCkpOworICAgICAgICBpbnQgbWluSGVpZ2h0ID0gaGVpZ2h0KCkg
KyB0b0FkZDsKKyAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IGhlaWdodCgpOwogCiAgICAgICAg
IGNoaWxkID0gaXRlcmF0b3IuZmlyc3QoKTsKICAgICAgICAgd2hpbGUgKGNoaWxkKSB7CkBAIC04
MjgsNyArODE2LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwog
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnNldFN0YXRpY1goYm9yZGVyUmlnaHQoKStw
YWRkaW5nUmlnaHQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChj
aGlsZC0+aGFzU3RhdGljWSgpKQotICAgICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0U3RhdGlj
WShtX2hlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRTdGF0aWNZKGhlaWdo
dCgpKTsKICAgICAgICAgICAgICAgICBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0gCkBAIC04MzcsNyArODI1LDcgQEAgdm9p
ZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwogICAgICAgICAgICAgY2hpbGQt
PmNhbGNWZXJ0aWNhbE1hcmdpbnMoKTsKICAgICAKICAgICAgICAgICAgIC8vIEFkZCBpbiB0aGUg
Y2hpbGQncyBtYXJnaW5Ub3AgdG8gb3VyIGhlaWdodC4KLSAgICAgICAgICAgIG1faGVpZ2h0ICs9
IGNoaWxkLT5tYXJnaW5Ub3AoKTsKKyAgICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGNo
aWxkLT5tYXJnaW5Ub3AoKSk7CiAgICAgCiAgICAgICAgICAgICAvLyBOb3cgZG8gYSBsYXlvdXQu
CiAgICAgICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKQEAgLTg2NCwzOSArODUyLDM5
IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICAgICAgICAg
IH0KICAgICAKICAgICAgICAgICAgIC8vIFBsYWNlIHRoZSBjaGlsZC4KLSAgICAgICAgICAgIHBs
YWNlQ2hpbGQoY2hpbGQsIGNoaWxkWCwgbV9oZWlnaHQpOwotICAgICAgICAgICAgbV9oZWlnaHQg
Kz0gY2hpbGQtPmhlaWdodCgpICsgY2hpbGQtPm1hcmdpbkJvdHRvbSgpOworICAgICAgICAgICAg
cGxhY2VDaGlsZChjaGlsZCwgY2hpbGRYLCBoZWlnaHQoKSk7CisgICAgICAgICAgICBzZXRIZWln
aHQoaGVpZ2h0KCkgKyBjaGlsZC0+aGVpZ2h0KCkgKyBjaGlsZC0+bWFyZ2luQm90dG9tKCkpOwog
ICAgIAogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1JlbmRlckJsb2NrKCkpCiAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjaGlsZCktPmFkZFZpc3VhbE92ZXJmbG93
KHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4oY2hpbGQpLT5mbG9hdFJlY3QoKSk7CiAKICAgICAg
ICAgICAgIC8vIFNlZSBpZiB0aGlzIGNoaWxkIGhhcyBtYWRlIG91ciBvdmVyZmxvdyBuZWVkIHRv
IGdyb3cuCi0gICAgICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgoY2hpbGQtPnhQb3MoKSAr
IGNoaWxkLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSwgbV9vdmVyZmxvd1dpZHRoKTsKLSAgICAgICAg
ICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKGNoaWxkLT54UG9zKCkgKyBjaGlsZC0+b3ZlcmZsb3dM
ZWZ0KGZhbHNlKSwgbV9vdmVyZmxvd0xlZnQpOworICAgICAgICAgICAgbV9vdmVyZmxvd1dpZHRo
ID0gbWF4KGNoaWxkLT54KCkgKyBjaGlsZC0+b3ZlcmZsb3dXaWR0aChmYWxzZSksIG1fb3ZlcmZs
b3dXaWR0aCk7CisgICAgICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1pbihjaGlsZC0+eCgpICsg
Y2hpbGQtPm92ZXJmbG93TGVmdChmYWxzZSksIG1fb3ZlcmZsb3dMZWZ0KTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgIH0KIAotICAg
ICAgICB5UG9zID0gbV9oZWlnaHQ7CisgICAgICAgIHlQb3MgPSBoZWlnaHQoKTsKICAgICAgICAg
CiAgICAgICAgIGlmICghaXRlcmF0b3IuZmlyc3QoKSAmJiBoYXNMaW5lSWZFbXB0eSgpKQotICAg
ICAgICAgICAgbV9oZWlnaHQgKz0gbGluZUhlaWdodCh0cnVlLCB0cnVlKTsKKyAgICAgICAgICAg
IHNldEhlaWdodChoZWlnaHQoKSArIGxpbmVIZWlnaHQodHJ1ZSwgdHJ1ZSkpOwogICAgIAotICAg
ICAgICBtX2hlaWdodCArPSB0b0FkZDsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgdG9B
ZGQpOwogCiAgICAgICAgIC8vIE5lZ2F0aXZlIG1hcmdpbnMgY2FuIGNhdXNlIG91ciBoZWlnaHQg
dG8gc2hyaW5rIGJlbG93IG91ciBtaW5pbWFsIGhlaWdodCAoYm9yZGVyL3BhZGRpbmcpLgogICAg
ICAgICAvLyBJZiB0aGlzIGhhcHBlbnMsIGVuc3VyZSB0aGF0IHRoZSBjb21wdXRlZCBoZWlnaHQg
aXMgaW5jcmVhc2VkIHRvIHRoZSBtaW5pbWFsIGhlaWdodC4KLSAgICAgICAgaWYgKG1faGVpZ2h0
IDwgbWluSGVpZ2h0KQotICAgICAgICAgICAgbV9oZWlnaHQgPSBtaW5IZWlnaHQ7CisgICAgICAg
IGlmIChoZWlnaHQoKSA8IG1pbkhlaWdodCkKKyAgICAgICAgICAgIHNldEhlaWdodChtaW5IZWln
aHQpOwogCiAgICAgICAgIC8vIEFsd2F5cyBtYWtlIHN1cmUgb3VyIG92ZXJmbG93aGVpZ2h0IGlz
IGF0IGxlYXN0IG91ciBoZWlnaHQuCi0gICAgICAgIGlmIChtX292ZXJmbG93SGVpZ2h0IDwgbV9o
ZWlnaHQpCi0gICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAg
IGlmIChtX292ZXJmbG93SGVpZ2h0IDwgaGVpZ2h0KCkpCisgICAgICAgICAgICBtX292ZXJmbG93
SGVpZ2h0ID0gaGVpZ2h0KCk7CiAKICAgICAgICAgLy8gTm93IHdlIGhhdmUgdG8gY2FsYyBvdXIg
aGVpZ2h0LCBzbyB3ZSBrbm93IGhvdyBtdWNoIHNwYWNlIHdlIGhhdmUgcmVtYWluaW5nLgotICAg
ICAgICBvbGRIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgb2xkSGVpZ2h0ID0gaGVpZ2h0KCk7
CiAgICAgICAgIGNhbGNIZWlnaHQoKTsKLSAgICAgICAgaWYgKG9sZEhlaWdodCAhPSBtX2hlaWdo
dCkKKyAgICAgICAgaWYgKG9sZEhlaWdodCAhPSBoZWlnaHQoKSkKICAgICAgICAgICAgIGhlaWdo
dFNwZWNpZmllZCA9IHRydWU7CiAKICAgICAgICAgcmVtYWluaW5nU3BhY2UgPSBib3JkZXJUb3Ao
KSArIHBhZGRpbmdUb3AoKSArIGNvbnRlbnRIZWlnaHQoKSAtIHlQb3M7CkBAIC0xMDI4LDcgKzEw
MTYsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAgICAg
ICAgICAgICAgICAgIG9mZnNldCArPSByZW1haW5pbmdTcGFjZS90b3RhbENoaWxkcmVuOwogICAg
ICAgICAgICAgICAgICAgICByZW1haW5pbmdTcGFjZSAtPSAocmVtYWluaW5nU3BhY2UvdG90YWxD
aGlsZHJlbik7CiAgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hpbGRyZW4tLTsKLSAgICAgICAg
ICAgICAgICAgICAgcGxhY2VDaGlsZChjaGlsZCwgY2hpbGQtPnhQb3MoKSwgY2hpbGQtPnlQb3Mo
KStvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCBjaGlsZC0+
eCgpLCBjaGlsZC0+eSgpK29mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gaXRl
cmF0b3IubmV4dCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEwNDMs
NyArMTAzMSw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAg
ICAgICAgICAgICAgICAgICAgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwbGFj
ZUNoaWxkKGNoaWxkLCBjaGlsZC0+eFBvcygpLCBjaGlsZC0+eVBvcygpK29mZnNldCk7CisgICAg
ICAgICAgICAgICAgcGxhY2VDaGlsZChjaGlsZCwgY2hpbGQtPngoKSwgY2hpbGQtPnkoKStvZmZz
ZXQpOwogICAgICAgICAgICAgICAgIGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0xMDU1LDI4ICsxMDQzLDI4IEBAIHZvaWQgUmVuZGVyRmxleGli
bGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICB9CiAgICAgCiAgICAgaWYgKGNoaWxkKSB7Ci0g
ICAgICAgIG1fb3ZlcmZsb3dUb3AgPSBtaW4oY2hpbGQtPnlQb3MoKSArIGNoaWxkLT5vdmVyZmxv
d1RvcChmYWxzZSksIG1fb3ZlcmZsb3dUb3ApOworICAgICAgICBtX292ZXJmbG93VG9wID0gbWlu
KGNoaWxkLT55KCkgKyBjaGlsZC0+b3ZlcmZsb3dUb3AoZmFsc2UpLCBtX292ZXJmbG93VG9wKTsK
IAotICAgICAgICBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCA9IGNoaWxkOworICAgICAgICBSZW5k
ZXJCb3gqIGxhc3RDaGlsZCA9IGNoaWxkOwogICAgICAgICB3aGlsZSAoKGNoaWxkID0gaXRlcmF0
b3IubmV4dCgpKSkgewogICAgICAgICAgICAgaWYgKCFjaGlsZC0+aXNQb3NpdGlvbmVkKCkpCiAg
ICAgICAgICAgICAgICAgbGFzdENoaWxkID0gY2hpbGQ7CiAgICAgICAgIH0KLSAgICAgICAgbV9v
dmVyZmxvd0hlaWdodCA9IG1heChsYXN0Q2hpbGQtPnlQb3MoKSArIGxhc3RDaGlsZC0+b3ZlcmZs
b3dIZWlnaHQoZmFsc2UpLCBtX292ZXJmbG93SGVpZ2h0KTsKKyAgICAgICAgbV9vdmVyZmxvd0hl
aWdodCA9IG1heChsYXN0Q2hpbGQtPnkoKSArIGxhc3RDaGlsZC0+b3ZlcmZsb3dIZWlnaHQoZmFs
c2UpLCBtX292ZXJmbG93SGVpZ2h0KTsKICAgICB9CiAKICAgICAvLyBTbyB0aGF0IHRoZSBjYWxj
SGVpZ2h0IGluIGxheW91dEJsb2NrKCkga25vd3MgdG8gcmVsYXlvdXQgcG9zaXRpb25lZCBvYmpl
Y3RzIGJlY2F1c2Ugb2YKICAgICAvLyBhIGhlaWdodCBjaGFuZ2UsIHdlIHJldmVydCBvdXIgaGVp
Z2h0IGJhY2sgdG8gdGhlIGludHJpbnNpYyBoZWlnaHQgYmVmb3JlIHJldHVybmluZy4KICAgICBp
ZiAoaGVpZ2h0U3BlY2lmaWVkKQotICAgICAgICBtX2hlaWdodCA9IG9sZEhlaWdodDsgCisgICAg
ICAgIHNldEhlaWdodChvbGRIZWlnaHQpOyAKIH0KIAotdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6
cGxhY2VDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBpbnQgeCwgaW50IHkpCit2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjpwbGFjZUNoaWxkKFJlbmRlckJveCogY2hpbGQsIGludCB4LCBpbnQgeSkK
IHsKLSAgICBJbnRSZWN0IG9sZFJlY3QoY2hpbGQtPnhQb3MoKSwgY2hpbGQtPnlQb3MoKSAsIGNo
aWxkLT53aWR0aCgpLCBjaGlsZC0+aGVpZ2h0KCkpOworICAgIEludFJlY3Qgb2xkUmVjdChjaGls
ZC0+eCgpLCBjaGlsZC0+eSgpICwgY2hpbGQtPndpZHRoKCksIGNoaWxkLT5oZWlnaHQoKSk7CiAK
ICAgICAvLyBQbGFjZSB0aGUgY2hpbGQuCi0gICAgY2hpbGQtPnNldFBvcyh4LCB5KTsKKyAgICBj
aGlsZC0+c2V0TG9jYXRpb24oeCwgeSk7CiAKICAgICAvLyBJZiB0aGUgY2hpbGQgbW92ZWQsIHdl
IGhhdmUgdG8gcmVwYWludCBpdCBhcyB3ZWxsIGFzIGFueSBmbG9hdGluZy9wb3NpdGlvbmVkCiAg
ICAgLy8gZGVzY2VuZGFudHMuICBBbiBleGNlcHRpb24gaXMgaWYgd2UgbmVlZCBhIGxheW91dC4g
IEluIHRoaXMgY2FzZSwgd2Uga25vdyB3ZSdyZSBnb2luZyB0bwpAQCAtMTA4NSw3ICsxMDczLDcg
QEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6cGxhY2VDaGlsZChSZW5kZQogICAgICAgICBjaGls
ZC0+cmVwYWludER1cmluZ0xheW91dElmTW92ZWQob2xkUmVjdCk7CiB9CiAKLWludCBSZW5kZXJG
bGV4aWJsZUJveDo6YWxsb3dlZENoaWxkRmxleChSZW5kZXJPYmplY3QqIGNoaWxkLCBib29sIGV4
cGFuZGluZywgdW5zaWduZWQgaW50IGdyb3VwKQoraW50IFJlbmRlckZsZXhpYmxlQm94OjphbGxv
d2VkQ2hpbGRGbGV4KFJlbmRlckJveCogY2hpbGQsIGJvb2wgZXhwYW5kaW5nLCB1bnNpZ25lZCBp
bnQgZ3JvdXApCiB7CiAgICAgaWYgKGNoaWxkLT5pc1Bvc2l0aW9uZWQoKSB8fCBjaGlsZC0+c3R5
bGUoKS0+Ym94RmxleCgpID09IDAuMGYgfHwgY2hpbGQtPnN0eWxlKCktPmJveEZsZXhHcm91cCgp
ICE9IGdyb3VwKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guaAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbGV4aWJsZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTAgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBpc0ZsZXhpbmdDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZmxleGluZ0NoaWxkcmVuOyB9CiAgICAgdmlydHVhbCBib29sIGlzU3RyZXRjaGluZ0NoaWxkcmVu
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJldGNoaW5nQ2hpbGRyZW47IH0KIAotICAgIHZvaWQgcGxh
Y2VDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBpbnQgeCwgaW50IHkpOworICAgIHZvaWQgcGxh
Y2VDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeCwgaW50IHkpOwogCiBwcm90ZWN0ZWQ6Ci0g
ICAgaW50IGFsbG93ZWRDaGlsZEZsZXgoUmVuZGVyT2JqZWN0KiBjaGlsZCwgYm9vbCBleHBhbmRp
bmcsIHVuc2lnbmVkIGdyb3VwKTsKKyAgICBpbnQgYWxsb3dlZENoaWxkRmxleChSZW5kZXJCb3gq
IGNoaWxkLCBib29sIGV4cGFuZGluZywgdW5zaWduZWQgZ3JvdXApOwogCiAgICAgYm9vbCBoYXNN
dWx0aXBsZUxpbmVzKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym94TGluZXMoKSA9PSBNVUxU
SVBMRTsgfQogICAgIGJvb2wgaXNWZXJ0aWNhbCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJv
eE9yaWVudCgpID09IFZFUlRJQ0FMOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcAko
cmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTAwLDcgKzUwMCw3IEBAIEludFJlY3QgUmVuZGVyRmxvdzo6YWJzb2x1
dGVDbGlwcGVkT3ZlcmYKICAgICAgICAgLy8gTm93IGludmFsaWRhdGUgYSByZWN0YW5nbGUuCiAg
ICAgICAgIGludCBvdyA9IHN0eWxlKCkgPyBzdHlsZSgpLT5vdXRsaW5lU2l6ZSgpIDogMDsKICAg
ICAgICAgaWYgKGlzQ29tcGFjdCgpKQotICAgICAgICAgICAgbGVmdCAtPSBtX3g7CisgICAgICAg
ICAgICBsZWZ0IC09IHgoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRkIGlu
IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZmZzZXRzIG9mIGFueSBpbmxpbmVzIChpbmNsdWRpbmcg
dXMpIHVwIHRvIG91cgogICAgICAgICAvLyBjb250YWluaW5nIGJsb2NrLgpAQCAtNTUyLDkgKzU1
Miw5IEBAIGludCBSZW5kZXJGbG93Ojpsb3dlc3RQb3NpdGlvbihib29sIGluY2wKIHsKICAgICBB
U1NFUlQoIWlzSW5saW5lRmxvdygpKTsKICAgICBpZiAoIWluY2x1ZGVPdmVyZmxvd0ludGVyaW9y
ICYmIChoYXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNDb250cm9sQ2xpcCgpKSkKLSAgICAgICAgcmV0
dXJuIGluY2x1ZGVTZWxmICYmIG1fd2lkdGggPiAwID8gb3ZlcmZsb3dIZWlnaHQoZmFsc2UpIDog
MDsKKyAgICAgICAgcmV0dXJuIGluY2x1ZGVTZWxmICYmIHdpZHRoKCkgPiAwID8gb3ZlcmZsb3dI
ZWlnaHQoZmFsc2UpIDogMDsKIAotICAgIGludCBib3R0b20gPSBpbmNsdWRlU2VsZiAmJiBtX3dp
ZHRoID4gMCA/IG1faGVpZ2h0IDogMDsKKyAgICBpbnQgYm90dG9tID0gaW5jbHVkZVNlbGYgJiYg
d2lkdGgoKSA+IDAgPyBoZWlnaHQoKSA6IDA7CiAgICAgaWYgKCFoYXNDb2x1bW5zKCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IENvbWUgdXAgd2l0aCBhIHdheSB0byB1c2UgdGhlIGxheWVyIHRyZWUg
dG8gYXZvaWQgdmlzaXRpbmcgYWxsIHRoZSBraWRzLgogICAgICAgICAvLyBGb3Igbm93LCB3ZSBo
YXZlIHRvIGRlc2NlbmQgaW50byBhbGwgdGhlIGNoaWxkcmVuLCBzaW5jZSB3ZSBtYXkgaGF2ZSBh
IGh1Z2UgYWJzIGRpdiBpbnNpZGUKQEAgLTU2Miw3ICs1NjIsNyBAQCBpbnQgUmVuZGVyRmxvdzo6
bG93ZXN0UG9zaXRpb24oYm9vbCBpbmNsCiAgICAgICAgIC8vIHRoZSBhYnMgZGl2LgogICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogYyA9IGZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMtPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgICAgIGlmICghYy0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYm
ICFjLT5pc1RleHQoKSAmJiAhYy0+aXNJbmxpbmVGbG93KCkpCi0gICAgICAgICAgICAgICAgYm90
dG9tID0gbWF4KGJvdHRvbSwgYy0+eVBvcygpICsgYy0+bG93ZXN0UG9zaXRpb24oZmFsc2UpKTsK
KyAgICAgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBzdGF0aWNfY2FzdDxSZW5kZXJC
b3gqPihjKS0+eSgpICsgYy0+bG93ZXN0UG9zaXRpb24oZmFsc2UpKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtNTc2LDE3ICs1NzYsMTggQEAgaW50IFJlbmRlckZsb3c6OnJpZ2h0bW9zdFBvc2l0
aW9uKGJvb2wgaQogewogICAgIEFTU0VSVCghaXNJbmxpbmVGbG93KCkpOwogICAgIGlmICghaW5j
bHVkZU92ZXJmbG93SW50ZXJpb3IgJiYgKGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc0NvbnRyb2xD
bGlwKCkpKQotICAgICAgICByZXR1cm4gaW5jbHVkZVNlbGYgJiYgbV9oZWlnaHQgPiAwID8gb3Zl
cmZsb3dXaWR0aChmYWxzZSkgOiAwOworICAgICAgICByZXR1cm4gaW5jbHVkZVNlbGYgJiYgaGVp
Z2h0KCkgPiAwID8gb3ZlcmZsb3dXaWR0aChmYWxzZSkgOiAwOworCisgICAgaW50IHJpZ2h0ID0g
aW5jbHVkZVNlbGYgJiYgaGVpZ2h0KCkgPiAwID8gd2lkdGgoKSA6IDA7CiAKLSAgICBpbnQgcmln
aHQgPSBpbmNsdWRlU2VsZiAmJiBtX2hlaWdodCA+IDAgPyBtX3dpZHRoIDogMDsKICAgICBpZiAo
IWhhc0NvbHVtbnMoKSkgewogICAgICAgICAvLyBGSVhNRTogQ29tZSB1cCB3aXRoIGEgd2F5IHRv
IHVzZSB0aGUgbGF5ZXIgdHJlZSB0byBhdm9pZCB2aXNpdGluZyBhbGwgdGhlIGtpZHMuCiAgICAg
ICAgIC8vIEZvciBub3csIHdlIGhhdmUgdG8gZGVzY2VuZCBpbnRvIGFsbCB0aGUgY2hpbGRyZW4s
IHNpbmNlIHdlIG1heSBoYXZlIGEgaHVnZSBhYnMgZGl2IGluc2lkZQogICAgICAgICAvLyBhIHRp
bnkgcmVsIGRpdiBidXJpZWQgc29tZXdoZXJlIGRlZXAgaW4gb3VyIGNoaWxkIHRyZWUuICBJbiB0
aGlzIGNhc2Ugd2UgaGF2ZSB0byBnZXQgdG8KICAgICAgICAgLy8gdGhlIGFicyBkaXYuCiAgICAg
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjID0gZmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4dFNp
YmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKCFjLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkg
JiYgIWMtPmlzVGV4dCgpICYmICFjLT5pc0lubGluZUZsb3coKSkKLSAgICAgICAgICAgICAgICBy
aWdodCA9IG1heChyaWdodCwgYy0+eFBvcygpICsgYy0+cmlnaHRtb3N0UG9zaXRpb24oZmFsc2Up
KTsKKyAgICAgICAgICAgIGlmICghYy0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmIGMtPmlz
Qm94KCkgJiYgIWMtPmlzSW5saW5lRmxvdygpKQorICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4
KHJpZ2h0LCBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjKS0+eCgpICsgYy0+cmlnaHRtb3N0UG9z
aXRpb24oZmFsc2UpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjAwLDE3ICs2MDEsMTcgQEAg
aW50IFJlbmRlckZsb3c6OmxlZnRtb3N0UG9zaXRpb24oYm9vbCBpbgogewogICAgIEFTU0VSVCgh
aXNJbmxpbmVGbG93KCkpOwogICAgIGlmICghaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgJiYgKGhh
c092ZXJmbG93Q2xpcCgpIHx8IGhhc0NvbnRyb2xDbGlwKCkpKQotICAgICAgICByZXR1cm4gaW5j
bHVkZVNlbGYgJiYgbV9oZWlnaHQgPiAwID8gb3ZlcmZsb3dMZWZ0KGZhbHNlKSA6IG1fd2lkdGg7
CisgICAgICAgIHJldHVybiBpbmNsdWRlU2VsZiAmJiBoZWlnaHQoKSA+IDAgPyBvdmVyZmxvd0xl
ZnQoZmFsc2UpIDogd2lkdGgoKTsKIAotICAgIGludCBsZWZ0ID0gaW5jbHVkZVNlbGYgJiYgbV9o
ZWlnaHQgPiAwID8gMCA6IG1fd2lkdGg7CisgICAgaW50IGxlZnQgPSBpbmNsdWRlU2VsZiAmJiBo
ZWlnaHQoKSA+IDAgPyAwIDogd2lkdGgoKTsKICAgICBpZiAoIWhhc0NvbHVtbnMoKSkgewogICAg
ICAgICAvLyBGSVhNRTogQ29tZSB1cCB3aXRoIGEgd2F5IHRvIHVzZSB0aGUgbGF5ZXIgdHJlZSB0
byBhdm9pZCB2aXNpdGluZyBhbGwgdGhlIGtpZHMuCiAgICAgICAgIC8vIEZvciBub3csIHdlIGhh
dmUgdG8gZGVzY2VuZCBpbnRvIGFsbCB0aGUgY2hpbGRyZW4sIHNpbmNlIHdlIG1heSBoYXZlIGEg
aHVnZSBhYnMgZGl2IGluc2lkZQogICAgICAgICAvLyBhIHRpbnkgcmVsIGRpdiBidXJpZWQgc29t
ZXdoZXJlIGRlZXAgaW4gb3VyIGNoaWxkIHRyZWUuICBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBn
ZXQgdG8KICAgICAgICAgLy8gdGhlIGFicyBkaXYuCiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjID0gZmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAg
ICAgaWYgKCFjLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgIWMtPmlzVGV4dCgpICYmICFj
LT5pc0lubGluZUZsb3coKSkKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIGMtPnhQ
b3MoKSArIGMtPmxlZnRtb3N0UG9zaXRpb24oZmFsc2UpKTsKKyAgICAgICAgICAgIGlmICghYy0+
aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmIGMtPmlzQm94KCkgJiYgIWMtPmlzSW5saW5lRmxv
dygpKQorICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgc3RhdGljX2Nhc3Q8UmVuZGVy
Qm94Kj4oYyktPngoKSArIGMtPmxlZnRtb3N0UG9zaXRpb24oZmFsc2UpKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtNjg3LDcgKzY4OCw3IEBAIEludFJlY3QgUmVuZGVyRmxvdzo6bG9jYWxDYXJl
dFJlY3QoSW5saW4KICAgICAgICAgICAgIC8vIEZJWE1FOiB3aHkgY2FsbCBsb2NhbFRvQWJzb2x1
dGVGb3JDb250ZW50KCkgdHdpY2UgaGVyZSwgdG9vPwogICAgICAgICAgICAgRmxvYXRQb2ludCBh
YnNSaWdodFBvaW50ID0gbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KG15Umln
aHQsIDApKTsKIAotICAgICAgICAgICAgaW50IGNvbnRhaW5lclJpZ2h0ID0gY29udGFpbmluZ0Js
b2NrKCktPnhQb3MoKSArIGNvbnRhaW5pbmdCbG9ja1dpZHRoKCk7CisgICAgICAgICAgICBpbnQg
Y29udGFpbmVyUmlnaHQgPSBjb250YWluaW5nQmxvY2soKS0+eCgpICsgY29udGFpbmluZ0Jsb2Nr
V2lkdGgoKTsKICAgICAgICAgICAgIEZsb2F0UG9pbnQgYWJzQ29udGFpbmVyUG9pbnQgPSBsb2Nh
bFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoY29udGFpbmVyUmlnaHQsIDApKTsKIAog
ICAgICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IGFic0NvbnRhaW5lclBvaW50Lngo
KSAtIGFic1JpZ2h0UG9pbnQueCgpOwpAQCAtNzE5LDI2ICs3MjAsMjcgQEAgdm9pZCBSZW5kZXJG
bG93OjphZGRGb2N1c1JpbmdSZWN0cyhHcmFwaAogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5hZGRGb2N1c1JpbmdSZWN0KEludFJlY3QodHggKyBjdXJyLT54UG9zKCksIHR5ICsgY3Vyci0+
eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSkpOwogCiAgICAgICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4
dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlz
TGlzdE1hcmtlcigpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnItPmlzVGV4dCgpICYmICFjdXJy
LT5pc0xpc3RNYXJrZXIoKSAmJiBjdXJyLT5pc0JveCgpKSB7CisgICAgICAgICAgICAgICAgUmVu
ZGVyQm94KiBib3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjdXJyKTsKICAgICAgICAgICAg
ICAgICBGbG9hdFBvaW50IHBvczsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vz
bid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KICAgICAgICAgICAgICAgICBpZiAo
Y3Vyci0+bGF5ZXIoKSkgCiAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGN1cnItPmxvY2FsVG9B
YnNvbHV0ZSgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcG9z
ID0gRmxvYXRQb2ludCh0eCArIGN1cnItPnhQb3MoKSwgdHkgKyBjdXJyLT55UG9zKCkpOwotICAg
ICAgICAgICAgICAgIGN1cnItPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwgcG9z
LngoKSwgcG9zLnkoKSk7CisgICAgICAgICAgICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQodHgg
KyBib3gtPngoKSwgdHkgKyBib3gtPnkoKSk7CisgICAgICAgICAgICAgICAgYm94LT5hZGRGb2N1
c1JpbmdSZWN0cyhncmFwaGljc0NvbnRleHQsIHBvcy54KCksIHBvcy55KCkpOwogICAgICAgICAg
ICAgfQogICAgIH0KIAogICAgIGlmIChjb250aW51YXRpb24oKSkgewogICAgICAgICBpZiAoaXNJ
bmxpbmUoKSkKICAgICAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0cyhn
cmFwaGljc0NvbnRleHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR4IC0gY29udGFpbmluZ0Jsb2NrKCktPnhQb3MoKSArIGNvbnRpbnVhdGlvbigpLT54
UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkg
LSBjb250YWluaW5nQmxvY2soKS0+eVBvcygpICsgY29udGludWF0aW9uKCktPnlQb3MoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggLSBjb250YWlu
aW5nQmxvY2soKS0+eCgpICsgY29udGludWF0aW9uKCktPngoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAtIGNvbnRhaW5pbmdCbG9jaygpLT55KCkg
KyBjb250aW51YXRpb24oKS0+eSgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29udGlu
dWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggLSB4UG9zKCkgKyBjb250aW51
YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPnhQb3MoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAtIHlQb3MoKSArIGNvbnRpbnVhdGlvbigpLT5j
b250YWluaW5nQmxvY2soKS0+eVBvcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eCAtIHgoKSArIGNvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxv
Y2soKS0+eCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5IC0geSgpICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT55KCkpOwogICAg
IH0KIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24g
NDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNiw4ICsxMjYsOCBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludChQYWlu
dEluZm8mIHBhCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFkZCBpbiBvdXIgb2Zmc2V0cy4K
LSAgICB0eCArPSBtX3g7Ci0gICAgdHkgKz0gbV95OworICAgIHR4ICs9IHgoKTsKKyAgICB0eSAr
PSBtX2ZyYW1lUmVjdC55KCk7CiAKICAgICBpbnQgcm93cyA9IGZyYW1lU2V0KCktPnRvdGFsUm93
cygpOwogICAgIGludCBjb2xzID0gZnJhbWVTZXQoKS0+dG90YWxDb2xzKCk7CkBAIC00NTcsOCAr
NDU3LDggQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6bGF5b3V0KCkKICAgICAgICAgb2xkQm91bmRz
ID0gYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CiAKICAgICBpZiAoIXBhcmVudCgpLT5p
c0ZyYW1lU2V0KCkgJiYgIWRvY3VtZW50KCktPnByaW50aW5nKCkpIHsKLSAgICAgICAgbV93aWR0
aCA9IHZpZXcoKS0+dmlld1dpZHRoKCk7Ci0gICAgICAgIG1faGVpZ2h0ID0gdmlldygpLT52aWV3
SGVpZ2h0KCk7CisgICAgICAgIHNldFdpZHRoKHZpZXcoKS0+dmlld1dpZHRoKCkpOworICAgICAg
ICBzZXRIZWlnaHQodmlldygpLT52aWV3SGVpZ2h0KCkpOwogICAgIH0KIAogICAgIHNpemVfdCBj
b2xzID0gZnJhbWVTZXQoKS0+dG90YWxDb2xzKCk7CkBAIC00NzAsOCArNDcwLDggQEAgdm9pZCBS
ZW5kZXJGcmFtZVNldDo6bGF5b3V0KCkKICAgICB9CiAKICAgICBpbnQgYm9yZGVyVGhpY2tuZXNz
ID0gZnJhbWVTZXQoKS0+Ym9yZGVyKCk7Ci0gICAgbGF5T3V0QXhpcyhtX3Jvd3MsIGZyYW1lU2V0
KCktPnJvd0xlbmd0aHMoKSwgbV9oZWlnaHQgLSAocm93cyAtIDEpICogYm9yZGVyVGhpY2tuZXNz
KTsKLSAgICBsYXlPdXRBeGlzKG1fY29scywgZnJhbWVTZXQoKS0+Y29sTGVuZ3RocygpLCBtX3dp
ZHRoIC0gKGNvbHMgLSAxKSAqIGJvcmRlclRoaWNrbmVzcyk7CisgICAgbGF5T3V0QXhpcyhtX3Jv
d3MsIGZyYW1lU2V0KCktPnJvd0xlbmd0aHMoKSwgaGVpZ2h0KCkgLSAocm93cyAtIDEpICogYm9y
ZGVyVGhpY2tuZXNzKTsKKyAgICBsYXlPdXRBeGlzKG1fY29scywgZnJhbWVTZXQoKS0+Y29sTGVu
Z3RocygpLCB3aWR0aCgpIC0gKGNvbHMgLSAxKSAqIGJvcmRlclRoaWNrbmVzcyk7CiAKICAgICBw
b3NpdGlvbkZyYW1lcygpOwogCkBAIC00OTEsNyArNDkxLDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNl
dDo6bGF5b3V0KCkKIAogdm9pZCBSZW5kZXJGcmFtZVNldDo6cG9zaXRpb25GcmFtZXMoKQogewot
ICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7CisgICAgUmVuZGVyQm94KiBj
aGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsKICAgICBpZiAoIWNoaWxkKQogICAgICAgICByZXR1cm47
CiAKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0Ojpwb3NpdGlvbkZyYW1l
cygpCiAgICAgICAgIGludCB4UG9zID0gMDsKICAgICAgICAgaW50IGhlaWdodCA9IG1fcm93cy5t
X3NpemVzW3JdOwogICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbHM7IGMrKykgewotICAg
ICAgICAgICAgY2hpbGQtPnNldFBvcyh4UG9zLCB5UG9zKTsKKyAgICAgICAgICAgIGNoaWxkLT5z
ZXRMb2NhdGlvbih4UG9zLCB5UG9zKTsKICAgICAgICAgICAgIGludCB3aWR0aCA9IG1fY29scy5t
X3NpemVzW2NdOwogCiAgICAgICAgICAgICAvLyBoYXMgdG8gYmUgcmVzaXplZCBhbmQgaXRzZWxm
IHJlc2l6ZSBpdHMgY29udGVudHMKQEAgLTUxNyw3ICs1MTcsNyBAQCB2b2lkIFJlbmRlckZyYW1l
U2V0Ojpwb3NpdGlvbkZyYW1lcygpCiAKICAgICAgICAgICAgIHhQb3MgKz0gd2lkdGggKyBib3Jk
ZXJUaGlja25lc3M7CiAKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
CisgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpOwogICAgICAgICAg
ICAgaWYgKCFjaGlsZCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTUy
NSw3ICs1MjUsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0Ojpwb3NpdGlvbkZyYW1lcygpCiAgICAg
fQogCiAgICAgLy8gYWxsIHRoZSByZW1haW5pbmcgZnJhbWVzIGFyZSBoaWRkZW4gdG8gYXZvaWQg
dWdseSBzcHVyaW91cyB1bmZsb3dlZCBmcmFtZXMKLSAgICBmb3IgKDsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgY2hpbGQtPnNldFdpZHRoKDApOwogICAgICAg
ICBjaGlsZC0+c2V0SGVpZ2h0KDApOwogICAgICAgICBjaGlsZC0+c2V0TmVlZHNMYXlvdXQoZmFs
c2UpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHJldmlzaW9u
IDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDI4ICs0MywyOCBAQCBSZW5kZXJIVE1MQ2FudmFzOjpSZW5kZXJIVE1M
Q2FudmFzKEhUTUxDCiAKIHZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgSW50UmVjdCByZWN0ID0g
Y29udGVudEJveCgpOworICAgIEludFJlY3QgcmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAg
cmVjdC5tb3ZlKHR4LCB0eSk7CiAgICAgc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihu
b2RlKCkpLT5wYWludChwYWludEluZm8uY29udGV4dCwgcmVjdCk7CiB9CiAKIHZvaWQgUmVuZGVy
SFRNTENhbnZhczo6Y2FudmFzU2l6ZUNoYW5nZWQoKQogewotICAgIEludFNpemUgc2l6ZSA9IHN0
YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4obm9kZSgpKS0+c2l6ZSgpOwotICAgIEludFNp
emUgem9vbWVkU2l6ZShzaXplLndpZHRoKCkgKiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCksIHNp
emUuaGVpZ2h0KCkgKiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgIEludFNpemUgY2Fu
dmFzU2l6ZSA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4obm9kZSgpKS0+c2l6ZSgp
OworICAgIEludFNpemUgem9vbWVkU2l6ZShjYW52YXNTaXplLndpZHRoKCkgKiBzdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkgKiBzdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpOwogCi0gICAgaWYgKHNpemUgPT0gaW50cmluc2ljU2l6ZSgpKQorICAgIGlmIChjYW52
YXNTaXplID09IGludHJpbnNpY1NpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SW50
cmluc2ljU2l6ZShzaXplKTsKKyAgICBzZXRJbnRyaW5zaWNTaXplKGNhbnZhc1NpemUpOwogCiAg
ICAgaWYgKCFwcmVmV2lkdGhzRGlydHkoKSkKICAgICAgICAgc2V0UHJlZldpZHRoc0RpcnR5KHRy
dWUpOwogCi0gICAgSW50U2l6ZSBvbGRTaXplID0gSW50U2l6ZShtX3dpZHRoLCBtX2hlaWdodCk7
CisgICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwogICAgIGNhbGNXaWR0aCgpOwogICAgIGNh
bGNIZWlnaHQoKTsKLSAgICBpZiAob2xkU2l6ZSA9PSBJbnRTaXplKG1fd2lkdGgsIG1faGVpZ2h0
KSkKKyAgICBpZiAob2xkU2l6ZSA9PSBzaXplKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghc2VsZk5lZWRzTGF5b3V0KCkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShy
ZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgxLDIxICsyODEsMjEgQEAgdm9pZCBSZW5kZXJJbWFnZTo6aW1hZ2VD
aGFuZ2VkKFdyYXBwZWRJbQogICAgICAgICAvLyBsYXlvdXQgd2hlbiB3ZSBnZXQgYWRkZWQgaW4g
dG8gdGhlIHJlbmRlciB0cmVlIGhpZXJhcmNoeSBsYXRlci4KICAgICAgICAgaWYgKGNvbnRhaW5p
bmdCbG9jaygpKSB7CiAgICAgICAgICAgICAvLyBsZXRzIHNlZSBpZiB3ZSBuZWVkIHRvIHJlbGF5
b3V0IGF0IGFsbC4uCi0gICAgICAgICAgICBpbnQgb2xkd2lkdGggPSBtX3dpZHRoOwotICAgICAg
ICAgICAgaW50IG9sZGhlaWdodCA9IG1faGVpZ2h0OworICAgICAgICAgICAgaW50IG9sZHdpZHRo
ID0gd2lkdGgoKTsKKyAgICAgICAgICAgIGludCBvbGRoZWlnaHQgPSBoZWlnaHQoKTsKICAgICAg
ICAgICAgIGlmICghcHJlZldpZHRoc0RpcnR5KCkpCiAgICAgICAgICAgICAgICAgc2V0UHJlZldp
ZHRoc0RpcnR5KHRydWUpOwogICAgICAgICAgICAgY2FsY1dpZHRoKCk7CiAgICAgICAgICAgICBj
YWxjSGVpZ2h0KCk7CiAKLSAgICAgICAgICAgIGlmIChpbWFnZVNpemVDaGFuZ2VkIHx8IG1fd2lk
dGggIT0gb2xkd2lkdGggfHwgbV9oZWlnaHQgIT0gb2xkaGVpZ2h0KSB7CisgICAgICAgICAgICBp
ZiAoaW1hZ2VTaXplQ2hhbmdlZCB8fCB3aWR0aCgpICE9IG9sZHdpZHRoIHx8IGhlaWdodCgpICE9
IG9sZGhlaWdodCkgewogICAgICAgICAgICAgICAgIHNob3VsZFJlcGFpbnQgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBpZiAoIXNlbGZOZWVkc0xheW91dCgpKQogICAgICAgICAgICAgICAgICAg
ICBzZXROZWVkc0xheW91dCh0cnVlKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV93
aWR0aCA9IG9sZHdpZHRoOwotICAgICAgICAgICAgbV9oZWlnaHQgPSBvbGRoZWlnaHQ7CisgICAg
ICAgICAgICBzZXRXaWR0aChvbGR3aWR0aCk7CisgICAgICAgICAgICBzZXRIZWlnaHQob2xkaGVp
Z2h0KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzA0LDExICszMDQsMTEgQEAgdm9pZCBSZW5k
ZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbQogICAgICAgICBpZiAocmVjdCkgewogICAg
ICAgICAgICAgLy8gVGhlIGltYWdlIGNoYW5nZWQgcmVjdCBpcyBpbiBzb3VyY2UgaW1hZ2UgY29v
cmRpbmF0ZXMgKHByZS16b29taW5nKSwKICAgICAgICAgICAgIC8vIHNvIG1hcCBmcm9tIHRoZSBi
b3VuZHMgb2YgdGhlIGltYWdlIHRvIHRoZSBjb250ZW50c0JveC4KLSAgICAgICAgICAgIHJlcGFp
bnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtYXBSZWN0KCpyZWN0LCBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBpbWFnZVNpemUoMS4wZikpLCBjb250ZW50Qm94KCkpKTsKKyAgICAgICAgICAgIHJl
cGFpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtYXBSZWN0KCpyZWN0LCBGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBpbWFnZVNpemUoMS4wZikpLCBjb250ZW50Qm94UmVjdCgpKSk7CiAgICAgICAg
ICAgICAvLyBHdWFyZCBhZ2FpbnN0IHRvby1sYXJnZSBjaGFuZ2VkIHJlY3RzLgotICAgICAgICAg
ICAgcmVwYWludFJlY3QuaW50ZXJzZWN0KGNvbnRlbnRCb3goKSk7CisgICAgICAgICAgICByZXBh
aW50UmVjdC5pbnRlcnNlY3QoY29udGVudEJveFJlY3QoKSk7CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgcmVwYWludFJlY3QgPSBjb250ZW50Qm94KCk7CisgICAgICAgICAgICByZXBhaW50
UmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgICAgIAogICAgICAgICByZXBhaW50UmVjdGFu
Z2xlKHJlcGFpbnRSZWN0KTsKICAgICB9CkBAIC0zOTYsNyArMzk2LDcgQEAgdm9pZCBSZW5kZXJJ
bWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAg
ICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250
ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdo
dCh0eCAtIG1feCwgdHkgLSBtX3ksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKKyAgICAg
ICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR4IC0geCgpLCB0eSAtIG1fZnJhbWVSZWN0Lnko
KSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOwogI2VuZGlmCiAKICAgICAgICAgSW50U2l6
ZSBjb250ZW50U2l6ZShjV2lkdGgsIGNIZWlnaHQpOwpAQCAtNDI0LDggKzQyNCw4IEBAIGJvb2wg
UmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQKICAgICBib29sIGluc2lkZSA9IFJl
bmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIF94LCBfeSwgX3R4LCBf
dHksIGhpdFRlc3RBY3Rpb24pOwogCiAgICAgaWYgKGluc2lkZSAmJiBlbGVtZW50KCkpIHsKLSAg
ICAgICAgaW50IHR4ID0gX3R4ICsgbV94OwotICAgICAgICBpbnQgdHkgPSBfdHkgKyBtX3k7Cisg
ICAgICAgIGludCB0eCA9IF90eCArIHgoKTsKKyAgICAgICAgaW50IHR5ID0gX3R5ICsgbV9mcmFt
ZVJlY3QueSgpOwogICAgICAgICAKICAgICAgICAgSFRNTE1hcEVsZW1lbnQqIG1hcCA9IGltYWdl
TWFwKCk7CiAgICAgICAgIGlmIChtYXApIHsKQEAgLTQ5MCw4ICs0OTAsMTAgQEAgYm9vbCBSZW5k
ZXJJbWFnZTo6aXNIZWlnaHRTcGVjaWZpZWQoKSBjbwogaW50IFJlbmRlckltYWdlOjpjYWxjUmVw
bGFjZWRXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCkgY29uc3QKIHsKICAgICBpZiAoaW1hZ2VI
YXNSZWxhdGl2ZVdpZHRoKCkpCi0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGNiID0gaXNQb3Np
dGlvbmVkKCkgPyBjb250YWluZXIoKSA6IGNvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICAgICAg
c2V0SW1hZ2VDb250YWluZXJTaXplKEludFNpemUoY2ItPmF2YWlsYWJsZVdpZHRoKCksIGNiLT5h
dmFpbGFibGVIZWlnaHQoKSkpOworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjYiA9IGlzUG9z
aXRpb25lZCgpID8gY29udGFpbmVyKCkgOiBjb250YWluaW5nQmxvY2soKSkgeworICAgICAgICAg
ICAgaWYgKGNiLT5pc0JveCgpKQorICAgICAgICAgICAgICAgIHNldEltYWdlQ29udGFpbmVyU2l6
ZShJbnRTaXplKHN0YXRpY19jYXN0PFJlbmRlckJveCo+KGNiKS0+YXZhaWxhYmxlV2lkdGgoKSwg
c3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4oY2IpLT5hdmFpbGFibGVIZWlnaHQoKSkpOworICAgICAg
ICB9CiAKICAgICBpbnQgd2lkdGg7CiAgICAgaWYgKGlzV2lkdGhTcGVjaWZpZWQoKSkKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsMTQgKzI5
MiwxNiBAQCB2b2lkIFJlbmRlcklubGluZTo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8CiAgICAgICAg
IHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4ICsgY3Vyci0+eFBvcygpLCB0eSArIGN1cnItPnlQb3Mo
KSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpKTsKIAogICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICBpZiAoIWN1cnItPmlzVGV4dCgpKQotICAgICAgICAgICAgY3Vyci0+YWJz
b2x1dGVSZWN0cyhyZWN0cywgdHggKyBjdXJyLT54UG9zKCksIHR5ICsgY3Vyci0+eVBvcygpLCBm
YWxzZSk7CisgICAgICAgIGlmIChjdXJyLT5pc0JveCgpKSB7CisgICAgICAgICAgICBSZW5kZXJC
b3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KGN1cnIpOworICAgICAgICAgICAgY3Vy
ci0+YWJzb2x1dGVSZWN0cyhyZWN0cywgdHggKyBib3gtPngoKSwgdHkgKyBib3gtPnkoKSwgZmFs
c2UpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGNvbnRpbnVhdGlvbigpICYmIHRvcExl
dmVsKQogICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0gY29udGFpbmluZ0Jsb2NrKCkt
PnhQb3MoKSArIGNvbnRpbnVhdGlvbigpLT54UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5IC0gY29udGFpbmluZ0Jsb2NrKCktPnlQb3MoKSArIGNvbnRpbnVh
dGlvbigpLT55UG9zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4
IC0gY29udGFpbmluZ0Jsb2NrKCktPngoKSArIGNvbnRpbnVhdGlvbigpLT54KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0gY29udGFpbmluZ0Jsb2NrKCktPnko
KSArIGNvbnRpbnVhdGlvbigpLT55KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRvcExldmVsKTsKIH0KIApAQCAtMzI0LDcgKzMyNiw3IEBAIGJvb2wgUmVuZGVySW5s
aW5lOjpyZXF1aXJlc0xheWVyKCkKICAgICByZXR1cm4gaXNSZWxQb3NpdGlvbmVkKCkgfHwgaXNU
cmFuc3BhcmVudCgpIHx8IGhhc01hc2soKTsKIH0KIAotaW50IFJlbmRlcklubGluZTo6d2lkdGgo
KSBjb25zdAoraW50IFJlbmRlcklubGluZTo6Ym91bmRpbmdCb3hXaWR0aCgpIGNvbnN0CiB7CiAg
ICAgLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgbWluaW1hbCBsZWZ0IHNpZGUgYW5kIHRoZSBt
YXhpbWFsIHJpZ2h0IHNpZGUuCiAgICAgaW50IGxlZnRTaWRlID0gMDsKQEAgLTMzOSw3ICszNDEs
NyBAQCBpbnQgUmVuZGVySW5saW5lOjp3aWR0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHJpZ2h0U2lk
ZSAtIGxlZnRTaWRlOwogfQogCi1pbnQgUmVuZGVySW5saW5lOjpoZWlnaHQoKSBjb25zdAoraW50
IFJlbmRlcklubGluZTo6Ym91bmRpbmdCb3hIZWlnaHQoKSBjb25zdAogewogICAgIC8vIFNlZSA8
cmRhcjovL3Byb2JsZW0vNTI4OTcyMT4sIGZvciBhbiB1bmtub3duIHJlYXNvbiB0aGUgbGlua2Vk
IGxpc3QgaGVyZSBpcyBzb21ldGltZXMgaW5jb25zaXN0ZW50LCBmaXJzdCBpcyBub24temVybyBh
bmQgbGFzdCBpcyB6ZXJvLiAgV2UgaGF2ZSBiZWVuCiAgICAgLy8gdW5hYmxlIHRvIHJlcHJvZHVj
ZSB0aGlzIGF0IGFsbCAoYW5kIGNvbnNlcXVlbnRseSB1bmFibGUgdG8gZmlndXJlIG90IHdoeSB0
aGlzIGlzIGhhcHBlbmluZykuICBUaGUgYXNzZXJ0IHdpbGwgaG9wZWZ1bGx5IGNhdGNoIHRoZSBw
cm9ibGVtIGluIGRlYnVnCkBAIC0zODUsMTQgKzM4NywxNCBAQCBWaXNpYmxlUG9zaXRpb24gUmVu
ZGVySW5saW5lOjpwb3NpdGlvbkZvCiB7CiAgICAgLy8gVHJhbnNsYXRlIHRoZSBjb29yZHMgZnJv
bSB0aGUgcHJlLWFub255bW91cyBibG9jayB0byB0aGUgcG9zdC1hbm9ueW1vdXMgYmxvY2suCiAg
ICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaW50IHBhcmVudEJs
b2NrWCA9IGNiLT54UG9zKCkgKyB4OwotICAgIGludCBwYXJlbnRCbG9ja1kgPSBjYi0+eVBvcygp
ICsgeTsKKyAgICBpbnQgcGFyZW50QmxvY2tYID0gY2ItPngoKSArIHg7CisgICAgaW50IHBhcmVu
dEJsb2NrWSA9IGNiLT55KCkgKyB5OwogICAgIGZvciAoUmVuZGVyRmxvdyogYyA9IGNvbnRpbnVh
dGlvbigpOyBjOyBjID0gYy0+Y29udGludWF0aW9uKCkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiBjb250QmxvY2sgPSBjOworICAgICAgICBSZW5kZXJGbG93KiBjb250QmxvY2sgPSBjOwogICAg
ICAgICBpZiAoYy0+aXNJbmxpbmUoKSkKICAgICAgICAgICAgIGNvbnRCbG9jayA9IGMtPmNvbnRh
aW5pbmdCbG9jaygpOwogICAgICAgICBpZiAoYy0+aXNJbmxpbmUoKSB8fCBjLT5maXJzdENoaWxk
KCkpCi0gICAgICAgICAgICByZXR1cm4gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhwYXJlbnRC
bG9ja1ggLSBjb250QmxvY2stPnhQb3MoKSwgcGFyZW50QmxvY2tZIC0gY29udEJsb2NrLT55UG9z
KCkpOworICAgICAgICAgICAgcmV0dXJuIGMtPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMocGFyZW50
QmxvY2tYIC0gY29udEJsb2NrLT54KCksIHBhcmVudEJsb2NrWSAtIGNvbnRCbG9jay0+eSgpKTsK
ICAgICB9CiAKICAgICByZXR1cm4gUmVuZGVyRmxvdzo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4
LCB5KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiA0MDA3NSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwx
MyArNTksMTMgQEAgcHVibGljOgogICAgIC8vIG92ZXJyaWRlcyBSZW5kZXJPYmplY3QKICAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpOwogCi0gICAgdmlydHVhbCBpbnQgd2lkdGgoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdDsKKyAgICBpbnQgYm91bmRpbmdC
b3hXaWR0aCgpIGNvbnN0OworICAgIGludCBib3VuZGluZ0JveEhlaWdodCgpIGNvbnN0OwogCi0g
ICAgLy8gdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0V2lkdGgvSGVpZ2h0LiAgT3ZlcnJpZGRlbiBi
eSBpbmxpbmVzIChSZW5kZXJGbG93KSB0byByZXR1cm4KLSAgICAvLyB0aGUgcmVtYWluaW5nIHdp
ZHRoIG9uIGEgZ2l2ZW4gbGluZSAoYW5kIHRoZSBoZWlnaHQgb2YgYSBzaW5nbGUgbGluZSkuCiAg
ICAgdmlydHVhbCBpbnQgb2Zmc2V0TGVmdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IG9mZnNl
dFRvcCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IG9mZnNldFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gYm91bmRpbmdCb3hXaWR0aCgpOyB9CisgICAgdmlydHVhbCBpbnQgb2Zmc2V0SGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gYm91bmRpbmdCb3hIZWlnaHQoKTsgfQogCiAgICAgdm9pZCBhYnNvbHV0
ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0g
dHJ1ZSk7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4m
LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CShyZXZpc2lvbiA0MDA3OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc3LDcgKzI3Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZVRyYW5zZm9ybSgpCiAgICAgCiAgICAgaWYgKGhhc1RyYW5zZm9ybSkgewogICAgICAgICBtX3Ry
YW5zZm9ybS0+cmVzZXQoKTsKLSAgICAgICAgcmVuZGVyZXIoKS0+c3R5bGUoKS0+YXBwbHlUcmFu
c2Zvcm0oKm1fdHJhbnNmb3JtLCByZW5kZXJlcigpLT5ib3JkZXJCb3goKS5zaXplKCkpOworICAg
ICAgICByZW5kZXJlcigpLT5zdHlsZSgpLT5hcHBseVRyYW5zZm9ybSgqbV90cmFuc2Zvcm0sIHJl
bmRlcmVyKCktPmJvcmRlckJveFJlY3QoKS5zaXplKCkpOwogICAgIH0KIH0KIApAQCAtMzc3LDI3
ICszNzcsMjcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbigpCiAgICAg
Ly8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJDbGlw
UmVjdHMoKTsKIAotICAgIGludCB4ID0gcmVuZGVyZXIoKS0+eFBvcygpOwotICAgIGludCB5ID0g
cmVuZGVyZXIoKS0+eVBvcygpIC0gcmVuZGVyZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKTsKKyAgICBp
bnQgeCA9IHJlbmRlcmVyKCktPngoKTsKKyAgICBpbnQgeSA9IHJlbmRlcmVyKCktPnkoKSAtIHJl
bmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCk7CiAKICAgICBpZiAoIXJlbmRlcmVyKCktPmlzUG9z
aXRpb25lZCgpICYmIHJlbmRlcmVyKCktPnBhcmVudCgpKSB7CiAgICAgICAgIC8vIFdlIG11c3Qg
YWRqdXN0IG91ciBwb3NpdGlvbiBieSB3YWxraW5nIHVwIHRoZSByZW5kZXIgdHJlZSBsb29raW5n
IGZvciB0aGUKICAgICAgICAgLy8gbmVhcmVzdCBlbmNsb3Npbmcgb2JqZWN0IHdpdGggYSBsYXll
ci4KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gcmVuZGVyZXIoKS0+cGFyZW50KCk7Cisg
ICAgICAgIFJlbmRlckJveCogY3VyciA9IHJlbmRlcmVyKCktPnBhcmVudEJveCgpOwogICAgICAg
ICB3aGlsZSAoY3VyciAmJiAhY3Vyci0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFj
dXJyLT5pc1RhYmxlUm93KCkpIHsKICAgICAgICAgICAgICAgICAvLyBSb3dzIGFuZCBjZWxscyBz
aGFyZSB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlICh0aGF0IG9mIHRoZSBzZWN0aW9uKS4KICAg
ICAgICAgICAgICAgICAvLyBPbWl0IHRoZW0gd2hlbiBjb21wdXRpbmcgb3VyIHhwb3MveXBvcy4K
LSAgICAgICAgICAgICAgICB4ICs9IGN1cnItPnhQb3MoKTsKLSAgICAgICAgICAgICAgICB5ICs9
IGN1cnItPnlQb3MoKTsKKyAgICAgICAgICAgICAgICB4ICs9IGN1cnItPngoKTsKKyAgICAgICAg
ICAgICAgICB5ICs9IGN1cnItPnkoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnIg
PSBjdXJyLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnRCb3goKTsK
ICAgICAgICAgfQogICAgICAgICB5ICs9IGN1cnItPmJvcmRlclRvcEV4dHJhKCk7CiAgICAgICAg
IGlmIChjdXJyLT5pc1RhYmxlUm93KCkpIHsKICAgICAgICAgICAgIC8vIFB1dCBvdXJzZWx2ZXMg
aW50byB0aGUgcm93IGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgICAgICAgICB4IC09IGN1cnItPnhQ
b3MoKTsKLSAgICAgICAgICAgIHkgLT0gY3Vyci0+eVBvcygpOworICAgICAgICAgICAgeCAtPSBj
dXJyLT54KCk7CisgICAgICAgICAgICB5IC09IGN1cnItPnkoKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtNDIzLDEwICs0MjMsMTggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3Np
dGlvbigpCiAgICAgfSBlbHNlIGlmIChwYXJlbnQoKSkKICAgICAgICAgcGFyZW50KCktPnN1YnRy
YWN0U2Nyb2xsZWRDb250ZW50T2Zmc2V0KHgsIHkpOwogICAgIAotICAgIHNldFBvcyh4LHkpOwor
ICAgIC8vIEZJWE1FOiBXZSdkIHJlYWxseSBsaWtlIHRvIGp1c3QgZ2V0IHJpZCBvZiB0aGUgY29u
Y2VwdCBvZiBhIGxheWVyIHJlY3RhbmdsZSBhbmQgcmVseSBvbiB0aGUgcmVuZGVyZXJzLgogCi0g
ICAgc2V0V2lkdGgocmVuZGVyZXIoKS0+d2lkdGgoKSk7Ci0gICAgc2V0SGVpZ2h0KHJlbmRlcmVy
KCktPmhlaWdodCgpICsgcmVuZGVyZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKSArIHJlbmRlcmVyKCkt
PmJvcmRlckJvdHRvbUV4dHJhKCkpOworICAgIHNldFBvcyh4LCB5KTsKKworICAgIGlmIChyZW5k
ZXJlcigpLT5pc1JlbmRlcklubGluZSgpKSB7CisgICAgICAgIFJlbmRlcklubGluZSogaW5saW5l
RmxvdyA9IHN0YXRpY19jYXN0PFJlbmRlcklubGluZSo+KHJlbmRlcmVyKCkpOworICAgICAgICBz
ZXRXaWR0aChpbmxpbmVGbG93LT5ib3VuZGluZ0JveFdpZHRoKCkpOworICAgICAgICBzZXRIZWln
aHQoaW5saW5lRmxvdy0+Ym91bmRpbmdCb3hIZWlnaHQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc2V0V2lkdGgocmVuZGVyZXIoKS0+d2lkdGgoKSk7CisgICAgICAgIHNldEhlaWdodChyZW5k
ZXJlcigpLT5oZWlnaHQoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCkgKyByZW5kZXJl
cigpLT5ib3JkZXJCb3R0b21FeHRyYSgpKTsKKyAgICB9CiAKICAgICBpZiAoIXJlbmRlcmVyKCkt
Pmhhc092ZXJmbG93Q2xpcCgpKSB7CiAgICAgICAgIGlmIChyZW5kZXJlcigpLT5vdmVyZmxvd1dp
ZHRoKCkgPiByZW5kZXJlcigpLT53aWR0aCgpKQpAQCAtMTE3MSw3ICsxMTc5LDcgQEAgc3RhdGlj
IEludFJlY3QgcmVzaXplckNvcm5lclJlY3QoY29uc3QgUgogCiBib29sIFJlbmRlckxheWVyOjpz
Y3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIXNjcm9sbENvcm5l
clJlY3QodGhpcywgcmVuZGVyZXIoKS0+Ym9yZGVyQm94KCkpLmlzRW1wdHkoKTsKKyAgICByZXR1
cm4gIXNjcm9sbENvcm5lclJlY3QodGhpcywgcmVuZGVyZXIoKS0+Ym9yZGVyQm94UmVjdCgpKS5p
c0VtcHR5KCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMTE4OSw3ICsx
MTk3LDcgQEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlckxheWVyOjpjcmVhdAogICAgIFJl
ZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKICAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxl
ID0gcmVuZGVyZXIoKS0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKS0+
c3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNDUk9MTEJBUik7CiAgICAgaWYg
KGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxi
YXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgcmVuZGVyZXIoKS0+
bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKSk7CisgICAgICAgIHdpZGdl
dCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0
aW9uLCByZW5kZXJlcigpLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5kZXJCb3go
KSk7CiAgICAgZWxzZQogICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNj
cm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CiAgICAgcmVuZGVy
ZXIoKS0+ZG9jdW1lbnQoKS0+dmlldygpLT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOyAgICAgICAg
CkBAIC0xMjc5LDcgKzEyODcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93
Q29udHJvCiAgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAoIXJlbmRlcmVyKCktPmhhc092
ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnJlc2l6ZSgpID09IFJFU0laRV9O
T05FKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEludFJlY3QgYm9yZGVyQm94ID0gcmVu
ZGVyZXIoKS0+Ym9yZGVyQm94KCk7CisgICAgSW50UmVjdCBib3JkZXJCb3ggPSByZW5kZXJlcigp
LT5ib3JkZXJCb3hSZWN0KCk7CiAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXIoc2Nyb2xsQ29ybmVy
UmVjdCh0aGlzLCBib3JkZXJCb3gpKTsKICAgICBJbnRSZWN0IGFic0JvdW5kcyhib3JkZXJCb3gu
eCgpICsgdHgsIGJvcmRlckJveC55KCkgKyB0eSwgYm9yZGVyQm94LndpZHRoKCksIGJvcmRlckJv
eC5oZWlnaHQoKSk7CiAgICAgaWYgKG1fdkJhcikKQEAgLTEyOTUsOSArMTMwMyw5IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm8KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2hCYXItPmhlaWdodCgpKSk7CiAgICAgCiAgICAgaWYgKG1fc2Ny
b2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UmVjdChzY3JvbGxDb3JuZXIp
OworICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHNjcm9sbENvcm5lcik7CiAg
ICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5zZXRSZWN0KHJlc2l6ZXJDb3Ju
ZXJSZWN0KHRoaXMsIGJvcmRlckJveCkpOworICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVj
dChyZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBib3JkZXJCb3gpKTsKIH0KIAogaW50IFJlbmRlckxh
eWVyOjpzY3JvbGxXaWR0aCgpCkBAIC0xNDkzLDcgKzE1MDEsNyBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludE92ZXJmbG93Q29udHJvbHMoCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xs
Q29ybmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IElu
dFJlY3QmIGRhbWFnZVJlY3QpCiB7Ci0gICAgSW50UmVjdCBjb3JuZXJSZWN0ID0gc2Nyb2xsQ29y
bmVyUmVjdCh0aGlzLCByZW5kZXJlcigpLT5ib3JkZXJCb3goKSk7CisgICAgSW50UmVjdCBjb3Ju
ZXJSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCh0aGlzLCByZW5kZXJlcigpLT5ib3JkZXJCb3hSZWN0
KCkpOwogICAgIEludFJlY3QgYWJzUmVjdCA9IEludFJlY3QoY29ybmVyUmVjdC54KCkgKyB0eCwg
Y29ybmVyUmVjdC55KCkgKyB0eSwgY29ybmVyUmVjdC53aWR0aCgpLCBjb3JuZXJSZWN0LmhlaWdo
dCgpKTsKICAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTUxNiw3ICsxNTI0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNp
emVyKEdyYXBoaWNzQwogICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5yZXNpemUoKSA9PSBS
RVNJWkVfTk9ORSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBjb3JuZXJSZWN0ID0g
cmVzaXplckNvcm5lclJlY3QodGhpcywgcmVuZGVyZXIoKS0+Ym9yZGVyQm94KCkpOworICAgIElu
dFJlY3QgY29ybmVyUmVjdCA9IHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIHJlbmRlcmVyKCktPmJv
cmRlckJveFJlY3QoKSk7CiAgICAgSW50UmVjdCBhYnNSZWN0ID0gSW50UmVjdChjb3JuZXJSZWN0
LngoKSArIHR4LCBjb3JuZXJSZWN0LnkoKSArIHR5LCBjb3JuZXJSZWN0LndpZHRoKCksIGNvcm5l
clJlY3QuaGVpZ2h0KCkpOwogICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3Qp
KQogICAgICAgICByZXR1cm47CkBAIC0xNzI0LDggKzE3MzIsOCBAQCBSZW5kZXJMYXllcjo6cGFp
bnRMYXllcihSZW5kZXJMYXllciogcm9vCiAgICAgY2FsY3VsYXRlUmVjdHMocm9vdExheWVyLCBw
YWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwg
b3V0bGluZVJlY3QsIHRlbXBvcmFyeUNsaXBSZWN0cyk7CiAgICAgaW50IHggPSBsYXllckJvdW5k
cy54KCk7CiAgICAgaW50IHkgPSBsYXllckJvdW5kcy55KCk7Ci0gICAgaW50IHR4ID0geCAtIHJl
bmRlcmVyKCktPnhQb3MoKTsKLSAgICBpbnQgdHkgPSB5IC0gcmVuZGVyZXIoKS0+eVBvcygpICsg
cmVuZGVyZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKTsKKyAgICBpbnQgdHggPSB4IC0gcmVuZGVyZXIo
KS0+eCgpOworICAgIGludCB0eSA9IHkgLSByZW5kZXJlcigpLT55KCkgKyByZW5kZXJlcigpLT5i
b3JkZXJUb3BFeHRyYSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAvLyBF
bnN1cmUgb3VyIGxpc3RzIGFyZSB1cC10by1kYXRlLgogICAgIHVwZGF0ZVpPcmRlckxpc3RzKCk7
CkBAIC0xOTQ4LDggKzE5NTYsOCBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RM
YXllcihSCiAgICAgLy8gTmV4dCB3ZSB3YW50IHRvIHNlZSBpZiB0aGUgbW91c2UgcG9zIGlzIGlu
c2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBvZiB0aGUgbGF5ZXIuCiAgICAgaWYgKGZnUmVj
dC5jb250YWlucyhoaXRUZXN0UG9pbnQpICYmIAogICAgICAgICByZW5kZXJlcigpLT5oaXRUZXN0
KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFBvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxheWVyQm91bmRzLngoKSAtIHJlbmRlcmVyKCktPnhQb3MoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsYXllckJvdW5kcy55KCkgLSByZW5kZXJlcigpLT55UG9zKCkgKyByZW5k
ZXJlcigpLT5ib3JkZXJUb3BFeHRyYSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
YXllckJvdW5kcy54KCkgLSByZW5kZXJlcigpLT54KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGF5ZXJCb3VuZHMueSgpIC0gcmVuZGVyZXIoKS0+eSgpICsgcmVuZGVyZXIoKS0+Ym9y
ZGVyVG9wRXh0cmEoKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0VGVzdERlc2Nl
bmRhbnRzKSkgewogICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBnZW5lcmF0ZWQgY29udGVudCwg
d2UgbWlnaHQgc3RpbGwgbm90IGhhdmUgYQogICAgICAgICAvLyBub2RlIGJ5IHRoZSB0aW1lIHdl
IGdldCB0byB0aGUgbGF5ZXIgbGV2ZWwsIHNpbmNlIG5vbmUgb2YKQEAgLTE5NzgsOCArMTk4Niw4
IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAvLyBOZXh0
IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBpcyBpbnNpZGUgdGhpcyBsYXllciBidXQgbm90
IGFueSBvZiBpdHMgY2hpbGRyZW4uCiAgICAgaWYgKGJnUmVjdC5jb250YWlucyhoaXRUZXN0UG9p
bnQpICYmCiAgICAgICAgIHJlbmRlcmVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBoaXRU
ZXN0UG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueCgpIC0g
cmVuZGVyZXIoKS0+eFBvcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91
bmRzLnkoKSAtIHJlbmRlcmVyKCktPnlQb3MoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJh
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueCgpIC0gcmVuZGVy
ZXIoKS0+eCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnkoKSAt
IHJlbmRlcmVyKCktPnkoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSGl0VGVzdFNlbGYpKSB7CiAgICAgICAgIGlmICghcmVzdWx0
LmlubmVyTm9kZSgpIHx8ICFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpIHsKICAgICAgICAg
ICAgIE5vZGUqIGUgPSBlbmNsb3NpbmdFbGVtZW50KCk7CkBAIC0yMTIyLDcgKzIxMzAsNyBAQCB2
b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBSCiAgICAgaW50IHggPSAwOwog
ICAgIGludCB5ID0gMDsKICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIHgsIHkp
OwotICAgIGxheWVyQm91bmRzID0gSW50UmVjdCh4LHksd2lkdGgoKSxoZWlnaHQoKSk7CisgICAg
bGF5ZXJCb3VuZHMgPSBJbnRSZWN0KHgsIHksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAKICAg
ICAvLyBVcGRhdGUgdGhlIGNsaXAgcmVjdHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBjaGlsZCBs
YXllcnMuCiAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVy
KCktPmhhc0NsaXAoKSkgewpAQCAtMjIxNywxMiArMjIyNSwxMiBAQCBJbnRSZWN0IFJlbmRlckxh
eWVyOjpib3VuZGluZ0JveChjb25zdCBSCiAgICAgICAgIGludCBsZWZ0ID0gZmlyc3RCb3gtPnhQ
b3MoKTsKICAgICAgICAgZm9yIChJbmxpbmVSdW5Cb3gqIGN1cnIgPSBmaXJzdEJveC0+bmV4dExp
bmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCiAgICAgICAgICAgICBs
ZWZ0ID0gbWluKGxlZnQsIGN1cnItPnhQb3MoKSk7Ci0gICAgICAgIHJlc3VsdCA9IEludFJlY3Qo
bV94ICsgbGVmdCwgbV95ICsgKHRvcCAtIHJlbmRlcmVyKCktPnlQb3MoKSksIHdpZHRoKCksIGJv
dHRvbSAtIHRvcCk7CisgICAgICAgIHJlc3VsdCA9IEludFJlY3QobV94ICsgbGVmdCwgbV95ICsg
KHRvcCAtIHJlbmRlcmVyKCktPnkoKSksIHdpZHRoKCksIGJvdHRvbSAtIHRvcCk7CiAgICAgfSBl
bHNlIGlmIChyZW5kZXJlcigpLT5pc1RhYmxlUm93KCkpIHsKICAgICAgICAgLy8gT3VyIGJvdW5k
aW5nIGJveCBpcyBqdXN0IHRoZSB1bmlvbiBvZiBhbGwgb2Ygb3VyIGNlbGxzJyBib3JkZXIvb3Zl
cmZsb3cgcmVjdHMuCiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJlbmRlcmVy
KCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSkgewotICAgICAgICAgICAgICAg
IEludFJlY3QgYmJveCA9IGNoaWxkLT5ib3JkZXJCb3goKTsKKyAgICAgICAgICAgICAgICBJbnRS
ZWN0IGJib3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjaGlsZCktPmJvcmRlckJveFJlY3Qo
KTsKICAgICAgICAgICAgICAgICBiYm94Lm1vdmUoMCwgY2hpbGQtPmJvcmRlclRvcEV4dHJhKCkp
OwogICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZShiYm94KTsKICAgICAgICAgICAgICAgICBJ
bnRSZWN0IG92ZXJmbG93UmVjdCA9IHJlbmRlcmVyKCktPm92ZXJmbG93UmVjdChmYWxzZSk7CkBA
IC0yMjM2LDcgKzIyNDQsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpib3VuZGluZ0JveChjb25z
dCBSCiAgICAgICAgIGlmIChyZW5kZXJlcigpLT5oYXNNYXNrKCkpCiAgICAgICAgICAgICByZXN1
bHQgPSByZW5kZXJlcigpLT5tYXNrQ2xpcFJlY3QoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBJbnRSZWN0IGJib3ggPSByZW5kZXJlcigpLT5ib3JkZXJCb3goKTsKKyAgICAgICAgICAg
IEludFJlY3QgYmJveCA9IHJlbmRlcmVyKCktPmJvcmRlckJveFJlY3QoKTsKICAgICAgICAgICAg
IHJlc3VsdCA9IGJib3g7CiAgICAgICAgICAgICBJbnRSZWN0IG92ZXJmbG93UmVjdCA9IHJlbmRl
cmVyKCktPm92ZXJmbG93UmVjdChmYWxzZSk7CiAgICAgICAgICAgICBpZiAoYmJveCAhPSBvdmVy
Zmxvd1JlY3QpCkBAIC0yMjQ0LDcgKzIyNTIsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpib3Vu
ZGluZ0JveChjb25zdCBSCiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBoYXZlIHRvIGFkanVz
dCB0aGUgeC95IG9mIHRoaXMgcmVzdWx0IHNvIHRoYXQgaXQgaXMgaW4gdGhlIGNvb3JkaW5hdGUg
c3BhY2Ugb2YgdGhlIGxheWVyLgotICAgICAgICAvLyBXZSBhbHNvIGhhdmUgdG8gYWRkIGluIGJv
cmRlclRvcEV4dHJhIGhlcmUsIHNpbmNlIGJvcmRlckJveCgpLCBpbiBvcmRlciB0byBwbGF5IHdl
bGwgd2l0aCBtZXRob2RzIGxpa2UKKyAgICAgICAgLy8gV2UgYWxzbyBoYXZlIHRvIGFkZCBpbiBp
bnRyaW5zaWNQYWRkaW5nVG9wIGhlcmUsIHNpbmNlIGJvcmRlckJveFJlY3QoKSwgaW4gb3JkZXIg
dG8gcGxheSB3ZWxsIHdpdGggbWV0aG9kcyBsaWtlCiAgICAgICAgIC8vIGZsb2F0UmVjdCB0aGF0
IGRlYWwgd2l0aCBjaGlsZCBjb250ZW50LCB1c2VzIGFuIG9yaWdpbiBvZiAoMCwwKSB0aGF0IGlz
IGF0IHRoZSBjaGlsZCBjb250ZW50IGJveCAoc28KICAgICAgICAgLy8gYm9yZGVyIGJveCByZXR1
cm5zIGEgeSBjb29yZCBvZiAtYm9yZGVyVG9wRXh0cmEoKS4gIFRoZSBsYXllciwgaG93ZXZlciwg
dXNlcyB0aGUgb3V0ZXIgYm94LiAgVGhpcyBpcyBhbGwKICAgICAgICAgLy8gcmVhbGx5IGNvbmZ1
c2luZy4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA0MDA3
NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpjYWxjSGVpZ2h0KCkKICAg
ICBpbnQgdG9BZGQgPSBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBib3JkZXJUb3Ao
KSArIGJvcmRlckJvdHRvbSgpOwogIAogICAgIGludCBpdGVtSGVpZ2h0ID0gUmVuZGVyTGlzdEJv
eDo6aXRlbUhlaWdodCgpOwotICAgIG1faGVpZ2h0ID0gaXRlbUhlaWdodCAqIHNpemUoKSAtIHJv
d1NwYWNpbmcgKyB0b0FkZDsKKyAgICBzZXRIZWlnaHQoaXRlbUhlaWdodCAqIHNpemUoKSAtIHJv
d1NwYWNpbmcgKyB0b0FkZCk7CiAgICAgCiAgICAgUmVuZGVyQmxvY2s6OmNhbGNIZWlnaHQoKTsK
ICAgICAKQEAgLTU3OCw3ICs1NzgsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRv
cChpbnQgbmV3CiAKIEludFJlY3QgUmVuZGVyTGlzdEJveDo6Y29udHJvbENsaXBSZWN0KGludCB0
eCwgaW50IHR5KSBjb25zdAogewotICAgIEludFJlY3QgY2xpcFJlY3QgPSBjb250ZW50Qm94KCk7
CisgICAgSW50UmVjdCBjbGlwUmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgY2xpcFJlY3Qu
bW92ZSh0eCwgdHkpOwogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsMTIgKzIzNSwxMiBA
QCB2b2lkIFJlbmRlckxpc3RJdGVtOjpsYXlvdXQoKQogdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9z
aXRpb25MaXN0TWFya2VyKCkKIHsKICAgICBpZiAobV9tYXJrZXIgJiYgIW1fbWFya2VyLT5pc0lu
c2lkZSgpICYmIG1fbWFya2VyLT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKLSAgICAgICAgaW50IG1h
cmtlck9sZFggPSBtX21hcmtlci0+eFBvcygpOworICAgICAgICBpbnQgbWFya2VyT2xkWCA9IG1f
bWFya2VyLT54KCk7CiAgICAgICAgIGludCB5T2Zmc2V0ID0gMDsKICAgICAgICAgaW50IHhPZmZz
ZXQgPSAwOwotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogbyA9IG1fbWFya2VyLT5wYXJlbnQo
KTsgbyAhPSB0aGlzOyBvID0gby0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIHlPZmZzZXQgKz0g
by0+eVBvcygpOwotICAgICAgICAgICAgeE9mZnNldCArPSBvLT54UG9zKCk7CisgICAgICAgIGZv
ciAoUmVuZGVyQm94KiBvID0gbV9tYXJrZXItPnBhcmVudEJveCgpOyBvICE9IHRoaXM7IG8gPSBv
LT5wYXJlbnRCb3goKSkgeworICAgICAgICAgICAgeU9mZnNldCArPSBvLT55KCk7CisgICAgICAg
ICAgICB4T2Zmc2V0ICs9IG8tPngoKTsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgYWRqdXN0
T3ZlcmZsb3cgPSBmYWxzZTsKQEAgLTI2NywxMiArMjY3LDEyIEBAIHZvaWQgUmVuZGVyTGlzdEl0
ZW06OnBvc2l0aW9uTGlzdE1hcmtlcigKIAogICAgICAgICBpZiAoYWRqdXN0T3ZlcmZsb3cpIHsK
ICAgICAgICAgICAgIEludFJlY3QgbWFya2VyUmVjdChtYXJrZXJYUG9zICsgeE9mZnNldCwgeU9m
ZnNldCwgbV9tYXJrZXItPndpZHRoKCksIG1fbWFya2VyLT5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBSZW5kZXJPYmplY3QqIG8gPSBtX21hcmtlcjsKKyAgICAgICAgICAgIFJlbmRlckJveCogbyA9
IG1fbWFya2VyOwogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIG8gPSBvLT5wYXJl
bnQoKTsKKyAgICAgICAgICAgICAgICBvID0gby0+cGFyZW50Qm94KCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG8tPmlzUmVuZGVyQmxvY2soKSkKICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyQmxvY2sqPihvKS0+YWRkVmlzdWFsT3ZlcmZsb3cobWFya2VyUmVjdCk7Ci0gICAg
ICAgICAgICAgICAgbWFya2VyUmVjdC5tb3ZlKC1vLT54UG9zKCksIC1vLT55UG9zKCkpOworICAg
ICAgICAgICAgICAgIG1hcmtlclJlY3QubW92ZSgtby0+eCgpLCAtby0+eSgpKTsKICAgICAgICAg
ICAgIH0gd2hpbGUgKG8gIT0gdGhpcyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yODAsNyArMjgw
LDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKAogCiB2b2lkIFJl
bmRlckxpc3RJdGVtOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkp
CiB7Ci0gICAgaWYgKCFtX2hlaWdodCkKKyAgICBpZiAoIWhlaWdodCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBSZW5kZXJCbG9jazo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzMCw3ICs1MzAsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYg
CiAgICAgSW50UmVjdCBtYXJrZXIgPSBnZXRSZWxhdGl2ZU1hcmtlclJlY3QoKTsKICAgICBtYXJr
ZXIubW92ZSh0eCwgdHkpOwogCi0gICAgSW50UmVjdCBib3godHggKyBtX3gsIHR5ICsgbV95LCBt
X3dpZHRoLCBtX2hlaWdodCk7CisgICAgSW50UmVjdCBib3godHggKyB4KCksIHR5ICsgbV9mcmFt
ZVJlY3QueSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAKICAgICBpZiAoYm94LnkoKSA+IHBhaW50
SW5mby5yZWN0LmJvdHRvbSgpIHx8IGJveC55KCkgKyBib3guaGVpZ2h0KCkgPCBwYWludEluZm8u
cmVjdC55KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYzNiwxMSArNjM2LDExIEBAIHZvaWQgUmVu
ZGVyTGlzdE1hcmtlcjo6bGF5b3V0KCkKICAgICBBU1NFUlQoIXByZWZXaWR0aHNEaXJ0eSgpKTsK
IAogICAgIGlmIChpc0ltYWdlKCkpIHsKLSAgICAgICAgbV93aWR0aCA9IG1faW1hZ2UtPmltYWdl
U2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLndpZHRoKCk7Ci0gICAgICAgIG1f
aGVpZ2h0ID0gbV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkuaGVpZ2h0KCk7CisgICAgICAgIHNldFdpZHRoKG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBz
dHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLndpZHRoKCkpOworICAgICAgICBzZXRIZWlnaHQobV9p
bWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkuaGVpZ2h0KCkp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fd2lkdGggPSBtaW5QcmVmV2lkdGgoKTsKLSAgICAg
ICAgbV9oZWlnaHQgPSBzdHlsZSgpLT5mb250KCkuaGVpZ2h0KCk7CisgICAgICAgIHNldFdpZHRo
KG1pblByZWZXaWR0aCgpKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0eWxlKCktPmZvbnQoKS5oZWln
aHQoKSk7CiAgICAgfQogCiAgICAgbV9tYXJnaW5MZWZ0ID0gbV9tYXJnaW5SaWdodCA9IDA7CkBA
IC02NjEsNyArNjYxLDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjppbWFnZUNoYW5nZWQoV3Jh
cAogICAgIGlmIChvICE9IG1faW1hZ2UtPmRhdGEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKG1fd2lkdGggIT0gbV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSkud2lkdGgoKSB8fCBtX2hlaWdodCAhPSBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywg
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS5oZWlnaHQoKSB8fCBtX2ltYWdlLT5lcnJvck9jY3Vy
cmVkKCkpCisgICAgaWYgKHdpZHRoKCkgIT0gbV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSkud2lkdGgoKSB8fCBoZWlnaHQoKSAhPSBtX2ltYWdlLT5pbWFn
ZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS5oZWlnaHQoKSB8fCBtX2ltYWdl
LT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1Jl
Y2FsYygpOwogICAgIGVsc2UKICAgICAgICAgcmVwYWludCgpOwpAQCAtODI5LDcgKzgyOSw3IEBA
IGJvb2wgUmVuZGVyTGlzdE1hcmtlcjo6aXNJbnNpZGUoKSBjb25zdAogSW50UmVjdCBSZW5kZXJM
aXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcmtlclJlY3QoKQogewogICAgIGlmIChpc0ltYWdlKCkp
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KG1feCwgbV95LCBtX2ltYWdlLT5pbWFnZVNpemUodGhp
cywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS53aWR0aCgpLCBtX2ltYWdlLT5pbWFnZVNpemUo
dGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVy
biBJbnRSZWN0KHgoKSwgbV9mcmFtZVJlY3QueSgpLCBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywg
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS53aWR0aCgpLCBtX2ltYWdlLT5pbWFnZVNpemUodGhp
cywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS5oZWlnaHQoKSk7CiAKICAgICBzd2l0Y2ggKHN0
eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgewogICAgICAgICBjYXNlIERJU0M6CkBAIC04MzksNyAr
ODM5LDcgQEAgSW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcgogICAgICAg
ICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKICAgICAgICAgICAgIGlu
dCBhc2NlbnQgPSBmb250LmFzY2VudCgpOwogICAgICAgICAgICAgaW50IGJ1bGxldFdpZHRoID0g
KGFzY2VudCAqIDIgLyAzICsgMSkgLyAyOwotICAgICAgICAgICAgcmV0dXJuIEludFJlY3QobV94
ICsgMSwgbV95ICsgMyAqIChhc2NlbnQgLSBhc2NlbnQgKiAyIC8gMykgLyAyLCBidWxsZXRXaWR0
aCwgYnVsbGV0V2lkdGgpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoeCgpICsgMSwgbV9m
cmFtZVJlY3QueSgpICsgMyAqIChhc2NlbnQgLSBhc2NlbnQgKiAyIC8gMykgLyAyLCBidWxsZXRX
aWR0aCwgYnVsbGV0V2lkdGgpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTE5PTkU6CiAgICAg
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOwpAQCAtODY2LDcgKzg2Niw3IEBAIEludFJlY3QgUmVu
ZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXIKICAgICAgICAgICAgIGludCBpdGVtV2lkdGgg
PSBmb250LndpZHRoKG1fdGV4dCk7CiAgICAgICAgICAgICBjb25zdCBVQ2hhciBwZXJpb2RTcGFj
ZVsyXSA9IHsgJy4nLCAnICcgfTsKICAgICAgICAgICAgIGludCBwZXJpb2RTcGFjZVdpZHRoID0g
Zm9udC53aWR0aChUZXh0UnVuKHBlcmlvZFNwYWNlLCAyKSk7Ci0gICAgICAgICAgICByZXR1cm4g
SW50UmVjdChtX3gsIG1feSArIGZvbnQuYXNjZW50KCksIGl0ZW1XaWR0aCArIHBlcmlvZFNwYWNl
V2lkdGgsIGZvbnQuaGVpZ2h0KCkpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoeCgpLCBt
X2ZyYW1lUmVjdC55KCkgKyBmb250LmFzY2VudCgpLCBpdGVtV2lkdGggKyBwZXJpb2RTcGFjZVdp
ZHRoLCBmb250LmhlaWdodCgpKTsKICAgICB9CiAKICAgICByZXR1cm4gSW50UmVjdCgpOwpAQCAt
ODg5LDcgKzg4OSw3IEBAIEludFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdCgK
ICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAogICAgIFJvb3RJbmxpbmVCb3gqIHJvb3QgPSBp
bmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKLSAgICBJbnRSZWN0IHJlY3QoMCwgcm9vdC0+c2Vs
ZWN0aW9uVG9wKCkgLSB5UG9zKCksIHdpZHRoKCksIHJvb3QtPnNlbGVjdGlvbkhlaWdodCgpKTsK
KyAgICBJbnRSZWN0IHJlY3QoMCwgcm9vdC0+c2VsZWN0aW9uVG9wKCkgLSB5KCksIHdpZHRoKCks
IHJvb3QtPnNlbGVjdGlvbkhlaWdodCgpKTsKICAgICAgICAgICAgIAogICAgIGlmIChjbGlwVG9W
aXNpYmxlQ29udGVudCkKICAgICAgICAgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QocmVjdCk7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24gNDAwNzUpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDcgKzEwNSw3IEBAIGJvb2wgUmVuZGVyTWFycXVlZTo6aXNIb3Jpem9udGFsKCkgY29uc3QK
IAogaW50IFJlbmRlck1hcnF1ZWU6OmNvbXB1dGVQb3NpdGlvbihFTWFycXVlZURpcmVjdGlvbiBk
aXIsIGJvb2wgc3RvcEF0Q29udGVudEVkZ2UpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBvID0gbV9s
YXllci0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJCb3gqIG8gPSBtX2xheWVyLT5yZW5kZXJlcigp
OwogICAgIFJlbmRlclN0eWxlKiBzID0gby0+c3R5bGUoKTsKICAgICBpZiAoaXNIb3Jpem9udGFs
KCkpIHsKICAgICAgICAgYm9vbCBsdHIgPSBzLT5kaXJlY3Rpb24oKSA9PSBMVFI7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1lZGlhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDE2ICsxMDUsMTYg
QEAgTWVkaWFQbGF5ZXIqIFJlbmRlck1lZGlhOjpwbGF5ZXIoKSBjb25zdAogCiB2b2lkIFJlbmRl
ck1lZGlhOjpsYXlvdXQoKQogewotICAgIEludFNpemUgb2xkU2l6ZSA9IGNvbnRlbnRCb3goKS5z
aXplKCk7CisgICAgSW50U2l6ZSBvbGRTaXplID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CiAK
ICAgICBSZW5kZXJSZXBsYWNlZDo6bGF5b3V0KCk7CiAKLSAgICBSZW5kZXJPYmplY3QqIGNvbnRy
b2xzUmVuZGVyZXIgPSBtX2NvbnRyb2xzU2hhZG93Um9vdCA/IG1fY29udHJvbHNTaGFkb3dSb290
LT5yZW5kZXJlcigpIDogMDsKKyAgICBSZW5kZXJCb3gqIGNvbnRyb2xzUmVuZGVyZXIgPSBtX2Nv
bnRyb2xzU2hhZG93Um9vdCA/IG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJCb3goKSA6IDA7
CiAgICAgaWYgKCFjb250cm9sc1JlbmRlcmVyKQogICAgICAgICByZXR1cm47Ci0gICAgSW50U2l6
ZSBuZXdTaXplID0gY29udGVudEJveCgpLnNpemUoKTsKKyAgICBJbnRTaXplIG5ld1NpemUgPSBj
b250ZW50Qm94UmVjdCgpLnNpemUoKTsKICAgICBpZiAobmV3U2l6ZSAhPSBvbGRTaXplIHx8IGNv
bnRyb2xzUmVuZGVyZXItPm5lZWRzTGF5b3V0KCkpIHsKLSAgICAgICAgY29udHJvbHNSZW5kZXJl
ci0+c2V0UG9zKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFk
ZGluZ1RvcCgpKTsKKyAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c2V0TG9jYXRpb24oYm9yZGVy
TGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwogICAg
ICAgICBjb250cm9sc1JlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUu
aGVpZ2h0KCksIEZpeGVkKSk7CiAgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnN0eWxlKCktPnNl
dFdpZHRoKExlbmd0aChuZXdTaXplLndpZHRoKCksIEZpeGVkKSk7CiAgICAgICAgIGNvbnRyb2xz
UmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKQEAgLTQ0MCw3ICs0NDAsNyBA
QCBpbnQgUmVuZGVyTWVkaWE6Omxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jCiAgICAgaWYgKCFtX2Nv
bnRyb2xzU2hhZG93Um9vdCB8fCAhbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkpCiAg
ICAgICAgIHJldHVybiBib3R0b207CiAgICAgCi0gICAgcmV0dXJuIG1heChib3R0b20sICBtX2Nv
bnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKS0+eVBvcygpICsgbV9jb250cm9sc1NoYWRvd1Jv
b3QtPnJlbmRlcmVyKCktPmxvd2VzdFBvc2l0aW9uKGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBp
bmNsdWRlU2VsZikpOworICAgIHJldHVybiBtYXgoYm90dG9tLCAgbV9jb250cm9sc1NoYWRvd1Jv
b3QtPnJlbmRlckJveCgpLT55KCkgKyBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKS0+
bG93ZXN0UG9zaXRpb24oaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGluY2x1ZGVTZWxmKSk7CiB9
CiAKIGludCBSZW5kZXJNZWRpYTo6cmlnaHRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZs
b3dJbnRlcmlvciwgYm9vbCBpbmNsdWRlU2VsZikgY29uc3QKQEAgLTQ0OSw3ICs0NDksNyBAQCBp
bnQgUmVuZGVyTWVkaWE6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgCiAgICAgaWYgKCFtX2NvbnRy
b2xzU2hhZG93Um9vdCB8fCAhbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkpCiAgICAg
ICAgIHJldHVybiByaWdodDsKICAgICAKLSAgICByZXR1cm4gbWF4KHJpZ2h0LCBtX2NvbnRyb2xz
U2hhZG93Um9vdC0+cmVuZGVyZXIoKS0+eFBvcygpICsgbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJl
bmRlcmVyKCktPnJpZ2h0bW9zdFBvc2l0aW9uKGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBpbmNs
dWRlU2VsZikpOworICAgIHJldHVybiBtYXgocmlnaHQsIG1fY29udHJvbHNTaGFkb3dSb290LT5y
ZW5kZXJCb3goKS0+eCgpICsgbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCktPnJpZ2h0
bW9zdFBvc2l0aW9uKGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBpbmNsdWRlU2VsZikpOwogfQog
CiBpbnQgUmVuZGVyTWVkaWE6OmxlZnRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJ
bnRlcmlvciwgYm9vbCBpbmNsdWRlU2VsZikgY29uc3QKQEAgLTQ1OCw3ICs0NTgsNyBAQCBpbnQg
UmVuZGVyTWVkaWE6OmxlZnRtb3N0UG9zaXRpb24oYm9vbCBpCiAgICAgaWYgKCFtX2NvbnRyb2xz
U2hhZG93Um9vdCB8fCAhbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkpCiAgICAgICAg
IHJldHVybiBsZWZ0OwogICAgIAotICAgIHJldHVybiBtaW4obGVmdCwgbV9jb250cm9sc1NoYWRv
d1Jvb3QtPnJlbmRlcmVyKCktPnhQb3MoKSArICBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVy
ZXIoKS0+bGVmdG1vc3RQb3NpdGlvbihpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgaW5jbHVkZVNl
bGYpKTsKKyAgICByZXR1cm4gbWluKGxlZnQsIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJC
b3goKS0+eCgpICsgIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpLT5sZWZ0bW9zdFBv
c2l0aW9uKGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBpbmNsdWRlU2VsZikpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDggKzIyNCw4IEBAIEludFJlY3QgUmVuZGVyTWVudUxp
c3Q6OmNvbnRyb2xDbGlwUmVjdCgKICAgICAgICAgICAgICAgICAgICBjb250ZW50V2lkdGgoKSwg
CiAgICAgICAgICAgICAgICAgICAgY29udGVudEhlaWdodCgpKTsKICAgICAKLSAgICBJbnRSZWN0
IGlubmVyQm94KHR4ICsgbV9pbm5lckJsb2NrLT54UG9zKCkgKyBtX2lubmVyQmxvY2stPnBhZGRp
bmdMZWZ0KCksIAotICAgICAgICAgICAgICAgICAgIHR5ICsgbV9pbm5lckJsb2NrLT55UG9zKCkg
KyBtX2lubmVyQmxvY2stPnBhZGRpbmdUb3AoKSwKKyAgICBJbnRSZWN0IGlubmVyQm94KHR4ICsg
bV9pbm5lckJsb2NrLT54KCkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCksIAorICAgICAg
ICAgICAgICAgICAgIHR5ICsgbV9pbm5lckJsb2NrLT55KCkgKyBtX2lubmVyQmxvY2stPnBhZGRp
bmdUb3AoKSwKICAgICAgICAgICAgICAgICAgICBtX2lubmVyQmxvY2stPmNvbnRlbnRXaWR0aCgp
LCAKICAgICAgICAgICAgICAgICAgICBtX2lubmVyQmxvY2stPmNvbnRlbnRIZWlnaHQoKSk7CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgs
NiArMTg4LDcgQEAgUmVuZGVyT2JqZWN0OjpSZW5kZXJPYmplY3QoTm9kZSogbm9kZSkKICAgICAs
IG1fcGFpbnRCYWNrZ3JvdW5kKGZhbHNlKQogICAgICwgbV9pc0Fub255bW91cyhub2RlID09IG5v
ZGUtPmRvY3VtZW50KCkpCiAgICAgLCBtX2lzVGV4dChmYWxzZSkKKyAgICAsIG1faXNCb3goZmFs
c2UpCiAgICAgLCBtX2lubGluZSh0cnVlKQogICAgICwgbV9yZXBsYWNlZChmYWxzZSkKICAgICAs
IG1faXNEcmFnZ2luZyhmYWxzZSkKQEAgLTUwNCw4MyArNTA1LDYgQEAgUmVuZGVyQmxvY2sqIFJl
bmRlck9iamVjdDo6Zmlyc3RMaW5lQmxvYwogICAgIHJldHVybiAwOwogfQogCi1pbnQgUmVuZGVy
T2JqZWN0OjpvZmZzZXRMZWZ0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJPYmplY3QqIG9mZnNldFBh
ciA9IG9mZnNldFBhcmVudCgpOwotICAgIGlmICghb2Zmc2V0UGFyKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBpbnQgeCA9IHhQb3MoKSAtIG9mZnNldFBhci0+Ym9yZGVyTGVmdCgpOwotICAgIGlm
ICghaXNQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQotICAg
ICAgICAgICAgeCArPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCb3gqPih0aGlzKS0+cmVsYXRp
dmVQb3NpdGlvbk9mZnNldFgoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBjdXJyID0gcGFyZW50
KCk7Ci0gICAgICAgIHdoaWxlIChjdXJyICYmIGN1cnIgIT0gb2Zmc2V0UGFyKSB7Ci0gICAgICAg
ICAgICB4ICs9IGN1cnItPnhQb3MoKTsKLSAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnQo
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0UGFyLT5pc0JvZHkoKSAmJiAhb2Zmc2V0
UGFyLT5pc1JlbFBvc2l0aW9uZWQoKSAmJiAhb2Zmc2V0UGFyLT5pc1Bvc2l0aW9uZWQoKSkKLSAg
ICAgICAgICAgIHggKz0gb2Zmc2V0UGFyLT54UG9zKCk7Ci0gICAgfQotICAgIHJldHVybiB4Owot
fQotCi1pbnQgUmVuZGVyT2JqZWN0OjpvZmZzZXRUb3AoKSBjb25zdAotewotICAgIFJlbmRlck9i
amVjdCogb2Zmc2V0UGFyID0gb2Zmc2V0UGFyZW50KCk7Ci0gICAgaWYgKCFvZmZzZXRQYXIpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIGludCB5ID0geVBvcygpIC0gYm9yZGVyVG9wRXh0cmEoKSAt
IG9mZnNldFBhci0+Ym9yZGVyVG9wKCk7Ci0gICAgaWYgKCFpc1Bvc2l0aW9uZWQoKSkgewotICAg
ICAgICBpZiAoaXNSZWxQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICB5ICs9IHN0YXRpY19jYXN0
PGNvbnN0IFJlbmRlckJveCo+KHRoaXMpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WSgpOwotICAg
ICAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBwYXJlbnQoKTsKLSAgICAgICAgd2hpbGUgKGN1cnIg
JiYgY3VyciAhPSBvZmZzZXRQYXIpIHsKLSAgICAgICAgICAgIGlmICghY3Vyci0+aXNUYWJsZVJv
dygpKQotICAgICAgICAgICAgICAgIHkgKz0gY3Vyci0+eVBvcygpOwotICAgICAgICAgICAgY3Vy
ciA9IGN1cnItPnBhcmVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvZmZzZXRQYXItPmlz
Qm9keSgpICYmICFvZmZzZXRQYXItPmlzUmVsUG9zaXRpb25lZCgpICYmICFvZmZzZXRQYXItPmlz
UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgeSArPSBvZmZzZXRQYXItPnlQb3MoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHk7Ci19Ci0KLVJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpvZmZzZXRQ
YXJlbnQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJdCBmZWVscyBsaWtlIHRoaXMgZnVuY3Rp
b24gY291bGQgYWxtb3N0IGJlIHdyaXR0ZW4gdXNpbmcgY29udGFpbmluZyBibG9ja3MuCi0gICAg
aWYgKGlzQm9keSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGJvb2wgc2tpcFRhYmxlcyA9
IGlzUG9zaXRpb25lZCgpIHx8IGlzUmVsUG9zaXRpb25lZCgpOwotICAgIGZsb2F0IGN1cnJab29t
ID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIFJlbmRlck9iamVjdCogY3VyciA9IHBh
cmVudCgpOwotICAgIHdoaWxlIChjdXJyICYmICghY3Vyci0+ZWxlbWVudCgpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICghY3Vyci0+aXNQb3NpdGlvbmVkKCkgJiYgIWN1cnItPmlzUmVsUG9zaXRp
b25lZCgpICYmICFjdXJyLT5pc0JvZHkoKSkpKSB7Ci0gICAgICAgIE5vZGUqIGVsZW1lbnQgPSBj
dXJyLT5lbGVtZW50KCk7Ci0gICAgICAgIGlmICghc2tpcFRhYmxlcyAmJiBlbGVtZW50KSB7Ci0g
ICAgICAgICAgICBib29sIGlzVGFibGVFbGVtZW50ID0gZWxlbWVudC0+aGFzVGFnTmFtZSh0YWJs
ZVRhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5oYXNU
YWdOYW1lKHRkVGFnKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1l
bnQtPmhhc1RhZ05hbWUodGhUYWcpOwotCi0jaWYgRU5BQkxFKFdNTCkKLSAgICAgICAgICAgIGlm
ICghaXNUYWJsZUVsZW1lbnQgJiYgZWxlbWVudC0+aXNXTUxFbGVtZW50KCkpCi0gICAgICAgICAg
ICAgICAgaXNUYWJsZUVsZW1lbnQgPSBlbGVtZW50LT5oYXNUYWdOYW1lKFdNTE5hbWVzOjp0YWJs
ZVRhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPmhhc1Rh
Z05hbWUoV01MTmFtZXM6OnRkVGFnKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBpZiAoaXNUYWJs
ZUVsZW1lbnQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBm
bG9hdCBuZXdab29tID0gY3Vyci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBp
ZiAoY3Vyclpvb20gIT0gbmV3Wm9vbSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjdXJy
Wm9vbSA9IG5ld1pvb207Ci0gICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnQoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGN1cnI7Ci19Ci0KIGludCBSZW5kZXJPYmplY3Q6OnZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXpl
KCkgPyBsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOwpAQCAtNTkxLDUyICs1
MTUsNiBAQCBpbnQgUmVuZGVyT2JqZWN0Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpCiAgICAgcmV0
dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+aG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCgpIDogMDsKIH0KIAotLy8gTW9yZSBJRSBleHRlbnNpb25zLiAgY2xp
ZW50V2lkdGggYW5kIGNsaWVudEhlaWdodCByZXByZXNlbnQgdGhlIGludGVyaW9yIG9mIGFuIG9i
amVjdAotLy8gZXhjbHVkaW5nIGJvcmRlciBhbmQgc2Nyb2xsYmFyLgotaW50IFJlbmRlck9iamVj
dDo6Y2xpZW50V2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiB3aWR0aCgpIC0gYm9yZGVyTGVm
dCgpIC0gYm9yZGVyUmlnaHQoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKLX0KLQotaW50
IFJlbmRlck9iamVjdDo6Y2xpZW50SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGVpZ2h0
KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCgpOwotfQotCi0vLyBzY3JvbGxXaWR0aC9zY3JvbGxIZWlnaHQgd2lsbCBiZSB0aGUgc2Ft
ZSBhcyBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgdW5sZXNzIHRoZQotLy8gb2JqZWN0IGhhcyBv
dmVyZmxvdzpoaWRkZW4vc2Nyb2xsL2F1dG8gc3BlY2lmaWVkIGFuZCBhbHNvIGhhcyBvdmVyZmxv
dy4KLWludCBSZW5kZXJPYmplY3Q6OnNjcm9sbFdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
aGFzT3ZlcmZsb3dDbGlwKCkgPyBsYXllcigpLT5zY3JvbGxXaWR0aCgpIDogb3ZlcmZsb3dXaWR0
aCgpOwotfQotCi1pbnQgUmVuZGVyT2JqZWN0OjpzY3JvbGxIZWlnaHQoKSBjb25zdAotewotICAg
IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSA/IGxheWVyKCktPnNjcm9sbEhlaWdodCgpIDogb3Zl
cmZsb3dIZWlnaHQoKTsKLX0KLQotaW50IFJlbmRlck9iamVjdDo6c2Nyb2xsTGVmdCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpID8gbGF5ZXIoKS0+c2Nyb2xsWE9mZnNl
dCgpIDogMDsKLX0KLQotaW50IFJlbmRlck9iamVjdDo6c2Nyb2xsVG9wKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgPyBsYXllcigpLT5zY3JvbGxZT2Zmc2V0KCkgOiAw
OwotfQotCi12b2lkIFJlbmRlck9iamVjdDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCkKLXsK
LSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIGxheWVyKCktPnNjcm9sbFRvWE9m
ZnNldChuZXdMZWZ0KTsKLX0KLQotdm9pZCBSZW5kZXJPYmplY3Q6OnNldFNjcm9sbFRvcChpbnQg
bmV3VG9wKQotewotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgbGF5ZXIoKS0+
c2Nyb2xsVG9ZT2Zmc2V0KG5ld1RvcCk7Ci19Ci0KIGJvb2wgUmVuZGVyT2JqZWN0OjpzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigpOwpAQCAt
Njc2LDcgKzU1NCw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpoYXNTdGF0aWNZKCkgY29uc3QKICAg
ICByZXR1cm4gKHN0eWxlKCktPnRvcCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmJvdHRvbSgpLmlz
QXV0bygpKSB8fCBzdHlsZSgpLT50b3AoKS5pc1N0YXRpYygpOwogfQogCi12b2lkIFJlbmRlck9i
amVjdDo6bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJPYmplY3Qq
KQordm9pZCBSZW5kZXJPYmplY3Q6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlv
dXQoUmVuZGVyQm94KikKIHsKIH0KIApAQCAtMTY5Nyw5MiArMTU3NSw2IEBAIHZvaWQgUmVuZGVy
T2JqZWN0OjpwYWludEJveFNoYWRvdyhHcmFwaGkKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyT2Jq
ZWN0OjphZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgdW5zaWduZWQsIHVuc2lnbmVk
LCBib29sKQotewotfQotCi12b2lkIFJlbmRlck9iamVjdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8
SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCkKLXsKLSAgICAv
LyBGb3IgYmxvY2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBtYXJn
aW5zIHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRoZQotICAgIC8vIGlubGluZSBib3hlcyBh
Ym92ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGluZyBtZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0g
YSBzaW5nbGUgaXJyZWd1bGFyCi0gICAgLy8gc2hhcGUpLgotICAgIFJlbmRlckZsb3cqIGNvbnRp
bnVhdGlvbiA9IHZpcnR1YWxDb250aW51YXRpb24oKTsKLSAgICBpZiAodG9wTGV2ZWwgJiYgY29u
dGludWF0aW9uKSB7Ci0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSAtIGNvbGxh
cHNlZE1hcmdpblRvcCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLCBo
ZWlnaHQoKSArIGNvbGxhcHNlZE1hcmdpblRvcCgpICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCkp
KTsKLSAgICAgICAgY29udGludWF0aW9uLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggLSB4UG9zKCkgKyBjb250aW51YXRpb24tPmNv
bnRhaW5pbmdCbG9jaygpLT54UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eSAtIHlQb3MoKSArIGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCktPnlQb3Mo
KSwgdG9wTGV2ZWwpOwotICAgIH0gZWxzZQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0
eCwgdHksIHdpZHRoKCksIGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRv
bUV4dHJhKCkpKTsKLX0KLQotSW50UmVjdCBSZW5kZXJPYmplY3Q6OmFic29sdXRlQm91bmRpbmdC
b3hSZWN0KGJvb2wgdXNlVHJhbnNmb3JtcykKLXsKLSAgICBpZiAodXNlVHJhbnNmb3Jtcykgewot
ICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICAgICAgYWJzb2x1dGVRdWFkcyhx
dWFkcyk7Ci0KLSAgICAgICAgc2l6ZV90IG4gPSBxdWFkcy5zaXplKCk7Ci0gICAgICAgIGlmICgh
bikKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgCi0gICAgICAgIEludFJlY3Qg
cmVzdWx0ID0gcXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDE7IGkgPCBuOyArK2kpCi0gICAgICAgICAgICByZXN1bHQudW5pdGUocXVhZHNb
aV0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKLSAgICBWZWN0
b3I8SW50UmVjdD4gcmVjdHM7Ci0gICAgYWJzb2x1dGVSZWN0cyhyZWN0cywgYWJzUG9zLngoKSwg
YWJzUG9zLnkoKSk7Ci0KLSAgICBzaXplX3QgbiA9IHJlY3RzLnNpemUoKTsKLSAgICBpZiAoIW4p
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBJbnRSZWN0IHJlc3VsdCA9IHJlY3Rz
WzBdOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbjsgKytpKQotICAgICAgICByZXN1bHQu
dW5pdGUocmVjdHNbaV0pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUmVuZGVyT2Jq
ZWN0Ojpjb2xsZWN0QWJzb2x1dGVMaW5lQm94UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCB1bnNp
Z25lZCwgdW5zaWduZWQsIGJvb2wpCi17Ci19Ci0KLXZvaWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0
ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0b3BMZXZlbCkKLXsKLSAgICAv
LyBGb3IgYmxvY2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBtYXJn
aW5zIHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRoZQotICAgIC8vIGlubGluZSBib3hlcyBh
Ym92ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGluZyBtZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0g
YSBzaW5nbGUgaXJyZWd1bGFyCi0gICAgLy8gc2hhcGUpLgotICAgIFJlbmRlckZsb3cqIGNvbnRp
bnVhdGlvbiA9IHZpcnR1YWxDb250aW51YXRpb24oKTsKLSAgICBpZiAodG9wTGV2ZWwgJiYgY29u
dGludWF0aW9uKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoMCwgLWNvbGxhcHNlZE1h
cmdpblRvcCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCksIGhlaWdodCgp
ICsgY29sbGFwc2VkTWFyZ2luVG9wKCkgKyBjb2xsYXBzZWRNYXJnaW5Cb3R0b20oKSk7Ci0gICAg
ICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwotICAgICAg
ICBjb250aW51YXRpb24tPmFic29sdXRlUXVhZHMocXVhZHMsIHRvcExldmVsKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KDAs
IDAsIHdpZHRoKCksIGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4
dHJhKCkpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyT2JqZWN0OjphZGRBYnNvbHV0ZVJlY3RGb3JMYXll
cihJbnRSZWN0JiByZXN1bHQpCi17Ci0gICAgaWYgKGhhc0xheWVyKCkpCi0gICAgICAgIHJlc3Vs
dC51bml0ZShhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKLSAgICBmb3IgKFJlbmRlck9iamVj
dCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgIGN1cnJlbnQtPmFkZEFic29sdXRlUmVjdEZvckxheWVyKHJl
c3VsdCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyT2JqZWN0OjpwYWludGluZ1Jvb3RSZWN0KEludFJl
Y3QmIHRvcExldmVsUmVjdCkKLXsKLSAgICBJbnRSZWN0IHJlc3VsdCA9IGFic29sdXRlQm91bmRp
bmdCb3hSZWN0KCk7Ci0gICAgdG9wTGV2ZWxSZWN0ID0gcmVzdWx0OwotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVu
dC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY3VycmVudC0+YWRkQWJzb2x1dGVSZWN0Rm9yTGF5
ZXIocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiB2b2lkIFJlbmRlck9iamVjdDo6
YWRkUERGVVJMUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQpAQCAtMTc5NiwyMyArMTU4OCw3IEBAIHZv
aWQgUmVuZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KEdyYXBoaWMKICAgICBjb250ZXh0LT5zZXRV
UkxGb3JSZWN0KG5vZGUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGhyZWYpLCByZWN0KTsKIH0K
IAotCi12b2lkIFJlbmRlck9iamVjdDo6YWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwgaW50IHR5KQotewotICAgIC8vIEZvciBibG9ja3Mg
aW5zaWRlIGlubGluZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNsdWRlIG1hcmdpbnMgc28gdGhhdCB3
ZSBydW4gcmlnaHQgdXAgdG8gdGhlCi0gICAgLy8gaW5saW5lIGJveGVzIGFib3ZlIGFuZCBiZWxv
dyB1cyAodGh1cyBnZXR0aW5nIG1lcmdlZCB3aXRoIHRoZW0gdG8gZm9ybSBhIHNpbmdsZSBpcnJl
Z3VsYXIKLSAgICAvLyBzaGFwZSkuCi0gICAgUmVuZGVyRmxvdyogY29udGludWF0aW9uID0gdmly
dHVhbENvbnRpbnVhdGlvbigpOwotICAgIGlmIChjb250aW51YXRpb24pIHsKLSAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5hZGRGb2N1c1JpbmdSZWN0KEludFJlY3QodHgsIHR5IC0gY29sbGFwc2Vk
TWFyZ2luVG9wKCksIHdpZHRoKCksIGhlaWdodCgpICsgY29sbGFwc2VkTWFyZ2luVG9wKCkgKyBj
b2xsYXBzZWRNYXJnaW5Cb3R0b20oKSkpOwotICAgICAgICBjb250aW51YXRpb24tPmFkZEZvY3Vz
UmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eCAtIHhQb3MoKSArIGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCkt
PnhQb3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAtIHlQ
b3MoKSArIGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCktPnlQb3MoKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkRm9jdXNSaW5nUmVjdChJbnRSZWN0KHR4
LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50
T3V0bGluZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LCBpbnQgdHks
IGludCB3LCBpbnQgaCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBSZW5kZXJPYmpl
Y3Q6OnBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4
LCBpbnQgdHksIGludCB3LCBpbnQgaCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIG9u
bHlVc2VQYXNzZWRJbkJvdW5kcykKIHsKICAgICBpZiAoIWhhc091dGxpbmUoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTgzMSw3ICsxNjA3LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50T3V0
bGluZShHcmFwaGljcwogICAgICAgICBpZiAoIXRoZW1lKCktPnN1cHBvcnRzRm9jdXNSaW5nKHN0
eWxlKSkgewogICAgICAgICAgICAgLy8gT25seSBwYWludCB0aGUgZm9jdXMgcmluZyBieSBoYW5k
IGlmIHRoZSB0aGVtZSBpc24ndCBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCiAgICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQtPmluaXRGb2N1c1Jpbmcob3csIG9mZnNldCk7Ci0gICAgICAg
ICAgICBpZiAoc3R5bGUtPm91dGxpbmVTdHlsZUlzQXV0bygpKQorICAgICAgICAgICAgaWYgKHN0
eWxlLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhb25seVVzZVBhc3NlZEluQm91bmRzKQogICAg
ICAgICAgICAgICAgIGFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwgdHgsIHR5KTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBhZGRQREZVUkxSZWN0KGdyYXBoaWNz
Q29udGV4dCwgZ3JhcGhpY3NDb250ZXh0LT5mb2N1c1JpbmdCb3VuZGluZ1JlY3QoKSk7CkBAIC0x
ODY0LDYgKzE2NDAsNTcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZShHcmFwaGlj
cwogICAgICAgICAgICAgICAgQlNCb3R0b20sIENvbG9yKG9jKSwgc3R5bGUtPmNvbG9yKCksIG9z
LCBvdywgb3cpOwogfQogCit2b2lkIFJlbmRlck9iamVjdDo6YWRkTGluZUJveFJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9vbCkKK3sKK30KKworSW50UmVjdCBS
ZW5kZXJPYmplY3Q6OmFic29sdXRlQm91bmRpbmdCb3hSZWN0KGJvb2wgdXNlVHJhbnNmb3JtcykK
K3sKKyAgICBpZiAodXNlVHJhbnNmb3JtcykgeworICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBx
dWFkczsKKyAgICAgICAgYWJzb2x1dGVRdWFkcyhxdWFkcyk7CisKKyAgICAgICAgc2l6ZV90IG4g
PSBxdWFkcy5zaXplKCk7CisgICAgICAgIGlmICghbikKKyAgICAgICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7CisgICAgCisgICAgICAgIEludFJlY3QgcmVzdWx0ID0gcXVhZHNbMF0uZW5jbG9zaW5n
Qm91bmRpbmdCb3goKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBuOyArK2kpCisg
ICAgICAgICAgICByZXN1bHQudW5pdGUocXVhZHNbaV0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBhYnNQb3Mg
PSBsb2NhbFRvQWJzb2x1dGUoKTsKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CisgICAgYWJz
b2x1dGVSZWN0cyhyZWN0cywgYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CisKKyAgICBzaXplX3Qg
biA9IHJlY3RzLnNpemUoKTsKKyAgICBpZiAoIW4pCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7
CisKKyAgICBJbnRSZWN0IHJlc3VsdCA9IHJlY3RzWzBdOworICAgIGZvciAoc2l6ZV90IGkgPSAx
OyBpIDwgbjsgKytpKQorICAgICAgICByZXN1bHQudW5pdGUocmVjdHNbaV0pOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgUmVuZGVyT2JqZWN0OjphZGRBYnNvbHV0ZVJlY3RGb3JMYXll
cihJbnRSZWN0JiByZXN1bHQpCit7CisgICAgaWYgKGhhc0xheWVyKCkpCisgICAgICAgIHJlc3Vs
dC51bml0ZShhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKKyAgICBmb3IgKFJlbmRlck9iamVj
dCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5l
eHRTaWJsaW5nKCkpCisgICAgICAgIGN1cnJlbnQtPmFkZEFic29sdXRlUmVjdEZvckxheWVyKHJl
c3VsdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyT2JqZWN0OjpwYWludGluZ1Jvb3RSZWN0KEludFJl
Y3QmIHRvcExldmVsUmVjdCkKK3sKKyAgICBJbnRSZWN0IHJlc3VsdCA9IGFic29sdXRlQm91bmRp
bmdCb3hSZWN0KCk7CisgICAgdG9wTGV2ZWxSZWN0ID0gcmVzdWx0OworICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVu
dC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY3VycmVudC0+YWRkQWJzb2x1dGVSZWN0Rm9yTGF5
ZXIocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIFJlbmRlck9iamVjdDo6
cGFpbnQoUGFpbnRJbmZvJiAvKnBhaW50SW5mbyovLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovKQog
ewogfQpAQCAtMjU1Nyw2ICsyMzg0LDggQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmNv
bnRhaW5lcigpIAogICAgICAgICAvLyBhcyB3ZSBjYW4uICBJZiB3ZSdyZSBpbiB0aGUgdHJlZSwg
d2UnbGwgZ2V0IHRoZSByb290LiAgSWYgd2UKICAgICAgICAgLy8gYXJlbid0IHdlJ2xsIGdldCB0
aGUgcm9vdCBvZiBvdXIgbGl0dGxlIHN1YnRyZWUgKG1vc3QgbGlrZWx5CiAgICAgICAgIC8vIHdl
J2xsIGp1c3QgcmV0dXJuIDApLgorICAgICAgICAvLyBGSVhNRTogVGhlIGRlZmluaXRpb24gb2Yg
dmlldygpIGhhcyBjaGFuZ2VkIHRvIG5vdCBjcmF3bCB1cCB0aGUgcmVuZGVyIHRyZWUuICBJdCBt
aWdodAorICAgICAgICAvLyBiZSBzYWZlIG5vdyB0byB1c2UgaXQuCiAgICAgICAgIHdoaWxlIChv
ICYmIG8tPnBhcmVudCgpICYmICEoby0+aGFzVHJhbnNmb3JtKCkgJiYgby0+aXNSZW5kZXJCbG9j
aygpKSkKICAgICAgICAgICAgIG8gPSBvLT5wYXJlbnQoKTsKICAgICB9IGVsc2UgaWYgKHBvcyA9
PSBBYnNvbHV0ZVBvc2l0aW9uKSB7CkBAIC0yNTk2LDE0ICsyNDI1LDE0IEBAIHZvaWQgUmVuZGVy
T2JqZWN0OjpyZW1vdmVGcm9tT2JqZWN0TGlzdHMKICAgICAgICAgfQogCiAgICAgICAgIGlmIChv
dXRlcm1vc3RCbG9jaykKLSAgICAgICAgICAgIG91dGVybW9zdEJsb2NrLT5tYXJrQWxsRGVzY2Vu
ZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KHRoaXMpOworICAgICAgICAgICAgb3V0ZXJtb3N0Qmxv
Y2stPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoc3RhdGljX2Nhc3Q8UmVu
ZGVyQm94Kj4odGhpcykpOwogICAgIH0KIAogICAgIGlmIChpc1Bvc2l0aW9uZWQoKSkgewogICAg
ICAgICBSZW5kZXJPYmplY3QqIHA7CiAgICAgICAgIGZvciAocCA9IHBhcmVudCgpOyBwOyBwID0g
cC0+cGFyZW50KCkpIHsKICAgICAgICAgICAgIGlmIChwLT5pc1JlbmRlckJsb2NrKCkpCi0gICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihwKS0+cmVtb3ZlUG9zaXRpb25l
ZE9iamVjdCh0aGlzKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+
KHApLT5yZW1vdmVQb3NpdGlvbmVkT2JqZWN0KHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHRoaXMp
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI3MzQsMTQgKzI1NjMsMTQgQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSAogICAgICAgICBpZiAobm9kZS0+cmVuZGVy
ZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT52aXJ0dWFsQ29udGludWF0aW9uKCkgJiYgbm9kZS0+
cmVuZGVyZXIoKSAhPSB0aGlzKSB7CiAgICAgICAgICAgICAvLyBXZSdyZSBpbiB0aGUgY29udGlu
dWF0aW9uIG9mIGEgc3BsaXQgaW5saW5lLiAgQWRqdXN0IG91ciBsb2NhbCBwb2ludCB0byBiZSBp
biB0aGUgY29vcmRpbmF0ZSBzcGFjZQogICAgICAgICAgICAgLy8gb2YgdGhlIHByaW5jaXBhbCBy
ZW5kZXJlcidzIGNvbnRhaW5pbmcgYmxvY2suICBUaGlzIHdpbGwgZW5kIHVwIGJlaW5nIHRoZSBp
bm5lck5vblNoYXJlZE5vZGUuCi0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIGZpcnN0QmxvY2sg
PSBub2RlLT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgIFJlbmRl
ckJsb2NrKiBmaXJzdEJsb2NrID0gbm9kZS0+cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEdldCBvdXIgY29udGFpbmluZyBibG9jay4K
LSAgICAgICAgICAgIFJlbmRlck9iamVjdCogYmxvY2sgPSB0aGlzOworICAgICAgICAgICAgUmVu
ZGVyQm94KiBibG9jayA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHRoaXMpOwogICAgICAgICAg
ICAgaWYgKGlzSW5saW5lKCkpCiAgICAgICAgICAgICAgICAgYmxvY2sgPSBjb250YWluaW5nQmxv
Y2soKTsKICAgICAgICAgCi0gICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmUoYmxvY2stPnhQb3Mo
KSAtIGZpcnN0QmxvY2stPnhQb3MoKSwgYmxvY2stPnlQb3MoKSAtIGZpcnN0QmxvY2stPnlQb3Mo
KSk7CisgICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmUoYmxvY2stPngoKSAtIGZpcnN0QmxvY2st
PngoKSwgYmxvY2stPnkoKSAtIGZpcnN0QmxvY2stPnkoKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICByZXN1bHQuc2V0SW5uZXJOb2RlKG5vZGUpOwpAQCAtMzAwMCwxNiArMjgyOSwxOCBAQCB2b2lk
IFJlbmRlck9iamVjdDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24oCiB2b2lkIFJlbmRlck9iamVjdDo6
YWRkRGFzaGJvYXJkUmVnaW9ucyhWZWN0b3I8RGFzaGJvYXJkUmVnaW9uVmFsdWU+JiByZWdpb25z
KQogewogICAgIC8vIENvbnZlcnQgdGhlIHN0eWxlIHJlZ2lvbnMgdG8gYWJzb2x1dGUgY29vcmRp
bmF0ZXMuCi0gICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgIGlm
IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCAhaXNCb3goKSkKICAgICAgICAg
cmV0dXJuOworICAgIAorICAgIFJlbmRlckJveCogYm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94
Kj4odGhpcyk7CiAKICAgICBjb25zdCBWZWN0b3I8U3R5bGVEYXNoYm9hcmRSZWdpb24+JiBzdHls
ZVJlZ2lvbnMgPSBzdHlsZSgpLT5kYXNoYm9hcmRSZWdpb25zKCk7CiAgICAgdW5zaWduZWQgaSwg
Y291bnQgPSBzdHlsZVJlZ2lvbnMuc2l6ZSgpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsg
aSsrKSB7CiAgICAgICAgIFN0eWxlRGFzaGJvYXJkUmVnaW9uIHN0eWxlUmVnaW9uID0gc3R5bGVS
ZWdpb25zW2ldOwogCi0gICAgICAgIGludCB3ID0gd2lkdGgoKTsKLSAgICAgICAgaW50IGggPSBo
ZWlnaHQoKTsKKyAgICAgICAgaW50IHcgPSBib3gtPndpZHRoKCk7CisgICAgICAgIGludCBoID0g
Ym94LT5oZWlnaHQoKTsKIAogICAgICAgICBEYXNoYm9hcmRSZWdpb25WYWx1ZSByZWdpb247CiAg
ICAgICAgIHJlZ2lvbi5sYWJlbCA9IHN0eWxlUmVnaW9uLmxhYmVsOwpAQCAtMzEyOSwyNiArMjk2
MCw2IEBAIGludCBSZW5kZXJPYmplY3Q6Om1heEJvdHRvbU1hcmdpbihib29sIHAKICAgICByZXR1
cm4gcG9zaXRpdmUgPyBtYXgoMCwgbWFyZ2luQm90dG9tKCkpIDogLW1pbigwLCBtYXJnaW5Cb3R0
b20oKSk7CiB9CiAKLUludFJlY3QgUmVuZGVyT2JqZWN0Ojpjb250ZW50Qm94KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSW50UmVjdChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBib3JkZXJU
b3AoKSArIHBhZGRpbmdUb3AoKSwKLSAgICAgICAgY29udGVudFdpZHRoKCksIGNvbnRlbnRIZWln
aHQoKSk7Ci19Ci0KLUludFJlY3QgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUNvbnRlbnRCb3goKSBj
b25zdAotewotICAgIEludFJlY3QgcmVjdCA9IGNvbnRlbnRCb3goKTsKLSAgICBGbG9hdFBvaW50
IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsKLSAgICBy
ZWN0Lm1vdmUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0K
LUZsb2F0UXVhZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlQ29udGVudFF1YWQoKSBjb25zdAotewot
ICAgIEludFJlY3QgcmVjdCA9IGNvbnRlbnRCb3goKTsKLSAgICByZXR1cm4gbG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFJlY3QocmVjdCkpOwotfQotCiB2b2lkIFJlbmRlck9iamVjdDo6YWRqdXN0
UmVjdEZvck91dGxpbmVBbmRTaGFkb3coSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBpbnQg
b3V0bGluZVNpemUgPSAhaXNJbmxpbmUoKSAmJiB2aXJ0dWFsQ29udGludWF0aW9uKCkgPyB2aXJ0
dWFsQ29udGludWF0aW9uKCktPnN0eWxlKCktPm91dGxpbmVTaXplKCkgOiBzdHlsZSgpLT5vdXRs
aW5lU2l6ZSgpOwpAQCAtMzE3NCwxOCArMjk4NSw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphZGp1
c3RSZWN0Rm9yT3V0bGluZUEKICAgICAgICAgcmVjdC5pbmZsYXRlKG91dGxpbmVTaXplKTsKIH0K
IAotSW50UmVjdCBSZW5kZXJPYmplY3Q6OmFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0Ci17
Ci0gICAgSW50UmVjdCBib3ggPSBib3JkZXJCb3goKTsKLSAgICBhZGp1c3RSZWN0Rm9yT3V0bGlu
ZUFuZFNoYWRvdyhib3gpOwotCi0gICAgRmxvYXRRdWFkIGFic091dGxpbmVRdWFkID0gbG9jYWxU
b0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm94KSk7Ci0gICAgYm94ID0gYWJzT3V0bGluZVF1YWQu
ZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICBib3gubW92ZSh2aWV3KCktPmxheW91dERlbHRh
KCkpOwotCi0gICAgcmV0dXJuIGJveDsKLX0KLQogYm9vbCBSZW5kZXJPYmplY3Q6OmlzU2Nyb2xs
YWJsZSgpIGNvbnN0CiB7CiAgICAgUmVuZGVyTGF5ZXIqIGwgPSBlbmNsb3NpbmdMYXllcigpOwpA
QCAtMzIwMiw2MyArMzAwMSw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjppbWFnZUNoYW5nZWQoQ2Fj
aGVkSW0KICAgICBpbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPihpbWFn
ZSksIHJlY3QpOwogfQogCi1JbnRSZWN0IFJlbmRlck9iamVjdDo6cmVmbGVjdGlvbkJveCgpIGNv
bnN0Ci17Ci0gICAgSW50UmVjdCByZXN1bHQ7Ci0gICAgaWYgKCFtX3N0eWxlLT5ib3hSZWZsZWN0
KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgSW50UmVjdCBib3ggPSBib3JkZXJCb3go
KTsKLSAgICByZXN1bHQgPSBib3g7Ci0gICAgc3dpdGNoIChtX3N0eWxlLT5ib3hSZWZsZWN0KCkt
PmRpcmVjdGlvbigpKSB7Ci0gICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgotICAgICAgICAg
ICAgcmVzdWx0Lm1vdmUoMCwgYm94LmhlaWdodCgpICsgcmVmbGVjdGlvbk9mZnNldCgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlZmxlY3Rpb25BYm92ZToKLSAgICAgICAg
ICAgIHJlc3VsdC5tb3ZlKDAsIC1ib3guaGVpZ2h0KCkgLSByZWZsZWN0aW9uT2Zmc2V0KCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVmbGVjdGlvbkxlZnQ6Ci0gICAgICAg
ICAgICByZXN1bHQubW92ZSgtYm94LndpZHRoKCkgLSByZWZsZWN0aW9uT2Zmc2V0KCksIDApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVmbGVjdGlvblJpZ2h0OgotICAgICAg
ICAgICAgcmVzdWx0Lm1vdmUoYm94LndpZHRoKCkgKyByZWZsZWN0aW9uT2Zmc2V0KCksIDApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBS
ZW5kZXJPYmplY3Q6OnJlZmxlY3Rpb25PZmZzZXQoKSBjb25zdAotewotICAgIGlmICghbV9zdHls
ZS0+Ym94UmVmbGVjdCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobV9zdHlsZS0+Ym94
UmVmbGVjdCgpLT5kaXJlY3Rpb24oKSA9PSBSZWZsZWN0aW9uTGVmdCB8fCBtX3N0eWxlLT5ib3hS
ZWZsZWN0KCktPmRpcmVjdGlvbigpID09IFJlZmxlY3Rpb25SaWdodCkKLSAgICAgICAgcmV0dXJu
IG1fc3R5bGUtPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCkuY2FsY1ZhbHVlKGJvcmRlckJveCgpLndp
ZHRoKCkpOwotICAgIHJldHVybiBtX3N0eWxlLT5ib3hSZWZsZWN0KCktPm9mZnNldCgpLmNhbGNW
YWx1ZShib3JkZXJCb3goKS5oZWlnaHQoKSk7Ci19Ci0KLUludFJlY3QgUmVuZGVyT2JqZWN0Ojpy
ZWZsZWN0ZWRSZWN0KGNvbnN0IEludFJlY3QmIHIpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3N0eWxl
LT5ib3hSZWZsZWN0KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBJbnRSZWN0
IGJveCA9IGJvcmRlckJveCgpOwotICAgIEludFJlY3QgcmVzdWx0ID0gcjsKLSAgICBzd2l0Y2gg
KG1fc3R5bGUtPmJveFJlZmxlY3QoKS0+ZGlyZWN0aW9uKCkpIHsKLSAgICAgICAgY2FzZSBSZWZs
ZWN0aW9uQmVsb3c6Ci0gICAgICAgICAgICByZXN1bHQuc2V0WShib3guYm90dG9tKCkgKyByZWZs
ZWN0aW9uT2Zmc2V0KCkgKyAoYm94LmJvdHRvbSgpIC0gci5ib3R0b20oKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVmbGVjdGlvbkFib3ZlOgotICAgICAgICAgICAgcmVz
dWx0LnNldFkoYm94LnkoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSAtIGJveC5oZWlnaHQoKSArIChi
b3guYm90dG9tKCkgLSByLmJvdHRvbSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBSZWZsZWN0aW9uTGVmdDoKLSAgICAgICAgICAgIHJlc3VsdC5zZXRYKGJveC54KCkgLSBy
ZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3gud2lkdGgoKSArIChib3gucmlnaHQoKSAtIHIucmlnaHQo
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVmbGVjdGlvblJpZ2h0Ogot
ICAgICAgICAgICAgcmVzdWx0LnNldFgoYm94LnJpZ2h0KCkgKyByZWZsZWN0aW9uT2Zmc2V0KCkg
KyAoYm94LnJpZ2h0KCkgLSByLnJpZ2h0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAjaWYgRU5BQkxFKFNWRykKIAogRmxvYXRSZWN0IFJl
bmRlck9iamVjdDo6cmVsYXRpdmVCQm94KGJvb2wpIGNvbnN0CkBAIC0zMjY4LDcgKzMwMTAsNyBA
QCBGbG9hdFJlY3QgUmVuZGVyT2JqZWN0OjpyZWxhdGl2ZUJCb3goYm9vCiAKIFRyYW5zZm9ybWF0
aW9uTWF0cml4IFJlbmRlck9iamVjdDo6bG9jYWxUcmFuc2Zvcm0oKSBjb25zdAogewotICAgIHJl
dHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgxLCAwLCAwLCAxLCB4UG9zKCksIHlQb3MoKSk7Cisg
ICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CiB9CiAKIFRyYW5zZm9ybWF0aW9uTWF0
cml4IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgSW5s
aW5lRmxvd0JveDsKIGNsYXNzIFBvc2l0aW9uOwogY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBS
ZW5kZXJCbG9jazsKK2NsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlckZsb3c7CiBjbGFzcyBS
ZW5kZXJGcmFtZVNldDsKIGNsYXNzIFJlbmRlckxheWVyOwpAQCAtMzI5LDYgKzMzMCw3IEBAIHB1
YmxpYzoKICAgICBib29sIGlzUG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb25l
ZDsgfSAvLyBhYnNvbHV0ZSBvciBmaXhlZCBwb3NpdGlvbmluZwogICAgIGJvb2wgaXNSZWxQb3Np
dGlvbmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZWxQb3NpdGlvbmVkOyB9IC8vIHJlbGF0aXZlIHBv
c2l0aW9uaW5nCiAgICAgYm9vbCBpc1RleHQoKSBjb25zdCAgeyByZXR1cm4gbV9pc1RleHQ7IH0K
KyAgICBib29sIGlzQm94KCkgY29uc3QgeyByZXR1cm4gbV9pc0JveDsgfQogICAgIGJvb2wgaXNJ
bmxpbmUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZTsgfSAgLy8gaW5saW5lIG9iamVjdAogICAg
IGJvb2wgaXNDb21wYWN0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+ZGlzcGxheSgpID09IENP
TVBBQ1Q7IH0gLy8gY29tcGFjdCBvYmplY3QKICAgICBib29sIGlzUnVuSW4oKSBjb25zdCB7IHJl
dHVybiBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gUlVOX0lOOyB9IC8vIHJ1bi1pbiBvYmplY3QKQEAg
LTM3MCw3ICszNzIsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX2hhc1RyYW5zZm9ybTsgfQogICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0
IHsgcmV0dXJuIHN0eWxlKCkgJiYgc3R5bGUoKS0+aGFzTWFzaygpOyB9Ci0gICAgdmlydHVhbCBJ
bnRSZWN0IG1hc2tDbGlwUmVjdCgpIHsgcmV0dXJuIGJvcmRlckJveCgpOyB9CiAKIHByaXZhdGU6
CiAgICAgYm9vbCBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgY29uc3QgeyByZXR1cm4g
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKHN0eWxlKCktPm92ZXJmbG93WSgpID09IE9TQ1JPTEwgfHwg
c3R5bGUoKS0+b3ZlcmZsb3dZKCkgPT0gT0FVVE8pOyB9CkBAIC00MDIsNyArNDAzLDcgQEAgcHVi
bGljOgogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyKCkgY29uc3Q7CiAgICAgUmVuZGVyT2Jq
ZWN0KiBob3ZlckFuY2VzdG9yKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbWFya0FsbERl
c2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJPYmplY3QqIGZsb2F0VG9SZW1vdmUg
PSAwKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0Zvckxh
eW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUgPSAwKTsKICAgICB2b2lkIG1hcmtDb250YWlu
aW5nQmxvY2tzRm9yTGF5b3V0KGJvb2wgc2NoZWR1bGVSZWxheW91dCA9IHRydWUsIFJlbmRlck9i
amVjdCogbmV3Um9vdCA9IDApOwogICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoYm9vbCBiLCBib29s
IG1hcmtQYXJlbnRzID0gdHJ1ZSk7CiAgICAgdm9pZCBzZXRDaGlsZE5lZWRzTGF5b3V0KGJvb2wg
YiwgYm9vbCBtYXJrUGFyZW50cyA9IHRydWUpOwpAQCAtNDIyLDcgKzQyMyw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEZsb2F0aW5nKGJvb2wgYiA9IHRydWUpIHsgbV9mbG9hdGluZyA9IGI7IH0K
ICAgICB2b2lkIHNldElubGluZShib29sIGIgPSB0cnVlKSB7IG1faW5saW5lID0gYjsgfQogICAg
IHZvaWQgc2V0SGFzQm94RGVjb3JhdGlvbnMoYm9vbCBiID0gdHJ1ZSkgeyBtX3BhaW50QmFja2dy
b3VuZCA9IGI7IH0KLSAgICB2b2lkIHNldFJlbmRlclRleHQoKSB7IG1faXNUZXh0ID0gdHJ1ZTsg
fQorICAgIHZvaWQgc2V0SXNUZXh0KCkgeyBtX2lzVGV4dCA9IHRydWU7IH0KKyAgICB2b2lkIHNl
dElzQm94KCkgeyBtX2lzQm94ID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0UmVwbGFjZWQoYm9vbCBi
ID0gdHJ1ZSkgeyBtX3JlcGxhY2VkID0gYjsgfQogICAgIHZvaWQgc2V0SGFzT3ZlcmZsb3dDbGlw
KGJvb2wgYiA9IHRydWUpIHsgbV9oYXNPdmVyZmxvd0NsaXAgPSBiOyB9CiAgICAgdm9pZCBzZXRI
YXNMYXllcihib29sIGIgPSB0cnVlKSB7IG1faGFzTGF5ZXIgPSBiOyB9CkBAIC00NzksNyArNDgx
LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgs
IGludCB0eSk7CiAgICAgdm9pZCBwYWludEJvcmRlcihHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgs
IGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSosIGJvb2wgYmVnaW4gPSB0
cnVlLCBib29sIGVuZCA9IHRydWUpOwogICAgIGJvb2wgcGFpbnROaW5lUGllY2VJbWFnZShHcmFw
aGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJT
dHlsZSosIGNvbnN0IE5pbmVQaWVjZUltYWdlJiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3Np
dGVTb3VyY2VPdmVyKTsKLSAgICB2b2lkIHBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBp
bnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZv
aWQgcGFpbnRCb3hTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGludCB3
LCBpbnQgaCwgY29uc3QgUmVuZGVyU3R5bGUqLCBib29sIGJlZ2luID0gdHJ1ZSwgYm9vbCBlbmQg
PSB0cnVlKTsKIAogICAgIC8vIFJlbmRlckJveCBpbXBsZW1lbnRzIHRoaXMuCkBAIC01MTksMTEg
KzUyMCw2IEBAIHB1YmxpYzoKICAgICAvLyByZXBhaW50IGFuZCBkbyBub3QgbmVlZCBhIHJlbGF5
b3V0CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCkgeyB9CiAKLSAgICAvLyBC
bG9jayBmbG93cyBzdWJjbGFzcyBhdmFpbGFibGVXaWR0aCB0byBoYW5kbGUgbXVsdGkgY29sdW1u
IGxheW91dCAoc2hyaW5raW5nIHRoZSB3aWR0aCBhdmFpbGFibGUgdG8gY2hpbGRyZW4gd2hlbiBs
YXlpbmcgb3V0LikKLSAgICB2aXJ0dWFsIGludCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIGNvbnRlbnRXaWR0aCgpOyB9Ci0gICAgCi0gICAgdmlydHVhbCBpbnQgYXZhaWxhYmxlSGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVdpZGdl
dFBvc2l0aW9uKCk7CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkBAIC01NjAsMzcg
KzU1NiwxOCBAQCBwdWJsaWM6CiAgICAgLy8gcmV0dXJuIGp1c3QgdGhlIGhlaWdodCBvZiB0aGUg
Y29udGFpbmluZyBibG9jawogICAgIHZpcnR1YWwgaW50IGNvbnRhaW5pbmdCbG9ja0hlaWdodCgp
IGNvbnN0OwogCi0gICAgLy8gY29udGVudCBhcmVhIChib3ggbWludXMgcGFkZGluZy9ib3JkZXIp
Ci0gICAgSW50UmVjdCBjb250ZW50Qm94KCkgY29uc3Q7Ci0gICAgLy8gYWJzb2x1dGUgY29vcmRz
IG9mIGNvbnRlbnQgYXJlYS4gSWdub3JlcyB0cmFuc2Zvcm1zLgotICAgIEludFJlY3QgYWJzb2x1
dGVDb250ZW50Qm94KCkgY29uc3Q7Ci0gICAgLy8gY29udGVudCByZWN0IGNvbnZlcnRlZCB0byBh
YnNvbHV0ZSBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAotICAgIEZsb2F0
UXVhZCBhYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3Q7Ci0gICAgCi0gICAgaW50IGNvbnRlbnRX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNsaWVudFdpZHRoKCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFk
ZGluZ1JpZ2h0KCk7IH0KLSAgICBpbnQgY29udGVudEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNs
aWVudEhlaWdodCgpIC0gcGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgpOyB9Ci0KICAgICAv
LyB1c2VkIGJ5IGZsZXhpYmxlIGJveGVzIHRvIGltcG9zZSBhIGZsZXhlZCB3aWR0aC9oZWlnaHQg
b3ZlcnJpZGUKICAgICB2aXJ0dWFsIGludCBvdmVycmlkZVNpemUoKSBjb25zdCB7IHJldHVybiAw
OyB9CiAgICAgdmlydHVhbCBpbnQgb3ZlcnJpZGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
ICAgICB2aXJ0dWFsIGludCBvdmVycmlkZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcnJpZGVTaXplKGludCAvKm92ZXJyaWRlU2l6ZSovKSB7IH0K
IAotICAgIC8vIHJlbGF0aXZlIHRvIHBhcmVudCBub2RlCi0gICAgdmlydHVhbCB2b2lkIHNldFBv
cyhpbnQgLyp4UG9zKi8sIGludCAvKnlQb3MqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFdp
ZHRoKGludCAvKndpZHRoKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRIZWlnaHQoaW50IC8q
aGVpZ2h0Ki8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpIHsgc2V0UG9zKHJlY3QueCgpLCByZWN0LnkoKSk7IHNldFdpZHRoKHJlY3Qud2lkdGgoKSk7
IHNldEhlaWdodChyZWN0LmhlaWdodCgpKTsgfQotCi0gICAgdmlydHVhbCBpbnQgeFBvcygpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCB5UG9zKCkgY29uc3QgeyByZXR1cm4g
MDsgfQotCiAgICAgLy8gQ29udmVydCB0aGUgZ2l2ZW4gbG9jYWwgcG9pbnQgdG8gYWJzb2x1dGUg
Y29vcmRpbmF0ZXMKICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5LiBJZiB1c2VUcmFuc2Zvcm1zIGlz
IHRydWUsIHRha2UgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuIEV2ZW50dWFsbHkgbG9jYWxUb0Fi
c29sdXRlKCkgd2lsbCBhbHdheXMgYmUgdHJhbnNmb3JtLWF3YXJlLgogICAgIHZpcnR1YWwgRmxv
YXRQb2ludCBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2lu
dCgpLCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25z
dDsKICAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgYWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQsIGJv
b2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OwogCi0g
ICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRlYWwgd2l0aCB0aGUgZXh0cmEgdG9wIHNw
YWNlIHRoYXQgY2FuIG9jY3VyIGluIHRhYmxlIGNlbGxzIChjYWxsZWQgYm9yZGVyVG9wRXh0cmEp
LgorICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkZWFsIHdpdGggdGhlIGV4dHJhIHRv
cCBzcGFjZSB0aGF0IGNhbiBvY2N1ciBpbiB0YWJsZSBjZWxscyAoY2FsbGVkIGludHJpbnNpY1Bh
ZGRpbmdUb3ApLgogICAgIC8vIFRoZSBjaGlsZHJlbiBvZiB0aGUgY2VsbCBkbyBub3QgZmFjdG9y
IHRoaXMgc3BhY2UgaW4sIHNvIHdlIGhhdmUgdG8gYWRkIGl0IGluLiAgQW55IGNvZGUgdGhhdCB3
YW50cyB0bwogICAgIC8vIGFjY3VyYXRlbHkgZGVhbCB3aXRoIHRoZSBjb250ZW50cyBvZiBhIGNl
bGwgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gaW5zdGFkIG9mIGFic29sdXRlUG9zaXRpb24uCiAg
ICAgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQgbG9jYWxQ
b2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9y
bXMgPSBmYWxzZSkgY29uc3QKQEAgLTYwNSw1NSArNTgyLDYgQEAgcHVibGljOgogICAgIC8vIFJl
dHVybiB0aGUgb2Zmc2V0IGZyb20gdGhlIGNvbnRhaW5lcigpIHJlbmRlcmVyIChleGNsdWRpbmcg
dHJhbnNmb3JtcykKICAgICB2aXJ0dWFsIEludFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5k
ZXJPYmplY3QqKSBjb25zdDsKIAotICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHdpdGhvdXQg
bWFyZ2lucyBidXQgaW5jbHVkZSBwYWRkaW5ncyBhbmQgYm9yZGVycwotICAgIHZpcnR1YWwgaW50
IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgSW50UmVjdCBib3JkZXJCb3goKSBjb25z
dCB7IHJldHVybiBJbnRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsgfQotICAgIC8vIEJv
dW5kcyBvZiB0aGUgb3V0bGluZSBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBSZXNwZWN0cyB0cmFu
c2Zvcm1zCi0gICAgSW50UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdDsKLQotICAg
IC8vIFRoZSBoZWlnaHQgb2YgYSBibG9jayB3aGVuIHlvdSBpbmNsdWRlIG5vcm1hbCBmbG93IG92
ZXJmbG93IHNwaWxsYWdlIG91dCBvZiB0aGUgYm90dG9tCi0gICAgLy8gb2YgdGhlIGJsb2NrIChl
LmcuLCBhIDxkaXYgc3R5bGU9ImhlaWdodDoyNXB4Ij4gdGhhdCBoYXMgYSAxMDBweCB0YWxsIGlt
YWdlIGluc2lkZQotICAgIC8vIGl0IHdvdWxkIGhhdmUgYW4gb3ZlcmZsb3cgaGVpZ2h0IG9mIGJv
cmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgMTAwcHguCi0gICAgdmlydHVhbCBpbnQgb3ZlcmZs
b3dIZWlnaHQoYm9vbCAvKmluY2x1ZGVJbnRlcmlvciovID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4g
aGVpZ2h0KCk7IH0KLSAgICB2aXJ0dWFsIGludCBvdmVyZmxvd1dpZHRoKGJvb2wgLyppbmNsdWRl
SW50ZXJpb3IqLyA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIHdpZHRoKCk7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0T3ZlcmZsb3dIZWlnaHQoaW50KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3Zl
cmZsb3dXaWR0aChpbnQpIHsgfQotICAgIHZpcnR1YWwgaW50IG92ZXJmbG93TGVmdChib29sIC8q
aW5jbHVkZUludGVyaW9yKi8gPSB0cnVlKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVh
bCBpbnQgb3ZlcmZsb3dUb3AoYm9vbCAvKmluY2x1ZGVJbnRlcmlvciovID0gdHJ1ZSkgY29uc3Qg
eyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgSW50UmVjdCBvdmVyZmxvd1JlY3QoYm9vbCAvKmlu
Y2x1ZGVJbnRlcmlvciovID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gYm9yZGVyQm94KCk7IH0KLQot
ICAgIC8vIElFIGV4dGVuc2lvbnMuIFVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldFdpZHRoL0hlaWdo
dC4gIE92ZXJyaWRkZW4gYnkgaW5saW5lcyAoUmVuZGVyRmxvdykKLSAgICAvLyB0byByZXR1cm4g
dGhlIHJlbWFpbmluZyB3aWR0aCBvbiBhIGdpdmVuIGxpbmUgKGFuZCB0aGUgaGVpZ2h0IG9mIGEg
c2luZ2xlIGxpbmUpLgotICAgIHZpcnR1YWwgaW50IG9mZnNldFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gd2lkdGgoKTsgfQotICAgIHZpcnR1YWwgaW50IG9mZnNldEhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7IH0K
LQotICAgIC8vIElFIGV4dGVuc2lvbnMuICBBbHNvIHN1cHBvcnRlZCBieSBHZWNrby4gIFdlIG92
ZXJyaWRlIGluIHJlbmRlciBmbG93IHRvIGdldCB0aGUKLSAgICAvLyBsZWZ0IGFuZCB0b3AgY29y
cmVjdC4gLWR3aAotICAgIHZpcnR1YWwgaW50IG9mZnNldExlZnQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGludCBvZmZzZXRUb3AoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogb2Zm
c2V0UGFyZW50KCkgY29uc3Q7Ci0KLSAgICAvLyBNb3JlIElFIGV4dGVuc2lvbnMuICBjbGllbnRX
aWR0aCBhbmQgY2xpZW50SGVpZ2h0IHJlcHJlc2VudCB0aGUgaW50ZXJpb3Igb2YgYW4gb2JqZWN0
Ci0gICAgLy8gZXhjbHVkaW5nIGJvcmRlciBhbmQgc2Nyb2xsYmFyLiAgY2xpZW50TGVmdC9Ub3Ag
YXJlIGp1c3QgdGhlIGJvcmRlckxlZnRXaWR0aCBhbmQgYm9yZGVyVG9wV2lkdGguCi0gICAgaW50
IGNsaWVudExlZnQoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCk7IH0KLSAgICBpbnQgY2xp
ZW50VG9wKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyVG9wKCk7IH0KLSAgICBpbnQgY2xpZW50V2lk
dGgoKSBjb25zdDsKLSAgICBpbnQgY2xpZW50SGVpZ2h0KCkgY29uc3Q7Ci0KLSAgICAvLyBzY3Jv
bGxXaWR0aC9zY3JvbGxIZWlnaHQgd2lsbCBiZSB0aGUgc2FtZSBhcyBjbGllbnRXaWR0aC9jbGll
bnRIZWlnaHQgdW5sZXNzIHRoZQotICAgIC8vIG9iamVjdCBoYXMgb3ZlcmZsb3c6aGlkZGVuL3Nj
cm9sbC9hdXRvIHNwZWNpZmllZCBhbmQgYWxzbyBoYXMgb3ZlcmZsb3cuCi0gICAgLy8gc2Nyb2xs
TGVmdC9Ub3AgcmV0dXJuIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4gIFRoZXNlIG1ldGhv
ZHMgYXJlIHZpcnR1YWwgc28gdGhhdCBvYmplY3RzIGxpa2UKLSAgICAvLyB0ZXh0YXJlYXMgY2Fu
IHNjcm9sbCBzaGFkb3cgY29udGVudCAoYnV0IHByZXRlbmQgdGhhdCB0aGV5IGFyZSB0aGUgb2Jq
ZWN0cyB0aGF0IGFyZQotICAgIC8vIHNjcm9sbGluZykuCi0gICAgdmlydHVhbCBpbnQgc2Nyb2xs
TGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFRvcCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsSGVp
Z2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQoaW50KTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7Ci0KICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xs
KFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAx
LjBmKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZChib29s
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXV0b3Njcm9sbCgpOwpAQCAtNjg5LDMwICs2MTcs
MjcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHBhZGRpbmdMZWZ0KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgcGFkZGluZ1JpZ2h0KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGludCBib3Jk
ZXJUb3AoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJUb3BXaWR0aCgpOyB9Ci0gICAg
dmlydHVhbCBpbnQgYm9yZGVyQm90dG9tKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym9yZGVy
Qm90dG9tV2lkdGgoKTsgfQogICAgIHZpcnR1YWwgaW50IGJvcmRlclRvcEV4dHJhKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgaW50IGJvcmRlckJvdHRvbUV4dHJhKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBpbnQgYm9yZGVyVG9wKCkgY29uc3QgeyByZXR1
cm4gc3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKTsgfQorICAgIHZpcnR1YWwgaW50IGJvcmRlckJv
dHRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRoKCk7IH0KICAg
ICB2aXJ0dWFsIGludCBib3JkZXJMZWZ0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym9yZGVy
TGVmdFdpZHRoKCk7IH0KICAgICB2aXJ0dWFsIGludCBib3JkZXJSaWdodCgpIGNvbnN0IHsgcmV0
dXJuIHN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFk
ZExpbmVCb3hSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAs
IHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9
IGZhbHNlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0
PiYsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgCisgICAgdmly
dHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50LCBpbnQsIGJvb2wg
PSB0cnVlKSB7IH0KICAgICAvLyBGSVhNRTogdXNlVHJhbnNmb3JtcyBzaG91bGQgZ28gYXdheSBl
dmVudHVhbGx5CiAgICAgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdChib29sIHVzZVRy
YW5zZm9ybXMgPSBmYWxzZSk7CiAKICAgICAvLyBCdWlsZCBhbiBhcnJheSBvZiBxdWFkcyBpbiBh
YnNvbHV0ZSBjb29yZHMgZm9yIGxpbmUgYm94ZXMKLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEFi
c29sdXRlTGluZUJveFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25I
ZWlnaHQgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZs
b2F0UXVhZD4mLCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbGxl
Y3RBYnNvbHV0ZUxpbmVCb3hRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIHVuc2lnbmVkIC8qc3Rh
cnRPZmZzZXQqLyA9IDAsIHVuc2lnbmVkIC8qZW5kT2Zmc2V0Ki8gPSBVSU5UX01BWCwgYm9vbCAv
KnVzZVNlbGVjdGlvbkhlaWdodCovID0gZmFsc2UpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgLyp0b3BMZXZlbCovID0gdHJ1ZSkg
eyB9OwogCiAgICAgLy8gdGhlIHJlY3QgdGhhdCB3aWxsIGJlIHBhaW50ZWQgaWYgdGhpcyBvYmpl
Y3QgaXMgcGFzc2VkIGFzIHRoZSBwYWludGluZ1Jvb3QKICAgICBJbnRSZWN0IHBhaW50aW5nUm9v
dFJlY3QoSW50UmVjdCYgdG9wTGV2ZWxSZWN0KTsKIAotICAgIHZvaWQgYWRkUERGVVJMUmVjdChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRk
Rm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHkpOwotCiAgICAg
dmlydHVhbCBpbnQgbWluUHJlZldpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1
YWwgaW50IG1heFByZWZXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIApAQCAtNzU2LDcgKzY4
MSw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRoZSByZWN0IHRoYXQgc2hvdWxkIGJlIHJl
cGFpbnRlZCB3aGVuZXZlciB0aGlzIG9iamVjdCBjaGFuZ2VzLiAgVGhlIHJlY3QgaXMgaW4gdGhl
IHZpZXcncwogICAgIC8vIGNvb3JkaW5hdGUgc3BhY2UuICBUaGlzIG1ldGhvZCBkZWFscyB3aXRo
IG91dGxpbmVzIGFuZCBvdmVyZmxvdy4KICAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlw
cGVkT3ZlcmZsb3dSZWN0KCk7Ci0KKyAgICAKICAgICBJbnRSZWN0IGdldEFic29sdXRlUmVwYWlu
dFJlY3RXaXRoT3V0bGluZShpbnQgb3cpOwogCiAgICAgLy8gR2l2ZW4gYSByZWN0IGluIHRoZSBv
YmplY3QncyBjb29yZGluYXRlIHNwYWNlLCB0aGlzIG1ldGhvZCBjb252ZXJ0cyB0aGUgcmVjdGFu
Z2xlIHRvIHRoZSB2aWV3J3MKQEAgLTc4MywxMCArNzA4LDYgQEAgcHVibGljOgogICAgIGZsb2F0
IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5vcGFjaXR5KCk7IH0KIAogICAgIGJv
b2wgaGFzUmVmbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmVmbGVjdGlvbjsgfQotICAg
IEludFJlY3QgcmVmbGVjdGlvbkJveCgpIGNvbnN0OwotICAgIGludCByZWZsZWN0aW9uT2Zmc2V0
KCkgY29uc3Q7Ci0gICAgLy8gR2l2ZW4gYSByZWN0IGluIHRoZSBvYmplY3QncyBjb29yZGluYXRl
IHNwYWNlLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlY3QgaW4gdGhlIHJlZmxlY3Rpb24u
Ci0gICAgSW50UmVjdCByZWZsZWN0ZWRSZWN0KGNvbnN0IEludFJlY3QmKSBjb25zdDsKIAogICAg
IC8vIEFwcGxpZWQgYXMgYSAic2xvcCIgdG8gZGlydHkgcmVjdCBjaGVja3MgZHVyaW5nIHRoZSBv
dXRsaW5lIHBhaW50aW5nIHBoYXNlJ3MgZGlydHktcmVjdCBjaGVja3MuCiAgICAgaW50IG1heGlt
YWxPdXRsaW5lU2l6ZShQYWludFBoYXNlKSBjb25zdDsKQEAgLTkxNCw2ICs4MzUsOSBAQCBwdWJs
aWM6CiAKICAgICBib29sIHZpc2libGVUb0hpdFRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBzdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkg
IT0gUEVfTk9ORTsgfQogICAgIAorICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhH
cmFwaGljc0NvbnRleHQqLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovKSB7IH07CisgICAgdmlydHVh
bCBJbnRSZWN0IGFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIEludFJlY3Qo
KTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgLy8gT3ZlcnJpZGVzIHNob3VsZCBjYWxsIHRoZSBzdXBl
cmNsYXNzIGF0IHRoZSBlbmQKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFJlbmRl
clN0eWxlOjpEaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOwpAQCAtOTIyLDYgKzg0
Niw5IEBAIHByb3RlY3RlZDoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnRCb3hEZWNvcmF0
aW9ucyhHcmFwaGljc0NvbnRleHQqLCBpbnQgLyp4Ki8sIGludCAvKnkqLywgaW50IC8qdyovLCBp
bnQgLypoKi8sIGludCAvKnR4Ki8sIGludCAvKnR5Ki8pIHsgfQogCisgICAgdm9pZCBwYWludE91
dGxpbmUoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCwgY29u
c3QgUmVuZGVyU3R5bGUqLCBib29sIG9ubHlVc2VQYXNzZWRJbkJvdW5kcyA9IGZhbHNlKTsKKyAg
ICB2b2lkIGFkZFBERlVSTFJlY3QoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwor
CiAgICAgdmlydHVhbCBJbnRSZWN0IHZpZXdSZWN0KCkgY29uc3Q7CiAKICAgICBpbnQgZ2V0VmVy
dGljYWxQb3NpdGlvbihib29sIGZpcnN0TGluZSkgY29uc3Q7CkBAIC05NTgsNiArODg1LDcgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgbV9pc0Fub255bW91cyAgICAgICAgICAgICAgIDogMTsKICAg
ICBib29sIG1faXNUZXh0ICAgICAgICAgICAgICAgICAgICA6IDE7CisgICAgYm9vbCBtX2lzQm94
ICAgICAgICAgICAgICAgICAgICAgOiAxOwogICAgIGJvb2wgbV9pbmxpbmUgICAgICAgICAgICAg
ICAgICAgIDogMTsKICAgICBib29sIG1fcmVwbGFjZWQgICAgICAgICAgICAgICAgICA6IDE7CiAg
ICAgYm9vbCBtX2lzRHJhZ2dpbmcgICAgICAgICAgICAgICAgOiAxOwpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUGFydC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUGFydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDEyICs4OCwxMSBAQCB2b2lkIFJlbmRl
clBhcnQ6OnVwZGF0ZVdpZGdldFBvc2l0aW9uKCkKICAgICBpZiAoIW1fd2lkZ2V0KQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgRmxvYXRQb2ludCBh
YnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKICAgICBhYnNQb3MubW92ZShib3JkZXJMZWZ0KCkg
KyBwYWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7Ci0gICAgd2lkdGgg
PSBtX3dpZHRoIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkg
LSBwYWRkaW5nUmlnaHQoKTsKLSAgICBoZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0g
Ym9yZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7Ci0gICAgSW50
UmVjdCBuZXdCb3VuZHMoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgaW50IHcgPSB3aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRp
bmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQoKTsKKyAgICBpbnQgaCA9IGhlaWdodCgpIC0gYm9yZGVy
VG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKTsK
KyAgICBJbnRSZWN0IG5ld0JvdW5kcyhhYnNQb3MueCgpLCBhYnNQb3MueSgpLCB3LCBoKTsKICAg
ICBib29sIGJvdW5kc0NoYW5nZWQgPSBuZXdCb3VuZHMgIT0gbV93aWRnZXQtPmZyYW1lUmVjdCgp
OwogICAgIGlmIChib3VuZHNDaGFuZ2VkKSB7CiAgICAgICAgIC8vIFRoZSB3aWRnZXQgY2hhbmdl
ZCBwb3NpdGlvbnMuICBVcGRhdGUgdGhlIGZyYW1lIGdlb21ldHJ5LgpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUGF0aC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw5ICsxNzIsNiBAQCB2b2lkIFJlbmRl
clBhdGg6OmxheW91dCgpCiAKICAgICBtX2Fic29sdXRlQm91bmRzID0gYWJzb2x1dGVDbGlwcGVk
T3ZlcmZsb3dSZWN0KCk7CiAKLSAgICBzZXRXaWR0aChtX2Fic29sdXRlQm91bmRzLndpZHRoKCkp
OwotICAgIHNldEhlaWdodChtX2Fic29sdXRlQm91bmRzLmhlaWdodCgpKTsKLQogICAgIGlmIChj
aGVja0ZvclJlcGFpbnQpCiAgICAgICAgIHJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKG9sZEJv
dW5kcywgb2xkT3V0bGluZUJveCk7CiAKQEAgLTI2MCw3ICsyNTcsNyBAQCB2b2lkIFJlbmRlclBh
dGg6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJCiAKICAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZP
dXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSkKICAgICAgICAgcGFpbnRPdXRsaW5l
KHBhaW50SW5mby5jb250ZXh0LCBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kaW5nQm94LngoKSksIHN0
YXRpY19jYXN0PGludD4oYm91bmRpbmdCb3gueSgpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludD4oYm91bmRpbmdCb3gud2lkdGgoKSksIHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdCb3gu
aGVpZ2h0KCkpLCBzdHlsZSgpKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYm91bmRp
bmdCb3gud2lkdGgoKSksIHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdCb3guaGVpZ2h0KCkpLCBz
dHlsZSgpLCB0cnVlKTsKICAgICAKICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwog
fQpAQCAtNDg1LDYgKzQ4MiwxMyBAQCBGbG9hdFJlY3QgUmVuZGVyUGF0aDo6ZHJhd01hcmtlcnNJ
Zk5lZWRlCiAgICAgcmV0dXJuIGJvdW5kczsKIH0KIAorSW50UmVjdCBSZW5kZXJQYXRoOjphYnNv
bHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdAoreworICAgIEludFJlY3QgcmVzdWx0ID0gbV9hYnNv
bHV0ZUJvdW5kczsKKyAgICBhZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUGF0aC5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsOCBAQCBwdWJsaWM6
CiAKICAgICBGbG9hdFJlY3QgZHJhd01hcmtlcnNJZk5lZWRlZChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBQYXRoJikgY29uc3Q7CiAgICAgCisgICAgdmlydHVhbCBJ
bnRSZWN0IGFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEZs
b2F0UG9pbnQgbWFwQWJzb2x1dGVQb2ludFRvTG9jYWwoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0
OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA0MDA3
NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODUsNyArODUsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpsYXlvdXQoKQogICAgICAg
ICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7CiAgICAgfQogICAgIAot
ICAgIG1faGVpZ2h0ID0gbWluaW11bVJlcGxhY2VkSGVpZ2h0KCk7CisgICAgc2V0SGVpZ2h0KG1p
bmltdW1SZXBsYWNlZEhlaWdodCgpKTsKICAgICAKICAgICBjYWxjV2lkdGgoKTsKICAgICBjYWxj
SGVpZ2h0KCk7CkBAIC0xMTAsOCArMTEwLDggQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6cGFpbnQo
UGFpbnRJbmZvJiBwYQogICAgIGlmICghc2hvdWxkUGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgdHggKz0gbV94OwotICAgIHR5ICs9IG1feTsKKyAg
ICB0eCArPSB4KCk7CisgICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwogICAgIAogICAgIGlmICho
YXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVn
cm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pKSAKICAgICAg
ICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CkBAIC0xNTksOCArMTU5
LDggQEAgYm9vbCBSZW5kZXJSZXBsYWNlZDo6c2hvdWxkUGFpbnQoUGFpbnRJbgogICAgIGlmIChz
dHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaW50IGN1cnJlbnRUWCA9IHR4ICsgbV94OwotICAgIGludCBjdXJyZW50VFkgPSB0eSAr
IG1feTsKKyAgICBpbnQgY3VycmVudFRYID0gdHggKyB4KCk7CisgICAgaW50IGN1cnJlbnRUWSA9
IHR5ICsgbV9mcmFtZVJlY3QueSgpOwogCiAgICAgLy8gRWFybHkgZXhpdCBpZiB0aGUgZWxlbWVu
dCB0b3VjaGVzIHRoZSBlZGdlcy4KICAgICBpbnQgdG9wID0gY3VycmVudFRZICsgb3ZlcmZsb3dU
b3AoKTsKQEAgLTIxNSw3ICsyMTUsNyBAQCB1bnNpZ25lZCBSZW5kZXJSZXBsYWNlZDo6Y2FyZXRN
YXhSZW5kZXJlCiAgICAgcmV0dXJuIDE7IAogfQogCi1WaXNpYmxlUG9zaXRpb24gUmVuZGVyUmVw
bGFjZWQ6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5KQorVmlzaWJsZVBvc2l0
aW9uIFJlbmRlclJlcGxhY2VkOjpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4UG9zLCBpbnQg
eVBvcykKIHsKICAgICBJbmxpbmVCb3gqIGJveCA9IGlubGluZUJveFdyYXBwZXIoKTsKICAgICBp
ZiAoIWJveCkKQEAgLTIyOCwxOSArMjI4LDE5IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJSZXBs
YWNlZDo6cG9zaXRpb24KICAgICBpbnQgdG9wID0gcm9vdC0+dG9wT3ZlcmZsb3coKTsKICAgICBp
bnQgYm90dG9tID0gcm9vdC0+bmV4dFJvb3RCb3goKSA/IHJvb3QtPm5leHRSb290Qm94KCktPnRv
cE92ZXJmbG93KCkgOiByb290LT5ib3R0b21PdmVyZmxvdygpOwogCi0gICAgaWYgKHkgKyB5UG9z
KCkgPCB0b3ApCisgICAgaWYgKHlQb3MgKyB5KCkgPCB0b3ApCiAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oZWxlbWVudCgpLCBjYXJldE1pbk9mZnNldCgpLCBET1dOU1RSRUFNKTsgLy8g
Y29vcmRpbmF0ZXMgYXJlIGFib3ZlCiAgICAgCi0gICAgaWYgKHkgKyB5UG9zKCkgPj0gYm90dG9t
KQorICAgIGlmICh5UG9zICsgeSgpID49IGJvdHRvbSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbihlbGVtZW50KCksIGNhcmV0TWF4T2Zmc2V0KCksIERPV05TVFJFQU0pOyAvLyBjb29y
ZGluYXRlcyBhcmUgYmVsb3cKICAgICAKICAgICBpZiAoZWxlbWVudCgpKSB7Ci0gICAgICAgIGlm
ICh4IDw9IHdpZHRoKCkgLyAyKQorICAgICAgICBpZiAoeFBvcyA8PSB3aWR0aCgpIC8gMikKICAg
ICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCAwLCBET1dOU1RSRUFN
KTsKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihlbGVtZW50KCksIDEsIERPV05TVFJF
QU0pOwogICAgIH0KIAotICAgIHJldHVybiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yQ29vcmRpbmF0
ZXMoeCwgeSk7CisgICAgcmV0dXJuIFJlbmRlckJveDo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4
UG9zLCB5UG9zKTsKIH0KIAogSW50UmVjdCBSZW5kZXJSZXBsYWNlZDo6c2VsZWN0aW9uUmVjdChi
b29sIGNsaXBUb1Zpc2libGVDb250ZW50KQpAQCAtMjc1LDcgKzI3NSw3IEBAIEludFJlY3QgUmVu
ZGVyUmVwbGFjZWQ6OmxvY2FsU2VsZWN0aW9uUmUKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
ICAgICAKICAgICBSb290SW5saW5lQm94KiByb290ID0gbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290
KCk7Ci0gICAgcmV0dXJuIEludFJlY3QoMCwgcm9vdC0+c2VsZWN0aW9uVG9wKCkgLSB5UG9zKCks
IHdpZHRoKCksIHJvb3QtPnNlbGVjdGlvbkhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50UmVjdCgw
LCByb290LT5zZWxlY3Rpb25Ub3AoKSAtIHkoKSwgd2lkdGgoKSwgcm9vdC0+c2VsZWN0aW9uSGVp
Z2h0KCkpOwogfQogCiB2b2lkIFJlbmRlclJlcGxhY2VkOjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxl
Y3Rpb25TdGF0ZSBzKQpAQCAtMzI3LDcgKzMyNyw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmFk
anVzdE92ZXJmbG93Rm9yQm8KIHsKICAgICBJbnRSZWN0IG92ZXJmbG93OwogICAgIGZvciAoU2hh
ZG93RGF0YSogYm94U2hhZG93ID0gc3R5bGUoKS0+Ym94U2hhZG93KCk7IGJveFNoYWRvdzsgYm94
U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KSB7Ci0gICAgICAgIEludFJlY3Qgc2hhZG93ID0gYm9y
ZGVyQm94KCk7CisgICAgICAgIEludFJlY3Qgc2hhZG93ID0gYm9yZGVyQm94UmVjdCgpOwogICAg
ICAgICBzaGFkb3cubW92ZShib3hTaGFkb3ctPngsIGJveFNoYWRvdy0+eSk7CiAgICAgICAgIHNo
YWRvdy5pbmZsYXRlKGJveFNoYWRvdy0+Ymx1cik7CiAgICAgICAgIG92ZXJmbG93LnVuaXRlKHNo
YWRvdyk7CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6YWRqdXN0T3Zl
cmZsb3dGb3JCbwogICAgIGlmICghb3ZlcmZsb3cuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICgh
Z092ZXJmbG93UmVjdE1hcCkKICAgICAgICAgICAgIGdPdmVyZmxvd1JlY3RNYXAgPSBuZXcgT3Zl
cmZsb3dSZWN0TWFwKCk7Ci0gICAgICAgIG92ZXJmbG93LnVuaXRlKGJvcmRlckJveCgpKTsKKyAg
ICAgICAgb3ZlcmZsb3cudW5pdGUoYm9yZGVyQm94UmVjdCgpKTsKICAgICAgICAgZ092ZXJmbG93
UmVjdE1hcC0+c2V0KHRoaXMsIG92ZXJmbG93KTsKICAgICAgICAgbV9oYXNPdmVyZmxvdyA9IHRy
dWU7CiAgICAgfSBlbHNlIGlmIChtX2hhc092ZXJmbG93KSB7CkBAIC0zODYsNyArMzg2LDcgQEAg
SW50UmVjdCBSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dSZWN0KGJvbwogICAgIGlmIChtX2hhc092
ZXJmbG93KQogICAgICAgICByZXR1cm4gZ092ZXJmbG93UmVjdE1hcC0+ZmluZCh0aGlzKS0+c2Vj
b25kOwogCi0gICAgcmV0dXJuIGJvcmRlckJveCgpOworICAgIHJldHVybiBib3JkZXJCb3hSZWN0
KCk7CiB9CiAKIEludFJlY3QgUmVuZGVyUmVwbGFjZWQ6OmFic29sdXRlQ2xpcHBlZE92ZXJmbG93
UmVjdCgpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcAkocmV2aXNpb24gNDAw
NzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsMTcgKzQyLDEzIEBAIFJlbmRlclJlcGxpY2E6On5SZW5kZXJSZXBsaWNhKCkKICAg
ICAKIHZvaWQgUmVuZGVyUmVwbGljYTo6bGF5b3V0KCkKIHsKLSAgICBJbnRSZWN0IGJveCA9IHBh
cmVudCgpLT5ib3JkZXJCb3goKTsKLSAgICBtX3ggPSBib3gueCgpOwotICAgIG1feSA9IGJveC55
KCk7Ci0gICAgbV93aWR0aCA9IGJveC53aWR0aCgpOwotICAgIG1faGVpZ2h0ID0gYm94LmhlaWdo
dCgpOworICAgIG1fZnJhbWVSZWN0ID0gcGFyZW50Qm94KCktPmJvcmRlckJveFJlY3QoKTsKICAg
ICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyUmVwbGljYTo6Y2FsY1By
ZWZXaWR0aHMoKQogewotICAgIG1fbWluUHJlZldpZHRoID0gcGFyZW50KCktPndpZHRoKCk7Cisg
ICAgbV9taW5QcmVmV2lkdGggPSBwYXJlbnRCb3goKS0+d2lkdGgoKTsKICAgICBtX21heFByZWZX
aWR0aCA9IG1fbWluUHJlZldpZHRoOwogICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CiB9
CkBAIC02Miw4ICs1OCw4IEBAIHZvaWQgUmVuZGVyUmVwbGljYTo6cGFpbnQoUGFpbnRJbmZvJiBw
YWkKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIHBh
aW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlTWFzaykKICAgICAgICAgcmV0dXJuOwogIAotICAg
IHR4ICs9IG1feDsKLSAgICB0eSArPSBtX3k7CisgICAgdHggKz0geCgpOworICAgIHR5ICs9IG1f
ZnJhbWVSZWN0LnkoKTsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZv
cmVncm91bmQpCiAgICAgICAgIC8vIFR1cm4gYXJvdW5kIGFuZCBwYWludCB0aGUgcGFyZW50IGxh
eWVyLiBVc2UgdGVtcG9yYXJ5IGNsaXBSZWN0cywgc28gdGhhdCB0aGUgbGF5ZXIgZG9lc24ndCBl
bmQgdXAgY2FjaGluZyBjbGlwIHJlY3RzCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0NvbnRhaW5lci5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU1LDcgKzM1NSw3IEBAIHZv
aWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8KICAgICBwYWludEluZm8uY29u
dGV4dC0+cmVzdG9yZSgpOwogICAgIAogICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUp
ICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBW
SVNJQkxFKQotICAgICAgICBwYWludE91dGxpbmUocGFpbnRJbmZvLmNvbnRleHQsIG1fYWJzb2x1
dGVCb3VuZHMueCgpLCBtX2Fic29sdXRlQm91bmRzLnkoKSwgbV9hYnNvbHV0ZUJvdW5kcy53aWR0
aCgpLCBtX2Fic29sdXRlQm91bmRzLmhlaWdodCgpLCBzdHlsZSgpKTsKKyAgICAgICAgcGFpbnRP
dXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCBtX2Fic29sdXRlQm91bmRzLngoKSwgbV9hYnNvbHV0
ZUJvdW5kcy55KCksIG1fYWJzb2x1dGVCb3VuZHMud2lkdGgoKSwgbV9hYnNvbHV0ZUJvdW5kcy5o
ZWlnaHQoKSwgc3R5bGUoKSwgdHJ1ZSk7CiB9CiAKIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRl
clNWR0NvbnRhaW5lcjo6dmlld3BvcnRUcmFuc2Zvcm0oKSBjb25zdApAQCAtNDMxLDYgKzQzMSwx
MyBAQCBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0UG9pbnQoY29uCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCitJbnRSZWN0IFJlbmRlclNWR0NvbnRhaW5lcjo6YWJzb2x1dGVPdXRsaW5l
Qm91bmRzKCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlc3VsdCA9IG1fYWJzb2x1dGVCb3VuZHM7
CisgICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3cocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQw
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29u
c3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxh
c3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9CiAKLSAgICB2aXJ0dWFsIGlu
dCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICB2aXJ0dWFsIGludCBoZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQorICAgIGludCB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2lkdGg7IH0KKyAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWln
aHQ7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCA9IDApOwpAQCAtODksNiArODksOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKKyAgICB2
aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3Q7CisKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlDb250ZW50VHJhbnNmb3JtcyhQYWludEluZm8mKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBZGRpdGlvbmFsVHJhbnNmb3JtcyhQYWludEluZm8mKTsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAJKHJldmlzaW9uIDQwMDc1KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6bGF5b3V0KCkKICAgICBjYWxj
dWxhdGVMb2NhbFRyYW5zZm9ybSgpOwogICAgIAogICAgIC8vIG1pbmltdW0gaGVpZ2h0Ci0gICAg
bV9oZWlnaHQgPSBlcnJvck9jY3VycmVkKCkgPyBpbnRyaW5zaWNTaXplKCkuaGVpZ2h0KCkgOiAw
OworICAgIHNldEhlaWdodChlcnJvck9jY3VycmVkKCkgPyBpbnRyaW5zaWNTaXplKCkuaGVpZ2h0
KCkgOiAwKTsKIAogICAgIGNhbGNXaWR0aCgpOwogICAgIGNhbGNIZWlnaHQoKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiA0MDA3NSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjksOCArMTI5LDggQEAgSW50UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21w
dXRlQWJzbwogICAgIC8vIEJ1dCBkbyB0YWtlIHRoZSBjb250YWluaW5nQmxvY2tzJ3MgY29udGFp
bmVyIHBvc2l0aW9uIGludG8gYWNjb3VudCwgaWUuIFNWRyB0ZXh0IGluIHNjcm9sbGFibGUgPGRp
dj4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaHRtbFBhcmVudEN0bSA9IHJvb3QtPlJlbmRl
ckNvbnRhaW5lcjo6YWJzb2x1dGVUcmFuc2Zvcm0oKTsKIAotICAgIEZsb2F0UmVjdCBmaXhlZFJl
Y3QobmFycm93UHJlY2lzaW9uVG9GbG9hdChyZWN0LngoKSArIGFic1Bvcy54KCkgLSB4UG9zKCkg
LSBodG1sUGFyZW50Q3RtLmUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KHJlY3QueSgpICsgYWJzUG9zLnkoKSAtIHlQb3MoKSAtIGh0bWxQYXJlbnRD
dG0uZigpKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBGbG9hdFJlY3QgZml4
ZWRSZWN0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocmVjdC54KCkgKyBhYnNQb3MueCgpIC0gKGZp
cnN0VGV4dEJveCgpID8gZmlyc3RUZXh0Qm94KCktPnhQb3MoKSA6IDApIC0gaHRtbFBhcmVudEN0
bS5lKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChy
ZWN0LnkoKSArIGFic1Bvcy55KCkgLSAoZmlyc3RUZXh0Qm94KCkgPyBmaXJzdFRleHRCb3goKS0+
eVBvcygpIDogMCkgLSBodG1sUGFyZW50Q3RtLmYoKSksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7CiAgICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIENTUyB0cmFuc2Zvcm1zCiAgICAgcmV0
dXJuIGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpeGVkUmVj
dCkpOwogfQpAQCAtMTU1LDcgKzE1NSw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdJbmxp
bmVUZXh0Ojpwb3MKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihlbGVtZW50KCksIDAs
IERPV05TVFJFQU0pOwogCiAgICAgU1ZHUm9vdElubGluZUJveCogcm9vdEJveCA9IHRleHRCb3gt
PnN2Z1Jvb3RJbmxpbmVCb3goKTsKLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJvb3RCb3gg
PyByb290Qm94LT5vYmplY3QoKSA6IDA7CisgICAgUmVuZGVyQmxvY2sqIG9iamVjdCA9IHJvb3RC
b3ggPyByb290Qm94LT5ibG9jaygpIDogMDsKIAogICAgIGlmICghb2JqZWN0KQogICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnQoKSwgMCwgRE9XTlNUUkVBTSk7CkBAIC0xNjMs
NyArMTYzLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclNWR0lubGluZVRleHQ6OnBvcwogICAg
IGludCBvZmZzZXQgPSAwOwogCiAgICAgZm9yIChTVkdJbmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0
Qm94OyBib3g7IGJveCA9IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihib3gtPm5leHRU
ZXh0Qm94KCkpKSB7Ci0gICAgICAgIGlmIChib3gtPnN2Z0NoYXJhY3RlckhpdHNQb3NpdGlvbih4
ICsgb2JqZWN0LT54UG9zKCksIHkgKyBvYmplY3QtPnlQb3MoKSwgb2Zmc2V0KSkgeworICAgICAg
ICBpZiAoYm94LT5zdmdDaGFyYWN0ZXJIaXRzUG9zaXRpb24oeCArIG9iamVjdC0+eCgpLCB5ICsg
b2JqZWN0LT55KCksIG9mZnNldCkpIHsKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBhdCB0
aGUgZW5kL3N0YXJ0IG9mIHRoZSBib3gsIHN0b3AgbG9va2luZyBmb3Igb3RoZXIgc2VsZWN0ZWQg
Ym94ZXMuCiAgICAgICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAg
ICAgICAgICAgICBpZiAob2Zmc2V0IDw9IChpbnQpIGJveC0+ZW5kKCkgKyAxKQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw4ICsxMDIs
OCBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmxheW91dCgpCiAKICAgICBtX2Fic29sdXRlQm91bmRz
ID0gYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CiAgICAgU1ZHU1ZHRWxlbWVudCogc3Zn
ID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KGVsZW1lbnQoKSk7Ci0gICAgbV93aWR0aCA9
IHN0YXRpY19jYXN0PGludD4obV93aWR0aCAqIHN2Zy0+Y3VycmVudFNjYWxlKCkpOwotICAgIG1f
aGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihtX2hlaWdodCAqIHN2Zy0+Y3VycmVudFNjYWxlKCkp
OworICAgIHNldFdpZHRoKHN0YXRpY19jYXN0PGludD4od2lkdGgoKSAqIHN2Zy0+Y3VycmVudFNj
YWxlKCkpKTsKKyAgICBzZXRIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQoKSAqIHN2Zy0+
Y3VycmVudFNjYWxlKCkpKTsKICAgICAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAg
ICAgIGlmIChzZWxmTmVlZHNMYXlvdXQoKSkgLy8gZWl0aGVyIGJvdW5kcyBvciB0cmFuc2Zvcm0g
Y2hhbmdlZCwgZm9yY2Uga2lkcyB0byByZWxheW91dApAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQg
UmVuZGVyU1ZHUm9vdDo6YXBwbHlDb250ZW50VHJhbnNmb3IKICAgICAvLyBUcmFuc2xhdGUgZnJv
bSBwYXJlbnQgb2Zmc2V0cyAoaHRtbCByZW5kZXJlcnMpIHRvIGEgcmVsYXRpdmUgdHJhbnNmb3Jt
IChzdmcgcmVuZGVyZXJzKQogICAgIEludFBvaW50IG9yaWdpbjsKICAgICBvcmlnaW4ubW92ZShw
YXJlbnRYLCBwYXJlbnRZKTsKLSAgICBvcmlnaW4ubW92ZShtX3gsIG1feSk7CisgICAgb3JpZ2lu
Lm1vdmUoeCgpLCBtX2ZyYW1lUmVjdC55KCkpOwogICAgIG9yaWdpbi5tb3ZlKGJvcmRlckxlZnQo
KSwgYm9yZGVyVG9wKCkpOwogICAgIG9yaWdpbi5tb3ZlKHBhZGRpbmdMZWZ0KCksIHBhZGRpbmdU
b3AoKSk7CiAKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50KFBh
aW50SW5mbyYgcGFpCiAKICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGV4aXN0IGZvciA8c3ZnPiBy
ZW5kZXJlcnMKICAgICBpZiAoaGFzQm94RGVjb3JhdGlvbnMoKSAmJiAocGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
U2VsZWN0aW9uKSkgCi0gICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBtX3gg
KyBwYXJlbnRYLCBtX3kgKyBwYXJlbnRZKTsKKyAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhw
YWludEluZm8sIHgoKSArIHBhcmVudFgsIG1fZnJhbWVSZWN0LnkoKSArIHBhcmVudFkpOwogCiAg
ICAgaWYgKCFmaXJzdENoaWxkKCkpIHsKICNpZiBFTkFCTEUoU1ZHX0ZJTFRFUlMpCkBAIC0yNjgs
NyArMjY4LDcgQEAgdm9pZCBSZW5kZXJTVkdSb290OjphYnNvbHV0ZVF1YWRzKFZlY3RvcgogVHJh
bnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25z
dAogewogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IFJlbmRlckNvbnRhaW5lcjo6YWJz
b2x1dGVUcmFuc2Zvcm0oKTsKLSAgICBjdG0udHJhbnNsYXRlKG1feCwgbV95KTsKKyAgICBjdG0u
dHJhbnNsYXRlKHgoKSwgbV9mcmFtZVJlY3QueSgpKTsKICAgICBTVkdTVkdFbGVtZW50KiBzdmcg
PSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4oZWxlbWVudCgpKTsKICAgICBjdG0uc2NhbGUo
c3ZnLT5jdXJyZW50U2NhbGUoKSk7CiAgICAgY3RtLnRyYW5zbGF0ZShzdmctPmN1cnJlbnRUcmFu
c2xhdGUoKS54KCksIHN2Zy0+Y3VycmVudFRyYW5zbGF0ZSgpLnkoKSk7CkBAIC0zMDgsOCArMzA4
LDggQEAgYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaQogICAgIGlmICgh
dmlld3BvcnQoKS5pc0VtcHR5KCkKICAgICAgICAgJiYgc3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0g
T0hJRERFTgogICAgICAgICAmJiBzdHlsZSgpLT5vdmVyZmxvd1koKSA9PSBPSElEREVOKSB7Ci0g
ICAgICAgIGludCB0eCA9IG1feCAtIF90eCArIHN4OwotICAgICAgICBpbnQgdHkgPSBtX3kgLSBf
dHkgKyBzeTsKKyAgICAgICAgaW50IHR4ID0geCgpIC0gX3R4ICsgc3g7CisgICAgICAgIGludCB0
eSA9IG1fZnJhbWVSZWN0LnkoKSAtIF90eSArIHN5OwogCiAgICAgICAgIC8vIENoZWNrIGlmIHdl
IG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgogICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94
ID0gb3ZlcmZsb3dSZWN0KGZhbHNlKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1RTcGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUU3Bh
bi5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVFNw
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
U1ZHVFNwYW4uaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlckJs
b2NrLmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlNWR1Jvb3RJ
bmxpbmVCb3guaCIKIApAQCAtNDIsMTMgKzQzLDEzIEBAIHZvaWQgUmVuZGVyU1ZHVFNwYW46OmFi
c29sdXRlUmVjdHMoVmVjdG8KICAgICBJbmxpbmVSdW5Cb3gqIGZpcnN0Qm94ID0gZmlyc3RMaW5l
Qm94KCk7CiAKICAgICBTVkdSb290SW5saW5lQm94KiByb290Qm94ID0gZmlyc3RCb3ggPyBzdGF0
aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oZmlyc3RCb3gpLT5zdmdSb290SW5saW5lQm94KCkg
OiAwOwotICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcm9vdEJveCA/IHJvb3RCb3gtPm9iamVj
dCgpIDogMDsKKyAgICBSZW5kZXJCb3gqIG9iamVjdCA9IHJvb3RCb3ggPyByb290Qm94LT5ibG9j
aygpIDogMDsKIAogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQg
eFJlZiA9IG9iamVjdC0+eFBvcygpICsgeFBvcygpOwotICAgIGludCB5UmVmID0gb2JqZWN0LT55
UG9zKCkgKyB5UG9zKCk7CisgICAgaW50IHhSZWYgPSBvYmplY3QtPngoKSArIHgoKTsKKyAgICBp
bnQgeVJlZiA9IG9iamVjdC0+eSgpICsgeSgpOwogIAogICAgIGZvciAoSW5saW5lUnVuQm94KiBj
dXJyID0gZmlyc3RCb3g7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKSB7CiAgICAg
ICAgIEZsb2F0UmVjdCByZWN0KHhSZWYgKyBjdXJyLT54UG9zKCksIHlSZWYgKyBjdXJyLT55UG9z
KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKTsKQEAgLTYyLDEzICs2MywxMyBAQCB2
b2lkIFJlbmRlclNWR1RTcGFuOjphYnNvbHV0ZVF1YWRzKFZlY3RvCiAgICAgSW5saW5lUnVuQm94
KiBmaXJzdEJveCA9IGZpcnN0TGluZUJveCgpOwogCiAgICAgU1ZHUm9vdElubGluZUJveCogcm9v
dEJveCA9IGZpcnN0Qm94ID8gc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGZpcnN0Qm94
KS0+c3ZnUm9vdElubGluZUJveCgpIDogMDsKLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJv
b3RCb3ggPyByb290Qm94LT5vYmplY3QoKSA6IDA7CisgICAgUmVuZGVyQm94KiBvYmplY3QgPSBy
b290Qm94ID8gcm9vdEJveC0+YmxvY2soKSA6IDA7CiAKICAgICBpZiAoIW9iamVjdCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaW50IHhSZWYgPSBvYmplY3QtPnhQb3MoKSArIHhQb3MoKTsKLSAg
ICBpbnQgeVJlZiA9IG9iamVjdC0+eVBvcygpICsgeVBvcygpOworICAgIGludCB4UmVmID0gb2Jq
ZWN0LT54KCkgKyB4KCk7CisgICAgaW50IHlSZWYgPSBvYmplY3QtPnkoKSArIHkoKTsKICAKICAg
ICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94OyBjdXJyOyBjdXJyID0gY3Vyci0+
bmV4dExpbmVCb3goKSkgewogICAgICAgICBGbG9hdFJlY3QgcmVjdCh4UmVmICsgY3Vyci0+eFBv
cygpLCB5UmVmICsgY3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSk7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gNDAwNzUpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTYsNyArOTYsNyBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAgU1ZHVGV4dEVs
ZW1lbnQqIHRleHQgPSBzdGF0aWNfY2FzdDxTVkdUZXh0RWxlbWVudCo+KGVsZW1lbnQoKSk7CiAg
ICAgaW50IHhPZmZzZXQgPSAoaW50KSh0ZXh0LT54KCktPmdldEZpcnN0KCkudmFsdWUodGV4dCkp
OwogICAgIGludCB5T2Zmc2V0ID0gKGludCkodGV4dC0+eSgpLT5nZXRGaXJzdCgpLnZhbHVlKHRl
eHQpKTsKLSAgICBzZXRQb3MoeE9mZnNldCwgeU9mZnNldCk7CisgICAgc2V0TG9jYXRpb24oeE9m
ZnNldCwgeU9mZnNldCk7CiAgICAgCiAgICAgY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKIApA
QCAtMjMxLDcgKzIzMSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpyZWxhdGl2ZUJCb3go
Ym8KICAgICAgICAgcmVwYWludFJlY3QuaW5mbGF0ZShzdHJva2VXaWR0aCk7CiAgICAgfQogCi0g
ICAgcmVwYWludFJlY3QubW92ZSh4UG9zKCksIHlQb3MoKSk7CisgICAgcmVwYWludFJlY3QubW92
ZSh4KCksIHkoKSk7CiAgICAgcmV0dXJuIHJlcGFpbnRSZWN0OwogfQogCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmgiCiAKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlNWR0lubGlu
ZVRleHRCb3guaCIKICNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1Jv
b3RJbmxpbmVCb3guaCIKQEAgLTgyLDEzICs4MywxMyBAQCB2b2lkIFJlbmRlclNWR1RleHRQYXRo
OjphYnNvbHV0ZVJlY3RzKFZlCiAgICAgSW5saW5lUnVuQm94KiBmaXJzdEJveCA9IGZpcnN0TGlu
ZUJveCgpOwogCiAgICAgU1ZHUm9vdElubGluZUJveCogcm9vdEJveCA9IGZpcnN0Qm94ID8gc3Rh
dGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGZpcnN0Qm94KS0+c3ZnUm9vdElubGluZUJveCgp
IDogMDsKLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJvb3RCb3ggPyByb290Qm94LT5vYmpl
Y3QoKSA6IDA7CisgICAgUmVuZGVyQmxvY2sqIG9iamVjdCA9IHJvb3RCb3ggPyByb290Qm94LT5i
bG9jaygpIDogMDsKIAogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBp
bnQgeFJlZiA9IG9iamVjdC0+eFBvcygpICsgeFBvcygpOwotICAgIGludCB5UmVmID0gb2JqZWN0
LT55UG9zKCkgKyB5UG9zKCk7CisgICAgaW50IHhSZWYgPSBvYmplY3QtPngoKSArIHgoKTsKKyAg
ICBpbnQgeVJlZiA9IG9iamVjdC0+eSgpICsgeSgpOwogCiAgICAgZm9yIChJbmxpbmVSdW5Cb3gq
IGN1cnIgPSBmaXJzdEJveDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsKICAg
ICAgICAgRmxvYXRSZWN0IHJlY3QoeFJlZiArIGN1cnItPnhQb3MoKSwgeVJlZiArIGN1cnItPnlQ
b3MoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpOwpAQCAtMTAyLDEzICsxMDMsMTMg
QEAgdm9pZCBSZW5kZXJTVkdUZXh0UGF0aDo6YWJzb2x1dGVRdWFkcyhWZQogICAgIElubGluZVJ1
bkJveCogZmlyc3RCb3ggPSBmaXJzdExpbmVCb3goKTsKIAogICAgIFNWR1Jvb3RJbmxpbmVCb3gq
IHJvb3RCb3ggPSBmaXJzdEJveCA/IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihmaXJz
dEJveCktPnN2Z1Jvb3RJbmxpbmVCb3goKSA6IDA7Ci0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3Qg
PSByb290Qm94ID8gcm9vdEJveC0+b2JqZWN0KCkgOiAwOworICAgIFJlbmRlckJsb2NrKiBvYmpl
Y3QgPSByb290Qm94ID8gcm9vdEJveC0+YmxvY2soKSA6IDA7CiAKICAgICBpZiAoIW9iamVjdCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHhSZWYgPSBvYmplY3QtPnhQb3MoKSArIHhQb3Mo
KTsKLSAgICBpbnQgeVJlZiA9IG9iamVjdC0+eVBvcygpICsgeVBvcygpOworICAgIGludCB4UmVm
ID0gb2JqZWN0LT54KCkgKyB4KCk7CisgICAgaW50IHlSZWYgPSBvYmplY3QtPnkoKSArIHkoKTsK
IAogICAgIGZvciAoSW5saW5lUnVuQm94KiBjdXJyID0gZmlyc3RCb3g7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0TGluZUJveCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCByZWN0KHhSZWYgKyBjdXJy
LT54UG9zKCksIHlSZWYgKyBjdXJyLT55UG9zKCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdo
dCgpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lci5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcg
QEAgYm9vbCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6bm9kZUF0UAogICAgICAgICAmJiBz
dHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPSElEREVOCiAgICAgICAgICYmIHN0eWxlKCktPm92ZXJm
bG93WSgpID09IE9ISURERU4pIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyBh
bnl0aGluZyBhdCBhbGwuCi0gICAgICAgIEludFJlY3Qgb3ZlcmZsb3dCb3ggPSBvdmVyZmxvd1Jl
Y3QoZmFsc2UpOworICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gSW50UmVjdCgwLCAwLCB3
aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIG92ZXJmbG93Qm94Lm1vdmUoX3R4LCBfdHkpOwog
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBSZW5kZXJPYmplY3Q6OmFic29sdXRl
VHJhbnNmb3JtKCk7CiAgICAgICAgIGN0bS50cmFuc2xhdGUodmlld3BvcnQoKS54KCksIHZpZXdw
b3J0KCkueSgpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAkocmV2
aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3Jv
bGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJl
bmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xp
ZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgUmVuZGVyQm94KiByZW5kZXJl
cikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclNjcm9sbGJhcihjbGllbnQsIG9y
aWVudGF0aW9uLCByZW5kZXJlcikpOwogfQogCi1SZW5kZXJTY3JvbGxiYXI6OlJlbmRlclNjcm9s
bGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitSZW5kZXJTY3JvbGxiYXI6OlJlbmRlclNj
cm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIFJlbmRlckJveCogcmVuZGVyZXIpCiAgICAgOiBTY3JvbGxiYXIoY2xpZW50LCBv
cmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhciwgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnJlbmRl
clNjcm9sbGJhclRoZW1lKCkpCiAgICAgLCBtX293bmVyKHJlbmRlcmVyKQogewpAQCAtNTAsNyAr
NTAsNyBAQCB2b2lkIFJlbmRlclNjcm9sbGJhcjo6c2V0UGFyZW50KFNjcm9sbFZpCiB7CiAgICAg
U2Nyb2xsYmFyOjpzZXRQYXJlbnQocGFyZW50KTsKICAgICBpZiAoIXBhcmVudCkgewotICAgICAg
ICAvLyBEZXN0cm95IGFsbCBvZiB0aGUgc2Nyb2xsYmFyJ3MgUmVuZGVyT2JqZWN0cy4KKyAgICAg
ICAgLy8gRGVzdHJveSBhbGwgb2YgdGhlIHNjcm9sbGJhcidzIFJlbmRlckJveGVzLgogICAgICAg
ICB1cGRhdGVTY3JvbGxiYXJQYXJ0cyh0cnVlKTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTY3JvbGxiYXIuaAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgUmVuZGVy
Qm94OwogY2xhc3MgUmVuZGVyU2Nyb2xsYmFyUGFydDsKIGNsYXNzIFJlbmRlclN0eWxlOwogCiBj
bGFzcyBSZW5kZXJTY3JvbGxiYXIgOiBwdWJsaWMgU2Nyb2xsYmFyIHsKIHByb3RlY3RlZDoKLSAg
ICBSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24s
IFJlbmRlck9iamVjdCopOworICAgIFJlbmRlclNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgUmVuZGVyQm94Kik7CiAKIHB1YmxpYzoKICAgICBmcmllbmQg
Y2xhc3MgU2Nyb2xsYmFyOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRl
Q3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBS
ZW5kZXJPYmplY3QqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZUN1
c3RvbVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgUmVu
ZGVyQm94Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyU2Nyb2xsYmFyKCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlQ2hhbmdlZCgpOwogCi0gICAgUmVuZGVyT2JqZWN0KiBv
d25pbmdSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7IH0KKyAgICBSZW5kZXJCb3gq
IG93bmluZ1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQogCiAgICAgdm9pZCBw
YWludFBhcnQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyUGFydCwgY29uc3QgSW50UmVjdCYp
OwogCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gZ2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUoU2Nyb2xsYmFyUGFydCwgUmVuZGVyU3R5bGU6OlBz
ZXVkb0lkKTsKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhclBhcnQoU2Nyb2xsYmFyUGFydCwgYm9v
bCBkZXN0cm95ID0gZmFsc2UpOwogCi0gICAgUmVuZGVyT2JqZWN0KiBtX293bmVyOworICAgIFJl
bmRlckJveCogbV9vd25lcjsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZW5kZXJTY3JvbGxiYXJQ
YXJ0Kj4gbV9wYXJ0czsKIH07CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhclBhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhclBhcnQuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNjcm9sbGJhclBhcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNCArNDUsMTQgQEAgUmVu
ZGVyU2Nyb2xsYmFyUGFydDo6flJlbmRlclNjcm9sbGJhclBhcgogCiB2b2lkIFJlbmRlclNjcm9s
bGJhclBhcnQ6OmxheW91dCgpCiB7Ci0gICAgc2V0UG9zKDAsIDApOyAvLyBXZSBkb24ndCB3b3Jy
eSBhYm91dCBwb3NpdGlvbmluZyBvdXJzZWx2ZXMuICBXZSdyZSBqdXN0IGRldGVybWluaW5nIG91
ciBtaW5pbXVtIHdpZHRoL2hlaWdodC4KKyAgICBzZXRMb2NhdGlvbihJbnRQb2ludCgpKTsgLy8g
V2UgZG9uJ3Qgd29ycnkgYWJvdXQgcG9zaXRpb25pbmcgb3Vyc2VsdmVzLiAgV2UncmUganVzdCBk
ZXRlcm1pbmluZyBvdXIgbWluaW11bSB3aWR0aC9oZWlnaHQuCiAgICAgaWYgKG1fc2Nyb2xsYmFy
LT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCiAgICAgICAgIGxheW91dEhv
cml6b250YWxQYXJ0KCk7CiAgICAgZWxzZQogICAgICAgICBsYXlvdXRWZXJ0aWNhbFBhcnQoKTsK
IAotICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtX3dpZHRoLCBtX292ZXJmbG93V2lkdGgpOwot
ICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9oZWlnaHQsIG1fb3ZlcmZsb3dIZWlnaHQpOwor
ICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heCh3aWR0aCgpLCBtX292ZXJmbG93V2lkdGgpOworICAg
IG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgoaGVpZ2h0KCksIG1fb3ZlcmZsb3dIZWlnaHQpOwogICAg
IAogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KQEAgLTYwLDExICs2MCwxMSBAQCB2b2lk
IFJlbmRlclNjcm9sbGJhclBhcnQ6OmxheW91dCgpCiB2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6
OmxheW91dEhvcml6b250YWxQYXJ0KCkKIHsKICAgICBpZiAobV9wYXJ0ID09IFNjcm9sbGJhckJH
UGFydCkgewotICAgICAgICBtX3dpZHRoID0gbV9zY3JvbGxiYXItPndpZHRoKCk7CisgICAgICAg
IHNldFdpZHRoKG1fc2Nyb2xsYmFyLT53aWR0aCgpKTsKICAgICAgICAgY29tcHV0ZVNjcm9sbGJh
ckhlaWdodCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbXB1dGVTY3JvbGxiYXJXaWR0aCgp
OwotICAgICAgICBtX2hlaWdodCA9IG1fc2Nyb2xsYmFyLT5oZWlnaHQoKTsKKyAgICAgICAgc2V0
SGVpZ2h0KG1fc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CiAgICAgfQogfQogCkBAIC03Miw5ICs3Miw5
IEBAIHZvaWQgUmVuZGVyU2Nyb2xsYmFyUGFydDo6bGF5b3V0VmVydGljYWwKIHsKICAgICBpZiAo
bV9wYXJ0ID09IFNjcm9sbGJhckJHUGFydCkgewogICAgICAgICBjb21wdXRlU2Nyb2xsYmFyV2lk
dGgoKTsKLSAgICAgICAgbV9oZWlnaHQgPSBtX3Njcm9sbGJhci0+aGVpZ2h0KCk7CisgICAgICAg
IHNldEhlaWdodChtX3Njcm9sbGJhci0+aGVpZ2h0KCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1fd2lkdGggPSBtX3Njcm9sbGJhci0+d2lkdGgoKTsKKyAgICAgICAgc2V0V2lkdGgobV9zY3Jv
bGxiYXItPndpZHRoKCkpOwogICAgICAgICBjb21wdXRlU2Nyb2xsYmFySGVpZ2h0KCk7CiAgICAg
fSAKIH0KQEAgLTg5LDEwICs4OSwxMCBAQCBzdGF0aWMgaW50IGNhbGNTY3JvbGxiYXJUaGlja25l
c3NVc2luZyhjCiB2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OmNvbXB1dGVTY3JvbGxiYXJXaWR0
aCgpCiB7CiAgICAgaW50IHZpc2libGVTaXplID0gbV9zY3JvbGxiYXItPm93bmluZ1JlbmRlcmVy
KCktPndpZHRoKCkgLSBtX3Njcm9sbGJhci0+b3duaW5nUmVuZGVyZXIoKS0+Ym9yZGVyTGVmdCgp
IC0gbV9zY3JvbGxiYXItPm93bmluZ1JlbmRlcmVyKCktPmJvcmRlclJpZ2h0KCk7Ci0gICAgaW50
IHdpZHRoID0gY2FsY1Njcm9sbGJhclRoaWNrbmVzc1VzaW5nKHN0eWxlKCktPndpZHRoKCksIHZp
c2libGVTaXplKTsKKyAgICBpbnQgdyA9IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2luZyhzdHls
ZSgpLT53aWR0aCgpLCB2aXNpYmxlU2l6ZSk7CiAgICAgaW50IG1pbldpZHRoID0gY2FsY1Njcm9s
bGJhclRoaWNrbmVzc1VzaW5nKHN0eWxlKCktPm1pbldpZHRoKCksIHZpc2libGVTaXplKTsKLSAg
ICBpbnQgbWF4V2lkdGggPSBzdHlsZSgpLT5tYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkgPyB3aWR0
aCA6IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2luZyhzdHlsZSgpLT5tYXhXaWR0aCgpLCB2aXNp
YmxlU2l6ZSk7Ci0gICAgbV93aWR0aCA9IG1heChtaW5XaWR0aCwgbWluKG1heFdpZHRoLCB3aWR0
aCkpOworICAgIGludCBtYXhXaWR0aCA9IHN0eWxlKCktPm1heFdpZHRoKCkuaXNVbmRlZmluZWQo
KSA/IHcgOiBjYWxjU2Nyb2xsYmFyVGhpY2tuZXNzVXNpbmcoc3R5bGUoKS0+bWF4V2lkdGgoKSwg
dmlzaWJsZVNpemUpOworICAgIHNldFdpZHRoKG1heChtaW5XaWR0aCwgbWluKG1heFdpZHRoLCB3
KSkpOwogICAgIAogICAgIC8vIEJ1dHRvbnMgYW5kIHRyYWNrIHBpZWNlcyBjYW4gYWxsIGhhdmUg
bWFyZ2lucyBhbG9uZyB0aGUgYXhpcyBvZiB0aGUgc2Nyb2xsYmFyLiAKICAgICBtX21hcmdpbkxl
ZnQgPSBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkuY2FsY01pblZhbHVlKHZpc2libGVTaXplKTsKQEAg
LTEwMiwxMCArMTAyLDEwIEBAIHZvaWQgUmVuZGVyU2Nyb2xsYmFyUGFydDo6Y29tcHV0ZVNjcm9s
bGIKIHZvaWQgUmVuZGVyU2Nyb2xsYmFyUGFydDo6Y29tcHV0ZVNjcm9sbGJhckhlaWdodCgpCiB7
CiAgICAgaW50IHZpc2libGVTaXplID0gbV9zY3JvbGxiYXItPm93bmluZ1JlbmRlcmVyKCktPmhl
aWdodCgpIC0gIG1fc2Nyb2xsYmFyLT5vd25pbmdSZW5kZXJlcigpLT5ib3JkZXJUb3AoKSAtIG1f
c2Nyb2xsYmFyLT5vd25pbmdSZW5kZXJlcigpLT5ib3JkZXJCb3R0b20oKTsKLSAgICBpbnQgaGVp
Z2h0ID0gY2FsY1Njcm9sbGJhclRoaWNrbmVzc1VzaW5nKHN0eWxlKCktPmhlaWdodCgpLCB2aXNp
YmxlU2l6ZSk7CisgICAgaW50IGggPSBjYWxjU2Nyb2xsYmFyVGhpY2tuZXNzVXNpbmcoc3R5bGUo
KS0+aGVpZ2h0KCksIHZpc2libGVTaXplKTsKICAgICBpbnQgbWluSGVpZ2h0ID0gY2FsY1Njcm9s
bGJhclRoaWNrbmVzc1VzaW5nKHN0eWxlKCktPm1pbkhlaWdodCgpLCB2aXNpYmxlU2l6ZSk7Ci0g
ICAgaW50IG1heEhlaWdodCA9IHN0eWxlKCktPm1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBo
ZWlnaHQgOiBjYWxjU2Nyb2xsYmFyVGhpY2tuZXNzVXNpbmcoc3R5bGUoKS0+bWF4SGVpZ2h0KCks
IHZpc2libGVTaXplKTsKLSAgICBtX2hlaWdodCA9IG1heChtaW5IZWlnaHQsIG1pbihtYXhIZWln
aHQsIGhlaWdodCkpOworICAgIGludCBtYXhIZWlnaHQgPSBzdHlsZSgpLT5tYXhIZWlnaHQoKS5p
c1VuZGVmaW5lZCgpID8gaCA6IGNhbGNTY3JvbGxiYXJUaGlja25lc3NVc2luZyhzdHlsZSgpLT5t
YXhIZWlnaHQoKSwgdmlzaWJsZVNpemUpOworICAgIHNldEhlaWdodChtYXgobWluSGVpZ2h0LCBt
aW4obWF4SGVpZ2h0LCBoKSkpOwogCiAgICAgLy8gQnV0dG9ucyBhbmQgdHJhY2sgcGllY2VzIGNh
biBhbGwgaGF2ZSBtYXJnaW5zIGFsb25nIHRoZSBheGlzIG9mIHRoZSBzY3JvbGxiYXIuIAogICAg
IG1fbWFyZ2luVG9wID0gc3R5bGUoKS0+bWFyZ2luVG9wKCkuY2FsY01pblZhbHVlKHZpc2libGVT
aXplKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OmltYWdl
Q2hhbmdlZChXCiB2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OnBhaW50SW50b1JlY3QoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZGltZW5zaW9ucyBtYXRjaCB0aGUgcmVj
dC4KLSAgICBzZXRQb3MocmVjdC54KCkgLSB0eCwgcmVjdC55KCkgLSB0eSk7CisgICAgc2V0TG9j
YXRpb24ocmVjdC54KCkgLSB0eCwgcmVjdC55KCkgLSB0eSk7CiAgICAgc2V0V2lkdGgocmVjdC53
aWR0aCgpKTsKICAgICBzZXRIZWlnaHQocmVjdC5oZWlnaHQoKSk7CiAgICAgc2V0T3ZlcmZsb3dX
aWR0aChtYXgocmVjdC53aWR0aCgpLCBvdmVyZmxvd1dpZHRoKCkpKTsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTbGlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsOSArMTA1LDkgQEAgdm9p
ZCBIVE1MU2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbgogICAgICAgICAgICAgRmxvYXRQ
b2ludCBjdXJQb2ludCA9IHNsaWRlci0+YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQobW91c2VF
dmVudC0+cGFnZVgoKSwgbW91c2VFdmVudC0+cGFnZVkoKSksIGZhbHNlLCB0cnVlKTsKICAgICAg
ICAgICAgIGludCBuZXdQb3NpdGlvbiA9IHNsaWRlci0+cG9zaXRpb25Gb3JPZmZzZXQoCiAgICAg
ICAgICAgICAgICAgSW50UG9pbnQobV9pbml0aWFsUG9zaXRpb24gKyBjdXJQb2ludC54KCkgLSBt
X2luaXRpYWxDbGlja1BvaW50LngoKQotICAgICAgICAgICAgICAgICAgICAgICAgKyAocmVuZGVy
ZXIoKS0+d2lkdGgoKSAvIDIpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICsgKHJlbmRlckJv
eCgpLT53aWR0aCgpIC8gMiksIAogICAgICAgICAgICAgICAgICAgICBtX2luaXRpYWxQb3NpdGlv
biArIGN1clBvaW50LnkoKSAtIG1faW5pdGlhbENsaWNrUG9pbnQueSgpCi0gICAgICAgICAgICAg
ICAgICAgICAgICArIChyZW5kZXJlcigpLT5oZWlnaHQoKSAvIDIpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICArIChyZW5kZXJCb3goKS0+aGVpZ2h0KCkgLyAyKSkpOwogICAgICAgICAgICAg
aWYgKHNsaWRlci0+Y3VycmVudFBvc2l0aW9uKCkgIT0gbmV3UG9zaXRpb24pIHsKICAgICAgICAg
ICAgICAgICBzbGlkZXItPnNldEN1cnJlbnRQb3NpdGlvbihuZXdQb3NpdGlvbik7CiAgICAgICAg
ICAgICAgICAgc2xpZGVyLT52YWx1ZUNoYW5nZWQoKTsKQEAgLTIxMywxMiArMjEzLDEyIEBAIHZv
aWQgUmVuZGVyU2xpZGVyOjpsYXlvdXQoKQogICAgIAogICAgIGlmIChtX3RodW1iICYmIG1fdGh1
bWItPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIAotICAgICAgICBpbnQgb2xkV2lkdGggPSBt
X3dpZHRoOworICAgICAgICBpbnQgb2xkV2lkdGggPSB3aWR0aCgpOwogICAgICAgICBjYWxjV2lk
dGgoKTsKLSAgICAgICAgaW50IG9sZEhlaWdodCA9IG1faGVpZ2h0OworICAgICAgICBpbnQgb2xk
SGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgICAgIGNhbGNIZWlnaHQoKTsKICAgICAgICAgCi0gICAg
ICAgIGlmIChvbGRXaWR0aCAhPSBtX3dpZHRoIHx8IG9sZEhlaWdodCAhPSBtX2hlaWdodCkKKyAg
ICAgICAgaWYgKG9sZFdpZHRoICE9IHdpZHRoKCkgfHwgb2xkSGVpZ2h0ICE9IGhlaWdodCgpKQog
ICAgICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7ICAKIAogICAgICAgICAvLyBBbGxv
dyB0aGUgdGhlbWUgdG8gc2V0IHRoZSBzaXplIG9mIHRoZSB0aHVtYgpAQCAtMjY4LDggKzI2OCw4
IEBAIGJvb2wgUmVuZGVyU2xpZGVyOjptb3VzZUV2ZW50SXNJblRodW1iKE0KICAgICB9IGVsc2Ug
CiAjZW5kaWYKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fdGh1bWIt
PnJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50KGV2dC0+cGFnZVgoKSwgZXZ0
LT5wYWdlWSgpKSwgZmFsc2UsIHRydWUpOwotICAgICAgICBJbnRSZWN0IHRodW1iQm91bmRzID0g
bV90aHVtYi0+cmVuZGVyZXIoKS0+Ym9yZGVyQm94KCk7CisgICAgICAgIEZsb2F0UG9pbnQgbG9j
YWxQb2ludCA9IG1fdGh1bWItPnJlbmRlckJveCgpLT5hYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2lu
dChldnQtPnBhZ2VYKCksIGV2dC0+cGFnZVkoKSksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgSW50
UmVjdCB0aHVtYkJvdW5kcyA9IG1fdGh1bWItPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCk7
CiAgICAgICAgIHJldHVybiB0aHVtYkJvdW5kcy5jb250YWlucyhyb3VuZGVkSW50UG9pbnQobG9j
YWxQb2ludCkpOwogICAgIH0KIH0KQEAgLTM1MSw5ICszNTEsOSBAQCBpbnQgUmVuZGVyU2xpZGVy
Ojpwb3NpdGlvbkZvck9mZnNldChjb25zCiAgICAKICAgICBpbnQgcG9zaXRpb247CiAgICAgaWYg
KHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIHBv
c2l0aW9uID0gcC55KCkgLSBtX3RodW1iLT5yZW5kZXJlcigpLT5oZWlnaHQoKSAvIDI7CisgICAg
ICAgIHBvc2l0aW9uID0gcC55KCkgLSBtX3RodW1iLT5yZW5kZXJCb3goKS0+aGVpZ2h0KCkgLyAy
OwogICAgIGVsc2UKLSAgICAgICAgcG9zaXRpb24gPSBwLngoKSAtIG1fdGh1bWItPnJlbmRlcmVy
KCktPndpZHRoKCkgLyAyOworICAgICAgICBwb3NpdGlvbiA9IHAueCgpIC0gbV90aHVtYi0+cmVu
ZGVyQm94KCktPndpZHRoKCkgLyAyOwogICAgIAogICAgIHJldHVybiBtYXgoMCwgbWluKHBvc2l0
aW9uLCB0cmFja1NpemUoKSkpOwogfQpAQCAtMzk1LDggKzM5NSw4IEBAIGludCBSZW5kZXJTbGlk
ZXI6OnRyYWNrU2l6ZSgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKHN0eWxlKCktPmFw
cGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIHJldHVybiBjb250ZW50
SGVpZ2h0KCkgLSBtX3RodW1iLT5yZW5kZXJlcigpLT5oZWlnaHQoKTsKLSAgICByZXR1cm4gY29u
dGVudFdpZHRoKCkgLSBtX3RodW1iLT5yZW5kZXJlcigpLT53aWR0aCgpOworICAgICAgICByZXR1
cm4gY29udGVudEhlaWdodCgpIC0gbV90aHVtYi0+cmVuZGVyQm94KCktPmhlaWdodCgpOworICAg
IHJldHVybiBjb250ZW50V2lkdGgoKSAtIG1fdGh1bWItPnJlbmRlckJveCgpLT53aWR0aCgpOwog
fQogCiB2b2lkIFJlbmRlclNsaWRlcjo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldnQpCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDEyICsyMTksMTIg
QEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY1dpZHRoKCkKICAgICBMZW5ndGhUeXBlIHdpZHRoVHlw
ZSA9IHN0eWxlKCktPndpZHRoKCkudHlwZSgpOwogICAgIGlmICh3aWR0aFR5cGUgPiBSZWxhdGl2
ZSAmJiBzdHlsZSgpLT53aWR0aCgpLmlzUG9zaXRpdmUoKSkgewogICAgICAgICAvLyBQZXJjZW50
IG9yIGZpeGVkIHRhYmxlCi0gICAgICAgIG1fd2lkdGggPSBzdHlsZSgpLT53aWR0aCgpLmNhbGNN
aW5WYWx1ZShhdmFpbGFibGVXaWR0aCk7Ci0gICAgICAgIG1fd2lkdGggPSBtYXgobWluUHJlZldp
ZHRoKCksIG1fd2lkdGgpOworICAgICAgICBzZXRXaWR0aChzdHlsZSgpLT53aWR0aCgpLmNhbGNN
aW5WYWx1ZShhdmFpbGFibGVXaWR0aCkpOworICAgICAgICBzZXRXaWR0aChtYXgobWluUHJlZldp
ZHRoKCksIHdpZHRoKCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBBbiBhdXRvIHdpZHRo
IHRhYmxlIHNob3VsZCBzaHJpbmsgdG8gZml0IHdpdGhpbiB0aGUgbGluZSB3aWR0aCBpZiBuZWNl
c3NhcnkgaW4gb3JkZXIgdG8gCiAgICAgICAgIC8vIGF2b2lkIG92ZXJsYXBwaW5nIGZsb2F0cy4K
LSAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBjYi0+bGluZVdpZHRoKG1feSk7CisgICAgICAgIGF2
YWlsYWJsZVdpZHRoID0gY2ItPmxpbmVXaWR0aChtX2ZyYW1lUmVjdC55KCkpOwogICAgICAgICAK
ICAgICAgICAgLy8gU3VidHJhY3Qgb3V0IGFueSBmaXhlZCBtYXJnaW5zIGZyb20gb3VyIGF2YWls
YWJsZSB3aWR0aCBmb3IgYXV0byB3aWR0aCB0YWJsZXMuCiAgICAgICAgIGludCBtYXJnaW5Ub3Rh
bCA9IDA7CkBAIC0yMzcsMTAgKzIzNywxMCBAQCB2b2lkIFJlbmRlclRhYmxlOjpjYWxjV2lkdGgo
KQogICAgICAgICBpbnQgYXZhaWxDb250ZW50V2lkdGggPSBtYXgoMCwgYXZhaWxhYmxlV2lkdGgg
LSBtYXJnaW5Ub3RhbCk7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgd2UgYXJlbid0IGJp
Z2dlciB0aGFuIG91ciBtYXggd2lkdGggb3Igc21hbGxlciB0aGFuIG91ciBtaW4gd2lkdGguCi0g
ICAgICAgIG1fd2lkdGggPSBtaW4oYXZhaWxDb250ZW50V2lkdGgsIG1heFByZWZXaWR0aCgpKTsK
KyAgICAgICAgc2V0V2lkdGgobWluKGF2YWlsQ29udGVudFdpZHRoLCBtYXhQcmVmV2lkdGgoKSkp
OwogICAgIH0KICAgICAKLSAgICBtX3dpZHRoID0gbWF4KG1fd2lkdGgsIG1pblByZWZXaWR0aCgp
KTsKKyAgICBzZXRXaWR0aChtYXgod2lkdGgoKSwgbWluUHJlZldpZHRoKCkpKTsKIAogICAgIC8v
IEZpbmFsbHksIHdpdGggb3VyIHRydWUgd2lkdGggZGV0ZXJtaW5lZCwgY29tcHV0ZSBvdXIgbWFy
Z2lucyBmb3IgcmVhbC4KICAgICBtX21hcmdpblJpZ2h0ID0gMDsKQEAgLTI2NSwyNCArMjY1LDI0
IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgICAgIG9sZE91dGxpbmVCb3ggPSBh
YnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsKICAgICB9CiAgICAgCi0gICAgTGF5b3V0U3RhdGVNYWlu
dGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZShtX3gsIG1feSkpOworICAg
IExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUo
eCgpLCBtX2ZyYW1lUmVjdC55KCkpKTsKIAotICAgIG1faGVpZ2h0ID0gMDsKKyAgICBzZXRIZWln
aHQoMCk7CiAgICAgbV9vdmVyZmxvd0hlaWdodCA9IDA7CiAgICAgbV9vdmVyZmxvd1RvcCA9IDA7
CiAgICAgaW5pdE1heE1hcmdpblZhbHVlcygpOwogICAgIAotICAgIGludCBvbGRXaWR0aCA9IG1f
d2lkdGg7CisgICAgaW50IG9sZFdpZHRoID0gd2lkdGgoKTsKICAgICBjYWxjV2lkdGgoKTsKIAot
ICAgIGlmIChtX2NhcHRpb24gJiYgbV93aWR0aCAhPSBvbGRXaWR0aCkKKyAgICBpZiAobV9jYXB0
aW9uICYmIHdpZHRoKCkgIT0gb2xkV2lkdGgpCiAgICAgICAgIG1fY2FwdGlvbi0+c2V0TmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOwogCiAgICAgLy8gRklYTUU6IFRoZSBvcHRpbWlzYXRpb24gYmVs
b3cgZG9lc24ndCB3b3JrIHNpbmNlIHRoZSBpbnRlcm5hbCB0YWJsZQogICAgIC8vIGxheW91dCBj
b3VsZCBoYXZlIGNoYW5nZWQuICB3ZSBuZWVkIHRvIGFkZCBhIGZsYWcgdG8gdGhlIHRhYmxlCiAg
ICAgLy8gbGF5b3V0IHRoYXQgdGVsbHMgdXMgaWYgc29tZXRoaW5nIGhhcyBjaGFuZ2VkIGluIHRo
ZSBtaW4gbWF4CiAgICAgLy8gY2FsY3VsYXRpb25zIHRvIGRvIGl0IGNvcnJlY3RseS4KLS8vICAg
ICBpZiAoIG9sZFdpZHRoICE9IG1fd2lkdGggfHwgY29sdW1ucy5zaXplKCkgKyAxICE9IGNvbHVt
blBvcy5zaXplKCkgKQorLy8gICAgIGlmICggb2xkV2lkdGggIT0gd2lkdGgoKSB8fCBjb2x1bW5z
LnNpemUoKSArIDEgIT0gY29sdW1uUG9zLnNpemUoKSApCiAgICAgbV90YWJsZUxheW91dC0+bGF5
b3V0KCk7CiAKICAgICBzZXRDZWxsV2lkdGhzKCk7CkBAIC0zMDUsNyArMzA1LDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fb3ZlcmZsb3dX
aWR0aCA9IG1fd2lkdGggKyAoY29sbGFwc2luZyA/IG91dGVyQm9yZGVyUmlnaHQoKSAtIGJvcmRl
clJpZ2h0KCkgOiAwKTsKKyAgICBtX292ZXJmbG93V2lkdGggPSB3aWR0aCgpICsgKGNvbGxhcHNp
bmcgPyBvdXRlckJvcmRlclJpZ2h0KCkgLSBib3JkZXJSaWdodCgpIDogMCk7CiAgICAgbV9vdmVy
Zmxvd0xlZnQgPSBjb2xsYXBzaW5nID8gYm9yZGVyTGVmdCgpIC0gb3V0ZXJCb3JkZXJMZWZ0KCkg
OiAwOwogCiAgICAgLy8gSWYgYW55IHRhYmxlIHNlY3Rpb24gbW92ZWQgdmVydGljYWxseSwgd2Ug
d2lsbCBqdXN0IHJlcGFpbnQgZXZlcnl0aGluZyBmcm9tIHRoYXQKQEAgLTMxNiwyOCArMzE2LDI4
IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAKICAgICAvLyBGSVhNRTogQ29sbGFwc2Ug
Y2FwdGlvbiBtYXJnaW4uCiAgICAgaWYgKG1fY2FwdGlvbiAmJiBtX2NhcHRpb24tPnN0eWxlKCkt
PmNhcHRpb25TaWRlKCkgIT0gQ0FQQk9UVE9NKSB7Ci0gICAgICAgIEludFJlY3QgY2FwdGlvblJl
Y3QobV9jYXB0aW9uLT54UG9zKCksIG1fY2FwdGlvbi0+eVBvcygpLCBtX2NhcHRpb24tPndpZHRo
KCksIG1fY2FwdGlvbi0+aGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IGNhcHRpb25SZWN0KG1f
Y2FwdGlvbi0+eCgpLCBtX2NhcHRpb24tPnkoKSwgbV9jYXB0aW9uLT53aWR0aCgpLCBtX2NhcHRp
b24tPmhlaWdodCgpKTsKIAotICAgICAgICBtX2NhcHRpb24tPnNldFBvcyhtX2NhcHRpb24tPm1h
cmdpbkxlZnQoKSwgbV9oZWlnaHQpOworICAgICAgICBtX2NhcHRpb24tPnNldExvY2F0aW9uKG1f
Y2FwdGlvbi0+bWFyZ2luTGVmdCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIGlmICghc2VsZk5lZWRz
TGF5b3V0KCkgJiYgbV9jYXB0aW9uLT5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkKICAg
ICAgICAgICAgIG1fY2FwdGlvbi0+cmVwYWludER1cmluZ0xheW91dElmTW92ZWQoY2FwdGlvblJl
Y3QpOwogCi0gICAgICAgIG1faGVpZ2h0ICs9IG1fY2FwdGlvbi0+aGVpZ2h0KCkgKyBtX2NhcHRp
b24tPm1hcmdpblRvcCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Cb3R0b20oKTsKLSAgICAgICAgbV9v
dmVyZmxvd0xlZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIG1fY2FwdGlvbi0+eFBvcygpICsgbV9j
YXB0aW9uLT5vdmVyZmxvd0xlZnQoZmFsc2UpKTsKLSAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0g
bWF4KG1fb3ZlcmZsb3dXaWR0aCwgbV9jYXB0aW9uLT54UG9zKCkgKyBtX2NhcHRpb24tPm92ZXJm
bG93V2lkdGgoZmFsc2UpKTsKLSAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93
VG9wLCBtX2NhcHRpb24tPnlQb3MoKSArIG1fY2FwdGlvbi0+b3ZlcmZsb3dUb3AoZmFsc2UpKTsK
LSAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBtX2NhcHRp
b24tPnlQb3MoKSArIG1fY2FwdGlvbi0+b3ZlcmZsb3dIZWlnaHQoZmFsc2UpKTsKKyAgICAgICAg
c2V0SGVpZ2h0KGhlaWdodCgpICsgbV9jYXB0aW9uLT5oZWlnaHQoKSArIG1fY2FwdGlvbi0+bWFy
Z2luVG9wKCkgKyBtX2NhcHRpb24tPm1hcmdpbkJvdHRvbSgpKTsKKyAgICAgICAgbV9vdmVyZmxv
d0xlZnQgPSBtaW4obV9vdmVyZmxvd0xlZnQsIG1fY2FwdGlvbi0+eCgpICsgbV9jYXB0aW9uLT5v
dmVyZmxvd0xlZnQoZmFsc2UpKTsKKyAgICAgICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3Zl
cmZsb3dXaWR0aCwgbV9jYXB0aW9uLT54KCkgKyBtX2NhcHRpb24tPm92ZXJmbG93V2lkdGgoZmFs
c2UpKTsKKyAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9wLCBtX2NhcHRp
b24tPnkoKSArIG1fY2FwdGlvbi0+b3ZlcmZsb3dUb3AoZmFsc2UpKTsKKyAgICAgICAgbV9vdmVy
Zmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBtX2NhcHRpb24tPnkoKSArIG1fY2Fw
dGlvbi0+b3ZlcmZsb3dIZWlnaHQoZmFsc2UpKTsKIAotICAgICAgICBpZiAobV9oZWlnaHQgIT0g
b2xkVGFibGVUb3ApIHsKKyAgICAgICAgaWYgKGhlaWdodCgpICE9IG9sZFRhYmxlVG9wKSB7CiAg
ICAgICAgICAgICBzZWN0aW9uTW92ZWQgPSB0cnVlOwotICAgICAgICAgICAgbW92ZWRTZWN0aW9u
VG9wID0gbWluKG1faGVpZ2h0LCBvbGRUYWJsZVRvcCk7CisgICAgICAgICAgICBtb3ZlZFNlY3Rp
b25Ub3AgPSBtaW4oaGVpZ2h0KCksIG9sZFRhYmxlVG9wKTsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIGludCBicFRvcCA9IGJvcmRlclRvcCgpICsgKGNvbGxhcHNpbmcgPyAwIDogcGFkZGluZ1Rv
cCgpKTsKICAgICBpbnQgYnBCb3R0b20gPSBib3JkZXJCb3R0b20oKSArIChjb2xsYXBzaW5nID8g
MCA6IHBhZGRpbmdCb3R0b20oKSk7CiAgICAgCi0gICAgbV9oZWlnaHQgKz0gYnBUb3A7CisgICAg
c2V0SGVpZ2h0KGhlaWdodCgpICsgYnBUb3ApOwogCiAgICAgaWYgKCFpc1Bvc2l0aW9uZWQoKSkK
ICAgICAgICAgY2FsY0hlaWdodCgpOwpAQCAtMzYxLDcgKzM2MSw3IEBAIHZvaWQgUmVuZGVyVGFi
bGU6OmxheW91dCgpCiAgICAgaWYgKCFtX2ZpcnN0Qm9keSAmJiB0aCA+IGNhbGN1bGF0ZWRIZWln
aHQgJiYgIXN0eWxlKCktPmh0bWxIYWNrcygpKSB7CiAgICAgICAgIC8vIENvbXBsZXRlbHkgZW1w
dHkgdGFibGVzICh3aXRoIG5vIHNlY3Rpb25zIG9yIGFueXRoaW5nKSBzaG91bGQgYXQgbGVhc3Qg
aG9ub3Igc3BlY2lmaWVkIGhlaWdodAogICAgICAgICAvLyBpbiBzdHJpY3QgbW9kZS4KLSAgICAg
ICAgbV9oZWlnaHQgKz0gdGg7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIHRoKTsKICAg
ICB9CiAgICAgCiAgICAgaW50IGJsID0gYm9yZGVyTGVmdCgpOwpAQCAtMzcxLDM4ICszNzEsMzgg
QEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAvLyBwb3NpdGlvbiB0aGUgdGFibGUg
c2VjdGlvbnMKICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBtX2hlYWQgPyBtX2hl
YWQgOiAobV9maXJzdEJvZHkgPyBtX2ZpcnN0Qm9keSA6IG1fZm9vdCk7CiAgICAgd2hpbGUgKHNl
Y3Rpb24pIHsKLSAgICAgICAgaWYgKCFzZWN0aW9uTW92ZWQgJiYgc2VjdGlvbi0+eVBvcygpICE9
IG1faGVpZ2h0KSB7CisgICAgICAgIGlmICghc2VjdGlvbk1vdmVkICYmIHNlY3Rpb24tPnkoKSAh
PSBoZWlnaHQoKSkgewogICAgICAgICAgICAgc2VjdGlvbk1vdmVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG1vdmVkU2VjdGlvblRvcCA9IG1pbihtX2hlaWdodCwgc2VjdGlvbi0+eVBvcygpKSArIHNl
Y3Rpb24tPm92ZXJmbG93VG9wKGZhbHNlKTsKKyAgICAgICAgICAgIG1vdmVkU2VjdGlvblRvcCA9
IG1pbihoZWlnaHQoKSwgc2VjdGlvbi0+eSgpKSArIHNlY3Rpb24tPm92ZXJmbG93VG9wKGZhbHNl
KTsKICAgICAgICAgfQotICAgICAgICBzZWN0aW9uLT5zZXRQb3MoYmwsIG1faGVpZ2h0KTsKKyAg
ICAgICAgc2VjdGlvbi0+c2V0TG9jYXRpb24oYmwsIGhlaWdodCgpKTsKIAotICAgICAgICBtX2hl
aWdodCArPSBzZWN0aW9uLT5oZWlnaHQoKTsKLSAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4o
bV9vdmVyZmxvd0xlZnQsIHNlY3Rpb24tPnhQb3MoKSArIHNlY3Rpb24tPm92ZXJmbG93TGVmdChm
YWxzZSkpOwotICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgobV9vdmVyZmxvd1dpZHRoLCBz
ZWN0aW9uLT54UG9zKCkgKyBzZWN0aW9uLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSk7Ci0gICAgICAg
IG1fb3ZlcmZsb3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgc2VjdGlvbi0+eVBvcygpICsgc2Vj
dGlvbi0+b3ZlcmZsb3dUb3AoZmFsc2UpKTsKLSAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1h
eChtX292ZXJmbG93SGVpZ2h0LCBzZWN0aW9uLT55UG9zKCkgKyBzZWN0aW9uLT5vdmVyZmxvd0hl
aWdodChmYWxzZSkpOworICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBzZWN0aW9uLT5oZWln
aHQoKSk7CisgICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1fb3ZlcmZsb3dMZWZ0LCBzZWN0
aW9uLT54KCkgKyBzZWN0aW9uLT5vdmVyZmxvd0xlZnQoZmFsc2UpKTsKKyAgICAgICAgbV9vdmVy
Zmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgc2VjdGlvbi0+eCgpICsgc2VjdGlvbi0+
b3ZlcmZsb3dXaWR0aChmYWxzZSkpOworICAgICAgICBtX292ZXJmbG93VG9wID0gbWluKG1fb3Zl
cmZsb3dUb3AsIHNlY3Rpb24tPnkoKSArIHNlY3Rpb24tPm92ZXJmbG93VG9wKGZhbHNlKSk7Cisg
ICAgICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgc2VjdGlvbi0+
eSgpICsgc2VjdGlvbi0+b3ZlcmZsb3dIZWlnaHQoZmFsc2UpKTsKICAgICAgICAgc2VjdGlvbiA9
IHNlY3Rpb25CZWxvdyhzZWN0aW9uKTsKICAgICB9CiAKLSAgICBtX2hlaWdodCArPSBicEJvdHRv
bTsKKyAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBicEJvdHRvbSk7CiAKICAgICBpZiAobV9jYXB0
aW9uICYmIG1fY2FwdGlvbi0+c3R5bGUoKS0+Y2FwdGlvblNpZGUoKSA9PSBDQVBCT1RUT00pIHsK
LSAgICAgICAgSW50UmVjdCBjYXB0aW9uUmVjdChtX2NhcHRpb24tPnhQb3MoKSwgbV9jYXB0aW9u
LT55UG9zKCksIG1fY2FwdGlvbi0+d2lkdGgoKSwgbV9jYXB0aW9uLT5oZWlnaHQoKSk7CisgICAg
ICAgIEludFJlY3QgY2FwdGlvblJlY3QobV9jYXB0aW9uLT54KCksIG1fY2FwdGlvbi0+eSgpLCBt
X2NhcHRpb24tPndpZHRoKCksIG1fY2FwdGlvbi0+aGVpZ2h0KCkpOwogCi0gICAgICAgIG1fY2Fw
dGlvbi0+c2V0UG9zKG1fY2FwdGlvbi0+bWFyZ2luTGVmdCgpLCBtX2hlaWdodCk7CisgICAgICAg
IG1fY2FwdGlvbi0+c2V0TG9jYXRpb24obV9jYXB0aW9uLT5tYXJnaW5MZWZ0KCksIGhlaWdodCgp
KTsKICAgICAgICAgaWYgKCFzZWxmTmVlZHNMYXlvdXQoKSAmJiBtX2NhcHRpb24tPmNoZWNrRm9y
UmVwYWludER1cmluZ0xheW91dCgpKQogICAgICAgICAgICAgbV9jYXB0aW9uLT5yZXBhaW50RHVy
aW5nTGF5b3V0SWZNb3ZlZChjYXB0aW9uUmVjdCk7CiAKLSAgICAgICAgbV9oZWlnaHQgKz0gbV9j
YXB0aW9uLT5oZWlnaHQoKSArIG1fY2FwdGlvbi0+bWFyZ2luVG9wKCkgKyBtX2NhcHRpb24tPm1h
cmdpbkJvdHRvbSgpOwotICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1pbihtX292ZXJmbG93TGVm
dCwgbV9jYXB0aW9uLT54UG9zKCkgKyBtX2NhcHRpb24tPm92ZXJmbG93TGVmdChmYWxzZSkpOwot
ICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgobV9vdmVyZmxvd1dpZHRoLCBtX2NhcHRpb24t
PnhQb3MoKSArIG1fY2FwdGlvbi0+b3ZlcmZsb3dXaWR0aChmYWxzZSkpOworICAgICAgICBzZXRI
ZWlnaHQoaGVpZ2h0KCkgKyBtX2NhcHRpb24tPmhlaWdodCgpICsgbV9jYXB0aW9uLT5tYXJnaW5U
b3AoKSArIG1fY2FwdGlvbi0+bWFyZ2luQm90dG9tKCkpOworICAgICAgICBtX292ZXJmbG93TGVm
dCA9IG1pbihtX292ZXJmbG93TGVmdCwgbV9jYXB0aW9uLT54KCkgKyBtX2NhcHRpb24tPm92ZXJm
bG93TGVmdChmYWxzZSkpOworICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgobV9vdmVyZmxv
d1dpZHRoLCBtX2NhcHRpb24tPngoKSArIG1fY2FwdGlvbi0+b3ZlcmZsb3dXaWR0aChmYWxzZSkp
OwogICAgIH0KIAogICAgIGlmIChpc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgY2FsY0hlaWdodCgp
OwogCi0gICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBtX2hlaWdo
dCk7CisgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCBoZWlnaHQo
KSk7CiAKICAgICAvLyB0YWJsZSBjYW4gYmUgY29udGFpbmluZyBibG9jayBvZiBwb3NpdGlvbmVk
IGVsZW1lbnRzLgogICAgIC8vIEZJWE1FOiBPbmx5IHBhc3MgdHJ1ZSBpZiB3aWR0aCBvciBoZWln
aHQgY2hhbmdlZC4KQEAgLTQxMSw5ICs0MTEsOSBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQo
KQogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpIHsKICAgICAgICAgZm9yIChTaGFkb3dEYXRh
KiBib3hTaGFkb3cgPSBzdHlsZSgpLT5ib3hTaGFkb3coKTsgYm94U2hhZG93OyBib3hTaGFkb3cg
PSBib3hTaGFkb3ctPm5leHQpIHsKICAgICAgICAgICAgIG1fb3ZlcmZsb3dMZWZ0ID0gbWluKG1f
b3ZlcmZsb3dMZWZ0LCBib3hTaGFkb3ctPnggLSBib3hTaGFkb3ctPmJsdXIpOwotICAgICAgICAg
ICAgbV9vdmVyZmxvd1dpZHRoID0gbWF4KG1fb3ZlcmZsb3dXaWR0aCwgbV93aWR0aCArIGJveFNo
YWRvdy0+eCArIGJveFNoYWRvdy0+Ymx1cik7CisgICAgICAgICAgICBtX292ZXJmbG93V2lkdGgg
PSBtYXgobV9vdmVyZmxvd1dpZHRoLCB3aWR0aCgpICsgYm94U2hhZG93LT54ICsgYm94U2hhZG93
LT5ibHVyKTsKICAgICAgICAgICAgIG1fb3ZlcmZsb3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwg
Ym94U2hhZG93LT55IC0gYm94U2hhZG93LT5ibHVyKTsKLSAgICAgICAgICAgIG1fb3ZlcmZsb3dI
ZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgbV9oZWlnaHQgKyBib3hTaGFkb3ctPnkgKyBi
b3hTaGFkb3ctPmJsdXIpOworICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292
ZXJmbG93SGVpZ2h0LCBoZWlnaHQoKSArIGJveFNoYWRvdy0+eSArIGJveFNoYWRvdy0+Ymx1cik7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChoYXNSZWZsZWN0aW9uKCkpIHsKQEAg
LTQ0Nyw4ICs0NDcsOCBAQCB2b2lkIFJlbmRlclRhYmxlOjpzZXRDZWxsV2lkdGhzKCkKIAogdm9p
ZCBSZW5kZXJUYWJsZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5
KQogewotICAgIHR4ICs9IHhQb3MoKTsKLSAgICB0eSArPSB5UG9zKCk7CisgICAgdHggKz0geCgp
OworICAgIHR5ICs9IHkoKTsKIAogICAgIFBhaW50UGhhc2UgcGFpbnRQaGFzZSA9IHBhaW50SW5m
by5waGFzZTsKIApAQCAtMTEyOCw3ICsxMTI4LDcgQEAgaW50IFJlbmRlclRhYmxlOjpnZXRCYXNl
bGluZU9mRmlyc3RMaW5lQgogICAgIGlmICghZmlyc3ROb25FbXB0eVNlY3Rpb24pCiAgICAgICAg
IHJldHVybiAtMTsKIAotICAgIHJldHVybiBmaXJzdE5vbkVtcHR5U2VjdGlvbi0+eVBvcygpICsg
Zmlyc3ROb25FbXB0eVNlY3Rpb24tPmdldEJhc2VsaW5lT2ZGaXJzdExpbmVCb3goKTsKKyAgICBy
ZXR1cm4gZmlyc3ROb25FbXB0eVNlY3Rpb24tPnkoKSArIGZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5n
ZXRCYXNlbGluZU9mRmlyc3RMaW5lQm94KCk7CiB9CiAKIEludFJlY3QgUmVuZGVyVGFibGU6Omdl
dE92ZXJmbG93Q2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDEwICsxMjMsMTAgQEAg
dm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNhbGNXaWR0aCgpCiB7CiB9CiAKLXZvaWQgUmVuZGVyVGFi
bGVDZWxsOjpzZXRXaWR0aChpbnQgd2lkdGgpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6dXBkYXRl
V2lkdGgoaW50IHcpCiB7Ci0gICAgaWYgKHdpZHRoICE9IG1fd2lkdGgpIHsKLSAgICAgICAgbV93
aWR0aCA9IHdpZHRoOworICAgIGlmICh3ICE9IHdpZHRoKCkpIHsKKyAgICAgICAgc2V0V2lkdGgo
dyk7CiAgICAgICAgIG1fd2lkdGhDaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiB9CkBAIC0xOTIsNyAr
MTkyLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVBYnNvbHV0ZVJlcAogICAgIHIu
c2V0WShyLnkoKSArIG1fdG9wRXh0cmEpOwogICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7CiAg
ICAgaWYgKCghdiB8fCAhdi0+bGF5b3V0U3RhdGVFbmFibGVkKCkpICYmIHBhcmVudCgpKQotICAg
ICAgICByLm1vdmUoLXBhcmVudCgpLT54UG9zKCksIC1wYXJlbnQoKS0+eVBvcygpKTsgLy8gUm93
cyBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRoZWlyIG9m
ZnNldCBpbi4KKyAgICAgICAgci5tb3ZlKC1wYXJlbnRCb3goKS0+eCgpLCAtcGFyZW50Qm94KCkt
PnkoKSk7IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0
IGFkZCB0aGVpciBvZmZzZXQgaW4uCiAgICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVBYnNvbHV0ZVJl
cGFpbnRSZWN0KHIsIGZpeGVkKTsKIH0KIApAQCAtMjAxLDcgKzIwMSw3IEBAIEZsb2F0UG9pbnQg
UmVuZGVyVGFibGVDZWxsOjpsb2NhbFRvQWJzb2wKICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygp
OwogICAgIGlmICgoIXYgfHwgIXYtPmxheW91dFN0YXRlRW5hYmxlZCgpKSAmJiBwYXJlbnQoKSkg
ewogICAgICAgICAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyBk
b24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLgotICAgICAgICBsb2NhbFBvaW50Lm1vdmUoLXBhcmVu
dCgpLT54UG9zKCksIC1wYXJlbnQoKS0+eVBvcygpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3Zl
KC1wYXJlbnRCb3goKS0+eCgpLCAtcGFyZW50Qm94KCktPnkoKSk7CiAgICAgfQogICAgIHJldHVy
biBSZW5kZXJCbG9jazo6bG9jYWxUb0Fic29sdXRlKGxvY2FsUG9pbnQsIGZpeGVkLCB1c2VUcmFu
c2Zvcm1zKTsKIH0KQEAgLTIxMSw3ICsyMTEsNyBAQCBGbG9hdFBvaW50IFJlbmRlclRhYmxlQ2Vs
bDo6YWJzb2x1dGVUb0xvCiAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gUmVuZGVyQmxvY2s6
OmFic29sdXRlVG9Mb2NhbChjb250YWluZXJQb2ludCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMpOwog
ICAgIGlmIChwYXJlbnQoKSkgewogICAgICAgICAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBjb29y
ZGluYXRlIHNwYWNlLCBzbyBhZGQgdGhlaXIgb2Zmc2V0IGJhY2sgaW4uCi0gICAgICAgIGxvY2Fs
UG9pbnQubW92ZShwYXJlbnQoKS0+eFBvcygpLCBwYXJlbnQoKS0+eVBvcygpKTsKKyAgICAgICAg
bG9jYWxQb2ludC5tb3ZlKHBhcmVudEJveCgpLT54KCksIHBhcmVudEJveCgpLT55KCkpOwogICAg
IH0KICAgICByZXR1cm4gbG9jYWxQb2ludDsKIH0KQEAgLTIyMSw3ICsyMjEsNyBAQCBGbG9hdFF1
YWQgUmVuZGVyVGFibGVDZWxsOjpsb2NhbFRvQWJzb2x1CiAgICAgRmxvYXRRdWFkIHF1YWQgPSBs
b2NhbFF1YWQ7CiAgICAgaWYgKHBhcmVudCgpKSB7CiAgICAgICAgIC8vIFJvd3MgYXJlIGluIHRo
ZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCi0g
ICAgICAgIHF1YWQubW92ZSgtcGFyZW50KCktPnhQb3MoKSwgLXBhcmVudCgpLT55UG9zKCkpOwor
ICAgICAgICBxdWFkLm1vdmUoLXBhcmVudEJveCgpLT54KCksIC1wYXJlbnRCb3goKS0+eSgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpsb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWQs
IGZpeGVkKTsKIH0KQEAgLTYzMCwxNSArNjMwLDE1IEBAIGludCBSZW5kZXJUYWJsZUNlbGw6OmJv
cmRlckhhbGZCb3R0b20oYm8KIAogdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICB0eCArPSBtX3g7Ci0gICAgdHkg
Kz0gbV95OworICAgIHR4ICs9IHgoKTsKKyAgICB0eSArPSBtX2ZyYW1lUmVjdC55KCk7CiAKICAg
ICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4uLgogICAgIGludCBv
cyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKTsKIAogICAgIGlmIChw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNvbGxhcHNlZFRhYmxlQm9yZGVycyAmJiBzdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkgewogICAgICAgICBpZiAodHkgLSB0YWJsZSgp
LT5vdXRlckJvcmRlclRvcCgpID49IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpICsgb3MgfHwKLSAg
ICAgICAgICAgICAgICB0eSArIG1fdG9wRXh0cmEgKyBtX2hlaWdodCArIG1fYm90dG9tRXh0cmEg
KyB0YWJsZSgpLT5vdXRlckJvcmRlckJvdHRvbSgpIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9z
KQorICAgICAgICAgICAgICAgIHR5ICsgbV90b3BFeHRyYSArIGhlaWdodCgpICsgbV9ib3R0b21F
eHRyYSArIHRhYmxlKCktPm91dGVyQm9yZGVyQm90dG9tKCkgPD0gcGFpbnRJbmZvLnJlY3QueSgp
IC0gb3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGludCB3ID0gd2lkdGgoKTsKICAg
ICAgICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21F
eHRyYSgpOwpAQCAtODA3LDggKzgwNyw4IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludEJh
Y2tncm91bmRzQmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGJhY2tncm91bmRPYmplY3Qg
IT0gdGhpcykgewotICAgICAgICB0eCArPSBtX3g7Ci0gICAgICAgIHR5ICs9IG1feSArIG1fdG9w
RXh0cmE7CisgICAgICAgIHR4ICs9IHgoKTsKKyAgICAgICAgdHkgKz0gbV9mcmFtZVJlY3QueSgp
ICsgbV90b3BFeHRyYTsKICAgICB9CiAKICAgICBpbnQgdyA9IHdpZHRoKCk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKICAgICB2aXJ0
dWFsIHZvaWQgY2FsY1dpZHRoKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFdpZHRoKGludCk7Cisg
ICAgdm9pZCB1cGRhdGVXaWR0aChpbnQpOwogCiAgICAgdmlydHVhbCBib29sIGV4cGFuZHNUb0Vu
Y2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApAQCAtOTYs
OSArOTYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludENvbGxhcHNlZEJvcmRlcihHcmFwaGlj
c0NvbnRleHQqLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7CiAgICAgdm9pZCBwYWludEJh
Y2tncm91bmRzQmVoaW5kQ2VsbChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgUmVuZGVyT2Jq
ZWN0KiBiYWNrZ3JvdW5kT2JqZWN0KTsKIAotICAgIC8vIExpZSBhYm91dCBwb3NpdGlvbiB0byBv
dXRzaWRlIG9ic2VydmVycy4KLSAgICB2aXJ0dWFsIGludCB5UG9zKCkgY29uc3QgeyByZXR1cm4g
bV95ICsgbV90b3BFeHRyYTsgfQotCiAgICAgdmlydHVhbCBJbnRSZWN0IGFic29sdXRlQ2xpcHBl
ZE92ZXJmbG93UmVjdCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlQWJzb2x1dGVSZXBhaW50
UmVjdChJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIEZsb2F0UG9p
bnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwg
Ym9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CkBA
IC0xMjQsNyArMTIxLDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9jb2x1bW5TcGFuOwogICAgIGlu
dCBtX3RvcEV4dHJhIDogMzE7CiAgICAgaW50IG1fYm90dG9tRXh0cmEgOiAzMTsKLSAgICBib29s
IG1fd2lkdGhDaGFuZ2VkIDogMTsKKyAgICBib29sIG1fd2lkdGhDaGFuZ2VkOiAxOwogICAgIGlu
dCBtX3BlcmNlbnRhZ2VIZWlnaHQ7CiB9OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBA
IHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXIKICAgICBpZiAoIWVuc3Vy
ZVJvd3MobV9jUm93ICsgMSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZ3JpZFttX2NSb3dd
LnJvd1JlbmRlcmVyID0gY2hpbGQ7CisgICAgbV9ncmlkW21fY1Jvd10ucm93UmVuZGVyZXIgPSBz
dGF0aWNfY2FzdDxSZW5kZXJUYWJsZVJvdyo+KGNoaWxkKTsKIAogICAgIGlmICghYmVmb3JlQ2hp
bGQpIHsKICAgICAgICAgbV9ncmlkW21fY1Jvd10uaGVpZ2h0ID0gY2hpbGQtPnN0eWxlKCktPmhl
aWdodCgpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1
cmVSb3dzKGludCAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rp
b246OmFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBSZW5kZXJPYmplY3QqIHJvdykKK3Zv
aWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUmVu
ZGVyVGFibGVSb3cqIHJvdykKIHsKICAgICBpbnQgclNwYW4gPSBjZWxsLT5yb3dTcGFuKCk7CiAg
ICAgaW50IGNTcGFuID0gY2VsbC0+Y29sU3BhbigpOwpAQCAtMjgzLDExICsyODMsMTEgQEAgdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNldENlbGxXaWR0aHMoKQogICAgICAgICAgICAgICAgICAg
ICBpZiAoIXN0YXRlUHVzaGVyLmRpZFB1c2goKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGVjaG5pY2FsbHksIHdlIHNob3VsZCBhbHNvIHB1c2ggc3RhdGUgZm9yIHRoZSByb3csIGJ1
dCBzaW5jZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm93cyBkb24ndCBwdXNoIGEgY29v
cmRpbmF0ZSB0cmFuc2Zvcm0sIHRoYXQncyBub3QgbmVjZXNzYXJ5LgotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGVQdXNoZXIucHVzaCh0aGlzLCBJbnRTaXplKG1feCwgbV95KSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZVB1c2hlci5wdXNoKHRoaXMsIEludFNpemUoeCgpLCBt
X2ZyYW1lUmVjdC55KCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICBjZWxsLT5yZXBhaW50KCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGNlbGwtPnNldFdpZHRoKHcpOworICAgICAgICAgICAgICAgIGNlbGwtPnVwZGF0ZVdpZHRoKHcp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzMzLDcgKzMzMyw3IEBAIGlu
dCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dIZWlnaHQoKQogICAgICAgICAgICAgICAgIGlm
ICghc3RhdGVQdXNoZXIuZGlkUHVzaCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRlY2hu
aWNhbGx5LCB3ZSBzaG91bGQgYWxzbyBwdXNoIHN0YXRlIGZvciB0aGUgcm93LCBidXQgc2luY2UK
ICAgICAgICAgICAgICAgICAgICAgLy8gcm93cyBkb24ndCBwdXNoIGEgY29vcmRpbmF0ZSB0cmFu
c2Zvcm0sIHRoYXQncyBub3QgbmVjZXNzYXJ5LgotICAgICAgICAgICAgICAgICAgICBzdGF0ZVB1
c2hlci5wdXNoKHRoaXMsIEludFNpemUobV94LCBtX3kpKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RhdGVQdXNoZXIucHVzaCh0aGlzLCBJbnRTaXplKHgoKSwgbV9mcmFtZVJlY3QueSgpKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNlbGwtPnNldE92ZXJyaWRlU2l6ZSgt
MSk7CiAgICAgICAgICAgICAgICAgY2VsbC0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxz
ZSk7CkBAIC0zODQsOSArMzg0LDkgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93
cyhpbnQgdAogICAgIGludCB0b3RhbFJvd3MgPSBtX2dyaWRSb3dzOwogICAgIAogICAgIC8vIFNl
dCB0aGUgd2lkdGggb2Ygb3VyIHNlY3Rpb24gbm93LiAgVGhlIHJvd3Mgd2lsbCBhbHNvIGJlIHRo
aXMgd2lkdGguCi0gICAgbV93aWR0aCA9IHRhYmxlKCktPmNvbnRlbnRXaWR0aCgpOworICAgIHNl
dFdpZHRoKHRhYmxlKCktPmNvbnRlbnRXaWR0aCgpKTsKICAgICBtX292ZXJmbG93TGVmdCA9IDA7
Ci0gICAgbV9vdmVyZmxvd1dpZHRoID0gbV93aWR0aDsKKyAgICBtX292ZXJmbG93V2lkdGggPSB3
aWR0aCgpOwogICAgIG1fb3ZlcmZsb3dUb3AgPSAwOwogICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSAw
OwogICAgIG1faGFzT3ZlcmZsb3dpbmdDZWxsID0gZmFsc2U7CkBAIC00NTQsMTMgKzQ1NCwxMyBA
QCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKGludCB0CiAgICAgaW50IHZzcGFj
aW5nID0gdGFibGUoKS0+dkJvcmRlclNwYWNpbmcoKTsKICAgICBpbnQgbkVmZkNvbHMgPSB0YWJs
ZSgpLT5udW1FZmZDb2xzKCk7CiAKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNo
ZXIodmlldygpLCB0aGlzLCBJbnRTaXplKG1feCwgbV95KSk7CisgICAgTGF5b3V0U3RhdGVNYWlu
dGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIG1fZnJhbWVSZWN0
LnkoKSkpOwogCiAgICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAg
ICAgICAvLyBTZXQgdGhlIHJvdydzIHgveSBwb3NpdGlvbiBhbmQgd2lkdGgvaGVpZ2h0LgotICAg
ICAgICBpZiAoUmVuZGVyT2JqZWN0KiByb3dSZW5kZXJlciA9IG1fZ3JpZFtyXS5yb3dSZW5kZXJl
cikgewotICAgICAgICAgICAgcm93UmVuZGVyZXItPnNldFBvcygwLCBtX3Jvd1Bvc1tyXSk7Ci0g
ICAgICAgICAgICByb3dSZW5kZXJlci0+c2V0V2lkdGgobV93aWR0aCk7CisgICAgICAgIGlmIChS
ZW5kZXJUYWJsZVJvdyogcm93UmVuZGVyZXIgPSBtX2dyaWRbcl0ucm93UmVuZGVyZXIpIHsKKyAg
ICAgICAgICAgIHJvd1JlbmRlcmVyLT5zZXRMb2NhdGlvbigwLCBtX3Jvd1Bvc1tyXSk7CisgICAg
ICAgICAgICByb3dSZW5kZXJlci0+c2V0V2lkdGgod2lkdGgoKSk7CiAgICAgICAgICAgICByb3dS
ZW5kZXJlci0+c2V0SGVpZ2h0KG1fcm93UG9zW3IgKyAxXSAtIG1fcm93UG9zW3JdIC0gdnNwYWNp
bmcpOwogICAgICAgICB9CiAKQEAgLTU1MiwxNyArNTUyLDE3IEBAIGludCBSZW5kZXJUYWJsZVNl
Y3Rpb246OmxheW91dFJvd3MoaW50IHQKICAgICAgICAgICAgIGlmICgodGUgIT0gb2xkVGUgfHwg
YmUgPiBvbGRCZSkgJiYgIXRhYmxlKCktPnNlbGZOZWVkc0xheW91dCgpICYmIGNlbGwtPmNoZWNr
Rm9yUmVwYWludER1cmluZ0xheW91dCgpKQogICAgICAgICAgICAgICAgIGNlbGwtPnJlcGFpbnQo
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgSW50UmVjdCBvbGRDZWxsUmVjdChjZWxsLT54
UG9zKCksIGNlbGwtPnlQb3MoKSAtIGNlbGwtPmJvcmRlclRvcEV4dHJhKCkgLCBjZWxsLT53aWR0
aCgpLCBjZWxsLT5oZWlnaHQoKSk7CisgICAgICAgICAgICBJbnRSZWN0IG9sZENlbGxSZWN0KGNl
bGwtPngoKSwgY2VsbC0+eSgpIC0gY2VsbC0+Ym9yZGVyVG9wRXh0cmEoKSAsIGNlbGwtPndpZHRo
KCksIGNlbGwtPmhlaWdodCgpKTsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gUlRMKSB7Ci0gICAgICAgICAgICAgICAgY2VsbC0+c2V0UG9zKHRhYmxl
KCktPmNvbHVtblBvc2l0aW9ucygpW25FZmZDb2xzXSAtIHRhYmxlKCktPmNvbHVtblBvc2l0aW9u
cygpW3RhYmxlKCktPmNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpICsgY2VsbC0+Y29sU3BhbigpKV0g
KyBoc3BhY2luZywgbV9yb3dQb3NbcmluZHhdKTsKKyAgICAgICAgICAgICAgICBjZWxsLT5zZXRM
b2NhdGlvbih0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKVtuRWZmQ29sc10gLSB0YWJsZSgpLT5j
b2x1bW5Qb3NpdGlvbnMoKVt0YWJsZSgpLT5jb2xUb0VmZkNvbChjZWxsLT5jb2woKSArIGNlbGwt
PmNvbFNwYW4oKSldICsgaHNwYWNpbmcsIG1fcm93UG9zW3JpbmR4XSk7CiAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICBjZWxsLT5zZXRQb3ModGFibGUoKS0+Y29sdW1uUG9zaXRp
b25zKClbY10gKyBoc3BhY2luZywgbV9yb3dQb3NbcmluZHhdKTsKKyAgICAgICAgICAgICAgICBj
ZWxsLT5zZXRMb2NhdGlvbih0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKVtjXSArIGhzcGFjaW5n
LCBtX3Jvd1Bvc1tyaW5keF0pOwogCi0gICAgICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1pbiht
X292ZXJmbG93TGVmdCwgY2VsbC0+eFBvcygpICsgY2VsbC0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSk7
Ci0gICAgICAgICAgICBtX292ZXJmbG93V2lkdGggPSBtYXgobV9vdmVyZmxvd1dpZHRoLCBjZWxs
LT54UG9zKCkgKyBjZWxsLT5vdmVyZmxvd1dpZHRoKGZhbHNlKSk7Ci0gICAgICAgICAgICBtX292
ZXJmbG93VG9wID0gbWluKG1fb3ZlcmZsb3dUb3AsIGNlbGwtPnlQb3MoKSArIGNlbGwtPm92ZXJm
bG93VG9wKGZhbHNlKSk7Ci0gICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3Zl
cmZsb3dIZWlnaHQsIGNlbGwtPnlQb3MoKSArIGNlbGwtPm92ZXJmbG93SGVpZ2h0KGZhbHNlKSk7
CisgICAgICAgICAgICBtX292ZXJmbG93TGVmdCA9IG1pbihtX292ZXJmbG93TGVmdCwgY2VsbC0+
eCgpICsgY2VsbC0+b3ZlcmZsb3dMZWZ0KGZhbHNlKSk7CisgICAgICAgICAgICBtX292ZXJmbG93
V2lkdGggPSBtYXgobV9vdmVyZmxvd1dpZHRoLCBjZWxsLT54KCkgKyBjZWxsLT5vdmVyZmxvd1dp
ZHRoKGZhbHNlKSk7CisgICAgICAgICAgICBtX292ZXJmbG93VG9wID0gbWluKG1fb3ZlcmZsb3dU
b3AsIGNlbGwtPnkoKSArIGNlbGwtPm92ZXJmbG93VG9wKGZhbHNlKSk7CisgICAgICAgICAgICBt
X292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQsIGNlbGwtPnkoKSArIGNlbGwt
Pm92ZXJmbG93SGVpZ2h0KGZhbHNlKSk7CiAgICAgICAgICAgICBtX2hhc092ZXJmbG93aW5nQ2Vs
bCB8PSBjZWxsLT5vdmVyZmxvd0xlZnQoZmFsc2UpIHx8IGNlbGwtPm92ZXJmbG93V2lkdGgoZmFs
c2UpID4gY2VsbC0+d2lkdGgoKSB8fCBjZWxsLT5vdmVyZmxvd1RvcChmYWxzZSkgfHwgY2VsbC0+
b3ZlcmZsb3dIZWlnaHQoZmFsc2UpID4gY2VsbC0+aGVpZ2h0KCk7CiAKICAgICAgICAgICAgIC8v
IElmIHRoZSBjZWxsIG1vdmVkLCB3ZSBoYXZlIHRvIHJlcGFpbnQgaXQgYXMgd2VsbCBhcyBhbnkg
ZmxvYXRpbmcvcG9zaXRpb25lZApAQCAtNTc1LDkgKzU3NSw5IEBAIGludCBSZW5kZXJUYWJsZVNl
Y3Rpb246OmxheW91dFJvd3MoaW50IHQKIAogICAgIHN0YXRlUHVzaGVyLnBvcCgpOwogCi0gICAg
bV9oZWlnaHQgPSBtX3Jvd1Bvc1t0b3RhbFJvd3NdOwotICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBt
YXgobV9vdmVyZmxvd0hlaWdodCwgbV9oZWlnaHQpOwotICAgIHJldHVybiBtX2hlaWdodDsKKyAg
ICBzZXRIZWlnaHQobV9yb3dQb3NbdG90YWxSb3dzXSk7CisgICAgbV9vdmVyZmxvd0hlaWdodCA9
IG1heChtX292ZXJmbG93SGVpZ2h0LCBoZWlnaHQoKSk7CisgICAgcmV0dXJuIGhlaWdodCgpOwog
fQogCiBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsb3dlc3RQb3NpdGlvbihib29sIGluY2x1ZGVP
dmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdApAQCAtNTg5LDcgKzU4OSw3
IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246Omxvd2VzdFBvc2l0aW9uKGIKICAgICBmb3IgKFJl
bmRlck9iamVjdCogcm93ID0gZmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGls
ZCgpOyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYg
KGNlbGwtPmlzVGFibGVDZWxsKCkpCi0gICAgICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRv
bSwgY2VsbC0+eVBvcygpICsgY2VsbC0+bG93ZXN0UG9zaXRpb24oZmFsc2UpKTsKKyAgICAgICAg
ICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNlbGwq
PihjZWxsKS0+eSgpICsgY2VsbC0+bG93ZXN0UG9zaXRpb24oZmFsc2UpKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKQEAgLTYwNSw3ICs2MDUsNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpy
aWdodG1vc3RQb3NpdGlvCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHJvdyA9IGZpcnN0Q2hpbGQo
KTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgZm9yIChSZW5kZXJP
YmplY3QqIGNlbGwgPSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRT
aWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjZWxsLT5pc1RhYmxlQ2VsbCgpKQotICAgICAg
ICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBjZWxsLT54UG9zKCkgKyBjZWxsLT5yaWdodG1v
c3RQb3NpdGlvbihmYWxzZSkpOworICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBz
dGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNlbGwqPihjZWxsKS0+eCgpICsgY2VsbC0+cmlnaHRtb3N0
UG9zaXRpb24oZmFsc2UpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTYyMSw3ICs2MjEs
NyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsZWZ0bW9zdFBvc2l0aW9uCiAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIHJvdyA9IGZpcnN0Q2hpbGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNlbGwgPSByb3ctPmZpcnN0Q2hp
bGQoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlm
IChjZWxsLT5pc1RhYmxlQ2VsbCgpKQotICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwg
Y2VsbC0+eFBvcygpICsgY2VsbC0+bGVmdG1vc3RQb3NpdGlvbihmYWxzZSkpOworICAgICAgICAg
ICAgICAgIGxlZnQgPSBtaW4obGVmdCwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oY2Vs
bCktPngoKSArIGNlbGwtPmxlZnRtb3N0UG9zaXRpb24oZmFsc2UpKTsKICAgICAgICAgfQogICAg
IH0KICAgICAKQEAgLTg1MSw3ICs4NTEsNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpnZXRC
YXNlbGluZU9mRmlyCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFJvdy0+c2l6ZSgp
OyArK2kpIHsKICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gZmlyc3RSb3ctPmF0KGkp
LmNlbGw7CiAgICAgICAgIGlmIChjZWxsKQotICAgICAgICAgICAgZmlyc3RMaW5lQmFzZWxpbmUg
PSBtYXgoZmlyc3RMaW5lQmFzZWxpbmUsIGNlbGwtPnlQb3MoKSArIGNlbGwtPnBhZGRpbmdUb3Ao
KSArIGNlbGwtPmJvcmRlclRvcCgpICsgY2VsbC0+Y29udGVudEhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGZpcnN0TGluZUJhc2VsaW5lID0gbWF4KGZpcnN0TGluZUJhc2VsaW5lLCBjZWxsLT55KCkg
KyBjZWxsLT5wYWRkaW5nVG9wKCkgKyBjZWxsLT5ib3JkZXJUb3AoKSArIGNlbGwtPmNvbnRlbnRI
ZWlnaHQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZpcnN0TGluZUJhc2VsaW5lOwpAQCAtODcx
LDggKzg3MSw4IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludChQYWludEluZm8KICAg
ICBpZiAoIXRvdGFsUm93cyB8fCAhdG90YWxDb2xzKQogICAgICAgICByZXR1cm47CiAKLSAgICB0
eCArPSBtX3g7Ci0gICAgdHkgKz0gbV95OworICAgIHR4ICs9IHgoKTsKKyAgICB0eSArPSBtX2Zy
YW1lUmVjdC55KCk7CiAKICAgICAvLyBDaGVjayB3aGljaCByb3dzIGFuZCBjb2xzIGFyZSB2aXNp
YmxlIGFuZCBvbmx5IHBhaW50IHRoZXNlLgogICAgIC8vIEZJWE1FOiBDb3VsZCB1c2UgYSBiaW5h
cnkgc2VhcmNoIGhlcmUuCkBAIC05OTIsMTEgKzk5MiwxMyBAQCB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6cmVjYWxjQ2VsbHMoKQogICAgICAgICAgICAgbV9jQ29sID0gMDsKICAgICAgICAgICAg
IGlmICghZW5zdXJlUm93cyhtX2NSb3cgKyAxKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIG1fZ3JpZFttX2NSb3ddLnJvd1JlbmRlcmVyID0gcm93OworICAgICAgICAgICAg
CisgICAgICAgICAgICBSZW5kZXJUYWJsZVJvdyogdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUYWJsZVJvdyo+KHJvdyk7CisgICAgICAgICAgICBtX2dyaWRbbV9jUm93XS5yb3dSZW5kZXJl
ciA9IHRhYmxlUm93OwogCiAgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJv
dy0+Zmlyc3RDaGlsZCgpOyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgewogICAg
ICAgICAgICAgICAgIGlmIChjZWxsLT5pc1RhYmxlQ2VsbCgpKQotICAgICAgICAgICAgICAgICAg
ICBhZGRDZWxsKHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ2VsbCo+KGNlbGwpLCByb3cpOworICAg
ICAgICAgICAgICAgICAgICBhZGRDZWxsKHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ2VsbCo+KGNl
bGwpLCB0YWJsZVJvdyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDU2
LDIwICsxMDU4LDIwIEBAIFJlbmRlck9iamVjdCogUmVuZGVyVGFibGVTZWN0aW9uOjpyZW1vdmUK
IH0KIAogLy8gSGl0IFRlc3RpbmcKLWJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wg
UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB0eCwg
aW50IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICAvLyBUYWJsZSBzZWN0aW9ucyBj
YW5ub3QgZXZlciBiZSBoaXQgdGVzdGVkLiAgRWZmZWN0aXZlbHkgdGhleSBkbyBub3QgZXhpc3Qu
CiAgICAgLy8gSnVzdCBmb3J3YXJkIHRvIG91ciBjaGlsZHJlbiBhbHdheXMuCi0gICAgdHggKz0g
bV94OwotICAgIHR5ICs9IG1feTsKKyAgICB0eCArPSB4KCk7CisgICAgdHkgKz0gbV9mcmFtZVJl
Y3QueSgpOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAvLyBGSVhN
RTogV2UgaGF2ZSB0byBza2lwIG92ZXIgaW5saW5lIGZsb3dzLCBzaW5jZSB0aGV5IGNhbiBzaG93
IHVwIGluc2lkZSB0YWJsZSByb3dzCiAgICAgICAgIC8vIGF0IHRoZSBtb21lbnQgKGEgZGVtb3Rl
ZCBpbmxpbmUgPGZvcm0+IGZvciBleGFtcGxlKS4gSWYgd2UgZXZlciBpbXBsZW1lbnQgYQogICAg
ICAgICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQtdGVzdCBtZXRob2QgKHdoaWNoIHdlIHNob3VsZCBk
byBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbnl3YXkpLAogICAgICAgICAvLyB0aGVuIHdlIGNh
biByZW1vdmUgdGhpcyBjaGVjay4KLSAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiAh
Y2hpbGQtPmlzSW5saW5lRmxvdygpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHgsIHksIHR4LCB0eSwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CisgICAgICAgIGlmICghY2hp
bGQtPmhhc0xheWVyKCkgJiYgIWNoaWxkLT5pc0lubGluZUZsb3coKSAmJiBjaGlsZC0+bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCB0eCwgdHksIGFjdGlvbikpIHsKKyAg
ICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4UG9zIC0gdHgs
IHlQb3MgLSB0eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkocmV2aXNpb24gNDAw
NzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5k
ZXJUYWJsZUNlbGw7CitjbGFzcyBSZW5kZXJUYWJsZVJvdzsKIAogY2xhc3MgUmVuZGVyVGFibGVT
ZWN0aW9uIDogcHVibGljIFJlbmRlckNvbnRhaW5lciB7CiBwdWJsaWM6CkBAIC00OSw3ICs1MCw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgaW50IGdldEJhc2VsaW5lT2ZGaXJzdExpbmVCb3go
KSBjb25zdDsKIAotICAgIHZvaWQgYWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqLCBSZW5kZXJPYmpl
Y3QqIHJvdyk7CisgICAgdm9pZCBhZGRDZWxsKFJlbmRlclRhYmxlQ2VsbCosIFJlbmRlclRhYmxl
Um93KiByb3cpOwogCiAgICAgdm9pZCBzZXRDZWxsV2lkdGhzKCk7CiAgICAgaW50IGNhbGNSb3dI
ZWlnaHQoKTsKQEAgLTY2LDcgKzY3LDcgQEAgcHVibGljOgogCiAgICAgc3RydWN0IFJvd1N0cnVj
dCB7CiAgICAgICAgIFJvdyogcm93OwotICAgICAgICBSZW5kZXJPYmplY3QqIHJvd1JlbmRlcmVy
OworICAgICAgICBSZW5kZXJUYWJsZVJvdyogcm93UmVuZGVyZXI7CiAgICAgICAgIGludCBiYXNl
bGluZTsKICAgICAgICAgTGVuZ3RoIGhlaWdodDsKICAgICB9OwpAQCAtNzcsOSArNzgsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBhcHBlbmRDb2x1bW4oaW50IHBvcyk7CiAgICAgdm9pZCBzcGxpdENv
bHVtbihpbnQgcG9zLCBpbnQgbmV3U2l6ZSk7CiAKLSAgICB2aXJ0dWFsIGludCBvdmVyZmxvd1dp
ZHRoKGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gKCFpbmNsdWRl
SW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkpID8gbV93aWR0aCA6IG1fb3ZlcmZsb3dXaWR0
aDsgfQorICAgIHZpcnR1YWwgaW50IG92ZXJmbG93V2lkdGgoYm9vbCBpbmNsdWRlSW50ZXJpb3Ig
PSB0cnVlKSBjb25zdCB7IHJldHVybiAoIWluY2x1ZGVJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0Ns
aXAoKSkgPyB3aWR0aCgpIDogbV9vdmVyZmxvd1dpZHRoOyB9CiAgICAgdmlydHVhbCBpbnQgb3Zl
cmZsb3dMZWZ0KGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gKCFp
bmNsdWRlSW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkpID8gMCA6IG1fb3ZlcmZsb3dMZWZ0
OyB9Ci0gICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dIZWlnaHQoYm9vbCBpbmNsdWRlSW50ZXJpb3Ig
PSB0cnVlKSBjb25zdCB7IHJldHVybiAoIWluY2x1ZGVJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0Ns
aXAoKSkgPyBtX2hlaWdodCA6IG1fb3ZlcmZsb3dIZWlnaHQ7IH0KKyAgICB2aXJ0dWFsIGludCBv
dmVyZmxvd0hlaWdodChib29sIGluY2x1ZGVJbnRlcmlvciA9IHRydWUpIGNvbnN0IHsgcmV0dXJu
ICghaW5jbHVkZUludGVyaW9yICYmIGhhc092ZXJmbG93Q2xpcCgpKSA/IGhlaWdodCgpIDogbV9v
dmVyZmxvd0hlaWdodDsgfQogICAgIHZpcnR1YWwgaW50IG92ZXJmbG93VG9wKGJvb2wgaW5jbHVk
ZUludGVyaW9yID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gKCFpbmNsdWRlSW50ZXJpb3IgJiYgaGFz
T3ZlcmZsb3dDbGlwKCkpID8gMCA6IG1fb3ZlcmZsb3dUb3A7IH0KIAogICAgIHZpcnR1YWwgaW50
IGxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGJvb2wgaW5jbHVk
ZVNlbGYpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDQw
MDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDcgKzY2LDcgQEAgUmVuZGVyVGV4dDo6UmVuZGVyVGV4dChOb2RlKiBub2RlLCBQYXNz
UgogICAgICAsIG1faXNBbGxBU0NJSShjaGFyYWN0ZXJzQXJlQWxsQVNDSUkobV90ZXh0LmdldCgp
KSkKIHsKICAgICBBU1NFUlQobV90ZXh0KTsKLSAgICBzZXRSZW5kZXJUZXh0KCk7CisgICAgc2V0
SXNUZXh0KCk7CiAgICAgbV90ZXh0ID0gZG9jdW1lbnQoKS0+ZGlzcGxheVN0cmluZ01vZGlmaWVk
QnlFbmNvZGluZyhQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KG1fdGV4dCkpOwogCiAgICAgdmlldygp
LT5mcmFtZVZpZXcoKS0+c2V0SXNWaXN1YWxseU5vbkVtcHR5KCk7CkBAIC03MzUsNyArNzM1LDcg
QEAgYm9vbCBSZW5kZXJUZXh0Ojpjb250YWluc09ubHlXaGl0ZXNwYWNlKAogICAgIHJldHVybiBj
dXJyUG9zID49IChmcm9tICsgbGVuKTsKIH0KIAotaW50IFJlbmRlclRleHQ6Om1pblhQb3MoKSBj
b25zdAoraW50IFJlbmRlclRleHQ6OmJvdW5kaW5nQm94WCgpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2ZpcnN0VGV4dEJveCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC03NDcsMTYgKzc0NywyOCBAQCBp
bnQgUmVuZGVyVGV4dDo6bWluWFBvcygpIGNvbnN0CiAgICAgcmV0dXJuIG1pblhQb3M7CiB9CiAK
LWludCBSZW5kZXJUZXh0Ojp4UG9zKCkgY29uc3QKK2ludCBSZW5kZXJUZXh0Ojpib3VuZGluZ0Jv
eFkoKSBjb25zdAoreworICAgIGlmICghbV9maXJzdFRleHRCb3gpCisgICAgICAgIHJldHVybiAw
OworCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBub3QgdXNlIGFuIGFyYml0cmFyeSB2YWx1ZSBs
aWtlIHRoaXMuICBQZXJoYXBzIHdlIHNob3VsZCB1c2UgSU5UX01BWC4KKyAgICBpbnQgbWluWVBv
cyA9IDY2NjY2NjY7CisgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3go
KTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCisgICAgICAgIG1pbllQb3MgPSBtaW4o
bWluWVBvcywgc3RhdGljX2Nhc3Q8aW50Pihib3gtPm1feSkpOworICAgIHJldHVybiBtaW5ZUG9z
OworfQorCitpbnQgUmVuZGVyVGV4dDo6Zmlyc3RSdW5YKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9maXJzdFRleHRCb3ggPyBtX2ZpcnN0VGV4dEJveC0+bV94IDogMDsKIH0KIAotaW50IFJlbmRl
clRleHQ6OnlQb3MoKSBjb25zdAoraW50IFJlbmRlclRleHQ6OmZpcnN0UnVuWSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fZmlyc3RUZXh0Qm94ID8gbV9maXJzdFRleHRCb3gtPm1feSA6IDA7CiB9
Ci0KKyAgICAKIHZvaWQgUmVuZGVyVGV4dDo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3Rh
dGUgc3RhdGUpCiB7CiAgICAgSW5saW5lVGV4dEJveCogYm94OwpAQCAtOTczLDcgKzk4NSw3IEBA
IHZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dChQYXNzUmVmUHRyPFN0cmkKICAgICBzZXROZWVkc0xh
eW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAotaW50IFJlbmRlclRleHQ6OmhlaWdodCgp
IGNvbnN0CitpbnQgUmVuZGVyVGV4dDo6Ym91bmRpbmdCb3hIZWlnaHQoKSBjb25zdAogewogICAg
IGludCByZXR2YWwgPSAwOwogICAgIGlmIChmaXJzdFRleHRCb3goKSkKQEAgLTEwNjUsNyArMTA3
Nyw3IEBAIHVuc2lnbmVkIGludCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCAKICAgICByZXR1
cm4gdzsKIH0KIAotaW50IFJlbmRlclRleHQ6OndpZHRoKCkgY29uc3QKK2ludCBSZW5kZXJUZXh0
Ojpib3VuZGluZ0JveFdpZHRoKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIG5v
dCB1c2UgYW4gYXJiaXRyYXJ5IHZhbHVlIGxpa2UgdGhpcy4gIFBlcmhhcHMgd2Ugc2hvdWxkIHVz
ZSBJTlRfTUFYLgogICAgIGludCBtaW54ID0gMTAwMDAwMDAwOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuaAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB1bnNpZ25lZCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnQm
LCBpbnQgeFBvcykgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCB3aWR0aCh1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBsZW4sIGludCB4UG9zLCBib29sIGZpcnN0TGluZSA9IGZhbHNlKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGhlaWdo
dCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwg
Ym9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogCkBAIC04NSwxMiArODMsMTYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBiZWdpbk1heFcsIGludCYg
ZW5kTWF4VywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWluVywgaW50JiBtYXhX
LCBib29sJiBzdHJpcEZyb250U3BhY2VzKTsKIAotICAgIC8vIHJldHVybnMgdGhlIG1pbmltdW0g
eCBwb3NpdGlvbiBvZiBhbGwgcnVucyByZWxhdGl2ZSB0byB0aGUgcGFyZW50LgotICAgIC8vIGRl
ZmF1bHRzIHRvIDAuCi0gICAgaW50IG1pblhQb3MoKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRo
ZSBsZWZ0bW9zdCAoYW5kIHRvcG1vc3QpIHBvc2l0aW9uIG9mIHRoZSBib3VuZGluZyBib3ggdGhh
dCBlbmNsb3NlcyBhbGwgdGV4dCBydW5zCisgICAgaW50IGJvdW5kaW5nQm94WCgpIGNvbnN0Owor
ICAgIGludCBib3VuZGluZ0JveFkoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIHdpZHRo
IGFuZCBoZWlnaHQgb2YgdGhlIGJvdW5kaW5nIGJveCB0aGF0IGVuY2xvc2VzIGFsbCB0ZXh0IHJ1
bnMuCisgICAgaW50IGJvdW5kaW5nQm94V2lkdGgoKSBjb25zdDsKKyAgICBpbnQgYm91bmRpbmdC
b3hIZWlnaHQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IHhQb3MoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGludCB5UG9zKCkgY29uc3Q7CisgICAgaW50IGZpcnN0UnVuWCgpIGNvbnN0OworICAg
IGludCBmaXJzdFJ1blkoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IHZlcnRpY2FsUG9zaXRp
b25IaW50KGJvb2wgZmlyc3RMaW5lKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwxMiArMTI2LDEy
IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZVN1YnRyZWVJZk4KIAogaW50IFJlbmRl
clRleHRDb250cm9sOjp0ZXh0QmxvY2tIZWlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBtX2hl
aWdodCAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKSAtIGJvcmRlclRvcCgpIC0gYm9y
ZGVyQm90dG9tKCk7CisgICAgcmV0dXJuIGhlaWdodCgpIC0gcGFkZGluZ1RvcCgpIC0gcGFkZGlu
Z0JvdHRvbSgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKTsKIH0KIAogaW50IFJlbmRl
clRleHRDb250cm9sOjp0ZXh0QmxvY2tXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fd2lk
dGggLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSBib3JkZXJMZWZ0KCkgLSBib3Jk
ZXJSaWdodCgpCisgICAgcmV0dXJuIHdpZHRoKCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1Jp
Z2h0KCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpCiAgICAgICAgICAgIC0gbV9pbm5l
clRleHQtPnJlbmRlcmVyKCktPnBhZGRpbmdMZWZ0KCkgLSBtX2lubmVyVGV4dC0+cmVuZGVyZXIo
KS0+cGFkZGluZ1JpZ2h0KCk7CiB9CiAKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nCiAKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlv
dXQoKTsKIAotICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8ICFtX2lu
bmVyVGV4dCB8fCAhbV9pbm5lclRleHQtPnJlbmRlcmVyKCkgfHwgIW1faW5uZXJUZXh0LT5yZW5k
ZXJlcigpLT5oZWlnaHQoKSkgeworICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElE
REVOIHx8ICFtX2lubmVyVGV4dCB8fCAhbV9pbm5lclRleHQtPnJlbmRlcmVyKCkgfHwgIW1faW5u
ZXJUZXh0LT5yZW5kZXJCb3goKS0+aGVpZ2h0KCkpIHsKICAgICAgICAgY2FjaGVTZWxlY3Rpb24o
c3RhcnQsIGVuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MTgsMjUgKzQxOCwyNSBA
QCBpbnQgUmVuZGVyVGV4dENvbnRyb2w6OnNjcm9sbGJhclRoaWNrbmVzCiAKIHZvaWQgUmVuZGVy
VGV4dENvbnRyb2w6OmNhbGNIZWlnaHQoKQogewotICAgIG1faGVpZ2h0ID0gbV9pbm5lclRleHQt
PnJlbmRlcmVyKCktPmJvcmRlclRvcCgpICsgbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPmJvcmRl
ckJvdHRvbSgpICsKLSAgICAgICAgICAgICAgIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5wYWRk
aW5nVG9wKCkgKyBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+cGFkZGluZ0JvdHRvbSgpICsKLSAg
ICAgICAgICAgICAgIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5tYXJnaW5Ub3AoKSArIG1faW5u
ZXJUZXh0LT5yZW5kZXJlcigpLT5tYXJnaW5Cb3R0b20oKTsKKyAgICBzZXRIZWlnaHQobV9pbm5l
clRleHQtPnJlbmRlcmVyKCktPmJvcmRlclRvcCgpICsgbV9pbm5lclRleHQtPnJlbmRlcmVyKCkt
PmJvcmRlckJvdHRvbSgpICsKKyAgICAgICAgICAgICAgbV9pbm5lclRleHQtPnJlbmRlcmVyKCkt
PnBhZGRpbmdUb3AoKSArIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5wYWRkaW5nQm90dG9tKCkg
KworICAgICAgICAgICAgICBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+bWFyZ2luVG9wKCkgKyBt
X2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+bWFyZ2luQm90dG9tKCkpOwogCiAgICAgYWRqdXN0Q29u
dHJvbEhlaWdodEJhc2VkT25MaW5lSGVpZ2h0KG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5saW5l
SGVpZ2h0KHRydWUsIHRydWUpKTsKLSAgICBtX2hlaWdodCArPSBwYWRkaW5nVG9wKCkgKyBwYWRk
aW5nQm90dG9tKCkgKyBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpOworICAgIHNldEhlaWdo
dChoZWlnaHQoKSArIHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKSArIGJvcmRlclRvcCgp
ICsgYm9yZGVyQm90dG9tKCkpOwogCiAgICAgLy8gV2UgYXJlIGFibGUgdG8gaGF2ZSBhIGhvcml6
b250YWwgc2Nyb2xsYmFyIGlmIHRoZSBvdmVyZmxvdyBzdHlsZSBpcyBzY3JvbGwsIG9yIGlmIGl0
cyBhdXRvIGFuZCB0aGVyZSdzIG5vIHdvcmQgd3JhcC4KICAgICBpZiAobV9pbm5lclRleHQtPnJl
bmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WCgpID09IE9TQ1JPTEwgfHwgIChtX2lubmVyVGV4
dC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT0FVVE8gJiYgbV9pbm5lclRl
eHQtPnJlbmRlcmVyKCktPnN0eWxlKCktPndvcmRXcmFwKCkgPT0gTm9ybWFsV29yZFdyYXApKQot
ICAgICAgICBtX2hlaWdodCArPSBzY3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgc2V0SGVp
Z2h0KGhlaWdodCgpICsgc2Nyb2xsYmFyVGhpY2tuZXNzKCkpOwogCiAgICAgUmVuZGVyQmxvY2s6
OmNhbGNIZWlnaHQoKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6aGl0SW5uZXJUZXh0
QmxvY2soSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5
KQordm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6aGl0SW5uZXJUZXh0QmxvY2soSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB0eCwgaW50IHR5KQogewogICAgIHJl
c3VsdC5zZXRJbm5lck5vZGUobV9pbm5lclRleHQuZ2V0KCkpOwotICAgIHJlc3VsdC5zZXRMb2Nh
bFBvaW50KEludFBvaW50KHggLSB0eCAtIG1feCAtIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT54
UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtIHR5IC0gbV95IC0g
bV9pbm5lclRleHQtPnJlbmRlcmVyKCktPnlQb3MoKSkpOworICAgIHJlc3VsdC5zZXRMb2NhbFBv
aW50KEludFBvaW50KHhQb3MgLSB0eCAtIHgoKSAtIG1faW5uZXJUZXh0LT5yZW5kZXJCb3goKS0+
eCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlQb3MgLSB0eSAtIHkoKSAt
IG1faW5uZXJUZXh0LT5yZW5kZXJCb3goKS0+eSgpKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2w6OmZvcndhcmRFdmVudChFdmVudCogZXZlbnQpCkBAIC00NDgsNyArNDQ4LDcgQEAgdm9p
ZCBSZW5kZXJUZXh0Q29udHJvbDo6Zm9yd2FyZEV2ZW50KEV2ZQogCiBJbnRSZWN0IFJlbmRlclRl
eHRDb250cm9sOjpjb250cm9sQ2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpIGNvbnN0CiB7Ci0gICAg
SW50UmVjdCBjbGlwUmVjdCA9IGNvbnRlbnRCb3goKTsKKyAgICBJbnRSZWN0IGNsaXBSZWN0ID0g
Y29udGVudEJveFJlY3QoKTsKICAgICBjbGlwUmVjdC5tb3ZlKHR4LCB0eSk7CiAgICAgcmV0dXJu
IGNsaXBSZWN0OwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE0
ICs1NCwxNCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpzdWJ0cmVlCiAKIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmxheW91dCgpCiB7Ci0gICAgaW50IG9sZEhl
aWdodCA9IG1faGVpZ2h0OworICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBjYWxj
SGVpZ2h0KCk7CiAKLSAgICBpbnQgb2xkV2lkdGggPSBtX3dpZHRoOworICAgIGludCBvbGRXaWR0
aCA9IHdpZHRoKCk7CiAgICAgY2FsY1dpZHRoKCk7CiAKLSAgICBib29sIHJlbGF5b3V0Q2hpbGRy
ZW4gPSBvbGRIZWlnaHQgIT0gbV9oZWlnaHQgfHwgb2xkV2lkdGggIT0gbV93aWR0aDsKLSAgICBS
ZW5kZXJPYmplY3QqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5k
ZXJlcigpOworICAgIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiA9IG9sZEhlaWdodCAhPSBoZWlnaHQo
KSB8fCBvbGRXaWR0aCAhPSB3aWR0aCgpOworICAgIFJlbmRlckJveCogaW5uZXJUZXh0UmVuZGVy
ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpOwogCiAgICAgLy8gU2V0IHRoZSB0
ZXh0IGJsb2NrIGhlaWdodAogICAgIGludCBkZXNpcmVkSGVpZ2h0ID0gdGV4dEJsb2NrSGVpZ2h0
KCk7CkBAIC0xMDQsNyArMTA0LDcgQEAgaW50IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpw
cmVmZXJyZQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjphZGp1c3RDb250cm9s
SGVpZ2h0QmFzZWRPbkxpbmVIZWlnaHQoaW50IGxpbmVIZWlnaHQpCiB7Ci0gICAgbV9oZWlnaHQg
Kz0gbGluZUhlaWdodCAqIHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihub2RlKCkp
LT5yb3dzKCk7CisgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbGluZUhlaWdodCAqIHN0YXRpY19j
YXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihub2RlKCkpLT5yb3dzKCkpOwogfQogCiBpbnQgUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCwgYm9vbCkgY29u
c3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMzIgKzE5Nywz
MiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoCiAgICAgUmVuZGVy
VGV4dENvbnRyb2w6OnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKIAogICAgIGlmIChwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCAmJiBtX3Nob3VsZERyYXdDYXBz
TG9ja0luZGljYXRvcikgewotICAgICAgICBJbnRSZWN0IGNvbnRlbnRzUmVjdCA9IGNvbnRlbnRC
b3goKTsKKyAgICAgICAgSW50UmVjdCBjb250ZW50c1JlY3QgPSBjb250ZW50Qm94UmVjdCgpOwog
CiAgICAgICAgIC8vIENvbnZlcnQgdGhlIHJlY3QgaW50byB0aGUgY29vcmRzIHVzZWQgZm9yIHBh
aW50aW5nIHRoZSBjb250ZW50Ci0gICAgICAgIGNvbnRlbnRzUmVjdC5tb3ZlKHR4ICsgeFBvcygp
LCB0eSArIHlQb3MoKSk7CisgICAgICAgIGNvbnRlbnRzUmVjdC5tb3ZlKHR4ICsgeCgpLCB0eSAr
IHkoKSk7CiAgICAgICAgIHRoZW1lKCktPnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IodGhpcywgcGFp
bnRJbmZvLCBjb250ZW50c1JlY3QpOwogICAgIH0KIH0KIAogdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmxheW91dCgpCiB7Ci0gICAgaW50IG9sZEhlaWdodCA9IG1faGVpZ2h0Owor
ICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBjYWxjSGVpZ2h0KCk7CiAKLSAgICBp
bnQgb2xkV2lkdGggPSBtX3dpZHRoOworICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7CiAgICAg
Y2FsY1dpZHRoKCk7CiAKLSAgICBib29sIHJlbGF5b3V0Q2hpbGRyZW4gPSBvbGRIZWlnaHQgIT0g
bV9oZWlnaHQgfHwgb2xkV2lkdGggIT0gbV93aWR0aDsKKyAgICBib29sIHJlbGF5b3V0Q2hpbGRy
ZW4gPSBvbGRIZWlnaHQgIT0gaGVpZ2h0KCkgfHwgb2xkV2lkdGggIT0gd2lkdGgoKTsKIAotICAg
IFJlbmRlck9iamVjdCogaW5uZXJUZXh0UmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJl
bmRlcmVyKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBpbm5lckJsb2NrUmVuZGVyZXIgPSBtX2lubmVy
QmxvY2sgPyBtX2lubmVyQmxvY2stPnJlbmRlcmVyKCkgOiAwOworICAgIFJlbmRlckJveCogaW5u
ZXJUZXh0UmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpOworICAgIFJl
bmRlckJveCogaW5uZXJCbG9ja1JlbmRlcmVyID0gbV9pbm5lckJsb2NrID8gbV9pbm5lckJsb2Nr
LT5yZW5kZXJCb3goKSA6IDA7CiAKICAgICAvLyBTZXQgdGhlIHRleHQgYmxvY2sgaGVpZ2h0CiAg
ICAgaW50IGRlc2lyZWRIZWlnaHQgPSB0ZXh0QmxvY2tIZWlnaHQoKTsKICAgICBpbnQgY3VycmVu
dEhlaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKIAotICAgIGlmIChtX2lubmVy
QmxvY2sgfHwgY3VycmVudEhlaWdodCA+IG1faGVpZ2h0KSB7CisgICAgaWYgKG1faW5uZXJCbG9j
ayB8fCBjdXJyZW50SGVpZ2h0ID4gaGVpZ2h0KCkpIHsKICAgICAgICAgaWYgKGRlc2lyZWRIZWln
aHQgIT0gY3VycmVudEhlaWdodCkKICAgICAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVl
OwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChk
ZXNpcmVkSGVpZ2h0LCBGaXhlZCkpOwpAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQKICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUo
KS0+c2V0V2lkdGgoTGVuZ3RoKGRlc2lyZWRXaWR0aCwgRml4ZWQpKTsKIAogICAgIGlmIChtX2lu
bmVyQmxvY2spIHsKLSAgICAgICAgaW50IGlubmVyQmxvY2tXaWR0aCA9IG1fd2lkdGggLSBwYWRk
aW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgp
OworICAgICAgICBpbnQgaW5uZXJCbG9ja1dpZHRoID0gd2lkdGgoKSAtIHBhZGRpbmdMZWZ0KCkg
LSBwYWRkaW5nUmlnaHQoKSAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCk7CiAgICAgICAg
IGlmIChpbm5lckJsb2NrV2lkdGggIT0gaW5uZXJCbG9ja1JlbmRlcmVyLT53aWR0aCgpKQogICAg
ICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgIGlubmVyQmxvY2tSZW5k
ZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKGlubmVyQmxvY2tXaWR0aCwgRml4ZWQpKTsK
QEAgLTI1NCwxMiArMjU0LDEyIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjps
YXlvdXQKICAgICAvLyBEb24ndCBkbyB0aGlzIGZvciBzZWFyY2ggZmllbGRzLCBzaW5jZSB3ZSBk
b24ndCBob25vciBoZWlnaHQgZm9yIHRoZW0KICAgICBpZiAoIW1faW5uZXJCbG9jaykgewogICAg
ICAgICBjdXJyZW50SGVpZ2h0ID0gaW5uZXJUZXh0UmVuZGVyZXItPmhlaWdodCgpOwotICAgICAg
ICBpZiAoY3VycmVudEhlaWdodCA8IG1faGVpZ2h0KQotICAgICAgICAgICAgaW5uZXJUZXh0UmVu
ZGVyZXItPnNldFBvcyhpbm5lclRleHRSZW5kZXJlci0+eFBvcygpLCAobV9oZWlnaHQgLSBjdXJy
ZW50SGVpZ2h0KSAvIDIpOworICAgICAgICBpZiAoY3VycmVudEhlaWdodCA8IGhlaWdodCgpKQor
ICAgICAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnNldExvY2F0aW9uKGlubmVyVGV4dFJlbmRl
cmVyLT54KCksIChoZWlnaHQoKSAtIGN1cnJlbnRIZWlnaHQpIC8gMik7CiAgICAgfQogfQogCi1i
b29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBp
bnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4UG9zLCBpbnQgeVBvcywgaW50IHR4
LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICAvLyBJZiB3ZSdy
ZSB3aXRoaW4gdGhlIHRleHQgY29udHJvbCwgd2Ugd2FudCB0byBhY3QgYXMgaWYgd2UndmUgaGl0
IHRoZSBpbm5lciB0ZXh0IGJsb2NrIGVsZW1lbnQsIGluIGNhc2UgdGhlIHBvaW50CiAgICAgLy8g
d2FzIG9uIHRoZSBjb250cm9sIGJ1dCBub3Qgb24gdGhlIGlubmVyIGVsZW1lbnQgKHNlZSBSYWRh
ciA0NjE3ODQxKS4KQEAgLTI2NywzNyArMjY3LDM3IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpub2RlQXQKICAgICAvLyBJbiBhIHNlYXJjaCBmaWVsZCwgd2Ugd2FudCB0byBh
Y3QgYXMgaWYgd2UndmUgaGl0IHRoZSByZXN1bHRzIGJsb2NrIGlmIHdlJ3JlIHRvIHRoZSBsZWZ0
IG9mIHRoZSBpbm5lciB0ZXh0IGJsb2NrLAogICAgIC8vIGFuZCBhY3QgYXMgaWYgd2UndmUgaGl0
IHRoZSBjbG9zZSBibG9jayBpZiB3ZSdyZSB0byB0aGUgcmlnaHQgb2YgdGhlIGlubmVyIHRleHQg
YmxvY2suCiAKLSAgICBpZiAoIVJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJU
ZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCB0eCwg
dHksIGhpdFRlc3RBY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocmVz
dWx0LmlubmVyTm9kZSgpICE9IGVsZW1lbnQoKSAmJiByZXN1bHQuaW5uZXJOb2RlKCkgIT0gbV9p
bm5lckJsb2NrLmdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBoaXRJbm5lclRl
eHRCbG9jayhyZXN1bHQsIHgsIHksIHR4LCB0eSk7CisgICAgaGl0SW5uZXJUZXh0QmxvY2socmVz
dWx0LCB4UG9zLCB5UG9zLCB0eCwgdHkpOwogCiAgICAgaWYgKCFtX2lubmVyQmxvY2spCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgTm9kZSogaW5uZXJOb2RlID0gMDsKLSAgICBSZW5kZXJP
YmplY3QqIGlubmVyQmxvY2tSZW5kZXJlciA9IG1faW5uZXJCbG9jay0+cmVuZGVyZXIoKTsKLSAg
ICBSZW5kZXJPYmplY3QqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5y
ZW5kZXJlcigpOworICAgIFJlbmRlckJveCogaW5uZXJCbG9ja1JlbmRlcmVyID0gbV9pbm5lckJs
b2NrLT5yZW5kZXJCb3goKTsKKyAgICBSZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5u
ZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKTsKIAogICAgIEludFBvaW50IGxvY2FsUG9pbnQg
PSByZXN1bHQubG9jYWxQb2ludCgpOwotICAgIGxvY2FsUG9pbnQubW92ZSgtaW5uZXJCbG9ja1Jl
bmRlcmVyLT54UG9zKCksIC1pbm5lckJsb2NrUmVuZGVyZXItPnlQb3MoKSk7CisgICAgbG9jYWxQ
b2ludC5tb3ZlKC1pbm5lckJsb2NrUmVuZGVyZXItPngoKSwgLWlubmVyQmxvY2tSZW5kZXJlci0+
eSgpKTsKIAotICAgIGludCB0ZXh0TGVmdCA9IHR4ICsgbV94ICsgaW5uZXJCbG9ja1JlbmRlcmVy
LT54UG9zKCkgKyBpbm5lclRleHRSZW5kZXJlci0+eFBvcygpOwotICAgIGlmIChtX3Jlc3VsdHNC
dXR0b24gJiYgbV9yZXN1bHRzQnV0dG9uLT5yZW5kZXJlcigpICYmIHggPCB0ZXh0TGVmdCkKKyAg
ICBpbnQgdGV4dExlZnQgPSB0eCArIHgoKSArIGlubmVyQmxvY2tSZW5kZXJlci0+eCgpICsgaW5u
ZXJUZXh0UmVuZGVyZXItPngoKTsKKyAgICBpZiAobV9yZXN1bHRzQnV0dG9uICYmIG1fcmVzdWx0
c0J1dHRvbi0+cmVuZGVyZXIoKSAmJiB4UG9zIDwgdGV4dExlZnQpCiAgICAgICAgIGlubmVyTm9k
ZSA9IG1fcmVzdWx0c0J1dHRvbi5nZXQoKTsKIAogICAgIGlmICghaW5uZXJOb2RlKSB7CiAgICAg
ICAgIGludCB0ZXh0UmlnaHQgPSB0ZXh0TGVmdCArIGlubmVyVGV4dFJlbmRlcmVyLT53aWR0aCgp
OwotICAgICAgICBpZiAobV9jYW5jZWxCdXR0b24gJiYgbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVy
KCkgJiYgeCA+IHRleHRSaWdodCkKKyAgICAgICAgaWYgKG1fY2FuY2VsQnV0dG9uICYmIG1fY2Fu
Y2VsQnV0dG9uLT5yZW5kZXJlcigpICYmIHhQb3MgPiB0ZXh0UmlnaHQpCiAgICAgICAgICAgICBp
bm5lck5vZGUgPSBtX2NhbmNlbEJ1dHRvbi5nZXQoKTsKICAgICB9CiAKICAgICBpZiAoaW5uZXJO
b2RlKSB7CiAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoaW5uZXJOb2RlKTsKLSAgICAgICAg
bG9jYWxQb2ludC5tb3ZlKC1pbm5lck5vZGUtPnJlbmRlcmVyKCktPnhQb3MoKSwgLWlubmVyTm9k
ZS0+cmVuZGVyZXIoKS0+eVBvcygpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3ZlKC1pbm5lck5v
ZGUtPnJlbmRlckJveCgpLT54KCksIC1pbm5lck5vZGUtPnJlbmRlckJveCgpLT55KCkpOwogICAg
IH0KIAogICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KGxvY2FsUG9pbnQpOwpAQCAtMzA2LDcgKzMw
Niw3IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXQKIAogdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvcndhcmRFdmVudChFdmVudCogZXZlbnQpCiB7
Ci0gICAgUmVuZGVyT2JqZWN0KiBpbm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQo
KS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJU
ZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKTsKIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5ibHVyRXZlbnQpIHsKICAgICAgICAgaWYgKGlubmVyVGV4dFJlbmRlcmVyKSB7
CkBAIC0zMjQsOSArMzI0LDkgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZv
cndhcgogICAgIH0KIAogICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGlubmVyVGV4dFJlbmRl
cmVyLT5hYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4o
ZXZlbnQpLT5wYWdlWCgpLCBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWSgp
KSwgZmFsc2UsIHRydWUpOwotICAgIGlmIChtX3Jlc3VsdHNCdXR0b24gJiYgbG9jYWxQb2ludC54
KCkgPCBpbm5lclRleHRSZW5kZXJlci0+Ym9yZGVyQm94KCkueCgpKQorICAgIGlmIChtX3Jlc3Vs
dHNCdXR0b24gJiYgbG9jYWxQb2ludC54KCkgPCBpbm5lclRleHRSZW5kZXJlci0+Ym9yZGVyQm94
UmVjdCgpLngoKSkKICAgICAgICAgbV9yZXN1bHRzQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKLSAgICBlbHNlIGlmIChtX2NhbmNlbEJ1dHRvbiAmJiBsb2NhbFBvaW50LngoKSA+
IGlubmVyVGV4dFJlbmRlcmVyLT5ib3JkZXJCb3goKS5yaWdodCgpKQorICAgIGVsc2UgaWYgKG1f
Y2FuY2VsQnV0dG9uICYmIGxvY2FsUG9pbnQueCgpID4gaW5uZXJUZXh0UmVuZGVyZXItPmJvcmRl
ckJveFJlY3QoKS5yaWdodCgpKQogICAgICAgICBtX2NhbmNlbEJ1dHRvbi0+ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7CiAgICAgZWxzZQogICAgICAgICBSZW5kZXJUZXh0Q29udHJvbDo6Zm9y
d2FyZEV2ZW50KGV2ZW50KTsKQEAgLTM3OSwxMiArMzc5LDEyIEBAIGludCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnRleHRCbG8KIHsKICAgICBpbnQgd2lkdGggPSBSZW5kZXJUZXh0Q29u
dHJvbDo6dGV4dEJsb2NrV2lkdGgoKTsKIAotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlc3VsdHNS
ZW5kZXJlciA9IG1fcmVzdWx0c0J1dHRvbiA/IG1fcmVzdWx0c0J1dHRvbi0+cmVuZGVyZXIoKSA6
IDApIHsKKyAgICBpZiAoUmVuZGVyQm94KiByZXN1bHRzUmVuZGVyZXIgPSBtX3Jlc3VsdHNCdXR0
b24gPyBtX3Jlc3VsdHNCdXR0b24tPnJlbmRlckJveCgpIDogMCkgewogICAgICAgICByZXN1bHRz
UmVuZGVyZXItPmNhbGNXaWR0aCgpOwogICAgICAgICB3aWR0aCAtPSByZXN1bHRzUmVuZGVyZXIt
PndpZHRoKCkgKyByZXN1bHRzUmVuZGVyZXItPm1hcmdpbkxlZnQoKSArIHJlc3VsdHNSZW5kZXJl
ci0+bWFyZ2luUmlnaHQoKTsKICAgICB9CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBjYW5jZWxS
ZW5kZXJlciA9IG1fY2FuY2VsQnV0dG9uID8gbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVyKCkgOiAw
KSB7CisgICAgaWYgKFJlbmRlckJveCogY2FuY2VsUmVuZGVyZXIgPSBtX2NhbmNlbEJ1dHRvbiA/
IG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKICAgICAgICAgY2FuY2VsUmVuZGVy
ZXItPmNhbGNXaWR0aCgpOwogICAgICAgICB3aWR0aCAtPSBjYW5jZWxSZW5kZXJlci0+d2lkdGgo
KSArIGNhbmNlbFJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgKyBjYW5jZWxSZW5kZXJlci0+bWFyZ2lu
UmlnaHQoKTsKICAgICB9CkBAIC00MTMsMjUgKzQxMywyNSBAQCBpbnQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpwcmVmZXJyCiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjphZGp1c3RDb250cm9sSGVpZ2h0QmFzZWRPbkxpbmVIZWlnaHQoaW50IGxpbmVIZWlnaHQpCiB7
Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVzdWx0c1JlbmRlcmVyID0gbV9yZXN1bHRzQnV0dG9u
ID8gbV9yZXN1bHRzQnV0dG9uLT5yZW5kZXJlcigpIDogMCkgeworICAgIGlmIChSZW5kZXJCb3gq
IHJlc3VsdHNSZW5kZXJlciA9IG1fcmVzdWx0c0J1dHRvbiA/IG1fcmVzdWx0c0J1dHRvbi0+cmVu
ZGVyQm94KCkgOiAwKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ocmVzdWx0
c1JlbmRlcmVyKS0+Y2FsY0hlaWdodCgpOwotICAgICAgICBtX2hlaWdodCA9IG1heChtX2hlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5ib3JkZXJUb3AoKSAr
IHJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyQm90dG9tKCkgKwotICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRzUmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIHJlc3VsdHNSZW5kZXJlci0+cGFkZGlu
Z0JvdHRvbSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5tYXJn
aW5Ub3AoKSArIHJlc3VsdHNSZW5kZXJlci0+bWFyZ2luQm90dG9tKCkpOworICAgICAgICBzZXRI
ZWlnaHQobWF4KGhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5i
b3JkZXJUb3AoKSArIHJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyQm90dG9tKCkgKworICAgICAgICAg
ICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyByZXN1bHRzUmVuZGVyZXIt
PnBhZGRpbmdCb3R0b20oKSArCisgICAgICAgICAgICAgICAgICByZXN1bHRzUmVuZGVyZXItPm1h
cmdpblRvcCgpICsgcmVzdWx0c1JlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSkpOwogICAgICAgICBs
aW5lSGVpZ2h0ID0gbWF4KGxpbmVIZWlnaHQsIHJlc3VsdHNSZW5kZXJlci0+aGVpZ2h0KCkpOwog
ICAgIH0KIAotICAgIGlmIChSZW5kZXJPYmplY3QqIGNhbmNlbFJlbmRlcmVyID0gbV9jYW5jZWxC
dXR0b24gPyBtX2NhbmNlbEJ1dHRvbi0+cmVuZGVyZXIoKSA6IDApIHsKKyAgICBpZiAoUmVuZGVy
Qm94KiBjYW5jZWxSZW5kZXJlciA9IG1fY2FuY2VsQnV0dG9uID8gbV9jYW5jZWxCdXR0b24tPnJl
bmRlckJveCgpIDogMCkgewogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNhbmNl
bFJlbmRlcmVyKS0+Y2FsY0hlaWdodCgpOwotICAgICAgICBtX2hlaWdodCA9IG1heChtX2hlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsUmVuZGVyZXItPmJvcmRlclRvcCgpICsg
Y2FuY2VsUmVuZGVyZXItPmJvcmRlckJvdHRvbSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAg
Y2FuY2VsUmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIGNhbmNlbFJlbmRlcmVyLT5wYWRkaW5nQm90
dG9tKCkgKwotICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxSZW5kZXJlci0+bWFyZ2luVG9w
KCkgKyBjYW5jZWxSZW5kZXJlci0+bWFyZ2luQm90dG9tKCkpOworICAgICAgICBzZXRIZWlnaHQo
bWF4KGhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgY2FuY2VsUmVuZGVyZXItPmJvcmRlclRv
cCgpICsgY2FuY2VsUmVuZGVyZXItPmJvcmRlckJvdHRvbSgpICsKKyAgICAgICAgICAgICAgICAg
IGNhbmNlbFJlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyBjYW5jZWxSZW5kZXJlci0+cGFkZGluZ0Jv
dHRvbSgpICsKKyAgICAgICAgICAgICAgICAgIGNhbmNlbFJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAr
IGNhbmNlbFJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSkpOwogICAgICAgICBsaW5lSGVpZ2h0ID0g
bWF4KGxpbmVIZWlnaHQsIGNhbmNlbFJlbmRlcmVyLT5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAg
bV9oZWlnaHQgKz0gbGluZUhlaWdodDsKKyAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBsaW5lSGVp
Z2h0KTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVN1YnRy
ZWVJZk5lZWRlZCgpCkBAIC02OTUsNyArNjk1LDcgQEAgaW50IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y2xpZW50UAogewogICAgIGludCBwYWRkaW5nID0gcGFkZGluZ0xlZnQoKTsKIAot
ICAgIGlmIChSZW5kZXJPYmplY3QqIHJlc3VsdHNSZW5kZXJlciA9IG1fcmVzdWx0c0J1dHRvbiA/
IG1fcmVzdWx0c0J1dHRvbi0+cmVuZGVyZXIoKSA6IDApCisgICAgaWYgKFJlbmRlckJveCogcmVz
dWx0c1JlbmRlcmVyID0gbV9yZXN1bHRzQnV0dG9uID8gbV9yZXN1bHRzQnV0dG9uLT5yZW5kZXJC
b3goKSA6IDApCiAgICAgICAgIHBhZGRpbmcgKz0gcmVzdWx0c1JlbmRlcmVyLT53aWR0aCgpOwog
CiAgICAgcmV0dXJuIHBhZGRpbmc7CkBAIC03MDUsNyArNzA1LDcgQEAgaW50IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y2xpZW50UAogewogICAgIGludCBwYWRkaW5nID0gcGFkZGluZ1Jp
Z2h0KCk7CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBjYW5jZWxSZW5kZXJlciA9IG1fY2FuY2Vs
QnV0dG9uID8gbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVyKCkgOiAwKQorICAgIGlmIChSZW5kZXJC
b3gqIGNhbmNlbFJlbmRlcmVyID0gbV9jYW5jZWxCdXR0b24gPyBtX2NhbmNlbEJ1dHRvbi0+cmVu
ZGVyQm94KCkgOiAwKQogICAgICAgICBwYWRkaW5nICs9IGNhbmNlbFJlbmRlcmVyLT53aWR0aCgp
OwogCiAgICAgcmV0dXJuIHBhZGRpbmc7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
CShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcxLDkgKzM3MSwxMSBAQCBib29sIFJlbmRlclRoZW1lOjpwYWlu
dERlY29yYXRpb25zKFJlbmRlCiAjaWYgRU5BQkxFKFZJREVPKQogYm9vbCBSZW5kZXJUaGVtZTo6
aGl0VGVzdE1lZGlhQ29udHJvbFBhcnQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRQb2ludCYg
YWJzUG9pbnQpCiB7Ci0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gby0+YWJzb2x1dGVUb0xv
Y2FsKGFic1BvaW50LCBmYWxzZSwgdHJ1ZSk7ICAvLyByZXNwZWN0IHRyYW5zZm9ybXMKKyAgICBp
ZiAoIW8tPmlzQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBvLT5i
b3JkZXJCb3goKS5jb250YWlucyhyb3VuZGVkSW50UG9pbnQobG9jYWxQb2ludCkpOworICAgIEZs
b2F0UG9pbnQgbG9jYWxQb2ludCA9IG8tPmFic29sdXRlVG9Mb2NhbChhYnNQb2ludCwgZmFsc2Us
IHRydWUpOyAgLy8gcmVzcGVjdCB0cmFuc2Zvcm1zCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJl
bmRlckJveCo+KG8pLT5ib3JkZXJCb3hSZWN0KCkuY29udGFpbnMocm91bmRlZEludFBvaW50KGxv
Y2FsUG9pbnQpKTsKIH0KICNlbmRpZgogCkBAIC00ODAsMTAgKzQ4MiwxMyBAQCBDb2xvciBSZW5k
ZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCCiAKIGludCBSZW5kZXJUaGVtZTo6YmFzZWxp
bmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiB7CisgICAgaWYgKCFvLT5p
c0JveCgpKQorICAgICAgICByZXR1cm4gMDsKKwogI2lmIFVTRShORVdfVEhFTUUpCi0gICAgcmV0
dXJuIG8tPmhlaWdodCgpICsgby0+bWFyZ2luVG9wKCkgKyBtX3RoZW1lLT5iYXNlbGluZVBvc2l0
aW9uQWRqdXN0bWVudChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpICogby0+c3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCb3gqPihv
KS0+aGVpZ2h0KCkgKyBvLT5tYXJnaW5Ub3AoKSArIG1fdGhlbWUtPmJhc2VsaW5lUG9zaXRpb25B
ZGp1c3RtZW50KG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkgKiBvLT5zdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCk7CiAjZWxzZQotICAgIHJldHVybiBvLT5oZWlnaHQoKSArIG8tPm1hcmdpblRvcCgp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCb3gqPihvKS0+aGVpZ2h0KCkg
KyBvLT5tYXJnaW5Ub3AoKTsKICNlbmRpZgogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQkocmV2aXNpb24gNDAwNzcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI1NCw2ICsxMjU0LDkgQEAgdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTm9k
ZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIGlmICghaW5w
dXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHNl
dFNlYXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJjaEZp
ZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CkBAIC0xMjY0LDcgKzEyNjcsNyBAQCBi
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAKICAgICBmbG9hdCB6b29t
TGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKLSAgICBGbG9hdFJlY3QgbG9j
YWxCb3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0
LT5yZW5kZXJlcigpLT5ib3JkZXJCb3goKSldOworICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9
IFtzZWFyY2ggY2FuY2VsQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJv
eCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsKICAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50
aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOwogCiAgICAgRmxv
YXRSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7CkBAIC0xMzI4LDYgKzEzMzEsOSBAQCB2
b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlCiBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAg
Tm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIGlmICgh
aW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAg
IHNldFNlYXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBOU1NlYXJj
aEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CkBAIC0xMzM1LDcgKzEzNDEsNyBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgaWYgKFtzZWFy
Y2ggc2VhcmNoTWVudVRlbXBsYXRlXSAhPSBuaWwpCiAgICAgICAgIFtzZWFyY2ggc2V0U2VhcmNo
TWVudVRlbXBsYXRlOm5pbF07CiAKLSAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNo
IHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJlcigpLT5ib3Jk
ZXJCb3goKSldOworICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0
dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0
KCkpXTsKICAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVu
ZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOwogCiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9u
Q2VsbF0gZHJhd1dpdGhGcmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6by0+dmlldygpLT5mcmFtZVZp
ZXcoKS0+ZG9jdW1lbnRWaWV3KCldOwpAQCAtMTM1NSw2ICsxMzYxLDkgQEAgdm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZQogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUq
IGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoIWlucHV0
LT5yZW5kZXJlcigpLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBzZXRT
ZWFyY2hDZWxsU3RhdGUoaW5wdXQtPnJlbmRlcmVyKCksIHIpOwogCiAgICAgTlNTZWFyY2hGaWVs
ZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOwpAQCAtMTM2Niw3ICsxMzc1LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlcwogCiAgICAgZmxvYXQgem9vbUxl
dmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCi0gICAgRmxvYXRSZWN0IGxvY2Fs
Qm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+
cmVuZGVyZXIoKS0+Ym9yZGVyQm94KCkpXTsKKyAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBb
c2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3go
KS0+Ym9yZGVyQm94UmVjdCgpKV07CiAgICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGlu
Z1JlY3QoaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKICAgICAKICAgICBJ
bnRSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7CkBAIC0xNTk0LDEwICsxNjAzLDEzIEBA
IFN0cmluZyBSZW5kZXJUaGVtZU1hYzo6ZXh0cmFNZWRpYUNvbnRyb2wKIAogYm9vbCBSZW5kZXJU
aGVtZU1hYzo6aGl0VGVzdE1lZGlhQ29udHJvbFBhcnQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJ
bnRQb2ludCYgYWJzUG9pbnQpCiB7CisgICAgaWYgKCFvLT5pc0JveCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAogICAgIGlmIChtZWRpYUNvbnRyb2xsZXJUaGVtZSgpID09IE1l
ZGlhQ29udHJvbGxlclRoZW1lUVQpIHsKICAgICAgICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0
eWxlKCktPmFwcGVhcmFuY2UoKTsKICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gby0+
YWJzb2x1dGVUb0xvY2FsKGFic1BvaW50LCBmYWxzZSwgdHJ1ZSk7ICAvLyByZXNwZWN0IHRyYW5z
Zm9ybXMKLSAgICAgICAgcmV0dXJuIHdrSGl0VGVzdE1lZGlhVUlQYXJ0KHBhcnQgLSBNZWRpYUZ1
bGxzY3JlZW5CdXR0b25QYXJ0LCBNZWRpYUNvbnRyb2xsZXJUaGVtZVFULCBDR1JlY3Qoby0+Ym9y
ZGVyQm94KCkpLCBDR1BvaW50KGxvY2FsUG9pbnQpKTsKKyAgICAgICAgcmV0dXJuIHdrSGl0VGVz
dE1lZGlhVUlQYXJ0KHBhcnQgLSBNZWRpYUZ1bGxzY3JlZW5CdXR0b25QYXJ0LCBNZWRpYUNvbnRy
b2xsZXJUaGVtZVFULCBDR1JlY3Qoc3RhdGljX2Nhc3Q8UmVuZGVyQm94Kj4obyktPmJvcmRlckJv
eFJlY3QoKSksIENHUG9pbnQobG9jYWxQb2ludCkpOwogICAgIH0KICAgICBlbHNlCiAgICAgICAg
IHJldHVybiBSZW5kZXJUaGVtZTo6aGl0VGVzdE1lZGlhQ29udHJvbFBhcnQobywgYWJzUG9pbnQp
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDQw
MDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyQlIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMTgwLDcgKzE4MSwy
NiBAQCBzdGF0aWMgVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBJbnRSZWN0IHIoby54UG9zKCksIG8ueVBvcygpLCBvLndpZHRoKCksIG8u
aGVpZ2h0KCkpOworICAgIEludFJlY3QgcjsKKyAgICBpZiAoby5pc1RleHQoKSkgeworICAgICAg
ICAvLyBGSVhNRTogV291bGQgYmUgYmV0dGVyIHRvIGR1bXAgdGhlIGJvdW5kaW5nIGJveCB4IGFu
ZCB5IHJhdGhlciB0aGFuIHRoZSBmaXJzdCBydW4ncyB4IGFuZCB5LCBidXQgdGhhdCB3b3VsZCBp
bnZvbHZlIHVwZGF0aW5nCisgICAgICAgIC8vIG1hbnkgdGVzdCByZXN1bHRzLgorICAgICAgICBj
b25zdCBSZW5kZXJUZXh0JiB0ZXh0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyVGV4dCY+KG8p
OworICAgICAgICByID0gSW50UmVjdCh0ZXh0LmZpcnN0UnVuWCgpLCB0ZXh0LmZpcnN0UnVuWSgp
LCB0ZXh0LmJvdW5kaW5nQm94V2lkdGgoKSwgdGV4dC5ib3VuZGluZ0JveEhlaWdodCgpKTsKKyAg
ICB9IGVsc2UgaWYgKG8uaXNCb3goKSkgeworICAgICAgICBpZiAoby5pc1JlbmRlcklubGluZSgp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV291bGQgYmUgYmV0dGVyIG5vdCB0byBqdXN0IGR1
bXAgMCwgMCBhcyB0aGUgeCBhbmQgeSBoZXJlLgorICAgICAgICAgICAgY29uc3QgUmVuZGVySW5s
aW5lJiBpbmxpbmVGbG93ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVySW5saW5lJj4obyk7Cisg
ICAgICAgICAgICByID0gSW50UmVjdCgwLCAwLCBpbmxpbmVGbG93LmJvdW5kaW5nQm94V2lkdGgo
KSwgaW5saW5lRmxvdy5ib3VuZGluZ0JveEhlaWdodCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4ndCBqdXN0IHVzZSB0aGUgYWN0dWFsIGZyYW1lUmVj
dCBvZiB0aGUgYm94IGJlY2F1c2UgZHVtcCByZW5kZXIgdHJlZSBkdW1wcyB0aGUgImlubmVyIGJv
eCIgb2YgdGFibGUgY2VsbHMuCisgICAgICAgICAgICAvLyBCZWNhdXNlIG9mIHRoZSBsaWUgd2Ug
aGF2ZSB0byBjYWxsIHkoKS4gIFdlIHdvdWxkIGxpa2UgdG8gZml4IGR1bXAgcmVuZGVyIHRyZWUg
dG8gZHVtcCB0aGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIHRhYmxlCisgICAgICAgICAgICAv
LyBjZWxsIGluY2x1ZGluZyB0aGUgZXh0cmEgaW50cmluc2ljIHBhZGRpbmcuCisgICAgICAgICAg
ICBjb25zdCBSZW5kZXJCb3gmIGJveCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlckJveCY+KG8p
OworICAgICAgICAgICAgciA9IEludFJlY3QoYm94LngoKSwgYm94LnkoKSwgYm94LndpZHRoKCks
IGJveC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICB0cyA8PCAiICIgPDwgcjsK
IAogICAgIGlmICghKG8uaXNUZXh0KCkgJiYgIW8uaXNCUigpKSkgewpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZGVvLmNwcAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWRlby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBSZW5k
ZXJWaWRlbzo6dmlkZW9TaXplQ2hhbmdlZCgpCiAKIEludFJlY3QgUmVuZGVyVmlkZW86OnZpZGVv
Qm94KCkgY29uc3QgCiB7Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGNvbnRlbnRCb3goKTsK
KyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gY29udGVudEJveFJlY3QoKTsKICAgICAKICAgICBp
ZiAoaW50cmluc2ljU2l6ZSgpLmlzRW1wdHkoKSB8fCBjb250ZW50UmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAko
cmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTAsMTAgKzUwLDcgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2Rl
KiBub2RlLCBGcmFtZQogCiAgICAgLy8gaW5pdCBSZW5kZXJPYmplY3QgYXR0cmlidXRlcwogICAg
IHNldElubGluZShmYWxzZSk7Ci0KLSAgICAvLyB0cnkgdG8gY29udHJhaW4gdGhlIHdpZHRoIHRv
IHRoZSB2aWV3cyB3aWR0aAotICAgIG1fd2lkdGggPSAwOwotICAgIG1faGVpZ2h0ID0gMDsKKyAg
ICAKICAgICBtX21pblByZWZXaWR0aCA9IDA7CiAgICAgbV9tYXhQcmVmV2lkdGggPSAwOwogCkBA
IC03MywxMyArNzAsMTMgQEAgUmVuZGVyVmlldzo6flJlbmRlclZpZXcoKQogdm9pZCBSZW5kZXJW
aWV3OjpjYWxjSGVpZ2h0KCkKIHsKICAgICBpZiAoIXByaW50aW5nKCkgJiYgbV9mcmFtZVZpZXcp
Ci0gICAgICAgIG1faGVpZ2h0ID0gdmlld0hlaWdodCgpOworICAgICAgICBzZXRIZWlnaHQodmll
d0hlaWdodCgpKTsKIH0KIAogdm9pZCBSZW5kZXJWaWV3OjpjYWxjV2lkdGgoKQogewogICAgIGlm
ICghcHJpbnRpbmcoKSAmJiBtX2ZyYW1lVmlldykKLSAgICAgICAgbV93aWR0aCA9IHZpZXdXaWR0
aCgpOworICAgICAgICBzZXRXaWR0aCh2aWV3V2lkdGgoKSk7CiAgICAgbV9tYXJnaW5MZWZ0ID0g
MDsKICAgICBtX21hcmdpblJpZ2h0ID0gMDsKIH0KQEAgLTk2LDEwICs5MywxMCBAQCB2b2lkIFJl
bmRlclZpZXc6OmNhbGNQcmVmV2lkdGhzKCkKIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKIHsK
ICAgICBpZiAocHJpbnRpbmcoKSkKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZX
aWR0aCA9IG1fd2lkdGg7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGgg
PSB3aWR0aCgpOwogCiAgICAgLy8gVXNlIGNhbGNXaWR0aC9IZWlnaHQgdG8gZ2V0IHRoZSBuZXcg
d2lkdGgvaGVpZ2h0LCBzaW5jZSB0aGlzIHdpbGwgdGFrZSB0aGUgZnVsbCBwYWdlIHpvb20gZmFj
dG9yIGludG8gYWNjb3VudC4KLSAgICBib29sIHJlbGF5b3V0Q2hpbGRyZW4gPSAhcHJpbnRpbmco
KSAmJiAoIW1fZnJhbWVWaWV3IHx8IG1fd2lkdGggIT0gdmlld1dpZHRoKCkgfHwgbV9oZWlnaHQg
IT0gdmlld0hlaWdodCgpKTsKKyAgICBib29sIHJlbGF5b3V0Q2hpbGRyZW4gPSAhcHJpbnRpbmco
KSAmJiAoIW1fZnJhbWVWaWV3IHx8IHdpZHRoKCkgIT0gdmlld1dpZHRoKCkgfHwgaGVpZ2h0KCkg
IT0gdmlld0hlaWdodCgpKTsKICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbikgewogICAgICAgICBz
ZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKICAgICAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewpAQCAtMTE4LDggKzExNSw4IEBAIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKICAg
ICAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgZG9jV2lk
dGgoKSA+PSB3aWR0aCgpIGFuZCBkb2NIZWlnaHQoKSA+PSBoZWlnaHQoKS4KLSAgICBzZXRPdmVy
Zmxvd1dpZHRoKG1fd2lkdGgpOwotICAgIHNldE92ZXJmbG93SGVpZ2h0KG1faGVpZ2h0KTsKKyAg
ICBzZXRPdmVyZmxvd1dpZHRoKHdpZHRoKCkpOworICAgIHNldE92ZXJmbG93SGVpZ2h0KGhlaWdo
dCgpKTsKIAogICAgIHNldE92ZXJmbG93V2lkdGgoZG9jV2lkdGgoKSk7CiAgICAgc2V0T3ZlcmZs
b3dIZWlnaHQoZG9jSGVpZ2h0KCkpOwpAQCAtNTE0LDcgKzUxMSw3IEBAIHZvaWQgUmVuZGVyVmll
dzo6cmVtb3ZlV2lkZ2V0KFJlbmRlck9iamUKIEludFJlY3QgUmVuZGVyVmlldzo6dmlld1JlY3Qo
KSBjb25zdAogewogICAgIGlmIChwcmludGluZygpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgw
LCAwLCBtX3dpZHRoLCBtX2hlaWdodCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHdp
ZHRoKCksIGhlaWdodCgpKTsKICAgICBpZiAobV9mcmFtZVZpZXcpCiAgICAgICAgIHJldHVybiBt
X2ZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgcmV0dXJuIEludFJlY3QoKTsK
QEAgLTUyMiw3ICs1MTksNyBAQCBJbnRSZWN0IFJlbmRlclZpZXc6OnZpZXdSZWN0KCkgY29uc3QK
IAogaW50IFJlbmRlclZpZXc6OmRvY0hlaWdodCgpIGNvbnN0CiB7Ci0gICAgaW50IGggPSBtX2hl
aWdodDsKKyAgICBpbnQgaCA9IGhlaWdodCgpOwogICAgIGludCBsb3dlc3RQb3MgPSBsb3dlc3RQ
b3NpdGlvbigpOwogICAgIGlmIChsb3dlc3RQb3MgPiBoKQogICAgICAgICBoID0gbG93ZXN0UG9z
OwpAQCAtNTMxLDcgKzUyOCw3IEBAIGludCBSZW5kZXJWaWV3Ojpkb2NIZWlnaHQoKSBjb25zdAog
ICAgIC8vIEluc3RlYWQgb2YgdGhpcyBkaCBjb21wdXRhdGlvbiB3ZSBzaG91bGQga2VlcCB0aGUg
cmVzdWx0CiAgICAgLy8gd2hlbiB3ZSBjYWxsIFJlbmRlckJsb2NrOjpsYXlvdXQuCiAgICAgaW50
IGRoID0gMDsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogYyA9IGZpcnN0Q2hpbGQoKTsgYzsgYyA9
IGMtPm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZW5kZXJCb3gqIGMgPSBmaXJzdENoaWxkQm94
KCk7IGM7IGMgPSBjLT5uZXh0U2libGluZ0JveCgpKQogICAgICAgICBkaCArPSBjLT5oZWlnaHQo
KSArIGMtPm1hcmdpblRvcCgpICsgYy0+bWFyZ2luQm90dG9tKCk7CiAKICAgICBpZiAoZGggPiBo
KQpAQCAtNTQyLDEyICs1MzksMTIgQEAgaW50IFJlbmRlclZpZXc6OmRvY0hlaWdodCgpIGNvbnN0
CiAKIGludCBSZW5kZXJWaWV3Ojpkb2NXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaW50IHcgPSBtX3dp
ZHRoOworICAgIGludCB3ID0gd2lkdGgoKTsKICAgICBpbnQgcmlnaHRtb3N0UG9zID0gcmlnaHRt
b3N0UG9zaXRpb24oKTsKICAgICBpZiAocmlnaHRtb3N0UG9zID4gdykKICAgICAgICAgdyA9IHJp
Z2h0bW9zdFBvczsKLQotICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjID0gZmlyc3RDaGlsZCgpOyBj
OyBjID0gYy0+bmV4dFNpYmxpbmcoKSkgeworICAgIAorICAgIGZvciAoUmVuZGVyQm94KiBjID0g
Zmlyc3RDaGlsZEJveCgpOyBjOyBjID0gYy0+bmV4dFNpYmxpbmdCb3goKSkgewogICAgICAgICBp
bnQgZHcgPSBjLT53aWR0aCgpICsgYy0+bWFyZ2luTGVmdCgpICsgYy0+bWFyZ2luUmlnaHQoKTsK
ICAgICAgICAgaWYgKGR3ID4gdykKICAgICAgICAgICAgIHcgPSBkdzsKQEAgLTU3OCw3ICs1NzUs
NyBAQCBpbnQgUmVuZGVyVmlldzo6dmlld1dpZHRoKCkgY29uc3QKIAogLy8gVGhlIGlkZWEgaGVy
ZSBpcyB0byB0YWtlIGludG8gYWNjb3VudCB3aGF0IG9iamVjdCBpcyBtb3ZpbmcgdGhlIHBhZ2lu
YXRpb24gcG9pbnQsIGFuZAogLy8gdGh1cyBjaG9vc2UgdGhlIGJlc3QgcGxhY2UgdG8gY2hvcCBp
dC4KLXZvaWQgUmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KGludCB5LCBSZW5kZXJPYmpl
Y3QqIGZvclJlbmRlcmVyLCBib29sIGZvcmNlZEJyZWFrKQordm9pZCBSZW5kZXJWaWV3OjpzZXRC
ZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJlbmRlckJveCogZm9yUmVuZGVyZXIsIGJvb2wgZm9yY2Vk
QnJlYWspCiB7CiAgICAgLy8gTm9ib2R5IGVsc2UgY2FuIHNldCBhIHBhZ2UgYnJlYWsgb25jZSB3
ZSBoYXZlIGEgZm9yY2VkIGJyZWFrLgogICAgIGlmIChtX2ZvcmNlZFBhZ2VCcmVhaykKQEAgLTU5
Miw5ICs1ODksOCBAQCB2b2lkIFJlbmRlclZpZXc6OnNldEJlc3RUcnVuY2F0ZWRBdChpbnQgCiAg
ICAgfQogCiAgICAgLy8gcHJlZmVyIHRoZSB3aWRlc3Qgb2JqZWN0IHdobyB0cmllcyB0byBtb3Zl
IHRoZSBwYWdpbmF0aW9uIHBvaW50Ci0gICAgaW50IHdpZHRoID0gZm9yUmVuZGVyZXItPndpZHRo
KCk7Ci0gICAgaWYgKHdpZHRoID4gbV90cnVuY2F0b3JXaWR0aCkgewotICAgICAgICBtX3RydW5j
YXRvcldpZHRoID0gd2lkdGg7CisgICAgaWYgKGZvclJlbmRlcmVyLT53aWR0aCgpID4gbV90cnVu
Y2F0b3JXaWR0aCkgeworICAgICAgICBtX3RydW5jYXRvcldpZHRoID0gZm9yUmVuZGVyZXItPndp
ZHRoKCk7CiAgICAgICAgIG1fYmVzdFRydW5jYXRlZEF0ID0geTsKICAgICB9CiB9CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRQcmludEltYWdlcyhib29sIGVuYWJsZSkgeyBtX3ByaW50SW1hZ2VzID0gZW5h
YmxlOyB9CiAgICAgYm9vbCBwcmludEltYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRJbWFn
ZXM7IH0KICAgICB2b2lkIHNldFRydW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1bmNhdGVkQXQgPSB5
OyBtX2Jlc3RUcnVuY2F0ZWRBdCA9IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBtX2ZvcmNlZFBhZ2VC
cmVhayA9IGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJlbmRl
ck9iamVjdCAqZm9yUmVuZGVyZXIsIGJvb2wgZm9yY2VkQnJlYWsgPSBmYWxzZSk7CisgICAgdm9p
ZCBzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJlbmRlckJveCogZm9yUmVuZGVyZXIsIGJvb2wg
Zm9yY2VkQnJlYWsgPSBmYWxzZSk7CiAgICAgaW50IGJlc3RUcnVuY2F0ZWRBdCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmVzdFRydW5jYXRlZEF0OyB9CiAKICAgICBpbnQgdHJ1bmNhdGVkQXQoKSBjb25z
dCB7IHJldHVybiBtX3RydW5jYXRlZEF0OyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDggKzE3Miw4IEBAIHZvaWQgUmVuZGVyV2lkZ2V0
OjpwYWludChQYWludEluZm8mIHBhaW4KICAgICBpZiAoIXNob3VsZFBhaW50KHBhaW50SW5mbywg
dHgsIHR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHggKz0gbV94OwotICAgIHR5ICs9IG1f
eTsKKyAgICB0eCArPSB4KCk7CisgICAgdHkgKz0gbV9mcmFtZVJlY3QueSgpOwogCiAgICAgaWYg
KGhhc0JveERlY29yYXRpb25zKCkgJiYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpCiAgICAg
ICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB0eCwgdHkpOwpAQCAtMTg4LDcgKzE4
OCw3IEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW4KIAogI2lmIFBM
QVRGT1JNKE1BQykKICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYg
IXBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHBhaW50Q3Vz
dG9tSGlnaGxpZ2h0KHR4IC0gbV94LCB0eSAtIG1feSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRy
dWUpOworICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodCh0eCAtIHgoKSwgdHkgLSBtX2ZyYW1l
UmVjdC55KCksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKICNlbmRpZgogCiAgICAgaWYg
KG1fd2lkZ2V0KSB7CkBAIC0yMjIsMTAgKzIyMiwxMCBAQCB2b2lkIFJlbmRlcldpZGdldDo6dXBk
YXRlV2lkZ2V0UG9zaXRpb24oCiAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1
dGUoKTsKICAgICBhYnNQb3MubW92ZShib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBib3Jk
ZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CiAKLSAgICBpbnQgd2lkdGggPSBtX3dpZHRoIC0gYm9y
ZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQo
KTsKLSAgICBpbnQgaGVpZ2h0ID0gbV9oZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRv
bSgpIC0gcGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgpOworICAgIGludCB3ID0gd2lkdGgo
KSAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGlu
Z1JpZ2h0KCk7CisgICAgaW50IGggPSBoZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90
dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7CiAKLSAgICBJbnRSZWN0IG5l
d0JvdW5kcyhhYnNQb3MueCgpLCBhYnNQb3MueSgpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBJbnRS
ZWN0IG5ld0JvdW5kcyhhYnNQb3MueCgpLCBhYnNQb3MueSgpLCB3LCBoKTsKICAgICBJbnRSZWN0
IG9sZEJvdW5kcyhtX3dpZGdldC0+ZnJhbWVSZWN0KCkpOwogICAgIGlmIChuZXdCb3VuZHMgIT0g
b2xkQm91bmRzKSB7CiAgICAgICAgIC8vIFRoZSB3aWRnZXQgY2hhbmdlZCBwb3NpdGlvbnMuICBV
cGRhdGUgdGhlIGZyYW1lIGdlb21ldHJ5LgpAQCAtMjcxLDcgKzI3MSw3IEBAIGJvb2wgUmVuZGVy
V2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXQKICAgICAKICAgICAvLyBDaGVjayB0byBzZWUg
aWYgd2UgYXJlIHJlYWxseSBvdmVyIHRoZSB3aWRnZXQgaXRzZWxmIChhbmQgbm90IGp1c3QgaW4g
dGhlIGJvcmRlci9wYWRkaW5nIGFyZWEpLgogICAgIGlmIChpbnNpZGUgJiYgIWhhZFJlc3VsdCAm
JiByZXN1bHQuaW5uZXJOb2RlKCkgPT0gZWxlbWVudCgpKQotICAgICAgICByZXN1bHQuc2V0SXNP
dmVyV2lkZ2V0KGNvbnRlbnRCb3goKS5jb250YWlucyhyZXN1bHQubG9jYWxQb2ludCgpKSk7Cisg
ICAgICAgIHJlc3VsdC5zZXRJc092ZXJXaWRnZXQoY29udGVudEJveFJlY3QoKS5jb250YWlucyhy
ZXN1bHQubG9jYWxQb2ludCgpKSk7CiAgICAgcmV0dXJuIGluc2lkZTsKIH0KIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBw
dWJsaWM6CiAKICAgICBJbmxpbmVCb3gqIGNsb3Nlc3RMZWFmQ2hpbGRGb3JYUG9zKGludCB4LCBi
b29sIG9ubHlFZGl0YWJsZUxlYXZlcyA9IGZhbHNlKTsKIAotICAgIFZlY3RvcjxSZW5kZXJPYmpl
Y3QqPiYgZmxvYXRzKCkKKyAgICBWZWN0b3I8UmVuZGVyQm94Kj4mIGZsb2F0cygpCiAgICAgewog
ICAgICAgICBBU1NFUlQoIWlzRGlydHkoKSk7CiAgICAgICAgIGlmICghbV9vdmVyZmxvdykKQEAg
LTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX292ZXJmbG93LT5mbG9h
dHM7CiAgICAgfQogCi0gICAgVmVjdG9yPFJlbmRlck9iamVjdCo+KiBmbG9hdHNQdHIoKSB7IEFT
U0VSVCghaXNEaXJ0eSgpKTsgcmV0dXJuIG1fb3ZlcmZsb3cgPyAmbV9vdmVyZmxvdy0+ZmxvYXRz
IDogMDsgfQorICAgIFZlY3RvcjxSZW5kZXJCb3gqPiogZmxvYXRzUHRyKCkgeyBBU1NFUlQoIWlz
RGlydHkoKSk7IHJldHVybiBtX292ZXJmbG93ID8gJm1fb3ZlcmZsb3ctPmZsb2F0cyA6IDA7IH0K
IAogcHJvdGVjdGVkOgogICAgIC8vIE5vcm1hbGx5IHdlIGFyZSBvbmx5IGFzIHRhbGwgYXMgdGhl
IHN0eWxlIG9uIG91ciBibG9jayBkaWN0YXRlcywgYnV0IHdlIG1pZ2h0IGhhdmUgY29udGVudApA
QCAtMTU4LDcgKzE1OCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgaW50IG1fc2VsZWN0aW9uQm90
dG9tOwogICAgICAgICAvLyBGbG9hdHMgaGFuZ2luZyBvZmYgdGhlIGxpbmUgYXJlIHB1c2hlZCBp
bnRvIHRoaXMgdmVjdG9yIGR1cmluZyBsYXlvdXQuIEl0IGlzIG9ubHkKICAgICAgICAgLy8gZ29v
ZCBmb3IgYXMgbG9uZyBhcyB0aGUgbGluZSBoYXMgbm90IGJlZW4gbWFya2VkIGRpcnR5LgotICAg
ICAgICBWZWN0b3I8UmVuZGVyT2JqZWN0Kj4gZmxvYXRzOworICAgICAgICBWZWN0b3I8UmVuZGVy
Qm94Kj4gZmxvYXRzOwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhz
aXplX3QpIHRocm93KCk7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGlu
ZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZUZs
b3dCb3guY3BwCShyZXZpc2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGlu
ZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMCBAQCBpbnQgU1ZHSW5s
aW5lRmxvd0JveDo6cGxhY2VCb3hlc0hvcml6b250CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
U1ZHSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMoaW50JikKK2ludCBTVkdJbmxp
bmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQpCiB7CiAgICAgLy8gbm8tb3AKKyAg
ICByZXR1cm4gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9TVkdJbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgaW50IHBsYWNlQm94ZXNIb3Jpem9udGFs
bHkoaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBpbnQmIHJpZ2h0UG9zaXRpb24sIGJvb2wmIG5l
ZWRzV29yZFNwYWNpbmcpOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhp
bnQmIGhlaWdodE9mQmxvY2spOworICAgIHZpcnR1YWwgaW50IHZlcnRpY2FsbHlBbGlnbkJveGVz
KGludCBoZWlnaHRPZkJsb2NrKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA0MDA3
NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjksNyArMzI5LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbQogICAgICAgICByZXR1cm4gdHM7CiAKICAgICBWZWN0b3I8U1ZHVGV4dENodW5r
PiYgY2h1bmtzID0gY29uc3RfY2FzdDxWZWN0b3I8U1ZHVGV4dENodW5rPiYgPihib3gtPnN2Z1Rl
eHRDaHVua3MoKSk7Ci0gICAgdHMgPDwgIiBhdCAoIiA8PCB0ZXh0LnhQb3MoKSA8PCAiLCIgPDwg
dGV4dC55UG9zKCkgPDwgIikgc2l6ZSAiIDw8IGJveC0+d2lkdGgoKSA8PCAieCIgPDwgYm94LT5o
ZWlnaHQoKSA8PCAiIGNvbnRhaW5zICIgPDwgY2h1bmtzLnNpemUoKSA8PCAiIGNodW5rKHMpIjsK
KyAgICB0cyA8PCAiIGF0ICgiIDw8IHRleHQueCgpIDw8ICIsIiA8PCB0ZXh0LnkoKSA8PCAiKSBz
aXplICIgPDwgYm94LT53aWR0aCgpIDw8ICJ4IiA8PCBib3gtPmhlaWdodCgpIDw8ICIgY29udGFp
bnMgIiA8PCBjaHVua3Muc2l6ZSgpIDw8ICIgY2h1bmsocykiOwogCiAgICAgaWYgKHRleHQucGFy
ZW50KCkgJiYgKHRleHQucGFyZW50KCktPnN0eWxlKCktPmNvbG9yKCkgIT0gdGV4dC5zdHlsZSgp
LT5jb2xvcigpKSkKICAgICAgICAgdHMgPDwgIiBbY29sb3I9IiA8PCB0ZXh0LnN0eWxlKCktPmNv
bG9yKCkubmFtZSgpIDw8ICJdIjsKQEAgLTUxNCw3ICs1MTQsNyBAQCB2b2lkIHdyaXRlKFRleHRT
dHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTCiAgICAgICAgICAgICB0cyA8PCAiIHsiIDw8IHRhZ05h
bWUgPDwgIn0iOwogICAgIH0KIAotICAgIHRzIDw8ICIgYXQgKCIgPDwgdGV4dC54UG9zKCkgPDwg
IiwiIDw8IHRleHQueVBvcygpIDw8ICIpIHNpemUgIiA8PCB0ZXh0LndpZHRoKCkgPDwgIngiIDw8
IHRleHQuaGVpZ2h0KCkgPDwgIlxuIjsKKyAgICB0cyA8PCAiIGF0ICgiIDw8IHRleHQuZmlyc3RS
dW5YKCkgPDwgIiwiIDw8IHRleHQuZmlyc3RSdW5ZKCkgPDwgIikgc2l6ZSAiIDw8IHRleHQuYm91
bmRpbmdCb3hXaWR0aCgpIDw8ICJ4IiA8PCB0ZXh0LmJvdW5kaW5nQm94SGVpZ2h0KCkgPDwgIlxu
IjsKICAgICB3cml0ZVNWR0lubGluZVRleHQodHMsIHRleHQsIGluZGVudCk7CiB9CiAKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA0MDA3NSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94Lmgi
CiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgpAQCAtNjExLDEwICs2MTIsMTAgQEAgaW50
IFNWR1Jvb3RJbmxpbmVCb3g6OnBsYWNlQm94ZXNIb3Jpem9udAogICAgIHJldHVybiAwOwogfQog
Ci12b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzKGludCYgaGVpZ2h0
T2ZCbG9jaykKK2ludCBTVkdSb290SW5saW5lQm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQp
CiB7CiAgICAgLy8gaGVpZ2h0IGlzIHNldCBieSBsYXlvdXRJbmxpbmVCb3hlcy4KLSAgICBoZWln
aHRPZkJsb2NrID0gaGVpZ2h0KCk7CisgICAgcmV0dXJuIGhlaWdodCgpOwogfQogCiBmbG9hdCBj
dW1tdWxhdGVkV2lkdGhPZklubGluZUJveENoYXJhY3RlclJhbmdlKFNWR0lubGluZUJveENoYXJh
Y3RlclJhbmdlJiByYW5nZSkKQEAgLTg4Nyw3ICs4ODgsNyBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVC
b3g6OmNvbXB1dGVQZXJDaGFyYWN0CiAgICAgLy8gRmluYWxseSB0aGUgdG9wIGxlZnQgcG9zaXRp
b24gb2Ygb3VyIGJveCBpcyBrbm93bi4KICAgICAvLyBQcm9wb2dhdGUgdGhpcyBrbm93bmxlZGdl
IHRvIG91ciBSZW5kZXJTVkdUZXh0IHBhcmVudC4KICAgICBGbG9hdFBvaW50IHRvcExlZnQgPSB0
b3BMZWZ0UG9zaXRpb25PZkNoYXJhY3RlclJhbmdlKG1fc3ZnQ2hhcnMpOwotICAgIG9iamVjdCgp
LT5zZXRQb3MoKGludCkgZmxvb3JmKHRvcExlZnQueCgpKSwgKGludCkgZmxvb3JmKHRvcExlZnQu
eSgpKSk7CisgICAgYmxvY2soKS0+c2V0TG9jYXRpb24oKGludCkgZmxvb3JmKHRvcExlZnQueCgp
KSwgKGludCkgZmxvb3JmKHRvcExlZnQueSgpKSk7CiAKICAgICAvLyBMYXlvdXQgYWxsIElubGlu
ZVRleHQvRmxvdyBib3hlcwogICAgIC8vIEJFV0FSRTogVGhpcyByZXF1aXJlcyB0aGUgcm9vdCB0
b3AvbGVmdCBwb3NpdGlvbiB0byBiZSBzZXQgY29ycmVjdGx5IGJlZm9yZSEKQEAgLTEwMzgsMTAg
KzEwMzksMTAgQEAgdm9pZCBTVkdSb290SW5saW5lQm94OjpsYXlvdXRJbmxpbmVCb3hlcwogICAg
ICAgICAgICAgaW50IG1pblkgPSBlbmNsb3NlZFN0cmluZ1JlY3QueSgpOwogICAgICAgICAgICAg
aW50IG1heFkgPSBtaW5ZICsgZW5jbG9zZWRTdHJpbmdSZWN0LmhlaWdodCgpOwogCi0gICAgICAg
ICAgICBjdXJyLT5zZXRYUG9zKG1pblggLSBvYmplY3QoKS0+eFBvcygpKTsKKyAgICAgICAgICAg
IGN1cnItPnNldFhQb3MobWluWCAtIGJsb2NrKCktPngoKSk7CiAgICAgICAgICAgICBjdXJyLT5z
ZXRXaWR0aChlbmNsb3NlZFN0cmluZ1JlY3Qud2lkdGgoKSk7CiAKLSAgICAgICAgICAgIGN1cnIt
PnNldFlQb3MobWluWSAtIG9iamVjdCgpLT55UG9zKCkpOworICAgICAgICAgICAgY3Vyci0+c2V0
WVBvcyhtaW5ZIC0gYmxvY2soKS0+eSgpKTsKICAgICAgICAgICAgIGN1cnItPnNldEJhc2VsaW5l
KGZvbnQuYXNjZW50KCkpOwogICAgICAgICAgICAgY3Vyci0+c2V0SGVpZ2h0KGVuY2xvc2VkU3Ry
aW5nUmVjdC5oZWlnaHQoKSk7CiAKQEAgLTEwNzEsMTAgKzEwNzIsMTAgQEAgdm9pZCBTVkdSb290
SW5saW5lQm94OjpsYXlvdXRJbmxpbmVCb3hlcwogICAgIAogICAgICAgICAgICAgbGF5b3V0SW5s
aW5lQm94ZXMoZmxvd0JveCwgaXQsIG1pblgsIG1heFgsIG1pblksIG1heFkpOwogCi0gICAgICAg
ICAgICBjdXJyLT5zZXRYUG9zKG1pblggLSBvYmplY3QoKS0+eFBvcygpKTsKKyAgICAgICAgICAg
IGN1cnItPnNldFhQb3MobWluWCAtIGJsb2NrKCktPngoKSk7CiAgICAgICAgICAgICBjdXJyLT5z
ZXRXaWR0aChtYXhYIC0gbWluWCk7CiAKLSAgICAgICAgICAgIGN1cnItPnNldFlQb3MobWluWSAt
IG9iamVjdCgpLT55UG9zKCkpOworICAgICAgICAgICAgY3Vyci0+c2V0WVBvcyhtaW5ZIC0gYmxv
Y2soKS0+eSgpKTsKICAgICAgICAgICAgIGN1cnItPnNldEJhc2VsaW5lKGZvbnQuYXNjZW50KCkp
OwogICAgICAgICAgICAgY3Vyci0+c2V0SGVpZ2h0KG1heFkgLSBtaW5ZKTsKIApAQCAtMTA5Mywx
MCArMTA5NCwxMCBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dElubGluZUJveGVzCiAg
ICAgfQogCiAgICAgaWYgKHN0YXJ0LT5pc1Jvb3RJbmxpbmVCb3goKSkgewotICAgICAgICBpbnQg
dG9wID0gbG93WSAtIG9iamVjdCgpLT55UG9zKCk7Ci0gICAgICAgIGludCBib3R0b20gPSBoaWdo
WSAtIG9iamVjdCgpLT55UG9zKCk7CisgICAgICAgIGludCB0b3AgPSBsb3dZIC0gYmxvY2soKS0+
eSgpOworICAgICAgICBpbnQgYm90dG9tID0gaGlnaFkgLSBibG9jaygpLT55KCk7CiAKLSAgICAg
ICAgc3RhcnQtPnNldFhQb3MobG93WCAtIG9iamVjdCgpLT54UG9zKCkpOworICAgICAgICBzdGFy
dC0+c2V0WFBvcyhsb3dYIC0gYmxvY2soKS0+eCgpKTsKICAgICAgICAgc3RhcnQtPnNldFlQb3Mo
dG9wKTsKIAogICAgICAgICBzdGFydC0+c2V0V2lkdGgoaGlnaFggLSBsb3dYKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmgJKHJldmlzaW9uIDQwMDc1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1
NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0dWFsIGludCBwbGFjZUJveGVzSG9y
aXpvbnRhbGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBi
b29sJiBuZWVkc1dvcmRTcGFjaW5nKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGljYWxseUFsaWdu
Qm94ZXMoaW50JiBoZWlnaHRPZkJsb2NrKTsKKyAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbGx5QWxp
Z25Cb3hlcyhpbnQgaGVpZ2h0T2ZCbG9jayk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBl
ckNoYXJhY3RlckxheW91dEluZm9ybWF0aW9uKCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L2JpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwCShyZXZp
c2lvbiA0MDA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NjYsNyArNTY2LDcgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dExpbgogdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6b250YWxQb3NpdGlvbnNGb3JMaW5l
KFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiB0cmFp
bGluZ1NwYWNlUnVuLCBib29sIHJlYWNoZWRFbmQpCiB7CiAgICAgLy8gRmlyc3QgZGV0ZXJtaW5l
IG91ciB0b3RhbCB3aWR0aC4KLSAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBsaW5lV2lkdGgobV9o
ZWlnaHQpOworICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGxpbmVXaWR0aChoZWlnaHQoKSk7CiAg
ICAgaW50IHRvdFdpZHRoID0gbGluZUJveC0+Z2V0Rmxvd1NwYWNpbmdXaWR0aCgpOwogICAgIGJv
b2wgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNlOwogICAgIHVuc2lnbmVkIG51bVNwYWNlcyA9IDA7
CkBAIC01OTcsNyArNTk3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6b250YWxQ
b3NpdAogICAgICAgICAgICAgci0+bV9ib3gtPnNldFdpZHRoKHJ0LT53aWR0aChyLT5tX3N0YXJ0
LCByLT5tX3N0b3AgLSByLT5tX3N0YXJ0LCB0b3RXaWR0aCwgbV9maXJzdExpbmUpKTsKICAgICAg
ICAgfSBlbHNlIGlmICghci0+bV9vYmplY3QtPmlzSW5saW5lRmxvdygpKSB7CiAgICAgICAgICAg
ICByLT5tX29iamVjdC0+Y2FsY1dpZHRoKCk7Ci0gICAgICAgICAgICByLT5tX2JveC0+c2V0V2lk
dGgoci0+bV9vYmplY3QtPndpZHRoKCkpOworICAgICAgICAgICAgci0+bV9ib3gtPnNldFdpZHRo
KHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHItPm1fb2JqZWN0KS0+d2lkdGgoKSk7CiAgICAgICAg
ICAgICBpZiAoIXItPm1fY29tcGFjdCkKICAgICAgICAgICAgICAgICAgdG90V2lkdGggKz0gci0+
bV9vYmplY3QtPm1hcmdpbkxlZnQoKSArIHItPm1fb2JqZWN0LT5tYXJnaW5SaWdodCgpOwogICAg
ICAgICB9CkBAIC02MTEsNyArNjExLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6
b250YWxQb3NpdAogICAgIC8vIHdlIG5vdyBleGFtaW5lIG91ciB0ZXh0LWFsaWduIHByb3BlcnR5
IGluIG9yZGVyIHRvIGRldGVybWluZSB3aGVyZSB0byBwb3NpdGlvbiB0aGUKICAgICAvLyBvYmpl
Y3RzIGhvcml6b250YWxseS4gIFRoZSB0b3RhbCB3aWR0aCBvZiB0aGUgbGluZSBjYW4gYmUgaW5j
cmVhc2VkIGlmIHdlIGVuZCB1cAogICAgIC8vIGp1c3RpZnlpbmcgdGV4dC4KLSAgICBpbnQgeCA9
IGxlZnRPZmZzZXQobV9oZWlnaHQpOworICAgIGludCB4ID0gbGVmdE9mZnNldChoZWlnaHQoKSk7
CiAgICAgc3dpdGNoKHRleHRBbGlnbikgewogICAgICAgICBjYXNlIExFRlQ6CiAgICAgICAgIGNh
c2UgV0VCS0lUX0xFRlQ6CkBAIC03MjAsMTIgKzcyMCwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpj
b21wdXRlSG9yaXpvbnRhbFBvc2l0CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVWZXJ0aWNh
bFBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1biogZmlyc3RS
dW4pCiB7Ci0gICAgbGluZUJveC0+dmVydGljYWxseUFsaWduQm94ZXMobV9oZWlnaHQpOwotICAg
IGxpbmVCb3gtPnNldEJsb2NrSGVpZ2h0KG1faGVpZ2h0KTsKKyAgICBzZXRIZWlnaHQobGluZUJv
eC0+dmVydGljYWxseUFsaWduQm94ZXMoaGVpZ2h0KCkpKTsKKyAgICBsaW5lQm94LT5zZXRCbG9j
a0hlaWdodChoZWlnaHQoKSk7CiAKICAgICAvLyBTZWUgaWYgdGhlIGxpbmUgc3BpbGxlZCBvdXQu
ICBJZiBzbyBzZXQgb3ZlcmZsb3cgaGVpZ2h0IGFjY29yZGluZ2x5LgogICAgIGludCBib3R0b21P
ZkxpbmUgPSBsaW5lQm94LT5ib3R0b21PdmVyZmxvdygpOwotICAgIGlmIChib3R0b21PZkxpbmUg
PiBtX2hlaWdodCAmJiBib3R0b21PZkxpbmUgPiBtX292ZXJmbG93SGVpZ2h0KQorICAgIGlmIChi
b3R0b21PZkxpbmUgPiBoZWlnaHQoKSAmJiBib3R0b21PZkxpbmUgPiBtX292ZXJmbG93SGVpZ2h0
KQogICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gYm90dG9tT2ZMaW5lOwogCiAgICAgLy8gTm93
IG1ha2Ugc3VyZSB3ZSBwbGFjZSByZXBsYWNlZCByZW5kZXIgb2JqZWN0cyBjb3JyZWN0bHkuCkBA
IC03MzYsNyArNzM2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZVZlcnRpY2FsUG9zaXRp
bwogICAgICAgICAvLyBBbGlnbiBwb3NpdGlvbmVkIGJveGVzIHdpdGggdGhlIHRvcCBvZiB0aGUg
bGluZSBib3guICBUaGlzIGlzCiAgICAgICAgIC8vIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9u
IG9mIGFuIGFwcHJvcHJpYXRlIHkgcG9zaXRpb24uCiAgICAgICAgIGlmIChyLT5tX29iamVjdC0+
aXNQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICByLT5tX2JveC0+c2V0WVBvcyhtX2hlaWdodCk7
CisgICAgICAgICAgICByLT5tX2JveC0+c2V0WVBvcyhoZWlnaHQoKSk7CiAKICAgICAgICAgLy8g
UG9zaXRpb24gaXMgdXNlZCB0byBwcm9wZXJseSBwb3NpdGlvbiBib3RoIHJlcGxhY2VkIGVsZW1l
bnRzIGFuZAogICAgICAgICAvLyB0byB1cGRhdGUgdGhlIHN0YXRpYyBub3JtYWwgZmxvdyB4L3kg
b2YgcG9zaXRpb25lZCBlbGVtZW50cy4KQEAgLTgwMCw3ICs4MDAsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgCiAgICAgbV9vdmVyZmxvd0hlaWdodCA9
IDA7CiAgICAgICAgIAotICAgIG1faGVpZ2h0ID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7
CisgICAgc2V0SGVpZ2h0KGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKICAgICBpbnQgdG9B
ZGQgPSBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoKTsKIAogICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGNsZWFyIG91dCBv
dXIgbGluZSBib3hlcy4KQEAgLTgzMCw2ICs4MzAsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgIHdoaWxlIChvKSB7CiAgICAgICAgICAgICBvLT5p
bnZhbGlkYXRlVmVydGljYWxQb3NpdGlvbigpOwogICAgICAgICAgICAgaWYgKG8tPmlzUmVwbGFj
ZWQoKSB8fCBvLT5pc0Zsb2F0aW5nKCkgfHwgby0+aXNQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAg
ICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG8pOworICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChyZWxheW91dENoaWxkcmVuIHx8IG8t
PnN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkgfHwgby0+c3R5bGUoKS0+aGVpZ2h0KCkuaXNQ
ZXJjZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIG8tPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1
ZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTgzOCwxMCArODQwLDEwIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICAg
ICAgby0+c2V0UHJlZldpZHRoc0RpcnR5KHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGlmIChvLT5pc1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
by0+Y29udGFpbmluZ0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRPYmplY3Qobyk7CisgICAgICAg
ICAgICAgICAgICAgIG8tPmNvbnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0
KGJveCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChv
LT5pc0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdHMuYXBwZW5kKEZs
b2F0V2l0aFJlY3QobykpOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRzLmFwcGVuZChG
bG9hdFdpdGhSZWN0KGJveCkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmdWxsTGF5
b3V0IHx8IG8tPm5lZWRzTGF5b3V0KCkpIC8vIFJlcGxhY2VkIGVsZW1lbnRzCiAgICAgICAgICAg
ICAgICAgICAgICAgICBvLT5kaXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0KTsKIApAQCAtODk1LDgg
Kzg5Nyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKIAogICAg
ICAgICBpZiAoc3RhcnRMaW5lKSB7CiAgICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRzID0gdHJ1
ZTsKLSAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBtX2hlaWdodDsKLSAgICAgICAgICAgIHJlcGFp
bnRCb3R0b20gPSBtX2hlaWdodDsKKyAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBoZWlnaHQoKTsK
KyAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBoZWlnaHQoKTsKICAgICAgICAgICAgIFJlbmRl
ckFyZW5hKiBhcmVuYSA9IHJlbmRlckFyZW5hKCk7CiAgICAgICAgICAgICBSb290SW5saW5lQm94
KiBib3ggPSBzdGFydExpbmU7CiAgICAgICAgICAgICB3aGlsZSAoYm94KSB7CkBAIC05MjksNyAr
OTMxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAg
ICBib29sIGVuZExpbmVNYXRjaGVkID0gZmFsc2U7CiAgICAgICAgIGJvb2wgY2hlY2tGb3JFbmRM
aW5lTWF0Y2ggPSBlbmRMaW5lOwogICAgICAgICBib29sIGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RM
aW5lID0gZmFsc2U7Ci0gICAgICAgIGludCBsYXN0SGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAg
IGludCBsYXN0SGVpZ2h0ID0gaGVpZ2h0KCk7CiAKICAgICAgICAgd2hpbGUgKCFlbmQuYXRFbmQo
KSkgewogICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVjZXNzYXJ5IGJlZm9y
ZSB0aGUgZmlyc3QgaXRlcmF0aW9uIG9yIGNhbiBpdCBiZSBtb3ZlZCB0byB0aGUgZW5kPwpAQCAt
MTA3Miw3ICsxMDc0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4o
YgogICAgICAgICAgICAgICAgIGxhc3RGbG9hdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGxhc3RIZWlnaHQgPSBtX2hlaWdodDsKKyAg
ICAgICAgICAgIGxhc3RIZWlnaHQgPSBoZWlnaHQoKTsKICAgICAgICAgICAgIHNOdW1NaWRwb2lu
dHMgPSAwOwogICAgICAgICAgICAgc0N1cnJNaWRwb2ludCA9IDA7CiAgICAgICAgICAgICByZXNv
bHZlci5zZXRQb3NpdGlvbihlbmQpOwpAQCAtMTA4MSw3ICsxMDgzLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICBpZiAoZW5kTGluZSkgewogICAg
ICAgICAgICAgaWYgKGVuZExpbmVNYXRjaGVkKSB7CiAgICAgICAgICAgICAgICAgLy8gQXR0YWNo
IGFsbCB0aGUgcmVtYWluaW5nIGxpbmVzLCBhbmQgdGhlbiBhZGp1c3QgdGhlaXIgeS1wb3NpdGlv
bnMgYXMgbmVlZGVkLgotICAgICAgICAgICAgICAgIGludCBkZWx0YSA9IG1faGVpZ2h0IC0gZW5k
TGluZVlQb3M7CisgICAgICAgICAgICAgICAgaW50IGRlbHRhID0gaGVpZ2h0KCkgLSBlbmRMaW5l
WVBvczsKICAgICAgICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBlbmRMaW5l
OyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAgICAgICAg
ICBsaW5lLT5hdHRhY2hMaW5lKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSkgewpA
QCAtMTA4OSwxNyArMTA5MSwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGls
ZHJlbihiCiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50Qm90dG9tID0gbWF4KHJlcGFp
bnRCb3R0b20sIGxpbmUtPmJvdHRvbU92ZXJmbG93KCkgKyBtYXgoZGVsdGEsIDApKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmUtPmFkanVzdFBvc2l0aW9uKDAsIGRlbHRhKTsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoVmVjdG9yPFJlbmRlck9i
amVjdCo+KiBjbGVhbkxpbmVGbG9hdHMgPSBsaW5lLT5mbG9hdHNQdHIoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBjbGVh
bkxpbmVGbG9hdHMtPmVuZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChWZWN0b3I8
UmVuZGVyT2JqZWN0Kj46Oml0ZXJhdG9yIGYgPSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCk7IGYg
IT0gZW5kOyArK2YpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxvYXRUb3Ag
PSAoKmYpLT55UG9zKCkgLSAoKmYpLT5tYXJnaW5Ub3AoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKFZlY3RvcjxSZW5kZXJCb3gqPiogY2xlYW5MaW5lRmxvYXRzID0gbGluZS0+ZmxvYXRzUHRy
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0
b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoVmVjdG9yPFJlbmRlckJveCo+OjppdGVyYXRvciBmID0gY2xlYW5MaW5lRmxvYXRzLT5i
ZWdpbigpOyBmICE9IGVuZDsgKytmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGZsb2F0VG9wID0gKCpmKS0+eSgpIC0gKCpmKS0+bWFyZ2luVG9wKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QoKmYpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faGVpZ2h0ID0gZmxvYXRUb3AgKyBkZWx0YTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXRIZWlnaHQoZmxvYXRUb3AgKyBkZWx0YSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBtX2hlaWdodCA9IGxhc3RSb290Qm94KCktPmJsb2NrSGVpZ2h0KCk7CisgICAgICAg
ICAgICAgICAgc2V0SGVpZ2h0KGxhc3RSb290Qm94KCktPmJsb2NrSGVpZ2h0KCkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBEZWxldGUgYWxsIHRoZSByZW1haW5p
bmcgbGluZXMuCiAgICAgICAgICAgICAgICAgSW5saW5lUnVuQm94KiBsaW5lID0gZW5kTGluZTsK
QEAgLTExMzUsMTYgKzExMzcsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hp
bGRyZW4oYgogICAgIHNDdXJyTWlkcG9pbnQgPSAwOwogCiAgICAgLy8gTm93IGFkZCBpbiB0aGUg
Ym90dG9tIGJvcmRlci9wYWRkaW5nLgotICAgIG1faGVpZ2h0ICs9IHRvQWRkOworICAgIHNldEhl
aWdodChoZWlnaHQoKSArIHRvQWRkKTsKIAogICAgIC8vIEFsd2F5cyBtYWtlIHN1cmUgdGhpcyBp
cyBhdCBsZWFzdCBvdXIgaGVpZ2h0LgotICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9oZWln
aHQsIG1fb3ZlcmZsb3dIZWlnaHQpOworICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgoaGVpZ2h0
KCksIG1fb3ZlcmZsb3dIZWlnaHQpOwogCiAgICAgLy8gU2VlIGlmIGFueSBsaW5lcyBzcGlsbCBv
dXQgb2YgdGhlIGJsb2NrLiAgSWYgc28sIHdlIG5lZWQgdG8gdXBkYXRlIG91ciBvdmVyZmxvdyB3
aWR0aC4KICAgICBjaGVja0xpbmVzRm9yT3ZlcmZsb3coKTsKIAogICAgIGlmICghZmlyc3RMaW5l
Qm94KCkgJiYgaGFzTGluZUlmRW1wdHkoKSkKLSAgICAgICAgbV9oZWlnaHQgKz0gbGluZUhlaWdo
dCh0cnVlLCB0cnVlKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbGluZUhlaWdodCh0
cnVlLCB0cnVlKSk7CiAKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhbnkgbGluZXMgdGhhdCBzcGls
bCBvdXQgb2Ygb3VyIGJsb2NrLiAgSWYgd2UgZG8sIHRoZW4gd2Ugd2lsbCBwb3NzaWJseSBuZWVk
IHRvCiAgICAgLy8gdHJ1bmNhdGUgdGV4dC4KQEAgLTExNjEsMTAgKzExNjMsMTAgQEAgUm9vdElu
bGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YQogICAgIGlmICghZnVsbExheW91dCkg
ewogICAgICAgICBzaXplX3QgZmxvYXRJbmRleCA9IDA7CiAgICAgICAgIGZvciAoY3VyciA9IGZp
cnN0Um9vdEJveCgpOyBjdXJyICYmICFjdXJyLT5pc0RpcnR5KCk7IGN1cnIgPSBjdXJyLT5uZXh0
Um9vdEJveCgpKSB7Ci0gICAgICAgICAgICBpZiAoVmVjdG9yPFJlbmRlck9iamVjdCo+KiBjbGVh
bkxpbmVGbG9hdHMgPSBjdXJyLT5mbG9hdHNQdHIoKSkgewotICAgICAgICAgICAgICAgIFZlY3Rv
cjxSZW5kZXJPYmplY3QqPjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsK
LSAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJPYmplY3QqPjo6aXRlcmF0b3IgbyA9
IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgbyAhPSBlbmQ7ICsrbykgewotICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJPYmplY3QqIGYgPSAqbzsKKyAgICAgICAgICAgIGlmIChWZWN0b3I8UmVu
ZGVyQm94Kj4qIGNsZWFuTGluZUZsb2F0cyA9IGN1cnItPmZsb2F0c1B0cigpKSB7CisgICAgICAg
ICAgICAgICAgVmVjdG9yPFJlbmRlckJveCo+OjppdGVyYXRvciBlbmQgPSBjbGVhbkxpbmVGbG9h
dHMtPmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoVmVjdG9yPFJlbmRlckJveCo+OjppdGVy
YXRvciBvID0gY2xlYW5MaW5lRmxvYXRzLT5iZWdpbigpOyBvICE9IGVuZDsgKytvKSB7CisgICAg
ICAgICAgICAgICAgICAgIFJlbmRlckJveCogZiA9ICpvOwogICAgICAgICAgICAgICAgICAgICBJ
bnRTaXplIG5ld1NpemUoZi0+d2lkdGgoKSArIGYtPm1hcmdpbkxlZnQoKSArZi0+bWFyZ2luUmln
aHQoKSwgZi0+aGVpZ2h0KCkgKyBmLT5tYXJnaW5Ub3AoKSArIGYtPm1hcmdpbkJvdHRvbSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0SW5kZXggPCBmbG9hdHMuc2l6ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QgIT0gZikg
ewpAQCAtMTIyNiwxNSArMTIyOCwxNSBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0
ZXJtaW5lU3RhCiAKICAgICBudW1DbGVhbkZsb2F0cyA9IDA7CiAgICAgaWYgKCFmbG9hdHMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGludCBzYXZlZEhlaWdodCA9IG1faGVpZ2h0OworICAgICAgICBp
bnQgc2F2ZWRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICAgICAgLy8gUmVzdG9yZSBmbG9hdHMgZnJv
bSBjbGVhbiBsaW5lcy4KICAgICAgICAgUm9vdElubGluZUJveCogbGluZSA9IGZpcnN0Um9vdEJv
eCgpOwogICAgICAgICB3aGlsZSAobGluZSAhPSBjdXJyKSB7Ci0gICAgICAgICAgICBpZiAoVmVj
dG9yPFJlbmRlck9iamVjdCo+KiBjbGVhbkxpbmVGbG9hdHMgPSBsaW5lLT5mbG9hdHNQdHIoKSkg
ewotICAgICAgICAgICAgICAgIFZlY3RvcjxSZW5kZXJPYmplY3QqPjo6aXRlcmF0b3IgZW5kID0g
Y2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxSZW5k
ZXJPYmplY3QqPjo6aXRlcmF0b3IgZiA9IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgZiAhPSBl
bmQ7ICsrZikgeworICAgICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJCb3gqPiogY2xlYW5MaW5l
RmxvYXRzID0gbGluZS0+ZmxvYXRzUHRyKCkpIHsKKyAgICAgICAgICAgICAgICBWZWN0b3I8UmVu
ZGVyQm94Kj46Oml0ZXJhdG9yIGVuZCA9IGNsZWFuTGluZUZsb2F0cy0+ZW5kKCk7CisgICAgICAg
ICAgICAgICAgZm9yIChWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGYgPSBjbGVhbkxpbmVG
bG9hdHMtPmJlZ2luKCk7IGYgIT0gZW5kOyArK2YpIHsKICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0RmxvYXRpbmdPYmplY3QoKmYpOwotICAgICAgICAgICAgICAgICAgICBtX2hlaWdodCA9ICgq
ZiktPnlQb3MoKSAtICgqZiktPm1hcmdpblRvcCgpOworICAgICAgICAgICAgICAgICAgICBzZXRI
ZWlnaHQoKCpmKS0+eSgpIC0gKCpmKS0+bWFyZ2luVG9wKCkpOwogICAgICAgICAgICAgICAgICAg
ICBwb3NpdGlvbk5ld0Zsb2F0cygpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZmxvYXRz
W251bUNsZWFuRmxvYXRzXS5vYmplY3QgPT0gKmYpOwogICAgICAgICAgICAgICAgICAgICBudW1D
bGVhbkZsb2F0cysrOwpAQCAtMTI0Miw3ICsxMjQ0LDcgQEAgUm9vdElubGluZUJveCogUmVuZGVy
QmxvY2s6OmRldGVybWluZVN0YQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGluZSA9IGxp
bmUtPm5leHRSb290Qm94KCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9oZWlnaHQgPSBzYXZlZEhl
aWdodDsKKyAgICAgICAgc2V0SGVpZ2h0KHNhdmVkSGVpZ2h0KTsKICAgICB9CiAKICAgICBtX2Zp
cnN0TGluZSA9ICFsYXN0OwpAQCAtMTI1MSw3ICsxMjUzLDcgQEAgUm9vdElubGluZUJveCogUmVu
ZGVyQmxvY2s6OmRldGVybWluZVN0YQogICAgIFJlbmRlck9iamVjdCogc3RhcnRPYmo7CiAgICAg
aW50IHBvcyA9IDA7CiAgICAgaWYgKGxhc3QpIHsKLSAgICAgICAgbV9oZWlnaHQgPSBsYXN0LT5i
bG9ja0hlaWdodCgpOworICAgICAgICBzZXRIZWlnaHQobGFzdC0+YmxvY2tIZWlnaHQoKSk7CiAg
ICAgICAgIHN0YXJ0T2JqID0gbGFzdC0+bGluZUJyZWFrT2JqKCk7CiAgICAgICAgIHBvcyA9IGxh
c3QtPmxpbmVCcmVha1BvcygpOwogICAgICAgICByZXNvbHZlci5zZXRTdGF0dXMobGFzdC0+bGlu
ZUJyZWFrQmlkaVN0YXR1cygpKTsKQEAgLTEzMTEsMTIgKzEzMTMsMTIgQEAgYm9vbCBSZW5kZXJC
bG9jazo6bWF0Y2hlZEVuZExpbmUoY29uc3QgSQogICAgICAgICBpZiAocmVzb2x2ZXIuc3RhdHVz
KCkgIT0gZW5kTGluZVN0YXR1cykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICBpbnQgZGVsdGEgPSBtX2hlaWdodCAtIGVuZFlQb3M7CisgICAgICAgIGludCBkZWx0YSA9IGhl
aWdodCgpIC0gZW5kWVBvczsKICAgICAgICAgaWYgKCFkZWx0YSB8fCAhbV9mbG9hdGluZ09iamVj
dHMpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICAvLyBTZWUgaWYgYW55IGZs
b2F0cyBlbmQgaW4gdGhlIHJhbmdlIGFsb25nIHdoaWNoIHdlIHdhbnQgdG8gc2hpZnQgdGhlIGxp
bmVzIHZlcnRpY2FsbHkuCi0gICAgICAgIGludCB0b3AgPSBtaW4obV9oZWlnaHQsIGVuZFlQb3Mp
OworICAgICAgICBpbnQgdG9wID0gbWluKGhlaWdodCgpLCBlbmRZUG9zKTsKIAogICAgICAgICBS
b290SW5saW5lQm94KiBsYXN0TGluZSA9IGVuZExpbmU7CiAgICAgICAgIHdoaWxlIChSb290SW5s
aW5lQm94KiBuZXh0TGluZSA9IGxhc3RMaW5lLT5uZXh0Um9vdEJveCgpKQpAQCAtMTM0NywxMCAr
MTM0OSwxMCBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShjb25zdCBJCiAgICAg
ICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgICAgIGVuZFlQb3MgPSBsaW5lLT5ibG9j
a0hlaWdodCgpOwogCi0gICAgICAgICAgICBpbnQgZGVsdGEgPSBtX2hlaWdodCAtIGVuZFlQb3M7
CisgICAgICAgICAgICBpbnQgZGVsdGEgPSBoZWlnaHQoKSAtIGVuZFlQb3M7CiAgICAgICAgICAg
ICBpZiAoZGVsdGEgJiYgbV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAgICAgICAgICAgICAvLyBT
ZWUgaWYgYW55IGZsb2F0cyBlbmQgaW4gdGhlIHJhbmdlIGFsb25nIHdoaWNoIHdlIHdhbnQgdG8g
c2hpZnQgdGhlIGxpbmVzIHZlcnRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaW50IHRvcCA9IG1p
bihtX2hlaWdodCwgZW5kWVBvcyk7CisgICAgICAgICAgICAgICAgaW50IHRvcCA9IG1pbihoZWln
aHQoKSwgZW5kWVBvcyk7CiAKICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiBsYXN0TGlu
ZSA9IGVuZExpbmU7CiAgICAgICAgICAgICAgICAgd2hpbGUgKFJvb3RJbmxpbmVCb3gqIG5leHRM
aW5lID0gbGFzdExpbmUtPm5leHRSb290Qm94KCkpCkBAIC0xNDU5LDcgKzE0NjEsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpza2lwVHJhaWxpbmdXaGl0ZXNwYWNlCiAgICAgd2hpbGUgKCFpdGVyYXRv
ci5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3goaXRlcmF0b3IpKSB7CiAgICAgICAgIFJlbmRl
ck9iamVjdCogb2JqZWN0ID0gaXRlcmF0b3Iub2JqOwogICAgICAgICBpZiAob2JqZWN0LT5pc0Zs
b2F0aW5nKCkpIHsKLSAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KG9iamVjdCk7Cisg
ICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdChzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihv
YmplY3QpKTsKICAgICAgICAgfSBlbHNlIGlmIChvYmplY3QtPmlzUG9zaXRpb25lZCgpKSB7CiAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhlIG1hdGggaGVyZSBpcyBhY3R1YWxseSBub3QgcmVhbGx5
IHJpZ2h0LiAgSXQncyBhIGJlc3QtZ3Vlc3MgYXBwcm94aW1hdGlvbiB0aGF0CiAgICAgICAgICAg
ICAvLyB3aWxsIHdvcmsgZm9yIHRoZSBjb21tb24gY2FzZXMKQEAgLTE0NjgsMTkgKzE0NzAsMTkg
QEAgdm9pZCBSZW5kZXJCbG9jazo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZQogICAgICAgICAgICAg
ICAgIC8vIEEgcmVsYXRpdmUgcG9zaXRpb25lZCBpbmxpbmUgZW5jbG9zZXMgdXMuICBJbiB0aGlz
IGNhc2UsIHdlIGFsc28gaGF2ZSB0byBkZXRlcm1pbmUgb3VyCiAgICAgICAgICAgICAgICAgLy8g
cG9zaXRpb24gYXMgdGhvdWdoIHdlIHdlcmUgYW4gaW5saW5lLiAgU2V0IHxzdGF0aWNYfCBhbmQg
fHN0YXRpY1l8IG9uIHRoZSByZWxhdGl2ZSBwb3NpdGlvbmVkCiAgICAgICAgICAgICAgICAgLy8g
aW5saW5lIHNvIHRoYXQgd2UgY2FuIG9idGFpbiB0aGUgdmFsdWUgbGF0ZXIuCi0gICAgICAgICAg
ICAgICAgYy0+c2V0U3RhdGljWChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBsZWZ0T2Zm
c2V0KG1faGVpZ2h0KSA6IHJpZ2h0T2Zmc2V0KG1faGVpZ2h0KSk7Ci0gICAgICAgICAgICAgICAg
Yy0+c2V0U3RhdGljWShtX2hlaWdodCk7CisgICAgICAgICAgICAgICAgYy0+c2V0U3RhdGljWChz
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBsZWZ0T2Zmc2V0KGhlaWdodCgpKSA6IHJpZ2h0
T2Zmc2V0KGhlaWdodCgpKSk7CisgICAgICAgICAgICAgICAgYy0+c2V0U3RhdGljWShoZWlnaHQo
KSk7CiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBpZiAob2JqZWN0LT5oYXNTdGF0
aWNYKCkpIHsKICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LT5zdHlsZSgpLT5pc09yaWdpbmFs
RGlzcGxheUlubGluZVR5cGUoKSkKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRTdGF0
aWNYKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGxlZnRPZmZzZXQobV9oZWlnaHQpIDog
d2lkdGgoKSAtIHJpZ2h0T2Zmc2V0KG1faGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIG9i
amVjdC0+c2V0U3RhdGljWChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBsZWZ0T2Zmc2V0
KGhlaWdodCgpKSA6IHdpZHRoKCkgLSByaWdodE9mZnNldChoZWlnaHQoKSkpOwogICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRTdGF0aWNYKHN0eWxl
KCktPmRpcmVjdGlvbigpID09IExUUiA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgOiBi
b3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkpOwogICAgICAgICAgICAgfQogICAgIAogICAg
ICAgICAgICAgaWYgKG9iamVjdC0+aGFzU3RhdGljWSgpKQotICAgICAgICAgICAgICAgIG9iamVj
dC0+c2V0U3RhdGljWShtX2hlaWdodCk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRTdGF0
aWNZKGhlaWdodCgpKTsKICAgICAgICAgfQogICAgICAgICBpdGVyYXRvci5pbmNyZW1lbnQoKTsK
ICAgICB9CkBAIC0xNDg4LDEzICsxNDkwLDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNraXBUcmFp
bGluZ1doaXRlc3BhY2UKIAogaW50IFJlbmRlckJsb2NrOjpza2lwTGVhZGluZ1doaXRlc3BhY2Uo
SW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKIHsKLSAgICBpbnQgYXZhaWxhYmxlV2lkdGgg
PSBsaW5lV2lkdGgobV9oZWlnaHQpOworICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGxpbmVXaWR0
aChoZWlnaHQoKSk7CiAgICAgd2hpbGUgKCFyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkgJiYg
IXJlcXVpcmVzTGluZUJveChyZXNvbHZlci5wb3NpdGlvbigpKSkgewogICAgICAgICBSZW5kZXJP
YmplY3QqIG9iamVjdCA9IHJlc29sdmVyLnBvc2l0aW9uKCkub2JqOwogICAgICAgICBpZiAob2Jq
ZWN0LT5pc0Zsb2F0aW5nKCkpIHsKLSAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KG9i
amVjdCk7CisgICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdChzdGF0aWNfY2FzdDxSZW5k
ZXJCb3gqPihvYmplY3QpKTsKICAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7Ci0gICAg
ICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGxpbmVXaWR0aChtX2hlaWdodCk7CisgICAgICAgICAg
ICBhdmFpbGFibGVXaWR0aCA9IGxpbmVXaWR0aChoZWlnaHQoKSk7CiAgICAgICAgIH0gZWxzZSBp
ZiAob2JqZWN0LT5pc1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBt
YXRoIGhlcmUgaXMgYWN0dWFsbHkgbm90IHJlYWxseSByaWdodC4gIEl0J3MgYSBiZXN0LWd1ZXNz
IGFwcHJveGltYXRpb24gdGhhdAogICAgICAgICAgICAgLy8gd2lsbCB3b3JrIGZvciB0aGUgY29t
bW9uIGNhc2VzCkBAIC0xNTAzLDE5ICsxNTA1LDE5IEBAIGludCBSZW5kZXJCbG9jazo6c2tpcExl
YWRpbmdXaGl0ZXNwYWNlKEkKICAgICAgICAgICAgICAgICAvLyBBIHJlbGF0aXZlIHBvc2l0aW9u
ZWQgaW5saW5lIGVuY2xvc2VzIHVzLiAgSW4gdGhpcyBjYXNlLCB3ZSBhbHNvIGhhdmUgdG8gZGV0
ZXJtaW5lIG91cgogICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIGFzIHRob3VnaCB3ZSB3ZXJl
IGFuIGlubGluZS4gIFNldCB8c3RhdGljWHwgYW5kIHxzdGF0aWNZfCBvbiB0aGUgcmVsYXRpdmUg
cG9zaXRpb25lZAogICAgICAgICAgICAgICAgIC8vIGlubGluZSBzbyB0aGF0IHdlIGNhbiBvYnRh
aW4gdGhlIHZhbHVlIGxhdGVyLgotICAgICAgICAgICAgICAgIGMtPnNldFN0YXRpY1goc3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbGVmdE9mZnNldChtX2hlaWdodCkgOiByaWdodE9mZnNl
dChtX2hlaWdodCkpOwotICAgICAgICAgICAgICAgIGMtPnNldFN0YXRpY1kobV9oZWlnaHQpOwor
ICAgICAgICAgICAgICAgIGMtPnNldFN0YXRpY1goc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRS
ID8gbGVmdE9mZnNldChoZWlnaHQoKSkgOiByaWdodE9mZnNldChoZWlnaHQoKSkpOworICAgICAg
ICAgICAgICAgIGMtPnNldFN0YXRpY1koaGVpZ2h0KCkpOwogICAgICAgICAgICAgfQogICAgIAog
ICAgICAgICAgICAgaWYgKG9iamVjdC0+aGFzU3RhdGljWCgpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKG9iamVjdC0+c3R5bGUoKS0+aXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0U3RhdGljWChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIgPyBsZWZ0T2Zmc2V0KG1faGVpZ2h0KSA6IHdpZHRoKCkgLSByaWdodE9mZnNldChtX2hl
aWdodCkpOworICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnNldFN0YXRpY1goc3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gTFRSID8gbGVmdE9mZnNldChoZWlnaHQoKSkgOiB3aWR0aCgpIC0gcmln
aHRPZmZzZXQoaGVpZ2h0KCkpKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdC0+c2V0U3RhdGljWChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBi
b3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdo
dCgpKTsKICAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIGlmIChvYmplY3QtPmhhc1N0
YXRpY1koKSkKLSAgICAgICAgICAgICAgICBvYmplY3QtPnNldFN0YXRpY1kobV9oZWlnaHQpOwor
ICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0U3RhdGljWShoZWlnaHQoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgcmVzb2x2ZXIuaW5jcmVtZW50KCk7CiAgICAgfQpAQCAtMTU0NSw3ICsxNTQ3LDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Zml0QmVsb3dGbG9hdHMoaW50IHdpZAogICAgIEFTU0VSVCh3
aWR0aFRvRml0ID4gYXZhaWxhYmxlV2lkdGgpOwogCiAgICAgaW50IGZsb2F0Qm90dG9tOwotICAg
IGludCBsYXN0RmxvYXRCb3R0b20gPSBtX2hlaWdodDsKKyAgICBpbnQgbGFzdEZsb2F0Qm90dG9t
ID0gaGVpZ2h0KCk7CiAgICAgaW50IG5ld0xpbmVXaWR0aCA9IGF2YWlsYWJsZVdpZHRoOwogICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGZsb2F0Qm90dG9tID0gbmV4dEZsb2F0Qm90dG9tQmVs
b3cobGFzdEZsb2F0Qm90dG9tKTsKQEAgLTE1NTksNyArMTU2MSw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmZpdEJlbG93RmxvYXRzKGludCB3aWQKICAgICB9CiAKICAgICBpZiAobmV3TGluZVdpZHRo
ID4gYXZhaWxhYmxlV2lkdGgpIHsKLSAgICAgICAgbV9oZWlnaHQgPSBsYXN0RmxvYXRCb3R0b207
CisgICAgICAgIHNldEhlaWdodChsYXN0RmxvYXRCb3R0b20pOwogICAgICAgICBhdmFpbGFibGVX
aWR0aCA9IG5ld0xpbmVXaWR0aDsKICAgICB9CiB9CkBAIC0xNjUyLDEzICsxNjU0LDE0IEBAIElu
bGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgaWYgKG8tPmlz
RmxvYXRpbmdPclBvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgLy8gYWRkIHRvIHNwZWNpYWwg
b2JqZWN0cy4uLgogICAgICAgICAgICAgaWYgKG8tPmlzRmxvYXRpbmcoKSkgewotICAgICAgICAg
ICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KG8pOworICAgICAgICAgICAgICAgIFJlbmRlckJv
eCogZmxvYXRCb3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihvKTsKKyAgICAgICAgICAgICAg
ICBpbnNlcnRGbG9hdGluZ09iamVjdChmbG9hdEJveCk7CiAgICAgICAgICAgICAgICAgLy8gY2hl
Y2sgaWYgaXQgZml0cyBpbiB0aGUgY3VycmVudCBsaW5lLgogICAgICAgICAgICAgICAgIC8vIElm
IGl0IGRvZXMsIHBvc2l0aW9uIGl0IG5vdywgb3RoZXJ3aXNlLCBwb3NpdGlvbgogICAgICAgICAg
ICAgICAgIC8vIGl0IGFmdGVyIG1vdmluZyB0byBuZXh0IGxpbmUgKGluIG5ld0xpbmUoKSBmdW5j
KQotICAgICAgICAgICAgICAgIGlmIChmbG9hdHNGaXRPbkxpbmUgJiYgby0+d2lkdGgoKSArIG8t
Pm1hcmdpbkxlZnQoKSArIG8tPm1hcmdpblJpZ2h0KCkgKyB3ICsgdG1wVyA8PSB3aWR0aCkgewor
ICAgICAgICAgICAgICAgIGlmIChmbG9hdHNGaXRPbkxpbmUgJiYgZmxvYXRCb3gtPndpZHRoKCkg
KyBmbG9hdEJveC0+bWFyZ2luTGVmdCgpICsgZmxvYXRCb3gtPm1hcmdpblJpZ2h0KCkgKyB3ICsg
dG1wVyA8PSB3aWR0aCkgewogICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbk5ld0Zsb2F0cygp
OwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGxpbmVXaWR0aChtX2hlaWdodCk7CisgICAg
ICAgICAgICAgICAgICAgIHdpZHRoID0gbGluZVdpZHRoKGhlaWdodCgpKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgZmxvYXRzRml0T25MaW5lID0gZmFsc2U7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG8tPmlzUG9zaXRpb25lZCgpKSB7CkBAIC0xNjc3LDcg
KzE2ODAsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAg
ICAgICAgICAgICAgLy8gYW5kIGRldGVybWluZSBvdXIgc3RhdGljIHkgcG9zaXRpb24gbm93Lgog
ICAgICAgICAgICAgICAgIGJvb2wgbmVlZFRvU2V0U3RhdGljWSA9IG8tPmhhc1N0YXRpY1koKTsK
ICAgICAgICAgICAgICAgICBpZiAoby0+aGFzU3RhdGljWSgpICYmIGlzSW5saW5lVHlwZSkgewot
ICAgICAgICAgICAgICAgICAgICBvLT5zZXRTdGF0aWNZKG1faGVpZ2h0KTsKKyAgICAgICAgICAg
ICAgICAgICAgby0+c2V0U3RhdGljWShoZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5l
ZWRUb1NldFN0YXRpY1kgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCkBAIC0xNzI2LDYgKzE3MjksOCBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6Zmlu
ZE5leHRMaW5lCiAgICAgICAgICAgICB0bXBXICs9IG8tPm1hcmdpbkxlZnQoKSArIG8tPmJvcmRl
ckxlZnQoKSArIG8tPnBhZGRpbmdMZWZ0KCkgKwogICAgICAgICAgICAgICAgICAgICBvLT5tYXJn
aW5SaWdodCgpICsgby0+Ym9yZGVyUmlnaHQoKSArIG8tPnBhZGRpbmdSaWdodCgpOwogICAgICAg
ICB9IGVsc2UgaWYgKG8tPmlzUmVwbGFjZWQoKSkgeworICAgICAgICAgICAgUmVuZGVyQm94KiBy
ZXBsYWNlZEJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG8pOworCiAgICAgICAgICAgICAv
LyBCcmVhayBvbiByZXBsYWNlZCBlbGVtZW50cyBpZiBlaXRoZXIgaGFzIG5vcm1hbCB3aGl0ZS1z
cGFjZS4KICAgICAgICAgICAgIGlmICgoYXV0b1dyYXAgfHwgUmVuZGVyU3R5bGU6OmF1dG9XcmFw
KGxhc3RXUykpICYmICghby0+aXNJbWFnZSgpIHx8IGFsbG93SW1hZ2VzVG9CcmVhaykpIHsKICAg
ICAgICAgICAgICAgICB3ICs9IHRtcFc7CkBAIC0xNzU1LDcgKzE3NjAsNyBAQCBJbmxpbmVJdGVy
YXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgICAgIGlnbm9y
aW5nU3BhY2VzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICB0bXBXICs9IG8tPndpZHRoKCkgKyBvLT5tYXJnaW5MZWZ0KCkgKyBv
LT5tYXJnaW5SaWdodCgpICsgaW5saW5lV2lkdGgobyk7CisgICAgICAgICAgICAgICAgdG1wVyAr
PSByZXBsYWNlZEJveC0+d2lkdGgoKSArIHJlcGxhY2VkQm94LT5tYXJnaW5MZWZ0KCkgKyByZXBs
YWNlZEJveC0+bWFyZ2luUmlnaHQoKSArIGlubGluZVdpZHRoKG8pOwogICAgICAgICB9IGVsc2Ug
aWYgKG8tPmlzVGV4dCgpKSB7CiAgICAgICAgICAgICBpZiAoIXBvcykKICAgICAgICAgICAgICAg
ICBhcHBsaWVkU3RhcnRXaWR0aCA9IGZhbHNlOwpAQCAtMjE3Miw3ICsyMTc3LDcgQEAgSW5saW5l
SXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogCiB2b2lkIFJlbmRlckJsb2NrOjpj
aGVja0xpbmVzRm9yT3ZlcmZsb3coKQogewotICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1fd2lkdGg7
CisgICAgbV9vdmVyZmxvd1dpZHRoID0gd2lkdGgoKTsKICAgICBmb3IgKFJvb3RJbmxpbmVCb3gq
IGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkp
IHsKICAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4oY3Vyci0+bGVmdE92ZXJmbG93KCksIG1f
b3ZlcmZsb3dMZWZ0KTsKICAgICAgICAgbV9vdmVyZmxvd1RvcCA9IG1pbihjdXJyLT50b3BPdmVy
ZmxvdygpLCBtX292ZXJmbG93VG9wKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmNwcAkocmV2aXNpb24gNDAwNzUp
CisrKyBXZWJDb3JlL3N2Zy9TVkdMZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsOCAr
MzAxLDExIEBAIGZsb2F0IFNWR0xlbmd0aDo6UGVyY2VudGFnZU9mVmlld3BvcnQoZmwKICAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAoY29udGV4dC0+cGFyZW50KCkgJiYgIWNvbnRleHQtPnBhcmVu
dCgpLT5pc1NWR0VsZW1lbnQoKSkgewogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGNvbnRleHQtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIHdpZHRoID0gcmVuZGVyZXIt
PndpZHRoKCk7Ci0gICAgICAgICAgICBoZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCk7CisgICAg
ICAgICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJC
b3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRlckJveCo+KHJlbmRlcmVyKTsKKyAgICAgICAgICAg
ICAgICB3aWR0aCA9IGJveC0+d2lkdGgoKTsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBib3gt
PmhlaWdodCgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBXZWJL
aXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2
aXNpb24gNDAxMDEpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEyIEBACisyMDA5LTAxLTIxICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4K
KworICAgICAgICBEZXZpcnR1YWxpemUgd2lkdGgvaGVpZ2h0L3gveSBvbiBSZW5kZXJPYmplY3Qg
YW5kIG1vdmUgdGhlIG1ldGhvZHMgdG8gUmVuZGVyQm94LgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJSZW5kZXJOb2RlLm1tOgor
ICAgICAgICAoY29weVJlbmRlck5vZGUpOgorCiAyMDA5LTAxLTIxICBNYXJrIFJvd2UgIDxtcm93
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNoZXIuCkluZGV4OiBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTm9kZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUmVuZGVyTm9kZS5tbQkocmV2aXNpb24gNDAwNzUpCisrKyBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUmVuZGVyTm9kZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2ltcG9ydCAiV2ViRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJXZWJIVE1MVmlldy5oIgog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJUZXh0Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5k
ZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dpZGdldC5oPgpAQCAtODgsOCArODksMjcgQEAg
c3RhdGljIFdlYlJlbmRlck5vZGUgKmNvcHlSZW5kZXJOb2RlKFJlbgogCiAgICAgLy8gRklYTUU6
IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IG5vZGUtPmxv
Y2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOworICAgIGludCB4ID0gMDsKKyAgICBpbnQgeSA9
IDA7CisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKyAgICBpZiAobm9k
ZS0+aXNCb3goKSkgeworICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRpY19jYXN0PFJlbmRl
ckJveCo+KG5vZGUpOworICAgICAgICB4ID0gYm94LT54KCk7CisgICAgICAgIHkgPSBib3gtPnko
KTsKKyAgICAgICAgd2lkdGggPSBib3gtPndpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IGJveC0+
aGVpZ2h0KCk7CisgICAgfSBlbHNlIGlmIChub2RlLT5pc1RleHQoKSkgeworICAgICAgICAvLyBG
SVhNRTogUHJlc2VydmUgb2xkIGJlaGF2aW9yIGV2ZW4gdGhvdWdoIGl0J3Mgc3RyYW5nZS4KKyAg
ICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihub2RlKTsK
KyAgICAgICAgeCA9IHRleHQtPmZpcnN0UnVuWCgpOworICAgICAgICB5ID0gdGV4dC0+Zmlyc3RS
dW5ZKCk7CisgICAgICAgIHdpZHRoID0gdGV4dC0+Ym91bmRpbmdCb3hXaWR0aCgpOworICAgICAg
ICBoZWlnaHQgPSB0ZXh0LT5ib3VuZGluZ0JveEhlaWdodCgpOworICAgIH0KKyAgICAKICAgICBX
ZWJSZW5kZXJOb2RlICpyZXN1bHQgPSBbW1dlYlJlbmRlck5vZGUgYWxsb2NdIGluaXRXaXRoTmFt
ZTpuYW1lCi0gICAgICAgIHBvc2l0aW9uOmFic1BvcyByZWN0Ok5TTWFrZVJlY3Qobm9kZS0+eFBv
cygpLCBub2RlLT55UG9zKCksIG5vZGUtPndpZHRoKCksIG5vZGUtPmhlaWdodCgpKQorICAgICAg
ICBwb3NpdGlvbjphYnNQb3MgcmVjdDpOU01ha2VSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpCiAg
ICAgICAgIHZpZXc6dmlldyBjaGlsZHJlbjpjaGlsZHJlbl07CiAKICAgICBbbmFtZSByZWxlYXNl
XTsK
</data>
<flag name="review"
          id="12883"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>