<?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>25056</bug_id>
          
          <creation_ts>2009-04-06 02:06:55 -0700</creation_ts>
          <short_desc>Make editing stop using Position::m_offset directly</short_desc>
          <delta_ts>2010-06-10 17:02:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>25472</dependson>
    
    <dependson>25500</dependson>
          <blocked>19221</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>justin.garcia</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>116591</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-06 02:06:55 -0700</bug_when>
    <thetext>Make editing stop using Position::m_offset directly

In order for us to support neighbor-anchored positions (and to stop having confusion about what m_offset means in different sections of code) we need to make Position::m_offset private.  I&apos;ve attached a patch to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116592</commentid>
    <comment_count>1</comment_count>
      <attachid>29273</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-06 02:07:57 -0700</bug_when>
    <thetext>Created attachment 29273
Make Position::m_offset private and fix callers to use either deprecatedEditingOffset() or offsetInContainer()

 LayoutTests/ChangeLog                              |   11 ++
 .../assert-on-range-creation-expected.txt          |    1 +
 .../execCommand/assert-on-range-creation.html      |   12 ++
 WebCore/ChangeLog                                  |  140 ++++++++++++++++++++
 WebCore/WebCore.base.exp                           |    2 +
 WebCore/dom/Position.h                             |   19 ++-
 WebCore/dom/PositionIterator.h                     |    4 +-
 WebCore/dom/Range.cpp                              |   19 +++-
 WebCore/dom/Range.h                                |    4 +
 WebCore/editing/ApplyStyleCommand.cpp              |   90 +++++++------
 WebCore/editing/BreakBlockquoteCommand.cpp         |    8 +-
 WebCore/editing/CompositeEditCommand.cpp           |   34 +++---
 WebCore/editing/DeleteSelectionCommand.cpp         |   47 ++++----
 WebCore/editing/Editor.cpp                         |   14 +-
 WebCore/editing/InsertLineBreakCommand.cpp         |    6 +-
 .../editing/InsertParagraphSeparatorCommand.cpp    |   14 +-
 WebCore/editing/InsertTextCommand.cpp              |   12 +-
 WebCore/editing/MoveSelectionCommand.cpp           |    6 +-
 WebCore/editing/ReplaceSelectionCommand.cpp        |    2 +-
 WebCore/editing/SelectionController.cpp            |    4 +-
 WebCore/editing/TextIterator.cpp                   |    2 +-
 WebCore/editing/TypingCommand.cpp                  |   10 +-
 WebCore/editing/VisiblePosition.cpp                |   46 +++----
 WebCore/editing/VisibleSelection.cpp               |   12 +-
 WebCore/editing/htmlediting.cpp                    |   20 ++-
 WebCore/editing/visible_units.cpp                  |   40 +++---
 WebCore/page/AccessibilityObject.cpp               |    2 +-
 WebCore/page/AccessibilityRenderObject.cpp         |    4 +-
 WebCore/page/DOMSelection.cpp                      |   16 +-
 WebCore/page/EventHandler.cpp                      |    2 +-
 WebCore/page/Frame.cpp                             |    2 +-
 WebCore/page/mac/AccessibilityObjectWrapper.mm     |    4 +-
 WebCore/rendering/RenderTextControl.cpp            |    2 +-
 WebCore/rendering/RenderTreeAsText.cpp             |    6 +-
 WebKit/mac/ChangeLog                               |   11 ++
 WebKit/mac/WebView/WebFrame.mm                     |    7 +-
 36 files changed, 424 insertions(+), 211 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116605</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-06 02:26:53 -0700</bug_when>
    <thetext>*** Bug 19221 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119039</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-27 15:48:07 -0700</bug_when>
    <thetext>Is there anything I can do for you two gentlemen to make this easier to review?

I&apos;m pretty much done with my SVG rendering tree re-write (at least I&apos;ve fixed the bugs I went in to fix) and plan to start working on fixing position/selection objects in Editing again as of tomorrow.  Further work is at least partially blocked by this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119041</commentid>
    <comment_count>4</comment_count>
      <attachid>29273</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-27 15:56:20 -0700</bug_when>
    <thetext>Comment on attachment 29273
Make Position::m_offset private and fix callers to use either deprecatedEditingOffset() or offsetInContainer()

I think you should first make a patch that changes all use of m_offset to deprecatedEditingOffset(), then a separate patch that moves to using the other functions such as computeOffsetInContainerNode. The renaming should be separate from the behavior change.

&gt; +    // This silently converts the position to being parent relative before setting it on the Range

That&apos;s a strange comment. What else could the function do? What do you mean by &quot;silently&quot;?

&gt;  short Range::compareBoundaryPoints(const Position&amp; a, const Position&amp; b)
&gt;  {
&gt; -    return compareBoundaryPoints(a.node(), a.m_offset, b.node(), b.m_offset);
&gt; +    // FIXME: Some callers pass in sibling-anchored positions.
&gt; +    // Those callers should move to a new comparePositions function, then
&gt; +    // compareBoundaryPoints need only care about parent-anchored node/offset pairs.
&gt; +    return compareBoundaryPoints(a.anchorNode(), a.deprecatedEditingOffset(), b.anchorNode(), b.deprecatedEditingOffset());
&gt;  }

The change above seems wrong. Shouldn&apos;t this be using contaonerNode and computeOffsetInContainerNode?

&gt; +    void setStart(const Position&amp;, ExceptionCode&amp;);
&gt; +    void setEnd(const Position&amp;, ExceptionCode&amp;);

Your change makes Range lower level than Position. Range is based on raw DOM, and Position is coming into its own as a higher level editing building block.

Accordingly, I don&apos;t think these functions should be added to the Range class. We should remove any use of Position from Range.h and put helper functions for using Position with Range into Position.h or some other header.

&gt; -    return Range::compareBoundaryPoints(node, 0, start.node(), start.m_offset) &gt;= 0 &amp;&amp;
&gt; +    return Range::compareBoundaryPoints(node, 0, start.anchorNode(), start.deprecatedEditingOffset()) &gt;= 0 &amp;&amp;

&gt; -    bool isFullyAfterEnd = Range::compareBoundaryPoints(node, 0, end.node(), end.m_offset) &gt; 0;
&gt; +    bool isFullyAfterEnd = Range::compareBoundaryPoints(node, 0, end.containerNode(), end.offsetInContainerNode()) &gt; 0;

This seems strange to me. Two nearly identical cases, but in one you used anchorNode/deprecatedEditingOffset and in the other containerNode/offsetInContainerNode.

The patch is *way* too big for me to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119148</commentid>
    <comment_count>5</comment_count>
      <attachid>29273</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-28 12:38:21 -0700</bug_when>
    <thetext>Comment on attachment 29273
Make Position::m_offset private and fix callers to use either deprecatedEditingOffset() or offsetInContainer()

I think the key here is to first create a patch that is guaranteed to not change behavior (using functions by new names, using functions instead of direct access to data members). And then have a much smaller patch for all the behavior changes.

Review should be straightforward for a patch that changes no behavior. And then we can carefully review the behavior changes without the distraction of the editorial-only changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119157</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-28 13:48:57 -0700</bug_when>
    <thetext>Yes.  Sorry, I had meant to thank you for your previous comments.  I&apos;m working on a new series of patches which should be easier to review.  Thank you again.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29273</attachid>
            <date>2009-04-06 02:07:57 -0700</date>
            <delta_ts>2010-06-10 17:02:57 -0700</delta_ts>
            <desc>Make Position::m_offset private and fix callers to use either deprecatedEditingOffset() or offsetInContainer()</desc>
            <filename>n-m_offset-private-and-fix-callers-to-use-either-deprecatedEditingOffset-or-offsetInContainer-.patch</filename>
            <type>text/plain</type>
            <size>82348</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZThjNTUyMDI2ZjAwNDc4ZGQ3Yzk2ODA4MTM4NWE5ZjgxZDUyNTM4MwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFmNjU0MWEu
