<?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>23431</bug_id>
          
          <creation_ts>2009-01-20 04:01:33 -0800</creation_ts>
          <short_desc>Frame Refactor: Move methods from Frame to SelectionController</short_desc>
          <delta_ts>2012-05-30 00:50:58 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>45508</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Holger Freyther">zecke</reporter>
          <assigned_to name="Holger Freyther">zecke</assigned_to>
          <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106317</commentid>
    <comment_count>0</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-01-20 04:01:33 -0800</bug_when>
    <thetext>Move these to the SelectionController as requested by comments in Frame.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106322</commentid>
    <comment_count>1</comment_count>
      <attachid>26860</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-01-20 04:41:29 -0800</bug_when>
    <thetext>Created attachment 26860
Carry out the move.

It compiles, tests pass on the mac. I was hit hard by Weinig killing of FramePrivate and need to verify the result of my git rebase actions. But comments would be appreciated right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106323</commentid>
    <comment_count>2</comment_count>
      <attachid>26861</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-01-20 04:42:39 -0800</bug_when>
    <thetext>Created attachment 26861
Carry out the move.

It compiles, tests pass on the mac. I was hit hard by Weinig killing of FramePrivate and need to verify the result of my git rebase actions. But comments would be appreciated right now.

SelectionController has now two (overloaded) paintCaret implementations. This looks fishy and I should consider merging them or making one private. I will think about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106327</commentid>
    <comment_count>3</comment_count>
      <attachid>26860</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-01-20 05:36:52 -0800</bug_when>
    <thetext>Comment on attachment 26860
Carry out the move.

Wrong bug :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106799</commentid>
    <comment_count>4</comment_count>
      <attachid>26861</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-23 14:16:47 -0800</bug_when>
    <thetext>Comment on attachment 26861
Carry out the move.

&gt; -        m_frame-&gt;clearTypingStyle();
&gt; +        this-&gt;clearTypingStyle();

This is one of a few places where the patch includes &quot;this-&gt;&quot; but we want to omit it. We should only use that explicit &quot;this&quot; if there&apos;s a name conflict that needs to be resolved.

&gt; +TextGranularity SelectionController::selectionGranularity() const
&gt; +{
&gt; +    return m_selectionGranularity;
&gt; +}
&gt; +
&gt; +void SelectionController::setSelectionGranularity(TextGranularity granularity)
&gt; +{
&gt; +    m_selectionGranularity = granularity;
&gt; +}

These functions are good candidates for inlining. That wasn&apos;t practical before because of FramePrivate.

&gt; +void SelectionController::invalidateSelection()
&gt; +{
&gt; +    setNeedsLayout();
&gt; +    selectionLayoutChanged();
&gt; +}
&gt; +void SelectionController::setCaretVisible(bool flag)
&gt; +{

Missing blank line here.

&gt; +static bool isFrameElement(const Node *n)

When moving the code it would be nice to also move the &quot;*&quot;.

&gt; +    RenderObject *renderer = n-&gt;renderer();

Same comment here.

&gt; +    bool shouldBlink = m_caretVisible
&gt; +        &amp;&amp; isCaret() &amp;&amp; isContentEditable();

Looks like this would fit nicely on one line.

&gt; +#if !PLATFORM(MAC)
&gt; +void SelectionController::setUseSecureKeyboardEntry(bool)
&gt; +{}
&gt; +#endif

The braces should be on separate lines here.

&gt; +CSSMutableStyleDeclaration *SelectionController::typingStyle() const
&gt; +{
&gt; +    return m_typingStyle.get();
&gt; +}
&gt; +
&gt; +void SelectionController::setTypingStyle(CSSMutableStyleDeclaration *style)
&gt; +{
&gt; +    m_typingStyle = style;
&gt; +}
&gt; +
&gt; +void SelectionController::clearTypingStyle()
&gt; +{
&gt; +    m_typingStyle = 0;
&gt; +}

These are all candidates for inlining.

&gt; +#include &quot;RenderLayer.h&quot;

Really unfortunate to have to add an include here just because of RenderLayer::ScrollAlignment. We should investigate moving that enum out along with other enums in either its own header or one like ScrollTypes.h.

&gt; +    TextGranularity selectionGranularity() const;
&gt; +    void setSelectionGranularity(TextGranularity);

I could imagine leaving the word &quot;selection&quot; out of this function name now that it&apos;s in the selection controller.

&gt; +    bool shouldChangeSelection(const Selection&amp;) const;
&gt; +    bool shouldDeleteSelection(const Selection&amp;) const;

Maybe even from these.

&gt; +const short enableRomanKeyboardsOnly = -23;

This should have &quot;static&quot; in front of it so it gets internal linkage. Maybe it should also go inside the function or at the top of the file. I don&apos;t think it&apos;s so great to have it before the function in the middle of the file.

&gt; +#ifdef BUILDING_ON_TIGER
&gt; +        KeyScript(smKeyEnableKybds);
&gt; +#else
&gt; +        TSMRemoveDocumentProperty(TSMGetActiveDocument(), kTSMDocumentEnabledInputSourcesPropertyTag);
&gt; +#endif
&gt; +    }
&gt; +}
&gt; +
&gt;  
&gt;  } // namespace WebCore

Extra unwanted blank line here.

Can any more of the SelectionController functions be private?

&gt; -    // FIXME: Granularity is stored separately on the frame, but also in the selection controller.
&gt; -    // The granularity in the selection controller should be used, and then this line of code would not be needed.
&gt; -    if (Frame* frame = document()-&gt;frame())
&gt; -        frame-&gt;setSelectionGranularity(CharacterGranularity);
&gt; +        frame-&gt;selection()-&gt;setSelectionGranularity(CharacterGranularity);
&gt; +    }
&gt;  }

Even though the situation has changed, the FIXME still applies. I would write it like this.

    // FIXME: The selection controller already stores the selection granularity.
    // But the code relies on this separate copy being set explicitly. The
    // granularity already known by the controller should be used, and then
    // this line of code would not be needed.

Or something along those lines. I also think that the selectionGranularity functions in the SelectionController.h header would be a good place for this same comment. Perhaps instead of having it here.

r=me

Thanks for taking this on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108450</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-02-05 09:34:52 -0800</bug_when>
    <thetext>Unfortunately, this patch no longer applies cleanly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119359</commentid>
    <comment_count>6</comment_count>
      <attachid>26861</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-29 14:52:25 -0700</bug_when>
    <thetext>Comment on attachment 26861
Carry out the move.

Marking r- for lack of ChangeLog and since it no longer applies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636979</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-30 00:50:58 -0700</bug_when>
    <thetext>Fixed in http://trac.webkit.org/changeset/67238.

*** This bug has been marked as a duplicate of bug 45508 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26860</attachid>
            <date>2009-01-20 04:41:29 -0800</date>
            <delta_ts>2009-01-20 05:36:52 -0800</delta_ts>
            <desc>Carry out the move.</desc>
            <filename>0005-Carry-out-the-move-of-items-from-Frame-to-Editor.patch</filename>
            <type>text/plain</type>
            <size>89040</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">RnJvbSA2NWVmODM0NTRiYmU2NmQzMmU0MzFlN2VkZjQwOGQ0OWEwMTgxYjYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CkRhdGU6IFRodSwgMjUgRGVjIDIwMDggMjI6MjM6NTUgKzAxMDAKU3ViamVjdDog
W1BBVENIXSBDYXJyeSBvdXQgdGhlIG1vdmUgb2YgaXRlbXMgZnJvbSBGcmFtZSB0byBFZGl0b3IK
ClJlbW92ZSBGcmFtZTo6cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQgYW5kCkZyYW1lOjpy
ZW1vdmVFZGl0aW5nU3R5bGVGcm9tQm9keUVsZW1lbnQgdGhleSB3ZXJlIG1hZGUgbm8tb3Ancwph
dCB0aGUgZW5kIG9mIDIwMDYuCgpJIHRoaW5rIHRoaXMgaXMgYSBnb29kIG1vdmUsIHRoZSBudWxs
IGNoZWNraW5nIG9mIEVkaXRvckNsaWVudAppcyBub3QgY29uc2lzdGVudCAoRWRpdG9yQ2xpZW50
IG1heSBub3QgYmUgemVybyksIHRoaXMgbmVlZHMgY29tcGlsZQpmaXhlcyBmb3IgdGhlIGRpZmZl
cmVudCBwb3J0cy4uLgotLS0KIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDE5ICstCiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUxMiArKysrKysrKysrKysrKysrKysrLQog
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM2
ICsrCiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgICAgICAgICAgICAgICAgICB8
ICAgMTggKy0KIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcCAgICAgICAg
ICAgIHwgICAgMiArLQogV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwICAgICAgICAg
ICAgICAgICAgfCAgIDM3ICsrCiBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSAgICAg
ICAgICAgICAgICAgICB8ICAgIDcgKwogV2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcCAg
ICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcCAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1MDggKy0tLS0tLS0tLS0tLS0tLS0t
LS0KIFdlYkNvcmUvcGFnZS9GcmFtZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICA0MCAtLQogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICA5ICstCiBXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcCAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMzcgLS0KIFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0gICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgOSArLQogV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICA1IC0KIFdlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNw
cCAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArLQogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEd0ay5jcHAgICAgICAgICAgICAgfCAgICA1ICstCiBXZWJDb3JlL3BsYXRmb3JtL3F0
L0NsaXBib2FyZFF0LmNwcCAgICAgICAgICAgICAgICB8ICAgIDMgKy0KIFdlYkNvcmUvcGxhdGZv
cm0vcXQvUGFzdGVib2FyZFF0LmNwcCAgICAgICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJD
b3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcCAgICAgICAgICAgICB8ICAgIDMgKy0K
IFdlYkNvcmUvcGxhdGZvcm0vd3gvUGFzdGVib2FyZFd4LmNwcCAgICAgICAgICAgICAgIHwgICAg
MiArLQogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgICAgICAgICAgICAgICAg
fCAgICAyICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5j
cHAgICB8ICAgIDIgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAgIHwgICAgNCArLQogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAg
ICAgICAgICAgICAgICAgfCAgICA5ICstCiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0g
ICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKy0KIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1M
UmVwcmVzZW50YXRpb24ubW0gICAgICAgIHwgICAgMyArLQogV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tICAgICAgICAgICAgICAgICAgfCAgICA4ICstCiBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIFdlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuY3BwICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAgfCAgICAzICstCiBX
ZWJLaXQvd2luL1dlYlZpZXcuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIg
Ky0KIDM2IGZpbGVzIGNoYW5nZWQsIDY2MSBpbnNlcnRpb25zKCspLCA2NzEgZGVsZXRpb25zKC0p
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCiBk
ZWxldGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRl
eCBhZmJhYzY1Li42MGM1M2UzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE2NzUsMTMgKzE2NzUsMTMgQEAgd2ViY29y
ZWd0a19zb3VyY2VzICs9IFwKIGVuZGlmCiAKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCisJV2Vi
Q29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvZ3RrL0FYT2Jq
ZWN0Q2FjaGVBdGsuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RB
dGsuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcCBcCiAJV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5o
IFwKIAlXZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcCBcCiAJV2ViQ29yZS9w
YWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwIFwKLQlXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3Rr
LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1BhdGguaCBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwIFwKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRl
eCA1OTkyMGZmLi4xYTQ2YjNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC00NzIsMjAgKzQ3MiwxNiBAQCBfX1pO
N1dlYkNvcmU0UGFnZUQxRXYKIF9fWk43V2ViQ29yZTVDYWNoZTExc2V0RGlzYWJsZWRFYgogX19a
TjdXZWJDb3JlNUNhY2hlMTNnZXRTdGF0aXN0aWNzRXYKIF9fWk43V2ViQ29yZTVDYWNoZTEzc2V0
Q2FwYWNpdGllc0VqamoKLV9fWk43V2ViQ29yZTVGcmFtZTEwZmluZFN0cmluZ0VSS05TXzZTdHJp
bmdFYmJiYgogX19aTjdXZWJDb3JlNUZyYW1lMTNyZWFwcGx5U3R5bGVzRXYKIF9fWk43V2ViQ29y
ZTVGcmFtZTEzc2V0Wm9vbUZhY3RvckVmYgogX19aTjdXZWJDb3JlNUZyYW1lMTRmcmFtZUZvcldp
ZGdldEVQS05TXzZXaWRnZXRFCiBfX1pON1dlYkNvcmU1RnJhbWUxN3NldElzRGlzY29ubmVjdGVk
RWIKIF9fWk43V2ViQ29yZTVGcmFtZTE5c2V0SW5WaWV3U291cmNlTW9kZUViCiBfX1pON1dlYkNv
cmU1RnJhbWUyMHNldFNlbGVjdGlvbkZyb21Ob25lRXYKLV9fWk43V2ViQ29yZTVGcmFtZTIxbWFy
a0FsbE1hdGNoZXNGb3JUZXh0RVJLTlNfNlN0cmluZ0ViagogX19aTjdXZWJDb3JlNUZyYW1lMjN2
aXNpYmxlUG9zaXRpb25Gb3JQb2ludEVSS05TXzhJbnRQb2ludEUKLV9fWk43V2ViQ29yZTVGcmFt
ZTI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNf
MTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlNUZyYW1lMjRzZXRFeGNsdWRlRnJvbVRleHRTZWFy
Y2hFYgogX19aTjdXZWJDb3JlNUZyYW1lMjVtYXRjaExhYmVsc0FnYWluc3RFbGVtZW50RVA3TlNB
cnJheVBOU183RWxlbWVudEUKIF9fWk43V2ViQ29yZTVGcmFtZTI4c2VhcmNoRm9yTGFiZWxzQmVm
b3JlRWxlbWVudEVQN05TQXJyYXlQTlNfN0VsZW1lbnRFCi1fX1pON1dlYkNvcmU1RnJhbWUzNHNl
dE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWRFYgogX19aTjdXZWJDb3JlNUZyYW1lNGlu
aXRFdgogX19aTjdXZWJDb3JlNUZyYW1lNnNjcmlwdEV2CiBfX1pON1dlYkNvcmU1RnJhbWU3c2V0
Vmlld0VQTlNfOUZyYW1lVmlld0UKQEAgLTUzOCw2ICs1MzQsMTAgQEAgX19aTjdXZWJDb3JlNkVk
aXRvcjdjb21tYW5kRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3I3Y29tbWFuZEVS
S05TXzZTdHJpbmdFTlNfMTlFZGl0b3JDb21tYW5kU291cmNlRQogX19aTjdXZWJDb3JlNkVkaXRv
cjdjb3B5VVJMRVJLTlNfNEtVUkxFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjdv
dXRkZW50RXYKK19fWk43V2ViQ29yZTZFZGl0b3IyMW1hcmtBbGxNYXRjaGVzRm9yVGV4dEVSS05T
XzZTdHJpbmdFYmoKK19fWk43V2ViQ29yZTZFZGl0b3IzNHNldE1hcmtlZFRleHRNYXRjaGVzQXJl
SGlnaGxpZ2h0ZWRFYgorX19aTjdXZWJDb3JlNkVkaXRvcjI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0
eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRQorX19aTjdXZWJD
b3JlNkVkaXRvcjEwZmluZFN0cmluZ0VSS05TXzZTdHJpbmdFYmJiYgogX19aTjdXZWJDb3JlNlN0
cmluZzZhcHBlbmRFUktTMF8KIF9fWk43V2ViQ29yZTZTdHJpbmc2YXBwZW5kRWMKIF9fWk43V2Vi
Q29yZTZTdHJpbmdDMUVQOE5TU3RyaW5nCkBAIC04MTQsMjMgKzgxNCwxNyBAQCBfX1pOSzdXZWJD
b3JlNUZyYW1lMTFjdXJyZW50Rm9ybUV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTF0eXBpbmdTdHls
ZUV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTJldmVudEhhbmRsZXJFdgogX19aTks3V2ViQ29yZTVG
cmFtZTEyb3duZXJFbGVtZW50RXYKLV9fWk5LN1dlYkNvcmU1RnJhbWUxMnNlbGVjdGVkVGV4dEV2
CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTNvd25lclJlbmRlcmVyRXYKIF9fWk5LN1dlYkNvcmU1RnJh
bWUxNHNlbGVjdGlvbkltYWdlRWIKIF9fWk5LN1dlYkNvcmU1RnJhbWUxNWNvbnRlbnRSZW5kZXJl
ckV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTVyZXZlYWxTZWxlY3Rpb25FUktOU18xMVJlbmRlckxh
eWVyMTVTY3JvbGxBbGlnbm1lbnRFCiBfX1pOSzdXZWJDb3JlNUZyYW1lMTVzZWxlY3Rpb25Cb3Vu
ZHNFYgogX19aTks3V2ViQ29yZTVGcmFtZTE2aW5WaWV3U291cmNlTW9kZUV2Ci1fX1pOSzdXZWJD
b3JlNUZyYW1lMTdmaXJzdFJlY3RGb3JSYW5nZUVQTlNfNVJhbmdlRQogX19aTks3V2ViQ29yZTVG
cmFtZTE4ZG9jdW1lbnRUeXBlU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUxOHNlbGVjdGlv
blRleHRSZWN0c0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0wRUVFYgogX19aTks3V2Vi
Q29yZTVGcmFtZTIwc2VsZWN0aW9uR3JhbnVsYXJpdHlFdgotX19aTks3V2ViQ29yZTVGcmFtZTMw
YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50RXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUzMWZv
bnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnRFdgotX19aTks3V2ViQ29yZTVGcmFtZTMxbWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZEV2Ci1fX1pOSzdXZWJDb3JlNUZyYW1lMzNyZW1v
dmVFZGl0aW5nU3R5bGVGcm9tQm9keUVsZW1lbnRFdgogX19aTks3V2ViQ29yZTVGcmFtZTM3YmFz
ZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydEV2Ci1fX1pOSzdXZWJDb3JlNUZyYW1l
NG1hcmtFdgogX19aTks3V2ViQ29yZTVGcmFtZTRwYWdlRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWU0
dHJlZUV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lNHZpZXdFdgpAQCAtODY1LDYgKzg1OSwxMSBAQCBf
X1pOSzdXZWJDb3JlNkVkaXRvcjdjYW5Db3B5RXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yN2NhbkVk
aXRFdgogX19aTks3V2ViQ29yZTZFZGl0b3I4Y2FuUGFzdGVFdgogX19aTks3V2ViQ29yZTZFZGl0
b3I5Y2FuRGVsZXRlRXYKK19fWk5LN1dlYkNvcmU2RWRpdG9yMzBhcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnRFdgorX19aTks3V2ViQ29yZTZFZGl0b3IxN2ZpcnN0UmVjdEZvclJhbmdlRVBO
U181UmFuZ2VFCitfX1pOSzdXZWJDb3JlNkVkaXRvcjEyc2VsZWN0ZWRUZXh0RXYKK19fWk5LN1dl
YkNvcmU2RWRpdG9yMzFtYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkRXYKK19fWk5LN1dl
YkNvcmU2RWRpdG9yNG1hcmtFdgogX19aTks3V2ViQ29yZTZTdHJpbmcxMGNoYXJhY3RlcnNFdgog
X19aTks3V2ViQ29yZTZTdHJpbmcxNGNyZWF0ZUNGU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmU2U3Ry
aW5nNmxlbmd0aEV2CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
aW5kZXggNzM4Y2U2NC4uYmQxNGViNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rp
b25Db21tYW5kLmNwcApAQCAtNzIzLDcgKzcyMyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGlmIChhbmNlc3Rvck5vZGUgJiYgYW5jZXN0b3JOb2Rl
LT5oYXNUYWdOYW1lKGlucHV0VGFnKQogICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihhbmNlc3Rvck5vZGUpLT5pc1RleHRGaWVsZCgpCiAgICAgICAgICAg
ICAgICAgJiYgYW5jZXN0b3JOb2RlLT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgp
LT5mcmFtZSgpLT50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKHN0YXRpY19jYXN0PEVsZW1l
bnQqPihhbmNlc3Rvck5vZGUpKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVk
aXRvcigpLT50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKHN0YXRpY19jYXN0PEVsZW1lbnQq
PihhbmNlc3Rvck5vZGUpKTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIgbWFr
ZSB0aGUgc2VsZWN0aW9uIHdpdGgKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMDU0MTZjYi4uZDVhN2ZlMiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50Lmgi
CisjaW5jbHVkZSAiRWRpdGluZ1RleHQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCkBAIC01
Miw4ICs1MywxMCBAQAogI2luY2x1ZGUgIkluc2VydExpc3RDb21tYW5kLmgiCiAjaW5jbHVkZSAi
S2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIgor
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhc3Rl
Ym9hcmQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW1vdmVG
b3JtYXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5k
ZXJQYXJ0LmgiCkBAIC00MDIsNyArNDA1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRv
cjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAogCiAgICAg
aWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5v
ZGVUb1JlbW92ZTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9mcmFtZS0+c3R5bGVG
b3JTZWxlY3Rpb25TdGFydChub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAg
ICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG5vZGVUb1Jl
bW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIHJlc3VsdCA9IDA7CiAgICAgICAgIGlmIChzdHlsZSkKQEAgLTcxNSw3ICs3MTgsNyBAQCB2
b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKQogICAgICAgICAgICAgLy8gZG8gbm90aGluZwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDQVJFVDoKLSAgICAgICAgICAgIG1f
ZnJhbWUtPmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7Cisg
ICAgICAgICAgICBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24p
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICYmIHN0eWxlKQpAQCAtNzY5LDcgKzc3
Miw3IEBAIGJvb2wgRWRpdG9yOjpjbGllbnRJc0VkaXRhYmxlKCkgY29uc3QKIGJvb2wgRWRpdG9y
OjpzZWxlY3Rpb25TdGFydEhhc1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25z
dAogewogICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uPiBzZWxlY3Rpb25TdHlsZSA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbXB1dGVk
U3R5bGUobm9kZVRvUmVtb3ZlKTsKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uPiBzZWxlY3Rpb25TdHlsZSA9IHNlbGVjdGlvbkNvbXB1dGVkU3R5bGUobm9kZVRvUmVtb3Zl
KTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CkBAIC04MjIsNyArODI1LDcgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZShD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QKIAogICAgIGlmICghbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPmlzUmFuZ2UoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAg
ICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlvblN0eWxlID0g
bV9mcmFtZS0+c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShub2RlVG9SZW1vdmUpOworICAgICAgICBS
ZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBzZWxlY3Rpb25TdHlsZSA9IHNlbGVj
dGlvbkNvbXB1dGVkU3R5bGUobm9kZVRvUmVtb3ZlKTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb25T
dHlsZSkKICAgICAgICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwogICAgICAgICB1cGRhdGVT
dGF0ZShtdXRhYmxlU3R5bGUuZ2V0KCksIHNlbGVjdGlvblN0eWxlLmdldCgpLCBhdFN0YXJ0LCBz
dGF0ZSk7CkBAIC05MzYsNiArOTM5LDcgQEAgRWRpdG9yOjpFZGl0b3IoRnJhbWUqIGZyYW1lKQog
ICAgICwgbV9kZWxldGVCdXR0b25Db250cm9sbGVyKG5ldyBEZWxldGVCdXR0b25Db250cm9sbGVy
KGZyYW1lKSkKICAgICAsIG1faWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoZmFsc2Up
CiAgICAgLCBtX3Nob3VsZFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZShmYWxzZSkKKyAgICAsIG1f
aGlnaGxpZ2h0VGV4dE1hdGNoZXMoZmFsc2UpCiB7IAogfQogCkBAIC0xMzM4LDcgKzEzNDIsNyBA
QCB2b2lkIEVkaXRvcjo6aWdub3JlU3BlbGxpbmcoKQogICAgIGlmIChzZWxlY3RlZFJhbmdlKQog
ICAgICAgICBmcmFtZSgpLT5kb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHNlbGVjdGVkUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKLSAgICBTdHJpbmcgdGV4dCA9IGZy
YW1lKCktPnNlbGVjdGVkVGV4dCgpOworICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7
CiAgICAgQVNTRVJUKHRleHQubGVuZ3RoKCkgIT0gMCk7CiAgICAgY2xpZW50KCktPmlnbm9yZVdv
cmRJblNwZWxsRG9jdW1lbnQodGV4dCk7CiB9CkBAIC0xMzUxLDcgKzEzNTUsNyBAQCB2b2lkIEVk
aXRvcjo6bGVhcm5TcGVsbGluZygpCiAgICAgLy8gRklYTUU6IFdlIGRvbid0IGNhbGwgdGhpcyBv
biB0aGUgTWFjLCBhbmQgaXQgc2hvdWxkIHJlbW92ZSBtaXNwcGVsbGluZyBtYXJrZXJzIGFyb3Vu
ZCB0aGUgCiAgICAgLy8gbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+
LgogCi0gICAgU3RyaW5nIHRleHQgPSBmcmFtZSgpLT5zZWxlY3RlZFRleHQoKTsKKyAgICBTdHJp
bmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAgIEFTU0VSVCh0ZXh0Lmxlbmd0aCgpICE9IDAp
OwogICAgIGNsaWVudCgpLT5sZWFybldvcmQodGV4dCk7CiB9CkBAIC0xNjkyLDcgKzE2OTYsNyBA
QCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVT
ZWxlY3Rpb24pCiAKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQoKQogewotICAg
IFN0cmluZyBzZWxlY3RlZFN0cmluZyA9IGZyYW1lKCktPnNlbGVjdGVkVGV4dCgpOworICAgIFN0
cmluZyBzZWxlY3RlZFN0cmluZyA9IHNlbGVjdGVkVGV4dCgpOwogICAgIGludCBsZW5ndGggPSBz
ZWxlY3RlZFN0cmluZy5sZW5ndGgoKTsKICAgICBpZiAobGVuZ3RoID09IDApCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTE3ODgsNyArMTc5Miw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6
Z3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oKQogCiBWZWN0b3I8U3RyaW5nPiBFZGl0
b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCkKIHsKLSAgICBTdHJpbmcgc2VsZWN0
ZWRTdHJpbmcgPSBmcmFtZSgpLT5zZWxlY3RlZFRleHQoKTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRT
dHJpbmcgPSBzZWxlY3RlZFRleHQoKTsKICAgICBBU1NFUlQoc2VsZWN0ZWRTdHJpbmcubGVuZ3Ro
KCkgIT0gMCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwpAQCAtMjE4Niw0ICsyMTkw
LDQ5NiBAQCBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6Om5leHRWaXNpYmxlUmFuZ2UoUmFuZ2Uq
IGN1cnJlbnRSYW5nZSwgY29uc3QgU3RyaW5nJiB0YQogICAgIHJldHVybiBsYXN0VmlzaWJsZVJh
bmdlKHRhcmdldCwgY2FzZUZsYWcpOwogfQogCitTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQo
KSBjb25zdAoreworICAgIHJldHVybiBwbGFpblRleHQobV9mcmFtZS0+c2VsZWN0aW9uKCktPnRv
UmFuZ2UoKS5nZXQoKSk7Cit9CisKKy8vIFNlYXJjaGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0
aGUgZG9jdW1lbnQgaWYgbm90aGluZyBpcyBzZWxlY3RlZC4KK2Jvb2wgRWRpdG9yOjpmaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJv
b2wgd3JhcEZsYWcsIGJvb2wgc3RhcnRJblNlbGVjdGlvbikKK3sKKyAgICBpZiAodGFyZ2V0Lmlz
RW1wdHkoKSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1fZnJhbWUtPmV4Y2x1ZGVGcm9tVGV4dFNlYXJjaCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBTdGFydCBmcm9tIGFuIGVkZ2Ugb2YgdGhlIHNlbGVjdGlvbiwg
aWYgdGhlcmUncyBhIHNlbGVjdGlvbiB0aGF0J3Mgbm90IGluIHNoYWRvdyBjb250ZW50LiBXaGlj
aCBlZGdlCisgICAgLy8gaXMgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgc2VhcmNoaW5n
IGZvcndhcmQgb3IgYmFja3dhcmQsIGFuZCB3aGV0aGVyIHN0YXJ0SW5TZWxlY3Rpb24gaXMgc2V0
LgorICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG1fZnJhbWUt
PmRvY3VtZW50KCkpKTsKKyAgICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbigpOworCisgICAgaWYgKGZvcndhcmQpCisgICAgICAgIHNldFN0YXJ0
KHNlYXJjaFJhbmdlLmdldCgpLCBzdGFydEluU2VsZWN0aW9uID8gc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpIDogc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CisgICAgZWxzZQorICAgICAgICBzZXRF
bmQoc2VhcmNoUmFuZ2UuZ2V0KCksIHN0YXJ0SW5TZWxlY3Rpb24gPyBzZWxlY3Rpb24udmlzaWJs
ZUVuZCgpIDogc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKTsKKworICAgIE5vZGUqIHNoYWRvd1Ry
ZWVSb290ID0gc2VsZWN0aW9uLnNoYWRvd1RyZWVSb290Tm9kZSgpOworICAgIGlmIChzaGFkb3dU
cmVlUm9vdCkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgaWYgKGZv
cndhcmQpCisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBz
aGFkb3dUcmVlUm9vdC0+Y2hpbGROb2RlQ291bnQoKSwgZWMpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QsIDAsIGVjKTsKKyAg
ICB9CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNo
UmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpKTsKKyAgICAvLyBJZiB3ZSBz
dGFydGVkIGluIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNo
ZXMgdGhlIGV4aXN0aW5nIHNlbGVjdGlvbiwgZmluZCBhZ2Fpbi4KKyAgICAvLyBCdWlsZCBhIHNl
bGVjdGlvbiB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3Bh
Y2UuCisgICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0
byBpZ25vcmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KKyAg
ICBpZiAoc3RhcnRJblNlbGVjdGlvbiAmJiAqU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpKS50
b1JhbmdlKCkgPT0gKnNlbGVjdGlvbi50b1JhbmdlKCkpIHsKKyAgICAgICAgc2VhcmNoUmFuZ2Ug
PSByYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIGlmIChmb3J3
YXJkKQorICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbi52
aXNpYmxlRW5kKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRFbmQoc2VhcmNoUmFu
Z2UuZ2V0KCksIHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7CisKKyAgICAgICAgaWYgKHNoYWRv
d1RyZWVSb290KSB7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAg
ICAgIGlmIChmb3J3YXJkKQorICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoc2hh
ZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jaGlsZE5vZGVDb3VudCgpLCBlYyk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHNoYWRv
d1RyZWVSb290LCAwLCBlYyk7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHRSYW5nZSA9IGZp
bmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcp
OworICAgIH0KKworICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKKworICAgIC8vIElm
IG5vdGhpbmcgd2FzIGZvdW5kIGluIHRoZSBzaGFkb3cgdHJlZSwgc2VhcmNoIGluIG1haW4gY29u
dGVudCBmb2xsb3dpbmcgdGhlIHNoYWRvdyB0cmVlLgorICAgIGlmIChyZXN1bHRSYW5nZS0+Y29s
bGFwc2VkKGV4Y2VwdGlvbikgJiYgc2hhZG93VHJlZVJvb3QpIHsKKyAgICAgICAgc2VhcmNoUmFu
Z2UgPSByYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIGlmIChm
b3J3YXJkKQorICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoc2hhZG93VHJl
ZVJvb3QtPnNoYWRvd1BhcmVudE5vZGUoKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZEJlZm9yZShzaGFkb3dUcmVlUm9vdC0+c2hhZG93
UGFyZW50Tm9kZSgpLCBleGNlcHRpb24pOworCisgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBs
YWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZyk7Cisg
ICAgfQorCisgICAgaWYgKCFpbnNpZGVWaXNpYmxlQXJlYShyZXN1bHRSYW5nZS5nZXQoKSkpIHsK
KyAgICAgICAgcmVzdWx0UmFuZ2UgPSBuZXh0VmlzaWJsZVJhbmdlKHJlc3VsdFJhbmdlLmdldCgp
LCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZyk7CisgICAgICAgIGlmICghcmVz
dWx0UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYg
d2UgZGlkbid0IGZpbmQgYW55dGhpbmcgYW5kIHdlJ3JlIHdyYXBwaW5nLCBzZWFyY2ggYWdhaW4g
aW4gdGhlIGVudGlyZSBkb2N1bWVudCAodGhpcyB3aWxsCisgICAgLy8gcmVkdW5kYW50bHkgcmUt
c2VhcmNoIHRoZSBhcmVhIGFscmVhZHkgc2VhcmNoZWQgaW4gc29tZSBjYXNlcykuCisgICAgaWYg
KHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSAmJiB3cmFwRmxhZykgeworICAgICAg
ICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAg
ICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJn
ZXQsIGZvcndhcmQsIGNhc2VGbGFnKTsKKyAgICAgICAgLy8gV2UgdXNlZCB0byByZXR1cm4gZmFs
c2UgaGVyZSBpZiB3ZSBlbmRlZCB1cCB3aXRoIHRoZSBzYW1lIHJhbmdlIHRoYXQgd2Ugc3RhcnRl
ZCB3aXRoCisgICAgICAgIC8vIChlLmcuLCB0aGUgc2VsZWN0aW9uIHdhcyBhbHJlYWR5IHRoZSBv
bmx5IGluc3RhbmNlIG9mIHRoaXMgdGV4dCkuIEJ1dCB3ZSBkZWNpZGVkIHRoYXQKKyAgICAgICAg
Ly8gdGhpcyBzaG91bGQgYmUgYSBzdWNjZXNzIGNhc2UgaW5zdGVhZCwgc28gd2UnbGwganVzdCBm
YWxsIHRocm91Z2ggaW4gdGhhdCBjYXNlLgorICAgIH0KKworICAgIGlmIChyZXN1bHRSYW5nZS0+
Y29sbGFwc2VkKGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgp
LCBET1dOU1RSRUFNKSk7CisgICAgbV9mcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2NvbnN0IFNlbGVjdGlvbiYgRWRpdG9yOjptYXJrKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9tYXJrOworfQorCit2b2lkIEVkaXRvcjo6c2V0TWFyayhjb25zdCBTZWxl
Y3Rpb24mIHMpCit7CisgICAgQVNTRVJUKCFzLmJhc2UoKS5ub2RlKCkgfHwgcy5iYXNlKCkubm9k
ZSgpLT5kb2N1bWVudCgpID09IGRvY3VtZW50KCkpOworICAgIEFTU0VSVCghcy5leHRlbnQoKS5u
b2RlKCkgfHwgcy5leHRlbnQoKS5ub2RlKCktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQoKSk7Cisg
ICAgQVNTRVJUKCFzLnN0YXJ0KCkubm9kZSgpIHx8IHMuc3RhcnQoKS5ub2RlKCktPmRvY3VtZW50
KCkgPT0gZG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCFzLmVuZCgpLm5vZGUoKSB8fCBzLmVuZCgp
Lm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCgpKTsKKworICAgIG1fbWFyayA9IHM7Cit9
CisKK3ZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdAor
eworICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudHNC
eVRhZ05hbWUoImJvZHkiKTsKKyAgICB1bnNpZ25lZCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgYXBwbHlFZGl0
aW5nU3R5bGVUb0VsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGxpc3QtPml0ZW0oaSkpKTsK
KyAgICB9Cit9CisKK3ZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5zdHlsZSgpOwor
ICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJyZWFrLXdvcmQiLCBmYWxzZSwg
ZWMpOworICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlXZWJraXROYnNwTW9kZSwgInNwYWNlIiwgZmFsc2UsIGVjKTsKKyAgICBBU1NFUlQoZWMg
PT0gMCk7CisgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFr
LCAiYWZ0ZXItd2hpdGUtc3BhY2UiLCBmYWxzZSwgZWMpOworICAgIEFTU0VSVChlYyA9PSAwKTsK
K30KKworSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29u
c3QKK3sKKyAgICBpbnQgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMDsKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBBU1NFUlQocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSk7CisgICAg
QVNTRVJUKHJhbmdlLT5lbmRDb250YWluZXIoZWMpKTsKKworICAgIElubGluZUJveCogc3RhcnRJ
bmxpbmVCb3g7CisgICAgaW50IHN0YXJ0Q2FyZXRPZmZzZXQ7CisgICAgcmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKS5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVBTSwgc3RhcnRJbmxpbmVCb3gs
IHN0YXJ0Q2FyZXRPZmZzZXQpOworCisgICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0g
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+cmVuZGVyZXIoKTsKKyAgICBJbnRSZWN0IHN0YXJ0
Q2FyZXRSZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qoc3RhcnRJbmxpbmVCb3gs
IHN0YXJ0Q2FyZXRPZmZzZXQsICZleHRyYVdpZHRoVG9FbmRPZkxpbmUpOworICAgIGlmIChzdGFy
dENhcmV0UmVjdCAhPSBJbnRSZWN0KCkpCisgICAgICAgIHN0YXJ0Q2FyZXRSZWN0ID0gc3RhcnRS
ZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qoc3RhcnRDYXJldFJlY3QpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOworCisgICAgSW5saW5lQm94KiBlbmRJbmxpbmVCb3g7Cisg
ICAgaW50IGVuZENhcmV0T2Zmc2V0OworICAgIHJhbmdlLT5lbmRQb3NpdGlvbigpLmdldElubGlu
ZUJveEFuZE9mZnNldChVUFNUUkVBTSwgZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7CisK
KyAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gcmFuZ2UtPmVuZENvbnRhaW5lcihlYykt
PnJlbmRlcmVyKCk7CisgICAgSW50UmVjdCBlbmRDYXJldFJlY3QgPSBlbmRSZW5kZXJlci0+bG9j
YWxDYXJldFJlY3QoZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7CisgICAgaWYgKGVuZENh
cmV0UmVjdCAhPSBJbnRSZWN0KCkpCisgICAgICAgIGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChlbmRDYXJldFJlY3QpKS5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpOworCisgICAgaWYgKHN0YXJ0Q2FyZXRSZWN0LnkoKSA9PSBlbmRDYXJldFJl
Y3QueSgpKSB7CisgICAgICAgIC8vIHN0YXJ0IGFuZCBlbmQgYXJlIG9uIHRoZSBzYW1lIGxpbmUK
KyAgICAgICAgcmV0dXJuIEludFJlY3QobWluKHN0YXJ0Q2FyZXRSZWN0LngoKSwgZW5kQ2FyZXRS
ZWN0LngoKSksCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FyZXRSZWN0LnkoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgYWJzKGVuZENhcmV0UmVjdC54KCkgLSBzdGFydENhcmV0UmVj
dC54KCkpLAorICAgICAgICAgICAgICAgICAgICAgICBtYXgoc3RhcnRDYXJldFJlY3QuaGVpZ2h0
KCksIGVuZENhcmV0UmVjdC5oZWlnaHQoKSkpOworICAgIH0KKworICAgIC8vIHN0YXJ0IGFuZCBl
bmQgYXJlbid0IG9uIHRoZSBzYW1lIGxpbmUsIHNvIGdvIGZyb20gc3RhcnQgdG8gdGhlIGVuZCBv
ZiBpdHMgbGluZQorICAgIHJldHVybiBJbnRSZWN0KHN0YXJ0Q2FyZXRSZWN0LngoKSwKKyAgICAg
ICAgICAgICAgICAgICBzdGFydENhcmV0UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgc3Rh
cnRDYXJldFJlY3Qud2lkdGgoKSArIGV4dHJhV2lkdGhUb0VuZE9mTGluZSwKKyAgICAgICAgICAg
ICAgICAgICBzdGFydENhcmV0UmVjdC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgRWRpdG9yOjpyZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBib29s
IGNsb3NlVHlwaW5nKQoreworICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAg
IGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSB0aGlzLT5pc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgICAgICBib29sIGlzQ29udGludW91c0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCAmJiB0
aGlzLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKKyAgICAgICAgaWYgKGlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKSB7CisgICAgICAgICAgICBTZWxlY3Rpb24gbmV3QWRqYWNl
bnRXb3JkczsKKyAgICAgICAgICAgIFNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNlOworICAg
ICAgICAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7CisgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CisgICAgICAg
ICAgICAgICAgbmV3QWRqYWNlbnRXb3JkcyA9IFNlbGVjdGlvbihzdGFydE9mV29yZChuZXdTdGFy
dCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElm
T25Cb3VuZGFyeSkpOworICAgICAgICAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKQorICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZFNlbnRlbmNlID0g
U2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShuZXdTdGFydCksIGVuZE9mU2VudGVuY2UobmV3U3Rh
cnQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hl
Y2sgc3BlbGxpbmcgZWxzZXdoZXJlLCBzbyBkb24ndCByZWRvIGl0IGhlcmUuCisgICAgICAgICAg
ICAvLyBJZiB0aGlzIGlzIGEgY2hhbmdlIGluIHNlbGVjdGlvbiByZXN1bHRpbmcgZnJvbSBhIGRl
bGV0ZSBvcGVyYXRpb24sCisgICAgICAgICAgICAvLyBvbGRTZWxlY3Rpb24gbWF5IG5vIGxvbmdl
ciBiZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgICAgICBpZiAoY2xvc2VUeXBpbmcgJiYgb2xk
U2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9k
ZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKSk7CisgICAgICAgICAgICAgICAgU2VsZWN0aW9uIG9sZEFkamFjZW50V29yZHMgPSBT
ZWxlY3Rpb24oc3RhcnRPZldvcmQob2xkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5k
T2ZXb3JkKG9sZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICAgICAgICAgICAg
ICBpZiAob2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdBZGphY2VudFdvcmRzKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3Mob2xkQWRqYWNlbnRXb3Jkcyk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb24gb2xkU2VsZWN0ZWRTZW50ZW5jZSA9IFNlbGVj
dGlvbihzdGFydE9mU2VudGVuY2Uob2xkU3RhcnQpLCBlbmRPZlNlbnRlbmNlKG9sZFN0YXJ0KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkU2VsZWN0ZWRTZW50ZW5jZSAhPSBuZXdT
ZWxlY3RlZFNlbnRlbmNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtCYWRHcmFt
bWFyKG9sZFNlbGVjdGVkU2VudGVuY2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaGlzIG9ubHkgZXJh
c2VzIG1hcmtlcnMgdGhhdCBhcmUgaW4gdGhlIGZpcnN0IHVuaXQgKHdvcmQgb3Igc2VudGVuY2Up
IG9mIHRoZSBzZWxlY3Rpb24uCisgICAgICAgICAgICAvLyBQZXJoYXBzIHBlY3VsaWFyLCBidXQg
aXQgbWF0Y2hlcyBBcHBLaXQuCisgICAgICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiB3b3JkUmFu
Z2UgPSBuZXdBZGphY2VudFdvcmRzLnRvUmFuZ2UoKSkKKyAgICAgICAgICAgICAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFu
Z2UgPSBuZXdTZWxlY3RlZFNlbnRlbmNlLnRvUmFuZ2UoKSkKKyAgICAgICAgICAgICAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHNlbnRlbmNlUmFuZ2UuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpHcmFtbWFyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdoZW4gY29udGlu
dW91cyBzcGVsbCBjaGVja2luZyBpcyBvZmYsIGV4aXN0aW5nIG1hcmtlcnMgZGlzYXBwZWFyIGFm
dGVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4KKyAgICAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbW92
ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgaWYgKCFpc0NvbnRp
bnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisgICAgfQorCisg
ICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOworfQorCitib29sIEVk
aXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2VsZWN0aW9u
LCBjb25zdCBTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKSBjb25zdAoreworICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpLCBuZXdTZWxlY3Rp
b24udG9SYW5nZSgpLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKK30KKworUmVu
ZGVyU3R5bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2RlKiAmbm9kZVRvUmVt
b3ZlKSBjb25zdAoreworICAgIG5vZGVUb1JlbW92ZSA9IDA7CisKKyAgICBpZiAoIW1fZnJhbWUt
PmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+aXNOb25lKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUG9zaXRpb24gcG9zID0g
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgaWYgKCFwb3MuaXNDYW5kaWRhdGUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgTm9kZSAqbm9kZSA9IHBvcy5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmICghbV9mcmFtZS0+dHlwaW5nU3R5bGUoKSkKKyAgICAgICAgcmV0
dXJuIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJLCAic3BhbiIsIGVjKTsKKyAgICBB
U1NFUlQoZWMgPT0gMCk7CisKKyAgICBTdHJpbmcgc3R5bGVUZXh0ID0gbV9mcmFtZS0+dHlwaW5n
U3R5bGUoKS0+Y3NzVGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUiOworICAgIHN0eWxlRWxlbWVu
dC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgc3R5bGVUZXh0LmltcGwoKSwgZWMpOworICAgIEFT
U0VSVChlYyA9PSAwKTsKKworICAgIHN0eWxlRWxlbWVudC0+YXBwZW5kQ2hpbGQobV9mcmFtZS0+
ZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKCIiKSwgZWMpOworICAgIEFTU0VSVChl
YyA9PSAwKTsKKworICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVt
ZW50LCBlYyk7CisgICAgQVNTRVJUKGVjID09IDApOworCisgICAgbm9kZVRvUmVtb3ZlID0gc3R5
bGVFbGVtZW50LmdldCgpOworICAgIHJldHVybiBzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCkgPyBz
dHlsZUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkgOiAwOworfQorCit1bnNpZ25lZCBFZGl0
b3I6Om1hcmtBbGxNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBjYXNl
RmxhZywgdW5zaWduZWQgbGltaXQpCit7CisgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkgfHwgIW1f
ZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPFJhbmdl
PiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1lbnQoKSkpOworCisg
ICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgIHVuc2lnbmVkIG1hdGNoQ291bnQg
PSAwOworICAgIGRvIHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxh
aW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIHRydWUsIGNhc2VGbGFnKSk7CisgICAg
ICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikpIHsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmlzSW5TaGFkb3dUcmVlKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VP
ZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgc2VhcmNoUmFuZ2Ut
PnNldFN0YXJ0QWZ0ZXIocmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPnNoYWRvd0FuY2Vz
dG9yTm9kZSgpLCBleGNlcHRpb24pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBBIG5vbi1jb2xsYXBzZWQgcmVzdWx0IHJhbmdlIGNhbiBpbiBzb21lIGZ1
bmt5IHdoaXRlc3BhY2UgY2FzZXMgc3RpbGwgbm90CisgICAgICAgIC8vIGFkdmFuY2UgdGhlIHJh
bmdlJ3Mgc3RhcnQgcG9zaXRpb24gKDQ1MDkzMjgpLiBCcmVhayB0byBhdm9pZCBpbmZpbml0ZSBs
b29wLgorICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQgPSBlbmRWaXNpYmxlUG9zaXRp
b24ocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOworICAgICAgICBpZiAobmV3U3RhcnQg
PT0gc3RhcnRWaXNpYmxlUG9zaXRpb24oc2VhcmNoUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gT25seSB0cmVhdCB0aGUgcmVzdWx0IGFz
IGEgbWF0Y2ggaWYgaXQgaXMgdmlzaWJsZQorICAgICAgICBpZiAoaW5zaWRlVmlzaWJsZUFyZWEo
cmVzdWx0UmFuZ2UuZ2V0KCkpKSB7CisgICAgICAgICAgICArK21hdGNoQ291bnQ7CisgICAgICAg
ICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5hZGRNYXJrZXIocmVzdWx0UmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RvcCBs
b29raW5nIGlmIHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxpbWl0IG9mIDAgbWVhbnMg
bm8gbGltaXQuCisgICAgICAgIGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+PSBsaW1pdCkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgp
LCBuZXdTdGFydCk7CisgICAgICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0gc2VhcmNoUmFuZ2Ut
PnNoYWRvd1RyZWVSb290Tm9kZSgpOworICAgICAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNl
ZChleGNlcHRpb24pICYmIHNoYWRvd1RyZWVSb290KQorICAgICAgICAgICAgc2VhcmNoUmFuZ2Ut
PnNldEVuZChzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNoaWxkTm9kZUNvdW50KCks
IGV4Y2VwdGlvbik7CisgICAgfSB3aGlsZSAodHJ1ZSk7CisKKyAgICAvLyBEbyBhICJmYWtlIiBw
YWludCBpbiBvcmRlciB0byBleGVjdXRlIHRoZSBjb2RlIHRoYXQgY29tcHV0ZXMgdGhlIHJlbmRl
cmVkIHJlY3QgZm9yCisgICAgLy8gZWFjaCB0ZXh0IG1hdGNoLgorICAgIERvY3VtZW50KiBkb2Mg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmIChkb2MgJiYgbV9mcmFtZS0+dmlldygpICYm
IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKSB7CisgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0
KCk7IC8vIEVuc3VyZSBsYXlvdXQgaXMgdXAgdG8gZGF0ZS4KKyAgICAgICAgSW50UmVjdCB2aXNp
YmxlUmVjdCA9IG1fZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAg
IGlmICghdmlzaWJsZVJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dCgoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTApOworICAgICAgICAgICAgY29u
dGV4dC5zZXRQYWludGluZ0Rpc2FibGVkKHRydWUpOworICAgICAgICAgICAgbV9mcmFtZS0+dmll
dygpLT5wYWludENvbnRlbnRzKCZjb250ZXh0LCB2aXNpYmxlUmVjdCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gbWF0Y2hDb3VudDsKK30KKworYm9vbCBFZGl0b3I6Om1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2hpZ2hsaWdo
dFRleHRNYXRjaGVzOworfQorCit2b2lkIEVkaXRvcjo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVI
aWdobGlnaHRlZChib29sIGZsYWcpCit7CisgICAgaWYgKGZsYWcgPT0gbV9oaWdobGlnaHRUZXh0
TWF0Y2hlcyB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9oaWdobGlnaHRUZXh0TWF0Y2hlcyA9IGZsYWc7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7Cit9CisKK3ZvaWQgRWRp
dG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUs
IEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK3sKKyAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5s
ZW5ndGgoKSA9PSAwKSB7CisgICAgICAgIG1fZnJhbWUtPmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhbGN1bGF0ZSB0aGUgY3VycmVudCB0eXBp
bmcgc3R5bGUuCisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtdXRhYmxl
U3R5bGUgPSBzdHlsZS0+bWFrZU11dGFibGUoKTsKKyAgICBpZiAobV9mcmFtZS0+dHlwaW5nU3R5
bGUoKSkgeworICAgICAgICBtX2ZyYW1lLT50eXBpbmdTdHlsZSgpLT5tZXJnZShtdXRhYmxlU3R5
bGUuZ2V0KCkpOworICAgICAgICBtdXRhYmxlU3R5bGUgPSBtX2ZyYW1lLT50eXBpbmdTdHlsZSgp
OworICAgIH0KKworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGk7CisgICAgUmVmUHRy
PENTU1ZhbHVlPiBkaXJlY3Rpb247CisgICAgaWYgKGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlv
blNldFdyaXRpbmdEaXJlY3Rpb24pIHsKKyAgICAgICAgdW5pY29kZUJpZGkgPSBtdXRhYmxlU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7CisgICAgICAg
IGRpcmVjdGlvbiA9IG11dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eURpcmVjdGlvbik7CisgICAgfQorCisgICAgTm9kZSogbm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsK
KyAgICBjb21wdXRlZFN0eWxlKG5vZGUpLT5kaWZmKG11dGFibGVTdHlsZS5nZXQoKSk7CisKKyAg
ICBpZiAoZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbiAmJiB1
bmljb2RlQmlkaSkgeworICAgICAgICBBU1NFUlQodW5pY29kZUJpZGktPmlzUHJpbWl0aXZlVmFs
dWUoKSk7CisgICAgICAgIG11dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmlj
b2RlQmlkaSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih1bmljb2RlQmlkaS5nZXQo
KSktPmdldElkZW50KCkpOworICAgICAgICBpZiAoZGlyZWN0aW9uKSB7CisgICAgICAgICAgICBB
U1NFUlQoZGlyZWN0aW9uLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAgICAgICAgICAgbXV0YWJs
ZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPihkaXJlY3Rpb24uZ2V0KCkpLT5nZXRJZGVudCgpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEhhbmRsZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0aGVz
ZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUuCisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBibG9ja1N0eWxlID0gbXV0YWJsZVN0eWxlLT5jb3B5QmxvY2tQcm9wZXJ0aWVzKCk7
CisgICAgYmxvY2tTdHlsZS0+ZGlmZihtdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIGlmIChtX2Zy
YW1lLT5kb2N1bWVudCgpICYmIGJsb2NrU3R5bGUtPmxlbmd0aCgpID4gMCkKKyAgICAgICAgYXBw
bHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
YmxvY2tTdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbikpOworCisgICAgLy8gU2V0IHRoZSByZW1h
aW5pbmcgc3R5bGUgYXMgdGhlIHR5cGluZyBzdHlsZS4KKyAgICBtX2ZyYW1lLT5zZXRUeXBpbmdT
dHlsZShtdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIG11dGFibGVTdHlsZS5jbGVhcigpOworfQor
CitTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25TdGFydFN0eWxlUHJvcGVydHlWYWx1ZShpbnQgc3R5
bGVQcm9wZXJ0eUlEKSBjb25zdAoreworICAgIE5vZGUgKm5vZGVUb1JlbW92ZTsKKyAgICBSZWZQ
dHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9uU3R5bGUgPSBzZWxlY3Rpb25Db21wdXRl
ZFN0eWxlKG5vZGVUb1JlbW92ZSk7CisgICAgaWYgKCFzZWxlY3Rpb25TdHlsZSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIHZhbHVlID0gc2VsZWN0aW9uU3R5bGUtPmdl
dFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eUlEKTsKKworICAgIGlmIChub2RlVG9SZW1vdmUp
IHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIG5vZGVUb1JlbW92ZS0+
cmVtb3ZlKGVjKTsKKyAgICAgICAgQVNTRVJUKGVjID09IDApOworICAgIH0KKworICAgIHJldHVy
biB2YWx1ZTsKK30KKworCitQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4g
RWRpdG9yOjpzZWxlY3Rpb25Db21wdXRlZFN0eWxlKE5vZGUqJiBub2RlVG9SZW1vdmUpIGNvbnN0
Cit7CisgICAgbm9kZVRvUmVtb3ZlID0gMDsKKworICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlz
Tm9uZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UobV9m
cmFtZS0+c2VsZWN0aW9uKCktPnRvUmFuZ2UoKSk7CisgICAgUG9zaXRpb24gcG9zID0gcmFuZ2Ut
PmVkaXRpbmdTdGFydFBvc2l0aW9uKCk7CisKKyAgICBFbGVtZW50ICplbGVtID0gcG9zLmVsZW1l
bnQoKTsKKyAgICBpZiAoIWVsZW0pCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEVs
ZW1lbnQ+IHN0eWxlRWxlbWVudCA9IGVsZW07CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisK
KyAgICBpZiAobV9mcmFtZS0+dHlwaW5nU3R5bGUoKSkgeworICAgICAgICBzdHlsZUVsZW1lbnQg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50TlMoeGh0bWxOYW1lc3BhY2VVUkks
ICJzcGFuIiwgZWMpOworICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CisKKyAgICAgICAgc3R5bGVF
bGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBtX2ZyYW1lLT50eXBpbmdTdHlsZSgpLT5j
c3NUZXh0KCkuaW1wbCgpLCBlYyk7CisgICAgICAgIEFTU0VSVChlYyA9PSAwKTsKKworICAgICAg
ICBzdHlsZUVsZW1lbnQtPmFwcGVuZENoaWxkKG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVk
aXRpbmdUZXh0Tm9kZSgiIiksIGVjKTsKKyAgICAgICAgQVNTRVJUKGVjID09IDApOworCisgICAg
ICAgIGlmIChlbGVtLT5yZW5kZXJlcigpICYmIGVsZW0tPnJlbmRlcmVyKCktPmNhbkhhdmVDaGls
ZHJlbigpKSB7CisgICAgICAgICAgICBlbGVtLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVj
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUgKnBhcmVudCA9IGVsZW0tPnBh
cmVudCgpOworICAgICAgICAgICAgTm9kZSAqbmV4dCA9IGVsZW0tPm5leHRTaWJsaW5nKCk7CisK
KyAgICAgICAgICAgIGlmIChuZXh0KSB7CisgICAgICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRC
ZWZvcmUoc3R5bGVFbGVtZW50LCBuZXh0LCBlYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHBhcmVudC0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGVjID09IDApOworCisgICAgICAg
IG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxlbWVudC5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Y29tcHV0ZWRTdHlsZShzdHlsZUVsZW1lbnQucmVsZWFzZSgpKTsKK30KKwordm9pZCBFZGl0b3I6
OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlKQoreworICAgIGlmIChjbGllbnQo
KSkKKyAgICAgICAgY2xpZW50KCktPnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhlKTsKK30KKwor
dm9pZCBFZGl0b3I6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZSkKK3sKKyAgICBp
ZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKGUp
OworfQorCit2b2lkIEVkaXRvcjo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGUp
Cit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+dGV4dERpZENoYW5nZUlu
VGV4dEZpZWxkKGUpOworfQorCitib29sIEVkaXRvcjo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2
ZW50KEVsZW1lbnQqIGUsIEtleWJvYXJkRXZlbnQqIGtlKQoreworICAgIGlmIChjbGllbnQoKSkK
KyAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5kb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoZSwg
a2UpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEVkaXRvcjo6dGV4dFdpbGxCZURl
bGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBpbnB1dCkKK3sKKyAgICBpZiAoY2xpZW50KCkpCisg
ICAgICAgIGNsaWVudCgpLT50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKGlucHV0KTsKK30K
Kwordm9pZCBFZGl0b3I6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqIGUpCit7Cisg
ICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+dGV4dERpZENoYW5nZUluVGV4dEFy
ZWEoZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGQ5N2Y2
NzAuLjVmZjE0OTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNs
aXBib2FyZEFjY2Vzc1BvbGljeS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRHJh
Z0ltYWdlLmgiCiAjaW5jbHVkZSAiRWRpdEFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRvckRlbGV0
ZUFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgpAQCAtMjY2LDYgKzI2
NywzOSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4dFZpc2libGVSYW5nZShS
YW5nZSosIGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3
cmFwRmxhZyk7CiAgICAgCiAgICAgdm9pZCBhZGRUb0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBwcmVw
ZW5kKTsKKworICAgIFN0cmluZyBzZWxlY3RlZFRleHQoKSBjb25zdDsKKyAgICBib29sIGZpbmRT
dHJpbmcoY29uc3QgU3RyaW5nJiwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdy
YXBGbGFnLCBib29sIHN0YXJ0SW5TZWxlY3Rpb24pOworCisgICAgY29uc3QgU2VsZWN0aW9uJiBt
YXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVzZWQgYXMgZW1hY3MgdXNlcyBpdC4KKyAgICB2
b2lkIHNldE1hcmsoY29uc3QgU2VsZWN0aW9uJik7CisKKyAgICB2b2lkIGNvbXB1dGVBbmRTZXRU
eXBpbmdTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiAsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9u
VW5zcGVjaWZpZWQpOworICAgIFN0cmluZyBzZWxlY3Rpb25TdGFydFN0eWxlUHJvcGVydHlWYWx1
ZShpbnQgc3R5bGVQcm9wZXJ0eUlEKSBjb25zdDsKKyAgICB2b2lkIGFwcGx5RWRpdGluZ1N0eWxl
VG9Cb2R5RWxlbWVudCgpIGNvbnN0OworICAgIHZvaWQgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1l
bnQoRWxlbWVudCopIGNvbnN0OworCisgICAgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5n
ZSopIGNvbnN0OworCisgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNl
bGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICBib29sIHNob3Vs
ZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgU2Vs
ZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29u
c3Q7CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2RlKiYgbm9k
ZVRvUmVtb3ZlKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG1hcmtBbGxNYXRjaGVzRm9yVGV4dChj
b25zdCBTdHJpbmcmLCBib29sIGNhc2VGbGFnLCB1bnNpZ25lZCBsaW1pdCk7CisgICAgYm9vbCBt
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNYXJr
ZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZyk7CisKKyAgICBQYXNzUmVmUHRy
PENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShOb2Rl
KiYgbm9kZVRvUmVtb3ZlKSBjb25zdDsKKworICAgIHZvaWQgdGV4dEZpZWxkRGlkQmVnaW5FZGl0
aW5nKEVsZW1lbnQqKTsKKyAgICB2b2lkIHRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCop
OworICAgIHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqKTsKKyAgICBib29s
IGRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiwgS2V5Ym9hcmRFdmVudCopOwor
ICAgIHZvaWQgdGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBpbnB1dCk7Cisg
ICAgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50Kik7CisKKyAgICBEcmFnSW1h
Z2VSZWYgZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCk7CiBwcml2YXRlOgogICAgIEZyYW1lKiBtX2Zy
YW1lOwogICAgIE93blB0cjxEZWxldGVCdXR0b25Db250cm9sbGVyPiBtX2RlbGV0ZUJ1dHRvbkNv
bnRyb2xsZXI7CkBAIC0yNzgsNiArMzEyLDggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q29tcG9z
aXRpb25VbmRlcmxpbmU+IG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzOwogICAgIGJvb2wg
bV9pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZTsKICAgICBib29sIG1fc2hvdWxkU3Rh
cnROZXdLaWxsUmluZ1NlcXVlbmNlOworICAgIFNlbGVjdGlvbiBtX21hcms7CisgICAgYm9vbCBt
X2hpZ2hsaWdodFRleHRNYXRjaGVzOwogCiAgICAgYm9vbCBjYW5EZWxldGVSYW5nZShSYW5nZSop
IGNvbnN0OwogICAgIGJvb2wgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2Fy
ZCopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IGNjNjgwYTYuLmY4YWEzY2UgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTIwOSw3ICsyMDksNyBAQCBzdGF0aWMgVHJp
U3RhdGUgc3RhdGVTdHlsZShGcmFtZSogZnJhbWUsIGludCBwcm9wZXJ0eUlELCBjb25zdCBjaGFy
KiBkZXNpcmVkVmFsdQogCiBzdGF0aWMgU3RyaW5nIHZhbHVlU3R5bGUoRnJhbWUqIGZyYW1lLCBp
bnQgcHJvcGVydHlJRCkKIHsKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvblN0YXJ0U3R5bGVQ
cm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOworICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCktPnNl
bGVjdGlvblN0YXJ0U3R5bGVQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwogfQogCiBzdGF0aWMg
VHJpU3RhdGUgc3RhdGVUZXh0V3JpdGluZ0RpcmVjdGlvbihGcmFtZSogZnJhbWUsIFdyaXRpbmdE
aXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAtMzQyLDcgKzM0Miw3IEBAIHN0YXRpYyBib29sIGV4ZWN1
dGVEZWxldGVUb0VuZE9mUGFyYWdyYXBoKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUqIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgUmVmUHRy
PFJhbmdlPiBtYXJrID0gZnJhbWUtPm1hcmsoKS50b1JhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdl
PiBtYXJrID0gZnJhbWUtPmVkaXRvcigpLT5tYXJrKCkudG9SYW5nZSgpOwogICAgIGlmIChtYXJr
KSB7CiAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxl
Y3Rpb24oKTsKICAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi0+c2V0U2VsZWN0ZWRS
YW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVk
UmFuZ2UoKS5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpOwpAQCAtMzUxLDcgKzM1MSw3
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUqIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIGZyYW1lLT5lZGl0b3IoKS0+cGVyZm9ybURlbGV0ZSgpOwotICAgIGZyYW1lLT5z
ZXRNYXJrKGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgIGZyYW1lLT5lZGl0
b3IoKS0+c2V0TWFyayhmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMzY5LDcgKzM2OSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxl
dGVXb3JkRm9yd2FyZChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwK
IAogc3RhdGljIGJvb2wgZXhlY3V0ZUZpbmRTdHJpbmcoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGZy
YW1lLT5maW5kU3RyaW5nKHZhbHVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpOworICAgIHJl
dHVybiBmcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcodmFsdWUsIHRydWUsIGZhbHNlLCB0cnVl
LCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVGb250TmFtZShGcmFtZSogZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CkBAIC04ODgsNyArODg4LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFNlbnRlbmNlKEZy
YW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb24KIAogc3RhdGljIGJv
b2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBmcmFt
ZS0+bWFyaygpLnRvUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBmcmFtZS0+ZWRp
dG9yKCktPm1hcmsoKS50b1JhbmdlKCk7CiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBm
cmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIW1hcmsgfHwgIXNlbGVj
dGlvbikgewogICAgICAgICBzeXN0ZW1CZWVwKCk7CkBAIC05MDUsNyArOTA1LDcgQEAgc3RhdGlj
IGJvb2wgZXhlY3V0ZVNlbGVjdFdvcmQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFMKIAogc3RhdGljIGJvb2wgZXhlY3V0ZVNldE1hcmsoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
ZnJhbWUtPnNldE1hcmsoZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgZnJh
bWUtPmVkaXRvcigpLT5zZXRNYXJrKGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05MjYsMTQgKzkyNiwxNCBAQCBzdGF0aWMgYm9vbCBl
eGVjdXRlU3VwZXJzY3JpcHQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2Ugc291cmNlLAogCiBzdGF0aWMgYm9vbCBleGVjdXRlU3dhcFdpdGhNYXJrKEZyYW1lKiBmcmFt
ZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGNv
bnN0IFNlbGVjdGlvbiYgbWFyayA9IGZyYW1lLT5tYXJrKCk7CisgICAgY29uc3QgU2VsZWN0aW9u
JiBtYXJrID0gZnJhbWUtPmVkaXRvcigpLT5tYXJrKCk7CiAgICAgY29uc3QgU2VsZWN0aW9uJiBz
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAgIGlmIChtYXJr
LmlzTm9uZSgpIHx8IHNlbGVjdGlvbi5pc05vbmUoKSkgewogICAgICAgICBzeXN0ZW1CZWVwKCk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZXRTZWxlY3Rpb24obWFyayk7Ci0gICAgZnJhbWUtPnNldE1hcmsoc2VsZWN0aW9uKTsKKyAgICBm
cmFtZS0+ZWRpdG9yKCktPnNldE1hcmsoc2VsZWN0aW9uKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMTA0MSw3ICsxMDQxLDcgQEAgc3RhdGljIGJvb2wgZW5hYmxlZFZpc2libGVTZWxlY3Rp
b25BbmRNYXJrKEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2ZW50LCBFZGl0b3JDb20KIHsKICAgICBj
b25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uRm9y
Q29tbWFuZChldmVudCk7CiAgICAgcmV0dXJuICgoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBzZWxl
Y3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgfHwgc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAg
ICAgJiYgZnJhbWUtPm1hcmsoKS5pc0NhcmV0T3JSYW5nZSgpOworICAgICAgICAmJiBmcmFtZS0+
ZWRpdG9yKCktPm1hcmsoKS5pc0NhcmV0T3JSYW5nZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFi
bGVDYXJldEluRWRpdGFibGVUZXh0KEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2ZW50LCBFZGl0b3JD
b21tYW5kU291cmNlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4
IGEwMjdhYTQuLjE2ZTkxMmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5j
cHAKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVj
dGlvbihjb25zdCBTZWxlY3Rpb24mIHMsIGJvb2wgY2xvc2VUeXBpbmcsIGJvbwogICAgIG1feFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0gTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmln
YXRpb247CiAgICAgc2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsK
ICAgICBtX2ZyYW1lLT5ub3RpZnlSZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdlKHVzZXJUcmlnZ2Vy
ZWQpOwotICAgIG1fZnJhbWUtPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9u
LCBjbG9zZVR5cGluZyk7CisgICAgbV9mcmFtZS0+ZWRpdG9yKCktPnJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBjbG9zZVR5cGluZyk7CiAgICAgaWYgKHVzZXJUcmlnZ2Vy
ZWQpCiAgICAgICAgIG1fZnJhbWUtPnJldmVhbENhcmV0KFJlbmRlckxheWVyOjpnQWxpZ25Ub0Vk
Z2VJZk5lZWRlZCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3Rr
LmNwcCBiL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hMmVjZjNhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9l
ZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RyYWdJbWFnZVJlZiBFZGl0b3I6OmRy
YWdJbWFnZUZvclNlbGVjdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0gYi9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCBiOThmYzAwLi5jMjgw
ZTk3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtMTIxLDQgKzEyMSwxMSBAQCB2b2lk
IEVkaXRvcjo6cGFzdGUoKQogICAgIGxvYWRlci0+c2V0QWxsb3dTdGFsZVJlc291cmNlcyhmYWxz
ZSk7CiB9CiAKK0RyYWdJbWFnZVJlZiBFZGl0b3I6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpCit7
CisgICAgaWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb25JbWFnZSgpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvcXQvRWRpdG9y
UXQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcAppbmRleCA4OWVlNzhlLi4w
NWY2MGYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvcXQvRWRpdG9yUXQuY3BwCisrKyBi
L1dlYkNvcmUvZWRpdGluZy9xdC9FZGl0b3JRdC5jcHAKQEAgLTQ0LDQgKzQ0LDkgQEAgUGFzc1Jl
ZlB0cjxDbGlwYm9hcmQ+IEVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZChDbGlwYm9hcmRBY2Nl
c3NQb2xpY3kgcG9saWN5KQogICAgIHJldHVybiBDbGlwYm9hcmRRdDo6Y3JlYXRlKHBvbGljeSk7
CiB9CiAKK0RyYWdJbWFnZVJlZiBFZGl0b3I6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAppbmRleCAzY2U3M2U0Li4xOTU1MTdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVG
b2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pCiB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQoKQogewogICAgIGlmIChpc1RleHRGaWVsZCgpICYm
IGZvY3VzZWQoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5m
cmFtZSgpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKHRoaXMpOworICAgICAgICBkb2N1bWVudCgp
LT5mcmFtZSgpLT5lZGl0b3IoKS0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZyh0aGlzKTsKIH0KIAog
Ym9vbCBIVE1MSW5wdXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CkBAIC0y
NjAsNyArMjYwLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgp
CiAgICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOwogICAgICAgICBpZiAoaW5w
dXRUeXBlKCkgPT0gUEFTU1dPUkQpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRVc2VTZWN1
cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZShmYWxzZSk7Ci0gICAgICAgIGRvY3VtZW50KCktPmZy
YW1lKCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmcodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkt
PmZyYW1lKCktPmVkaXRvcigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKHRoaXMpOwogICAgIH0K
ICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEJsdXJFdmVudCgp
OwogfQpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAgICAgfQogCiAgICAgaWYgKGlzVGV4dEZpZWxkKCkg
JiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldnQtPmlzS2V5
Ym9hcmRFdmVudCgpICYmIGZvY3VzZWQoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpCi0gICAgICAg
ICAgICAgICAgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2
ZW50KHRoaXMsIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpKSkgeworICAgICAgICAg
ICAgICAgICYmIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5kb1RleHRGaWVsZENvbW1h
bmRGcm9tRXZlbnQodGhpcywgc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCkpKSB7CiAg
ICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5jcHAKaW5kZXggY2FiMjEwNC4uODMxZTc0NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTM1
LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiRE9NU2VsZWN0aW9u
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRl
ICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKQEAgLTU0OCw3ICs1NDksNyBAQCBib29sIERPTVdpbmRvdzo6ZmluZChjb25zdCBT
dHJpbmcmIHN0cmluZywgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGJhY2t3YXJkcywgYgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhNRSAoMTMwMTYpOiBTdXBwb3J0IHdob2xl
V29yZCwgc2VhcmNoSW5GcmFtZXMgYW5kIHNob3dEaWFsb2cKLSAgICByZXR1cm4gbV9mcmFtZS0+
ZmluZFN0cmluZyhzdHJpbmcsICFiYWNrd2FyZHMsIGNhc2VTZW5zaXRpdmUsIHdyYXAsIGZhbHNl
KTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoc3RyaW5nLCAhYmFj
a3dhcmRzLCBjYXNlU2Vuc2l0aXZlLCB3cmFwLCBmYWxzZSk7CiB9CiAKIGJvb2wgRE9NV2luZG93
OjpvZmZzY3JlZW5CdWZmZXJpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggNjQzYTdlYS4uYWQxMGRhOCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCkBAIC0xMjIsNyArMTIyLDYgQEAgRnJhbWU6OkZyYW1lKFBhZ2UqIHBhZ2UsIEhUTUxG
cmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFtZUxvYWRlckNsaWVudCoKICAgICAs
IG1fbGlmZVN1cHBvcnRUaW1lcih0aGlzLCAmRnJhbWU6OmxpZmVTdXBwb3J0VGltZXJGaXJlZCkK
ICAgICAsIG1fY2FyZXRWaXNpYmxlKGZhbHNlKQogICAgICwgbV9jYXJldFBhaW50KHRydWUpCi0g
ICAgLCBtX2hpZ2hsaWdodFRleHRNYXRjaGVzKGZhbHNlKQogICAgICwgbV9pblZpZXdTb3VyY2VN
b2RlKGZhbHNlKQogICAgICwgbV9uZWVkc1JlYXBwbHlTdHlsZXMoZmFsc2UpCiAgICAgLCBtX2lz
RGlzY29ubmVjdGVkKGZhbHNlKQpAQCAtMjcxLDUxICsyNzAsNiBAQCBTZXR0aW5ncyogRnJhbWU6
OnNldHRpbmdzKCkgY29uc3QKICAgICByZXR1cm4gbV9wYWdlID8gbV9wYWdlLT5zZXR0aW5ncygp
IDogMDsKIH0KIAotU3RyaW5nIEZyYW1lOjpzZWxlY3RlZFRleHQoKSBjb25zdAotewotICAgIHJl
dHVybiBwbGFpblRleHQoc2VsZWN0aW9uKCktPnRvUmFuZ2UoKS5nZXQoKSk7Ci19Ci0KLUludFJl
Y3QgRnJhbWU6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKLXsKLSAgICBp
bnQgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMDsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBBU1NFUlQocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSk7Ci0gICAgQVNTRVJUKHJhbmdl
LT5lbmRDb250YWluZXIoZWMpKTsKLQotICAgIElubGluZUJveCogc3RhcnRJbmxpbmVCb3g7Ci0g
ICAgaW50IHN0YXJ0Q2FyZXRPZmZzZXQ7Ci0gICAgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5nZXRJ
bmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVBTSwgc3RhcnRJbmxpbmVCb3gsIHN0YXJ0Q2FyZXRP
ZmZzZXQpOwotCi0gICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0gcmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKGVjKS0+cmVuZGVyZXIoKTsKLSAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0g
c3RhcnRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qoc3RhcnRJbmxpbmVCb3gsIHN0YXJ0Q2FyZXRP
ZmZzZXQsICZleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwotICAgIGlmIChzdGFydENhcmV0UmVjdCAh
PSBJbnRSZWN0KCkpCi0gICAgICAgIHN0YXJ0Q2FyZXRSZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qoc3RhcnRDYXJldFJlY3QpKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOwotCi0gICAgSW5saW5lQm94KiBlbmRJbmxpbmVCb3g7Ci0gICAgaW50IGVuZENh
cmV0T2Zmc2V0OwotICAgIHJhbmdlLT5lbmRQb3NpdGlvbigpLmdldElubGluZUJveEFuZE9mZnNl
dChVUFNUUkVBTSwgZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7Ci0KLSAgICBSZW5kZXJP
YmplY3QqIGVuZFJlbmRlcmVyID0gcmFuZ2UtPmVuZENvbnRhaW5lcihlYyktPnJlbmRlcmVyKCk7
Ci0gICAgSW50UmVjdCBlbmRDYXJldFJlY3QgPSBlbmRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qo
ZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7Ci0gICAgaWYgKGVuZENhcmV0UmVjdCAhPSBJ
bnRSZWN0KCkpCi0gICAgICAgIGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGVRdWFkKEZsb2F0UmVjdChlbmRDYXJldFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
OwotCi0gICAgaWYgKHN0YXJ0Q2FyZXRSZWN0LnkoKSA9PSBlbmRDYXJldFJlY3QueSgpKSB7Ci0g
ICAgICAgIC8vIHN0YXJ0IGFuZCBlbmQgYXJlIG9uIHRoZSBzYW1lIGxpbmUKLSAgICAgICAgcmV0
dXJuIEludFJlY3QobWluKHN0YXJ0Q2FyZXRSZWN0LngoKSwgZW5kQ2FyZXRSZWN0LngoKSksIAot
ICAgICAgICAgICAgICAgICAgICAgICBzdGFydENhcmV0UmVjdC55KCksIAotICAgICAgICAgICAg
ICAgICAgICAgICBhYnMoZW5kQ2FyZXRSZWN0LngoKSAtIHN0YXJ0Q2FyZXRSZWN0LngoKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgIG1heChzdGFydENhcmV0UmVjdC5oZWlnaHQoKSwgZW5kQ2Fy
ZXRSZWN0LmhlaWdodCgpKSk7Ci0gICAgfQotICAgIAotICAgIC8vIHN0YXJ0IGFuZCBlbmQgYXJl
bid0IG9uIHRoZSBzYW1lIGxpbmUsIHNvIGdvIGZyb20gc3RhcnQgdG8gdGhlIGVuZCBvZiBpdHMg
bGluZQotICAgIHJldHVybiBJbnRSZWN0KHN0YXJ0Q2FyZXRSZWN0LngoKSwgCi0gICAgICAgICAg
ICAgICAgICAgc3RhcnRDYXJldFJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2Fy
ZXRSZWN0LndpZHRoKCkgKyBleHRyYVdpZHRoVG9FbmRPZkxpbmUsCi0gICAgICAgICAgICAgICAg
ICAgc3RhcnRDYXJldFJlY3QuaGVpZ2h0KCkpOwotfQotCiBTZWxlY3Rpb25Db250cm9sbGVyKiBG
cmFtZTo6c2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gJm1fc2VsZWN0aW9uQ29udHJv
bGxlcjsKQEAgLTQ5OSwyMSArNDUzLDYgQEAgU3RyaW5nIEZyYW1lOjptYXRjaExhYmVsc0FnYWlu
c3RFbGVtZW50KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVsZW1lbnQqIGUKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKLWNvbnN0IFNlbGVjdGlvbiYgRnJhbWU6Om1hcmsoKSBjb25z
dAotewotICAgIHJldHVybiBtX21hcms7Ci19Ci0KLXZvaWQgRnJhbWU6OnNldE1hcmsoY29uc3Qg
U2VsZWN0aW9uJiBzKQotewotICAgIEFTU0VSVCghcy5iYXNlKCkubm9kZSgpIHx8IHMuYmFzZSgp
Lm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCgpKTsKLSAgICBBU1NFUlQoIXMuZXh0ZW50
KCkubm9kZSgpIHx8IHMuZXh0ZW50KCkubm9kZSgpLT5kb2N1bWVudCgpID09IGRvY3VtZW50KCkp
OwotICAgIEFTU0VSVCghcy5zdGFydCgpLm5vZGUoKSB8fCBzLnN0YXJ0KCkubm9kZSgpLT5kb2N1
bWVudCgpID09IGRvY3VtZW50KCkpOwotICAgIEFTU0VSVCghcy5lbmQoKS5ub2RlKCkgfHwgcy5l
bmQoKS5ub2RlKCktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQoKSk7Ci0KLSAgICBtX21hcmsgPSBz
OwotfQotCiB2b2lkIEZyYW1lOjpub3RpZnlSZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdlKGJvb2wg
dXNlclRyaWdnZXJlZCkKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gMDsKQEAgLTgy
OCwxMyArNzY3LDcgQEAgdm9pZCBGcmFtZTo6cmVhcHBseVN0eWxlcygpCiAKIGJvb2wgRnJhbWU6
OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikgY29u
c3QKIHsKLSAgICByZXR1cm4gc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLT5zZWxl
Y3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwot
fQotCi1ib29sIEZyYW1lOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiBv
bGRTZWxlY3Rpb24sIGNvbnN0IFNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHkgYWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVkaXRvcigp
LT5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9SYW5n
ZSgpLmdldCgpLCBuZXdTZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZmaW5pdHksIHN0aWxs
U2VsZWN0aW5nKTsKKyAgICByZXR1cm4gZWRpdG9yKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihz
ZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmlu
aXR5KCksIGZhbHNlKTsKIH0KIAogYm9vbCBGcmFtZTo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNv
bnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdApAQCAtODgwLDIwMCArODEzLDYgQEAgdm9p
ZCBGcmFtZTo6Y2xlYXJUeXBpbmdTdHlsZSgpCiAgICAgbV90eXBpbmdTdHlsZSA9IDA7CiB9CiAK
LXZvaWQgRnJhbWU6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
ICpzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQotewotICAgIGlmICghc3R5bGUgfHwg
c3R5bGUtPmxlbmd0aCgpID09IDApIHsKLSAgICAgICAgY2xlYXJUeXBpbmdTdHlsZSgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHR5cGlu
ZyBzdHlsZS4KLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG11dGFibGVT
dHlsZSA9IHN0eWxlLT5tYWtlTXV0YWJsZSgpOwotICAgIGlmICh0eXBpbmdTdHlsZSgpKSB7Ci0g
ICAgICAgIHR5cGluZ1N0eWxlKCktPm1lcmdlKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0gICAgICAg
IG11dGFibGVTdHlsZSA9IHR5cGluZ1N0eWxlKCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPENTU1Zh
bHVlPiB1bmljb2RlQmlkaTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGRpcmVjdGlvbjsKLSAgICBp
ZiAoZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbikgewotICAg
ICAgICB1bmljb2RlQmlkaSA9IG11dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eVVuaWNvZGVCaWRpKTsKLSAgICAgICAgZGlyZWN0aW9uID0gbXV0YWJsZVN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKLSAgICB9Ci0KLSAgICBO
b2RlKiBub2RlID0gc2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBF
cXVpdmFsZW50KCkubm9kZSgpOwotICAgIGNvbXB1dGVkU3R5bGUobm9kZSktPmRpZmYobXV0YWJs
ZVN0eWxlLmdldCgpKTsKLQotICAgIGlmIChlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb25TZXRX
cml0aW5nRGlyZWN0aW9uICYmIHVuaWNvZGVCaWRpKSB7Ci0gICAgICAgIEFTU0VSVCh1bmljb2Rl
QmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgbXV0YWJsZVN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHVuaWNvZGVCaWRpLmdldCgpKS0+Z2V0SWRlbnQoKSk7Ci0gICAgICAgIGlmIChkaXJlY3Rp
b24pIHsKLSAgICAgICAgICAgIEFTU0VSVChkaXJlY3Rpb24tPmlzUHJpbWl0aXZlVmFsdWUoKSk7
Ci0gICAgICAgICAgICBtdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0
aW9uLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGRpcmVjdGlvbi5nZXQoKSktPmdl
dElkZW50KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxl
cywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KLSAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGJsb2NrU3R5bGUgPSBtdXRhYmxlU3R5bGUtPmNv
cHlCbG9ja1Byb3BlcnRpZXMoKTsKLSAgICBibG9ja1N0eWxlLT5kaWZmKG11dGFibGVTdHlsZS5n
ZXQoKSk7Ci0gICAgaWYgKGRvY3VtZW50KCkgJiYgYmxvY2tTdHlsZS0+bGVuZ3RoKCkgPiAwKQot
ICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBibG9ja1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKSk7Ci0gICAgCi0gICAgLy8gU2V0IHRo
ZSByZW1haW5pbmcgc3R5bGUgYXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBtX3R5cGluZ1N0eWxl
ID0gbXV0YWJsZVN0eWxlLnJlbGVhc2UoKTsKLX0KLQotU3RyaW5nIEZyYW1lOjpzZWxlY3Rpb25T
dGFydFN0eWxlUHJvcGVydHlWYWx1ZShpbnQgc3R5bGVQcm9wZXJ0eUlEKSBjb25zdAotewotICAg
IE5vZGUgKm5vZGVUb1JlbW92ZTsKLSAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc2Vs
ZWN0aW9uU3R5bGUgPSBzZWxlY3Rpb25Db21wdXRlZFN0eWxlKG5vZGVUb1JlbW92ZSk7Ci0gICAg
aWYgKCFzZWxlY3Rpb25TdHlsZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgU3Ry
aW5nIHZhbHVlID0gc2VsZWN0aW9uU3R5bGUtPmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0
eUlEKTsKLQotICAgIGlmIChub2RlVG9SZW1vdmUpIHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKGVjKTsKLSAgICAgICAgQVNTRVJU
KGVjID09IDApOwotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotUGFzc1JlZlB0cjxD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IEZyYW1lOjpzZWxlY3Rpb25Db21wdXRlZFN0eWxl
KE5vZGUqJiBub2RlVG9SZW1vdmUpIGNvbnN0Ci17Ci0gICAgbm9kZVRvUmVtb3ZlID0gMDsKLQot
ICAgIGlmICghZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoc2VsZWN0
aW9uKCktPmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2Uoc2VsZWN0aW9uKCktPnRvUmFuZ2UoKSk7Ci0gICAgUG9zaXRpb24gcG9zID0gcmFuZ2Ut
PmVkaXRpbmdTdGFydFBvc2l0aW9uKCk7Ci0KLSAgICBFbGVtZW50ICplbGVtID0gcG9zLmVsZW1l
bnQoKTsKLSAgICBpZiAoIWVsZW0pCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIFJlZlB0
cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQgPSBlbGVtOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotCi0gICAgaWYgKG1fdHlwaW5nU3R5bGUpIHsKLSAgICAgICAgc3R5bGVFbGVtZW50ID0gZG9j
dW1lbnQoKS0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJLCAic3BhbiIsIGVjKTsK
LSAgICAgICAgQVNTRVJUKGVjID09IDApOwotCi0gICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0
cmlidXRlKHN0eWxlQXR0ciwgbV90eXBpbmdTdHlsZS0+Y3NzVGV4dCgpLmltcGwoKSwgZWMpOwot
ICAgICAgICBBU1NFUlQoZWMgPT0gMCk7Ci0gICAgICAgIAotICAgICAgICBzdHlsZUVsZW1lbnQt
PmFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZSgiIiksIGVjKTsK
LSAgICAgICAgQVNTRVJUKGVjID09IDApOwotCi0gICAgICAgIGlmIChlbGVtLT5yZW5kZXJlcigp
ICYmIGVsZW0tPnJlbmRlcmVyKCktPmNhbkhhdmVDaGlsZHJlbigpKSB7Ci0gICAgICAgICAgICBl
bGVtLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIE5vZGUgKnBhcmVudCA9IGVsZW0tPnBhcmVudCgpOwotICAgICAgICAgICAgTm9k
ZSAqbmV4dCA9IGVsZW0tPm5leHRTaWJsaW5nKCk7Ci0KLSAgICAgICAgICAgIGlmIChuZXh0KSB7
Ci0gICAgICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoc3R5bGVFbGVtZW50LCBuZXh0
LCBlYyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBhcmVudC0+YXBw
ZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgQVNTRVJUKGVjID09IDApOwotCi0gICAgICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxl
bWVudC5nZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29tcHV0ZWRTdHlsZShzdHlsZUVsZW1l
bnQucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBGcmFtZTo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5n
KEVsZW1lbnQqIGUpCi17Ci0gICAgaWYgKGVkaXRvcigpLT5jbGllbnQoKSkKLSAgICAgICAgZWRp
dG9yKCktPmNsaWVudCgpLT50ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoZSk7Ci19Ci0KLXZvaWQg
RnJhbWU6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZSkKLXsKLSAgICBpZiAoZWRp
dG9yKCktPmNsaWVudCgpKQotICAgICAgICBlZGl0b3IoKS0+Y2xpZW50KCktPnRleHRGaWVsZERp
ZEVuZEVkaXRpbmcoZSk7Ci19Ci0KLXZvaWQgRnJhbWU6OnRleHREaWRDaGFuZ2VJblRleHRGaWVs
ZChFbGVtZW50KiBlKQotewotICAgIGlmIChlZGl0b3IoKS0+Y2xpZW50KCkpCi0gICAgICAgIGVk
aXRvcigpLT5jbGllbnQoKS0+dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKGUpOwotfQotCi1ib29s
IEZyYW1lOjpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCogZSwgS2V5Ym9hcmRF
dmVudCoga2UpCi17Ci0gICAgaWYgKGVkaXRvcigpLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJu
IGVkaXRvcigpLT5jbGllbnQoKS0+ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KGUsIGtlKTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBGcmFtZTo6dGV4dFdpbGxCZURlbGV0ZWRJ
blRleHRGaWVsZChFbGVtZW50KiBpbnB1dCkKLXsKLSAgICBpZiAoZWRpdG9yKCktPmNsaWVudCgp
KQotICAgICAgICBlZGl0b3IoKS0+Y2xpZW50KCktPnRleHRXaWxsQmVEZWxldGVkSW5UZXh0Rmll
bGQoaW5wdXQpOwotfQotCi12b2lkIEZyYW1lOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVt
ZW50KiBlKQotewotICAgIGlmIChlZGl0b3IoKS0+Y2xpZW50KCkpCi0gICAgICAgIGVkaXRvcigp
LT5jbGllbnQoKS0+dGV4dERpZENoYW5nZUluVGV4dEFyZWEoZSk7Ci19Ci0KLXZvaWQgRnJhbWU6
OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rv
YykKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3Qg
PSBtX2RvYy0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKTsKLSAgICB1bnNpZ25lZCBsZW4g
PSBsaXN0LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKysp
IHsKLSAgICAgICAgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KGxpc3QtPml0ZW0oaSkpKTsgICAgCi0gICAgfQotfQotCi12b2lkIEZyYW1lOjpyZW1vdmVF
ZGl0aW5nU3R5bGVGcm9tQm9keUVsZW1lbnQoKSBjb25zdAotewotICAgIGlmICghbV9kb2MpCi0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gbV9k
b2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5Iik7Ci0gICAgdW5zaWduZWQgbGVuID0gbGlz
dC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0g
ICAgICAgIHJlbW92ZUVkaXRpbmdTdHlsZUZyb21FbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQq
PihsaXN0LT5pdGVtKGkpKSk7ICAgIAotICAgIH0KLX0KLQotdm9pZCBGcmFtZTo6YXBwbHlFZGl0
aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBpZiAoIWVs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
ID0gZWxlbWVudC0+c3R5bGUoKTsKLSAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V29yZFdyYXAs
ICJicmVhay13b3JkIiwgZmFsc2UsIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7Ci0gICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGUsICJzcGFjZSIsIGZhbHNl
LCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdExpbmVCcmVhaywgImFmdGVyLXdoaXRlLXNwYWNlIiwgZmFsc2UsIGVjKTsK
LSAgICBBU1NFUlQoZWMgPT0gMCk7Ci19Ci0KLXZvaWQgRnJhbWU6OnJlbW92ZUVkaXRpbmdTdHls
ZUZyb21FbGVtZW50KEVsZW1lbnQqKSBjb25zdAotewotfQotCiAjaWZuZGVmIE5ERUJVRwogc3Rh
dGljIEhhc2hTZXQ8RnJhbWUqPiYga2VlcEFsaXZlU2V0KCkKIHsKQEAgLTEzMjYsNDMgKzEwNjUs
NiBAQCB2b2lkIEZyYW1lOjpjbGVhclRpbWVycygpCiAgICAgY2xlYXJUaW1lcnMobV92aWV3Lmdl
dCgpLCBkb2N1bWVudCgpKTsKIH0KIAotUmVuZGVyU3R5bGUgKkZyYW1lOjpzdHlsZUZvclNlbGVj
dGlvblN0YXJ0KE5vZGUgKiZub2RlVG9SZW1vdmUpIGNvbnN0Ci17Ci0gICAgbm9kZVRvUmVtb3Zl
ID0gMDsKLSAgICAKLSAgICBpZiAoIWRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGlmIChzZWxlY3Rpb24oKS0+aXNOb25lKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAg
IFBvc2l0aW9uIHBvcyA9IHNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5k
ZWVwRXF1aXZhbGVudCgpOwotICAgIGlmICghcG9zLmlzQ2FuZGlkYXRlKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIE5vZGUgKm5vZGUgPSBwb3Mubm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaWYgKCFtX3R5cGluZ1N0eWxlKQotICAgICAgICBy
ZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICAKLSAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQoKS0+
Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJLCAic3BhbiIsIGVjKTsKLSAgICBBU1NF
UlQoZWMgPT0gMCk7Ci0gICAgCi0gICAgU3RyaW5nIHN0eWxlVGV4dCA9IG1fdHlwaW5nU3R5bGUt
PmNzc1RleHQoKSArICIgZGlzcGxheTogaW5saW5lIjsKLSAgICBzdHlsZUVsZW1lbnQtPnNldEF0
dHJpYnV0ZShzdHlsZUF0dHIsIHN0eWxlVGV4dC5pbXBsKCksIGVjKTsKLSAgICBBU1NFUlQoZWMg
PT0gMCk7Ci0gICAgCi0gICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLT5j
cmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOwotICAg
IAotICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7
Ci0gICAgQVNTRVJUKGVjID09IDApOwotICAgIAotICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxl
bWVudC5nZXQoKTsgICAgCi0gICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+cmVuZGVyZXIoKSA/IHN0
eWxlRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6IDA7Ci19Ci0KIHZvaWQgRnJhbWU6OnNl
dFNlbGVjdGlvbkZyb21Ob25lKCkKIHsKICAgICAvLyBQdXQgYSBjYXJldCBpbnNpZGUgdGhlIGJv
ZHkgaWYgdGhlIGVudGlyZSBmcmFtZSBpcyBlZGl0YWJsZSAoZWl0aGVyIHRoZSAKQEAgLTEzODgs
MTY1ICsxMDkwLDYgQEAgdm9pZCBGcmFtZTo6c2V0SW5WaWV3U291cmNlTW9kZShib29sIG1vZGUp
CiAgICAgbV9pblZpZXdTb3VyY2VNb2RlID0gbW9kZTsKIH0KIAotLy8gU2VhcmNoZXMgZnJvbSB0
aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBpZiBub3RoaW5nIGlzIHNlbGVjdGVkLgotYm9v
bCBGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBmb3J3YXJkLCBi
b29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnLCBib29sIHN0YXJ0SW5TZWxlY3Rpb24pCi17Ci0g
ICAgaWYgKHRhcmdldC5pc0VtcHR5KCkgfHwgIWRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBpZiAoZXhjbHVkZUZyb21UZXh0U2VhcmNoKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBTdGFydCBmcm9tIGFuIGVkZ2Ugb2YgdGhlIHNlbGVj
dGlvbiwgaWYgdGhlcmUncyBhIHNlbGVjdGlvbiB0aGF0J3Mgbm90IGluIHNoYWRvdyBjb250ZW50
LiBXaGljaCBlZGdlCi0gICAgLy8gaXMgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgc2Vh
cmNoaW5nIGZvcndhcmQgb3IgYmFja3dhcmQsIGFuZCB3aGV0aGVyIHN0YXJ0SW5TZWxlY3Rpb24g
aXMgc2V0LgotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKGRv
Y3VtZW50KCkpKTsKLSAgICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gdGhpcy0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpOwotCi0gICAgaWYgKGZvcndhcmQpCi0gICAgICAgIHNldFN0YXJ0KHNlYXJj
aFJhbmdlLmdldCgpLCBzdGFydEluU2VsZWN0aW9uID8gc2VsZWN0aW9uLnZpc2libGVTdGFydCgp
IDogc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7Ci0gICAgZWxzZQotICAgICAgICBzZXRFbmQoc2Vh
cmNoUmFuZ2UuZ2V0KCksIHN0YXJ0SW5TZWxlY3Rpb24gPyBzZWxlY3Rpb24udmlzaWJsZUVuZCgp
IDogc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKTsKLQotICAgIE5vZGUqIHNoYWRvd1RyZWVSb290
ID0gc2VsZWN0aW9uLnNoYWRvd1RyZWVSb290Tm9kZSgpOwotICAgIGlmIChzaGFkb3dUcmVlUm9v
dCkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgaWYgKGZvcndhcmQp
Ci0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBzaGFkb3dU
cmVlUm9vdC0+Y2hpbGROb2RlQ291bnQoKSwgZWMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QsIDAsIGVjKTsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2Uu
Z2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpKTsKLSAgICAvLyBJZiB3ZSBzdGFydGVk
IGluIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNoZXMgdGhl
IGV4aXN0aW5nIHNlbGVjdGlvbiwgZmluZCBhZ2Fpbi4KLSAgICAvLyBCdWlsZCBhIHNlbGVjdGlv
biB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2UuCi0g
ICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25v
cmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KLSAgICBpZiAo
c3RhcnRJblNlbGVjdGlvbiAmJiAqU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpKS50b1Jhbmdl
KCkgPT0gKnNlbGVjdGlvbi50b1JhbmdlKCkpIHsKLSAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5n
ZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7Ci0gICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAg
ICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCksIHNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKSk7Ci0KLSAgICAgICAgaWYgKHNoYWRvd1RyZWVSb290KSB7Ci0g
ICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIGlmIChmb3J3YXJk
KQotICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoc2hhZG93VHJlZVJvb3QsIHNo
YWRvd1RyZWVSb290LT5jaGlsZE5vZGVDb3VudCgpLCBlYyk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHNoYWRvd1RyZWVSb290LCAwLCBl
Yyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2Vh
cmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpOwotICAgIH0KLSAgICAK
LSAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7Ci0KLSAgICAvLyBJZiBub3RoaW5nIHdh
cyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUsIHNlYXJjaCBpbiBtYWluIGNvbnRlbnQgZm9sbG93
aW5nIHRoZSBzaGFkb3cgdHJlZS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNl
cHRpb24pICYmIHNoYWRvd1RyZWVSb290KSB7Ci0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VP
ZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKHNoYWRvd1RyZWVSb290LT5zaGFkb3dQYXJlbnRO
b2RlKCksIGV4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJhbmdl
LT5zZXRFbmRCZWZvcmUoc2hhZG93VHJlZVJvb3QtPnNoYWRvd1BhcmVudE5vZGUoKSwgZXhjZXB0
aW9uKTsKLQotICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2Uu
Z2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpOwotICAgIH0KLSAgICAKLSAgICBpZiAo
IWVkaXRvcigpLT5pbnNpZGVWaXNpYmxlQXJlYShyZXN1bHRSYW5nZS5nZXQoKSkpIHsKLSAgICAg
ICAgcmVzdWx0UmFuZ2UgPSBlZGl0b3IoKS0+bmV4dFZpc2libGVSYW5nZShyZXN1bHRSYW5nZS5n
ZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZywgd3JhcEZsYWcpOwotICAgICAgICBpZiAo
IXJlc3VsdFJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIGFuZCB3ZSdyZSB3cmFwcGluZywgc2VhcmNoIGFn
YWluIGluIHRoZSBlbnRpcmUgZG9jdW1lbnQgKHRoaXMgd2lsbAotICAgIC8vIHJlZHVuZGFudGx5
IHJlLXNlYXJjaCB0aGUgYXJlYSBhbHJlYWR5IHNlYXJjaGVkIGluIHNvbWUgY2FzZXMpLgotICAg
IGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikgJiYgd3JhcEZsYWcpIHsKLSAg
ICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7Ci0gICAgICAg
IHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBm
b3J3YXJkLCBjYXNlRmxhZyk7Ci0gICAgICAgIC8vIFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNlIGhl
cmUgaWYgd2UgZW5kZWQgdXAgd2l0aCB0aGUgc2FtZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0
aAotICAgICAgICAvLyAoZS5nLiwgdGhlIHNlbGVjdGlvbiB3YXMgYWxyZWFkeSB0aGUgb25seSBp
bnN0YW5jZSBvZiB0aGlzIHRleHQpLiBCdXQgd2UgZGVjaWRlZCB0aGF0Ci0gICAgICAgIC8vIHRo
aXMgc2hvdWxkIGJlIGEgc3VjY2VzcyBjYXNlIGluc3RlYWQsIHNvIHdlJ2xsIGp1c3QgZmFsbCB0
aHJvdWdoIGluIHRoYXQgY2FzZS4KLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxh
cHNlZChleGNlcHRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB0aGlzLT5zZWxl
Y3Rpb24oKS0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNU
UkVBTSkpOwotICAgIHJldmVhbFNlbGVjdGlvbigpOwotICAgIHJldHVybiB0cnVlOwotfQotCi11
bnNpZ25lZCBGcmFtZTo6bWFya0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBib29sIGNhc2VGbGFnLCB1bnNpZ25lZCBsaW1pdCkKLXsKLSAgICBpZiAodGFyZ2V0LmlzRW1w
dHkoKSB8fCAhZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgUmVmUHRy
PFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSkpOwotICAgIAot
ICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKLSAgICB1bnNpZ25lZCBtYXRjaENvdW50
ID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UoZmluZFBs
YWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCB0cnVlLCBjYXNlRmxhZykpOwotICAg
ICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24pKSB7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5pc0luU2hhZG93VHJlZSgpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdl
T2ZDb250ZW50cyhkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dEFmdGVyKHJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5zaGFkb3dBbmNlc3Rvck5vZGUo
KSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAvLyBBIG5vbi1jb2xsYXBzZWQgcmVzdWx0IHJhbmdlIGNhbiBpbiBzb21lIGZ1
bmt5IHdoaXRlc3BhY2UgY2FzZXMgc3RpbGwgbm90Ci0gICAgICAgIC8vIGFkdmFuY2UgdGhlIHJh
bmdlJ3Mgc3RhcnQgcG9zaXRpb24gKDQ1MDkzMjgpLiBCcmVhayB0byBhdm9pZCBpbmZpbml0ZSBs
b29wLgotICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQgPSBlbmRWaXNpYmxlUG9zaXRp
b24ocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOwotICAgICAgICBpZiAobmV3U3RhcnQg
PT0gc3RhcnRWaXNpYmxlUG9zaXRpb24oc2VhcmNoUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gT25seSB0cmVhdCB0aGUgcmVzdWx0IGFz
IGEgbWF0Y2ggaWYgaXQgaXMgdmlzaWJsZQotICAgICAgICBpZiAoZWRpdG9yKCktPmluc2lkZVZp
c2libGVBcmVhKHJlc3VsdFJhbmdlLmdldCgpKSkgewotICAgICAgICAgICAgKyttYXRjaENvdW50
OwotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWFya2VyKHJlc3VsdFJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Ly8gU3RvcCBsb29raW5nIGlmIHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxpbWl0IG9m
IDAgbWVhbnMgbm8gbGltaXQuCi0gICAgICAgIGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+
PSBsaW1pdCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgc2V0U3RhcnQo
c2VhcmNoUmFuZ2UuZ2V0KCksIG5ld1N0YXJ0KTsKLSAgICAgICAgTm9kZSogc2hhZG93VHJlZVJv
b3QgPSBzZWFyY2hSYW5nZS0+c2hhZG93VHJlZVJvb3ROb2RlKCk7Ci0gICAgICAgIGlmIChzZWFy
Y2hSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikgJiYgc2hhZG93VHJlZVJvb3QpCi0gICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+
Y2hpbGROb2RlQ291bnQoKSwgZXhjZXB0aW9uKTsKLSAgICB9IHdoaWxlICh0cnVlKTsKLSAgICAK
LSAgICAvLyBEbyBhICJmYWtlIiBwYWludCBpbiBvcmRlciB0byBleGVjdXRlIHRoZSBjb2RlIHRo
YXQgY29tcHV0ZXMgdGhlIHJlbmRlcmVkIHJlY3QgZm9yIAotICAgIC8vIGVhY2ggdGV4dCBtYXRj
aC4KLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jICYmIG1fdmll
dyAmJiBjb250ZW50UmVuZGVyZXIoKSkgewotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dCgpOyAv
LyBFbnN1cmUgbGF5b3V0IGlzIHVwIHRvIGRhdGUuCi0gICAgICAgIEludFJlY3QgdmlzaWJsZVJl
Y3QgPSBtX3ZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgICAgICBpZiAoIXZpc2libGVS
ZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoKFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KikwKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0UGFpbnRp
bmdEaXNhYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIG1fdmlldy0+cGFpbnRDb250ZW50cygmY29u
dGV4dCwgdmlzaWJsZVJlY3QpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBt
YXRjaENvdW50OwotfQotCi1ib29sIEZyYW1lOjptYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdo
dGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9oaWdobGlnaHRUZXh0TWF0Y2hlczsKLX0KLQot
dm9pZCBGcmFtZTo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sIGZsYWcp
Ci17Ci0gICAgaWYgKGZsYWcgPT0gbV9oaWdobGlnaHRUZXh0TWF0Y2hlcyB8fCAhZG9jdW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1faGlnaGxpZ2h0VGV4dE1hdGNoZXMgPSBm
bGFnOwotICAgIGRvY3VtZW50KCktPnJlcGFpbnRNYXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0
TWF0Y2gpOwotfQotCiBGcmFtZVRyZWUqIEZyYW1lOjp0cmVlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gJm1fdHJlZU5vZGU7CkBAIC0xNjI4LDU1ICsxMTcxLDYgQEAgU3RyaW5nIEZyYW1lOjpkb2N1
bWVudFR5cGVTdHJpbmcoKSBjb25zdAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBG
cmFtZTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbiwgYm9vbCBjbG9zZVR5cGluZykKLXsKLSAgICBpZiAoZG9jdW1lbnQoKSkgewotICAgICAg
ICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZWRpdG9yKCktPmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgIGJvb2wgaXNDb250aW51b3Vz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
ICYmIGVkaXRvcigpLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKLSAgICAgICAgaWYgKGlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKSB7Ci0gICAgICAgICAgICBTZWxlY3Rpb24g
bmV3QWRqYWNlbnRXb3JkczsKLSAgICAgICAgICAgIFNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRl
bmNlOwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KHNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7Ci0gICAgICAgICAgICAgICAg
bmV3QWRqYWNlbnRXb3JkcyA9IFNlbGVjdGlvbihzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdv
cmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFy
eSkpOwotICAgICAgICAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKQotICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZFNlbnRlbmNlID0gU2VsZWN0aW9u
KHN0YXJ0T2ZTZW50ZW5jZShuZXdTdGFydCksIGVuZE9mU2VudGVuY2UobmV3U3RhcnQpKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3BlbGxp
bmcgZWxzZXdoZXJlLCBzbyBkb24ndCByZWRvIGl0IGhlcmUuCi0gICAgICAgICAgICAvLyBJZiB0
aGlzIGlzIGEgY2hhbmdlIGluIHNlbGVjdGlvbiByZXN1bHRpbmcgZnJvbSBhIGRlbGV0ZSBvcGVy
YXRpb24sCi0gICAgICAgICAgICAvLyBvbGRTZWxlY3Rpb24gbWF5IG5vIGxvbmdlciBiZSBpbiB0
aGUgZG9jdW1lbnQuCi0gICAgICAgICAgICBpZiAoY2xvc2VUeXBpbmcgJiYgb2xkU2VsZWN0aW9u
LmlzQ29udGVudEVkaXRhYmxlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpICYmIG9s
ZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7
Ci0gICAgICAgICAgICAgICAgU2VsZWN0aW9uIG9sZEFkamFjZW50V29yZHMgPSBTZWxlY3Rpb24o
c3RhcnRPZldvcmQob2xkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG9s
ZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsgICAKLSAgICAgICAgICAgICAgICBpZiAo
b2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdBZGphY2VudFdvcmRzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGVkaXRvcigpLT5tYXJrTWlzc3BlbGxpbmdzKG9sZEFkamFjZW50V29yZHMpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNDb250aW51b3VzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uIG9sZFNlbGVjdGVkU2VudGVuY2UgPSBT
ZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKG9sZFN0YXJ0KSwgZW5kT2ZTZW50ZW5jZShvbGRTdGFy
dCkpOyAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFNlbGVjdGVkU2VudGVuY2Ug
IT0gbmV3U2VsZWN0ZWRTZW50ZW5jZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0
b3IoKS0+bWFya0JhZEdyYW1tYXIob2xkU2VsZWN0ZWRTZW50ZW5jZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFRoaXMgb25seSBlcmFzZXMgbWFya2VycyB0aGF0IGFyZSBpbiB0aGUgZmlyc3QgdW5pdCAo
d29yZCBvciBzZW50ZW5jZSkgb2YgdGhlIHNlbGVjdGlvbi4KLSAgICAgICAgICAgIC8vIFBlcmhh
cHMgcGVjdWxpYXIsIGJ1dCBpdCBtYXRjaGVzIEFwcEtpdC4KLSAgICAgICAgICAgIGlmIChSZWZQ
dHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9SYW5nZSgpKQotICAgICAg
ICAgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gc2Vu
dGVuY2VSYW5nZSA9IG5ld1NlbGVjdGVkU2VudGVuY2UudG9SYW5nZSgpKQotICAgICAgICAgICAg
ICAgIGRvY3VtZW50KCktPnJlbW92ZU1hcmtlcnMoc2VudGVuY2VSYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OkdyYW1tYXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2hlbiBjb250aW51
b3VzIHNwZWxsIGNoZWNraW5nIGlzIG9mZiwgZXhpc3RpbmcgbWFya2VycyBkaXNhcHBlYXIgYWZ0
ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLgotICAgICAgICBpZiAoIWlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTWFya2VycyhE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICBpZiAoIWlzQ29udGludW91c0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJz
KERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKLSAgICB9Ci0KLSAgICBlZGl0b3IoKS0+cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwotfQotCiBWaXNpYmxlUG9zaXRpb24g
RnJhbWU6OnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50
KQogewogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RS
ZXN1bHRBdFBvaW50KGZyYW1lUG9pbnQsIHRydWUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L0ZyYW1lLmggYi9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA1N2YwMmNlLi5iYTQ2MGM3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUu
aApAQCAtMjksNyArMjksNiBAQAogI2RlZmluZSBGcmFtZV9oCiAKICNpbmNsdWRlICJBbmltYXRp
b25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCiAjaW5jbHVkZSAiRWRpdEFj
dGlvbi5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgpA
QCAtMTkxLDQzICsxOTAsNiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGpzU3RhdHVzQmFyVGV4dCgp
IGNvbnN0OwogICAgIFN0cmluZyBqc0RlZmF1bHRTdGF0dXNCYXJUZXh0KCkgY29uc3Q7CiAKLS8v
ID09PSB0byBiZSBtb3ZlZCBpbnRvIEVkaXRvcgotCi1wdWJsaWM6Ci0gICAgU3RyaW5nIHNlbGVj
dGVkVGV4dCgpIGNvbnN0OyAgCi0gICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJv
b2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3cmFwRmxhZywgYm9vbCBzdGFydEluU2Vs
ZWN0aW9uKTsKLQotICAgIGNvbnN0IFNlbGVjdGlvbiYgbWFyaygpIGNvbnN0OyAvLyBNYXJrLCB0
byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCi0gICAgdm9pZCBzZXRNYXJrKGNvbnN0IFNlbGVj
dGlvbiYpOwotCi0gICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKLSAgICBTdHJp
bmcgc2VsZWN0aW9uU3RhcnRTdHlsZVByb3BlcnR5VmFsdWUoaW50IHN0eWxlUHJvcGVydHlJRCkg
Y29uc3Q7Ci0gICAgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdDsK
LSAgICB2b2lkIHJlbW92ZUVkaXRpbmdTdHlsZUZyb21Cb2R5RWxlbWVudCgpIGNvbnN0OwotICAg
IHZvaWQgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCopIGNvbnN0OwotICAgIHZv
aWQgcmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQoRWxlbWVudCopIGNvbnN0OwotCi0gICAg
SW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0OwotICAgIAotICAgIHZvaWQg
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwg
Ym9vbCBjbG9zZVR5cGluZyk7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3Qg
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBF
QWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OwotCi0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoTm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3Q7Ci0KLSAg
ICB1bnNpZ25lZCBtYXJrQWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBjYXNl
RmxhZywgdW5zaWduZWQgbGltaXQpOwotICAgIGJvb2wgbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGln
aHRlZChib29sIGZsYWcpOwotCi0gICAgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24+IHNlbGVjdGlvbkNvbXB1dGVkU3R5bGUoTm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3Q7
Ci0KLSAgICB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50Kik7Ci0gICAgdm9p
ZCB0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqKTsKLSAgICB2b2lkIHRleHREaWRDaGFu
Z2VJblRleHRGaWVsZChFbGVtZW50Kik7Ci0gICAgYm9vbCBkb1RleHRGaWVsZENvbW1hbmRGcm9t
RXZlbnQoRWxlbWVudCosIEtleWJvYXJkRXZlbnQqKTsKLSAgICB2b2lkIHRleHRXaWxsQmVEZWxl
dGVkSW5UZXh0RmllbGQoRWxlbWVudCogaW5wdXQpOwotICAgIHZvaWQgdGV4dERpZENoYW5nZUlu
VGV4dEFyZWEoRWxlbWVudCopOwotCi0gICAgRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZUZvclNlbGVj
dGlvbigpOwogICAgIAogLy8gPT09IHRvIGJlIG1vdmVkIGludG8gU2VsZWN0aW9uQ29udHJvbGxl
cgogCkBAIC0zMzgsNyArMzAwLDYgQEAgcHJpdmF0ZToKICAgICBUZXh0R3JhbnVsYXJpdHkgbV9z
ZWxlY3Rpb25HcmFudWxhcml0eTsKIAogICAgIG11dGFibGUgU2VsZWN0aW9uQ29udHJvbGxlciBt
X3NlbGVjdGlvbkNvbnRyb2xsZXI7Ci0gICAgbXV0YWJsZSBTZWxlY3Rpb24gbV9tYXJrOwogICAg
IFRpbWVyPEZyYW1lPiBtX2NhcmV0QmxpbmtUaW1lcjsKICAgICBtdXRhYmxlIEVkaXRvciBtX2Vk
aXRvcjsKICAgICBtdXRhYmxlIEV2ZW50SGFuZGxlciBtX2V2ZW50SGFuZGxlcjsKQEAgLTM1MSw3
ICszMTIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jYXJldFZpc2libGU7CiAgICAgYm9vbCBt
X2NhcmV0UGFpbnQ7CiAgICAgCi0gICAgYm9vbCBtX2hpZ2hsaWdodFRleHRNYXRjaGVzOwogICAg
IGJvb2wgbV9pblZpZXdTb3VyY2VNb2RlOwogICAgIGJvb2wgbV9uZWVkc1JlYXBwbHlTdHlsZXM7
CiAgICAgYm9vbCBtX2lzRGlzY29ubmVjdGVkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDQ2MDE4M2EuLjg3ZTE4ZmUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudC5oIgogI2lu
Y2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0
b3IuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNp
bmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgpAQCAtMzE0
LDcgKzMxNSw3IEBAIGJvb2wgUGFnZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwg
VGV4dENhc2VTZW5zaXRpdml0eSBjYXNlU2Vuc2l0aXZpdHksCiAgICAgRnJhbWUqIGZyYW1lID0g
Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIEZyYW1lKiBzdGFy
dEZyYW1lID0gZnJhbWU7CiAgICAgZG8gewotICAgICAgICBpZiAoZnJhbWUtPmZpbmRTdHJpbmco
dGFyZ2V0LCBkaXJlY3Rpb24gPT0gRmluZERpcmVjdGlvbkZvcndhcmQsIGNhc2VTZW5zaXRpdml0
eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgZmFsc2UsIHRydWUpKSB7CisgICAgICAgIGlmIChmcmFt
ZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcodGFyZ2V0LCBkaXJlY3Rpb24gPT0gRmluZERpcmVjdGlv
bkZvcndhcmQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgZmFsc2UsIHRy
dWUpKSB7CiAgICAgICAgICAgICBpZiAoZnJhbWUgIT0gc3RhcnRGcmFtZSkKICAgICAgICAgICAg
ICAgICBzdGFydEZyYW1lLT5zZWxlY3Rpb24oKS0+Y2xlYXIoKTsKICAgICAgICAgICAgIGZvY3Vz
Q29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUoZnJhbWUpOwpAQCAtMzI2LDcgKzMyNyw3IEBA
IGJvb2wgUGFnZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgVGV4dENhc2VTZW5z
aXRpdml0eSBjYXNlU2Vuc2l0aXZpdHksCiAgICAgLy8gU2VhcmNoIGNvbnRlbnRzIG9mIHN0YXJ0
RnJhbWUsIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBzZWxlY3Rpb24gdGhhdCB3ZSBkaWQgZWFy
bGllci4KICAgICAvLyBXZSBjaGVhdCBhIGJpdCBhbmQganVzdCByZXNlYXJjaCB3aXRoIHdyYXAg
b24KICAgICBpZiAoc2hvdWxkV3JhcCAmJiAhc3RhcnRGcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9u
ZSgpKSB7Ci0gICAgICAgIGJvb2wgZm91bmQgPSBzdGFydEZyYW1lLT5maW5kU3RyaW5nKHRhcmdl
dCwgZGlyZWN0aW9uID09IEZpbmREaXJlY3Rpb25Gb3J3YXJkLCBjYXNlU2Vuc2l0aXZpdHkgPT0g
VGV4dENhc2VTZW5zaXRpdmUsIHRydWUsIHRydWUpOworICAgICAgICBib29sIGZvdW5kID0gc3Rh
cnRGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcodGFyZ2V0LCBkaXJlY3Rpb24gPT0gRmluZERp
cmVjdGlvbkZvcndhcmQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgdHJ1
ZSwgdHJ1ZSk7CiAgICAgICAgIGZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUoZnJh
bWUpOwogICAgICAgICByZXR1cm4gZm91bmQ7CiAgICAgfQpAQCAtMzQzLDggKzM0NCw4IEBAIHVu
c2lnbmVkIGludCBQYWdlOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIFRleHRDYXNlU2Vuc2l0aXZpCiAKICAgICBGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsK
ICAgICBkbyB7Ci0gICAgICAgIGZyYW1lLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdo
dGVkKHNob3VsZEhpZ2hsaWdodCk7Ci0gICAgICAgIG1hdGNoZXMgKz0gZnJhbWUtPm1hcmtBbGxN
YXRjaGVzRm9yVGV4dCh0YXJnZXQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2
ZSwgKGxpbWl0ID09IDApID8gMCA6IChsaW1pdCAtIG1hdGNoZXMpKTsKKyAgICAgICAgZnJhbWUt
PmVkaXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKHNob3VsZEhpZ2hs
aWdodCk7CisgICAgICAgIG1hdGNoZXMgKz0gZnJhbWUtPmVkaXRvcigpLT5tYXJrQWxsTWF0Y2hl
c0ZvclRleHQodGFyZ2V0LCBjYXNlU2Vuc2l0aXZpdHkgPT0gVGV4dENhc2VTZW5zaXRpdmUsIChs
aW1pdCA9PSAwKSA/IDAgOiAobGltaXQgLSBtYXRjaGVzKSk7CiAgICAgICAgIGZyYW1lID0gaW5j
cmVtZW50RnJhbWUoZnJhbWUsIHRydWUsIGZhbHNlKTsKICAgICB9IHdoaWxlIChmcmFtZSk7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwIGIvV2ViQ29yZS9wYWdl
L2d0ay9GcmFtZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYWI1YTAu
LjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzNyArMCwwIEBACi0vKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi19CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tIGIvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1h
Yy5tbQppbmRleCBiNTY2YWJiLi44ZjE2ZTNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvbWFj
L0ZyYW1lTWFjLm1tCisrKyBiL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KQEAgLTM2Nyw3
ICszNjcsNyBAQCBOU0ltYWdlKiBGcmFtZTo6bm9kZUltYWdlKE5vZGUqIG5vZGUpIGNvbnN0CiBO
U0RpY3Rpb25hcnkqIEZyYW1lOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgY29u
c3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
c3R5bGVGb3JTZWxlY3Rpb25TdGFydChub2RlVG9SZW1vdmUpOworICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IGVkaXRvcigpLT5zdHlsZUZvclNlbGVjdGlvblN0YXJ0KG5vZGVUb1JlbW92ZSk7CiAg
ICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtNTI3LDEzICs1MjcsNiBA
QCBOU011dGFibGVEaWN0aW9uYXJ5KiBGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0RpY3Rpb25hcnko
KQogfQogI2VuZGlmCiAKLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9u
KCkgCi17Ci0gICAgaWYgKCFzZWxlY3Rpb24oKS0+aXNSYW5nZSgpKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiBzZWxlY3Rpb25JbWFnZSgpOwotfQotCiB2b2lkIEZyYW1lOjpzZXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBkZWxldGUgbV91
c2VyU3R5bGVTaGVldExvYWRlcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0
LmNwcCBiL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAppbmRleCAzODhiZjY2Li5jYzAzNWJh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAKKysrIGIvV2ViQ29yZS9w
YWdlL3F0L0ZyYW1lUXQuY3BwCkBAIC0yOCwxMSArMjgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkgCi17Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KIHZvaWQgRnJhbWU6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24o
Y29uc3QgS1VSTCYgdXJsKQogewogICAgIGRlbGV0ZSBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9EcmFnSW1hZ2UuY3BwCmluZGV4IGFkZjlhNTcuLjg5MGYxNjMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJ
bWFnZS5jcHAKQEAgLTI1LDggKzI1LDkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkRyYWdJbWFnZS5oIgotI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRl
ICJEcmFnQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY1LDcgKzY2LDcgQEAgRHJhZ0ltYWdlUmVm
IGZpdERyYWdJbWFnZVRvTWF4U2l6ZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUm
IHNyY1NpemUsIGMKICAgICAKIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JTZWxlY3Rp
b24oRnJhbWUqIGZyYW1lKQogewotICAgIERyYWdJbWFnZVJlZiBpbWFnZSA9IGZyYW1lLT5kcmFn
SW1hZ2VGb3JTZWxlY3Rpb24oKTsKKyAgICBEcmFnSW1hZ2VSZWYgaW1hZ2UgPSBmcmFtZS0+ZWRp
dG9yKCktPmRyYWdJbWFnZUZvclNlbGVjdGlvbigpOwogICAgIGlmIChpbWFnZSkKICAgICAgICAg
ZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKGltYWdlLCBEcmFnQ29udHJvbGxlcjo6RHJhZ0lt
YWdlQWxwaGEpOwogICAgIHJldHVybiBpbWFnZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEd0ay5jcHAKaW5kZXggMTVhN2U2NC4uNjQ0NWU1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEd0ay5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkNTdHJpbmcuaCIK
ICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCkBAIC0xMDQsNyArMTA1LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0
ZSwKIHsKICAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IG1faGVscGVyLT5nZXRDbGlwYm9h
cmQoZnJhbWUpOwogI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsMTAsMCkKLSAgICBnY2hhciogdGV4
dCA9IGdfc3RyZHVwKGZyYW1lLT5zZWxlY3RlZFRleHQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBn
Y2hhciogdGV4dCA9IGdfc3RyZHVwKGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRm
OCgpLmRhdGEoKSk7CiAgICAgZ2NoYXIqIG1hcmt1cCA9IGdfc3RyZHVwKGNyZWF0ZU1hcmt1cChz
ZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKS51dGY4KCkuZGF0YSgpKTsK
ICAgICBQYXN0ZWJvYXJkU2VsZWN0aW9uRGF0YSogZGF0YSA9IG5ldyBQYXN0ZWJvYXJkU2VsZWN0
aW9uRGF0YSh0ZXh0LCBtYXJrdXApOwogCkBAIC0xMTQsNyArMTE1LDcgQEAgdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENv
cHlPckRlbGV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkX2dl
dF9jb250ZW50c19jYiwgY2xpcGJvYXJkX2NsZWFyX2NvbnRlbnRzX2NiLCBkYXRhKTsKICAgICBn
dGtfdGFyZ2V0X3RhYmxlX2ZyZWUodGFyZ2V0cywgbl90YXJnZXRzKTsKICNlbHNlCi0gICAgZ3Rr
X2NsaXBib2FyZF9zZXRfdGV4dChjbGlwYm9hcmQsIGZyYW1lLT5zZWxlY3RlZFRleHQoKS51dGY4
KCkuZGF0YSgpLCBmcmFtZS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpLmxlbmd0aCgpKTsKKyAgICBn
dGtfY2xpcGJvYXJkX3NldF90ZXh0KGNsaXBib2FyZCwgZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rl
ZFRleHQoKS51dGY4KCkuZGF0YSgpLCBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLnV0
ZjgoKS5sZW5ndGgoKSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9DbGlwYm9hcmRRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNw
cAppbmRleCAxYmRlMTBiLi43M2ZiNWJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0
L0NsaXBib2FyZFF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNw
cApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAi
Q1NTSGVscGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIK
ICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKQEAgLTI4NCw3ICsyODUsNyBAQCB2b2lkIENsaXBib2FyZFF0Ojp3cml0ZVJhbmdl
KFJhbmdlKiByYW5nZSwgRnJhbWUqIGZyYW1lKQogICAgIAogICAgIGlmICghbV93cml0YWJsZURh
dGEpCiAgICAgICAgIG1fd3JpdGFibGVEYXRhID0gbmV3IFFNaW1lRGF0YTsKLSAgICBRU3RyaW5n
IHRleHQgPSBmcmFtZS0+c2VsZWN0ZWRUZXh0KCk7CisgICAgUVN0cmluZyB0ZXh0ID0gZnJhbWUt
PmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsKICAgICB0ZXh0LnJlcGxhY2UoUUNoYXIoMHhhMCks
IFFMYXRpbjFDaGFyKCcgJykpOwogICAgIG1fd3JpdGFibGVEYXRhLT5zZXRUZXh0KHRleHQpOwog
ICAgIG1fd3JpdGFibGVEYXRhLT5zZXRIdG1sKGNyZWF0ZU1hcmt1cChyYW5nZSwgMCwgQW5ub3Rh
dGVGb3JJbnRlcmNoYW5nZSkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0
ZWJvYXJkUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCmluZGV4
IGI1MzVhNzQuLjNiMjY3YmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVi
b2FyZFF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAKQEAg
LTYxLDcgKzYxLDcgQEAgUGFzdGVib2FyZCogUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQo
KQogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwg
Ym9vbCwgRnJhbWUqIGZyYW1lKQogewogICAgIFFNaW1lRGF0YSogbWQgPSBuZXcgUU1pbWVEYXRh
OwotICAgIFFTdHJpbmcgdGV4dCA9IGZyYW1lLT5zZWxlY3RlZFRleHQoKTsKKyAgICBRU3RyaW5n
IHRleHQgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpOwogICAgIHRleHQucmVwbGFj
ZShRQ2hhcigweGEwKSwgUUxhdGluMUNoYXIoJyAnKSk7CiAgICAgbWQtPnNldFRleHQodGV4dCk7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCmluZGV4IDdhODhjM2EuLjI5MDZl
YTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcApAQCAtNzM1LDcgKzczNSw3
IEBAIHZvaWQgQ2xpcGJvYXJkV2luOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBG
cmFtZSogZnJhbWUpCiAgICAgaWYgKG1lZGl1bS5oR2xvYmFsICYmIEZBSUxFRChtX3dyaXRhYmxl
RGF0YU9iamVjdC0+U2V0RGF0YShodG1sRm9ybWF0KCksICZtZWRpdW0sIFRSVUUpKSkKICAgICAg
ICAgOjpHbG9iYWxGcmVlKG1lZGl1bS5oR2xvYmFsKTsKIAotICAgIFN0cmluZyBzdHIgPSBmcmFt
ZS0+c2VsZWN0ZWRUZXh0KCk7CisgICAgU3RyaW5nIHN0ciA9IGZyYW1lLT5lZGl0b3IoKS0+c2Vs
ZWN0ZWRUZXh0KCk7CiAgICAgcmVwbGFjZU5ld2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVz
KHN0cik7CiAgICAgcmVwbGFjZU5CU1BXaXRoU3BhY2Uoc3RyKTsKICAgICBtZWRpdW0uaEdsb2Jh
bCA9IGNyZWF0ZUdsb2JhbERhdGEoc3RyKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1Bhc3RlYm9hcmRXaW4uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHAKaW5kZXggNTA2Y2M3Yi4uZjIxYWE0ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVi
b2FyZFdpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRp
ZXNXaW4uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21l
bnQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC0xMjUsNyArMTI2LDcg
QEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwg
Ym9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwKICAgICB9CiAgICAgCiAgICAgLy8gUHV0IHBsYWlu
IHN0cmluZyBvbiB0aGUgcGFzdGVib2FyZC4gQ0ZfVU5JQ09ERVRFWFQgY292ZXJzIENGX1RFWFQg
YXMgd2VsbAotICAgIFN0cmluZyBzdHIgPSBmcmFtZS0+c2VsZWN0ZWRUZXh0KCk7CisgICAgU3Ry
aW5nIHN0ciA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCk7CiAgICAgcmVwbGFjZU5l
d2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVzKHN0cik7CiAgICAgcmVwbGFjZU5CU1BXaXRo
U3BhY2Uoc3RyKTsKICAgICBpZiAoOjpPcGVuQ2xpcGJvYXJkKG1fb3duZXIpKSB7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Bhc3RlYm9hcmRXeC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL3d4L1Bhc3RlYm9hcmRXeC5jcHAKaW5kZXggYzUwZGY2Ny4uZTVhNzc0ZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS93eC9QYXN0ZWJvYXJkV3guY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vd3gvUGFzdGVib2FyZFd4LmNwcApAQCAtNTQsNyArNTQsNyBAQCB2b2lkIFBhc3RlYm9h
cmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29w
eU9yRGVsZXRlLAogewogICAgIGlmICh3eFRoZUNsaXBib2FyZC0+T3BlbigpKQogICAgIHsKLSAg
ICAgICAgU3RyaW5nIHRleHQgPSBmcmFtZS0+c2VsZWN0ZWRUZXh0KCk7CisgICAgICAgIFN0cmlu
ZyB0ZXh0ID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsKICAgICAgICAgdGV4dC5y
ZXBsYWNlKCdcXCcsIGZyYW1lLT5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwogICAgICAg
ICAKICAgICAgICAgd3hUaGVDbGlwYm9hcmQtPlNldERhdGEoIG5ldyB3eFRleHREYXRhT2JqZWN0
KHRleHQpICk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGNiZWUxMTcuLjVj
NjNkMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC03MTYsNyArNzE2LDcg
QEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRl
eHQqIHB0LCBpbnQgdHgsIGludCB0eSwgRG8KICAgICBvYmplY3QoKS0+ZG9jdW1lbnQoKS0+c2V0
UmVuZGVyZWRSZWN0Rm9yTWFya2VyKG9iamVjdCgpLT5ub2RlKCksIG1hcmtlciwgbWFya2VyUmVj
dCk7CiAgICAgIAogICAgIC8vIE9wdGlvbmFsbHkgaGlnaGxpZ2h0IHRoZSB0ZXh0Ci0gICAgaWYg
KG9iamVjdCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkKCkpIHsKKyAgICBpZiAob2JqZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRv
cigpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkpIHsKICAgICAgICAgQ29sb3Ig
Y29sb3IgPSB0aGVtZSgpLT5wbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpOwogICAg
ICAgICBwdC0+c2F2ZSgpOwogICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQocHQsIGNvbG9y
LCBjb2xvciwgMCk7ICAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCmluZGV4IGY4NjA1MjQuLjE4
NzVmZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVs
dGlMaW5lLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZS5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZTo6c3VidHJlZUhhc0NoYW5nZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgZnJhbWUtPnRleHREaWRDaGFu
Z2VJblRleHRBcmVhKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT50ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSgpKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmxheW91
dCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcAppbmRleCAzNTFjNWVlLi42YWQxZDNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTE3OCwxMiArMTc4LDEyIEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCiAKICAg
ICBpZiAoIXdhc0VkaXRlZCAmJiBpbnB1dC0+Zm9jdXNlZCgpKSB7CiAgICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPnRleHRG
aWVsZERpZEJlZ2luRWRpdGluZyhpbnB1dCk7CisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkt
PnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhpbnB1dCk7CiAgICAgfQogCiAgICAgaWYgKGlucHV0
LT5mb2N1c2VkKCkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZy
YW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKGlucHV0
KTsKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dERpZENoYW5nZUluVGV4dEZpZWxk
KGlucHV0KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXgg
Y2U4MjBmOC4uYTQ2MDQ2MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTIx
NjUsNyArMjE2NSw3IEBAIHZvaWQgd2Via2l0X3dlYl92aWV3X3NldF9oaWdobGlnaHRfdGV4dF9t
YXRjaGVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdib29sZWFuCiB7CiAgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwogCi0gICAgY29yZSh3ZWJWaWV3
KS0+bWFpbkZyYW1lKCktPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoc2hvdWxk
SGlnaGxpZ2h0KTsKKyAgICBjb3JlKHdlYlZpZXcpLT5tYWluRnJhbWUoKS0+ZWRpdG9yKCktPnNl
dE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoc2hvdWxkSGlnaGxpZ2h0KTsKIH0KIAog
LyoqCkBAIC0yMzQ2LDcgKzIzNDYsNyBAQCBnY2hhciogd2Via2l0X3dlYl92aWV3X2dldF9zZWxl
Y3RlZF90ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
LSAgICByZXR1cm4gZ19zdHJkdXAoZnJhbWUtPnNlbGVjdGVkVGV4dCgpLnV0ZjgoKS5kYXRhKCkp
OworICAgIHJldHVybiBnX3N0cmR1cChmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLnV0
ZjgoKS5kYXRhKCkpOwogfQogCiAvKioKQEAgLTI0MTgsMTIgKzI0MTgsMTEgQEAgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfc2V0X2VkaXRhYmxlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdib29sZWFu
IGZsYWcpCiAgICAgcHJpdi0+ZWRpdGFibGUgPSBmbGFnOwogCiAgICAgaWYgKGZsYWcpIHsKLSAg
ICAgICAgZnJhbWUtPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOworICAgICAgICBm
cmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOwogICAgICAg
ICAvLyBUT0RPOiBJZiB0aGUgV2ViS2l0V2ViVmlldyBpcyBtYWRlIGVkaXRhYmxlIGFuZCB0aGUg
c2VsZWN0aW9uIGlzIGVtcHR5LCBzZXQgaXQgdG8gc29tZXRoaW5nLgogICAgICAgICAvL2lmICgh
d2Via2l0X3dlYl92aWV3X2dldF9zZWxlY3RlZF9kb21fcmFuZ2Uod2ViVmlldykpCiAgICAgICAg
IC8vICAgIG1haW5GcmFtZS0+c2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgZnJhbWUtPnJlbW92ZUVkaXRpbmdTdHlsZUZyb21Cb2R5RWxlbWVudCgpOworICAgIH0K
ICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJlZGl0YWJsZSIpOwogfQog
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggODc5YTljYy4uNThjZTVmZiAxMDA2NDQKLS0tIGEv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQpAQCAtNTcsNiArNTcsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9ET01JbXBsZW1l
bnRhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2NMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRG9jdW1lbnRGcmFnbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CkBAIC01NTQsNyArNTU1LDcgQEAgc3RhdGlj
IGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIp
CiAKIC0gKE5TU3RyaW5nICopX3NlbGVjdGVkU3RyaW5nCiB7Ci0gICAgcmV0dXJuIF9wcml2YXRl
LT5jb3JlRnJhbWUtPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoX3ByaXZhdGUtPmNv
cmVGcmFtZS0+c2VsZWN0ZWRUZXh0KCkpOworICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKF9wcml2YXRlLT5jb3JlRnJhbWUtPmVk
aXRvcigpLT5zZWxlY3RlZFRleHQoKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopX3N0cmluZ0ZvclJh
bmdlOihET01SYW5nZSAqKXJhbmdlCkBAIC02NzIsNyArNjczLDcgQEAgc3RhdGljIGlubGluZSBX
ZWJEYXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAKIC0gKE5T
UmVjdClfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgIHJldHVy
biBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5maXJzdFJlY3RGb3JSYW5nZShbcmFuZ2UgX3JhbmdlXSk7
CisgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJh
bmdlKFtyYW5nZSBfcmFuZ2VdKTsKIH0KIAogLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2li
bGU6KERPTVJhbmdlICopcmFuZ2UKQEAgLTc5OCw3ICs3OTksNyBAQCBzdGF0aWMgaW5saW5lIFdl
YkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIAogLSAoRE9N
UmFuZ2UgKilfbWFya0RPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtET01SYW5nZSBfd3JhcFJhbmdl
Ol9wcml2YXRlLT5jb3JlRnJhbWUtPm1hcmsoKS50b1JhbmdlKCkuZ2V0KCldOworICAgIHJldHVy
biBbRE9NUmFuZ2UgX3dyYXBSYW5nZTpfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS0+bWFy
aygpLnRvUmFuZ2UoKS5nZXQoKV07CiB9CiAKIC8vIEdpdmVuIHByb3Bvc2VkUmFuZ2UsIHJldHVy
bnMgYW4gZXh0ZW5kZWQgcmFuZ2UgdGhhdCBpbmNsdWRlcyBhZGphY2VudCB3aGl0ZXNwYWNlIHRo
YXQgc2hvdWxkCkBAIC0xMDAzLDcgKzEwMDQsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3Vy
Y2UgKmRhdGFTb3VyY2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBpZiAoIV9wcml2
YXRlLT5jb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5jb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoW3N0eWxlIF9DU1NTdHlsZURlY2xhcmF0aW9uXSwg
dW5kb0FjdGlvbik7CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbXB1dGVB
bmRTZXRUeXBpbmdTdHlsZShbc3R5bGUgX0NTU1N0eWxlRGVjbGFyYXRpb25dLCB1bmRvQWN0aW9u
KTsKIH0KIAogLSAodm9pZClfZHJhZ1NvdXJjZU1vdmVkVG86KE5TUG9pbnQpd2luZG93TG9jCmRp
ZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tIGIv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQppbmRleCA2MDRhMTdh
Li44OWZhMjY0IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24u
bW0KQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxSZXNwb25zZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVu
dExvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUv
RnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRnJhbWVMb2FkZXJDbGllbnQuaD4KQEAgLTIwMiw3ICsyMDMsNyBAQCBzdGF0aWMgTlNBcnJh
eSAqY29uY2F0ZW5hdGVBcnJheXMoTlNBcnJheSAqZmlyc3QsIE5TQXJyYXkgKnNlY29uZCkKICAg
ICAgICAgCiAgICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbZnJhbWUgd2ViVmlld107CiAgICAg
ICAgIGlmIChbd2ViVmlldyBpc0VkaXRhYmxlXSkKLSAgICAgICAgICAgIGNvcmUoZnJhbWUpLT5h
cHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGNvcmUoZnJhbWUp
LT5lZGl0b3IoKS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggNjZmYjRlNy4uMDdlZjgyMCAxMDA2NDQK
LS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlldy5tbQpAQCAtNTc2Miw3ICs1NzYyLDcgQEAgc3RhdGljIHZvaWQg
ZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21w
b3NpdGlvblVuZGUKICAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKICAgICAgICAgcmV0dXJuIE5P
OwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVy
biBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5maW5kU3RyaW5nKHN0cmluZywgZm9yd2FyZCwgY2Fz
ZUZsYWcsIHdyYXBGbGFnLCBzdGFydEluU2VsZWN0aW9uKTsKKyAgICByZXR1cm4gY29yZUZyYW1l
ICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoc3RyaW5nLCBmb3J3YXJkLCBjYXNl
RmxhZywgd3JhcEZsYWcsIHN0YXJ0SW5TZWxlY3Rpb24pOwogfQogCiBAZW5kCkBAIC01Nzg3LDcg
KzU3ODcsNyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0ZWRTdHJp
bmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZQogICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gY29yZUZyYW1lLT5tYXJrQWxsTWF0Y2hlc0ZvclRleHQoc3RyaW5n
LCBjYXNlRmxhZywgbGltaXQpOworICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLT5tYXJr
QWxsTWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBjYXNlRmxhZywgbGltaXQpOwogfQogCiAtICh2b2lk
KXNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQ6KEJPT0wpbmV3VmFsdWUKQEAgLTU3
OTUsMTMgKzU3OTUsMTMgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1
dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGUKICAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGNvcmVGcmFtZS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGln
aHRlZChuZXdWYWx1ZSk7CisgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZChuZXdWYWx1ZSk7CiB9CiAKIC0gKEJPT0wpbWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZAogewogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5tYXJrZWRUZXh0
TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJh
bWUtPmVkaXRvcigpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7CiB9CiAKIC0g
KHZvaWQpdW5tYXJrQWxsVGV4dE1hdGNoZXMKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggYmQyN2Y3
Yy4uZWI4ZmQzMyAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysr
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTQxMjcsMTIgKzQxMjcsMTEgQEAg
c3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0Zyb21KU1ZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZVB0ciBqc1YKICAgICAgICAgRnJhbWUqIG1haW5GcmFtZSA9IGNvcmUo
W3NlbGYgbWFpbkZyYW1lXSk7CiAgICAgICAgIGlmIChtYWluRnJhbWUpIHsKICAgICAgICAgICAg
IGlmIChmbGFnKSB7Ci0gICAgICAgICAgICAgICAgbWFpbkZyYW1lLT5hcHBseUVkaXRpbmdTdHls
ZVRvQm9keUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBtYWluRnJhbWUtPmVkaXRvcigpLT5h
cHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICAvLyBJZiB0
aGUgV2ViVmlldyBpcyBtYWRlIGVkaXRhYmxlIGFuZCB0aGUgc2VsZWN0aW9uIGlzIGVtcHR5LCBz
ZXQgaXQgdG8gc29tZXRoaW5nLgogICAgICAgICAgICAgICAgIGlmICghW3NlbGYgc2VsZWN0ZWRE
T01SYW5nZV0pCiAgICAgICAgICAgICAgICAgICAgIG1haW5GcmFtZS0+c2V0U2VsZWN0aW9uRnJv
bU5vbmUoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1haW5GcmFtZS0+
cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUJvZHlFbGVtZW50KCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBi
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDUyZDliNjYuLmVlOTcxZmUgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuY3BwCkBAIC0xNjUxLDcgKzE2NTEsNyBAQCBib29sIFFXZWJQYWdlOjphY2NlcHROYXZp
Z2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lLCBjb25zdCBRV2ViTmV0d29ya1JlcXVlcwog
Ki8KIFFTdHJpbmcgUVdlYlBhZ2U6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGQtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+c2VsZWN0
ZWRUZXh0KCk7CisgICAgcmV0dXJuIGQtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2Vk
T3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpOwogfQogCiAvKiEKQEAgLTIw
MTcsMTEgKzIwMTcsOSBAQCB2b2lkIFFXZWJQYWdlOjpzZXRDb250ZW50RWRpdGFibGUoYm9vbCBl
ZGl0YWJsZSkKICAgICAgICAgaWYgKGQtPm1haW5GcmFtZSkgewogICAgICAgICAgICAgV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lID0gZC0+bWFpbkZyYW1lLT5kLT5mcmFtZTsKICAgICAgICAgICAgIGlm
IChlZGl0YWJsZSkgewotICAgICAgICAgICAgICAgIGZyYW1lLT5hcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRp
dGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYWMg
cG9ydCBjYWxscyB0aGlzIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGVkRE9NUmFuZ2UKICAgICAgICAg
ICAgICAgICAvL2ZyYW1lLT5zZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBmcmFtZS0+cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUJvZHlF
bGVtZW50KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAgYi9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcAppbmRleCBiZTdiNDgzLi4y
OGYxMDM1IDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRN
ZW51Q2xpZW50LmNwcAorKysgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRN
ZW51Q2xpZW50LmNwcApAQCAtMzMsNiArMzMsNyBAQAogCiAjcHJhZ21hIHdhcm5pbmcocHVzaCwg
MCkKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
ZGl0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CkBAIC0x
NDksNyArMTUwLDcgQEAgdm9pZCBXZWJDb250ZXh0TWVudUNsaWVudDo6ZG93bmxvYWRVUkwoY29u
c3QgS1VSTCYgdXJsKQogCiB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50OjpzZWFyY2hXaXRoR29v
Z2xlKGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKLSAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gZnJh
bWUtPnNlbGVjdGVkVGV4dCgpOworICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBmcmFtZS0+ZWRp
dG9yKCktPnNlbGVjdGVkVGV4dCgpOwogICAgIHNlYXJjaFN0cmluZy5zdHJpcFdoaXRlU3BhY2Uo
KTsKICAgICBTdHJpbmcgZW5jb2RlZCA9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMoc2Vh
cmNoU3RyaW5nKTsKICAgICBlbmNvZGVkLnJlcGxhY2UoIiUyMCIsICIrIik7CmRpZmYgLS1naXQg
YS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwIGIvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAppbmRleCBl
M2M5ZDExLi40MzAyZGMzIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCisrKyBi
L1dlYktpdC93aW4vV2ViVmlldy5jcHAKQEAgLTMxMDYsNyArMzEwNiw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c2VsZWN0ZWRUZXh0KAogICAgIGlmICghZm9jdXNlZEZy
YW1lKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgU3RyaW5nIGZyYW1lU2VsZWN0ZWRU
ZXh0ID0gZm9jdXNlZEZyYW1lLT5zZWxlY3RlZFRleHQoKTsKKyAgICBTdHJpbmcgZnJhbWVTZWxl
Y3RlZFRleHQgPSBmb2N1c2VkRnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsKICAgICAq
dGV4dCA9IFN5c0FsbG9jU3RyaW5nTGVuKGZyYW1lU2VsZWN0ZWRUZXh0LmNoYXJhY3RlcnMoKSwg
ZnJhbWVTZWxlY3RlZFRleHQubGVuZ3RoKCkpOwogICAgIGlmICghKnRleHQgJiYgZnJhbWVTZWxl
Y3RlZFRleHQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOwotLSAKMS42
LjAuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26861</attachid>
            <date>2009-01-20 04:42:39 -0800</date>
            <delta_ts>2010-06-10 17:04:26 -0700</delta_ts>
            <desc>Carry out the move.</desc>
            <filename>0006-Move-various-methods-from-Frame-to-SelectionControll.patch</filename>
            <type>text/plain</type>
            <size>82563</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">RnJvbSA3YzI3YzM2YjYxZTdiYzVkMDNiODgyMTYxM2M4MWI1ZDg5ZDcwZDJhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CkRhdGU6IEZyaSwgMjYgRGVjIDIwMDggMTc6MjM6MDggKzAxMDAKU3ViamVjdDog