LmU0N2ExNGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wMy0zMSAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkaW5nIHRlc3QgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkyMjEKKyAgICAgICAgYmVjYXVzZSBpdCdzIGZpeGVkIGJ5IGZpeGluZzoK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTY2CisK
KyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Fzc2VydC1vbi1yYW5nZS1jcmVhdGlvbi1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvYXNzZXJ0
LW9uLXJhbmdlLWNyZWF0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDA5LTAzLTMwICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9hc3NlcnQtb24tcmFu
Z2UtY3JlYXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFu
ZC9hc3NlcnQtb24tcmFuZ2UtY3JlYXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjI5N2FlODcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Fzc2VydC1vbi1yYW5nZS1jcmVhdGlvbi1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSBAQAorUEFTUyAtLSBXZWJLaXQgZGlkIG5vdCBjcmFzaCBkdXJpbmcgcmFu
Z2UgY3JlYXRpb24uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTIy
MQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9hc3NlcnQtb24t
cmFuZ2UtY3JlYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvYXNz
ZXJ0LW9uLXJhbmdlLWNyZWF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNTYxZjM5ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvYXNzZXJ0LW9uLXJhbmdlLWNyZWF0aW9uLmh0bWwKQEAgLTAsMCArMSwxMiBAQAor
PEJPRFk+PFNDUklQVD4KK2RvY3VtZW50LmV4ZWNDb21tYW5kKCJzZWxlY3RhbGwiKQorZG9jdW1l
bnQuZGVzaWduTW9kZSA9ICJvbiIKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCJpbnNlcnRpbWFnZSIs
IGZhbHNlLCAicmVkIikKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCJjcmVhdGVMaW5rIiwgZmFsc2Us
IHRydWUpCitkb2N1bWVudC5leGVjQ29tbWFuZCgicmVtb3ZlZm9ybWF0IikKKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisKK2RvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIlBBU1MgLS0gV2ViS2l0IGRpZCBu
b3QgY3Jhc2ggZHVyaW5nIHJhbmdlIGNyZWF0aW9uLiAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5MjIxIjsKKzwvU0NSSVBUPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMTQ2MTJhLi42NDZiYTRiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMiw2
ICsyLDE0NiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAg
ICAgIE1ha2UgUG9zaXRpb246Om1fb2Zmc2V0IHByaXZhdGUgYW5kIGZpeCBjYWxsZXJzIHRvIHVz
ZSBlaXRoZXIgZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSBvciBvZmZzZXRJbkNvbnRhaW5lcigp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDk2Ngor
CisgICAgICAgIEFkZCBSYW5nZTo6c2V0U3RhcnQvc2V0RW5kKGNvbnN0IFBvc2l0aW9uJiwgRXhj
ZXB0aW9uQ29kZSkgYW5kIGRlcGxveSBpdAorICAgICAgICB0byBwbGFjZXMgd2hpY2ggcHJldmlv
dXNseSBuZWVkZWQgUG9zaXRpb246Om5vZGUoKSBhbmQgUG9zaXRpb246Om1fb2Zmc2V0IGFjY2Vz
cy4KKworICAgICAgICBQbGFjZXMgd2hpY2ggYXJlIHN0aWxsIHVzaW5nIGRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkgYXJlIGRvaW5nIHNvIGJlY2F1c2UKKyAgICAgICAgSSB3YXMgbm90IGFibGUg
dG8gZGV0ZXJtaW5lIGlmIHRoZXkgY291bGQgc2FmZWx5IHVzZSBvZmZzZXRJbkNvbnRhaW5lcigp
IG9yIG5vdC4KKworICAgICAgICBUaGUgYXNzZXJ0IGluIG9mZnNldEluQ29udGFpbmVyKCkgd2hp
Y2ggY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwb3NpdGlvbgorICAgICAgICBpcyBub3Qg
YmVpbmcgdHJlYXRlZCBhcyBhbiAiZWRpdGluZyBwb3NpdGlvbiIgKGxpa2UgaG93IFtpbWcsIDBd
IG1lYW5zIFtpbWcsIGJlZm9yZV0pCisgICAgICAgIGNhdWdodCBsb3RzIG9mIGNhc2VzIHdoZXJl
IFJhbmdlIG1ldGhvZHMgd2VyZSBiZWluZyB1c2VkIHdpdGggZWRpdGluZyBvZmZzZXRzCisgICAg
ICAgIChhbmQgbGlrZWx5IHdlcmUgZmFpbGluZyBhbmQgY291bGQgaGF2ZSBiZWVuIG1hZGUgdG8g
QVNTRVJUIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcykKKyAgICAgICAgSW4gdGhvc2UgY2FzZXMs
IEkgdXNlZCBjb250YWluZXJOb2RlKCkgYW5kIGNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lcigpIHNv
IHRoYXQKKyAgICAgICAgdGhlIFJhbmdlIG1ldGhvZHMgYXJlIG5vdyBjb3JyZWN0bHkgcmVjZWl2
aW5nIHBhcmVudC1hbmNob3JlZCBub2RlL29mZnNldCBwYWlycy4KKyAgICAgICAgVGhpcyBmaXhl
ZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyMjEgKHdoaWNoIHdh
cyBub3QgbXkgaW50ZW50aW9uLCBidXQgd2FzIGEgbmljZSBzaWRlLWVmZmVjdCkKKyAgICAgICAg
SSBhZGRlZCB0aGUgdGVzdCBjYXNlIGZyb20gYnVnIDE5MjIxIGFzIHdlbGwuCisKKyAgICAgICAg
VGVzdDogZWRpdGluZy9leGVjQ29tbWFuZC9hc3NlcnQtb24tcmFuZ2UtY3JlYXRpb24uaHRtbAor
CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBkb20vUG9zaXRpb24uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpkZXByZWNhdGVkRWRpdGluZ09mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVy
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6UG9zaXRpb25JdGVy
YXRvcik6CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldFN0YXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpzZXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBh
cmVCb3VuZGFyeVBvaW50cyk6CisgICAgICAgICogZG9tL1JhbmdlLmg6CisgICAgICAgICogZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlTZWxlY3RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5VW5zZWxlY3RlZCk6CisgICAg
ICAgIChXZWJDb3JlOjppc1ZhbGlkQ2FyZXRQb3NpdGlvbkluVGV4dE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0U3RhcnRJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRFbmRJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVu
dEF0U3RhcnRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6
c3BsaXRUZXh0RWxlbWVudEF0RW5kSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHJldmlvdXNJZklkZW50aWNhbCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VFbmRXaXRoTmV4dElmSWRlbnRpY2Fs
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9k
ZXMpOgorICAgICAgICAqIGVkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAg
KiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uT3V0c2lkZVRhYlNwYW4pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2VBdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBv
c2l0aW9uRm9yU3BsaXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6
OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjpyZW1vdmVQbGFjZWhvbGRlckF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5TWFpbEJsb2NrcXVvdGVkUGFyYWdyYXBo
KToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbCk6CisgICAgICAgIChXZWJD
b3JlOjp1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Zml4dXBXaGl0ZXNwYWNlKToKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxs
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24p
OgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAg
ICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRUZXh0Q29tbWFuZDo6cGVyZm9ybVRyaXZpYWxSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc2VydFRleHRDb21tYW5kOjppbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0
Q29tbWFuZDo6aW5zZXJ0VGFiKToKKyAgICAgICAgKiBlZGl0aW5nL01vdmVTZWxlY3Rpb25Db21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vdmVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAg
KiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6ZGVidWdSZW5kZXJlcik6CisgICAgICAgICogZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aCk6CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOgor
ICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Vmlz
aWJsZVBvc2l0aW9uOjpkZWJ1Z1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydFZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjplbmRWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0U3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2lu
Z0Jsb2NrRmxvd0VsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2VhcmNoUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VmlzaWJsZVNlbGVjdGlvbjo6ZGVidWdQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpW
aXNpYmxlU2VsZWN0aW9uOjpzaG93VHJlZUZvclRoaXMpOgorICAgICAgICAqIGVkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZVBvc2l0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpyYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQpOgorICAgICAgICAqIGVkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpz
dGFydFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydE9mTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmRQb3NpdGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
bmV4dExpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzdGFydE9mUGFyYWdyYXBoKToK
KyAgICAgICAgKFdlYkNvcmU6OmVuZE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBwYWdlL0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQVhMaW5lU3RhcnRG
b3JWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAqIHBhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpp
bmRleEZvclZpc2libGVQb3NpdGlvbik6CisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjphbmNob3JOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6YW5jaG9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVNlbGVjdGlvbjo6Zm9jdXNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlv
bjo6Zm9jdXNPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpiYXNlTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmJhc2VPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpleHRlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVNlbGVjdGlvbjo6ZXh0ZW50T2Zmc2V0KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NF
dmVudFNpbmdsZUNsaWNrKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpzZWxlY3Rpb25MYXlvdXRDaGFuZ2VkKToKKyAgICAgICAgKiBwYWdlL21h
Yy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbToKKyAgICAgICAgKHRleHRNYXJrZXJGb3JW
aXNpYmxlUG9zaXRpb24pOgorICAgICAgICAodmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sOjppbmRleEZvclZpc2libGVQb3NpdGlvbik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVTZWxlY3Rpb24pOgorCisyMDA5LTAzLTMxICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBN
b3ZlIFJhbmdlQm91bmRhcnlQb2ludCBvZmYgb2YgUG9zaXRpb24sIHBlciBEYXJpbidzIHN1Z2dl
c3Rpb24KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0
OTY2CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cAppbmRleCBiOWNlNDJhLi5mZTZmNDFmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC01MDMs
NyArNTAzLDkgQEAgX19aTjdXZWJDb3JlNUltYWdlMTJzdXBwb3J0c1R5cGVFUktOU182U3RyaW5n
RQogX19aTjdXZWJDb3JlNUltYWdlMjBsb2FkUGxhdGZvcm1SZXNvdXJjZUVQS2MKIF9fWk43V2Vi
Q29yZTVSYW5nZTZjcmVhdGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOERvY3VtZW50RUVFTlMyX0lO
U180Tm9kZUVFRWlTNl9pCiBfX1pON1dlYkNvcmU1UmFuZ2U2c2V0RW5kRU4zV1RGMTBQYXNzUmVm
UHRySU5TXzROb2RlRUVFaVJpCitfX1pON1dlYkNvcmU1UmFuZ2U2c2V0RW5kRVJLTlNfOFBvc2l0
aW9uRVJpCiBfX1pON1dlYkNvcmU1UmFuZ2U4c2V0U3RhcnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNf
NE5vZGVFRUVpUmkKK19fWk43V2ViQ29yZTVSYW5nZThzZXRTdGFydEVSS05TXzhQb3NpdGlvbkVS
aQogX19aTjdXZWJDb3JlNVJhbmdlRDFFdgogX19aTjdXZWJDb3JlNWNhY2hlRXYKIF9fWk43V2Vi
Q29yZTVlcXVhbEVQTlNfMTBTdHJpbmdJbXBsRVBLYwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20v
UG9zaXRpb24uaCBiL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKaW5kZXggYmFhMmQzYy4uMWExOTM2
NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUG9zaXRpb24uaAorKysgYi9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5oCkBAIC03MCw2ICs3MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChhbmNo
b3JUeXBlKCkgPT0gUG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0OwogICAgIH0KKyAgICAvLyBPbGQgZWRpdGluZyBjb2RlIGRlcGVuZHMgb24gbWFuaXB1
bGF0aW5nIHRoZSBub2RlL29mZnNldCBwYWlyIGRpcmVjdGx5LCBldmVuIHdoZW4gdGhlIFBvc2l0
aW9uIGlzbid0IHBhcmVudC1hbmNob3JlZC4KKyAgICAvLyBGSVhNRTogQ2FsbGVycyBzaG91bGQg
YmUgbW92ZWQgb2ZmIG9mIHRoaXMgbWV0aG9kIGFuZCB0aGlzIGRlY2xhcmF0aW9uIHJlbW92ZWQu
CisgICAgaW50IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX29mZnNldDsKKyAgICB9CiAKICAgICAvLyBUaGVzZSBhcmUgY29udmVuaWVuY2Ug
bWV0aG9kcyB3aGljaCBhcmUgc21hcnQgYWJvdXQgd2hldGhlciB0aGUgcG9zaXRpb24gaXMgbmVp
Z2hib3IgYW5jaG9yZWQgb3IgcGFyZW50IGFuY2hvcmVkCiAgICAgTm9kZSogbm9kZUJlZm9yZVBv
c2l0aW9uKCkgY29uc3Q7CkBAIC03Nyw5ICs4MywxMCBAQCBwdWJsaWM6CiAKICAgICBOb2RlKiBh
bmNob3JOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JOb2RlLmdldCgpOyB9CiAKLSAgICAv
LyBGSVhNRTogQ2FsbGVycyBzaG91bGQgYmUgbW92ZWQgb2ZmIG9mIG5vZGUoKSwgbm9kZSgpIGlz
IG5vdCBhbHdheXMgdGhlIGNvbnRhaW5lciBmb3IgdGhpcyBwb3NpdGlvbi4KKyAgICAvLyBGSVhN
RTogQ2FsbGVycyBzaG91bGQgY2FsbCBhbmNob3JOb2RlKCkgb3IgY29udGFpbmVyTm9kZSgpIGlu
c3RlYWQgbm9kZSgpLgorICAgIC8vIG5vZGUoKSBjYW4gYmUgZWl0aGVyIHRoZSBjb250YWluZXIg
b3IgdGhlIHNpYmxpbmcgZm9yIHRoZSBwb3NpdGlvbi4KICAgICAvLyBGb3Igbm9kZXMgd2hpY2gg
ZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUoKSkgcmV0dXJucyB0cnVlLCBwb3NpdGlvbnMgbGlr
ZSBbaWdub3JlZE5vZGUsIDBdCi0gICAgLy8gd2lsbCBiZSB0cmVhdGVkIGFzIGJlZm9yZSBpZ25v
cmVkTm9kZSAodGh1cyBub2RlKCkgaXMgcmVhbGx5IGFmdGVyIHRoZSBwb3NpdGlvbiwgbm90IGNv
bnRhaW5pbmcgaXQpLgorICAgIC8vIHdpbGwgYmUgdHJlYXRlZCBhcyBiZWZvcmUgaWdub3JlZE5v
ZGUgKHRodXMgbm9kZSgpIG5laWdoYm9ycyB0aGUgcG9zaXRpb24gYW5kIGRvZXMgbm90IGNvbnRh
aW4gaXQpLgogICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvck5vZGUuZ2V0
KCk7IH0KICAgICBFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKIApAQCAtMTU4LDE4
ICsxNjUsMTQgQEAgcHJpdmF0ZToKICAgICBQb3NpdGlvbiBuZXh0Q2hhcmFjdGVyUG9zaXRpb24o
RUFmZmluaXR5KSBjb25zdDsKIAogICAgIFJlZlB0cjxOb2RlPiBtX2FuY2hvck5vZGU7Ci1wdWJs
aWM6Ci0gICAgLy8gbV9vZmZzZXQgY2FuIGJlIHRoZSBvZmZzZXQgaW5zaWRlIG1fYW5jaG9yTm9k
ZSwgb3IgaWYgZWRpdGluZ0lnbm9yZXNDb250ZW50KG1fYW5jaG9yTm9kZSkKLSAgICAvLyByZXR1
cm5zIHRydWUsIHRoZW4gb3RoZXIgcGxhY2VzIGluIGVkaXRpbmcgd2lsbCB0cmVhdCBtX29mZnNl
dCA9PSAwIGFzICJiZWZvcmUgdGhlIGFuY2hvciIKLSAgICAvLyBhbmQgbV9vZmZzZXQgPiAwIGFz
ICJhZnRlciB0aGUgYW5jaG9yIG5vZGUiLiAgU2VlIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCBm
b3IgbW9yZSBpbmZvLgotICAgIGludCBtX29mZnNldDsgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IG1hZGUgcHJpdmF0ZS4KKyAgICBpbnQgbV9vZmZzZXQ7CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKIHsKICAgICAvLyBG
SVhNRTogSW4gPGRpdj48aW1nPjwvZGl2PiBbZGl2LCAwXSAhPSBbaW1nLCAwXSBldmVuIHRob3Vn
aCBtb3N0IG9mIHRoZQogICAgIC8vIGVkaXRpbmcgY29kZSB3aWxsIHRyZWF0IHRoZW0gYXMgaWRl
bnRpY2FsLgotICAgIHJldHVybiBhLmFuY2hvck5vZGUoKSA9PSBiLmFuY2hvck5vZGUoKSAmJiBh
Lm1fb2Zmc2V0ID09IGIubV9vZmZzZXQ7CisgICAgcmV0dXJuIGEuYW5jaG9yTm9kZSgpID09IGIu
YW5jaG9yTm9kZSgpICYmIGEuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA9PSBiLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUG9z
aXRpb24mIGEsIGNvbnN0IFBvc2l0aW9uJiBiKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUG9z
aXRpb25JdGVyYXRvci5oIGIvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5oCmluZGV4IDk4
YTJjY2IuLjhmYjE4MjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3Iu
aAorKysgYi9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmgKQEAgLTQ1LDggKzQ1LDggQEAg
cHVibGljOgogCiAgICAgUG9zaXRpb25JdGVyYXRvcihjb25zdCBQb3NpdGlvbiYgcG9zKQogICAg
ICAgICA6IG1fcGFyZW50KHBvcy5ub2RlKCkpCi0gICAgICAgICwgbV9jaGlsZChtX3BhcmVudC0+
Y2hpbGROb2RlKHBvcy5tX29mZnNldCkpCi0gICAgICAgICwgbV9vZmZzZXQobV9jaGlsZCA/IDAg
OiBwb3MubV9vZmZzZXQpCisgICAgICAgICwgbV9jaGlsZChtX3BhcmVudC0+Y2hpbGROb2RlKHBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSkKKyAgICAgICAgLCBtX29mZnNldChtX2NoaWxk
ID8gMCA6IHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKQogICAgIHsKICAgICB9CiAgICAg
b3BlcmF0b3IgUG9zaXRpb24oKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcCBiL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCBlNWY3YjUzLi5lODA5MTc0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vUmFuZ2UuY3Bw
CkBAIC05MCw3ICs5MCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoUGFzc1Jl
ZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCwgUGFzc1JlZlB0cjxOCiAKIFBhc3NSZWZQdHI8
UmFuZ2U+IFJhbmdlOjpjcmVhdGUoUGFzc1JlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCwg
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCwgc3RhcnQubm9kZSgpLCBzdGFydC5t
X29mZnNldCwgZW5kLm5vZGUoKSwgZW5kLm1fb2Zmc2V0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBSYW5nZShvd25lckRvY3VtZW50LCBzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0LmNv
bXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZW5kLmNvbnRhaW5lck5vZGUoKSwgZW5kLmNv
bXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkpOwogfQogCiBSYW5nZTo6flJhbmdlKCkKQEAg
LTI1MCw2ICsyNTAsMTggQEAgdm9pZCBSYW5nZTo6c2V0RW5kKFBhc3NSZWZQdHI8Tm9kZT4gcmVm
Tm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGNvbGxhcHNlKGZh
bHNlLCBlYyk7CiB9CiAKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gVGhpcyBzaWxlbnRseSBjb252ZXJ0
cyB0aGUgcG9zaXRpb24gdG8gYmVpbmcgcGFyZW50IHJlbGF0aXZlIGJlZm9yZSBzZXR0aW5nIGl0
IG9uIHRoZSBSYW5nZQorICAgIHNldFN0YXJ0KHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSwgcG9z
aXRpb24uY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7Cit9CisKK3ZvaWQgUmFu
Z2U6OnNldEVuZChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIC8vIFRoaXMgc2lsZW50bHkgY29udmVydHMgdGhlIHBvc2l0aW9uIHRvIGJlaW5nIHBh
cmVudCByZWxhdGl2ZSBiZWZvcmUgc2V0dGluZyBpdCBvbiB0aGUgUmFuZ2UKKyAgICBzZXRFbmQo
cG9zaXRpb24uY29udGFpbmVyTm9kZSgpLCBwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCksIGVjKTsKK30KKwogdm9pZCBSYW5nZTo6Y29sbGFwc2UoYm9vbCB0b1N0YXJ0LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyKCkpIHsKQEAg
LTUyOCw3ICs1NDAsMTAgQEAgc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhOb2Rl
KiBjb250YWluZXJBLCBpbnQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmUKIAogc2hvcnQgUmFuZ2U6
OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhjb25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24m
IGIpCiB7Ci0gICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhhLm5vZGUoKSwgYS5tX29m
ZnNldCwgYi5ub2RlKCksIGIubV9vZmZzZXQpOworICAgIC8vIEZJWE1FOiBTb21lIGNhbGxlcnMg
cGFzcyBpbiBzaWJsaW5nLWFuY2hvcmVkIHBvc2l0aW9ucy4KKyAgICAvLyBUaG9zZSBjYWxsZXJz
IHNob3VsZCBtb3ZlIHRvIGEgbmV3IGNvbXBhcmVQb3NpdGlvbnMgZnVuY3Rpb24sIHRoZW4KKyAg
ICAvLyBjb21wYXJlQm91bmRhcnlQb2ludHMgbmVlZCBvbmx5IGNhcmUgYWJvdXQgcGFyZW50LWFu
Y2hvcmVkIG5vZGUvb2Zmc2V0IHBhaXJzLgorICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2lu
dHMoYS5hbmNob3JOb2RlKCksIGEuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgYi5hbmNob3JO
b2RlKCksIGIuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiB9CiAKIGJvb2wgUmFuZ2U6OmJv
dW5kYXJ5UG9pbnRzVmFsaWQoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUmFuZ2Uu
aCBiL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggYmQ1YTY0ZS4uMWIzODY4MSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC01Niw4
ICs1NiwxMiBAQCBwdWJsaWM6CiAKICAgICBOb2RlKiBjb21tb25BbmNlc3RvckNvbnRhaW5lcihF
eGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgc3RhdGljIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29u
dGFpbmVyKE5vZGUqIGNvbnRhaW5lckEsIE5vZGUqIGNvbnRhaW5lckIpOworCiAgICAgdm9pZCBz
ZXRTdGFydChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZvaWQgc2V0RW5kKFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRTdGFydChjb25zdCBQb3NpdGlv
biYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEVuZChjb25zdCBQb3NpdGlvbiYsIEV4
Y2VwdGlvbkNvZGUmKTsKKwogICAgIHZvaWQgY29sbGFwc2UoYm9vbCB0b1N0YXJ0LCBFeGNlcHRp
b25Db2RlJik7CiAgICAgYm9vbCBpc1BvaW50SW5SYW5nZShOb2RlKiByZWZOb2RlLCBpbnQgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgc2hvcnQgY29tcGFyZVBvaW50KE5vZGUqIHJl
Zk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuY3BwCmluZGV4IGU4ZWY5MjUuLjM2MmRlM2EgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcApAQCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24KICAgICAKICAgICBzdGFydCA9IHN0YXJ0LnVwc3RyZWFtKCk7IC8vIE1vdmUgdXBzdHJl
YW0gdG8gZW5zdXJlIHdlIGRvIG5vdCBhZGQgcmVkdW5kYW50IHNwYW5zLgogICAgIE5vZGUgKnN0
YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKLSAgICBpZiAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkg
JiYgc3RhcnQubV9vZmZzZXQgPj0gY2FyZXRNYXhPZmZzZXQoc3RhcnROb2RlKSkgLy8gTW92ZSBv
dXQgb2YgdGV4dCBub2RlIGlmIHJhbmdlIGRvZXMgbm90IGluY2x1ZGUgaXRzIGNoYXJhY3RlcnMu
CisgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpICYmIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoc3RhcnROb2RlKSkgLy8gTW92ZSBvdXQgb2Yg
dGV4dCBub2RlIGlmIHJhbmdlIGRvZXMgbm90IGluY2x1ZGUgaXRzIGNoYXJhY3RlcnMuCiAgICAg
ICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogCiAgICAgLy8g
U3RvcmUgYXdheSBmb250IHNpemUgYmVmb3JlIG1ha2luZyBhbnkgY2hhbmdlcyB0byB0aGUgZG9j
dW1lbnQuCkBAIC04NjgsNyArODY4LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJ
bmxpbmVTdHlsZVRvUmFuZ2UoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWwKIAogICAg
IGJvb2wgcmFuZ2VJc0VtcHR5ID0gZmFsc2U7CiAKLSAgICBpZiAoc3RhcnQubV9vZmZzZXQgPj0g
Y2FyZXRNYXhPZmZzZXQoc3RhcnQubm9kZSgpKSkgeworICAgIGlmIChzdGFydC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Lm5vZGUoKSkpIHsKICAgICAg
ICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgUG9zaXRpb24gbmV3
U3RhcnQgPSBQb3NpdGlvbihub2RlLCAwKTsKICAgICAgICAgaWYgKCFub2RlIHx8IFJhbmdlOjpj
b21wYXJlQm91bmRhcnlQb2ludHMoZW5kLCBuZXdTdGFydCkgPCAwKQpAQCAtODc4LDcgKzg3OCw3
IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb1JhbmdlKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsCiAgICAgaWYgKCFyYW5nZUlzRW1wdHkpIHsKICAg
ICAgICAgLy8gcGFzdEVuZE5vZGUgaXMgdGhlIG5vZGUgYWZ0ZXIgdGhlIGxhc3QgZnVsbHkgc2Vs
ZWN0ZWQgbm9kZS4KICAgICAgICAgTm9kZSogcGFzdEVuZE5vZGUgPSBlbmQubm9kZSgpOwotICAg
ICAgICBpZiAoZW5kLm1fb2Zmc2V0ID49IGNhcmV0TWF4T2Zmc2V0KGVuZC5ub2RlKCkpKQorICAg
ICAgICBpZiAoZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQo
ZW5kLm5vZGUoKSkpCiAgICAgICAgICAgICBwYXN0RW5kTm9kZSA9IGVuZC5ub2RlKCktPnRyYXZl
cnNlTmV4dFNpYmxpbmcoKTsKICAgICAgICAgLy8gRklYTUU6IENhbGxlcnMgc2hvdWxkIHBlcmZv
cm0gdGhpcyBvcGVyYXRpb24gb24gYSBSYW5nZSB0aGF0IGluY2x1ZGVzIHRoZSBicgogICAgICAg
ICAvLyBpZiB0aGV5IHdhbnQgc3R5bGUgYXBwbGllZCB0byB0aGUgZW1wdHkgbGluZS4KQEAgLTEy
MzksMTQgKzEyMzksMTQgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5
bGUoUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4KICAgICAgICAgICAgICAg
ICBpZiAocy5ub2RlKCkgPT0gZWxlbSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBl
bGVtIG11c3QgaGF2ZSBiZWVuIGZ1bGx5IHNlbGVjdGVkLCBhbmQgaXQgaXMgYXQgdGhlIHN0YXJ0
CiAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBzZWxlY3Rpb24sIGl0IGlzIGNsZWFyIHdl
IGNhbiBzZXQgdGhlIG5ldyBzIG9mZnNldCB0byAwLgotICAgICAgICAgICAgICAgICAgICBBU1NF
UlQocy5tX29mZnNldCA8PSBjYXJldE1pbk9mZnNldChzLm5vZGUoKSkpOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQocy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDw9IGNhcmV0TWluT2Zm
c2V0KHMubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHMgPSBQb3NpdGlvbihuZXh0LCAw
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGUubm9kZSgpID09IGVs
ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgZWxlbSBtdXN0IGhhdmUgYmVlbiBm
dWxseSBzZWxlY3RlZCwgYW5kIGl0IGlzIGF0IHRoZSBlbmQKICAgICAgICAgICAgICAgICAgICAg
Ly8gb2YgdGhlIHNlbGVjdGlvbiwgaXQgaXMgY2xlYXIgd2UgY2FuIHNldCB0aGUgbmV3IGUgb2Zm
c2V0IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtYXggcmFuZ2Ugb2Zmc2V0IG9mIHBy
ZXYuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChlLm1fb2Zmc2V0ID49IG1heFJhbmdlT2Zm
c2V0KGUubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChlLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPj0gbWF4UmFuZ2VPZmZzZXQoZS5ub2RlKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgZSA9IFBvc2l0aW9uKHByZXYsIG1heFJhbmdlT2Zmc2V0KHByZXYpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMjY3LDcgKzEyNjcsNyBAQCBib29sIEFw
cGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlTZWxlY3RlZChOb2RlICpub2RlLCBjb25zdCBQb3Np
dGlvbiAmc3RhcnQsIGNvbgogICAgIEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwogCiAg
ICAgUG9zaXRpb24gcG9zID0gUG9zaXRpb24obm9kZSwgbm9kZS0+Y2hpbGROb2RlQ291bnQoKSku
dXBzdHJlYW0oKTsKLSAgICByZXR1cm4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhub2Rl
LCAwLCBzdGFydC5ub2RlKCksIHN0YXJ0Lm1fb2Zmc2V0KSA+PSAwICYmCisgICAgcmV0dXJuIFJh
bmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMobm9kZSwgMCwgc3RhcnQuYW5jaG9yTm9kZSgpLCBz
dGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSA+PSAwICYmCiAgICAgICAgIFJhbmdlOjpj
b21wYXJlQm91bmRhcnlQb2ludHMocG9zLCBlbmQpIDw9IDA7CiB9CiAKQEAgLTEyNzgsNjQgKzEy
NzgsNzIgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5VW5zZWxlY3RlZChOb2Rl
ICpub2RlLCBjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGMKIAogICAgIFBvc2l0aW9uIHBvcyA9IFBv
c2l0aW9uKG5vZGUsIG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpLnVwc3RyZWFtKCk7CiAgICAgYm9v
bCBpc0Z1bGx5QmVmb3JlU3RhcnQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBvcywg
c3RhcnQpIDwgMDsKLSAgICBib29sIGlzRnVsbHlBZnRlckVuZCA9IFJhbmdlOjpjb21wYXJlQm91
bmRhcnlQb2ludHMobm9kZSwgMCwgZW5kLm5vZGUoKSwgZW5kLm1fb2Zmc2V0KSA+IDA7CisgICAg
Ym9vbCBpc0Z1bGx5QWZ0ZXJFbmQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKG5vZGUs
IDAsIGVuZC5jb250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkgPiAw
OwogCiAgICAgcmV0dXJuIGlzRnVsbHlCZWZvcmVTdGFydCB8fCBpc0Z1bGx5QWZ0ZXJFbmQ7CiB9
CiAKK3N0YXRpYyBib29sIGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShjb25zdCBQb3Np
dGlvbiYgcG9zaXRpb24pCit7CisgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmFuY2hvck5vZGUo
KTsKKyAgICBpZiAoIW5vZGUtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGludCBvZmZzZXRJblRleHQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsK
KyAgICByZXR1cm4gKG9mZnNldEluVGV4dCA+IGNhcmV0TWluT2Zmc2V0KG5vZGUpICYmIG9mZnNl
dEluVGV4dCA8IGNhcmV0TWF4T2Zmc2V0KG5vZGUpKTsKK30KIAotYm9vbCBBcHBseVN0eWxlQ29t
bWFuZDo6c3BsaXRUZXh0QXRTdGFydElmTmVlZGVkKGNvbnN0IFBvc2l0aW9uICZzdGFydCwgY29u
c3QgUG9zaXRpb24gJmVuZCkKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0U3Rh
cnRJZk5lZWRlZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7
Ci0gICAgaWYgKHN0YXJ0Lm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIHN0YXJ0Lm1fb2Zmc2V0ID4g
Y2FyZXRNaW5PZmZzZXQoc3RhcnQubm9kZSgpKSAmJiBzdGFydC5tX29mZnNldCA8IGNhcmV0TWF4
T2Zmc2V0KHN0YXJ0Lm5vZGUoKSkpIHsKLSAgICAgICAgaW50IGVuZE9mZnNldEFkanVzdG1lbnQg
PSBzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKSA/IHN0YXJ0Lm1fb2Zmc2V0IDogMDsKLSAgICAg
ICAgVGV4dCAqdGV4dCA9IHN0YXRpY19jYXN0PFRleHQgKj4oc3RhcnQubm9kZSgpKTsKLSAgICAg
ICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBzdGFydC5tX29mZnNldCk7Ci0gICAgICAgIHVwZGF0ZVN0
YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Lm5vZGUoKSwgMCksIFBvc2l0aW9uKGVuZC5ub2RlKCksIGVu
ZC5tX29mZnNldCAtIGVuZE9mZnNldEFkanVzdG1lbnQpKTsKKyAgICBpZiAoaXNWYWxpZENhcmV0
UG9zaXRpb25JblRleHROb2RlKHN0YXJ0KSkgeworICAgICAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0
bWVudCA9IHN0YXJ0LmFuY2hvck5vZGUoKSA9PSBlbmQuYW5jaG9yTm9kZSgpID8gc3RhcnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkgOiAwOworICAgICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nh
c3Q8VGV4dCo+KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgIHNwbGl0VGV4dE5vZGUo
dGV4dCwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgICAgICB1cGRhdGVTdGFy
dEVuZChQb3NpdGlvbihzdGFydC5hbmNob3JOb2RlKCksIDApLCBQb3NpdGlvbihlbmQubm9kZSgp
LCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAtIGVuZE9mZnNldEFkanVzdG1lbnQpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRFbmRJZk5lZWRlZChjb25zdCBQb3NpdGlv
biAmc3RhcnQsIGNvbnN0IFBvc2l0aW9uICZlbmQpCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjpz
cGxpdFRleHRBdEVuZElmTmVlZGVkKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCkKIHsKLSAgICBpZiAoZW5kLm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIGVuZC5tX29m
ZnNldCA+IGNhcmV0TWluT2Zmc2V0KGVuZC5ub2RlKCkpICYmIGVuZC5tX29mZnNldCA8IGNhcmV0
TWF4T2Zmc2V0KGVuZC5ub2RlKCkpKSB7Ci0gICAgICAgIFRleHQgKnRleHQgPSBzdGF0aWNfY2Fz
dDxUZXh0ICo+KGVuZC5ub2RlKCkpOwotICAgICAgICBzcGxpdFRleHROb2RlKHRleHQsIGVuZC5t
X29mZnNldCk7CisgICAgaWYgKGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShlbmQpKSB7
CisgICAgICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oZW5kLmFuY2hvck5vZGUo
KSk7CisgICAgICAgIHNwbGl0VGV4dE5vZGUodGV4dCwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUgKnByZXZOb2RlID0gdGV4dC0+cHJldmlvdXNT
aWJsaW5nKCk7CisgICAgICAgIE5vZGUqIHByZXZOb2RlID0gdGV4dC0+cHJldmlvdXNTaWJsaW5n
KCk7CiAgICAgICAgIEFTU0VSVChwcmV2Tm9kZSk7Ci0gICAgICAgIE5vZGUgKnN0YXJ0Tm9kZSA9
IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9kZSgpID8gcHJldk5vZGUgOiBzdGFydC5ub2RlKCk7Cisg
ICAgICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmFuY2hvck5vZGUoKSA9PSBlbmQuYW5jaG9y
Tm9kZSgpID8gcHJldk5vZGUgOiBzdGFydC5hbmNob3JOb2RlKCk7CiAgICAgICAgIEFTU0VSVChz
dGFydE5vZGUpOwotICAgICAgICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFydE5vZGUsIHN0
YXJ0Lm1fb2Zmc2V0KSwgUG9zaXRpb24ocHJldk5vZGUsIGNhcmV0TWF4T2Zmc2V0KHByZXZOb2Rl
KSkpOworICAgICAgICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0LmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpLCBQb3NpdGlvbihwcmV2Tm9kZSwgY2FyZXRNYXhPZmZz
ZXQocHJldk5vZGUpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdFN0
YXJ0SWZOZWVkZWQoY29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQb3NpdGlvbiAmZW5kKQor
Ym9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnRJZk5lZWRlZChj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgaWYgKHN0
YXJ0Lm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIHN0YXJ0Lm1fb2Zmc2V0ID4gY2FyZXRNaW5PZmZz
ZXQoc3RhcnQubm9kZSgpKSAmJiBzdGFydC5tX29mZnNldCA8IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0
Lm5vZGUoKSkpIHsKLSAgICAgICAgaW50IGVuZE9mZnNldEFkanVzdG1lbnQgPSBzdGFydC5ub2Rl
KCkgPT0gZW5kLm5vZGUoKSA/IHN0YXJ0Lm1fb2Zmc2V0IDogMDsKLSAgICAgICAgVGV4dCAqdGV4
dCA9IHN0YXRpY19jYXN0PFRleHQgKj4oc3RhcnQubm9kZSgpKTsKLSAgICAgICAgc3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRleHQsIHN0YXJ0Lm1fb2Zmc2V0KTsKKyAgICBpZiAoaXNW
YWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKHN0YXJ0KSkgeworICAgICAgICBpbnQgZW5kT2Zm
c2V0QWRqdXN0bWVudCA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9kZSgpID8gc3RhcnQub2Zmc2V0
SW5Db250YWluZXJOb2RlKCkgOiAwOworICAgICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8
VGV4dCo+KHN0YXJ0Lm5vZGUoKSk7CisgICAgICAgIHNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxl
bWVudCh0ZXh0LCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAKLSAgICAgICAgdXBk
YXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCksIHN0YXJ0Lm5v
ZGUoKS0+bm9kZUluZGV4KCkpLCBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQubV9vZmZzZXQgLSBl
bmRPZmZzZXRBZGp1c3RtZW50KSk7CisgICAgICAgIHVwZGF0ZVN0YXJ0RW5kKHBvc2l0aW9uQmVm
b3JlTm9kZSh0ZXh0KSwgUG9zaXRpb24oZW5kLm5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCkgLSBlbmRPZmZzZXRBZGp1c3RtZW50KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNw
bGl0VGV4dEVsZW1lbnRBdEVuZElmTmVlZGVkKGNvbnN0IFBvc2l0aW9uICZzdGFydCwgY29uc3Qg
UG9zaXRpb24gJmVuZCkKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRB
dEVuZElmTmVlZGVkKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkK
IHsKLSAgICBpZiAoZW5kLm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIGVuZC5tX29mZnNldCA+IGNh
cmV0TWluT2Zmc2V0KGVuZC5ub2RlKCkpICYmIGVuZC5tX29mZnNldCA8IGNhcmV0TWF4T2Zmc2V0
KGVuZC5ub2RlKCkpKSB7Ci0gICAgICAgIFRleHQgKnRleHQgPSBzdGF0aWNfY2FzdDxUZXh0ICo+
KGVuZC5ub2RlKCkpOwotICAgICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQodGV4
dCwgZW5kLm1fb2Zmc2V0KTsKKyAgICBpZiAoaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2Rl
KGVuZCkpIHsKKyAgICAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihlbmQubm9k
ZSgpKTsKKyAgICAgICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRleHQsIGVuZC5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAKLSAgICAgICAgTm9kZSAqcHJldk5vZGUgPSB0ZXh0
LT5wYXJlbnQoKS0+cHJldmlvdXNTaWJsaW5nKCktPmxhc3RDaGlsZCgpOworICAgICAgICBOb2Rl
KiBwcmV2Tm9kZSA9IHRleHQtPnBhcmVudCgpLT5wcmV2aW91c1NpYmxpbmcoKS0+bGFzdENoaWxk
KCk7CiAgICAgICAgIEFTU0VSVChwcmV2Tm9kZSk7Ci0gICAgICAgIE5vZGUgKnN0YXJ0Tm9kZSA9
IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9kZSgpID8gcHJldk5vZGUgOiBzdGFydC5ub2RlKCk7Cisg
ICAgICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9kZSgpID8gcHJl
dk5vZGUgOiBzdGFydC5ub2RlKCk7CiAgICAgICAgIEFTU0VSVChzdGFydE5vZGUpOwotICAgICAg
ICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0Lm1fb2Zmc2V0KSwgUG9z
aXRpb24ocHJldk5vZGUtPnBhcmVudCgpLCBwcmV2Tm9kZS0+bm9kZUluZGV4KCkgKyAxKSk7Cisg
ICAgICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnQuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSksIHBvc2l0aW9uQWZ0ZXJOb2RlKHByZXZOb2RlKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzc5LDEwICsxMzg3
LDEwIEBAIHN0YXRpYyBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKE5vZGUgKmZpcnN0LCBOb2Rl
ICpzZWNvbmQpCiBib29sIEFwcGx5U3R5bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFByZXZpb3Vz
SWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQb3NpdGlvbiAmZW5kKQog
ewogICAgIE5vZGUgKnN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKLSAgICBpbnQgc3RhcnRPZmZz
ZXQgPSBzdGFydC5tX29mZnNldDsKKyAgICBpbnQgc3RhcnRPZmZzZXQgPSBzdGFydC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpOwogCiAgICAgaWYgKGlzQXRvbWljTm9kZShzdGFydC5ub2RlKCkp
KSB7Ci0gICAgICAgIGlmIChzdGFydC5tX29mZnNldCAhPSAwKQorICAgICAgICBpZiAoIXN0YXJ0
LmF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAgICAgLy8gbm90ZTogcHJpb3Igc2libGluZ3MgY291bGQgYmUgdW5yZW5kZXJl
ZCBlbGVtZW50cy4gaXQncyBzaWxseSB0byBtaXNzIHRoZQpAQCAtMTQxMSw3ICsxNDE5LDcgQEAg
Ym9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VTdGFydFdpdGhQcmV2aW91c0lmSWRlbnRpY2Fs
KGNvbnN0IFBvc2l0aW9uICZzdGFydCwKIAogICAgICAgICBpbnQgc3RhcnRPZmZzZXRBZGp1c3Rt
ZW50ID0gc3RhcnRDaGlsZC0+bm9kZUluZGV4KCk7CiAgICAgICAgIGludCBlbmRPZmZzZXRBZGp1
c3RtZW50ID0gc3RhcnROb2RlID09IGVuZC5ub2RlKCkgPyBzdGFydE9mZnNldEFkanVzdG1lbnQg
OiAwOwotICAgICAgICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0T2Zm
c2V0QWRqdXN0bWVudCksIFBvc2l0aW9uKGVuZC5ub2RlKCksIGVuZC5tX29mZnNldCArIGVuZE9m
ZnNldEFkanVzdG1lbnQpKTsgCisgICAgICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0
Tm9kZSwgc3RhcnRPZmZzZXRBZGp1c3RtZW50KSwgUG9zaXRpb24oZW5kLmFuY2hvck5vZGUoKSwg
ZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgKyBlbmRPZmZzZXRBZGp1c3RtZW50KSk7IAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0MjAsOCArMTQyOCw4IEBAIGJvb2wg
QXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHJldmlvdXNJZklkZW50aWNhbChjb25z
dCBQb3NpdGlvbiAmc3RhcnQsCiAKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlRW5kV2l0
aE5leHRJZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFBvc2l0aW9uICZl
bmQpCiB7Ci0gICAgTm9kZSAqZW5kTm9kZSA9IGVuZC5ub2RlKCk7Ci0gICAgaW50IGVuZE9mZnNl
dCA9IGVuZC5tX29mZnNldDsKKyAgICBOb2RlKiBlbmROb2RlID0gZW5kLm5vZGUoKTsKKyAgICBp
bnQgZW5kT2Zmc2V0ID0gZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAKICAgICBpZiAo
aXNBdG9taWNOb2RlKGVuZE5vZGUpKSB7CiAgICAgICAgIGlmIChlbmRPZmZzZXQgPCBjYXJldE1h
eE9mZnNldChlbmROb2RlKSkKQEAgLTE0NTEsNyArMTQ1OSw3IEBAIGJvb2wgQXBwbHlTdHlsZUNv
bW1hbmQ6Om1lcmdlRW5kV2l0aE5leHRJZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiAmc3RhcnQs
IGNvbnN0CiAgICAgICAgIEFTU0VSVChzdGFydE5vZGUpOwogCiAgICAgICAgIGludCBlbmRPZmZz
ZXQgPSBuZXh0Q2hpbGQgPyBuZXh0Q2hpbGQtPm5vZGVJbmRleCgpIDogbmV4dEVsZW1lbnQtPmNo
aWxkTm9kZXMoKS0+bGVuZ3RoKCk7Ci0gICAgICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0
YXJ0Tm9kZSwgc3RhcnQubV9vZmZzZXQpLCBQb3NpdGlvbihuZXh0RWxlbWVudCwgZW5kT2Zmc2V0
KSk7CisgICAgICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSksIFBvc2l0aW9uKG5leHRFbGVtZW50LCBlbmRPZmZzZXQp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNjA3LDkgKzE2MTUsOSBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kZXMoTm9kZSAqbm9kZSwgY29u
c3QgUG9zaXRpb24gJnN0YXJ0LCBjbwogICAgICAgICAgICAgVGV4dCAqY2hpbGRUZXh0ID0gc3Rh
dGljX2Nhc3Q8VGV4dCAqPihjaGlsZCk7CiAgICAgICAgICAgICBUZXh0ICpuZXh0VGV4dCA9IHN0
YXRpY19jYXN0PFRleHQgKj4obmV4dCk7CiAgICAgICAgICAgICBpZiAobmV4dCA9PSBzdGFydC5u
b2RlKCkpCi0gICAgICAgICAgICAgICAgbmV3U3RhcnQgPSBQb3NpdGlvbihjaGlsZFRleHQsIGNo
aWxkVGV4dC0+bGVuZ3RoKCkgKyBzdGFydC5tX29mZnNldCk7CisgICAgICAgICAgICAgICAgbmV3
U3RhcnQgPSBQb3NpdGlvbihjaGlsZFRleHQsIGNoaWxkVGV4dC0+bGVuZ3RoKCkgKyBzdGFydC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgICAgIGlmIChuZXh0ID09IGVuZC5u
b2RlKCkpCi0gICAgICAgICAgICAgICAgbmV3RW5kID0gUG9zaXRpb24oY2hpbGRUZXh0LCBjaGls
ZFRleHQtPmxlbmd0aCgpICsgZW5kLm1fb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBuZXdFbmQg
PSBQb3NpdGlvbihjaGlsZFRleHQsIGNoaWxkVGV4dC0+bGVuZ3RoKCkgKyBlbmQuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgICAgICBTdHJpbmcgdGV4dFRvTW92ZSA9IG5leHRU
ZXh0LT5kYXRhKCk7CiAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoY2hpbGRUZXh0LCBj
aGlsZFRleHQtPmxlbmd0aCgpLCB0ZXh0VG9Nb3ZlKTsKICAgICAgICAgICAgIHJlbW92ZU5vZGUo
bmV4dCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFu
ZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKaW5kZXgg
MzYzYjJmMC4uMTQ2Y2IzOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2tx
dW90ZUNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21t
YW5kLmNwcApAQCAtODUsMTIgKzg1LDEyIEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgLy8gU3BsaXQgYXQgcG9zIGlmIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0
IG5vZGUuCiAgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIFRleHQq
IHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0Tm9kZSk7Ci0gICAgICAgIGlmICgo
dW5zaWduZWQpcG9zLm1fb2Zmc2V0ID49IHRleHROb2RlLT5sZW5ndGgoKSkgeworICAgICAgICBp
ZiAoKHVuc2lnbmVkKXBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IHRleHROb2RlLT5s
ZW5ndGgoKSkgewogICAgICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5l
eHROb2RlKCk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhcnROb2RlKTsKLSAgICAgICAgfSBlbHNl
IGlmIChwb3MubV9vZmZzZXQgPiAwKQotICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0Tm9k
ZSwgcG9zLm1fb2Zmc2V0KTsKLSAgICB9IGVsc2UgaWYgKHBvcy5tX29mZnNldCA+IDApIHsKKyAg
ICAgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+IDApCisgICAg
ICAgICAgICBzcGxpdFRleHROb2RlKHRleHROb2RlLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSk7CisgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+IDAp
IHsKICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAg
ICAgICAgIEFTU0VSVChzdGFydE5vZGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCmluZGV4IGIyNGQwYTUuLjc0ZTNjNWIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMTU2LDggKzE1Niw4IEBAIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxk
LCBjb25zdCBQb3NpCiAgICAgLy8gRm9yIGVkaXRpbmcgcG9zaXRpb25zIGxpa2UgW3RhYmxlLCAw
XSwgaW5zZXJ0IGJlZm9yZSB0aGUgdGFibGUsCiAgICAgLy8gbGlrZXdpc2UgZm9yIHJlcGxhY2Vk
IGVsZW1lbnRzLCBicnMsIGV0Yy4KICAgICBQb3NpdGlvbiBwID0gcmFuZ2VDb21wbGlhbnRFcXVp
dmFsZW50KGVkaXRpbmdQb3NpdGlvbik7Ci0gICAgTm9kZSogcmVmQ2hpbGQgPSBwLm5vZGUoKTsK
LSAgICBpbnQgb2Zmc2V0ID0gcC5tX29mZnNldDsKKyAgICBOb2RlKiByZWZDaGlsZCA9IHAuY29u
dGFpbmVyTm9kZSgpOworICAgIGludCBvZmZzZXQgPSBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgp
OwogICAgIAogICAgIGlmIChjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHJlZkNoaWxkKSkgewog
ICAgICAgICBOb2RlKiBjaGlsZCA9IHJlZkNoaWxkLT5maXJzdENoaWxkKCk7CkBAIC0zMjcsMTMg
KzMyNywxMyBAQCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25PdXRzaWRl
VGFiU3Bhbihjb25zdCBQb3NpdGlvbiYgcG9zKQogICAgIAogICAgIE5vZGUqIHRhYlNwYW4gPSB0
YWJTcGFuTm9kZShwb3Mubm9kZSgpKTsKICAgICAKLSAgICBpZiAocG9zLm1fb2Zmc2V0IDw9IGNh
cmV0TWluT2Zmc2V0KHBvcy5ub2RlKCkpKQorICAgIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSA8PSBjYXJldE1pbk9mZnNldChwb3Mubm9kZSgpKSkKICAgICAgICAgcmV0dXJuIHBv
c2l0aW9uQmVmb3JlTm9kZSh0YWJTcGFuKTsKICAgICAgICAgCi0gICAgaWYgKHBvcy5tX29mZnNl
dCA+PSBjYXJldE1heE9mZnNldChwb3Mubm9kZSgpKSkKKyAgICBpZiAocG9zLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQocG9zLm5vZGUoKSkpCiAgICAgICAgIHJl
dHVybiBwb3NpdGlvbkFmdGVyTm9kZSh0YWJTcGFuKTsKIAotICAgIHNwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudChzdGF0aWNfY2FzdDxUZXh0ICo+KHBvcy5ub2RlKCkpLCBwb3MubV9vZmZz
ZXQpOworICAgIHNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudChzdGF0aWNfY2FzdDxUZXh0
Kj4ocG9zLm5vZGUoKSksIHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICByZXR1
cm4gcG9zaXRpb25CZWZvcmVOb2RlKHRhYlNwYW4pOwogfQogCkBAIC0zOTIsNyArMzkyLDcgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZUF0KGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbikKICAgICBTdHJpbmcgdGV4dCA9IHRleHROb2RlLT5kYXRhKCk7CiAg
ICAgQVNTRVJUKCF0ZXh0LmlzRW1wdHkoKSk7CiAKLSAgICBpbnQgb2Zmc2V0ID0gcG9zaXRpb24u
bV9vZmZzZXQ7CisgICAgaW50IG9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpOwogICAgIC8vIElmIG5laXRoZXIgdGV4dFtvZmZzZXRdIG5vciB0ZXh0W29mZnNldCAtIDFd
IGFyZSBzb21lIGZvcm0gb2Ygd2hpdGVzcGFjZSwgZG8gbm90aGluZy4KICAgICBpZiAoIWlzV2hp
dGVzcGFjZSh0ZXh0W29mZnNldF0pKSB7CiAgICAgICAgIG9mZnNldC0tOwpAQCAtNDQ4LDEwICs0
NDgsMTAgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBv
c2l0aW9uRm9yU3BsaXQoUG9zaXRpb24mIHBvc2l0aW8KICAgICBWaXNpYmxlUG9zaXRpb24gcHJl
dmlvdXNWaXNpYmxlUG9zKHZpc2libGVQb3MucHJldmlvdXMoKSk7CiAgICAgUG9zaXRpb24gcHJl
dmlvdXMocHJldmlvdXNWaXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkpOwogICAgIAotICAgIGlm
IChpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShwcmV2aW91c1Zpc2libGVQb3MuY2hhcmFjdGVyQWZ0
ZXIoKSkgJiYgcHJldmlvdXMubm9kZSgpLT5pc1RleHROb2RlKCkgJiYgIXByZXZpb3VzLm5vZGUo
KS0+aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHN0YXRpY19j
YXN0PFRleHQqPihwcmV2aW91cy5ub2RlKCkpLCBwcmV2aW91cy5tX29mZnNldCwgMSwgbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpKTsKLSAgICBpZiAoaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2Uodmlz
aWJsZVBvcy5jaGFyYWN0ZXJBZnRlcigpKSAmJiBwb3NpdGlvbi5ub2RlKCktPmlzVGV4dE5vZGUo
KSAmJiAhcG9zaXRpb24ubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkKLSAgICAgICAgcmVwbGFj
ZVRleHRJbk5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHBvc2l0aW9uLm5vZGUoKSksIHBvc2l0aW9u
Lm1fb2Zmc2V0LCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgIGlmIChpc0NvbGxh
cHNpYmxlV2hpdGVzcGFjZShwcmV2aW91c1Zpc2libGVQb3MuY2hhcmFjdGVyQWZ0ZXIoKSkgJiYg
cHJldmlvdXMubm9kZSgpLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2Rl
KHN0YXRpY19jYXN0PFRleHQqPihwcmV2aW91cy5ub2RlKCkpLCBwcmV2aW91cy5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKKyAgICBpZiAoaXND
b2xsYXBzaWJsZVdoaXRlc3BhY2UodmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRlcigpKSAmJiBwb3Np
dGlvbi5ub2RlKCktPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmVwbGFjZVRleHRJbk5vZGUoc3Rh
dGljX2Nhc3Q8VGV4dCo+KHBvc2l0aW9uLm5vZGUoKSksIHBvc2l0aW9uLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwogfQogCiB2b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlKCkKQEAgLTU0Miw4ICs1NDIsOCBA
QCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dChjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKCk7CiAgICAgICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAg
IFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOwotICAgICAgICAgICAg
aW50IHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSBzdGFydC5ub2RlKCkgPyBzdGFydC5tX29mZnNldCA6
IDA7Ci0gICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gbm9kZSA9PSBlbmQubm9kZSgpID8gZW5k
Lm1fb2Zmc2V0IDogdGV4dE5vZGUtPmxlbmd0aCgpOworICAgICAgICAgICAgaW50IHN0YXJ0T2Zm
c2V0ID0gbm9kZSA9PSBzdGFydC5ub2RlKCkgPyBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSA6IDA7CisgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gbm9kZSA9PSBlbmQubm9kZSgpID8g
ZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDogdGV4dE5vZGUtPmxlbmd0aCgpOwogICAgICAg
ICAgICAgZGVsZXRlSW5zaWduaWZpY2FudFRleHQodGV4dE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIGlmIChub2RlID09IGVuZC5ub2RlKCkpCkBAIC02
MTYsMTAgKzYxNiwxMCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVQbGFjZWhv
bGRlckF0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcwogICAgIC8vIHRoZSBzdGFy
dCBvZiBhIHBhcmFncmFwaCB3aWxsIHJlbmRlciBpdCBzdXBlcmZsdW91cy4KICAgICAvLyBGSVhN
RTogVGhpcyBkb2Vzbid0IHJlbW92ZSBwbGFjZWhvbGRlcnMgYXQgdGhlIGVuZCBvZiBhbm9ueW1v
dXMgYmxvY2tzLgogICAgIGlmIChpc0VuZE9mQmxvY2sodmlzaWJsZVBvc2l0aW9uKSAmJiBpc1N0
YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVBvc2l0aW9uKSkgewotICAgICAgICBpZiAocC5ub2RlKCkt
Pmhhc1RhZ05hbWUoYnJUYWcpICYmIHAubV9vZmZzZXQgPT0gMCkKKyAgICAgICAgaWYgKHAuYW5j
aG9yTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBwLmF0Rmlyc3RFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKCkpCiAgICAgICAgICAgICByZW1vdmVOb2RlKHAubm9kZSgpKTsKICAgICAgICAgZWxz
ZSBpZiAobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbih2aXNpYmxlUG9zaXRpb24pKQotICAgICAg
ICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihwLm5vZGUoKSksIHAu
bV9vZmZzZXQsIDEpOworICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHN0YXRpY19jYXN0
PFRleHQqPihwLm5vZGUoKSksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIDEpOwogICAgIH0K
IH0KIApAQCAtNzgyLDcgKzc4Miw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgLy8g
c3RhcnQgYW5kIGVuZCBjYW4ndCBiZSB1c2VkIGRpcmVjdGx5IHRvIGNyZWF0ZSBhIFJhbmdlOyB0
aGV5IGFyZSAiZWRpdGluZyBwb3NpdGlvbnMiCiAgICAgUG9zaXRpb24gc3RhcnRSYW5nZUNvbXBs
aWFudCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChzdGFydCk7CiAgICAgUG9zaXRpb24gZW5k
UmFuZ2VDb21wbGlhbnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZW5kKTsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydFJhbmdlQ29t
cGxpYW50Lm5vZGUoKSwgc3RhcnRSYW5nZUNvbXBsaWFudC5tX29mZnNldCwgZW5kUmFuZ2VDb21w
bGlhbnQubm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5tX29mZnNldCk7CisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRSYW5nZUNvbXBsaWFu
dCwgZW5kUmFuZ2VDb21wbGlhbnQpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYW4gaW5lZmZp
Y2llbnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlIG9uIG5vZGVzIGluIHRoZSBwYXJhZ3JhcGggdG8g
bW92ZS4gIEl0IAogICAgIC8vIHNob3VsZG4ndCBtYXR0ZXIgdGhvdWdoLCBzaW5jZSBtb3ZlZCBw
YXJhZ3JhcGhzIHdpbGwgdXN1YWxseSBiZSBxdWl0ZSBzbWFsbC4KQEAgLTgzMSw3ICs4MzEsNyBA
QCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgICAgICAgICAgaWYgKHRleHROb2RlLT5sZW5n
dGgoKSA9PSAxKQogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhu
b2RlKTsKICAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21O
b2RlKHRleHROb2RlLCBwb3NpdGlvbi5tX29mZnNldCwgMSk7CisgICAgICAgICAgICAgICAgZGVs
ZXRlVGV4dEZyb21Ob2RlKHRleHROb2RlLCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSwgMSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk1Myw3ICs5NTMsNyBAQCBib29sIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgo
KQogICAgICAgICByZW1vdmVOb2RlKGNhcmV0UG9zLm5vZGUoKSk7CiAgICAgICAgIHBydW5lKGJl
Zm9yZUJSLm5vZGUoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGNhcmV0UG9zLm1f
b2Zmc2V0ID09IDApOworICAgICAgICBBU1NFUlQoY2FyZXRQb3MuYXRGaXJzdEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoKSk7CiAgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4
dCo+KGNhcmV0UG9zLm5vZGUoKSk7CiAgICAgICAgIE5vZGUqIHBhcmVudE5vZGUgPSB0ZXh0Tm9k
ZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICAvLyBUaGUgcHJlc2VydmVkIG5ld2xpbmUgbXVzdCBi
ZSB0aGUgZmlyc3QgdGhpbmcgaW4gdGhlIG5vZGUsIHNpbmNlIG90aGVyd2lzZSB0aGUgcHJldmlv
dXMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cCBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAwOTI4
OGVlLi42OTUyNDRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCkBAIC0zMTAsOCArMzEwLDggQEAgc3RhdGljIHZvaWQgdXBkYXRlUG9zaXRpb25Gb3JOb2Rl
UmVtb3ZhbChOb2RlKiBub2RlLCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgaWYgKHBvc2l0
aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKG5vZGUtPnBhcmVudCgpID09
IHBvc2l0aW9uLm5vZGUoKSAmJiBub2RlLT5ub2RlSW5kZXgoKSA8ICh1bnNpZ25lZClwb3NpdGlv
bi5tX29mZnNldCkKLSAgICAgICAgcG9zaXRpb24gPSBQb3NpdGlvbihwb3NpdGlvbi5ub2RlKCks
IHBvc2l0aW9uLm1fb2Zmc2V0IC0gMSk7CisgICAgaWYgKG5vZGUtPnBhcmVudCgpID09IHBvc2l0
aW9uLmFuY2hvck5vZGUoKSAmJiBub2RlLT5ub2RlSW5kZXgoKSA8ICh1bnNpZ25lZClwb3NpdGlv
bi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKQorICAgICAgICBwb3NpdGlvbi5tb3ZlVG9PZmZz
ZXQocG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAtIDEpOwogICAgIGlmIChwb3Np
dGlvbi5ub2RlKCkgPT0gbm9kZSB8fCBwb3NpdGlvbi5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5v
ZGUpKQogICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uQmVmb3JlTm9kZShub2RlKTsKIH0KQEAg
LTM3NiwxMiArMzc2LDEzIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9k
ZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCiAKIHN0YXRpYyB2b2lkIHVwZGF0ZVBvc2l0aW9uRm9y
VGV4dFJlbW92YWwoTm9kZSogbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50LCBQb3NpdGlvbiYg
cG9zaXRpb24pCiB7Ci0gICAgaWYgKHBvc2l0aW9uLm5vZGUoKSA9PSBub2RlKSB7Ci0gICAgICAg
IGlmIChwb3NpdGlvbi5tX29mZnNldCA+IG9mZnNldCArIGNvdW50KQotICAgICAgICAgICAgcG9z
aXRpb24gPSBQb3NpdGlvbihwb3NpdGlvbi5ub2RlKCksIHBvc2l0aW9uLm1fb2Zmc2V0IC0gY291
bnQpOwotICAgICAgICBlbHNlIGlmIChwb3NpdGlvbi5tX29mZnNldCA+IG9mZnNldCkKLSAgICAg
ICAgICAgIHBvc2l0aW9uID0gUG9zaXRpb24ocG9zaXRpb24ubm9kZSgpLCBvZmZzZXQpOwotICAg
IH0KKyAgICBpZiAocG9zaXRpb24ubm9kZSgpICE9IG5vZGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChwb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gb2Zmc2V0ICsgY291
bnQpCisgICAgICAgIHBvc2l0aW9uLm1vdmVUb09mZnNldChwb3NpdGlvbi5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpIC0gY291bnQpOworICAgIGVsc2UgaWYgKHBvc2l0aW9uLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPiBvZmZzZXQpCisgICAgICAgIHBvc2l0aW9uLm1vdmVUb09mZnNldChv
ZmZzZXQpOwogfQogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRlbGV0ZVRleHRGcm9t
Tm9kZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291
bnQpCkBAIC0zOTYsNyArMzk3LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkZWxl
dGVUZXh0RnJvbU5vZGUoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZAogCiB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogewotICAgIGludCBz
dGFydE9mZnNldCA9IG1fdXBzdHJlYW1TdGFydC5tX29mZnNldDsKKyAgICBpbnQgc3RhcnRPZmZz
ZXQgPSBtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBOb2Rl
KiBzdGFydE5vZGUgPSBtX3Vwc3RyZWFtU3RhcnQubm9kZSgpOwogICAgIAogICAgIC8vIE5ldmVy
IHJlbW92ZSB0aGUgc3RhcnQgYmxvY2sgdW5sZXNzIGl0J3MgYSB0YWJsZSwgaW4gd2hpY2ggY2Fz
ZSB3ZSB3b24ndCBtZXJnZSBjb250ZW50IGluLgpAQCAtNDI1LDEzICs0MjYsMTMgQEAgdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgaWYg
KCFzdGFydE5vZGUtPnJlbmRlcmVyKCkgfHwgKHN0YXJ0T2Zmc2V0ID09IDAgJiYgbV9kb3duc3Ry
ZWFtRW5kLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkpIHsKICAgICAgICAgICAgIC8v
IGp1c3QgZGVsZXRlCiAgICAgICAgICAgICByZW1vdmVOb2RlKHN0YXJ0Tm9kZSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAobV9kb3duc3RyZWFtRW5kLm1fb2Zmc2V0IC0gc3RhcnRPZmZzZXQgPiAwKSB7
CisgICAgICAgIH0gZWxzZSBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkgLSBzdGFydE9mZnNldCA+IDApIHsKICAgICAgICAgICAgIGlmIChzdGFydE5vZGUtPmlz
VGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIGluIGEgdGV4dCBub2RlIHRoYXQgbmVl
ZHMgdG8gYmUgdHJpbW1lZAogICAgICAgICAgICAgICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2Fz
dDxUZXh0Kj4oc3RhcnROb2RlKTsKLSAgICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUo
dGV4dCwgc3RhcnRPZmZzZXQsIG1fZG93bnN0cmVhbUVuZC5tX29mZnNldCAtIHN0YXJ0T2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUodGV4dCwgc3RhcnRPZmZzZXQs
IG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gc3RhcnRPZmZzZXQp
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZW1vdmVDaGlsZHJlbklu
UmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgbV9kb3duc3RyZWFtRW5kLm1fb2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICByZW1vdmVDaGlsZHJlbkluUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9m
ZnNldCwgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAg
ICAgICAgICAgIG1fZW5kaW5nUG9zaXRpb24gPSBtX3Vwc3RyZWFtU3RhcnQ7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTQ2MiwxNCArNDYzLDE0IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgICAgICAgICAgICAgLy8gaWYgd2Ug
anVzdCByZW1vdmVkIGEgbm9kZSBmcm9tIHRoZSBlbmQgY29udGFpbmVyLCB1cGRhdGUgZW5kIHBv
c2l0aW9uIHNvIHRoZQogICAgICAgICAgICAgICAgIC8vIGNoZWNrIGFib3ZlIHdpbGwgd29yawog
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnROb2RlKCkgPT0gbV9kb3duc3RyZWFtRW5k
Lm5vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bm9kZUluZGV4KCkg
PCAodW5zaWduZWQpbV9kb3duc3RyZWFtRW5kLm1fb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9kb3duc3RyZWFtRW5kID0gUG9zaXRpb24obV9kb3duc3RyZWFtRW5kLm5vZGUoKSwgbV9k
b3duc3RyZWFtRW5kLm1fb2Zmc2V0IC0gMSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5ub2RlSW5kZXgoKSA8ICh1bnNpZ25lZCltX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZG93bnN0cmVhbUVuZCA9IFBv
c2l0aW9uKG1fZG93bnN0cmVhbUVuZC5ub2RlKCksIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpIC0gMSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IHJlbW92ZU5vZGUobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHROb2Rl
LmdldCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBOb2RlKiBuID0g
bm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAobV9kb3duc3RyZWFt
RW5kLm5vZGUoKSA9PSBuICYmIG1fZG93bnN0cmVhbUVuZC5tX29mZnNldCA+PSBjYXJldE1heE9m
ZnNldChuKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQubm9kZSgpID09
IG4gJiYgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRN
YXhPZmZzZXQobikpIHsKICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlLmdldCgp
KTsKICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IDA7CiAgICAgICAgICAgICAgICAgfSBlbHNl
CkBAIC00NzcsMTcgKzQ3OCwxNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRs
ZUdlbmVyYWxEZWxldGUoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpZiAobV9kb3duc3RyZWFtRW5kLm5vZGUoKSAhPSBzdGFydE5vZGUgJiYgIW1fdXBzdHJl
YW1TdGFydC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpICYm
IG1fZG93bnN0cmVhbUVuZC5ub2RlKCktPmluRG9jdW1lbnQoKSAmJiBtX2Rvd25zdHJlYW1FbmQu
bV9vZmZzZXQgPj0gY2FyZXRNaW5PZmZzZXQobV9kb3duc3RyZWFtRW5kLm5vZGUoKSkpIHsKKyAg
ICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5ub2RlKCkgIT0gc3RhcnROb2RlICYmICFtX3Vwc3Ry
ZWFtU3RhcnQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSAm
JiBtX2Rvd25zdHJlYW1FbmQubm9kZSgpLT5pbkRvY3VtZW50KCkgJiYgbV9kb3duc3RyZWFtRW5k
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNaW5PZmZzZXQobV9kb3duc3RyZWFt
RW5kLm5vZGUoKSkpIHsKICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuYXRMYXN0RWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG1fZG93
bnN0cmVhbUVuZC5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIG5vZGUgaXRzZWxm
IGlzIGZ1bGx5IHNlbGVjdGVkLCBub3QganVzdCBpdHMgY29udGVudHMuICBEZWxldGUgaXQuCiAg
ICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShtX2Rvd25zdHJlYW1FbmQubm9kZSgpKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5ub2Rl
KCktPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIHRleHQgbm9k
ZSB0aGF0IG5lZWRzIHRvIGJlIHRyaW1tZWQKLSAgICAgICAgICAgICAgICAgICAgVGV4dCAqdGV4
dCA9IHN0YXRpY19jYXN0PFRleHQgKj4obV9kb3duc3RyZWFtRW5kLm5vZGUoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQubV9vZmZzZXQgPiAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUodGV4dCwgMCwgbV9kb3duc3RyZWFt
RW5kLm1fb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG93bnN0cmVhbUVuZCA9
IFBvc2l0aW9uKHRleHQsIDApOworICAgICAgICAgICAgICAgICAgICBUZXh0KiB0ZXh0ID0gc3Rh
dGljX2Nhc3Q8VGV4dCo+KG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAobV9kb3duc3RyZWFtRW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID4gMCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIDAsIG1fZG93
bnN0cmVhbUVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2Rvd25zdHJlYW1FbmQubW92ZVRvT2Zmc2V0KDApOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGNoaWxkcmVuIG9mIG1fZG93bnN0cmVhbUVu
ZC5ub2RlKCkgdGhhdCBjb21lIGFmdGVyIG1fdXBzdHJlYW1TdGFydC4KICAgICAgICAgICAgICAg
ICAvLyBEb24ndCB0cnkgdG8gcmVtb3ZlIGNoaWxkcmVuIGlmIG1fdXBzdHJlYW1TdGFydCB3YXMg
aW5zaWRlIG1fZG93bnN0cmVhbUVuZC5ub2RlKCkKQEAgLTUwNCw3ICs1MDUsNyBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0g
bi0+bm9kZUluZGV4KCkgKyAxOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShtX2Rvd25zdHJlYW1FbmQubm9kZSgpLCBvZmZz
ZXQsIG1fZG93bnN0cmVhbUVuZC5tX29mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIHJlbW92
ZUNoaWxkcmVuSW5SYW5nZShtX2Rvd25zdHJlYW1FbmQubm9kZSgpLCBvZmZzZXQsIG1fZG93bnN0
cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAg
bV9kb3duc3RyZWFtRW5kID0gUG9zaXRpb24obV9kb3duc3RyZWFtRW5kLm5vZGUoKSwgb2Zmc2V0
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01MTksMTIgKzUyMCwxMiBA
QCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVwV2hpdGVzcGFjZSgpCiAgICAgaWYg
KG1fbGVhZGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fbGVhZGluZ1doaXRlc3BhY2Uu
aXNSZW5kZXJlZENoYXJhY3RlcigpKSB7CiAgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGlj
X2Nhc3Q8VGV4dCo+KG1fbGVhZGluZ1doaXRlc3BhY2Uubm9kZSgpKTsKICAgICAgICAgQVNTRVJU
KCF0ZXh0Tm9kZS0+cmVuZGVyZXIoKSB8fCB0ZXh0Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
Y29sbGFwc2VXaGl0ZVNwYWNlKCkpOwotICAgICAgICByZXBsYWNlVGV4dEluTm9kZSh0ZXh0Tm9k
ZSwgbV9sZWFkaW5nV2hpdGVzcGFjZS5tX29mZnNldCwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmlu
ZygpKTsKKyAgICAgICAgcmVwbGFjZVRleHRJbk5vZGUodGV4dE5vZGUsIG1fbGVhZGluZ1doaXRl
c3BhY2Uub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmco
KSk7CiAgICAgfQogICAgIGlmIChtX3RyYWlsaW5nV2hpdGVzcGFjZS5pc05vdE51bGwoKSAmJiAh
bV90cmFpbGluZ1doaXRlc3BhY2UuaXNSZW5kZXJlZENoYXJhY3RlcigpKSB7CiAgICAgICAgIFRl
eHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1fdHJhaWxpbmdXaGl0ZXNwYWNlLm5v
ZGUoKSk7CiAgICAgICAgIEFTU0VSVCghdGV4dE5vZGUtPnJlbmRlcmVyKCkgfHx0ZXh0Tm9kZS0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkpOwotICAgICAgICByZXBs
YWNlVGV4dEluTm9kZSh0ZXh0Tm9kZSwgbV90cmFpbGluZ1doaXRlc3BhY2UubV9vZmZzZXQsIDEs
IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CisgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHRl
eHROb2RlLCBtX3RyYWlsaW5nV2hpdGVzcGFjZS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgMSwg
bm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXgg
ZjQ0NDQ5Yi4uYmRkYTExMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
KysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTEyOTAsOSArMTI5MCw5IEBAIHZv
aWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3Rv
cjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQo
bV9mcmFtZS0+ZG9jdW1lbnQoKSwgdGV4dCwgdHJ1ZSwgdHJ1ZSk7CiAKICAgICAgICAgTm9kZSog
YmFzZU5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+YmFzZSgpLm5vZGUoKTsKLSAgICAgICAg
dW5zaWduZWQgYmFzZU9mZnNldCA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5iYXNlKCkubV9vZmZz
ZXQ7CisgICAgICAgIHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
YmFzZSgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgICAgIE5vZGUqIGV4dGVudE5v
ZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZXh0ZW50KCkubm9kZSgpOwotICAgICAgICB1bnNp
Z25lZCBleHRlbnRPZmZzZXQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZXh0ZW50KCkubV9vZmZz
ZXQ7CisgICAgICAgIHVuc2lnbmVkIGV4dGVudE9mZnNldCA9IG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5leHRlbnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogCiAgICAgICAgIGlmIChiYXNl
Tm9kZSAmJiBiYXNlTm9kZSA9PSBleHRlbnROb2RlICYmIGJhc2VOb2RlLT5pc1RleHROb2RlKCkg
JiYgYmFzZU9mZnNldCArIHRleHQubGVuZ3RoKCkgPT0gZXh0ZW50T2Zmc2V0KSB7CiAgICAgICAg
ICAgICBtX2NvbXBvc2l0aW9uTm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihiYXNlTm9kZSk7CkBA
IC0xNjk2LDcgKzE2OTYsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5n
KGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgICAgICBQb3NpdGlvbiByYW5nZUNvbXBsaWFudFBvc2l0aW9uID0gcmFuZ2VDb21wbGlh
bnRFcXVpdmFsZW50KHBvc2l0aW9uKTsKLSAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0
U3RhcnQocmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5ub2RlKCksIHJhbmdlQ29tcGxpYW50UG9zaXRp
b24ubV9vZmZzZXQsIGVjKTsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQo
cmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5jb250YWluZXJOb2RlKCksIHJhbmdlQ29tcGxpYW50UG9z
aXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKICAgICAgICAgc3RhcnRlZFdpdGhT
ZWxlY3Rpb24gPSBmYWxzZTsgICAvLyB3b24ndCBuZWVkIHRvIHdyYXAKICAgICB9CiAgICAgCkBA
IC0yMjY5LDEzICsyMjY5LDEzIEBAIGJvb2wgRWRpdG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlv
bih1bnNpZ25lZCYgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkJiBzZWxlY3RpCiAgICAgaWYgKGVu
ZC5ub2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQubV9vZmZzZXQpIDwgbV9jb21wb3Np
dGlvblN0YXJ0KQorICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSkgPCBtX2NvbXBvc2l0aW9uU3RhcnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZC5tX29mZnNldCkgPiBtX2Nv
bXBvc2l0aW9uRW5kKQorICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpID4gbV9jb21wb3NpdGlvbkVuZCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgc2VsZWN0aW9uU3RhcnQgPSBzdGFydC5tX29mZnNldCAtIG1fY29tcG9zaXRp
b25TdGFydDsKLSAgICBzZWxlY3Rpb25FbmQgPSBzdGFydC5tX29mZnNldCAtIG1fY29tcG9zaXRp
b25FbmQ7CisgICAgc2VsZWN0aW9uU3RhcnQgPSBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpIC0gbV9jb21wb3NpdGlvblN0YXJ0OworICAgIHNlbGVjdGlvbkVuZCA9IHN0YXJ0LmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBtX2NvbXBvc2l0aW9uRW5kOwogICAgIHJldHVybiB0cnVl
OwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKaW5kZXgg
MDU5NDRiMS4uZjkyYmNlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21t
YW5kLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgIAogICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kaW5nUG9zaXRp
b24oUG9zaXRpb24obm9kZVRvSW5zZXJ0LmdldCgpLCAwKSk7CiAgICAgICAgIHNldEVuZGluZ1Nl
bGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1Bvc2l0aW9uKSk7Ci0gICAgfSBlbHNlIGlm
IChwb3MubV9vZmZzZXQgPD0gY2FyZXRNaW5PZmZzZXQocG9zLm5vZGUoKSkpIHsKKyAgICB9IGVs
c2UgaWYgKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDw9IGNhcmV0TWluT2Zmc2V0KHBv
cy5ub2RlKCkpKSB7CiAgICAgICAgIGluc2VydE5vZGVBdChub2RlVG9JbnNlcnQuZ2V0KCksIHBv
cyk7CiAgICAgICAgIAogICAgICAgICAvLyBJbnNlcnQgYW4gZXh0cmEgYnIgb3IgJ1xuJyBpZiB0
aGUganVzdCBpbnNlcnRlZCBvbmUgY29sbGFwc2VkLgpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQg
SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHNldEVuZGluZ1NlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGVUb0luc2VydC5nZXQo
KSksIERPV05TVFJFQU0pKTsKICAgICAvLyBJZiB3ZSdyZSBpbnNlcnRpbmcgYWZ0ZXIgYWxsIG9m
IHRoZSByZW5kZXJlZCB0ZXh0IGluIGEgdGV4dCBub2RlLCBvciBpbnRvIGEgbm9uLXRleHQgbm9k
ZSwKICAgICAvLyBhIHNpbXBsZSBpbnNlcnRpb24gaXMgc3VmZmljaWVudC4KLSAgICB9IGVsc2Ug
aWYgKHBvcy5tX29mZnNldCA+PSBjYXJldE1heE9mZnNldChwb3Mubm9kZSgpKSB8fCAhcG9zLm5v
ZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChwb3Mubm9kZSgpKSB8fCAhcG9zLm5vZGUoKS0+
aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIGluc2VydE5vZGVBdChub2RlVG9JbnNlcnQuZ2V0KCks
IHBvcyk7CiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0
aW9uQWZ0ZXJOb2RlKG5vZGVUb0luc2VydC5nZXQoKSksIERPV05TVFJFQU0pKTsKICAgICB9IGVs
c2UgewpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9B
cHBseSgpCiAgICAgICAgIAogICAgICAgICAvLyBEbyB0aGUgc3BsaXQKICAgICAgICAgVGV4dCog
dGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zLm5vZGUoKSk7Ci0gICAgICAgIHNwbGl0
VGV4dE5vZGUodGV4dE5vZGUsIHBvcy5tX29mZnNldCk7CisgICAgICAgIHNwbGl0VGV4dE5vZGUo
dGV4dE5vZGUsIHBvcy5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgIGluc2VydE5v
ZGVCZWZvcmUobm9kZVRvSW5zZXJ0LCB0ZXh0Tm9kZSk7CiAgICAgICAgIFBvc2l0aW9uIGVuZGlu
Z1Bvc2l0aW9uID0gUG9zaXRpb24odGV4dE5vZGUsIDApOwogICAgICAgICAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcCBiL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAppbmRleCAw
ZTljMjkxLi4zY2VhNTNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBJbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgaWYgKGlzRmlyc3RJ
bkJsb2NrICYmICFuZXN0TmV3QmxvY2spCiAgICAgICAgICAgICByZWZOb2RlID0gc3RhcnRCbG9j
azsKICAgICAgICAgZWxzZSBpZiAoaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpID09IHN0YXJ0Qmxv
Y2sgJiYgbmVzdE5ld0Jsb2NrKSB7Ci0gICAgICAgICAgICByZWZOb2RlID0gc3RhcnRCbG9jay0+
Y2hpbGROb2RlKGluc2VydGlvblBvc2l0aW9uLm1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJlZk5v
ZGUgPSBzdGFydEJsb2NrLT5jaGlsZE5vZGUoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSk7CiAgICAgICAgICAgICBBU1NFUlQocmVmTm9kZSk7IC8vIG11c3QgYmUg
dHJ1ZSBvciB3ZSdkIGJlIGluIHRoZSBlbmQgb2YgYmxvY2sgY2FzZQogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIHJlZk5vZGUgPSBpbnNlcnRpb25Qb3NpdGlvbi5ub2RlKCk7CkBAIC0yNDgs
MTYgKzI0OCwxNiBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBw
bHkoKQogICAgIGlmIChsZWFkaW5nV2hpdGVzcGFjZS5pc05vdE51bGwoKSkgewogICAgICAgICBU
ZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihsZWFkaW5nV2hpdGVzcGFjZS5ub2Rl
KCkpOwogICAgICAgICBBU1NFUlQoIXRleHROb2RlLT5yZW5kZXJlcigpIHx8IHRleHROb2RlLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7Ci0gICAgICAgIHJlcGxh
Y2VUZXh0SW5Ob2RlKHRleHROb2RlLCBsZWFkaW5nV2hpdGVzcGFjZS5tX29mZnNldCwgMSwgbm9u
QnJlYWtpbmdTcGFjZVN0cmluZygpKTsKKyAgICAgICAgcmVwbGFjZVRleHRJbk5vZGUodGV4dE5v
ZGUsIGxlYWRpbmdXaGl0ZXNwYWNlLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCAxLCBub25CcmVh
a2luZ1NwYWNlU3RyaW5nKCkpOwogICAgIH0KICAgICAKICAgICAvLyBTcGxpdCBhdCBwb3MgaWYg
aW4gdGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZS4KICAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24u
bm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNf
Y2FzdDxUZXh0Kj4oaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpKTsKLSAgICAgICAgYm9vbCBhdEVu
ZCA9ICh1bnNpZ25lZClpbnNlcnRpb25Qb3NpdGlvbi5tX29mZnNldCA+PSB0ZXh0Tm9kZS0+bGVu
Z3RoKCk7Ci0gICAgICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5tX29mZnNldCA+IDAgJiYgIWF0
RW5kKSB7Ci0gICAgICAgICAgICBzcGxpdFRleHROb2RlKHRleHROb2RlLCBpbnNlcnRpb25Qb3Np
dGlvbi5tX29mZnNldCk7Ci0gICAgICAgICAgICBpbnNlcnRpb25Qb3NpdGlvbi5tX29mZnNldCA9
IDA7CisgICAgICAgIGJvb2wgYXRFbmQgPSAodW5zaWduZWQpaW5zZXJ0aW9uUG9zaXRpb24ub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkgPj0gdGV4dE5vZGUtPmxlbmd0aCgpOworICAgICAgICBpZiAo
aW5zZXJ0aW9uUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPiAwICYmICFhdEVuZCkg
eworICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0Tm9kZSwgaW5zZXJ0aW9uUG9zaXRpb24u
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgICAgICAgICAgaW5zZXJ0aW9uUG9zaXRpb24u
bW92ZVRvT2Zmc2V0KDApOwogICAgICAgICAgICAgdmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlv
bihpbnNlcnRpb25Qb3NpdGlvbik7CiAgICAgICAgICAgICBzcGxpdFRleHQgPSB0cnVlOwogICAg
ICAgICB9CkBAIC0yODgsNyArMjg4LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JD
b21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBNb3ZlIHRoZSBzdGFydCBub2RlIGFuZCB0aGUgc2li
bGluZ3Mgb2YgdGhlIHN0YXJ0IG5vZGUuCiAgICAgaWYgKGluc2VydGlvblBvc2l0aW9uLm5vZGUo
KSAhPSBzdGFydEJsb2NrKSB7CiAgICAgICAgIE5vZGUqIG4gPSBpbnNlcnRpb25Qb3NpdGlvbi5u
b2RlKCk7Ci0gICAgICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5tX29mZnNldCA+PSBjYXJldE1h
eE9mZnNldChuKSkKKyAgICAgICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQobikpCiAgICAgICAgICAgICBuID0gbi0+bmV4
dFNpYmxpbmcoKTsKIAogICAgICAgICB3aGlsZSAobiAmJiBuICE9IGJsb2NrVG9JbnNlcnQpIHsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4IDUyZGE1ZDAuLjYwODI4ZjEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIv
V2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcApAQCAtODksOSArODksOSBAQCBi
b29sIEluc2VydFRleHRDb21tYW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxhY2UoY29uc3QgU3RyaW5n
JiB0ZXh0LCBib29sIHNlbGVjdElucwogICAgIGlmIChzdGFydC5ub2RlKCkgIT0gZW5kLm5vZGUo
KSB8fCAhc3RhcnQubm9kZSgpLT5pc1RleHROb2RlKCkgfHwgaXNUYWJTcGFuVGV4dE5vZGUoc3Rh
cnQubm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICByZXBsYWNl
VGV4dEluTm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnQubm9kZSgpKSwgc3RhcnQubV9vZmZz
ZXQsIGVuZC5tX29mZnNldCAtIHN0YXJ0Lm1fb2Zmc2V0LCB0ZXh0KTsKKyAgICByZXBsYWNlVGV4
dEluTm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnQubm9kZSgpKSwgc3RhcnQub2Zmc2V0SW5D
b250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0Lm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpLCB0ZXh0KTsKICAgICAKLSAgICBQb3NpdGlvbiBlbmRQb3NpdGlv
bihzdGFydC5ub2RlKCksIHN0YXJ0Lm1fb2Zmc2V0ICsgdGV4dC5sZW5ndGgoKSk7CisgICAgUG9z
aXRpb24gZW5kUG9zaXRpb24oc3RhcnQubm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSArIHRleHQubGVuZ3RoKCkpOwogICAgIAogICAgIC8vIFdlIGNvdWxkIGhhdmUgaW5zZXJ0
ZWQgYSBwYXJ0IG9mIGNvbXBvc2VkIGNoYXJhY3RlciBzZXF1ZW5jZSwKICAgICAvLyBzbyB3ZSBh
cmUgYmFzaWNhbGx5IHRyZWF0aW5nIGVuZGluZyBzZWxlY3Rpb24gYXMgYSByYW5nZSB0byBhdm9p
ZCB2YWxpZGF0aW9uLgpAQCAtMTU0LDggKzE1NCw4IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6
OmlucHV0KGNvbnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4
CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZG9jdW1lbnQgaXMgc2V0IHVwIHRvIHJlY2VpdmUg
dGV4dAogICAgICAgICBzdGFydFBvc2l0aW9uID0gcHJlcGFyZUZvclRleHRJbnNlcnRpb24oc3Rh
cnRQb3NpdGlvbik7CiAgICAgICAgIHJlbW92ZVBsYWNlaG9sZGVyQXQoVmlzaWJsZVBvc2l0aW9u
KHN0YXJ0UG9zaXRpb24pKTsKLSAgICAgICAgVGV4dCAqdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxU
ZXh0ICo+KHN0YXJ0UG9zaXRpb24ubm9kZSgpKTsKLSAgICAgICAgaW50IG9mZnNldCA9IHN0YXJ0
UG9zaXRpb24ubV9vZmZzZXQ7CisgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8
VGV4dCo+KHN0YXJ0UG9zaXRpb24ubm9kZSgpKTsKKyAgICAgICAgaW50IG9mZnNldCA9IHN0YXJ0
UG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAKICAgICAgICAgaW5zZXJ0VGV4dElu
dG9Ob2RlKHRleHROb2RlLCBvZmZzZXQsIHRleHQpOwogICAgICAgICBlbmRQb3NpdGlvbiA9IFBv
c2l0aW9uKHRleHROb2RlLCBvZmZzZXQgKyB0ZXh0Lmxlbmd0aCgpKTsKQEAgLTIwNiw4ICsyMDYs
OCBAQCBQb3NpdGlvbiBJbnNlcnRUZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKGNvbnN0IFBvc2l0aW9u
JiBwb3MpCiB7CiAgICAgUG9zaXRpb24gaW5zZXJ0UG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywg
RE9XTlNUUkVBTSkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgCi0gICAgTm9kZSAqbm9kZSA9
IGluc2VydFBvcy5ub2RlKCk7Ci0gICAgdW5zaWduZWQgaW50IG9mZnNldCA9IGluc2VydFBvcy5t
X29mZnNldDsKKyAgICBOb2RlKiBub2RlID0gaW5zZXJ0UG9zLm5vZGUoKTsKKyAgICB1bnNpZ25l
ZCBpbnQgb2Zmc2V0ID0gaW5zZXJ0UG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAKICAg
ICAvLyBrZWVwIHRhYnMgY29hbGVzY2VkIGluIHRhYiBzcGFuCiAgICAgaWYgKGlzVGFiU3BhblRl
eHROb2RlKG5vZGUpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvTW92ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcApp
bmRleCAyYzY1NmU3Li4wYTJkM2Y0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvTW92ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKQEAgLTQ4LDE0ICs0OCwxNCBAQCB2b2lkIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpk
b0FwcGx5KCkKICAgICAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBvdGhlcndpc2Ug
aXQgbWF5IGJlY29tZSBpbnZhbGlkIGFmdGVyIHRoZSBzZWxlY3Rpb24gaXMgZGVsZXRlZC4KICAg
ICBOb2RlICpwb3NpdGlvbk5vZGUgPSBtX3Bvc2l0aW9uLm5vZGUoKTsKLSAgICBpbnQgcG9zaXRp
b25PZmZzZXQgPSBtX3Bvc2l0aW9uLm1fb2Zmc2V0OworICAgIGludCBwb3NpdGlvbk9mZnNldCA9
IG1fcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBQb3NpdGlvbiBzZWxl
Y3Rpb25FbmQgPSBzZWxlY3Rpb24uZW5kKCk7Ci0gICAgaW50IHNlbGVjdGlvbkVuZE9mZnNldCA9
IHNlbGVjdGlvbkVuZC5tX29mZnNldDsgICAgCisgICAgaW50IHNlbGVjdGlvbkVuZE9mZnNldCA9
IHNlbGVjdGlvbkVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIGlmIChzZWxlY3Rp
b25FbmQubm9kZSgpID09IHBvc2l0aW9uTm9kZSAmJiBzZWxlY3Rpb25FbmRPZmZzZXQgPCBwb3Np
dGlvbk9mZnNldCkgewogICAgICAgICBwb3NpdGlvbk9mZnNldCAtPSBzZWxlY3Rpb25FbmRPZmZz
ZXQ7CiAgICAgICAgIFBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7
CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGFydC5ub2RlKCkgPT0gcG9zaXRpb25Ob2RlKSB7Ci0g
ICAgICAgICAgICBwb3NpdGlvbk9mZnNldCArPSBzZWxlY3Rpb25TdGFydC5tX29mZnNldDsKKyAg
ICAgICAgICAgIHBvc2l0aW9uT2Zmc2V0ICs9IHNlbGVjdGlvblN0YXJ0LmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgcG9zID0gUG9zaXRpb24ocG9zaXRpb25O
b2RlLCBwb3NpdGlvbk9mZnNldCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggMDlhZDk4NS4uZWQzZDc5NiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC04NzYsNyArODc2LDcgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gV2UgaW5z
ZXJ0ZWQgYmVmb3JlIHRoZSBzdGFydEJsb2NrIHRvIHByZXZlbnQgbmVzdGluZywgYW5kIHRoZSBj
b250ZW50IGJlZm9yZSB0aGUgc3RhcnRCbG9jayB3YXNuJ3QgaW4gaXRzIG93biBibG9jayBhbmQK
ICAgICAvLyBkaWRuJ3QgaGF2ZSBhIGJyIGFmdGVyIGl0LCBzbyB0aGUgaW5zZXJ0ZWQgY29udGVu
dCBlbmRlZCB1cCBpbiB0aGUgc2FtZSBwYXJhZ3JhcGguCi0gICAgaWYgKHN0YXJ0QmxvY2sgJiYg
aW5zZXJ0aW9uUG9zLm5vZGUoKSA9PSBzdGFydEJsb2NrLT5wYXJlbnROb2RlKCkgJiYgKHVuc2ln
bmVkKWluc2VydGlvblBvcy5tX29mZnNldCA8IHN0YXJ0QmxvY2stPm5vZGVJbmRleCgpICYmICFp
c1N0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZkluc2VydGVkQ29udGVudCkpCisgICAgaWYgKHN0YXJ0
QmxvY2sgJiYgaW5zZXJ0aW9uUG9zLm5vZGUoKSA9PSBzdGFydEJsb2NrLT5wYXJlbnROb2RlKCkg
JiYgKHVuc2lnbmVkKWluc2VydGlvblBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDwgc3Rh
cnRCbG9jay0+bm9kZUluZGV4KCkgJiYgIWlzU3RhcnRPZlBhcmFncmFwaChzdGFydE9mSW5zZXJ0
ZWRDb250ZW50KSkKICAgICAgICAgaW5zZXJ0Tm9kZUF0KGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1
bWVudCgpKS5nZXQoKSwgc3RhcnRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpKTsK
ICAgICAKICAgICBQb3NpdGlvbiBsYXN0UG9zaXRpb25Ub1NlbGVjdDsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9T
ZWxlY3Rpb25Db250cm9sbGVyLmNwcAppbmRleCBlN2JmNDkzLi5kZmQ0ZDM5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0xMDEyLDkgKzEwMTIsOSBAQCB2b2lk
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0ICpyLCBib29s
IHNlbGVjdGVkKSBjb25zdAogICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKICAgICAgICAgICAgIGlu
dCBvZmZzZXQgPSAwOwogICAgICAgICAgICAgaWYgKHItPm5vZGUoKSA9PSBtX3NlbC5zdGFydCgp
Lm5vZGUoKSkKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX3NlbC5zdGFydCgpLm1fb2Zmc2V0
OworICAgICAgICAgICAgICAgIG9mZnNldCA9IG1fc2VsLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHItPm5vZGUoKSA9PSBtX3NlbC5lbmQo
KS5ub2RlKCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWwuZW5kKCkubV9vZmZzZXQ7
CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWwuZW5kKCkuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGludCBwb3M7CiAgICAgICAg
ICAgICBJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVuZGVyZXItPmZpbmROZXh0SW5saW5lVGV4
dEJveChvZmZzZXQsIHBvcyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJh
dG9yLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDU1ZTIzYTgu
LmQwYTVmNWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisr
KyBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0xNTU4LDcgKzE1NTgsNyBA
QCBQYXNzUmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVu
Z3RoKEVsZW1lbnQgKnNjb3BlLCBpbnQgcgogICAgICAgICAgICAgICAgIFBvc2l0aW9uIHJ1bkVu
ZCA9IFZpc2libGVQb3NpdGlvbihydW5TdGFydCkubmV4dCgpLmRlZXBFcXVpdmFsZW50KCk7CiAg
ICAgICAgICAgICAgICAgaWYgKHJ1bkVuZC5pc05vdE51bGwoKSkgewogICAgICAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgdGV4dFJ1blJh
bmdlLT5zZXRFbmQocnVuRW5kLm5vZGUoKSwgcnVuRW5kLm1fb2Zmc2V0LCBlYyk7CisgICAgICAg
ICAgICAgICAgICAgIHRleHRSdW5SYW5nZS0+c2V0RW5kKHJ1bkVuZCwgZWMpOwogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIWVjKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9XZWJDb3Jl
L2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggNjIzNWY3YS4uZWVkYzQ3NyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtNDExLDcgKzQxMSw3IEBAIHZvaWQgVHlwaW5nQ29t
bWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wg
a2lsbFJpbmcpCiAKICAgICAgICAgICAgIHNlbGVjdGlvblRvRGVsZXRlID0gc2VsZWN0aW9uLnNl
bGVjdGlvbigpOwogCi0gICAgICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkgJiYgc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkubm9kZSgpID09IHNlbGVjdGlvblRv
RGVsZXRlLnN0YXJ0KCkubm9kZSgpICYmIHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLm1fb2Zmc2V0
IC0gc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKS5tX29mZnNldCA+IDEpIHsKKyAgICAgICAgICAg
IGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSAmJiBzZWxlY3Rpb25Ub0Rl
bGV0ZS5lbmQoKS5hbmNob3JOb2RlKCkgPT0gc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKS5hbmNo
b3JOb2RlKCkgJiYgc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSAtIHNlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA+IDEpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgVW5pY29k
ZSBjb2RlIHBvaW50cyB0byBiZSBkZWxldGVkLCBhZGp1c3QgdGhlIHJhbmdlIHRvIG1hdGNoIHBs
YXRmb3JtIGNvbnZlbnRpb25zLgogICAgICAgICAgICAgICAgIHNlbGVjdGlvblRvRGVsZXRlLnNl
dFdpdGhvdXRWYWxpZGF0aW9uKHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLCBzZWxlY3Rpb25Ub0Rl
bGV0ZS5lbmQoKS5wcmV2aW91cyhCYWNrd2FyZERlbGV0aW9uKSk7CiAgICAgICAgICAgICB9CkBA
IC00NzYsNyArNDc2LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJl
c3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2kKICAgICAgICAgICAgIGlm
ICh2aXNpYmxlRW5kID09IGVuZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpKQogICAgICAgICAgICAg
ICAgIGRvd25zdHJlYW1FbmQgPSB2aXNpYmxlRW5kLm5leHQodHJ1ZSkuZGVlcEVxdWl2YWxlbnQo
KS5kb3duc3RyZWFtKCk7CiAgICAgICAgICAgICAvLyBXaGVuIGRlbGV0aW5nIHRhYmxlczogU2Vs
ZWN0IHRoZSB0YWJsZSBmaXJzdCwgdGhlbiBwZXJmb3JtIHRoZSBkZWxldGlvbgotICAgICAgICAg
ICAgaWYgKGRvd25zdHJlYW1FbmQubm9kZSgpICYmIGRvd25zdHJlYW1FbmQubm9kZSgpLT5yZW5k
ZXJlcigpICYmIGRvd25zdHJlYW1FbmQubm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYg
ZG93bnN0cmVhbUVuZC5tX29mZnNldCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoZG93bnN0cmVh
bUVuZC5ub2RlKCkgJiYgZG93bnN0cmVhbUVuZC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgZG93bnN0
cmVhbUVuZC5ub2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSAmJiBkb3duc3RyZWFtRW5kLmF0
Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpIHsKICAgICAgICAgICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKSwgbGFz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGRvd25zdHJlYW1FbmQubm9kZSgpKSwgRE9XTlNU
UkVBTSkpOwogICAgICAgICAgICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCgpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ5OSwxMCArNDk5LDEwIEBAIHZvaWQgVHlwaW5nQ29t
bWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBib29sIGtpCiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlu
dCBleHRyYUNoYXJhY3RlcnM7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Ub0Rl
bGV0ZS5zdGFydCgpLm5vZGUoKSA9PSBzZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5ub2RlKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBleHRyYUNoYXJhY3RlcnMgPSBzZWxlY3Rpb25Ub0RlbGV0
ZS5lbmQoKS5tX29mZnNldCAtIHNlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkubV9vZmZzZXQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBleHRyYUNoYXJhY3RlcnMgPSBzZWxlY3Rpb25Ub0RlbGV0
ZS5lbmQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gc2VsZWN0aW9uVG9EZWxldGUuc3Rh
cnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUNoYXJhY3RlcnMgPSBzZWxlY3Rpb25Ub0Rl
bGV0ZS5lbmQoKS5tX29mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZW50ID0gUG9zaXRp
b24oZXh0ZW50Lm5vZGUoKSwgZXh0ZW50Lm1fb2Zmc2V0ICsgZXh0cmFDaGFyYWN0ZXJzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQ2hhcmFjdGVycyA9IHNlbGVjdGlvblRvRGVsZXRl
LmVuZCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGV4
dGVudCA9IFBvc2l0aW9uKGV4dGVudC5ub2RlKCksIGV4dGVudC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpICsgZXh0cmFDaGFyYWN0ZXJzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgc2VsZWN0aW9uQWZ0ZXJVbmRvLnNldFdpdGhvdXRWYWxpZGF0aW9uKHN0YXJ0aW5nU2Vs
ZWN0aW9uKCkuc3RhcnQoKSwgZXh0ZW50KTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5jcHAKaW5kZXggZmQ1YmM2Ny4uN2VhMGNhZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5jcHAKQEAgLTUyMCw3ICs1MjAsNyBAQCBVQ2hhciBWaXNpYmxlUG9zaXRpb246
OmNoYXJhY3RlckFmdGVyKCkgY29uc3QKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5v
ZGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2Fz
dDxUZXh0Kj4ocG9zLm5vZGUoKSk7Ci0gICAgaW50IG9mZnNldCA9IHBvcy5tX29mZnNldDsKKyAg
ICBpbnQgb2Zmc2V0ID0gcG9zLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwogICAgIGlmICgodW5z
aWduZWQpb2Zmc2V0ID49IHRleHROb2RlLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgcmV0dXJuIHRleHROb2RlLT5kYXRhKClbb2Zmc2V0XTsKQEAgLTU3Niw3ICs1NzYsNyBAQCB2
b2lkIFZpc2libGVQb3NpdGlvbjo6ZGVidWdQb3NpdGlvbihjb25zdCBjaGFyKiBtc2cpIGNvbnN0
CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFsl
c106IG51bGxcbiIsIG1zZyk7CiAgICAgZWxzZQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBv
c2l0aW9uIFslc106ICVzIFslcF0gYXQgJWRcbiIsIG1zZywgbV9kZWVwUG9zaXRpb24ubm9kZSgp
LT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1fZGVlcFBvc2l0aW9uLm5vZGUoKSwgbV9kZWVw
UG9zaXRpb24ubV9vZmZzZXQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFsl
c106ICVzIFslcF0gYXQgJWRcbiIsIG1zZywgbV9kZWVwUG9zaXRpb24ubm9kZSgpLT5ub2RlTmFt
ZSgpLnV0ZjgoKS5kYXRhKCksIG1fZGVlcFBvc2l0aW9uLm5vZGUoKSwgbV9kZWVwUG9zaXRpb24u
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC01OTcs
NDggKzU5Nyw0NiBAQCBQYXNzUmVmUHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZzdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uCiB7CiAgICAgaWYgKHN0YXJ0Lmlz
TnVsbCgpIHx8IGVuZC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBQ
b3NpdGlvbiBzID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHN0YXJ0KTsKICAgICBQb3NpdGlv
biBlID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGVuZCk7Ci0gICAgcmV0dXJuIFJhbmdlOjpj
cmVhdGUocy5ub2RlKCktPmRvY3VtZW50KCksIHMubm9kZSgpLCBzLm1fb2Zmc2V0LCBlLm5vZGUo
KSwgZS5tX29mZnNldCk7CisgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUocy5ub2RlKCktPmRvY3Vt
ZW50KCksIHMsIGUpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24o
Y29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKK1Zpc2libGVQb3NpdGlvbiBzdGFy
dFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSogciwgRUFmZmluaXR5IGFmZmluaXR5KQogewot
ICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oci0+c3Rh
cnRDb250YWluZXIoZXhjZXB0aW9uKSwgci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgYWZmaW5p
dHkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oci0+c3RhcnRDb250YWluZXIoZWMpLCByLT5zdGFydE9mZnNldChlYyksIGFmZmluaXR5KTsK
IH0KIAotVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSAqciwg
RUFmZmluaXR5IGFmZmluaXR5KQorVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihj
b25zdCBSYW5nZSogciwgRUFmZmluaXR5IGFmZmluaXR5KQogewotICAgIGludCBleGNlcHRpb24g
PSAwOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oci0+ZW5kQ29udGFpbmVyKGV4Y2VwdGlv
biksIHItPmVuZE9mZnNldChleGNlcHRpb24pLCBhZmZpbml0eSk7CisgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihyLT5lbmRDb250YWluZXIoZWMp
LCByLT5lbmRPZmZzZXQoZWMpLCBhZmZpbml0eSk7CiB9CiAKLWJvb2wgc2V0U3RhcnQoUmFuZ2Ug
KnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uKQorYm9vbCBzZXRTdGFy
dChSYW5nZSogcmFuZ2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQog
ewotICAgIGlmICghcikKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgUG9zaXRpb24gcCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlUG9zaXRpb24p
OwotICAgIGludCBjb2RlID0gMDsKLSAgICByLT5zZXRTdGFydChwLm5vZGUoKSwgcC5tX29mZnNl
dCwgY29kZSk7Ci0gICAgcmV0dXJuIGNvZGUgPT0gMDsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICByYW5nZS0+c2V0U3RhcnQocmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHZpc2libGVQ
b3NpdGlvbiksIGVjKTsKKyAgICByZXR1cm4gIWVjOwogfQogCi1ib29sIHNldEVuZChSYW5nZSAq
ciwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCitib29sIHNldEVuZChS
YW5nZSogcmFuZ2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewot
ICAgIGlmICghcikKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
UG9zaXRpb24gcCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlUG9zaXRpb24pOwot
ICAgIGludCBjb2RlID0gMDsKLSAgICByLT5zZXRFbmQocC5ub2RlKCksIHAubV9vZmZzZXQsIGNv
ZGUpOwotICAgIHJldHVybiBjb2RlID09IDA7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgcmFuZ2UtPnNldEVuZChyYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQodmlzaWJsZVBvc2l0aW9u
KSwgZWMpOworICAgIHJldHVybiAhZWM7CiB9CiAKLU5vZGUgKmVuY2xvc2luZ0Jsb2NrRmxvd0Vs
ZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCitOb2RlKiBlbmNs
b3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0
aW9uKQogewogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBOVUxMOworICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcCBiL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCAyNzlhZGYyLi4yZDU0MWVhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgUGFz
c1JlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25z
dAogICAgICAgICBBU1NFUlQoaXNSYW5nZSgpKTsKICAgICAgICAgcyA9IG1fc3RhcnQuZG93bnN0
cmVhbSgpOwogICAgICAgICBlID0gbV9lbmQudXBzdHJlYW0oKTsKLSAgICAgICAgaWYgKFJhbmdl
Ojpjb21wYXJlQm91bmRhcnlQb2ludHMocy5ub2RlKCksIHMubV9vZmZzZXQsIGUubm9kZSgpLCBl
Lm1fb2Zmc2V0KSA+IDApIHsKKyAgICAgICAgaWYgKFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2lu
dHMocywgZSkgPiAwKSB7CiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXJ0IGlzIGJl
Zm9yZSB0aGUgZW5kLgogICAgICAgICAgICAgLy8gVGhlIGVuZCBjYW4gd2luZCB1cCBiZWZvcmUg
dGhlIHN0YXJ0IGlmIGNvbGxhcHNlZCB3aGl0ZXNwYWNlIGlzIHRoZSBvbmx5IHRoaW5nIHNlbGVj
dGVkLgogICAgICAgICAgICAgUG9zaXRpb24gdG1wID0gczsKQEAgLTIxMyw3ICsyMTMsNyBAQCBz
dGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gbWFrZVNlYXJjaFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBw
b3MpCiAKICAgICBQb3NpdGlvbiBzdGFydChyYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocG9zKSk7
CiAgICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhib3VuZGFyeSwgZWMpOwotICAg
IHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5ub2RlKCksIHN0YXJ0Lm1fb2Zmc2V0LCBlYyk7
CisgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIAogICAgIEFTU0VSVCghZWMpOwogICAgIGlm
IChlYykKQEAgLTU4OCwxMyArNTg4LDEzIEBAIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6ZGVidWdQ
b3NpdGlvbigpIGNvbnN0CiAKICAgICBpZiAobV9zdGFydCA9PSBtX2VuZCkgewogICAgICAgICBQ
b3NpdGlvbiBwb3MgPSBtX3N0YXJ0OwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBvczogICAg
ICAgICVzICVwOiVkXG4iLCBwb3Mubm9kZSgpLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCksIHBv
cy5ub2RlKCksIHBvcy5tX29mZnNldCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicG9zOiAg
ICAgICAgJXMgJXA6JWRcbiIsIHBvcy5ub2RlKCktPm5vZGVOYW1lKCkudXRmOCgpLmRhdGEoKSwg
cG9zLm5vZGUoKSwgcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIFBvc2l0aW9uIHBvcyA9IG1fc3RhcnQ7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAic3RhcnQ6ICAgICAgJXMgJXA6JWRcbiIsIHBvcy5ub2RlKCktPm5vZGVOYW1lKCkudXRmOCgp
LmRhdGEoKSwgcG9zLm5vZGUoKSwgcG9zLm1fb2Zmc2V0KTsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJzdGFydDogICAgICAlcyAlcDolZFxuIiwgcG9zLm5vZGUoKS0+bm9kZU5hbWUoKS51dGY4
KCkuZGF0YSgpLCBwb3Mubm9kZSgpLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS1cbiIpOwogICAgICAgICBwb3MgPSBtX2VuZDsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJl
bmQ6ICAgICAgICAlcyAlcDolZFxuIiwgcG9zLm5vZGUoKS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0
YSgpLCBwb3Mubm9kZSgpLCBwb3MubV9vZmZzZXQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
ImVuZDogICAgICAgICVzICVwOiVkXG4iLCBwb3Mubm9kZSgpLT5ub2RlTmFtZSgpLnV0ZjgoKS5k
YXRhKCksIHBvcy5ub2RlKCksIHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu
Iik7CiAgICAgfQogCkBAIC02MjgsNyArNjI4LDcgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpz
aG93VHJlZUZvclRoaXMoKSBjb25zdAogewogICAgIGlmIChzdGFydCgpLm5vZGUoKSkgewogICAg
ICAgICBzdGFydCgpLm5vZGUoKS0+c2hvd1RyZWVBbmRNYXJrKHN0YXJ0KCkubm9kZSgpLCAiUyIs
IGVuZCgpLm5vZGUoKSwgIkUiKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJzdGFydCBvZmZz
ZXQ6ICVkLCBlbmQgb2Zmc2V0OiAlZFxuIiwgc3RhcnQoKS5tX29mZnNldCwgZW5kKCkubV9vZmZz
ZXQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInN0YXJ0IG9mZnNldDogJWQsIGVuZCBvZmZz
ZXQ6ICVkXG4iLCBzdGFydCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVuZCgpLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAK
aW5kZXggMDU1YzNhNy4uZWMwYTk2OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCkBAIC05OCw4
ICs5OCw4IEBAIGludCBjb21wYXJlUG9zaXRpb25zKGNvbnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQ
b3NpdGlvbiYgYikKICAgICBBU1NFUlQobm9kZUEpOwogICAgIE5vZGUqIG5vZGVCID0gYi5ub2Rl
KCk7CiAgICAgQVNTRVJUKG5vZGVCKTsKLSAgICBpbnQgb2Zmc2V0QSA9IGEubV9vZmZzZXQ7Ci0g
ICAgaW50IG9mZnNldEIgPSBiLm1fb2Zmc2V0OworICAgIGludCBvZmZzZXRBID0gYS5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpOworICAgIGludCBvZmZzZXRCID0gYi5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpOwogCiAgICAgTm9kZSogc2hhZG93QW5jZXN0b3JBID0gbm9kZUEtPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpOwogICAgIGlmIChzaGFkb3dBbmNlc3RvckEgPT0gbm9kZUEpCkBAIC0zMTUs
MjQgKzMxNSwyOCBAQCBOb2RlKiBlbmNsb3NpbmdCbG9jayhOb2RlKiBub2RlKQogLy8gYWZ0ZXIg
PGltZz4sIGJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhhdCB0byAoZGl2LCAxKSBiZWZvcmUgaGFu
ZGluZyB0aGUKIC8vIHBvc2l0aW9uIHRvIGEgUmFuZ2Ugb2JqZWN0LiAgSWRlYWxseSBhbGwgaW50
ZXJuYWwgcG9zaXRpb25zIHNob3VsZAogLy8gYmUgInJhbmdlIGNvbXBsaWFudCIgZm9yIHNpbXBs
aWNpdHkuCisvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBjYW4gYmUgcmVtb3ZlZCBhbiByZXBsYWNl
ZCB3aXRoIGNhbGxzIHRvCisvLyBQb3NpdGlvbjo6Y29udGFpbmVyTm9kZSgpIGFuZCBQb3NpdGlv
bjo6Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpCisvLyBvciBhIG5ldyBQb3NpdGlvbjo6
dG9QYXJlbnRBbmNob3JlZFBvc2l0aW9uKCkgd2hpY2ggZGlkIHRoZSBzYW1lPwogUG9zaXRpb24g
cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7CiAgICAgaWYg
KHBvcy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBOb2RlKiBu
b2RlID0gcG9zLm5vZGUoKTsKLQotICAgIGlmIChwb3MubV9vZmZzZXQgPD0gMCkgeworICAgIAor
ICAgIEFTU0VSVChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSAwKTsKKyAgICBpZiAo
cG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPD0gMCkgewogICAgICAgICBpZiAobm9kZS0+
cGFyZW50Tm9kZSgpICYmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkgfHwgaXNUYWJsZUVs
ZW1lbnQobm9kZSkpKQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShub2Rl
KTsKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUsIDApOwogICAgIH0KIAogICAgIGlmIChu
b2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUs
IG1pbihub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSwgcG9zLm1fb2Zmc2V0KSk7CisgICAgICAg
IHJldHVybiBQb3NpdGlvbihub2RlLCBtaW4obm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCksIHBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSk7CiAKICAgICBpbnQgbWF4Q29tcGxpYW50T2Zm
c2V0ID0gbm9kZS0+Y2hpbGROb2RlQ291bnQoKTsKLSAgICBpZiAocG9zLm1fb2Zmc2V0ID4gbWF4
Q29tcGxpYW50T2Zmc2V0KSB7CisgICAgaWYgKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
ID4gbWF4Q29tcGxpYW50T2Zmc2V0KSB7CiAgICAgICAgIGlmIChub2RlLT5wYXJlbnROb2RlKCkp
CiAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUobm9kZSk7CiAKQEAgLTM0Miwx
MiArMzQ2LDEyIEBAIFBvc2l0aW9uIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChjb25zdCBQb3Np
dGlvbiYgcG9zKQogICAgIH0gCiAKICAgICAvLyBFZGl0aW5nIHNob3VsZCBuZXZlciBnZW5lcmF0
ZSBwb3NpdGlvbnMgbGlrZSB0aGlzLgotICAgIGlmICgocG9zLm1fb2Zmc2V0IDwgbWF4Q29tcGxp
YW50T2Zmc2V0KSAmJiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpIHsKKyAgICBpZiAoKHBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDwgbWF4Q29tcGxpYW50T2Zmc2V0KSAmJiBlZGl0
aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybiBub2RlLT5wYXJlbnROb2RlKCkgPyBwb3NpdGlvbkJlZm9yZU5vZGUo
bm9kZSkgOiBQb3NpdGlvbihub2RlLCAwKTsKICAgICB9CiAgICAgCi0gICAgaWYgKHBvcy5tX29m
ZnNldCA9PSBtYXhDb21wbGlhbnRPZmZzZXQgJiYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2Rl
KSB8fCBpc1RhYmxlRWxlbWVudChub2RlKSkpCisgICAgaWYgKHBvcy5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpID09IG1heENvbXBsaWFudE9mZnNldCAmJiAoZWRpdGluZ0lnbm9yZXNDb250ZW50
KG5vZGUpIHx8IGlzVGFibGVFbGVtZW50KG5vZGUpKSkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9u
QWZ0ZXJOb2RlKG5vZGUpOwogICAgIAogICAgIHJldHVybiBQb3NpdGlvbihwb3MpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvV2ViQ29yZS9lZGl0aW5n
L3Zpc2libGVfdW5pdHMuY3BwCmluZGV4IDFlOGIwNWIuLmQ5ZGQ4MjQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvdmlz
aWJsZV91bml0cy5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgc3RhdGljIGludCBsYXN0Tm9uQ29tcGxl
eENvbnRleHRMaW5lQnJlYWsoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiAg
ICAgcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRh
cnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCB1bnNpZ25lZCAoKnNlYXJjaEZ1bmN0aW9uKShj
b25zdCBVQ2hhciAqLCB1bnNpZ25lZCwgdW5zaWduZWQpKQorc3RhdGljIFZpc2libGVQb3NpdGlv
biBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgdW5zaWduZWQgKCpz
ZWFyY2hGdW5jdGlvbikoY29uc3QgVUNoYXIgKiwgdW5zaWduZWQsIHVuc2lnbmVkKSkKIHsKICAg
ICBQb3NpdGlvbiBwb3MgPSBjLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgTm9kZSAqbiA9IHBvcy5u
b2RlKCk7CkBAIC04OSw3ICs4OSw5IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNC
b3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIHVuc2lnbmVkICgqc2VhCiAgICAgaWYg
KGhhc0xpbmVCcmVha2luZ1Byb3BlcnR5Q29tcGxleENvbnRleHQoYy5jaGFyYWN0ZXJCZWZvcmUo
KSkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBmb3J3YXJkc1NjYW5SYW5nZShkLT5jcmVhdGVS
YW5nZSgpKTsKICAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldEVuZEFmdGVyKGJvdW5kYXJ5
LCBlYyk7Ci0gICAgICAgIGZvcndhcmRzU2NhblJhbmdlLT5zZXRTdGFydChlbmQubm9kZSgpLCBl
bmQubV9vZmZzZXQsIGVjKTsKKyAgICAgICAgLy9BU1NFUlQoIWVjKTsgLy8gRklYTUU6IFdlIHdv
dWxkIGhpdCB0aGlzIEFTU0VSVCwgYnV0IGRvbid0IGhpdCB0aGUgbGF0ZXIgb25lcyBiZWNhdXNl
IG9mIGVjID0gMCBpbiBzZXRTdGFydAorICAgICAgICBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0U3Rh
cnQoZW5kLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOwogICAgICAgICBUZXh0SXRlcmF0b3Ig
Zm9yd2FyZHNJdGVyYXRvcihmb3J3YXJkc1NjYW5SYW5nZS5nZXQoKSk7CiAgICAgICAgIHdoaWxl
ICghZm9yd2FyZHNJdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgICAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycyA9IGZvcndhcmRzSXRlcmF0b3IuY2hhcmFjdGVycygpOwpAQCAtMTAzLDkgKzEw
NSw5IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNp
YmxlUG9zaXRpb24gJmMsIHVuc2lnbmVkICgqc2VhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBz
ZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQubm9kZSgpLCBzdGFydC5tX29mZnNldCwgZWMpOwot
ICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoZW5kLm5vZGUoKSwgZW5kLm1fb2Zmc2V0LCBlYyk7Ci0g
ICAgCisgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LCBlYyk7CisgICAgQVNTRVJUKCFl
Yyk7CisgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChlbmQsIGVjKTsKICAgICBBU1NFUlQoIWVjKTsK
ICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKQEAgLTE3NCw3
ICsxNzYsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zdCBWaXNp
YmxlUG9zaXRpb24gJmMsIHVuc2lnbmVkICgqc2VhcmNoRgogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIGlmIChoYXNMaW5lQnJlYWtpbmdQcm9wZXJ0eUNvbXBsZXhDb250ZXh0KGMuY2hh
cmFjdGVyQWZ0ZXIoKSkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWNrd2FyZHNTY2FuUmFu
Z2UoZC0+Y3JlYXRlUmFuZ2UoKSk7Ci0gICAgICAgIGJhY2t3YXJkc1NjYW5SYW5nZS0+c2V0RW5k
KHN0YXJ0Lm5vZGUoKSwgc3RhcnQubV9vZmZzZXQsIGVjKTsKKyAgICAgICAgYmFja3dhcmRzU2Nh
blJhbmdlLT5zZXRFbmQoc3RhcnQsIGVjKTsKICAgICAgICAgU2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihiYWNrd2FyZHNTY2FuUmFuZ2UuZ2V0KCkpOwog
ICAgICAgICB3aGlsZSAoIWJhY2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgICAg
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gYmFja3dhcmRzSXRlcmF0b3IuY2hhcmFjdGVycygp
OwpAQCAtMTg5LDcgKzE5MSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgdW5zaWduZWQgKCpzZWFyY2hGCiAgICAgfQogCiAg
ICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhib3VuZGFyeSwgZWMpOwotICAgIHNl
YXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5ub2RlKCksIHN0YXJ0Lm1fb2Zmc2V0LCBlYyk7Cisg
ICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LCBlYyk7CiAgICAgVGV4dEl0ZXJhdG9yIGl0
KHNlYXJjaFJhbmdlLmdldCgpLCB0cnVlKTsKICAgICB1bnNpZ25lZCBuZXh0ID0gMDsKICAgICBi
b29sIGluVGV4dFNlY3VyaXR5TW9kZSA9IHN0YXJ0Lm5vZGUoKSAmJiBzdGFydC5ub2RlKCktPnJl
bmRlcmVyKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT50ZXh0U2VjdXJp
dHkoKSAhPSBUU05PTkU7CkBAIC0zNTIsNyArMzU0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBzdGFydFBvc2l0aW9uRm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCiAgICAgICAg
IC8vIFRoZXJlIGFyZSBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldCAwIGluIGJsb2NrcyB3aXRo
b3V0CiAgICAgICAgIC8vIFJvb3RJbmxpbmVCb3hlcywgbGlrZSBlbXB0eSBlZGl0YWJsZSBibG9j
a3MgYW5kIGJvcmRlcmVkIGJsb2Nrcy4KICAgICAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICAgICAgaWYgKHAubm9kZSgpLT5yZW5kZXJlcigpICYmIHAubm9kZSgpLT5y
ZW5kZXJlcigpLT5pc1JlbmRlckJsb2NrKCkgJiYgcC5tX29mZnNldCA9PSAwKQorICAgICAgICBp
ZiAocC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgcC5ub2RlKCktPnJlbmRlcmVyKCktPmlzUmVuZGVy
QmxvY2soKSAmJiBwLmF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gcG9zaXRpb25Bdm9pZGluZ0ZpcnN0UG9zaXRpb25JblRhYmxlKGMpOwogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwpAQCAtMzk5LDcgKzQwMSw3IEBA
IFZpc2libGVQb3NpdGlvbiBzdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCiAg
ICAgICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgaW5wdXQgcG9zaXRpb24uICBUaGlzIGZpeCBpcyB0
byBhY2NvdW50IGZvciB0aGUgZGlzY3JlcGFuY3kgYmV0d2VlbiBsaW5lcyB3aXRoIHdlYmtpdC1s
aW5lLWJyZWFrOmFmdGVyLXdoaXRlLXNwYWNlIAogICAgICAgICAvLyBzdHlsZSB2ZXJzdXMgbGlu
ZXMgd2l0aG91dCB0aGF0IHN0eWxlLCB3aGljaCB3b3VsZCBicmVhayBiZWZvcmUgYSBzcGFjZSBi
eSBkZWZhdWx0LiAKICAgICAgICAgUG9zaXRpb24gcCA9IHZpc1Bvcy5kZWVwRXF1aXZhbGVudCgp
OwotICAgICAgICBpZiAocC5tX29mZnNldCA+IGMuZGVlcEVxdWl2YWxlbnQoKS5tX29mZnNldCAm
JiBwLm5vZGUoKS0+aXNTYW1lTm9kZShjLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKSkgeworICAg
ICAgICBpZiAocC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gYy5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgJiYgcC5ub2RlKCktPmlzU2FtZU5vZGUoYy5kZWVw
RXF1aXZhbGVudCgpLm5vZGUoKSkpIHsKICAgICAgICAgICAgIHZpc1BvcyA9IGMucHJldmlvdXMo
KTsKICAgICAgICAgICAgIGlmICh2aXNQb3MuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbigpOwpAQCAtNDIwLDcgKzQyMiw3IEBAIHN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gZW5kUG9zaXRpb25Gb3JMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYykKICAg
ICAgICAgLy8gVGhlcmUgYXJlIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0IDAgaW4gYmxvY2tz
IHdpdGhvdXQKICAgICAgICAgLy8gUm9vdElubGluZUJveGVzLCBsaWtlIGVtcHR5IGVkaXRhYmxl
IGJsb2NrcyBhbmQgYm9yZGVyZWQgYmxvY2tzLgogICAgICAgICBQb3NpdGlvbiBwID0gYy5kZWVw
RXF1aXZhbGVudCgpOwotICAgICAgICBpZiAocC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgcC5ub2Rl
KCktPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2soKSAmJiBwLm1fb2Zmc2V0ID09IDApCisgICAg
ICAgIGlmIChwLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNS
ZW5kZXJCbG9jaygpICYmIHAuYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKICAgICAg
ICAgICAgIHJldHVybiBjOwogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAg
fQpAQCAtNjM3LDcgKzYzOSw3IEBAIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBpbnQgeCkKICAgICAgICAgLy8g
TmVlZCB0byBtb3ZlIGZvcndhcmQgdG8gbmV4dCBjb250YWluaW5nIGVkaXRhYmxlIGJsb2NrIGlu
IHRoaXMgcm9vdCBlZGl0YWJsZQogICAgICAgICAvLyBibG9jayBhbmQgZmluZCB0aGUgZmlyc3Qg
cm9vdCBsaW5lIGJveCBpbiB0aGF0IGJsb2NrLgogICAgICAgICBOb2RlKiBzdGFydEJsb2NrID0g
ZW5jbG9zaW5nQmxvY2sobm9kZSk7Ci0gICAgICAgIE5vZGUqIG4gPSBuZXh0TGVhZldpdGhTYW1l
RWRpdGFiaWxpdHkobm9kZSwgcC5tX29mZnNldCk7CisgICAgICAgIE5vZGUqIG4gPSBuZXh0TGVh
ZldpdGhTYW1lRWRpdGFiaWxpdHkobm9kZSwgcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsK
ICAgICAgICAgd2hpbGUgKG4gJiYgc3RhcnRCbG9jayA9PSBlbmNsb3NpbmdCbG9jayhuKSkKICAg
ICAgICAgICAgIG4gPSBuZXh0TGVhZldpdGhTYW1lRWRpdGFiaWxpdHkobik7CiAgICAgICAgIHdo
aWxlIChuKSB7CkBAIC03NTIsMTAgKzc1NCwxMCBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBh
cmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCiAKICAgICBOb2RlKiBzdGFydEJsb2Nr
ID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKTsKIAotICAgIE5vZGUgKm5vZGUgPSBzdGFydE5v
ZGU7Ci0gICAgaW50IG9mZnNldCA9IHAubV9vZmZzZXQ7CisgICAgTm9kZSogbm9kZSA9IHN0YXJ0
Tm9kZTsKKyAgICBpbnQgb2Zmc2V0ID0gcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogCi0g
ICAgTm9kZSAqbiA9IHN0YXJ0Tm9kZTsKKyAgICBOb2RlKiBuID0gc3RhcnROb2RlOwogICAgIHdo
aWxlIChuKSB7CiAgICAgICAgIGlmIChuLT5pc0NvbnRlbnRFZGl0YWJsZSgpICE9IHN0YXJ0Tm9k
ZS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODExLDEyICs4
MTMsMTIgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmYykKICAgICAgICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShz
dGFydE5vZGUpOwogICAgIAogICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhz
dGFydE5vZGUpOwotICAgIE5vZGUgKnN0YXlJbnNpZGVCbG9jayA9IHN0YXJ0QmxvY2s7Ci0gICAg
Ci0gICAgTm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsKLSAgICBpbnQgb2Zmc2V0ID0gcC5tX29mZnNl
dDsKKyAgICBOb2RlKiBzdGF5SW5zaWRlQmxvY2sgPSBzdGFydEJsb2NrOworCisgICAgTm9kZSog
bm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICBpbnQgb2Zmc2V0ID0gcC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpOwogCi0gICAgTm9kZSAqbiA9IHN0YXJ0Tm9kZTsKKyAgICBOb2RlKiBuID0gc3RhcnRO
b2RlOwogICAgIHdoaWxlIChuKSB7CiAgICAgICAgIGlmIChuLT5pc0NvbnRlbnRFZGl0YWJsZSgp
ICE9IHN0YXJ0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgIGJyZWFrOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvV2ViQ29y
ZS9wYWdlL0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IGQ1YjdmZjUuLmFiNTZkYTQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9XZWJD
b3JlL3BhZ2UvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTQwNCw3ICs0MDQsNyBAQCBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIHVwZGF0ZUFYTGluZVN0YXJ0Rm9yVmlzaWJsZVBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbgogICAgICAgICBpZiAoIXAubm9kZSgpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIHJlbmRlcmVyID0gcC5ub2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgICAg
IGlmICghcmVuZGVyZXIgfHwgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXAubV9vZmZz
ZXQpKQorICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygp
ICYmIHAuYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgSW5saW5lQm94KiBib3g7CiAgICAgICAgIGludCBpZ25vcmVkQ2FyZXRPZmZz
ZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAgYi9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMTVk
Nzc0Yi4uNDkyYzZhOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcApAQCAtMTY4NywxMSArMTY4NywxMSBAQCBpbnQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwbwogICAg
IFBvc2l0aW9uIGluZGV4UG9zaXRpb24gPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBpZiAo
IWluZGV4UG9zaXRpb24ubm9kZSgpIHx8IGluZGV4UG9zaXRpb24ubm9kZSgpLT5yb290RWRpdGFi
bGVFbGVtZW50KCkgIT0gbm9kZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShtX3JlbmRlcmVyLT5kb2N1bWVudCgpKTsKICAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwgMCwg
ZWMpOwotICAgIHJhbmdlLT5zZXRFbmQoaW5kZXhQb3NpdGlvbi5ub2RlKCksIGluZGV4UG9zaXRp
b24ubV9vZmZzZXQsIGVjKTsKKyAgICByYW5nZS0+c2V0RW5kKGluZGV4UG9zaXRpb24sIGVjKTsK
ICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvV2ViQ29yZS9wYWdl
L0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggODZmZTkxMS4uOTQ5YWY1YyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlv
bi5jcHAKQEAgLTg4LDQyICs4OCw0MiBAQCBOb2RlKiBET01TZWxlY3Rpb246OmFuY2hvck5vZGUo
KSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGFuY2hvclBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkubm9kZSgpOworICAgIHJldHVy
biBhbmNob3JQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLmNvbnRhaW5lck5vZGUoKTsKIH0K
IAogaW50IERPTVNlbGVjdGlvbjo6YW5jaG9yT2Zmc2V0KCkgY29uc3QKIHsKICAgICBpZiAoIW1f
ZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhbmNob3JQb3NpdGlvbih2aXNp
YmxlU2VsZWN0aW9uKCkpLm1fb2Zmc2V0OworICAgIHJldHVybiBhbmNob3JQb3NpdGlvbih2aXNp
YmxlU2VsZWN0aW9uKCkpLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwogfQogCiBOb2RlKiBET01T
ZWxlY3Rpb246OmZvY3VzTm9kZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gZm9jdXNQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkp
Lm5vZGUoKTsKKyAgICByZXR1cm4gZm9jdXNQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLmNv
bnRhaW5lck5vZGUoKTsKIH0KIAogaW50IERPTVNlbGVjdGlvbjo6Zm9jdXNPZmZzZXQoKSBjb25z
dAogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGZv
Y3VzUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5tX29mZnNldDsKKyAgICByZXR1cm4gZm9j
dXNQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwog
fQogCiBOb2RlKiBET01TZWxlY3Rpb246OmJhc2VOb2RlKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
ZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBiYXNlUG9zaXRpb24odmlzaWJs
ZVNlbGVjdGlvbigpKS5ub2RlKCk7CisgICAgcmV0dXJuIGJhc2VQb3NpdGlvbih2aXNpYmxlU2Vs
ZWN0aW9uKCkpLmNvbnRhaW5lck5vZGUoKTsKIH0KIAogaW50IERPTVNlbGVjdGlvbjo6YmFzZU9m
ZnNldCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gYmFzZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkubV9vZmZzZXQ7CisgICAg
cmV0dXJuIGJhc2VQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpOwogfQogCiAKQEAgLTEzMSwxNCArMTMxLDE0IEBAIE5vZGUqIERPTVNlbGVjdGlvbjo6
ZXh0ZW50Tm9kZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gZXh0ZW50UG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5ub2RlKCk7
CisgICAgcmV0dXJuIGV4dGVudFBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkuY29udGFpbmVy
Tm9kZSgpOwogfQogCiBpbnQgRE9NU2VsZWN0aW9uOjpleHRlbnRPZmZzZXQoKSBjb25zdAogewog
ICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGV4dGVudFBv
c2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkubV9vZmZzZXQ7CisgICAgcmV0dXJuIGV4dGVudFBv
c2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiB9CiAK
IGJvb2wgRE9NU2VsZWN0aW9uOjppc0NvbGxhcHNlZCgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CmluZGV4IGViYWRmZDkuLjk1YjVlM2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMDQsNyAr
MzA0LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNs
aWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFIKICAgICAgICAgLy8gd2FzIGNyZWF0ZWQg
cmlnaHQtdG8tbGVmdAogICAgICAgICBQb3NpdGlvbiBzdGFydCA9IG5ld1NlbGVjdGlvbi5zdGFy
dCgpOwogICAgICAgICBQb3NpdGlvbiBlbmQgPSBuZXdTZWxlY3Rpb24uZW5kKCk7Ci0gICAgICAg
IHNob3J0IGJlZm9yZSA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMocG9zLm5vZGUoKSwg
cG9zLm1fb2Zmc2V0LCBzdGFydC5ub2RlKCksIHN0YXJ0Lm1fb2Zmc2V0KTsKKyAgICAgICAgc2hv
cnQgYmVmb3JlID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhwb3MsIHN0YXJ0KTsKICAg
ICAgICAgaWYgKGJlZm9yZSA8PSAwKQogICAgICAgICAgICAgbmV3U2VsZWN0aW9uID0gVmlzaWJs
ZVNlbGVjdGlvbihwb3MsIGVuZCk7CiAgICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9GcmFtZS5jcHAgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IGFlNGYxYjQuLmY0
YmJjOTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcApAQCAtNjQ5LDcgKzY0OSw3IEBAIHZvaWQgRnJhbWU6OnNlbGVjdGlvbkxh
eW91dENoYW5nZWQoKQogICAgICAgICBpZiAoc3RhcnRQb3MuaXNOb3ROdWxsKCkgJiYgZW5kUG9z
LmlzTm90TnVsbCgpICYmIHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSAhPSBzZWxlY3Rpb24udmlz
aWJsZUVuZCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QgKnN0YXJ0UmVuZGVyZXIgPSBz
dGFydFBvcy5ub2RlKCktPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QgKmVu
ZFJlbmRlcmVyID0gZW5kUG9zLm5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIHZpZXct
PnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydFBvcy5tX29mZnNldCwgZW5kUmVuZGVy
ZXIsIGVuZFBvcy5tX29mZnNldCk7CisgICAgICAgICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3Rh
cnRSZW5kZXJlciwgc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmVuZGVy
ZXIsIGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgfQogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIubW0gYi9XZWJDb3JlL3BhZ2UvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCmlu
ZGV4IDFlNTk2ZWIuLjc1ZDZlYTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIubW0KKysrIGIvV2ViQ29yZS9wYWdlL21hYy9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlci5tbQpAQCAtMjAzLDcgKzIwMyw3IEBAIHN0YXRpYyBXZWJDb3JlVGV4
dE1hcmtlciogdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpCiAgICAgYnplcm8oJnRleHRNYXJrZXJEYXRhLCBzaXplb2YoVGV4dE1hcmtlckRhdGEp
KTsKICAgICB0ZXh0TWFya2VyRGF0YS5heElEID0gb2JqLmdldCgpLT5heE9iamVjdElEKCk7CiAg
ICAgdGV4dE1hcmtlckRhdGEubm9kZSA9IGRvbU5vZGU7Ci0gICAgdGV4dE1hcmtlckRhdGEub2Zm
c2V0ID0gZGVlcFBvcy5tX29mZnNldDsKKyAgICB0ZXh0TWFya2VyRGF0YS5vZmZzZXQgPSBkZWVw
UG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgdGV4dE1hcmtlckRhdGEuYWZmaW5p
dHkgPSB2aXNpYmxlUG9zLmFmZmluaXR5KCk7CiAgICAgcmV0dXJuIFtbV2ViQ29yZVZpZXdGYWN0
b3J5IHNoYXJlZEZhY3RvcnldIHRleHRNYXJrZXJXaXRoQnl0ZXM6JnRleHRNYXJrZXJEYXRhIGxl
bmd0aDpzaXplb2YodGV4dE1hcmtlckRhdGEpXTsKIH0KQEAgLTIyOCw3ICsyMjgsNyBAQCBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoV2ViQ29yZVRl
eHRNYXJrZXIqIHRleHRNYXJrZQogICAgIGlmICghY2FjaGUtPmlzSURpblVzZSh0ZXh0TWFya2Vy
RGF0YS5heElEKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgaWYg
KGRlZXBQb3Mubm9kZSgpICE9IHRleHRNYXJrZXJEYXRhLm5vZGUgfHwgZGVlcFBvcy5tX29mZnNl
dCAhPSB0ZXh0TWFya2VyRGF0YS5vZmZzZXQpCisgICAgaWYgKGRlZXBQb3Mubm9kZSgpICE9IHRl
eHRNYXJrZXJEYXRhLm5vZGUgfHwgZGVlcFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpICE9
IHRleHRNYXJrZXJEYXRhLm9mZnNldCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigp
OwogICAgIAogICAgIHJldHVybiB2aXNpYmxlUG9zOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwCmluZGV4IDRjMzZiYjIuLjRkYTUxYjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5jcHAKQEAgLTI5Miw3ICsyOTIsNyBAQCBpbnQgUmVuZGVyVGV4dENv
bnRyb2w6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
KQogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCkpOwog
ICAgIHJhbmdlLT5zZXRTdGFydChtX2lubmVyVGV4dC5nZXQoKSwgMCwgZWMpOwogICAgIEFTU0VS
VCghZWMpOwotICAgIHJhbmdlLT5zZXRFbmQoaW5kZXhQb3NpdGlvbi5ub2RlKCksIGluZGV4UG9z
aXRpb24ubV9vZmZzZXQsIGVjKTsKKyAgICByYW5nZS0+c2V0RW5kKGluZGV4UG9zaXRpb24sIGVj
KTsKICAgICBBU1NFUlQoIWVjKTsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChyYW5nZS5nZXQoKSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmlu
ZGV4IDIzNTA0OTEuLjExZDUwZmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCkBAIC01MTgsMTMgKzUxOCwxMyBAQCBzdGF0aWMgdm9pZCB3cml0ZVNlbGVjdGlvbihUZXh0
U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQogCiAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAgIGlmIChz
ZWxlY3Rpb24uaXNDYXJldCgpKSB7Ci0gICAgICAgIHRzIDw8ICJjYXJldDogcG9zaXRpb24gIiA8
PCBzZWxlY3Rpb24uc3RhcnQoKS5tX29mZnNldCA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNl
bGVjdGlvbi5zdGFydCgpLm5vZGUoKSk7CisgICAgICAgIHRzIDw8ICJjYXJldDogcG9zaXRpb24g
IiA8PCBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDw8ICIgb2Yg
IiA8PCBub2RlUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpKTsKICAgICAgICAgaWYg
KHNlbGVjdGlvbi5hZmZpbml0eSgpID09IFVQU1RSRUFNKQogICAgICAgICAgICAgdHMgPDwgIiAo
dXBzdHJlYW0gYWZmaW5pdHkpIjsKICAgICAgICAgdHMgPDwgIlxuIjsKICAgICB9IGVsc2UgaWYg
KHNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHRzIDw8ICJzZWxlY3Rpb24gc3RhcnQ6IHBv
c2l0aW9uICIgPDwgc2VsZWN0aW9uLnN0YXJ0KCkubV9vZmZzZXQgPDwgIiBvZiAiIDw8IG5vZGVQ
b3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpIDw8ICJcbiIKLSAgICAgICAgICAgPDwg
InNlbGVjdGlvbiBlbmQ6ICAgcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24uZW5kKCkubV9vZmZzZXQg
PDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCkubm9kZSgpKSA8PCAiXG4i
OworICAgICAgICB0cyA8PCAic2VsZWN0aW9uIHN0YXJ0OiBwb3NpdGlvbiAiIDw8IHNlbGVjdGlv
bi5zdGFydCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3Np
dGlvbihzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpIDw8ICJcbiIKKyAgICAgICAgICAgPDwgInNl
bGVjdGlvbiBlbmQ6ICAgcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24uZW5kKCkuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5lbmQoKS5u
b2RlKCkpIDw8ICJcbiI7CiB9CiAKIFN0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFJlbmRl
ck9iamVjdCogbykKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKaW5kZXggMTQ2MjA3ZC4uZTcwYTYyZiAxMDA2NDQKLS0tIGEvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAwOS0wMy0zMSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFJhbmdlOjpzZXRTdGFydC9z
ZXRFbmQoY29uc3QgUG9zaXRpb24mLCBFeGNlcHRpb25Db2RlKQorICAgICAgICBhbmQgbWFrZSBX
ZWJLaXQgdXNlIGl0IGluc3RlYWQgb2YgYWNjZXNzaW5nIG5vZGUoKSBhbmQgbV9vZmZzZXQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDk2NgorCisg
ICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3NtYXJ0
RGVsZXRlUmFuZ2VGb3JQcm9wb3NlZFJhbmdlOl0pOgorCiAyMDA5LTAzLTMwICBHcmVnIEJvbHNp
bmdhICA8Ym9sc2luZ2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZy
YXNlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAyYWE1ZmFiLi5kM2YxMGRlIDEwMDY0NAot
LS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCkBAIC04MjMsOSArODIzLDEwIEBAIHN0YXRpYyBpbmxpbmUgV2ViRGF0
YVNvdXJjZSAqZGF0YVNvdXJjZShEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgIG5ld0VuZCA9
IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChuZXdFbmQpOwogCiAgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7Ci0g
ICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgcmFuZ2UtPnNldFN0YXJ0KG5ld1N0YXJ0Lm5vZGUo
KSwgbmV3U3RhcnQubV9vZmZzZXQsIGV4Y2VwdGlvbik7Ci0gICAgcmFuZ2UtPnNldEVuZChuZXdT
dGFydC5ub2RlKCksIG5ld1N0YXJ0Lm1fb2Zmc2V0LCBleGNlcHRpb24pOworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIHJhbmdlLT5zZXRTdGFydChuZXdTdGFydCwgZWMpOworICAgIHJh
bmdlLT5zZXRFbmQobmV3U3RhcnQsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKICAgICByZXR1cm4g
W0RPTVJhbmdlIF93cmFwUmFuZ2U6cmFuZ2UuZ2V0KCldOwogfQogCg==
</data>
<flag name="review"
          id="14534"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>