W1BBVENIXSBNb3ZlIHZhcmlvdXMgbWV0aG9kcyBmcm9tIEZyYW1lIHRvIFNlbGVjdGlvbkNvbnRy
b2xsZXIKClNjaGVkdWxlZCBtb3ZlcyBub3QgY2FycmllZCBvdXQ6CiAgICBGcmFtZTo6aXNDb250
ZW50RWRpdGFibGUgYXMgU2VsZWN0aW9uQ29udHJvbGxlciBhbHJlYWR5CiAgICBoYXMgc3VjaCBh
IG1ldGhvZC4gVGhlIGRhbmdlciBpcyBub3cgdGhhdCB0aGUgbW92ZWQgY29kZQogICAgaXMgY2Fs
bGluZyB0aGUgd3JvbmcgaXNDb250ZW50RWRpdGFibGUKLS0tCiBXZWJDb3JlL1dlYkNvcmUuYmFz
ZS5leHAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICstCiBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL2RvbS9FbGVtZW50
LmNwcCAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICstCiBXZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgICAgfCAgICAyICstCiBXZWJDb3JlL2VkaXRpbmcvRWRp
dENvbW1hbmQuY3BwICAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcCAgICAgICAgICAgICAgICAgICAgfCAgIDQyICsrLS0KIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3JDb21tYW5kLmNwcCAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvZWRpdGluZy9J
bnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcCAgICB8ICAgIDMgKy0KIFdlYkNvcmUvZWRpdGluZy9J
bnNlcnRUZXh0Q29tbWFuZC5jcHAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvZWRpdGluZy9S
ZW1vdmVGb3JtYXRDb21tYW5kLmNwcCAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgICB8ICAgIDIgKy0KIFdlYkNvcmUvZWRpdGluZy9T
ZWxlY3Rpb25Db250cm9sbGVyLmNwcCAgICAgICB8ICAzODcgKysrKysrKysrKysrKysrKysrKysr
KystLQogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaCAgICAgICAgIHwgICA0
NCArKysKIFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCAgICAgICAgICAgICB8ICAg
IDYgKy0KIFdlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSB8ICAg
MjUgKysKIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCAgICAgICAgICAgICB8ICAg
IDIgKy0KIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCAgICAgICAgICB8ICAg
IDMgKy0KIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCAgICAgICAgICAgICAgICB8ICAg
IDIgKy0KIFdlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwICAgICAgICB8ICAg
IDIgKy0KIFdlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgICAgICAgICAgICAgICB8ICAg
IDQgKy0KIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwICAgICAgICAgICAgICAgICB8ICAg
MzEgKy0KIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAgICAgICAgICAgICAgICAgICAgICAgICB8ICAz
MzUgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogV2ViQ29yZS9wYWdlL0ZyYW1lLmggICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICA0OCAtLS0KIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwICAg
ICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KIFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0g
ICAgICAgICAgICAgICAgICB8ICAgMjYgKy0tCiBXZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9h
cmRNYWMubW0gICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAgICAgICAgICAgICAgfCAgICA0ICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5jcHAgICAgICAgfCAgICA5ICstCiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0gICAgICAgICAgICAgICAgfCAgIDEwICstCiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJl
cHJlc2VudGF0aW9uLm1tICAgfCAgICAyICstCiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0gICAgICAgICAgICAgfCAgIDE0ICstCiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bSAgICAgICAgICAgICAgICAgfCAgICAyICstCiAzMyBmaWxlcyBjaGFuZ2VkLCA1MjUgaW5zZXJ0
aW9ucygrKSwgNTE1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCAxYTQ2YjNhLi5lOGU5ODI3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLmJhc2UuZXhwCkBAIC00MDQsNiArNDA0LDggQEAgX19aTjdXZWJDb3JlMTlTZWxlY3Rpb25D
b250cm9sbGVyNWNsZWFyRXYKIF9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjZtb2Rp
ZnlFTlMwXzExRUFsdGVyYXRpb25FTlMwXzEwRURpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0
eUViCiBfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXI5c2VsZWN0QWxsRXYKIF9fWk43
V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlckMxRVBOU181RnJhbWVFYgorX19aTjdXZWJDb3Jl
MTlTZWxlY3Rpb25Db250cm9sbGVyMjBzZXRTZWxlY3Rpb25Gcm9tTm9uZUV2CitfX1pON1dlYkNv
cmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxNXJldmVhbFNlbGVjdGlvbkVSS05TXzExUmVuZGVyTGF5
ZXIxNVNjcm9sbEFsaWdubWVudEUKIF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlcjVm
bHVzaEV2CiBfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXI2ZGVjb2RlRVBLY20KIF9f
Wk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlckMxRVJLTlNfNlN0cmluZ0VSS05TXzEyVGV4
dEVuY29kaW5nRQpAQCAtNDc3LDcgKzQ3OSw2IEBAIF9fWk43V2ViQ29yZTVGcmFtZTEzc2V0Wm9v
bUZhY3RvckVmYgogX19aTjdXZWJDb3JlNUZyYW1lMTRmcmFtZUZvcldpZGdldEVQS05TXzZXaWRn
ZXRFCiBfX1pON1dlYkNvcmU1RnJhbWUxN3NldElzRGlzY29ubmVjdGVkRWIKIF9fWk43V2ViQ29y
ZTVGcmFtZTE5c2V0SW5WaWV3U291cmNlTW9kZUViCi1fX1pON1dlYkNvcmU1RnJhbWUyMHNldFNl
bGVjdGlvbkZyb21Ob25lRXYKIF9fWk43V2ViQ29yZTVGcmFtZTIzdmlzaWJsZVBvc2l0aW9uRm9y
UG9pbnRFUktOU184SW50UG9pbnRFCiBfX1pON1dlYkNvcmU1RnJhbWUyNHNldEV4Y2x1ZGVGcm9t
VGV4dFNlYXJjaEViCiBfX1pON1dlYkNvcmU1RnJhbWUyNW1hdGNoTGFiZWxzQWdhaW5zdEVsZW1l
bnRFUDdOU0FycmF5UE5TXzdFbGVtZW50RQpAQCAtNzkxLDYgKzc5MiwxMSBAQCBfX1pOSzdXZWJD
b3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlM3VybEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJl
cXVlc3RCYXNlN2lzRW1wdHlFdgogX19aTks3V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjE3
aXNJblBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjE4
aXNGb2N1c2VkQW5kQWN0aXZlRXYKK19fWk5LN1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIx
NXNlbGVjdGlvbkJvdW5kc0ViCitfX1pOSzdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMTF0
eXBpbmdTdHlsZUV2CitfX1pOSzdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMThzZWxlY3Rp
b25UZXh0UmVjdHNFUk4zV1RGNlZlY3RvcklOU185RmxvYXRSZWN0RUxtMEVFRWIKK19fWk5LN1dl
YkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIyMHNlbGVjdGlvbkdyYW51bGFyaXR5RXYKK19fWk5L
N1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxMWN1cnJlbnRGb3JtRXYKIF9fWk5LN1dlYkNv
cmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMTRodHRwU3RhdHVzQ29kZUV2CiBfX1pOSzdXZWJDb3Jl
MjBSZXNvdXJjZVJlc3BvbnNlQmFzZTE2aHR0cEhlYWRlckZpZWxkc0V2CiBfX1pOSzdXZWJDb3Jl
MjBSZXNvdXJjZVJlc3BvbnNlQmFzZTE2dGV4dEVuY29kaW5nTmFtZUV2CkBAIC04MTAsMTkgKzgx
NiwxMyBAQCBfX1pOSzdXZWJDb3JlNE5vZGU5bm9kZUluZGV4RXYKIF9fWk5LN1dlYkNvcmU0UGFn
ZTEwcGx1Z2luRGF0YUV2CiBfX1pOSzdXZWJDb3JlNFBhZ2UzNGluTG93UXVhbGl0eUltYWdlSW50
ZXJwb2xhdGlvbk1vZGVFdgogX19aTks3V2ViQ29yZTRQYWdlOWdyb3VwTmFtZUV2Ci1fX1pOSzdX
ZWJDb3JlNUZyYW1lMTFjdXJyZW50Rm9ybUV2Ci1fX1pOSzdXZWJDb3JlNUZyYW1lMTF0eXBpbmdT
dHlsZUV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTJldmVudEhhbmRsZXJFdgogX19aTks3V2ViQ29y
ZTVGcmFtZTEyb3duZXJFbGVtZW50RXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUxM293bmVyUmVuZGVy
ZXJFdgogX19aTks3V2ViQ29yZTVGcmFtZTE0c2VsZWN0aW9uSW1hZ2VFYgogX19aTks3V2ViQ29y
ZTVGcmFtZTE1Y29udGVudFJlbmRlcmVyRXYKLV9fWk5LN1dlYkNvcmU1RnJhbWUxNXJldmVhbFNl
bGVjdGlvbkVSS05TXzExUmVuZGVyTGF5ZXIxNVNjcm9sbEFsaWdubWVudEUKLV9fWk5LN1dlYkNv
cmU1RnJhbWUxNXNlbGVjdGlvbkJvdW5kc0ViCiBfX1pOSzdXZWJDb3JlNUZyYW1lMTZpblZpZXdT
b3VyY2VNb2RlRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUxOGRvY3VtZW50VHlwZVN0cmluZ0V2Ci1f
X1pOSzdXZWJDb3JlNUZyYW1lMThzZWxlY3Rpb25UZXh0UmVjdHNFUk4zV1RGNlZlY3RvcklOU185
RmxvYXRSZWN0RUxtMEVFRWIKLV9fWk5LN1dlYkNvcmU1RnJhbWUyMHNlbGVjdGlvbkdyYW51bGFy
aXR5RXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUzMWZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3Rh
cnRFdgogX19aTks3V2ViQ29yZTVGcmFtZTM3YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rp
b25TdGFydEV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lNHBhZ2VFdgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGZmZDIz
MGUuLjU1ZjRkZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQwNzksNyArNDA3OSw3IEBAIHZvaWQgRG9jdW1l
bnQ6OnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKGJvb2wgdXNlc1NlY3VyZUtl
eWJvYXJkKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIG1fdXNlU2VjdXJlS2V5Ym9h
cmRFbnRyeVdoZW5BY3RpdmUgPSB1c2VzU2VjdXJlS2V5Ym9hcmQ7Ci0gICAgbV9mcmFtZS0+dXBk
YXRlU2VjdXJlS2V5Ym9hcmRFbnRyeUlmQWN0aXZlKCk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnVwZGF0ZVNlY3VyZUtleWJvYXJkRW50cnlJZkFjdGl2ZSgpOwogfQogCiBib29sIERvY3Vt
ZW50Ojp1c2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZSgpIGNvbnN0CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4
IDRmMWVhZjQuLjE4N2Q4MDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMDk5LDkgKzEwOTksOSBAQCB2b2lkIEVs
ZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShib29sIC8qcmVzdG9yZVByZXZpb3VzU2VsZWN0
aW9uKi8pCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVzdG9yZSB0aGUgcHJldmlvdXMg
c2VsZWN0aW9uIGlmIHRoZXJlIGlzIG9uZS4KICAgICAgICAgU2VsZWN0aW9uIG5ld1NlbGVjdGlv
biA9IGhhc1RhZ05hbWUoaHRtbFRhZykgfHwgaGFzVGFnTmFtZShib2R5VGFnKSA/IFNlbGVjdGlv
bihQb3NpdGlvbih0aGlzLCAwKSwgRE9XTlNUUkVBTSkgOiBTZWxlY3Rpb246OnNlbGVjdGlvbkZy
b21Db250ZW50c09mTm9kZSh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIGlmIChmcmFtZS0+c2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5z
ZWxlY3Rpb24oKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpIHsKICAgICAg
ICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7Ci0g
ICAgICAgICAgICBmcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgICAgICBmcmFtZS0+
c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbigpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlm
IChyZW5kZXJlcigpICYmICFyZW5kZXJlcigpLT5pc1dpZGdldCgpKQogICAgICAgICByZW5kZXJl
cigpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKGdldFJlY3QoKSk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9X
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYmQxNGViNi4u
ZDQ2OTczZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApA
QCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRl
VHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgpCiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0
IHR5cGluZywgdGhlIG5ldyBjaGFyYWN0ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFz
IHRoZSBqdXN0IGRlbGV0ZWQgb25lcywKICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2Vs
ZWN0aW9uLCBjb21lIGJhY2sgYW5kIHN0YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBs
b3N0LiAgQWxzbyBzZWUgCiAgICAgLy8gcHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAg
IGRvY3VtZW50KCktPmZyYW1lKCktPnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuZ2V0KCkp
OworICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHlsZSht
X3R5cGluZ1N0eWxlLmdldCgpKTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpj
bGVhclRyYW5zaWVudFN0YXRlKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCmluZGV4IDdlYzBjMTku
Ljg5ZWI1ZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKKysr
IGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIFBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEVkaXRDb21tYW5kOjpzdHlsZUF0
UG9zaXRpb24oY29uc3QgUG9zaXRpCiAgCiAgICAgLy8gRklYTUU6IEl0IHNlZW1zIG1pc2xlYWRp
bmcgdG8gYWxzbyBpbmNsdWRlIHRoZSB0eXBpbmcgc3R5bGUgd2hlbiByZXR1cm5pbmcgdGhlIHN0
eWxlIGF0IHNvbWUgYXJiaXRyYXJ5CiAgICAgLy8gcG9zaXRpb24gaW4gdGhlIGRvY3VtZW50Lgot
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkt
PmZyYW1lKCktPnR5cGluZ1N0eWxlKCk7CisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHR5cGluZ1N0eWxlID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0
eWxlKCk7CiAgICAgaWYgKHR5cGluZ1N0eWxlKQogICAgICAgICBzdHlsZS0+bWVyZ2UodHlwaW5n
U3R5bGUpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IGQ1YTdmZTIuLjYzOTYxNjMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCkBAIC0yMTUsNyArMjE1LDcgQEAgYm9vbCBFZGl0b3I6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5h
YmxlZCgpCiAgICAgCiBib29sIEVkaXRvcjo6Y2FuU21hcnRDb3B5T3JEZWxldGUoKQogewotICAg
IHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkg
JiYgbV9mcmFtZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7Cisg
ICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQo
KSAmJiBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSA9PSBXb3Jk
R3JhbnVsYXJpdHk7CiB9CiAKIGJvb2wgRWRpdG9yOjppc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQoKQpAQCAtNDg0LDcgKzQ4NCw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjp0
ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGJvb2wmIGhhc05lc3RlZE9yTXVsdGlwbGVFbWJlCiAg
ICAgfQogCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NhcmV0KCkpIHsKLSAgICAg
ICAgaWYgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICp0eXBpbmdTdHlsZSA9IG1fZnJhbWUt
PnR5cGluZ1N0eWxlKCkpIHsKKyAgICAgICAgaWYgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
ICp0eXBpbmdTdHlsZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpKSB7CiAg
ICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHVuaWNvZGVCaWRpID0gdHlwaW5nU3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7CiAgICAgICAgICAgICBp
ZiAodW5pY29kZUJpZGkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodW5pY29kZUJpZGktPmlz
UHJpbWl0aXZlVmFsdWUoKSk7CkBAIC04NzksMTEgKzg3OSwxMSBAQCB2b2lkIEVkaXRvcjo6YXBw
bGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQogICAgIC8vIFRoZSBvbGQg
c2VsZWN0aW9uIGNhbiBiZSBpbnZhbGlkIGhlcmUgYW5kIGNhbGxpbmcgc2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uIGNhbiBwcm9kdWNlIHNvbWUgc3RyYW5nZSBjYWxscy4KICAgICAvLyBTZWUgPHJkYXI6
Ly9wcm9ibGVtLzU3MjkzMTU+IFNvbWUgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZSBjb250
YWluIFJhbmdlcyBmb3Igc2VsZWN0aW9ucyB0aGF0IGFyZSBubyBsb25nZXIgdmFsaWQKICAgICAv
LyBEb24ndCBjbGVhciB0aGUgdHlwaW5nIHN0eWxlIHdpdGggdGhpcyBzZWxlY3Rpb24gY2hhbmdl
LiAgV2UgZG8gdGhvc2UgdGhpbmdzIGVsc2V3aGVyZSBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKG5l
d1NlbGVjdGlvbiA9PSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkgfHwgbV9mcmFt
ZS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgaWYgKG5ld1NlbGVj
dGlvbiA9PSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkgfHwgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgZmFsc2UsIGZh
bHNlKTsKICAgICAgICAgCiAgICAgaWYgKCFjbWQtPnByZXNlcnZlc1R5cGluZ1N0eWxlKCkpCi0g
ICAgICAgIG1fZnJhbWUtPnNldFR5cGluZ1N0eWxlKDApOworICAgICAgICBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2V0VHlwaW5nU3R5bGUoMCk7CiAgICAgCiAgICAgLy8gQ29tbWFuZCB3aWxsIGJl
IGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkgaW4gdGhlIGNhc2Ugb2YgdHlwaW5nCiAg
ICAgaWYgKG1fbGFzdEVkaXRDb21tYW5kLmdldCgpID09IGNtZCkKQEAgLTkwNyw3ICs5MDcsNyBA
QCB2b2lkIEVkaXRvcjo6dW5hcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBj
bWQpCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlz
IHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xkIHNlbGVjdGlvbiBjYW4gYmUgaW52YWxpZCBoZXJl
IGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNlbGVjdGlvbiBjYW4gcHJvZHVjZSBzb21lIHN0cmFu
Z2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NzI5MzE1PiBTb21lIHNob3Vs
ZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29udGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlvbnMgdGhh
dCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAgaWYgKG5ld1NlbGVjdGlvbiA9PSBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkgfHwgbV9mcmFtZS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KG5ld1NlbGVjdGlvbikpCisgICAgaWYgKG5ld1NlbGVjdGlvbiA9PSBtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+c2VsZWN0aW9uKCkgfHwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNl
bGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0
U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgdHJ1ZSk7CiAgICAgCiAgICAgbV9sYXN0RWRpdENvbW1h
bmQgPSAwOwpAQCAtOTI1LDcgKzkyNSw3IEBAIHZvaWQgRWRpdG9yOjpyZWFwcGxpZWRFZGl0aW5n
KFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+IGNtZCkKICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIHdv
cmsgdGhhdCBpdCBtdXN0IGRvIGluIHRoaXMgc2l0dWF0aW9uLgogICAgIC8vIFRoZSBvbGQgc2Vs
ZWN0aW9uIGNhbiBiZSBpbnZhbGlkIGhlcmUgYW5kIGNhbGxpbmcgc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uIGNhbiBwcm9kdWNlIHNvbWUgc3RyYW5nZSBjYWxscy4KICAgICAvLyBTZWUgPHJkYXI6Ly9w
cm9ibGVtLzU3MjkzMTU+IFNvbWUgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZSBjb250YWlu
IFJhbmdlcyBmb3Igc2VsZWN0aW9ucyB0aGF0IGFyZSBubyBsb25nZXIgdmFsaWQKLSAgICBpZiAo
bmV3U2VsZWN0aW9uID09IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSB8fCBtX2Zy
YW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2Vs
ZWN0aW9uID09IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSB8fCBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAgICAgICAg
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCB0cnVlKTsK
ICAgICAKICAgICBtX2xhc3RFZGl0Q29tbWFuZCA9IDA7CkBAIC05ODUsNyArOTg1LDcgQEAgYm9v
bCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcm
IHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICAgICAgICAgIC8vIFJldmVhbCB0aGUgY3VycmVudCBz
ZWxlY3Rpb24gCiAgICAgICAgICAgICBpZiAoRnJhbWUqIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQt
PmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBlZGl0ZWRGcmFtZS0+
cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9j
dXNlZE9yTWFpbkZyYW1lKCktPnJldmVhbFNlbGVjdGlvbihSZW5kZXJMYXllcjo6Z0FsaWduVG9F
ZGdlSWZOZWVkZWQpOworICAgICAgICAgICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oUmVu
ZGVyTGF5ZXI6OmdBbGlnblRvRWRnZUlmTmVlZGVkKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MTY3Niw3ICsxNjc2LDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhi
b29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAvLyBGSVhNRSA0ODU5MTkwOiBUaGlz
IGdldHMgY29uZnVzZWQgd2l0aCBkb3VibGVkIHB1bmN0dWF0aW9uIGF0IHRoZSBlbmQgb2YgYSBw
YXJhZ3JhcGgKICAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRl
cmF0b3I6OnN1YnJhbmdlKGdyYW1tYXJTZWFyY2hSYW5nZS5nZXQoKSwgZ3JhbW1hclBocmFzZU9m
ZnNldCArIGdyYW1tYXJEZXRhaWwubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwubGVuZ3RoKTsKICAg
ICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihTZWxlY3Rpb24oYmFkR3Jh
bW1hclJhbmdlLmdldCgpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwotICAgICAgICBmcmFtZSgp
LT5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJldmVh
bFNlbGVjdGlvbigpOwogICAgICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKICAg
ICAgICAgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+YWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9u
KTsKQEAgLTE2ODcsNyArMTY4Nyw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgCiAgICAgICAgIFJlZlB0
cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2Uoc3BlbGxp
bmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIG1pc3NwZWxsZWRXb3JkLmxl
bmd0aCgpKTsKICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihTZWxl
Y3Rpb24obWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpOwotICAgICAgICBmcmFt
ZSgpLT5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJl
dmVhbFNlbGVjdGlvbigpOwogICAgICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOwogICAgICAgICBmcmFtZSgp
LT5kb2N1bWVudCgpLT5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nKTsKQEAgLTE5MzIsNyArMTkzMiw3IEBAIHZvaWQgRWRpdG9yOjpyZXZl
YWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKQogICAgIGlmIChtX2lnbm9yZUNvbXBv
c2l0aW9uU2VsZWN0aW9uQ2hhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2ZyYW1lLT5y
ZXZlYWxTZWxlY3Rpb24oUmVuZGVyTGF5ZXI6OmdBbGlnblRvRWRnZUlmTmVlZGVkKTsKKyAgICBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+cmV2ZWFsU2VsZWN0aW9uKFJlbmRlckxheWVyOjpnQWxpZ25U
b0VkZ2VJZk5lZWRlZCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpzZXRJZ25vcmVDb21wb3NpdGlvblNl
bGVjdGlvbkNoYW5nZShib29sIGlnbm9yZSkKQEAgLTIwMDksNyArMjAwOSw3IEBAIHZvaWQgRWRp
dG9yOjp0cmFuc3Bvc2UoKQogCiAgICAgLy8gU2VsZWN0IHRoZSB0d28gY2hhcmFjdGVycy4KICAg
ICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSkg
ewotICAgICAgICBpZiAoIW1fZnJhbWUtPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rp
b24pKQorICAgICAgICBpZiAoIW1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgIH0KQEAgLTIy
NzgsNyArMjI3OCw3IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihTZWxlY3Rpb24o
cmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKTsKLSAgICBtX2ZyYW1lLT5yZXZlYWxTZWxl
Y3Rpb24oKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+cmV2ZWFsU2VsZWN0aW9uKCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI0MzcsMTQgKzI0MzcsMTQgQEAgUmVuZGVyU3R5bGUq
IEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2RlKiAmbm9kZVRvUmVtb3ZlKSBjb25z
dAogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoIW1fZnJhbWUt
PnR5cGluZ1N0eWxlKCkpCisgICAgaWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCk7CiAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJLCAi
c3BhbiIsIGVjKTsKICAgICBBU1NFUlQoZWMgPT0gMCk7CiAKLSAgICBTdHJpbmcgc3R5bGVUZXh0
ID0gbV9mcmFtZS0+dHlwaW5nU3R5bGUoKS0+Y3NzVGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUi
OworICAgIFN0cmluZyBzdHlsZVRleHQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5
bGUoKS0+Y3NzVGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUiOwogICAgIHN0eWxlRWxlbWVudC0+
c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgc3R5bGVUZXh0LmltcGwoKSwgZWMpOwogICAgIEFTU0VS
VChlYyA9PSAwKTsKIApAQCAtMjUzMywxNSArMjUzMywxNSBAQCB2b2lkIEVkaXRvcjo6c2V0TWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sIGZsYWcpCiB2b2lkIEVkaXRvcjo6Y29t
cHV0ZUFuZFNldFR5cGluZ1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlLCBFZGl0QWN0
aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+bGVuZ3RoKCkg
PT0gMCkgewotICAgICAgICBtX2ZyYW1lLT5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgICAgIG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5jbGVhclR5cGluZ1N0eWxlKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGN1cnJlbnQgdHlwaW5nIHN0eWxlLgogICAg
IFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbXV0YWJsZVN0eWxlID0gc3R5bGUt
Pm1ha2VNdXRhYmxlKCk7Ci0gICAgaWYgKG1fZnJhbWUtPnR5cGluZ1N0eWxlKCkpIHsKLSAgICAg
ICAgbV9mcmFtZS0+dHlwaW5nU3R5bGUoKS0+bWVyZ2UobXV0YWJsZVN0eWxlLmdldCgpKTsKLSAg
ICAgICAgbXV0YWJsZVN0eWxlID0gbV9mcmFtZS0+dHlwaW5nU3R5bGUoKTsKKyAgICBpZiAobV9m
cmFtZS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCkpIHsKKyAgICAgICAgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnR5cGluZ1N0eWxlKCktPm1lcmdlKG11dGFibGVTdHlsZS5nZXQoKSk7CisgICAg
ICAgIG11dGFibGVTdHlsZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOwog
ICAgIH0KIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGk7CkBAIC0yNTcwLDcgKzI1
NzAsNyBAQCB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKENTU1N0eWxlRGVj
bGFyYXRpb24gKnN0eWxlLCBFZGl0QWN0aW9uIGVkaQogICAgICAgICBhcHBseUNvbW1hbmQoQXBw
bHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBibG9ja1N0eWxlLmdl
dCgpLCBlZGl0aW5nQWN0aW9uKSk7CiAKICAgICAvLyBTZXQgdGhlIHJlbWFpbmluZyBzdHlsZSBh
cyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIG1fZnJhbWUtPnNldFR5cGluZ1N0eWxlKG11dGFibGVT
dHlsZS5nZXQoKSk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFR5cGluZ1N0eWxlKG11
dGFibGVTdHlsZS5nZXQoKSk7CiAgICAgbXV0YWJsZVN0eWxlLmNsZWFyKCk7CiB9CiAKQEAgLTI2
MTMsMTEgKzI2MTMsMTEgQEAgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+
IEVkaXRvcjo6c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShOb2RlKiYgbm8KICAgICBSZWZQdHI8RWxl
bWVudD4gc3R5bGVFbGVtZW50ID0gZWxlbTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAot
ICAgIGlmIChtX2ZyYW1lLT50eXBpbmdTdHlsZSgpKSB7CisgICAgaWYgKG1fZnJhbWUtPnNlbGVj
dGlvbigpLT50eXBpbmdTdHlsZSgpKSB7CiAgICAgICAgIHN0eWxlRWxlbWVudCA9IG1fZnJhbWUt
PmRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnROUyh4aHRtbE5hbWVzcGFjZVVSSSwgInNwYW4iLCBl
Yyk7CiAgICAgICAgIEFTU0VSVChlYyA9PSAwKTsKIAotICAgICAgICBzdHlsZUVsZW1lbnQtPnNl
dEF0dHJpYnV0ZShzdHlsZUF0dHIsIG1fZnJhbWUtPnR5cGluZ1N0eWxlKCktPmNzc1RleHQoKS5p
bXBsKCksIGVjKTsKKyAgICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRy
LCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKS0+Y3NzVGV4dCgpLmltcGwoKSwg
ZWMpOwogICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CiAKICAgICAgICAgc3R5bGVFbGVtZW50LT5h
cHBlbmRDaGlsZChtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIp
LCBlYyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggZjhhYTNjZS4uODVlMWNjZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRpYyBi
b29sIGV4ZWN1dGVEZWxldGUoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2Ugc291cmNlLCBjb25zCiAgICAgICAgIGNhc2UgQ29tbWFuZEZyb21ET01XaXRoVXNlckludGVy
ZmFjZToKICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBhIGNhcmV0
LCBkZWxldGUgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXIuIElFIHBlcmZvcm1zIGZvcndhcmREZWxl
dGUsIGJ1dCB3ZSBjdXJyZW50bHkgc2lkZSB3aXRoIEZpcmVmb3guCiAgICAgICAgICAgICAvLyBE
b2Vzbid0IHNjcm9sbCB0byBtYWtlIHRoZSBzZWxlY3Rpb24gdmlzaWJsZSwgb3IgbW9kaWZ5IHRo
ZSBraWxsIHJpbmcgKHRoaXMgdGltZSwgc2lkaW5nIHdpdGggSUUsIG5vdCBGaXJlZm94KS4KLSAg
ICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoZnJhbWUtPmRvY3VtZW50
KCksIGZyYW1lLT5zZWxlY3Rpb25HcmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eSk7Cisg
ICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKGZyYW1lLT5kb2N1bWVu
dCgpLCBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgPT0gV29yZEdy
YW51bGFyaXR5KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJl
YWtDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNw
cAppbmRleCAyZWM3MWFmLi5mMjMyOTg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJTZWxl
Y3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlZpc2libGVQ
b3NpdGlvbi5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCkBAIC0xNjUsNyArMTY2LDcgQEAgdm9pZCBJ
bnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKIAogICAgIC8vIEhhbmRsZSB0aGUgY2Fz
ZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4KICAgICAKLSAgICBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogdHlwaW5nU3R5bGUgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT50eXBpbmdT
dHlsZSgpOworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSA9IGRv
Y3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOwogICAgIAogICAg
IGlmICh0eXBpbmdTdHlsZSAmJiB0eXBpbmdTdHlsZS0+bGVuZ3RoKCkgPiAwKSB7CiAgICAgICAg
IC8vIEFwcGx5IHRoZSB0eXBpbmcgc3R5bGUgdG8gdGhlIGluc2VydGVkIGxpbmUgYnJlYWssIHNv
IHRoYXQgaWYgdGhlIHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dFRleHRDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAK
aW5kZXggNDZlOWE5NC4uZmVjODgzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dFRleHRDb21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
Y3BwCkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQoY29u
c3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXgKICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oZm9yY2VkRW5kaW5nU2VsZWN0aW9uKTsKIAogICAgIC8vIEhhbmRsZSB0
aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4KLSAgICBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogdHlwaW5nU3R5bGUgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT50eXBpbmdT
dHlsZSgpOworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSA9IGRv
Y3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOwogICAgIFJlZlB0
cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGVuZGluZ1N0eWxlID0gZW5kUG9zaXRpb24u
Y29tcHV0ZWRTdHlsZSgpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGk7CiAgICAg
UmVmUHRyPENTU1ZhbHVlPiBkaXJlY3Rpb247CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcv
UmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29t
bWFuZC5jcHAKaW5kZXggODBlMGVlNy4uNmU0MjZmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0
aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVG
b3JtYXRDb21tYW5kLmNwcApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFJlbW92ZUZvcm1hdENvbW1h
bmQ6OmRvQXBwbHkoKQogICAgIAogICAgIC8vIEluc2VydCB0aGUgY29udGVudCB3aXRoIHRoZSBk
ZWZhdWx0IHN0eWxlLgogICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTc5NDM4Mj4gUmVtb3Zl
Rm9ybWF0IGRvZXNuJ3QgYWx3YXlzIHJlc2V0IHRleHQgYWxpZ25tZW50Ci0gICAgZnJhbWUtPnNl
dFR5cGluZ1N0eWxlKGRlZmF1bHRTdHlsZS5nZXQoKSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigp
LT5zZXRUeXBpbmdTdHlsZShkZWZhdWx0U3R5bGUuZ2V0KCkpOwogICAgIAogICAgIGlucHV0VGV4
dChzdHJpbmcsIHRydWUpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKaW5kZXggMTVmYzczNi4uZmY2OWVjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC03OTYsNyArNzk2LDcgQEAgdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgLy8gRklYTUU6IENhbiB0aGlzIHdhaXQg
dW50aWwgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQ/ICBUaGVyZSBkb2Vz
bid0IHNlZW0gdG8gYmUKICAgICAvLyBhbnkgd29yayBwZXJmb3JtZWQgYWZ0ZXIgdGhpcyB0aGF0
IHF1ZXJpZXMgb3IgdXNlcyB0aGUgdHlwaW5nIHN0eWxlLgogICAgIGlmIChGcmFtZSogZnJhbWUg
PSBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBmcmFtZS0+Y2xlYXJUeXBpbmdTdHlsZSgp
OworICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAK
ICAgICBib29sIGhhbmRsZWRTdHlsZVNwYW5zID0gaGFuZGxlU3R5bGVTcGFuc0JlZm9yZUluc2Vy
dGlvbihmcmFnbWVudCwgaW5zZXJ0aW9uUG9zKTsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmNwcAppbmRleCAxNmU5MTJkLi5jYmRlM2NjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RWRpdG9yLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5o
IgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAg
LTM5LDE0ICs0MCwxNyBAQAogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxGcmFt
ZUVsZW1lbnRCYXNlLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVk
ZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUg
Imh0bWxlZGl0aW5nLmgiCkBAIC03MCw2ICs3NCwxMCBAQCBTZWxlY3Rpb25Db250cm9sbGVyOjpT
ZWxlY3Rpb25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSwgYm9vbCBpc0RyYWdDYXJldENvbnRyb2xs
ZQogICAgICwgbV9pc0RyYWdDYXJldENvbnRyb2xsZXIoaXNEcmFnQ2FyZXRDb250cm9sbGVyKQog
ICAgICwgbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX2ZvY3VzZWQo
ZmFsc2UpCisgICAgLCBtX3NlbGVjdGlvbkdyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5
KQorICAgICwgbV9jYXJldFZpc2libGUoZmFsc2UpCisgICAgLCBtX2NhcmV0UGFpbnQodHJ1ZSkK
KyAgICAsIG1fY2FyZXRCbGlua1RpbWVyKHRoaXMsICZTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJl
dEJsaW5rVGltZXJGaXJlZCkKIHsKIH0KIApAQCAtMTIxLDcgKzEyOSw3IEBAIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgcywgYm9vbCBjbG9z
ZVR5cGluZywgYm9vCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZnJhbWUt
PmVkaXRvcigpLT5sYXN0RWRpdENvbW1hbmQoKSk7CiAKICAgICBpZiAoY2xlYXJUeXBpbmdTdHls
ZSkKLSAgICAgICAgbV9mcmFtZS0+Y2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICB0aGlzLT5j
bGVhclR5cGluZ1N0eWxlKCk7CiAgICAgICAgIAogICAgIGlmIChtX3NlbCA9PSBzKQogICAgICAg
ICByZXR1cm47CkBAIC0xMzMsMTcgKzE0MSwxNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OnNldFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIHMsIGJvb2wgY2xvc2VUeXBpbmcsIGJvbwog
ICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogICAgIAogICAgIGlmICghcy5pc05vbmUoKSkKLSAg
ICAgICAgbV9mcmFtZS0+c2V0Rm9jdXNlZE5vZGVJZk5lZWRlZCgpOworICAgICAgICB0aGlzLT5z
ZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7CiAgICAgCi0gICAgbV9mcmFtZS0+c2VsZWN0aW9uTGF5
b3V0Q2hhbmdlZCgpOworICAgIHNlbGVjdGlvbkxheW91dENoYW5nZWQoKTsKICAgICAvLyBBbHdh
eXMgY2xlYXIgdGhlIHggcG9zaXRpb24gdXNlZCBmb3IgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlv
bi4KICAgICAvLyBJdCB3aWxsIGJlIHJlc3RvcmVkIGJ5IHRoZSB2ZXJ0aWNhbCBhcnJvdyBuYXZp
Z2F0aW9uIGNvZGUgaWYgbmVjZXNzYXJ5LgogICAgIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZp
Z2F0aW9uID0gTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CiAgICAgc2VsZWN0RnJh
bWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsKLSAgICBtX2ZyYW1lLT5ub3RpZnlS
ZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdlKHVzZXJUcmlnZ2VyZWQpOworICAgIG5vdGlmeVJlbmRl
cmVyT2ZTZWxlY3Rpb25DaGFuZ2UodXNlclRyaWdnZXJlZCk7CiAgICAgbV9mcmFtZS0+ZWRpdG9y
KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBjbG9zZVR5cGluZyk7
CiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQpCi0gICAgICAgIG1fZnJhbWUtPnJldmVhbENhcmV0KFJl
bmRlckxheWVyOjpnQWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CisgICAgICAgIHJldmVhbENhcmV0KFJl
bmRlckxheWVyOjpnQWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CiAKICAgICBub3RpZnlBY2Nlc3NpYmls
aXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKCk7CiB9CkBAIC00NzcsMTQgKzQ4NSwxMiBAQCBib29sIFNl
bGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgRURpcmVjdGlvbiBk
aXIsIFRleHRHcmFudWxhcgogICAgICAgICB0cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXIuc2V0U2Vs
ZWN0aW9uKG1fc2VsKTsKICAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLm1vZGlmeShh
bHRlciwgZGlyLCBncmFudWxhcml0eSwgZmFsc2UpOwogCi0gICAgICAgIGJvb2wgY2hhbmdlID0g
bV9mcmFtZS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5z
ZWxlY3Rpb24oKSk7CisgICAgICAgIGJvb2wgY2hhbmdlID0gc2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGlmICghY2hh
bmdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChtX2ZyYW1l
KQotICAgICAgICBtX2ZyYW1lLT5zZXRTZWxlY3Rpb25HcmFudWxhcml0eShncmFudWxhcml0eSk7
Ci0gICAgCisgICAgc2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpOwogICAgIHdp
bGxCZU1vZGlmaWVkKGFsdGVyLCBkaXIpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKQEAg
LTU0MSw4ICs1NDcsOCBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeShFQWx0ZXJh
dGlvbiBhbHRlciwgRURpcmVjdGlvbiBkaXIsIFRleHRHcmFudWxhcgogICAgICAgICAvLyBOT1RF
OiBUaGUgb25lIGV4Y2VwdGlvbiBpcyB0aGF0IHdlIG5lZWQgdG8ga2VlcCB3b3JkIGdyYW51bGFy
aXR5IHRvCiAgICAgICAgIC8vIHByZXNlcnZlIHNtYXJ0IGRlbGV0ZSBiZWhhdmlvciB3aGVuIGV4
dGVuZGluZyBieSB3b3JkIChlLmcuIGRvdWJsZS1jbGljayksCiAgICAgICAgIC8vIHRoZW4gc2hp
ZnQtb3B0aW9uLXJpZ2h0IGFycm93LCB0aGVuIGRlbGV0ZSBuZWVkcyB0byBzbWFydCBkZWxldGUs
IHBlciBUZXh0RWRpdC4KLSAgICAgICAgaWYgKCEoYWx0ZXIgPT0gRVhURU5EICYmIGdyYW51bGFy
aXR5ID09IFdvcmRHcmFudWxhcml0eSAmJiBtX2ZyYW1lLT5zZWxlY3Rpb25HcmFudWxhcml0eSgp
ID09IFdvcmRHcmFudWxhcml0eSkpCi0gICAgICAgICAgICBtX2ZyYW1lLT5zZXRTZWxlY3Rpb25H
cmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgIGlmICghKGFsdGVyID09
IEVYVEVORCAmJiBncmFudWxhcml0eSA9PSBXb3JkR3JhbnVsYXJpdHkgJiYgc2VsZWN0aW9uR3Jh
bnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHkpKQorICAgICAgICAgICAgc2V0U2VsZWN0aW9u
R3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgIH0KIAogICAgIHNldE5lZWRz
TGF5b3V0KCk7CkBAIC01NzAsNyArNTc2LDcgQEAgYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpt
b2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIGludCB2ZXJ0aWNhbERpc3RhbmNlLCBib29sIHUKICAg
ICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLnNldFNlbGVjdGlvbihtX3NlbCk7CiAgICAg
ICAgIHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5tb2RpZnkoYWx0ZXIsIHZlcnRpY2FsRGlzdGFu
Y2UsIGZhbHNlKTsKIAotICAgICAgICBib29sIGNoYW5nZSA9IG1fZnJhbWUtPnNob3VsZENoYW5n
ZVNlbGVjdGlvbih0cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXIuc2VsZWN0aW9uKCkpOworICAgICAg
ICBib29sIGNoYW5nZSA9IHNob3VsZENoYW5nZVNlbGVjdGlvbih0cmlhbFNlbGVjdGlvbkNvbnRy
b2xsZXIuc2VsZWN0aW9uKCkpOwogICAgICAgICBpZiAoIWNoYW5nZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC02MzUsNyArNjQxLDcgQEAgYm9vbCBTZWxlY3Rpb25Db250
cm9sbGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIGludCB2ZXJ0aWNhbERpc3RhbmNlLCBi
b29sIHUKICAgICB9CiAKICAgICBpZiAodXNlclRyaWdnZXJlZCkKLSAgICAgICAgbV9mcmFtZS0+
c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICBz
ZXRTZWxlY3Rpb25HcmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTEwNTMsNyArMTA1OSw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogCiAgICAgLy8g
Rm9jdXMgb24gdGhlIHBhcmVudCBmcmFtZSwgYW5kIHRoZW4gc2VsZWN0IGZyb20gYmVmb3JlIHRo
aXMgZWxlbWVudCB0byBhZnRlci4KICAgICBTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGJlZm9yZU93
bmVyRWxlbWVudCwgYWZ0ZXJPd25lckVsZW1lbnQpOwotICAgIGlmIChwYXJlbnQtPnNob3VsZENo
YW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKSB7CisgICAgaWYgKHBhcmVudC0+c2VsZWN0aW9u
KCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKSB7CiAgICAgICAgIHBhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUocGFyZW50KTsKICAgICAgICAgcGFy
ZW50LT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgfQpAQCAt
MTA4MSwxMCArMTA4NywxMCBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEFsbCgp
CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm47CiAgICAgU2VsZWN0aW9uIG5ld1NlbGVj
dGlvbihTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShyb290KSk7Ci0gICAg
aWYgKG1fZnJhbWUtPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgIGlm
IChzaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgc2V0U2VsZWN0
aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgc2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5
U2VsZWN0ZWQoKTsKLSAgICBtX2ZyYW1lLT5ub3RpZnlSZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdl
KHRydWUpOworICAgIG5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7CiB9CiAK
IGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW5nZShSYW5nZSogcmFuZ2Us
IEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBjbG9zZVR5cGluZykKQEAgLTExNTksMTIgKzExNjUs
MTIgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5n
ZWQoKQogICAgIC8vIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hl
Y2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2ZSwKICAgICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFj
ZXMgdGhvc2UgY29sb3JzIHdlcmUgcGFpbnRlZC4KICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9
IHN0YXRpY19jYXN0PFJlbmRlclZpZXcqPihtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigp
KSkKLSAgICAgICAgdmlldy0+cmVwYWludFZpZXdSZWN0YW5nbGUoZW5jbG9zaW5nSW50UmVjdCht
X2ZyYW1lLT5zZWxlY3Rpb25Cb3VuZHMoKSkpOworICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1Jl
Y3RhbmdsZShlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvbkJvdW5kcygpKSk7CiAKICAgICAvLyBD
YXJldCBhcHBlYXJzIGluIHRoZSBhY3RpdmUgZnJhbWUuCiAgICAgaWYgKGFjdGl2ZUFuZEZvY3Vz
ZWQpCi0gICAgICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbkZyb21Ob25lKCk7Ci0gICAgbV9mcmFt
ZS0+c2V0Q2FyZXRWaXNpYmxlKGFjdGl2ZUFuZEZvY3VzZWQpOworICAgICAgICBzZXRTZWxlY3Rp
b25Gcm9tTm9uZSgpOworICAgIHNldENhcmV0VmlzaWJsZShhY3RpdmVBbmRGb2N1c2VkKTsKIAog
ICAgIC8vIFVwZGF0ZSBmb3IgY2FwcyBsb2NrIHN0YXRlCiAgICAgbV9mcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPmNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpOwpAQCAtMTE4MSw3ICsxMTg3LDcg
QEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQo
KQogCiAgICAgLy8gU2VjdXJlIGtleWJvYXJkIGVudHJ5IGlzIHNldCBieSB0aGUgYWN0aXZlIGZy
YW1lLgogICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT51c2VTZWN1cmVLZXlib2FyZEVudHJ5
V2hlbkFjdGl2ZSgpKQotICAgICAgICBtX2ZyYW1lLT5zZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5
KGFjdGl2ZUFuZEZvY3VzZWQpOworICAgICAgICBzZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5KGFj
dGl2ZUFuZEZvY3VzZWQpOwogfQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhZ2VBY3Rp
dmF0aW9uQ2hhbmdlZCgpCkBAIC0xMjIwLDYgKzEyMjYsMzQ3IEBAIHZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2hvd1RyZWVGb3JUaGlzKCkgY29uc3QKIAogI2VuZGlmCiAKK1RleHRHcmFudWxh
cml0eSBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc2VsZWN0aW9uR3JhbnVsYXJpdHk7Cit9CisKK3ZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQoreworICAgIG1fc2VsZWN0aW9uR3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKK30K
Kwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlSZW5kZXJlck9mU2VsZWN0aW9uQ2hh
bmdlKGJvb2wgdXNlclRyaWdnZXJlZCkKK3sKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
MDsKKyAgICBpZiAocm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgICAgICByZW5kZXJlciA9IHJv
b3RFZGl0YWJsZUVsZW1lbnQoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCk7CisK
KyAgICAvLyBJZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgaW4gYSB0ZXh0ZmllbGQgb3IgdGV4
dGFyZWEsIG5vdGlmeSB0aGUgcmVuZGVyZXIgdGhhdCB0aGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2Vk
CisgICAgaWYgKHJlbmRlcmVyICYmIChyZW5kZXJlci0+aXNUZXh0QXJlYSgpIHx8IHJlbmRlcmVy
LT5pc1RleHRGaWVsZCgpKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wq
PihyZW5kZXJlciktPnNlbGVjdGlvbkNoYW5nZWQodXNlclRyaWdnZXJlZCk7Cit9CisKK3ZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6aW52YWxpZGF0ZVNlbGVjdGlvbigpCit7CisgICAgc2V0TmVl
ZHNMYXlvdXQoKTsKKyAgICBzZWxlY3Rpb25MYXlvdXRDaGFuZ2VkKCk7Cit9Cit2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OnNldENhcmV0VmlzaWJsZShib29sIGZsYWcpCit7CisgICAgaWYgKG1f
Y2FyZXRWaXNpYmxlID09IGZsYWcpCisgICAgICAgIHJldHVybjsKKyAgICBjbGVhckNhcmV0UmVj
dElmTmVlZGVkKCk7CisgICAgbV9jYXJldFZpc2libGUgPSBmbGFnOworICAgIHNlbGVjdGlvbkxh
eW91dENoYW5nZWQoKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjbGVhckNhcmV0
UmVjdElmTmVlZGVkKCkKK3sKKyNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKKyAgICBpZiAobV9jYXJl
dFBhaW50KSB7CisgICAgICAgIG1fY2FyZXRQYWludCA9IGZhbHNlOworICAgICAgICBpbnZhbGlk
YXRlQ2FyZXRSZWN0KCk7CisgICAgfQorI2VuZGlmCit9CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0
aGF0IHRlbGxzIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIG5vZGUgaXMgYW4gZWxlbWVudCB0aGF0IGhh
cyBhbiBlbnRpcmUKKy8vIEZyYW1lIGFuZCBGcmFtZVZpZXcsIGEgPGZyYW1lPiwgPGlmcmFtZT4s
IG9yIDxvYmplY3Q+Lgorc3RhdGljIGJvb2wgaXNGcmFtZUVsZW1lbnQoY29uc3QgTm9kZSAqbikK
K3sKKyAgICBpZiAoIW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSZW5kZXJPYmplY3Qg
KnJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJl
ci0+aXNXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdpZGdldCogd2lkZ2V0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4ocmVuZGVyZXIpLT53aWRnZXQoKTsKKyAgICBy
ZXR1cm4gd2lkZ2V0ICYmIHdpZGdldC0+aXNGcmFtZVZpZXcoKTsKK30KKwordm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fZnJh
bWUtPmRvY3VtZW50KCkgfHwgaXNOb25lKCkgfHwgIWlzRm9jdXNlZEFuZEFjdGl2ZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBOb2RlKiB0YXJnZXQgPSByb290RWRpdGFibGVFbGVtZW50KCk7
CisgICAgaWYgKHRhcmdldCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGFy
Z2V0LT5yZW5kZXJlcigpOworCisgICAgICAgIC8vIFdhbGsgdXAgdGhlIHJlbmRlciB0cmVlIHRv
IHNlYXJjaCBmb3IgYSBub2RlIHRvIGZvY3VzLgorICAgICAgICAvLyBXYWxraW5nIHVwIHRoZSBE
T00gdHJlZSB3b3VsZG4ndCB3b3JrIGZvciBzaGFkb3cgdHJlZXMsIGxpa2UgdGhvc2UgYmVoaW5k
IHRoZSBlbmdpbmUtYmFzZWQgdGV4dCBmaWVsZHMuCisgICAgICAgIHdoaWxlIChyZW5kZXJlcikg
eworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzZXQgZm9jdXMgb24gYSBzdWJmcmFt
ZSB3aGVuIHNlbGVjdGluZyBpbiBhIHBhcmVudCBmcmFtZSwKKyAgICAgICAgICAgIC8vIHNvIGFk
ZCB0aGUgIWlzRnJhbWVFbGVtZW50IGNoZWNrIGhlcmUuIFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0
ZXIgd2F5IHRvIG1ha2UgdGhpcworICAgICAgICAgICAgLy8gd29yayBpbiB0aGUgbG9uZyB0ZXJt
LCBidXQgdGhpcyBpcyB0aGUgc2FmZXN0IGZpeCBhdCB0aGlzIHRpbWUuCisgICAgICAgICAgICBp
ZiAodGFyZ2V0ICYmIHRhcmdldC0+aXNNb3VzZUZvY3VzYWJsZSgpICYmICFpc0ZyYW1lRWxlbWVu
dCh0YXJnZXQpKSB7CisgICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUodGFyZ2V0LCBtX2ZyYW1lKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVy
LT5wYXJlbnQoKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcikKKyAgICAgICAgICAgICAgICB0
YXJnZXQgPSByZW5kZXJlci0+ZWxlbWVudCgpOworICAgICAgICB9CisgICAgICAgIG1fZnJhbWUt
PmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKDApOworICAgIH0KK30KKwordm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpzZWxlY3Rpb25MYXlvdXRDaGFuZ2VkKCkKK3sKKyAgICBib29sIGNhcmV0
UmVjdENoYW5nZWQgPSByZWNvbXB1dGVDYXJldFJlY3QoKTsKKworI2lmIEVOQUJMRShURVhUX0NB
UkVUKQorICAgIGJvb2wgc2hvdWxkQmxpbmsgPSBtX2NhcmV0VmlzaWJsZQorICAgICAgICAmJiBp
c0NhcmV0KCkgJiYgaXNDb250ZW50RWRpdGFibGUoKTsKKworICAgIC8vIElmIHRoZSBjYXJldCBt
b3ZlZCwgc3RvcCB0aGUgYmxpbmsgdGltZXIgc28gd2UgY2FuIHJlc3RhcnQgd2l0aCBhCisgICAg
Ly8gYmxhY2sgY2FyZXQgaW4gdGhlIG5ldyBsb2NhdGlvbi4KKyAgICBpZiAoY2FyZXRSZWN0Q2hh
bmdlZCB8fCAhc2hvdWxkQmxpbmspCisgICAgICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0b3AoKTsK
KworICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdpdGggYSBibGFjayBjYXJldC4gQmUgc3VyZSBub3Qg
dG8gcmVzdGFydCBpZiB3ZSdyZQorICAgIC8vIGFscmVhZHkgYmxpbmtpbmcgaW4gdGhlIHJpZ2h0
IGxvY2F0aW9uLgorICAgIGlmIChzaG91bGRCbGluayAmJiAhbV9jYXJldEJsaW5rVGltZXIuaXNB
Y3RpdmUoKSkgeworICAgICAgICBpZiAoZG91YmxlIGJsaW5rSW50ZXJ2YWwgPSB0aGVtZSgpLT5j
YXJldEJsaW5rSW50ZXJ2YWwoKSkKKyAgICAgICAgICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0YXJ0
UmVwZWF0aW5nKGJsaW5rSW50ZXJ2YWwpOworCisgICAgICAgIGlmICghbV9jYXJldFBhaW50KSB7
CisgICAgICAgICAgICBtX2NhcmV0UGFpbnQgPSB0cnVlOworICAgICAgICAgICAgaW52YWxpZGF0
ZUNhcmV0UmVjdCgpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBpZiAoIWNhcmV0UmVj
dENoYW5nZWQpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgUmVuZGVyVmlldyogdmll
dyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIGlmICghdmlldykKKyAgICAgICAg
cmV0dXJuOworCisgICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRoaXMtPnNlbGVjdGlvbigpOwor
CisgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQorICAgICAgICB2aWV3LT5jbGVhclNlbGVj
dGlvbigpOworICAgIGVsc2UgeworICAgICAgICAvLyBVc2UgdGhlIHJpZ2h0bW9zdCBjYW5kaWRh
dGUgZm9yIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCBhbmQgdGhlIGxlZnRtb3N0IGNhbmRp
ZGF0ZSBmb3IgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLgorICAgICAgICAvLyBFeGFtcGxlOiBm
b28gPGE+YmFyPC9hPi4gIEltYWdpbmUgdGhhdCBhIGxpbmUgd3JhcCBvY2N1cnMgYWZ0ZXIgJ2Zv
bycsIGFuZCB0aGF0ICdiYXInIGlzIHNlbGVjdGVkLiAgIElmIHdlIHBhc3MgW2ZvbywgM10KKyAg
ICAgICAgLy8gYXMgdGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24sIHRoZSBzZWxlY3Rpb24gcGFp
bnRpbmcgY29kZSB3aWxsIHRoaW5rIHRoYXQgY29udGVudCBvbiB0aGUgbGluZSBjb250YWluaW5n
ICdmb28nIGlzIHNlbGVjdGVkCisgICAgICAgIC8vIGFuZCB3aWxsIGZpbGwgdGhlIGdhcCBiZWZv
cmUgJ2JhcicuCisgICAgICAgIFBvc2l0aW9uIHN0YXJ0UG9zID0gc2VsZWN0aW9uLnN0YXJ0KCk7
CisgICAgICAgIGlmIChzdGFydFBvcy5kb3duc3RyZWFtKCkuaXNDYW5kaWRhdGUoKSkKKyAgICAg
ICAgICAgIHN0YXJ0UG9zID0gc3RhcnRQb3MuZG93bnN0cmVhbSgpOworICAgICAgICBQb3NpdGlv
biBlbmRQb3MgPSBzZWxlY3Rpb24uZW5kKCk7CisgICAgICAgIGlmIChlbmRQb3MudXBzdHJlYW0o
KS5pc0NhbmRpZGF0ZSgpKQorICAgICAgICAgICAgZW5kUG9zID0gZW5kUG9zLnVwc3RyZWFtKCk7
CisKKyAgICAgICAgLy8gV2UgY2FuIGdldCBpbnRvIGEgc3RhdGUgd2hlcmUgdGhlIHNlbGVjdGlv
biBlbmRwb2ludHMgbWFwIHRvIHRoZSBzYW1lIFZpc2libGVQb3NpdGlvbiB3aGVuIGEgc2VsZWN0
aW9uIGlzIGRlbGV0ZWQKKyAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB5ZXQgbm90aWZ5IHRo
ZSBTZWxlY3Rpb25Db250cm9sbGVyIG9mIHRleHQgcmVtb3ZhbC4KKyAgICAgICAgaWYgKHN0YXJ0
UG9zLmlzTm90TnVsbCgpICYmIGVuZFBvcy5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCkgIT0gc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgeworICAgICAgICAgICAgUmVuZGVy
T2JqZWN0ICpzdGFydFJlbmRlcmVyID0gc3RhcnRQb3Mubm9kZSgpLT5yZW5kZXJlcigpOworICAg
ICAgICAgICAgUmVuZGVyT2JqZWN0ICplbmRSZW5kZXJlciA9IGVuZFBvcy5ub2RlKCktPnJlbmRl
cmVyKCk7CisgICAgICAgICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3Rh
cnRQb3Mub2Zmc2V0KCksIGVuZFJlbmRlcmVyLCBlbmRQb3Mub2Zmc2V0KCkpOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0QmxpbmtUaW1lckZp
cmVkKFRpbWVyPFNlbGVjdGlvbkNvbnRyb2xsZXI+KikKK3sKKyNpZiBFTkFCTEUoVEVYVF9DQVJF
VCkKKyAgICBBU1NFUlQobV9jYXJldFZpc2libGUpOworICAgIEFTU0VSVChpc0NhcmV0KCkpOwor
ICAgIGJvb2wgY2FyZXRQYWludCA9IG1fY2FyZXRQYWludDsKKyAgICBpZiAoaXNDYXJldEJsaW5r
aW5nU3VzcGVuZGVkKCkgJiYgY2FyZXRQYWludCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2Fy
ZXRQYWludCA9ICFjYXJldFBhaW50OworICAgIGludmFsaWRhdGVDYXJldFJlY3QoKTsKKyNlbmRp
ZgorfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50Q2FyZXQoR3JhcGhpY3NDb250
ZXh0KiBwLCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0Cit7
CisjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCisgICAgaWYgKG1fY2FyZXRQYWludCAmJiBtX2NhcmV0
VmlzaWJsZSkKKyAgICAgICAgcGFpbnRDYXJldChwLCB0eCwgdHksIGNsaXBSZWN0KTsKKyNlbmRp
ZgorfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0KEdyYXBoaWNz
Q29udGV4dCogcCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25z
dAoreworI2lmIEVOQUJMRShURVhUX0NBUkVUKQorICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGRy
YWdDYXJldENvbnRyb2xsZXIgPSBtX2ZyYW1lLT5wYWdlKCktPmRyYWdDYXJldENvbnRyb2xsZXIo
KTsKKyAgICBBU1NFUlQoZHJhZ0NhcmV0Q29udHJvbGxlci0+c2VsZWN0aW9uKCkuaXNDYXJldCgp
KTsKKyAgICBpZiAoZHJhZ0NhcmV0Q29udHJvbGxlci0+c2VsZWN0aW9uKCkuc3RhcnQoKS5ub2Rl
KCktPmRvY3VtZW50KCktPmZyYW1lKCkgPT0gbV9mcmFtZSkKKyAgICAgICAgZHJhZ0NhcmV0Q29u
dHJvbGxlci0+cGFpbnRDYXJldChwLCB0eCwgdHksIGNsaXBSZWN0KTsKKyNlbmRpZgorfQorCiti
b29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxl
Y3Rpb24mIG5ld1NlbGVjdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9y
KCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdT
ZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOworfQorCitib29sIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT5zaG91bGREZWxl
dGVSYW5nZShzZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpKTsKK30KKworI2lmICFQTEFURk9STShN
QUMpCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnko
Ym9vbCkKK3t9CisjZW5kaWYKKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjp1cGRhdGVTZWN1
cmVLZXlib2FyZEVudHJ5SWZBY3RpdmUoKQoreworICAgIGlmIChpc0ZvY3VzZWRBbmRBY3RpdmUo
KSkKKyAgICAgICAgc2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShtX2ZyYW1lLT5kb2N1bWVudCgp
LT51c2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZSgpKTsKK30KKworQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24gKlNlbGVjdGlvbkNvbnRyb2xsZXI6OnR5cGluZ1N0eWxlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV90eXBpbmdTdHlsZS5nZXQoKTsKK30KKwordm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRUeXBpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5
bGUpCit7CisgICAgbV90eXBpbmdTdHlsZSA9IHN0eWxlOworfQorCit2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OmNsZWFyVHlwaW5nU3R5bGUoKQoreworICAgIG1fdHlwaW5nU3R5bGUgPSAwOwor
fQorCitGbG9hdFJlY3QgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0aW9uQm91bmRzKGJvb2wg
Y2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogcm9vdCA9IG1f
ZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUt
PnZpZXcoKTsKKyAgICBpZiAoIXJvb3QgfHwgIXZpZXcpCisgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CisKKyAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSByb290LT5zZWxlY3Rpb25Cb3VuZHMo
Y2xpcFRvVmlzaWJsZUNvbnRlbnQpOworICAgIHJldHVybiBjbGlwVG9WaXNpYmxlQ29udGVudCA/
IGludGVyc2VjdGlvbihzZWxlY3Rpb25SZWN0LCB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKSkg
OiBzZWxlY3Rpb25SZWN0OworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdGlv
blRleHRSZWN0cyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGJvb2wgY2xpcFRvVmlzaWJsZUNv
bnRlbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogcm9vdCA9IG1fZnJhbWUtPmNvbnRlbnRS
ZW5kZXJlcigpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gdG9SYW5nZSgpOworCisgICAgVmVjdG9yPEludFJlY3Q+
IGludFJlY3RzOworICAgIHNlbGVjdGVkUmFuZ2UtPmFkZExpbmVCb3hSZWN0cyhpbnRSZWN0cywg
dHJ1ZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gaW50UmVjdHMuc2l6ZSgpOworICAgIEZsb2F0
UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50
UmVjdCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAg
IGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKKyAgICAgICAgICAgIHJlY3RzLmFwcGVuZChpbnRl
cnNlY3Rpb24oaW50UmVjdHNbaV0sIHZpc2libGVDb250ZW50UmVjdCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZWN0cy5hcHBlbmQoaW50UmVjdHNbaV0pOworfQorCisvLyByZXR1cm5z
IEZsb2F0UmVjdCBiZWNhdXNlIGdvaW5nIHRocm91Z2ggSW50UmVjdCB3b3VsZCB0cnVuY2F0ZSBh
bnkgZmxvYXRzCisvLyBTY2FucyBsb2dpY2FsbHkgZm9yd2FyZCBmcm9tICJzdGFydCIsIGluY2x1
ZGluZyBhbnkgY2hpbGQgZnJhbWVzCitzdGF0aWMgSFRNTEZvcm1FbGVtZW50ICpzY2FuRm9yRm9y
bShOb2RlICpzdGFydCkKK3sKKyAgICBOb2RlICpuOworICAgIGZvciAobiA9IHN0YXJ0OyBuOyBu
ID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGZv
cm1UYWcpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+
KG4pOworICAgICAgICBlbHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obiktPmZvcm0oKTsKKyAg
ICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgbi0+aGFzVGFnTmFtZShp
ZnJhbWVUYWcpKSB7CisgICAgICAgICAgICBOb2RlICpjaGlsZERvYyA9IHN0YXRpY19jYXN0PEhU
TUxGcmFtZUVsZW1lbnRCYXNlKj4obiktPmNvbnRlbnREb2N1bWVudCgpOworICAgICAgICAgICAg
aWYgKEhUTUxGb3JtRWxlbWVudCAqZnJhbWVSZXN1bHQgPSBzY2FuRm9yRm9ybShjaGlsZERvYykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lUmVzdWx0OworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiAwOworfQorCisKK0hUTUxGb3JtRWxlbWVudCAqU2VsZWN0aW9uQ29udHJvbGxl
cjo6Y3VycmVudEZvcm0oKSBjb25zdAoreworICAgIC8vIHN0YXJ0IGxvb2tpbmcgZWl0aGVyIGF0
IHRoZSBhY3RpdmUgKGZpcnN0IHJlc3BvbmRlcikgbm9kZSwgb3Igd2hlcmUgdGhlIHNlbGVjdGlv
biBpcworICAgIE5vZGUgKnN0YXJ0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRv
Y3VtZW50KCktPmZvY3VzZWROb2RlKCkgOiAwOworICAgIGlmICghc3RhcnQpCisgICAgICAgIHN0
YXJ0ID0gdGhpcy0+c3RhcnQoKS5ub2RlKCk7CisKKyAgICAvLyB0cnkgd2Fsa2luZyB1cCB0aGUg
bm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVsZW1lbnQKKyAgICBOb2RlICpuOworICAgIGZvciAo
biA9IHN0YXJ0OyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChuLT5oYXNU
YWdOYW1lKGZvcm1UYWcpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3Jt
RWxlbWVudCo+KG4pOworICAgICAgICBlbHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkKKyAgICAg
ICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pLT5pc0dlbmVyaWNG
b3JtRWxlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqPihuKS0+Zm9ybSgpOworICAgIH0KKworICAgIC8vIHRyeSB3YWxraW5nIGZv
cndhcmQgaW4gdGhlIG5vZGUgdHJlZSB0byBmaW5kIGEgZm9ybSBlbGVtZW50CisgICAgcmV0dXJu
IHN0YXJ0ID8gc2NhbkZvckZvcm0oc3RhcnQpIDogMDsKK30KKwordm9pZCBTZWxlY3Rpb25Db250
cm9sbGVyOjpyZXZlYWxTZWxlY3Rpb24oY29uc3QgUmVuZGVyTGF5ZXI6OlNjcm9sbEFsaWdubWVu
dCYgYWxpZ25tZW50KQoreworICAgIEludFJlY3QgcmVjdDsKKworICAgIHN3aXRjaCAoc3RhdGUo
KSkgeworICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tk9ORToKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q0FSRVQ6CisgICAgICAgICAgICByZWN0ID0gYWJz
b2x1dGVDYXJldEJvdW5kcygpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBT
ZWxlY3Rpb246OlJBTkdFOgorICAgICAgICAgICAgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc2Vs
ZWN0aW9uQm91bmRzKGZhbHNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBQ
b3NpdGlvbiBzdGFydCA9IHRoaXMtPnN0YXJ0KCk7CisKKyAgICBBU1NFUlQoc3RhcnQubm9kZSgp
KTsKKyAgICBpZiAoc3RhcnQubm9kZSgpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKSkgewor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIG9ubHkgaGFuZGxlcyBzY3JvbGxpbmcgdGhlIHN0
YXJ0Q29udGFpbmVyJ3MgbGF5ZXIsIGJ1dAorICAgICAgICAvLyB0aGUgc2VsZWN0aW9uIHJlY3Qg
Y291bGQgaW50ZXJzZWN0IG1vcmUgdGhhbiBqdXN0IHRoYXQuCisgICAgICAgIC8vIFNlZSA8cmRh
cjovL3Byb2JsZW0vNDc5OTg5OT4uCisgICAgICAgIGlmIChSZW5kZXJMYXllciAqbGF5ZXIgPSBz
dGFydC5ub2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpCisgICAgICAgICAgICBs
YXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBmYWxzZSwgYWxpZ25tZW50LCBhbGlnbm1l
bnQpOworICAgIH0KK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZXZlYWxDYXJldChj
b25zdCBSZW5kZXJMYXllcjo6U2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzTm9uZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQb3NpdGlvbiBleHRlbnQg
PSB0aGlzLT5leHRlbnQoKTsKKyAgICBpZiAoZXh0ZW50Lm5vZGUoKSAmJiBleHRlbnQubm9kZSgp
LT5yZW5kZXJlcigpKSB7CisgICAgICAgIEludFJlY3QgZXh0ZW50UmVjdCA9IFZpc2libGVQb3Np
dGlvbihleHRlbnQpLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAgICAgICAgUmVuZGVyTGF5ZXIq
IGxheWVyID0gZXh0ZW50Lm5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAg
ICAgICAgaWYgKGxheWVyKQorICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUo
ZXh0ZW50UmVjdCwgZmFsc2UsIGFsaWdubWVudCwgYWxpZ25tZW50KTsKKyAgICB9Cit9CisKK3Zv
aWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQoreworICAgIC8v
IFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9keSBpZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRh
YmxlIChlaXRoZXIgdGhlCisgICAgLy8gZW50aXJlIFdlYlZpZXcgaXMgZWRpdGFibGUgb3IgZGVz
aWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1bWVudCkuCisgICAgRG9jdW1lbnQgKmRvYyA9IG1f
ZnJhbWUtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2MgfHwgIWlzTm9uZSgpIHx8ICFtX2ZyYW1l
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBub2Rl
ID0gZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aGFz
VGFnTmFtZShib2R5VGFnKSkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
KTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlv
bihub2RlLCAwKSwgRE9XTlNUUkVBTSkpOworfQorCiB9CiAKICNpZm5kZWYgTkRFQlVHCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oIGIvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAppbmRleCBmZTVlOTBkLi45MTU0MWNkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCisrKyBiL1dlYkNv
cmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKQEAgLTI5LDE1ICsyOSwxOSBAQAogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJSYW5n
ZS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CiBjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CitjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBj
bGFzcyBWaXNpYmxlUG9zaXRpb247CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBUaW1l
cjsKKwogY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlciA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoK
ICAgICBlbnVtIEVBbHRlcmF0aW9uIHsgTU9WRSwgRVhURU5EIH07CkBAIC0xMjIsMTIgKzEyNiw0
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25zdDsKICAgICB2
b2lkIHBhZ2VBY3RpdmF0aW9uQ2hhbmdlZCgpOwogCisgICAgVGV4dEdyYW51bGFyaXR5IHNlbGVj
dGlvbkdyYW51bGFyaXR5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25HcmFudWxhcml0
eShUZXh0R3JhbnVsYXJpdHkpOworCisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29u
c3QgU2VsZWN0aW9uJikgY29uc3Q7CisgICAgYm9vbCBzaG91bGREZWxldGVTZWxlY3Rpb24oY29u
c3QgU2VsZWN0aW9uJikgY29uc3Q7CisgICAgdm9pZCBjbGVhckNhcmV0UmVjdElmTmVlZGVkKCk7
CisgICAgdm9pZCBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7CisgICAgdm9pZCBzZWxlY3Rpb25M
YXlvdXRDaGFuZ2VkKCk7CisgICAgdm9pZCBub3RpZnlSZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdl
KGJvb2wgdXNlclRyaWdnZXJlZCk7CisKKyAgICB2b2lkIGludmFsaWRhdGVTZWxlY3Rpb24oKTsK
KworICAgIHZvaWQgc2V0Q2FyZXRWaXNpYmxlKGJvb2wgPSB0cnVlKTsKKyAgICB2b2lkIHBhaW50
Q2FyZXQoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIGNs
aXBSZWN0KSBjb25zdDsKKyAgICB2b2lkIHBhaW50RHJhZ0NhcmV0KEdyYXBoaWNzQ29udGV4dCos
IGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgY29uc3Q7CisKKyAgICB2
b2lkIHVwZGF0ZVNlY3VyZUtleWJvYXJkRW50cnlJZkFjdGl2ZSgpOworCisgICAgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIHR5cGluZ1N0eWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUeXBp
bmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOworICAgIHZvaWQgY2xlYXJUeXBp
bmdTdHlsZSgpOworCisgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zp
c2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CisgICAgdm9pZCBzZWxlY3Rpb25UZXh0UmVjdHMo
VmVjdG9yPEZsb2F0UmVjdD4mLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29u
c3Q7CisKKyAgICBIVE1MRm9ybUVsZW1lbnQqIGN1cnJlbnRGb3JtKCkgY29uc3Q7CisKKyAgICB2
b2lkIHJldmVhbFNlbGVjdGlvbihjb25zdCBSZW5kZXJMYXllcjo6U2Nyb2xsQWxpZ25tZW50JiA9
IFJlbmRlckxheWVyOjpnQWxpZ25DZW50ZXJJZk5lZWRlZCk7CisgICAgdm9pZCByZXZlYWxDYXJl
dChjb25zdCBSZW5kZXJMYXllcjo6U2Nyb2xsQWxpZ25tZW50JiA9IFJlbmRlckxheWVyOjpnQWxp
Z25DZW50ZXJJZk5lZWRlZCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgp
OworCisgICAgdm9pZCBzZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5KGJvb2wpOworCiAjaWZuZGVm
IE5ERUJVRwogICAgIHZvaWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBsZW5ndGgpIGNvbnN0OwogICAgIHZvaWQgc2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7CiAjZW5k
aWYKIAogcHJpdmF0ZToKKyAgICB2b2lkIGNhcmV0QmxpbmtUaW1lckZpcmVkKFRpbWVyPFNlbGVj
dGlvbkNvbnRyb2xsZXI+Kik7CisKICAgICBlbnVtIEVQb3NpdGlvblR5cGUgeyBTVEFSVCwgRU5E
LCBCQVNFLCBFWFRFTlQgfTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBtb2RpZnlFeHRlbmRpbmdS
aWdodEZvcndhcmQoVGV4dEdyYW51bGFyaXR5KTsKQEAgLTE2Niw2ICsyMDUsMTEgQEAgcHJpdmF0
ZToKICAgICBib29sIG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkIDogMTsKICAgICBib29sIG1f
Zm9jdXNlZCA6IDE7CiAKKyAgICBUZXh0R3JhbnVsYXJpdHkgbV9zZWxlY3Rpb25HcmFudWxhcml0
eTsKKyAgICBib29sIG1fY2FyZXRWaXNpYmxlOworICAgIGJvb2wgbV9jYXJldFBhaW50OworICAg
IFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV90eXBpbmdTdHlsZTsKKyAgICBU
aW1lcjxTZWxlY3Rpb25Db250cm9sbGVyPiBtX2NhcmV0QmxpbmtUaW1lcjsKIH07CiAKIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciYgYSwgY29uc3QgU2Vs
ZWN0aW9uQ29udHJvbGxlciYgYikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCA0MTQ2
ODBmLi5kM2E5YzAyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0zMzcsNyArMzM3
LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGNvbnN0IFN0cmluZyAmdGV4dCwg
Ym9vbCBzZWxlY3RJbnNlcnRlZFRleHQpCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRS
dW5XaXRob3V0TmV3bGluZXMoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdEluc2VydGVk
VGV4dCkKIHsKICAgICBSZWZQdHI8SW5zZXJ0VGV4dENvbW1hbmQ+IGNvbW1hbmQ7Ci0gICAgaWYg
KCFkb2N1bWVudCgpLT5mcmFtZSgpLT50eXBpbmdTdHlsZSgpICYmICFtX2NvbW1hbmRzLmlzRW1w
dHkoKSkgeworICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnR5cGlu
Z1N0eWxlKCkgJiYgIW1fY29tbWFuZHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEVkaXRDb21tYW5k
KiBsYXN0Q29tbWFuZCA9IG1fY29tbWFuZHMubGFzdCgpLmdldCgpOwogICAgICAgICBpZiAobGFz
dENvbW1hbmQtPmlzSW5zZXJ0VGV4dENvbW1hbmQoKSkKICAgICAgICAgICAgIGNvbW1hbmQgPSBz
dGF0aWNfY2FzdDxJbnNlcnRUZXh0Q29tbWFuZCo+KGxhc3RDb21tYW5kKTsKQEAgLTQ0Miw3ICs0
NDIsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIAotICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0T3JSYW5nZSgpICYmIGRv
Y3VtZW50KCktPmZyYW1lKCktPnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0
ZSkpIHsKKyAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldE9yUmFuZ2UoKSAmJiBkb2N1
bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVj
dGlvblRvRGVsZXRlKSkgewogICAgICAgICBpZiAoa2lsbFJpbmcpCiAgICAgICAgICAgICBkb2N1
bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+YWRkVG9LaWxsUmluZyhzZWxlY3Rpb25Ub0RlbGV0
ZS50b1JhbmdlKCkuZ2V0KCksIGZhbHNlKTsKICAgICAgICAgLy8gTWFrZSB1bmRvIHNlbGVjdCBl
dmVyeXRoaW5nIHRoYXQgaGFzIGJlZW4gZGVsZXRlZCwgdW5sZXNzIGFuIHVuZG8gd2lsbCB1bmRv
IG1vcmUgdGhhbiBqdXN0IHRoaXMgZGVsZXRpb24uCkBAIC01MjAsNyArNTIwLDcgQEAgdm9pZCBU
eXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGJvb2wga2kKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBp
ZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldE9yUmFuZ2UoKSAmJiBkb2N1bWVudCgpLT5mcmFt
ZSgpLT5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKSB7CisgICAgaWYg
KHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXRPclJhbmdlKCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+c2VsZWN0aW9uKCktPnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkp
IHsKICAgICAgICAgaWYgKGtpbGxSaW5nKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+ZWRpdG9yKCktPmFkZFRvS2lsbFJpbmcoc2VsZWN0aW9uVG9EZWxldGUudG9SYW5nZSgpLmdl
dCgpLCBmYWxzZSk7CiAgICAgICAgIC8vIG1ha2UgdW5kbyBzZWxlY3Qgd2hhdCB3YXMgZGVsZXRl
ZApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFj
Lm1tIGIvV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tCmluZGV4
IDQxMjVjM2EuLjdlNzk2YjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0
aW9uQ29udHJvbGxlck1hYy5tbQorKysgYi9XZWJDb3JlL2VkaXRpbmcvbWFjL1NlbGVjdGlvbkNv
bnRyb2xsZXJNYWMubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIldlYkNvcmVWaWV3RmFj
dG9yeS5oIgogCiAjaW1wb3J0IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vydmlj
ZXMuaD4gCisjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNjQsNSArNjUsMjkgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlBY2Nl
c3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKCkKICAgICB9CiB9CiAKK2NvbnN0IHNob3J0IGVu
YWJsZVJvbWFuS2V5Ym9hcmRzT25seSA9IC0yMzsKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxl
ID09IElzU2VjdXJlRXZlbnRJbnB1dEVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChlbmFibGUpIHsKKyAgICAgICAgRW5hYmxlU2VjdXJlRXZlbnRJbnB1dCgpOworI2lmZGVmIEJV
SUxESU5HX09OX1RJR0VSCisgICAgICAgIEtleVNjcmlwdChlbmFibGVSb21hbktleWJvYXJkc09u
bHkpOworI2Vsc2UKKyAgICAgICAgQ0ZBcnJheVJlZiBpbnB1dFNvdXJjZXMgPSBUSVNDcmVhdGVB
U0NJSUNhcGFibGVJbnB1dFNvdXJjZUxpc3QoKTsKKyAgICAgICAgVFNNU2V0RG9jdW1lbnRQcm9w
ZXJ0eShUU01HZXRBY3RpdmVEb2N1bWVudCgpLCBrVFNNRG9jdW1lbnRFbmFibGVkSW5wdXRTb3Vy
Y2VzUHJvcGVydHlUYWcsIHNpemVvZihDRkFycmF5UmVmKSwgJmlucHV0U291cmNlcyk7CisgICAg
ICAgIENGUmVsZWFzZShpbnB1dFNvdXJjZXMpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgRGlzYWJsZVNlY3VyZUV2ZW50SW5wdXQoKTsKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgor
ICAgICAgICBLZXlTY3JpcHQoc21LZXlFbmFibGVLeWJkcyk7CisjZWxzZQorICAgICAgICBUU01S
ZW1vdmVEb2N1bWVudFByb3BlcnR5KFRTTUdldEFjdGl2ZURvY3VtZW50KCksIGtUU01Eb2N1bWVu
dEVuYWJsZWRJbnB1dFNvdXJjZXNQcm9wZXJ0eVRhZyk7CisjZW5kaWYKKyAgICB9Cit9CisKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDE5
NTUxN2EuLmYyYmUyMzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTIyNyw3ICsy
MjcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShib29s
IHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKICAgICAgICAgICAgIHNldFNlbGVjdGlvblJhbmdl
KGNhY2hlZFNlbFN0YXJ0LCBjYWNoZWRTZWxFbmQpOyAKICAgICAgICAgCiAgICAgICAgIGlmIChk
b2N1bWVudCgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgp
LT5mcmFtZSgpLT5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZy
YW1lKCktPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICB9IGVsc2UKICAgICAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6dXBkYXRlRm9jdXNBcHBlYXJhbmNl
KHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5jcHAKaW5kZXggMmQ0ZDdhOS4uNWViY2JkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hU
TUxUZXh0QXJlYUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCIKICNpbmNsdWRlICJTZWxlY3Rpb24u
aCIKKyNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMjM5LDcgKzI0MCw3IEBAIHZvaWQg
SFRNTFRleHRBcmVhRWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wgcmVzdG9yZVBy
ZXZpb3VzU2VsZWN0aW9uKQogICAgIH0KIAogICAgIGlmIChkb2N1bWVudCgpLT5mcmFtZSgpKQot
ICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbigpOwogfQog
CiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDUxMTNhOTAuLjE3NThiZTQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKQEAgLTgzMyw3ICs4MzMsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbGVh
cihib29sIGNsZWFyV2luZG93UHJvcGVydGllcywgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMpCiAg
ICAgaWYgKG1fZnJhbWUtPnZpZXcoKSkKICAgICAgICAgbV9mcmFtZS0+dmlldygpLT5jbGVhcigp
OwogCi0gICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVs
YXJpdHkpOworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb25HcmFudWxhcml0
eShDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAKICAgICAvLyBEbyBub3QgZHJvcCB0aGUgZG9jdW1l
bnQgYmVmb3JlIHRoZSBTY3JpcHRDb250cm9sbGVyIGFuZCB2aWV3IGFyZSBjbGVhcmVkCiAgICAg
Ly8gYXMgc29tZSBkZXN0cnVjdG9ycyBtaWdodCBzdGlsbCB0cnkgdG8gYWNjZXNzIHRoZSBkb2N1
bWVudC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
IGIvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKaW5kZXggNWU5ZjhiNS4u
NjU1NjY3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5j
cHAKKysrIGIvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTIwMCw3
ICsyMDAsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2Vs
ZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQogICAgICAgICAgICAgICAgICAgICBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBjcmVhdGVGcmFnbWVudEZyb21NYXJr
dXAoZG9jdW1lbnQsIGl0ZW0tPnRpdGxlKCksICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChjb21t
YW5kKTsKLSAgICAgICAgICAgICAgICBmcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKFJlbmRlckxheWVy
OjpnQWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CisgICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5yZXZlYWxTZWxlY3Rpb24oUmVuZGVyTGF5ZXI6OmdBbGlnblRvRWRnZUlmTmVlZGVkKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggZWY0
YWJiMy4uZjExOThmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAorKysgYi9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC00MDEsNyArNDAxLDcg
QEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSogZHJhZ0Rh
dGEpCiAgICAgICAgIAogICAgICAgICBtX2NsaWVudC0+d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRp
b25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOwogICAgICAgICBp
ZiAoZHJhZ0lzTW92ZShpbm5lckZyYW1lLT5zZWxlY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIGJv
b2wgc21hcnRNb3ZlID0gaW5uZXJGcmFtZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSA9PSBXb3Jk
R3JhbnVsYXJpdHkgCisgICAgICAgICAgICBib29sIHNtYXJ0TW92ZSA9IGlubmVyRnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb25HcmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBpbm5lckZyYW1lLT5lZGl0b3IoKS0+c21hcnRJbnNl
cnREZWxldGVFbmFibGVkKCkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGRyYWdEYXRh
LT5jYW5TbWFydFJlcGxhY2UoKTsKICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChNb3ZlU2VsZWN0
aW9uQ29tbWFuZDo6Y3JlYXRlKGZyYWdtZW50LCBkcmFnQ2FyZXQuYmFzZSgpLCBzbWFydE1vdmUp
KTsKQEAgLTU3Niw3ICs1NzYsNyBAQCBzdGF0aWMgSW50UG9pbnQgZHJhZ0xvY0ZvckRIVE1MRHJh
Zyhjb25zdCBJbnRQb2ludCYgbW91c2VEcmFnZ2VkUG9pbnQsIGNvbnN0IEludAogICAgIAogc3Rh
dGljIEludFBvaW50IGRyYWdMb2NGb3JTZWxlY3Rpb25EcmFnKEZyYW1lKiBzcmMpCiB7Ci0gICAg
SW50UmVjdCBkcmFnZ2luZ1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyYy0+c2VsZWN0aW9uQm91
bmRzKCkpOworICAgIEludFJlY3QgZHJhZ2dpbmdSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzcmMt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb25Cb3VuZHMoKSk7CiAgICAgaW50IHhwb3MgPSBkcmFnZ2lu
Z1JlY3QucmlnaHQoKTsKICAgICB4cG9zID0gZHJhZ2dpbmdSZWN0LngoKSA8IHhwb3MgPyBkcmFn
Z2luZ1JlY3QueCgpIDogeHBvczsKICAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5ib3R0b20o
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZDU1YzJhNy4uYTc3Y2I3OSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKQEAgLTE5MCwxMyArMTkwLDEzIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RD
bG9zZXN0V29yZEZyb21Nb3VzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlCiAg
ICAgICAgIH0KICAgICAKICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAg
ICAgICAgICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbkdyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0
eSk7CisgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uR3JhbnVs
YXJpdHkoV29yZEdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIG1fYmVnYW5TZWxlY3RpbmdUZXh0
ID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChyZXN1bHQuZXZlbnQoKS5jbGlja0NvdW50KCkgPT0g
MiAmJiBtX2ZyYW1lLT5lZGl0b3IoKS0+aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVk
KCkpIAogICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5hcHBlbmRUcmFpbGluZ1doaXRlc3Bh
Y2UoKTsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fZnJh
bWUtPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICBpZiAobV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQog
ICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rp
b24pOwogICAgIH0KIH0KQEAgLTIxNiwxMSArMjE2LDExIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpz
ZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRo
SGl0CiAgICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21D
b250ZW50c09mTm9kZShVUkxFbGVtZW50KTsKICAgICAKICAgICAgICAgaWYgKG5ld1NlbGVjdGlv
bi5pc1JhbmdlKCkpIHsKLSAgICAgICAgICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbkdyYW51bGFy
aXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIG1f
YmVnYW5TZWxlY3RpbmdUZXh0ID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX2Zy
YW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAgaWYgKG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkK
ICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uKTsKICAgICB9CiB9CkBAIC0yNTksMTEgKzI1OSwxMSBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpcGxlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UgogICAgICAgICBuZXdTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShQYXJhZ3Jh
cGhHcmFudWxhcml0eSk7CiAgICAgfQogICAgIGlmIChuZXdTZWxlY3Rpb24uaXNSYW5nZSgpKSB7
Ci0gICAgICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbkdyYW51bGFyaXR5KFBhcmFncmFwaEdyYW51
bGFyaXR5KTsKKyAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbkdyYW51
bGFyaXR5KFBhcmFncmFwaEdyYW51bGFyaXR5KTsKICAgICAgICAgbV9iZWdhblNlbGVjdGluZ1Rl
eHQgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICBpZiAobV9mcmFtZS0+c2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91
bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogCiAgICAgcmV0dXJuIHRydWU7CkBA
IC0zMDgsMTUgKzMwOCwxNSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2
ZW50U2luZ2xlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UgogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBTZWxlY3Rpb24oc3RhcnQsIHBvcyk7CiAKLSAg
ICAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgIT0gQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkpCi0gICAgICAgICAgICBuZXdTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0
eShtX2ZyYW1lLT5zZWxlY3Rpb25HcmFudWxhcml0eSgpKTsKKyAgICAgICAgaWYgKG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb25HcmFudWxhcml0eSgpICE9IENoYXJhY3RlckdyYW51bGFy
aXR5KQorICAgICAgICAgICAgbmV3U2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkobV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkpOwogICAgICAgICBtX2Jl
Z2FuU2VsZWN0aW5nVGV4dCA9IHRydWU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbmV3U2VsZWN0
aW9uID0gU2VsZWN0aW9uKHZpc2libGVQb3MpOwotICAgICAgICBtX2ZyYW1lLT5zZXRTZWxlY3Rp
b25HcmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgIG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZXRTZWxlY3Rpb25HcmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSk7
CiAgICAgfQogICAgIAotICAgIGlmIChtX2ZyYW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkKKyAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNl
bGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0
U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTUwNCwxMCAr
NTA0LDEwIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVTZWxlY3Rpb25Gb3JNb3VzZURyYWco
Tm9kZSogdGFyZ2V0Tm9kZSwgY29uc3QgSW50UG9pbnQmCiAgICAgfQogCiAgICAgbmV3U2VsZWN0
aW9uLnNldEV4dGVudCh0YXJnZXRQb3NpdGlvbik7Ci0gICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlv
bkdyYW51bGFyaXR5KCkgIT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCi0gICAgICAgIG5ld1NlbGVj
dGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KG1fZnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5
KCkpOworICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uR3JhbnVsYXJpdHko
KSAhPSBDaGFyYWN0ZXJHcmFudWxhcml0eSkKKyAgICAgICAgbmV3U2VsZWN0aW9uLmV4cGFuZFVz
aW5nR3JhbnVsYXJpdHkobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbkdyYW51bGFyaXR5
KCkpOwogCi0gICAgaWYgKG1fZnJhbWUtPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rp
b24pKSB7CisgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rp
b24obmV3U2VsZWN0aW9uKSkgewogICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0TGFz
dENoYW5nZVdhc0hvcml6b250YWxFeHRlbnNpb24oZmFsc2UpOwogICAgICAgICBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgfQpAQCAtNTU3LDE0
ICs1NTcsMTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNv
bnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGUKICAgICAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBwb3MgPSBub2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KGV2ZW50Lmxv
Y2FsUG9pbnQoKSk7CiAgICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBTZWxlY3Rpb24ocG9zKTsK
ICAgICAgICAgfQotICAgICAgICBpZiAobV9mcmFtZS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5l
d1NlbGVjdGlvbikpCisgICAgICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAKICAgICAgICAgaGFuZGxlZCA9IHRy
dWU7CiAgICAgfQogCi0gICAgbV9mcmFtZS0+bm90aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5n
ZSh0cnVlKTsKLQorICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5ub3RpZnlSZW5kZXJlck9mU2Vs
ZWN0aW9uQ2hhbmdlKHRydWUpOwogICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3RGcmFt
ZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOwogCiAgICAgcmV0dXJuIGhhbmRsZWQ7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAppbmRleCBhZDEwZGE4Li5kZjlmNDJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTYxLDcgKzYxLDYgQEAKICNp
bmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNp
bmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5o
IgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0xMTMsMTUgKzExMiwxMSBAQCBGcmFtZTo6RnJhbWUoUGFn
ZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIEZyYW1lTG9hZGVy
Q2xpZW50KgogICAgICwgbV9sb2FkZXIodGhpcywgZnJhbWVMb2FkZXJDbGllbnQpCiAgICAgLCBt
X293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX3NjcmlwdCh0aGlzKQotICAgICwg
bV9zZWxlY3Rpb25HcmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKICAgICAsIG1fc2Vs
ZWN0aW9uQ29udHJvbGxlcih0aGlzKQotICAgICwgbV9jYXJldEJsaW5rVGltZXIodGhpcywgJkZy
YW1lOjpjYXJldEJsaW5rVGltZXJGaXJlZCkKICAgICAsIG1fZWRpdG9yKHRoaXMpCiAgICAgLCBt
X2V2ZW50SGFuZGxlcih0aGlzKQogICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKHRoaXMpCiAg
ICAgLCBtX2xpZmVTdXBwb3J0VGltZXIodGhpcywgJkZyYW1lOjpsaWZlU3VwcG9ydFRpbWVyRmly
ZWQpCi0gICAgLCBtX2NhcmV0VmlzaWJsZShmYWxzZSkKLSAgICAsIG1fY2FyZXRQYWludCh0cnVl
KQogICAgICwgbV9pblZpZXdTb3VyY2VNb2RlKGZhbHNlKQogICAgICwgbV9uZWVkc1JlYXBwbHlT
dHlsZXMoZmFsc2UpCiAgICAgLCBtX2lzRGlzY29ubmVjdGVkKGZhbHNlKQpAQCAtMjU2LDcgKzI1
MSw3IEBAIHZvaWQgRnJhbWU6OnNldERvY3VtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnQ+IG5ld0Rv
YykKIAogICAgIG1fZG9jID0gbmV3RG9jOwogICAgIGlmIChtX2RvYyAmJiBzZWxlY3Rpb24oKS0+
aXNGb2N1c2VkQW5kQWN0aXZlKCkpCi0gICAgICAgIHNldFVzZVNlY3VyZUtleWJvYXJkRW50cnko
bV9kb2MtPnVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKCkpOworICAgICAgICBzZWxl
Y3Rpb24oKS0+c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShtX2RvYy0+dXNlU2VjdXJlS2V5Ym9h
cmRFbnRyeVdoZW5BY3RpdmUoKSk7CiAgICAgICAgIAogICAgIGlmIChtX2RvYyAmJiAhbV9kb2Mt
PmF0dGFjaGVkKCkpCiAgICAgICAgIG1fZG9jLT5hdHRhY2goKTsKQEAgLTI4MCwxNiArMjc1LDYg
QEAgRWRpdG9yKiBGcmFtZTo6ZWRpdG9yKCkgY29uc3QKICAgICByZXR1cm4gJm1fZWRpdG9yOwog
fQogCi1UZXh0R3JhbnVsYXJpdHkgRnJhbWU6OnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zZWxlY3Rpb25HcmFudWxhcml0eTsKLX0KLQotdm9pZCBGcmFtZTo6
c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewot
ICAgIG1fc2VsZWN0aW9uR3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKLX0KLQogU2VsZWN0aW9u
Q29udHJvbGxlciogRnJhbWU6OmRyYWdDYXJldENvbnRyb2xsZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBtX3BhZ2UtPmRyYWdDYXJldENvbnRyb2xsZXIoKTsKQEAgLTQ1MywxNzIgKzQzOCw2IEBA
IFN0cmluZyBGcmFtZTo6bWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudChjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgbGFiZWxzLCBFbGVtZW50KiBlCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lk
IEZyYW1lOjpub3RpZnlSZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdlKGJvb2wgdXNlclRyaWdnZXJl
ZCkKLXsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gMDsKLSAgICBpZiAoc2VsZWN0aW9u
KCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKLSAgICAgICAgcmVuZGVyZXIgPSBzZWxlY3Rpb24o
KS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIo
KTsKLQotICAgIC8vIElmIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBpbiBhIHRleHRmaWVsZCBv
ciB0ZXh0YXJlYSwgbm90aWZ5IHRoZSByZW5kZXJlciB0aGF0IHRoZSBzZWxlY3Rpb24gaGFzIGNo
YW5nZWQKLSAgICBpZiAocmVuZGVyZXIgJiYgKHJlbmRlcmVyLT5pc1RleHRBcmVhKCkgfHwgcmVu
ZGVyZXItPmlzVGV4dEZpZWxkKCkpKQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29u
dHJvbCo+KHJlbmRlcmVyKS0+c2VsZWN0aW9uQ2hhbmdlZCh1c2VyVHJpZ2dlcmVkKTsKLX0KLQot
dm9pZCBGcmFtZTo6aW52YWxpZGF0ZVNlbGVjdGlvbigpCi17Ci0gICAgc2VsZWN0aW9uKCktPnNl
dE5lZWRzTGF5b3V0KCk7Ci0gICAgc2VsZWN0aW9uTGF5b3V0Q2hhbmdlZCgpOwotfQotCi12b2lk
IEZyYW1lOjpzZXRDYXJldFZpc2libGUoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2NhcmV0Vmlz
aWJsZSA9PSBmbGFnKQotICAgICAgICByZXR1cm47Ci0gICAgY2xlYXJDYXJldFJlY3RJZk5lZWRl
ZCgpOwotICAgIG1fY2FyZXRWaXNpYmxlID0gZmxhZzsKLSAgICBzZWxlY3Rpb25MYXlvdXRDaGFu
Z2VkKCk7Ci19Ci0KLXZvaWQgRnJhbWU6OmNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQoKQotewotI2lm
IEVOQUJMRShURVhUX0NBUkVUKQotICAgIGlmIChtX2NhcmV0UGFpbnQpIHsKLSAgICAgICAgbV9j
YXJldFBhaW50ID0gZmFsc2U7Ci0gICAgICAgIHNlbGVjdGlvbigpLT5pbnZhbGlkYXRlQ2FyZXRS
ZWN0KCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IHRlbGxz
IHdoZXRoZXIgYSBwYXJ0aWN1bGFyIG5vZGUgaXMgYW4gZWxlbWVudCB0aGF0IGhhcyBhbiBlbnRp
cmUKLS8vIEZyYW1lIGFuZCBGcmFtZVZpZXcsIGEgPGZyYW1lPiwgPGlmcmFtZT4sIG9yIDxvYmpl
Y3Q+Lgotc3RhdGljIGJvb2wgaXNGcmFtZUVsZW1lbnQoY29uc3QgTm9kZSAqbikKLXsKLSAgICBp
ZiAoIW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVy
ID0gbi0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNXaWRn
ZXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFdpZGdldCogd2lkZ2V0ID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4ocmVuZGVyZXIpLT53aWRnZXQoKTsKLSAgICByZXR1cm4gd2lk
Z2V0ICYmIHdpZGdldC0+aXNGcmFtZVZpZXcoKTsKLX0KLQotdm9pZCBGcmFtZTo6c2V0Rm9jdXNl
ZE5vZGVJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFkb2N1bWVudCgpIHx8IHNlbGVjdGlvbigpLT5p
c05vbmUoKSB8fCAhc2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBOb2RlKiB0YXJnZXQgPSBzZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpOwotICAgIGlmICh0YXJnZXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHRhcmdldC0+cmVuZGVyZXIoKTsKLQotICAgICAgICAvLyBXYWxrIHVwIHRoZSByZW5kZXIg
dHJlZSB0byBzZWFyY2ggZm9yIGEgbm9kZSB0byBmb2N1cy4KLSAgICAgICAgLy8gV2Fsa2luZyB1
cCB0aGUgRE9NIHRyZWUgd291bGRuJ3Qgd29yayBmb3Igc2hhZG93IHRyZWVzLCBsaWtlIHRob3Nl
IGJlaGluZCB0aGUgZW5naW5lLWJhc2VkIHRleHQgZmllbGRzLgotICAgICAgICB3aGlsZSAocmVu
ZGVyZXIpIHsKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2V0IGZvY3VzIG9uIGEg
c3ViZnJhbWUgd2hlbiBzZWxlY3RpbmcgaW4gYSBwYXJlbnQgZnJhbWUsCi0gICAgICAgICAgICAv
LyBzbyBhZGQgdGhlICFpc0ZyYW1lRWxlbWVudCBjaGVjayBoZXJlLiBUaGVyZSdzIHByb2JhYmx5
IGEgYmV0dGVyIHdheSB0byBtYWtlIHRoaXMKLSAgICAgICAgICAgIC8vIHdvcmsgaW4gdGhlIGxv
bmcgdGVybSwgYnV0IHRoaXMgaXMgdGhlIHNhZmVzdCBmaXggYXQgdGhpcyB0aW1lLgotICAgICAg
ICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQtPmlzTW91c2VGb2N1c2FibGUoKSAmJiAhaXNGcmFt
ZUVsZW1lbnQodGFyZ2V0KSkgewotICAgICAgICAgICAgICAgIHBhZ2UoKS0+Zm9jdXNDb250cm9s
bGVyKCktPnNldEZvY3VzZWROb2RlKHRhcmdldCwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFy
ZW50KCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgICAgICAgICAgdGFyZ2V0
ID0gcmVuZGVyZXItPmVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBkb2N1bWVudCgpLT5z
ZXRGb2N1c2VkTm9kZSgwKTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhbWU6OnNlbGVjdGlvbkxheW91
dENoYW5nZWQoKQotewotICAgIGJvb2wgY2FyZXRSZWN0Q2hhbmdlZCA9IHNlbGVjdGlvbigpLT5y
ZWNvbXB1dGVDYXJldFJlY3QoKTsKLQotI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIGJvb2wg
c2hvdWxkQmxpbmsgPSBtX2NhcmV0VmlzaWJsZQotICAgICAgICAmJiBzZWxlY3Rpb24oKS0+aXND
YXJldCgpICYmIHNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotCi0gICAgLy8gSWYg
dGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBzbyB3ZSBjYW4gcmVzdGFydCB3
aXRoIGEKLSAgICAvLyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxvY2F0aW9uLgotICAgIGlmIChj
YXJldFJlY3RDaGFuZ2VkIHx8ICFzaG91bGRCbGluaykKLSAgICAgICAgbV9jYXJldEJsaW5rVGlt
ZXIuc3RvcCgpOwotCi0gICAgLy8gU3RhcnQgYmxpbmtpbmcgd2l0aCBhIGJsYWNrIGNhcmV0LiBC
ZSBzdXJlIG5vdCB0byByZXN0YXJ0IGlmIHdlJ3JlCi0gICAgLy8gYWxyZWFkeSBibGlua2luZyBp
biB0aGUgcmlnaHQgbG9jYXRpb24uCi0gICAgaWYgKHNob3VsZEJsaW5rICYmICFtX2NhcmV0Qmxp
bmtUaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGlmIChkb3VibGUgYmxpbmtJbnRlcnZhbCA9
IHRoZW1lKCktPmNhcmV0QmxpbmtJbnRlcnZhbCgpKQotICAgICAgICAgICAgbV9jYXJldEJsaW5r
VGltZXIuc3RhcnRSZXBlYXRpbmcoYmxpbmtJbnRlcnZhbCk7Ci0KLSAgICAgICAgaWYgKCFtX2Nh
cmV0UGFpbnQpIHsKLSAgICAgICAgICAgIG1fY2FyZXRQYWludCA9IHRydWU7Ci0gICAgICAgICAg
ICBzZWxlY3Rpb24oKS0+aW52YWxpZGF0ZUNhcmV0UmVjdCgpOwotICAgICAgICB9Ci0gICAgfQot
I2Vsc2UKLSAgICBpZiAoIWNhcmV0UmVjdENoYW5nZWQpCi0gICAgICAgIHJldHVybjsKLSNlbmRp
ZgotCi0gICAgUmVuZGVyVmlldyogdmlldyA9IGNvbnRlbnRSZW5kZXJlcigpOwotICAgIGlmICgh
dmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRoaXMt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKLSAgICAgICAgCi0gICAgaWYgKCFzZWxlY3Rpb24u
aXNSYW5nZSgpKQotICAgICAgICB2aWV3LT5jbGVhclNlbGVjdGlvbigpOwotICAgIGVsc2Ugewot
ICAgICAgICAvLyBVc2UgdGhlIHJpZ2h0bW9zdCBjYW5kaWRhdGUgZm9yIHRoZSBzdGFydCBvZiB0
aGUgc2VsZWN0aW9uLCBhbmQgdGhlIGxlZnRtb3N0IGNhbmRpZGF0ZSBmb3IgdGhlIGVuZCBvZiB0
aGUgc2VsZWN0aW9uLgotICAgICAgICAvLyBFeGFtcGxlOiBmb28gPGE+YmFyPC9hPi4gIEltYWdp
bmUgdGhhdCBhIGxpbmUgd3JhcCBvY2N1cnMgYWZ0ZXIgJ2ZvbycsIGFuZCB0aGF0ICdiYXInIGlz
IHNlbGVjdGVkLiAgIElmIHdlIHBhc3MgW2ZvbywgM10KLSAgICAgICAgLy8gYXMgdGhlIHN0YXJ0
IG9mIHRoZSBzZWxlY3Rpb24sIHRoZSBzZWxlY3Rpb24gcGFpbnRpbmcgY29kZSB3aWxsIHRoaW5r
IHRoYXQgY29udGVudCBvbiB0aGUgbGluZSBjb250YWluaW5nICdmb28nIGlzIHNlbGVjdGVkCi0g
ICAgICAgIC8vIGFuZCB3aWxsIGZpbGwgdGhlIGdhcCBiZWZvcmUgJ2JhcicuCi0gICAgICAgIFBv
c2l0aW9uIHN0YXJ0UG9zID0gc2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgICAgIGlmIChzdGFydFBv
cy5kb3duc3RyZWFtKCkuaXNDYW5kaWRhdGUoKSkKLSAgICAgICAgICAgIHN0YXJ0UG9zID0gc3Rh
cnRQb3MuZG93bnN0cmVhbSgpOwotICAgICAgICBQb3NpdGlvbiBlbmRQb3MgPSBzZWxlY3Rpb24u
ZW5kKCk7Ci0gICAgICAgIGlmIChlbmRQb3MudXBzdHJlYW0oKS5pc0NhbmRpZGF0ZSgpKQotICAg
ICAgICAgICAgZW5kUG9zID0gZW5kUG9zLnVwc3RyZWFtKCk7Ci0gICAgICAgIAotICAgICAgICAv
LyBXZSBjYW4gZ2V0IGludG8gYSBzdGF0ZSB3aGVyZSB0aGUgc2VsZWN0aW9uIGVuZHBvaW50cyBt
YXAgdG8gdGhlIHNhbWUgVmlzaWJsZVBvc2l0aW9uIHdoZW4gYSBzZWxlY3Rpb24gaXMgZGVsZXRl
ZAotICAgICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHlldCBub3RpZnkgdGhlIFNlbGVjdGlvbkNv
bnRyb2xsZXIgb2YgdGV4dCByZW1vdmFsLgotICAgICAgICBpZiAoc3RhcnRQb3MuaXNOb3ROdWxs
KCkgJiYgZW5kUG9zLmlzTm90TnVsbCgpICYmIHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSAhPSBz
ZWxlY3Rpb24udmlzaWJsZUVuZCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QgKnN0YXJ0
UmVuZGVyZXIgPSBzdGFydFBvcy5ub2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBSZW5k
ZXJPYmplY3QgKmVuZFJlbmRlcmVyID0gZW5kUG9zLm5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICAg
ICAgICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydFBvcy5vZmZzZXQo
KSwgZW5kUmVuZGVyZXIsIGVuZFBvcy5vZmZzZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgRnJhbWU6OmNhcmV0QmxpbmtUaW1lckZpcmVkKFRpbWVyPEZyYW1lPiopCi17Ci0jaWYg
RU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgQVNTRVJUKG1fY2FyZXRWaXNpYmxlKTsKLSAgICBBU1NF
UlQoc2VsZWN0aW9uKCktPmlzQ2FyZXQoKSk7Ci0gICAgYm9vbCBjYXJldFBhaW50ID0gbV9jYXJl
dFBhaW50OwotICAgIGlmIChzZWxlY3Rpb24oKS0+aXNDYXJldEJsaW5raW5nU3VzcGVuZGVkKCkg
JiYgY2FyZXRQYWludCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2FyZXRQYWludCA9ICFjYXJl
dFBhaW50OwotICAgIHNlbGVjdGlvbigpLT5pbnZhbGlkYXRlQ2FyZXRSZWN0KCk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBGcmFtZTo6cGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqIHAsIGludCB0eCwg
aW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoVEVY
VF9DQVJFVCkKLSAgICBpZiAobV9jYXJldFBhaW50ICYmIG1fY2FyZXRWaXNpYmxlKQotICAgICAg
ICBzZWxlY3Rpb24oKS0+cGFpbnRDYXJldChwLCB0eCwgdHksIGNsaXBSZWN0KTsKLSNlbmRpZgot
fQotCi12b2lkIEZyYW1lOjpwYWludERyYWdDYXJldChHcmFwaGljc0NvbnRleHQqIHAsIGludCB0
eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgY29uc3QKLXsKLSNpZiBFTkFCTEUo
VEVYVF9DQVJFVCkKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBkcmFnQ2FyZXRDb250cm9sbGVy
ID0gbV9wYWdlLT5kcmFnQ2FyZXRDb250cm9sbGVyKCk7Ci0gICAgQVNTRVJUKGRyYWdDYXJldENv
bnRyb2xsZXItPnNlbGVjdGlvbigpLmlzQ2FyZXQoKSk7Ci0gICAgaWYgKGRyYWdDYXJldENvbnRy
b2xsZXItPnNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpID09
IHRoaXMpCi0gICAgICAgIGRyYWdDYXJldENvbnRyb2xsZXItPnBhaW50Q2FyZXQocCwgdHgsIHR5
LCBjbGlwUmVjdCk7Ci0jZW5kaWYKLX0KLQogZmxvYXQgRnJhbWU6Onpvb21GYWN0b3IoKSBjb25z
dAogewogICAgIHJldHVybiBtX3pvb21GYWN0b3I7CkBAIC03NjUsMTYgKzU4NCw2IEBAIHZvaWQg
RnJhbWU6OnJlYXBwbHlTdHlsZXMoKQogICAgICAgICBtX2RvYy0+dXBkYXRlU3R5bGVTZWxlY3Rv
cigpOwogfQogCi1ib29sIEZyYW1lOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0
aW9uJiBuZXdTZWxlY3Rpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVkaXRvcigpLT5zaG91bGRD
aGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLCBuZXdTZWxlY3Rpb24sIG5l
d1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7Ci19Ci0KLWJvb2wgRnJhbWU6OnNob3VsZERl
bGV0ZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZWRpdG9yKCktPmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9S
YW5nZSgpLmdldCgpKTsKLX0KLQogYm9vbCBGcmFtZTo6aXNDb250ZW50RWRpdGFibGUoKSBjb25z
dCAKIHsKICAgICBpZiAobV9lZGl0b3IuY2xpZW50SXNFZGl0YWJsZSgpKQpAQCAtNzg0LDM1ICs1
OTMsNiBAQCBib29sIEZyYW1lOjppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fZG9jLT5pbkRlc2lnbk1vZGUoKTsKIH0KIAotI2lmICFQTEFURk9STShNQUMpCi0KLXZvaWQg
RnJhbWU6OnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnkoYm9vbCkKLXsKLX0KLQotI2VuZGlmCi0K
LXZvaWQgRnJhbWU6OnVwZGF0ZVNlY3VyZUtleWJvYXJkRW50cnlJZkFjdGl2ZSgpCi17Ci0gICAg
aWYgKHNlbGVjdGlvbigpLT5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKLSAgICAgICAgc2V0VXNlU2Vj
dXJlS2V5Ym9hcmRFbnRyeShtX2RvYy0+dXNlU2VjdXJlS2V5Ym9hcmRFbnRyeVdoZW5BY3RpdmUo
KSk7Ci19Ci0KLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpGcmFtZTo6dHlwaW5nU3R5bGUo
KSBjb25zdAotewotICAgIHJldHVybiBtX3R5cGluZ1N0eWxlLmdldCgpOwotfQotCi12b2lkIEZy
YW1lOjpzZXRUeXBpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpCi17
Ci0gICAgbV90eXBpbmdTdHlsZSA9IHN0eWxlOwotfQotCi12b2lkIEZyYW1lOjpjbGVhclR5cGlu
Z1N0eWxlKCkKLXsKLSAgICBtX3R5cGluZ1N0eWxlID0gMDsKLX0KLQogI2lmbmRlZiBOREVCVUcK
IHN0YXRpYyBIYXNoU2V0PEZyYW1lKj4mIGtlZXBBbGl2ZVNldCgpCiB7CkBAIC05MTYsMzkgKzY5
Niw2IEBAIHZvaWQgRnJhbWU6OnNldEV4Y2x1ZGVGcm9tVGV4dFNlYXJjaChib29sIGV4Y2x1ZGUp
CiAgICAgbV9leGNsdWRlRnJvbVRleHRTZWFyY2ggPSBleGNsdWRlOwogfQogCi0vLyByZXR1cm5z
IEZsb2F0UmVjdCBiZWNhdXNlIGdvaW5nIHRocm91Z2ggSW50UmVjdCB3b3VsZCB0cnVuY2F0ZSBh
bnkgZmxvYXRzCi1GbG9hdFJlY3QgRnJhbWU6OnNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zp
c2libGVDb250ZW50KSBjb25zdAotewotICAgIFJlbmRlclZpZXcqIHJvb3QgPSBjb250ZW50UmVu
ZGVyZXIoKTsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3ZpZXcuZ2V0KCk7Ci0gICAgaWYgKCFy
b290IHx8ICF2aWV3KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIAotICAgIEludFJl
Y3Qgc2VsZWN0aW9uUmVjdCA9IHJvb3QtPnNlbGVjdGlvbkJvdW5kcyhjbGlwVG9WaXNpYmxlQ29u
dGVudCk7Ci0gICAgcmV0dXJuIGNsaXBUb1Zpc2libGVDb250ZW50ID8gaW50ZXJzZWN0aW9uKHNl
bGVjdGlvblJlY3QsIHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpKSA6IHNlbGVjdGlvblJlY3Q7
Ci19Ci0KLXZvaWQgRnJhbWU6OnNlbGVjdGlvblRleHRSZWN0cyhWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgUmVuZGVyVmll
dyogcm9vdCA9IGNvbnRlbnRSZW5kZXJlcigpOwotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uKCktPnRv
UmFuZ2UoKTsKLQotICAgIFZlY3RvcjxJbnRSZWN0PiBpbnRSZWN0czsKLSAgICBzZWxlY3RlZFJh
bmdlLT5hZGRMaW5lQm94UmVjdHMoaW50UmVjdHMsIHRydWUpOwotCi0gICAgdW5zaWduZWQgc2l6
ZSA9IGludFJlY3RzLnNpemUoKTsKLSAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0g
bV92aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQotICAgICAgICBpZiAoY2xpcFRvVmlzaWJsZUNvbnRlbnQpCi0gICAgICAg
ICAgICByZWN0cy5hcHBlbmQoaW50ZXJzZWN0aW9uKGludFJlY3RzW2ldLCB2aXNpYmxlQ29udGVu
dFJlY3QpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGludFJlY3Rz
W2ldKTsKLX0KLQotCiAvLyBTY2FucyBsb2dpY2FsbHkgZm9yd2FyZCBmcm9tICJzdGFydCIsIGlu
Y2x1ZGluZyBhbnkgY2hpbGQgZnJhbWVzCiBzdGF0aWMgSFRNTEZvcm1FbGVtZW50ICpzY2FuRm9y
Rm9ybShOb2RlICpzdGFydCkKIHsKQEAgLTk2OCw3MSArNzE1LDYgQEAgc3RhdGljIEhUTUxGb3Jt
RWxlbWVudCAqc2NhbkZvckZvcm0oTm9kZSAqc3RhcnQpCiB9CiAKIC8vIFdlIGxvb2sgZm9yIGVp
dGhlciB0aGUgZm9ybSBjb250YWluaW5nIHRoZSBjdXJyZW50IGZvY3VzLCBvciBmb3Igb25lIGlt
bWVkaWF0ZWx5IGFmdGVyIGl0Ci1IVE1MRm9ybUVsZW1lbnQgKkZyYW1lOjpjdXJyZW50Rm9ybSgp
IGNvbnN0Ci17Ci0gICAgLy8gc3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhlIGFjdGl2ZSAoZmly
c3QgcmVzcG9uZGVyKSBub2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlzCi0gICAgTm9kZSAq
c3RhcnQgPSBtX2RvYyA/IG1fZG9jLT5mb2N1c2VkTm9kZSgpIDogMDsKLSAgICBpZiAoIXN0YXJ0
KQotICAgICAgICBzdGFydCA9IHNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKTsKLSAgICAKLSAg
ICAvLyB0cnkgd2Fsa2luZyB1cCB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVsZW1lbnQK
LSAgICBOb2RlICpuOwotICAgIGZvciAobiA9IHN0YXJ0OyBuOyBuID0gbi0+cGFyZW50Tm9kZSgp
KSB7Ci0gICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KG4pOwotICAgICAgICBlbHNlIGlmIChu
LT5pc0hUTUxFbGVtZW50KCkKLSAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudCo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihuKS0+Zm9ybSgpOwotICAgIH0K
LSAgICAKLSAgICAvLyB0cnkgd2Fsa2luZyBmb3J3YXJkIGluIHRoZSBub2RlIHRyZWUgdG8gZmlu
ZCBhIGZvcm0gZWxlbWVudAotICAgIHJldHVybiBzdGFydCA/IHNjYW5Gb3JGb3JtKHN0YXJ0KSA6
IDA7Ci19Ci0KLS8vIEZJWE1FOiBzaG91bGQgdGhpcyBnbyBpbiBTZWxlY3Rpb25Db250cm9sbGVy
Pwotdm9pZCBGcmFtZTo6cmV2ZWFsU2VsZWN0aW9uKGNvbnN0IFJlbmRlckxheWVyOjpTY3JvbGxB
bGlnbm1lbnQmIGFsaWdubWVudCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3Q7Ci0gICAgCi0g
ICAgc3dpdGNoIChzZWxlY3Rpb24oKS0+c3RhdGUoKSkgewotICAgICAgICBjYXNlIFNlbGVjdGlv
bjo6Tk9ORToKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IFNlbGVjdGlvbjo6Q0FSRVQ6Ci0gICAgICAgICAgICByZWN0ID0gc2VsZWN0aW9uKCktPmFic29s
dXRlQ2FyZXRCb3VuZHMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKLSAgICAgICAgICAgIHJlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KHNlbGVjdGlvbkJvdW5kcyhmYWxzZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgUG9zaXRpb24gc3RhcnQgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKTsKLQotICAgIEFT
U0VSVChzdGFydC5ub2RlKCkpOwotICAgIGlmIChzdGFydC5ub2RlKCkgJiYgc3RhcnQubm9kZSgp
LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgb25seSBoYW5kbGVz
IHNjcm9sbGluZyB0aGUgc3RhcnRDb250YWluZXIncyBsYXllciwgYnV0Ci0gICAgICAgIC8vIHRo
ZSBzZWxlY3Rpb24gcmVjdCBjb3VsZCBpbnRlcnNlY3QgbW9yZSB0aGFuIGp1c3QgdGhhdC4gCi0g
ICAgICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNDc5OTg5OT4uCi0gICAgICAgIGlmIChSZW5k
ZXJMYXllciAqbGF5ZXIgPSBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVy
KCkpCi0gICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBmYWxzZSwg
YWxpZ25tZW50LCBhbGlnbm1lbnQpOwotICAgIH0KLX0KLQotdm9pZCBGcmFtZTo6cmV2ZWFsQ2Fy
ZXQoY29uc3QgUmVuZGVyTGF5ZXI6OlNjcm9sbEFsaWdubWVudCYgYWxpZ25tZW50KSBjb25zdAot
ewotICAgIGlmIChzZWxlY3Rpb24oKS0+aXNOb25lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFBvc2l0aW9uIGV4dGVudCA9IHNlbGVjdGlvbigpLT5leHRlbnQoKTsKLSAgICBpZiAoZXh0ZW50
Lm5vZGUoKSAmJiBleHRlbnQubm9kZSgpLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIEludFJlY3Qg
ZXh0ZW50UmVjdCA9IFZpc2libGVQb3NpdGlvbihleHRlbnQpLmFic29sdXRlQ2FyZXRCb3VuZHMo
KTsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZXh0ZW50Lm5vZGUoKS0+cmVuZGVyZXIo
KS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKGxheWVyKQotICAgICAgICAgICAgbGF5
ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUoZXh0ZW50UmVjdCwgZmFsc2UsIGFsaWdubWVudCwgYWxp
Z25tZW50KTsKLSAgICB9Ci19Ci0KIEZyYW1lKiBGcmFtZTo6ZnJhbWVGb3JXaWRnZXQoY29uc3Qg
V2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgQVNTRVJUX0FSRyh3aWRnZXQsIHdpZGdldCk7CkBAIC0x
MDY1LDIxICs3NDcsNiBAQCB2b2lkIEZyYW1lOjpjbGVhclRpbWVycygpCiAgICAgY2xlYXJUaW1l
cnMobV92aWV3LmdldCgpLCBkb2N1bWVudCgpKTsKIH0KIAotdm9pZCBGcmFtZTo6c2V0U2VsZWN0
aW9uRnJvbU5vbmUoKQotewotICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9keSBpZiB0
aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRhYmxlIChlaXRoZXIgdGhlIAotICAgIC8vIGVudGlyZSBX
ZWJWaWV3IGlzIGVkaXRhYmxlIG9yIGRlc2lnbk1vZGUgaXMgb24gZm9yIHRoaXMgZG9jdW1lbnQp
LgotICAgIERvY3VtZW50ICpkb2MgPSBkb2N1bWVudCgpOwotICAgIGlmICghZG9jIHx8ICFzZWxl
Y3Rpb24oKS0+aXNOb25lKCkgfHwgIWlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgTm9kZSogbm9kZSA9IGRvYy0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0g
ICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpCi0gICAgICAgIG5v
ZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7Ci0gICAgaWYgKG5vZGUpCi0gICAgICAgIHNl
bGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKFBvc2l0aW9uKG5vZGUsIDApLCBET1dO
U1RSRUFNKSk7Ci19Ci0KIGJvb2wgRnJhbWU6OmluVmlld1NvdXJjZU1vZGUoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2luVmlld1NvdXJjZU1vZGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuaCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IGJhNDYwYzcuLjc3YjAwY2YgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZS5o
CkBAIC0xOTAsNDggKzE5MCw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcganNTdGF0dXNCYXJUZXh0
KCkgY29uc3Q7CiAgICAgU3RyaW5nIGpzRGVmYXVsdFN0YXR1c0JhclRleHQoKSBjb25zdDsKIAot
ICAgIAotLy8gPT09IHRvIGJlIG1vdmVkIGludG8gU2VsZWN0aW9uQ29udHJvbGxlcgotCi1wdWJs
aWM6Ci0gICAgVGV4dEdyYW51bGFyaXR5IHNlbGVjdGlvbkdyYW51bGFyaXR5KCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRTZWxlY3Rpb25HcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkpOwotCi0gICAg
Ym9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJikgY29uc3Q7Ci0gICAg
Ym9vbCBzaG91bGREZWxldGVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJikgY29uc3Q7Ci0gICAg
dm9pZCBjbGVhckNhcmV0UmVjdElmTmVlZGVkKCk7Ci0gICAgdm9pZCBzZXRGb2N1c2VkTm9kZUlm
TmVlZGVkKCk7Ci0gICAgdm9pZCBzZWxlY3Rpb25MYXlvdXRDaGFuZ2VkKCk7Ci0gICAgdm9pZCBu
b3RpZnlSZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdlKGJvb2wgdXNlclRyaWdnZXJlZCk7Ci0KLSAg
ICB2b2lkIGludmFsaWRhdGVTZWxlY3Rpb24oKTsKLQotICAgIHZvaWQgc2V0Q2FyZXRWaXNpYmxl
KGJvb2wgPSB0cnVlKTsKLSAgICB2b2lkIHBhaW50Q2FyZXQoR3JhcGhpY3NDb250ZXh0KiwgaW50
IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdDsgIAotICAgIHZvaWQg
cGFpbnREcmFnQ2FyZXQoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0KSBjb25zdDsKLQogICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBj
b25zdDsgLy8gaWYgdHJ1ZSwgZXZlcnl0aGluZyBpbiBmcmFtZSBpcyBlZGl0YWJsZQogCi0gICAg
dm9pZCB1cGRhdGVTZWN1cmVLZXlib2FyZEVudHJ5SWZBY3RpdmUoKTsKLQotICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlw
aW5nU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKLSAgICB2b2lkIGNsZWFyVHlw
aW5nU3R5bGUoKTsKLQotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9W
aXNpYmxlQ29udGVudCA9IHRydWUpIGNvbnN0OwotICAgIHZvaWQgc2VsZWN0aW9uVGV4dFJlY3Rz
KFZlY3RvcjxGbG9hdFJlY3Q+JiwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIGNv
bnN0OwotCi0gICAgSFRNTEZvcm1FbGVtZW50KiBjdXJyZW50Rm9ybSgpIGNvbnN0OwotCi0gICAg
dm9pZCByZXZlYWxTZWxlY3Rpb24oY29uc3QgUmVuZGVyTGF5ZXI6OlNjcm9sbEFsaWdubWVudCYg
PSBSZW5kZXJMYXllcjo6Z0FsaWduQ2VudGVySWZOZWVkZWQpIGNvbnN0OwotICAgIHZvaWQgcmV2
ZWFsQ2FyZXQoY29uc3QgUmVuZGVyTGF5ZXI6OlNjcm9sbEFsaWdubWVudCYgPSBSZW5kZXJMYXll
cjo6Z0FsaWduQ2VudGVySWZOZWVkZWQpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VsZWN0aW9uRnJv
bU5vbmUoKTsKLQotICAgIHZvaWQgc2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShib29sKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIGNhcmV0QmxpbmtUaW1lckZpcmVkKFRpbWVyPEZyYW1lPiopOwot
CiBwdWJsaWM6CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogZHJhZ0NhcmV0Q29udHJvbGxlcigp
IGNvbnN0OwogCkBAIC0yOTcsMjEgKzI1NywxMyBAQCBwcml2YXRlOgogCiAgICAgZmxvYXQgbV96
b29tRmFjdG9yOwogCi0gICAgVGV4dEdyYW51bGFyaXR5IG1fc2VsZWN0aW9uR3JhbnVsYXJpdHk7
Ci0KICAgICBtdXRhYmxlIFNlbGVjdGlvbkNvbnRyb2xsZXIgbV9zZWxlY3Rpb25Db250cm9sbGVy
OwotICAgIFRpbWVyPEZyYW1lPiBtX2NhcmV0QmxpbmtUaW1lcjsKICAgICBtdXRhYmxlIEVkaXRv
ciBtX2VkaXRvcjsKICAgICBtdXRhYmxlIEV2ZW50SGFuZGxlciBtX2V2ZW50SGFuZGxlcjsKICAg
ICBtdXRhYmxlIEFuaW1hdGlvbkNvbnRyb2xsZXIgbV9hbmltYXRpb25Db250cm9sbGVyOwogCi0g
ICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3R5cGluZ1N0eWxlOwotCiAg
ICAgVGltZXI8RnJhbWU+IG1fbGlmZVN1cHBvcnRUaW1lcjsKIAotICAgIGJvb2wgbV9jYXJldFZp
c2libGU7Ci0gICAgYm9vbCBtX2NhcmV0UGFpbnQ7Ci0gICAgCiAgICAgYm9vbCBtX2luVmlld1Nv
dXJjZU1vZGU7CiAgICAgYm9vbCBtX25lZWRzUmVhcHBseVN0eWxlczsKICAgICBib29sIG1faXNE
aXNjb25uZWN0ZWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDE3OTk4NTMuLmIwYTUzNWEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVk
ZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTUyNiw3ICs1MjcsNyBAQCB2b2lkIEZyYW1lVmll
dzo6bGF5b3V0KGJvb2wgYWxsb3dTdWJ0cmVlKQogICAgICAgICByb290LT52aWV3KCktPnBvcExh
eW91dFN0YXRlKCk7CiAgICAgbV9sYXlvdXRSb290ID0gMDsKIAotICAgIG1fZnJhbWUtPmludmFs
aWRhdGVTZWxlY3Rpb24oKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aW52YWxpZGF0ZVNl
bGVjdGlvbigpOwogICAgCiAgICAgbV9sYXlvdXRTY2hlZHVsaW5nRW5hYmxlZCA9IHRydWU7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0gYi9XZWJDb3JlL3BhZ2Uv
bWFjL0ZyYW1lTWFjLm1tCmluZGV4IDhmMTZlM2IuLmY0NWFiMjMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KKysrIGIvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5t
bQpAQCAtMzE2LDcgKzMxNiw3IEBAIE5TSW1hZ2UqIEZyYW1lOjpzZWxlY3Rpb25JbWFnZShib29s
IGZvcmNlQmxhY2tUZXh0KSBjb25zdAogewogICAgIG1fdmlldy0+c2V0UGFpbnRSZXN0cmljdGlv
bihmb3JjZUJsYWNrVGV4dCA/IFBhaW50UmVzdHJpY3Rpb25TZWxlY3Rpb25Pbmx5QmxhY2tUZXh0
IDogUGFpbnRSZXN0cmljdGlvblNlbGVjdGlvbk9ubHkpOwogICAgIG1fZG9jLT51cGRhdGVMYXlv
dXQoKTsKLSAgICBOU0ltYWdlKiByZXN1bHQgPSBpbWFnZUZyb21SZWN0KHNlbGVjdGlvbkJvdW5k
cygpKTsKKyAgICBOU0ltYWdlKiByZXN1bHQgPSBpbWFnZUZyb21SZWN0KHNlbGVjdGlvbigpLT5z
ZWxlY3Rpb25Cb3VuZHMoKSk7CiAgICAgbV92aWV3LT5zZXRQYWludFJlc3RyaWN0aW9uKFBhaW50
UmVzdHJpY3Rpb25Ob25lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDYzLDMwICs0NjMs
NiBAQCBOU1dyaXRpbmdEaXJlY3Rpb24gRnJhbWU6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2Vs
ZWN0aW9uU3RhcnQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWNvbnN0IHNob3J0
IGVuYWJsZVJvbWFuS2V5Ym9hcmRzT25seSA9IC0yMzsKLXZvaWQgRnJhbWU6OnNldFVzZVNlY3Vy
ZUtleWJvYXJkRW50cnkoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSA9PSBJc1NlY3Vy
ZUV2ZW50SW5wdXRFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZW5hYmxlKSB7
Ci0gICAgICAgIEVuYWJsZVNlY3VyZUV2ZW50SW5wdXQoKTsKLSNpZmRlZiBCVUlMRElOR19PTl9U
SUdFUgotICAgICAgICBLZXlTY3JpcHQoZW5hYmxlUm9tYW5LZXlib2FyZHNPbmx5KTsKLSNlbHNl
Ci0gICAgICAgIENGQXJyYXlSZWYgaW5wdXRTb3VyY2VzID0gVElTQ3JlYXRlQVNDSUlDYXBhYmxl
SW5wdXRTb3VyY2VMaXN0KCk7Ci0gICAgICAgIFRTTVNldERvY3VtZW50UHJvcGVydHkoVFNNR2V0
QWN0aXZlRG9jdW1lbnQoKSwga1RTTURvY3VtZW50RW5hYmxlZElucHV0U291cmNlc1Byb3BlcnR5
VGFnLCBzaXplb2YoQ0ZBcnJheVJlZiksICZpbnB1dFNvdXJjZXMpOwotICAgICAgICBDRlJlbGVh
c2UoaW5wdXRTb3VyY2VzKTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIERpc2FibGVT
ZWN1cmVFdmVudElucHV0KCk7Ci0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICAgICAgS2V5
U2NyaXB0KHNtS2V5RW5hYmxlS3liZHMpOwotI2Vsc2UKLSAgICAgICAgVFNNUmVtb3ZlRG9jdW1l
bnRQcm9wZXJ0eShUU01HZXRBY3RpdmVEb2N1bWVudCgpLCBrVFNNRG9jdW1lbnRFbmFibGVkSW5w
dXRTb3VyY2VzUHJvcGVydHlUYWcpOwotI2VuZGlmCi0gICAgfQotfQotCiAjaWYgRU5BQkxFKERB
U0hCT0FSRF9TVVBQT1JUKQogTlNNdXRhYmxlRGljdGlvbmFyeSogRnJhbWU6OmRhc2hib2FyZFJl
Z2lvbnNEaWN0aW9uYXJ5KCkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Ns
aXBib2FyZE1hYy5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQppbmRl
eCBjZmEzMzRiLi4wYTY1Yjc3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlw
Ym9hcmRNYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCkBA
IC0zMTAsNyArMzEwLDcgQEAgdm9pZCBDbGlwYm9hcmRNYWM6OndyaXRlUmFuZ2UoUmFuZ2UqIHJh
bmdlLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKHJhbmdlKTsKICAgICBBU1NFUlQoZnJh
bWUpOwotICAgIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKG1fcGFzdGVib2FyZC5nZXQoKSwg
cmFuZ2UsIGZyYW1lLT5lZGl0b3IoKS0+c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgJiYgZnJh
bWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5LCBmcmFtZSk7Cisg
ICAgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24obV9wYXN0ZWJvYXJkLmdldCgpLCByYW5nZSwg
ZnJhbWUtPmVkaXRvcigpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSAmJiBmcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5LCBmcmFt
ZSk7CiB9CiAgICAgCiB2b2lkIENsaXBib2FyZE1hYzo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKaW5kZXggYjcyZGNkNy4uNjFiOWM1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cApAQCAtMTY1Myw5ICsxNjUzLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDYXJldChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIENhcmV0VHlwZSB0eXAKICAgICAgICAg
b2Zmc2V0Rm9yQ29udGVudHModHgsIHR5KTsKIAogICAgICAgICBpZiAodHlwZSA9PSBDdXJzb3JD
YXJldCkKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnBhaW50Q2FyZXQocGFpbnRJ
bmZvLmNvbnRleHQsIHR4LCB0eSwgcGFpbnRJbmZvLnJlY3QpOworICAgICAgICAgICAgZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnBhaW50Q2FyZXQocGFpbnRJbmZvLmNvbnRleHQs
IHR4LCB0eSwgcGFpbnRJbmZvLnJlY3QpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1
bWVudCgpLT5mcmFtZSgpLT5wYWludERyYWdDYXJldChwYWludEluZm8uY29udGV4dCwgdHgsIHR5
LCBwYWludEluZm8ucmVjdCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxl
Y3Rpb24oKS0+cGFpbnREcmFnQ2FyZXQocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgcGFpbnRJ
bmZvLnJlY3QpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDBj
OGQ2ZjcuLjE3NGE2MzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTg0MSw3ICs4
NDEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChpbnQgeCwgaW50IHksIGJv
b2wgdXBkYXRlU2Nyb2xsYmFycywgYm9vbCByZXBhaQogICAgIC8vIFRoZSBjYXJldCByZWN0IG5l
ZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZwogICAgIEZyYW1lKiBmcmFtZSA9
IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKGZyYW1lKQotICAgICAg
ICBmcmFtZS0+aW52YWxpZGF0ZVNlbGVjdGlvbigpOworICAgICAgICBmcmFtZS0+c2VsZWN0aW9u
KCktPmludmFsaWRhdGVTZWxlY3Rpb24oKTsKIAogICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxs
IHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KICAgICBpZiAocmVwYWludCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmNwcAppbmRleCBhNTgwMWU4Li4wOTk4YTAzIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCkBAIC0yMzMsMTMgKzIzMywxMCBAQCB2b2lk
IFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQp
CiAKICAgICBTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKTsKIAotICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFt
ZSgpKQorICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CiAgICAg
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7Ci0KLSAg
ICAvLyBGSVhNRTogR3JhbnVsYXJpdHkgaXMgc3RvcmVkIHNlcGFyYXRlbHkgb24gdGhlIGZyYW1l
LCBidXQgYWxzbyBpbiB0aGUgc2VsZWN0aW9uIGNvbnRyb2xsZXIuCi0gICAgLy8gVGhlIGdyYW51
bGFyaXR5IGluIHRoZSBzZWxlY3Rpb24gY29udHJvbGxlciBzaG91bGQgYmUgdXNlZCwgYW5kIHRo
ZW4gdGhpcyBsaW5lIG9mIGNvZGUgd291bGQgbm90IGJlIG5lZWRlZC4KLSAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgZnJhbWUtPnNldFNlbGVjdGlv
bkdyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLT5zZXRTZWxlY3Rpb25HcmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSk7Cisg
ICAgfQogfQogCiBTZWxlY3Rpb24gUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdGlvbihpbnQgc3Rh
cnQsIGludCBlbmQpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggNThjZTVmZi4uYzA5
ZjE1ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtNzI2LDcgKzcyNiw3IEBAIHN0YXRpYyBp
bmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZShEb2N1bWVudExvYWRlciogbG9hZGVyKQog
CiAtIChUZXh0R3JhbnVsYXJpdHkpX3NlbGVjdGlvbkdyYW51bGFyaXR5CiB7Ci0gICAgcmV0dXJu
IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCk7CisgICAgcmV0dXJu
IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb25HcmFudWxhcml0eSgp
OwogfQogCiAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSAqKXJhbmdlCkBAIC05
MjEsNyArOTIxLDcgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBhcHBseUNv
bW1hbmQoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5kb2N1bWVudCgpLCBbZnJhZ21lbnQgX2RvY3VtZW50RnJhZ21lbnRdLCBzZWxlY3RSZXBsYWNl
bWVudCwgc21hcnRSZXBsYWNlLCBtYXRjaFN0eWxlKSk7Ci0gICAgX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+cmV2ZWFsU2VsZWN0aW9uKFJlbmRlckxheWVyOjpnQWxpZ25Ub0VkZ2VJZk5lZWRlZCk7Cisg
ICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbihSZW5k
ZXJMYXllcjo6Z0FsaWduVG9FZGdlSWZOZWVkZWQpOwogfQogCiAtICh2b2lkKV9yZXBsYWNlU2Vs
ZWN0aW9uV2l0aE5vZGU6KERPTU5vZGUgKilub2RlIHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNl
bGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2UgbWF0Y2hTdHls
ZTooQk9PTCltYXRjaFN0eWxlCkBAIC05NDksNyArOTQ5LDcgQEAgc3RhdGljIGlubGluZSBXZWJE
YXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSk7Ci0gICAgX3By
aXZhdGUtPmNvcmVGcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKFJlbmRlckxheWVyOjpnQWxpZ25Ub0Vk
Z2VJZk5lZWRlZCk7CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnJldmVh
bFNlbGVjdGlvbihSZW5kZXJMYXllcjo6Z0FsaWduVG9FZGdlSWZOZWVkZWQpOwogfQogCiAtIChW
aXNpYmxlUG9zaXRpb24pX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OihOU1BvaW50KXBvaW50CkBA
IC05OTUsOSArOTk1LDkgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNl
KERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAKIC0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilf
dHlwaW5nU3R5bGUKIHsKLSAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUgfHwgIV9wcml2YXRl
LT5jb3JlRnJhbWUtPnR5cGluZ1N0eWxlKCkpCisgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1l
IHx8ICFfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24gX3dy
YXBDU1NTdHlsZURlY2xhcmF0aW9uOl9wcml2YXRlLT5jb3JlRnJhbWUtPnR5cGluZ1N0eWxlKCkt
PmNvcHkoKS5nZXQoKV07CisgICAgcmV0dXJuIFtET01DU1NTdHlsZURlY2xhcmF0aW9uIF93cmFw
Q1NTU3R5bGVEZWNsYXJhdGlvbjpfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+dHlw
aW5nU3R5bGUoKS0+Y29weSgpLmdldCgpXTsKIH0KIAogLSAodm9pZClfc2V0VHlwaW5nU3R5bGU6
KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB3aXRoVW5kb0FjdGlvbjooRWRpdEFjdGlv
bil1bmRvQWN0aW9uCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJl
c2VudGF0aW9uLm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5t
bQppbmRleCA4OWZhMjY0Li4xMGFmMTU3IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1M
UmVwcmVzZW50YXRpb24ubW0KQEAgLTMxMyw3ICszMTMsNyBAQCBzdGF0aWMgSFRNTElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCogZWxlbWVudCkKIAog
LSAoRE9NRWxlbWVudCAqKWN1cnJlbnRGb3JtCiB7Ci0gICAgcmV0dXJuIGtpdChjb3JlKFtfcHJp
dmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV0pLT5jdXJyZW50Rm9ybSgpKTsKKyAgICByZXR1cm4g
a2l0KGNvcmUoW19wcml2YXRlLT5kYXRhU291cmNlIHdlYkZyYW1lXSktPnNlbGVjdGlvbigpLT5j
dXJyZW50Rm9ybSgpKTsKIH0KIAogLSAoTlNBcnJheSAqKWNvbnRyb2xzSW5Gb3JtOihET01FbGVt
ZW50ICopZm9ybQpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDA3ZWY4MjAuLjQzZDdh
NTUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTIzNTMsNyArMjM1Myw3IEBAIFdF
QkNPUkVfQ09NTUFORCh5YW5rQW5kU2VsZWN0KQogICAgIENPTU1BTkRfUFJPTE9HVUUKIAogICAg
IGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29y
ZUZyYW1lLT5yZXZlYWxTZWxlY3Rpb24oUmVuZGVyTGF5ZXI6OmdBbGlnbkNlbnRlckFsd2F5cyk7
CisgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbihSZW5kZXJM
YXllcjo6Z0FsaWduQ2VudGVyQWx3YXlzKTsKIH0KIAogLSAoTlNDZWxsU3RhdGVWYWx1ZSlzZWxl
Y3Rpb25IYXNTdHlsZTooQ1NTU3R5bGVEZWNsYXJhdGlvbiopc3R5bGUKQEAgLTM3NDMsNyArMzc0
Myw3IEBAIG5vUHJvbWlzZWREYXRhOgogICAgIENPTU1BTkRfUFJPTE9HVUUKIAogICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1l
LT5yZXZlYWxTZWxlY3Rpb24oUmVuZGVyTGF5ZXI6OmdBbGlnbkNlbnRlckFsd2F5cyk7CisgICAg
ICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbihSZW5kZXJMYXllcjo6
Z0FsaWduQ2VudGVyQWx3YXlzKTsKIH0KIAogLSAoTlNEYXRhICopX3NlbGVjdGlvblN0YXJ0Rm9u
dEF0dHJpYnV0ZXNBc1JURgpAQCAtNDY2Miw3ICs0NjYyLDcgQEAgc3RhdGljIEJPT0wgd3JpdGlu
Z0RpcmVjdGlvbktleUJpbmRpbmdzRW5hYmxlZCgpCiAgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXdd
IHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0pCiAgICAgICAgIHJldHVybiBOTzsKICAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1l
ICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7
CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rp
b25HcmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogLSAoTlNFdmVudCAqKV9t
b3VzZURvd25FdmVudApAQCAtNDgxNyw3ICs0ODE3LDcgQEAgc3RhdGljIENHUG9pbnQgY29yZUdy
YXBoaWNzU2NyZWVuUG9pbnRGb3JBcHBLaXRTY3JlZW5Qb2ludChOU1BvaW50IHBvaW50KQogICAg
IC8vIFRoZSBISURpY3Rpb25hcnlXaW5kb3dTaG93IGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBvcmln
aW4sIGluIENHIHNjcmVlbiBjb29yZGluYXRlcywgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0
ZXh0IGluIHRoZSBzZWxlY3Rpb24uCiAgICAgLy8gRklYTUUgNDk0NTgwODogV2UgYXBwcm94aW1h
dGUgdGhpcyBpbiBhIHdheSB0aGF0IHdvcmtzIHdlbGwgd2hlbiBhIHNpbmdsZSB3b3JkIGlzIHNl
bGVjdGVkLCBhbmQgbGVzcyB3ZWxsIGluIHNvbWUgb3RoZXIgY2FzZXMKICAgICAvLyAoYnV0IG5v
IHdvcnNlIHRoYW4gd2UgZGlkIGluIFRpZ2VyKQotICAgIE5TUmVjdCByZWN0ID0gY29yZUZyYW1l
LT5zZWxlY3Rpb25Cb3VuZHMoKTsKKyAgICBOU1JlY3QgcmVjdCA9IGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbkJvdW5kcygpOwogCiAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVz
ID0gW2F0dHJTdHJpbmcgZm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsMSldOwog
ICAgIE5TRm9udCAqZm9udCA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1
dGVOYW1lXTsKQEAgLTU2MzMsNyArNTYzMyw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxp
bmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlCiAt
IChOU1JlY3Qpc2VsZWN0aW9uUmVjdAogewogICAgIGlmIChbc2VsZiBfaGFzU2VsZWN0aW9uXSkK
LSAgICAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkJvdW5kcygpOwor
ICAgICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bkJvdW5kcygpOwogICAgIHJldHVybiBOU1plcm9SZWN0OwogfQogCkBAIC01NjQ0LDcgKzU2NDQs
NyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0
cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZQogICAgIAogICAgIFZlY3RvcjxGbG9hdFJlY3Q+
IGxpc3Q7CiAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQot
ICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvblRleHRSZWN0cyhsaXN0KTsKKyAgICAgICAgY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uVGV4dFJlY3RzKGxpc3QpOwogCiAgICAgdW5z
aWduZWQgc2l6ZSA9IGxpc3Quc2l6ZSgpOwogICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBb
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXSBhdXRvcmVsZWFz
ZV07CkBAIC01NjY5LDcgKzU2NjksNyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhO
U0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZQogLSAoTlNS
ZWN0KXNlbGVjdGlvbkltYWdlUmVjdAogewogICAgIGlmIChbc2VsZiBfaGFzU2VsZWN0aW9uXSkK
LSAgICAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkJvdW5kcygpOwor
ICAgICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bkJvdW5kcygpOwogICAgIHJldHVybiBOU1plcm9SZWN0OwogfQogCmRpZmYgLS1naXQgYS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CmluZGV4IGViOGZkMzMuLjY2OWY3ZDkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC00MTMwLDcg
KzQxMzAsNyBAQCBzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvbUpTVmFs
dWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIGpzVgogICAgICAgICAgICAgICAgIG1haW5G
cmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOwogICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBXZWJWaWV3IGlzIG1hZGUgZWRpdGFibGUgYW5kIHRoZSBzZWxl
Y3Rpb24gaXMgZW1wdHksIHNldCBpdCB0byBzb21ldGhpbmcuCiAgICAgICAgICAgICAgICAgaWYg
KCFbc2VsZiBzZWxlY3RlZERPTVJhbmdlXSkKLSAgICAgICAgICAgICAgICAgICAgbWFpbkZyYW1l
LT5zZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOworICAgICAgICAgICAgICAgICAgICBtYWluRnJhbWUt
PnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQotLSAKMS42LjAuMgoK
</data>
<flag name="review"
          id="12843"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>