<?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>199503</bug_id>
          
          <creation_ts>2019-07-04 13:15:23 -0700</creation_ts>
          <short_desc>[iOS] Crash in WebKit::WebPage::positionInformation via Range::startPosition</short_desc>
          <delta_ts>2019-07-05 14:57:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1550257</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-04 13:15:23 -0700</bug_when>
    <thetext>0   WebKit                        	0x00000001bd8c5304 WebKit::WebPage::positionInformation(WebKit::InteractionInformationRequest const&amp;) + 368 (Optional.h:371)
1   WebKit                        	0x00000001bd8c5300 WebKit::WebPage::positionInformation(WebKit::InteractionInformationRequest const&amp;) + 364 (WebPageIOS.mm:2517)
2   WebKit                        	0x00000001bd8c510c WebKit::WebPage::getPositionInformation(WebKit::InteractionInformationRequest const&amp;, WTF::CompletionHandler&lt;void (WebKit::InteractionInformationAtPosition&amp;&amp;)&gt;&amp;&amp;) + 76 (WebPageIOS.mm:2492)
3   WebKit                        	0x00000001bd9fca78 void IPC::callMemberFunctionImpl&lt;WebKit::WebPage, void (WebKit::WebPage::*)(WebKit::InteractionInformationRequest const&amp;, WTF::CompletionHandler&lt;void (WebKit::InteractionInformationAtPosition&amp;&amp;)&gt;&amp;&amp;), void (WebKit::InteractionInformationAtPosition const&amp;), std::__1::tuple&lt;WebKit::InteractionInformationRequest&gt;, 0ul&gt;(WebKit::WebPage*, void (WebKit::WebPage::*)(WebKit::InteractionInformationRequest const&amp;, WTF::CompletionHandler&lt;void (WebKit::InteractionInformationAtPosition&amp;&amp;)&gt;&amp;&amp;), WTF::CompletionHandler&lt;void (WebKit::InteractionInformationAtPosition const&amp;)&gt;&amp;&amp;, std::__1::tuple&lt;WebKit::InteractionInformationRequest&gt;&amp;&amp;, std::__1::integer_sequence&lt;unsigned long, 0ul&gt;) + 100 (HandleMessage.h:55)
4   WebKit                        	0x00000001bd9e8654 void IPC::handleMessageSynchronous&lt;Messages::WebPage::GetPositionInformation, WebKit::WebPage, void (WebKit::WebPage::*)(WebKit::InteractionInformationRequest const&amp;, WTF::CompletionHandler&lt;void (WebKit::InteractionInformationAtPosition&amp;&amp;)&gt;&amp;&amp;)&gt;(IPC::Connection&amp;, IPC::Decoder&amp;, std::__1::unique_ptr&lt;IPC::Encoder, std::__1::default_delete&lt;IPC::Encoder&gt; &gt;&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(WebKit::InteractionInformationRequest const&amp;, WTF::CompletionHandler&lt;void (WebKit::InteractionInformationAtPosition&amp;&amp;)&gt;&amp;&amp;)) + 164 (HandleMessage.h:61)
5   WebKit                        	0x00000001bd5b9924 IPC::MessageReceiverMap::dispatchSyncMessage(IPC::Connection&amp;, IPC::Decoder&amp;, std::__1::unique_ptr&lt;IPC::Encoder, std::__1::default_delete&lt;IPC::Encoder&gt; &gt;&amp;) + 112 (MessageReceiverMap.cpp:0)
6   WebKit                        	0x00000001bd904224 WebKit::WebProcess::didReceiveSyncMessage(IPC::Connection&amp;, IPC::Decoder&amp;, std::__1::unique_ptr&lt;IPC::Encoder, std::__1::default_delete&lt;IPC::Encoder&gt; &gt;&amp;) + 40 (WebProcess.cpp:732)
7   WebKit                        	0x00000001bd5a73f0 IPC::Connection::dispatchSyncMessage(IPC::Decoder&amp;) + 196 (Connection.cpp:905)
8   WebKit                        	0x00000001bd5a4128 IPC::Connection::dispatchMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;) + 136 (Connection.cpp:1008)
9   WebKit                        	0x00000001bd5a7944 IPC::Connection::dispatchOneIncomingMessage() + 232 (Connection.cpp:1079)
10  JavaScriptCore                	0x00000001c8227534 WTF::RunLoop::performWork() + 276 (Function.h:79)
11  JavaScriptCore                	0x00000001c82277f4 WTF::RunLoop::performWork(void*) + 36 (RunLoopCF.cpp:38)

&lt;rdar://problem/51597945&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550258</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-04 13:16:04 -0700</bug_when>
    <thetext>We’re crashing in startPosition of the composition range:

2517	            RefPtr&lt;Range&gt; compositionRange = frame.editor().compositionRange();
2518	            if (position &lt; compositionRange-&gt;startPosition())
2519	                position = compositionRange-&gt;startPosition();
2520	            else if (position &gt; compositionRange-&gt;endPosition())
2521	                position = compositionRange-&gt;endPosition();

Range’s start Position:
const Position startPosition() const { return m_start.toPosition(); }

inline const Position RangeBoundaryPoint::toPosition() const
{
    ensureOffsetIsValid();
    return createLegacyEditingPosition(m_containerNode.get(), m_offsetInContainer.value());
}

inline void RangeBoundaryPoint::ensureOffsetIsValid() const
{
    if (m_offsetInContainer)
        return;

    ASSERT(m_childBeforeBoundary);
    m_offsetInContainer = m_childBeforeBoundary-&gt;computeNodeIndex() + 1;
}

     0x00000001bd8c52f4:      ldr x0, [x26, #0xc8]
     0x00000001bd8c52f8:      sub x8, x29, #0xb8       ; =0xb8 
     0x00000001bd8c52fc:       bl 0x53037c             ; symbol stub for: WebCore::Editor::compositionRange() const
     0x00000001bd8c5300:     ldur x26, [x29, #-0xb8]
 -&gt;  0x00000001bd8c5304:     ldrb w8, [x26, #0x18]
     0x00000001bd8c5308:      cbz w8, 0x34f314         ; &lt;+384&gt; [inlined] WTF::DumbPtrTraits&lt;WebCore::Node&gt;::unwrap(WebCore::Node* const&amp;) at RefPtr.h:79
     0x00000001bd8c530c:      ldr w2, [x26, #0x1c]
     0x00000001bd8c5310:        b 0x34f334             ; &lt;+416&gt; [inlined] WTF::DumbPtrTraits&lt;WebCore::Node&gt;::unwrap(WebCore::Node* const&amp;) at RefPtr.h:71
     0x00000001bd8c5314:      ldr x0, [x26, #0x20]

0x18 is the location of m_offsetInContainer in Range (24 = 3 pointers down from the address in x26). cbz w8 is std::nullopt check for Optional&lt;unsigned&gt; m_offsetInContainer in RangeBoundaryPoint. This would mean that what’s null is the range object itself.

compositionRange() is only called when frame.editor().hasComposition() is true in WebPage::positionInformation. However, Editor::compositionRange() could return nullptr when start &gt;= end:
RefPtr&lt;Range&gt; Editor::compositionRange() const
{
    if (!m_compositionNode)
        return nullptr;
    unsigned length = m_compositionNode-&gt;length();
    unsigned start = std::min(m_compositionStart, length);
    unsigned end = std::min(std::max(start, m_compositionEnd), length);
    if (start &gt;= end)
        return nullptr;
    return Range::create(m_compositionNode-&gt;document(), m_compositionNode.get(), start, m_compositionNode.get(), end);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550259</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-04 13:17:08 -0700</bug_when>
    <thetext>start &gt;= end condition was introduced when Editor::compositionRange() was initially introduced 12 years ago: https://trac.webkit.org/changeset/25547/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550261</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-04 13:19:59 -0700</bug_when>
    <thetext>I don&apos;t quite understand why compositionRange() needs to return nullptr when start == end. Given we&apos;re clamping end to be start, it seems natural that we may want to return a collapsed Range.

If this behavior is expected of compositionRange(), then alternatively, we should probably update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550262</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-04 13:21:54 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #3)
&gt; I don&apos;t quite understand why compositionRange() needs to return nullptr when
&gt; start == end. Given we&apos;re clamping end to be start, it seems natural that we
&gt; may want to return a collapsed Range.
&gt; 
&gt; If this behavior is expected of compositionRange(), then alternatively, we
&gt; should probably update

focusedElementPositionInformation to exit early (like when frame.editor().hasComposition() returns false) or create a collapsed range at the start when compositionRange() when compositionRange() is nullptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550277</commentid>
    <comment_count>5</comment_count>
      <attachid>373474</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-04 15:56:43 -0700</bug_when>
    <thetext>Created attachment 373474
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550279</commentid>
    <comment_count>6</comment_count>
      <attachid>373474</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-07-04 16:20:23 -0700</bug_when>
    <thetext>Comment on attachment 373474
Fixes the bug

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

LGTM, with a build fix for macOS.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h:551
&gt; +- (void)_ensurePositionInformationAt:(CGPoint)location completion:(void (^)(void))updateBlock WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));

This seems identical to -[WKWebView _requestActivatedElementAtPosition:completionBlock:], except it’s sync instead of async.

Do we need to make a sync position info request for this test, or can we have UIScriptController piggy-back off of the existing _requestActivatedElementAtPosition:completionBlock: SPI in WKWebViewPrivate.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550502</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-05 13:49:42 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #6)
&gt; Comment on attachment 373474 [details]
&gt; Fixes the bug
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=373474&amp;action=review
&gt; 
&gt; LGTM, with a build fix for macOS.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h:551
&gt; &gt; +- (void)_ensurePositionInformationAt:(CGPoint)location completion:(void (^)(void))updateBlock WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
&gt; 
&gt; This seems identical to -[WKWebView
&gt; _requestActivatedElementAtPosition:completionBlock:], except it’s sync
&gt; instead of async.
&gt; 
&gt; Do we need to make a sync position info request for this test, or can we
&gt; have UIScriptController piggy-back off of the existing
&gt; _requestActivatedElementAtPosition:completionBlock: SPI in
&gt; WKWebViewPrivate.h?

Sure, we can do that. It does obtain the activated element information, and I thought it might be better to have an SPI that only updates the position information but it works for this test case so we can do that for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550509</commentid>
    <comment_count>8</comment_count>
      <attachid>373531</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-05 13:59:00 -0700</bug_when>
    <thetext>Created attachment 373531
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550532</commentid>
    <comment_count>9</comment_count>
      <attachid>373531</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-05 14:56:59 -0700</bug_when>
    <thetext>Comment on attachment 373531
Patch

Clearing flags on attachment: 373531

Committed r247180: &lt;https://trac.webkit.org/changeset/247180&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550533</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-05 14:57:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373474</attachid>
            <date>2019-07-04 15:56:43 -0700</date>
            <delta_ts>2019-07-05 13:58:59 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-199503-20190704155642.patch</filename>
            <type>text/plain</type>
            <size>15991</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2OTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTk2ODI0ZjRhZGE4OGNm
YzljOTVhZmY1YjRlZTczOTc5ZmIxNDgxZS4uZTA1N2QyNjQwNjU3NmFkNjhiODEzMmRjYWIyMjE3
OWY2YTY2YzFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTA3LTA0ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFtpT1NdIENyYXNoIGluIFdl
YktpdDo6V2ViUGFnZTo6cG9zaXRpb25JbmZvcm1hdGlvbiB2aWEgUmFuZ2U6OnN0YXJ0UG9zaXRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTUw
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRp
dGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wb3NpdGlvblJh
bmdlIGNvbnN0KTogQWRkZWQgYSBGSVhNRS4KKwogMjAxOS0wNi0yNyAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjQ2ODY5KTog
QVNTRVJUSU9OIEZBSUxFRDogIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgfHwg
cmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0ID09IHJlbmRlcmVy
KCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJGb3JS
ZXBhaW50KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU5Y2YwYTRiZTlkZmQyZmE4NDQ3MDY3MzllMjhlMDJmNThk
Nzc0ZTguLmMxYTUyMTdkNzAxNGY0ZWZkYzg1YTg4MDNkMDEwOWY4MGNhYWY0ZWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMTktMDctMDQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgW2lPU10gQ3Jhc2ggaW4gV2ViS2l0OjpXZWJQYWdlOjpwb3NpdGlv
bkluZm9ybWF0aW9uIHZpYSBSYW5nZTo6c3RhcnRQb3NpdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5NTAzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNyYXNoIHdhcyBjYXVzZWQgYmVjYXVz
ZSBmb2N1c2VkRWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24gYXNzc3VtZXMgRWRpdG9yOjpjb21w
b3NpdGlvblJhbmdlIGlzIG5vdCBudWxsCisgICAgICAgIHdoZW5ldmVyIEVkaXRvcjo6aGFzQ29t
cG9zaXRpb24gcmV0dXJucyB0cnVlLCB3aGljaCBpcyBub3QgbmVjZXNzYXJ5IHRoZSBjYXNlIHdo
ZW4gRWRpdG9yOjptX2NvbXBvc2l0aW9uTm9kZQorICAgICAgICBjb250YWlucyBubyB0ZXh0IChk
YXRhIGlzIG9mIGxlbmd0aCAwKS4KKworICAgICAgICBGaXhlZCB0aGUgY3Jhc2ggYnkgYWRkaW5n
IGFuIGVhcmx5IHJldHVybiBmb3Igd2hlbiBFZGl0b3I6OmNvbXBvc2l0aW9uUmFuZ2UgcmV0dXJu
cyBudWxscHRyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06
CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbkF0OmNvbXBs
ZXRpb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRl
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAg
ICAgICAoV2ViS2l0Ojpmb2N1c2VkRWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24pOgorCiAyMDE5
LTA2LTI3ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZ3Jl
c3Npb24ocjI0NjUyNik6IFN0b3JhZ2VNYW5hZ2VyIHRocmVhZCBoYW5ncwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCmluZGV4IDA1OWUxY2JmOTFmM2ZkNjhmMjUxYTc1MjQyZjA4NzVkNDM0ZGQ3
OTMuLjc5MzQyYzQ5Nzc1M2Q5YTE1MjZlMDU1NTQ5ZmM3Nzk3MjE0YmY2ZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKQEAgLTMwNzcsNiArMzA3Nyw3IEBAIFJlZlB0cjxSYW5nZT4gRWRp
dG9yOjpjb21wb3NpdGlvblJhbmdlKCkgY29uc3QKICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2Nv
bXBvc2l0aW9uTm9kZS0+bGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbiht
X2NvbXBvc2l0aW9uU3RhcnQsIGxlbmd0aCk7CiAgICAgdW5zaWduZWQgZW5kID0gc3RkOjptaW4o
c3RkOjptYXgoc3RhcnQsIG1fY29tcG9zaXRpb25FbmQpLCBsZW5ndGgpOworICAgIC8vIEZJWE1F
OiBXaHkgaXMgdGhpcyBlYXJseSByZXR1cm4gbmVlZWQ/CiAgICAgaWYgKHN0YXJ0ID49IGVuZCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUobV9jb21w
b3NpdGlvbk5vZGUtPmRvY3VtZW50KCksIG1fY29tcG9zaXRpb25Ob2RlLmdldCgpLCBzdGFydCwg
bV9jb21wb3NpdGlvbk5vZGUuZ2V0KCksIGVuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCA4NTdlZjg1N2M1ZGFhYzFmMzk0MGU4MTRj
MTVmYmU2YzgyNDlkYmI0Li41ZDZmNDhmNmZhOWM5YzNmOTQwZjNkN2M3NGVkMTg5ZjE1ZGY3OTZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0K
QEAgLTcyNDYsNiArNzI0NiwxNyBAQCAtICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVw
ZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KHZvaWQgKF4pKHZvaWQpKQogICAgIFtzZWxm
IF9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhv
dXRXYWl0aW5nRm9yUGFpbnRpbmc6WUVTIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6
Tk9dOwogfQogCistICh2b2lkKV9lbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uQXQ6KENHUG9pbnQp
bG9jYXRpb24gY29tcGxldGlvbjoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKK3sKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgIFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvblJl
cXVlc3QgcmVxdWVzdCB7IFdlYkNvcmU6OkludFBvaW50IHsgbG9jYXRpb24gfSB9OworICAgIFtf
Y29udGVudFZpZXcgZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbklzVXBUb0RhdGU6cmVxdWVzdF07
CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxv
Y2spOworI2Vsc2UKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCB1cGRhdGVCbG9jayk7CisjZW5kaWYKK30KKwogLSAodm9pZClfZG9BZnRlck5leHRWaXNpYmxl
Q29udGVudFJlY3RVcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCiB7CiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDkyNjMzMDFkNTlkNjhhZDk1MjgxODRhZWE1
ZTVkODNhNjJlNzlmNzIuLjg4YWQ1MjkxYzg3ZGIxOGUxOTkzMTAxMGE1YzNkMTBlMDVkOWVlNGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQ
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d1ByaXZhdGUuaApAQCAtNTQ4LDYgKzU0OCw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRl
Z2VyLCBfV0tSZWN0RWRnZSkgewogLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRh
dGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTIpLCBpb3MoMTAuMCkpOwogLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVX
aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplRm9yVGVzdGluZzoodm9pZCAoXikodm9pZCkp
dXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAt
ICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTIuMyksIGlvcygxMC4zKSk7CistICh2b2lkKV9lbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9u
QXQ6KENHUG9pbnQpbG9jYXRpb24gY29tcGxldGlvbjoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxv
Y2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
IC0gKHZvaWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlOih2b2lkICheKSh2
b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzKSwgaW9zKDExLjAp
KTsKIAogLSAodm9pZClfZGlzYWJsZUJhY2tGb3J3YXJkU25hcHNob3RWb2xhdGlsaXR5Rm9yVGVz
dGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAuMykpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRl
eCA5MTkwNWEzYWU2MjM5YzYxMzE5YzUyZjRhZjg0ZDM3YWNhNDY5NGY1Li5iNjI2MjA2YWQyZDU2
NDJjOTI4NGQ2MDFiMjA5OTI3N2UzNzdmNWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjQ3OSw2ICsyNDc5LDkgQEAg
c3RhdGljIHZvaWQgZm9jdXNlZEVsZW1lbnRQb3NpdGlvbkluZm9ybWF0aW9uKFdlYlBhZ2UmIHBh
Z2UsIEVsZW1lbnQmIGZvY3VzZWRFbGUKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBm
cmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdHJhaW5lZFBvaW50KTsKIAogICAgIFJl
ZlB0cjxSYW5nZT4gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9u
UmFuZ2UoKTsKKyAgICBpZiAoIWNvbXBvc2l0aW9uUmFuZ2UpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGlmIChwb3NpdGlvbiA8IGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkKICAg
ICAgICAgcG9zaXRpb24gPSBjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CiAgICAg
ZWxzZSBpZiAocG9zaXRpb24gPiBjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGUxNGIxMjM5
NGI1MTBjMTI3OGZmNDgzYjE3ZDU1NmE1ZmJmZjhhNDguLjZjZTdlOTQxNzBjNDhjNzZhZmI2Y2Ex
ZDJiMTBhNTdkNDA2NDljMGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxOS0wNy0wNCAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBbaU9TXSBDcmFzaCBpbiBXZWJLaXQ6OldlYlBh
Z2U6OnBvc2l0aW9uSW5mb3JtYXRpb24gdmlhIFJhbmdlOjpzdGFydFBvc2l0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk1MDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBVSVNjcmlwdENv
bnRyb2xsZXIuZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbklzVXBUb0RhdGVBdC4KKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW06CisgICAgICAg
IChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6ZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbklzVXBU
b0RhdGVBdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1VJU2NyaXB0Q29udHJvbGxl
ck1hYy5tbToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjplbnN1cmVQb3NpdGlv
bkluZm9ybWF0aW9uSXNVcFRvRGF0ZUF0KToKKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJ
U2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsOgorICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6ZW5zdXJlUG9zaXRpb25JbmZvcm1h
dGlvbklzVXBUb0RhdGVBdCk6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENv
bnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRy
b2xsZXI6OmVuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1VwVG9EYXRlQXQpOgorCiAyMDE5LTA2
LTI3ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBVcHN0cmVhbSB1
c2Ugb2YgTUFDQ0FUQUxZU1QKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9V
SVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3Jp
cHRDb250cm9sbGVySU9TLm1tCmluZGV4IGJhMWYzZWRhNzNlZTljYzNmMzkyNTQwNDY0ZGIyMmIw
YTliNzExN2EuLjBhNTllYTJhNjc4MTFiMmVlNGYyZDZjYTRiMGE3NzFkMTlkYzYzMjggMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0K
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQpA
QCAtNjMsNiArNjMsMTEgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OmRvQWZ0ZXJOZXh0U3Rh
YmxlUHJlc2VudGF0aW9uVXBkYXRlKEpTVmFsdWVSZWYgY2FsbGJhY2sKICAgICBkb0FzeW5jVGFz
ayhjYWxsYmFjayk7CiB9CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjplbnN1cmVQb3NpdGlv
bkluZm9ybWF0aW9uSXNVcFRvRGF0ZUF0KGxvbmcgeCwgbG9uZyB5LCBKU1ZhbHVlUmVmIGNhbGxi
YWNrKQoreworICAgIHJldHVybiBkb0FzeW5jVGFzayhjYWxsYmFjayk7Cit9CisKIHZvaWQgVUlT
Y3JpcHRDb250cm9sbGVyOjpkb0FmdGVyVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKEpTVmFsdWVS
ZWYgY2FsbGJhY2spCiB7CiAgICAgZG9Bc3luY1Rhc2soY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KaW5kZXggYWY5NGJl
NTcwMDRkYWQxNmNlYWFjMGY0M2Q0YTg0NTE1OTYxOTdkYy4uZjI2ZDJhMDI0ZDAyMDQzN2ZiZDdi
ZjE0ZTNiN2YyYjVmOGE1OGI4YyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
VUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCkBAIC02MSw2ICs2MSwxMSBAQCB2b2lkIFVJU2NyaXB0
Q29udHJvbGxlcjo6ZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGUoSlNWYWx1ZVJl
ZiBjYWxsYmFjawogICAgIGRvQXN5bmNUYXNrKGNhbGxiYWNrKTsKIH0KIAordm9pZCBVSVNjcmlw
dENvbnRyb2xsZXI6OmVuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1VwVG9EYXRlQXQobG9uZyB4
LCBsb25nIHksIEpTVmFsdWVSZWYgY2FsbGJhY2spCit7CisgICAgZG9Bc3luY1Rhc2soY2FsbGJh
Y2spOworfQorCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6ZG9BZnRlclZpc2libGVDb250ZW50
UmVjdFVwZGF0ZShKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGRvQXN5bmNUYXNrKGNhbGxi
YWNrKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0
L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCmluZGV4IDNi
NjljZGUxMjc1M2Q0MTMwM2M2MTUyOWNmNzZiODQwMmNmYWI0MWYuLjdhZGFmNDBkNjQyMjM5NjM1
YzYzOGY2ZTUyNmM2NTc3MGU3ZTI3MmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFy
ZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKKysrIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRD
b250cm9sbGVyLmlkbApAQCAtNDUsNyArNDUsNyBAQCBpbnRlcmZhY2UgVUlTY3JpcHRDb250cm9s
bGVyIHsKIAogICAgIHZvaWQgZG9BZnRlclByZXNlbnRhdGlvblVwZGF0ZShvYmplY3QgY2FsbGJh
Y2spOyAvLyBDYWxsIHRoZSBjYWxsYmFjayBhZnRlciBzZW5kaW5nIGEgbWVzc2FnZSB0byB0aGUg
V2ViUHJvY2VzcyBhbmQgcmVjZWl2aW5nIGEgc3Vic2VxdWVudCB1cGRhdGUuCiAgICAgdm9pZCBk
b0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZShvYmplY3QgY2FsbGJhY2spOwotCisg
ICAgdm9pZCBlbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZUF0KGxvbmcgeCwgbG9u
ZyB5LCBvYmplY3QgY2FsbGJhY2spOwogICAgIHZvaWQgZG9BZnRlclZpc2libGVDb250ZW50UmVj
dFVwZGF0ZShvYmplY3QgY2FsbGJhY2spOwogCiAgICAgdm9pZCBzaW11bGF0ZUFjY2Vzc2liaWxp
dHlTZXR0aW5nc0NoYW5nZU5vdGlmaWNhdGlvbihvYmplY3QgY2FsbGJhY2spOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9s
bGVyLmNwcCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0
Q29udHJvbGxlci5jcHAKaW5kZXggMWJlZGQ3ZWIxNmY3NDU5NjE2MTk5ODg1YTRmZDIxMGEzZWVi
NzZkNS4uZjM1NGI2NTJiMzNlMjQ3OGRmMmQ1ZDBmMDA2OWU4YTQ0ZTViY2E2MCAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9s
bGVyLmNwcAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNj
cmlwdENvbnRyb2xsZXIuY3BwCkBAIC0xMDEsNiArMTAxLDEwIEBAIHZvaWQgVUlTY3JpcHRDb250
cm9sbGVyOjpkb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZShKU1ZhbHVlUmVmKQog
ewogfQogCit2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6ZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlv
bklzVXBUb0RhdGVBdChsb25nIHgsIGxvbmcgeSwgSlNWYWx1ZVJlZikKK3sKK30KKwogdm9pZCBV
SVNjcmlwdENvbnRyb2xsZXI6OmRvQWZ0ZXJWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUoSlNWYWx1
ZVJlZikKIHsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRD
b250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNj
cmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKaW5kZXggMGJlZGMwNGExMmVjNGFjM2My
MzQwYjQwN2Q3N2UwYjBlY2VkYjhhNy4uYzgzYzhkMmRmOTAzNzg1Mjc4NmRjZDdhYmE3Yjk0NzUy
MGY1YzQ3YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRl
eHQvVUlTY3JpcHRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNj
cmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKQEAgLTY3LDYgKzY3LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZG9Bc3luY1Rhc2soSlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAgICAgdm9pZCBk
b0FmdGVyUHJlc2VudGF0aW9uVXBkYXRlKEpTVmFsdWVSZWYgY2FsbGJhY2spOwogICAgIHZvaWQg
ZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGUoSlNWYWx1ZVJlZiBjYWxsYmFjayk7
CisgICAgdm9pZCBlbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZUF0KGxvbmcgeCwg
bG9uZyB5LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKICAgICB2b2lkIGRvQWZ0ZXJWaXNpYmxlQ29u
dGVudFJlY3RVcGRhdGUoSlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAKICAgICB2b2lkIHpvb21Ub1Nj
YWxlKGRvdWJsZSBzY2FsZSwgSlNWYWx1ZVJlZiBjYWxsYmFjayk7CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KaW5kZXggOTkzMzE1
MDUwM2Y0ODlkNTY3ODExYTM1MTMyYzVlZDVjNWE0NzdjOS4uODVkMWYzNThmMTI4MjgxMzk5NGEw
N2I3MmJlNjNmZWRhNDRmNDkyYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
aW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQpAQCAtMTU3LDYgKzE1NywxOCBAQCB2b2lkIFVJ
U2NyaXB0Q29udHJvbGxlcjo6ZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGUoSlNW
YWx1ZVJlZiBjYWxsYmFjawogICAgIH1dOwogfQogCit2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6
ZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbklzVXBUb0RhdGVBdChsb25nIHgsIGxvbmcgeSwgSlNW
YWx1ZVJlZiBjYWxsYmFjaykKK3sKKyAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3ID0g
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygp
OworCisgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG1fY29udGV4dC0+cHJlcGFyZUZvckFzeW5j
VGFzayhjYWxsYmFjaywgQ2FsbGJhY2tUeXBlTm9uUGVyc2lzdGVudCk7CisgICAgW3dlYlZpZXcg
X2Vuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25BdDpDR1BvaW50TWFrZSh4LCB5KSBjb21wbGV0aW9u
Ol4oKSB7CisgICAgICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBtX2NvbnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNrSUQpOworICAgIH1dOwor
fQorCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6ZG9BZnRlclZpc2libGVDb250ZW50UmVjdFVw
ZGF0ZShKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndl
YlZpZXcgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGxhdGZv
cm1WaWV3KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYWY2MWIxMTM3ZDhhYjYyYmE3YzMyZjhiMDhmNTc3ZWNiN2YzODRi
ZS4uMTY5N2RlMDdhNjU5ODU4MDYxMzMxOWUzYjBhYmMxZDM5YmU3ODhmZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDE5LTA3LTA0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFtpT1NdIENyYXNoIGluIFdlYktpdDo6V2ViUGFnZTo6cG9zaXRpb25JbmZvcm1h
dGlvbiB2aWEgUmFuZ2U6OnN0YXJ0UG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTUwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgcmVncmVzc2lvbiB0ZXN0IGZvciB0aGUgY3Jh
c2guCisKKyAgICAgICAgKiBlZGl0aW5nL2lucHV0L2RlbGV0ZS10ZXh0LWluLWNvbXBvc2l0aW9u
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9pbnB1dC9kZWxldGUtdGV4
dC1pbi1jb21wb3NpdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiByZXNvdXJjZXMvdWktaGVs
cGVyLmpzOgorICAgICAgICAod2luZG93LlVJSGVscGVyLmVuc3VyZVBvc2l0aW9uSW5mb3JtYXRp
b25VcGRhdGVGb3JFbGVtZW50KTogQWRkZWQuCisKIDIwMTktMDYtMjcgIFJ1c3NlbGwgRXBzdGVp
biAgPHJ1c3NlbGxfZUBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0IFRlc3QgZmFzdC9wYXJz
ZXIvcGFyc2VyLXlpZWxkLXRpbWluZy5odG1sIHdhcyBmbGFreSBkdWUgdG8gc3RyaWN0IHRvbGVy
YW5jZSwgaW5jcmVhc2VkIHRvbGVyYW5jZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRp
bmcvaW5wdXQvZGVsZXRlLXRleHQtaW4tY29tcG9zaXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZWRpdGluZy9pbnB1dC9kZWxldGUtdGV4dC1pbi1jb21wb3NpdGlvbi1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWQxMTJlNjJkNWY0MDJiMmUwNTJjZWZjMjgzNzJjZWU3YmY5Y2M3Nwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvZGVsZXRlLXRleHQt
aW4tY29tcG9zaXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitUaGlzIHRlc3RzIGRlbGV0aW5n
IHRoZSBjb21wb3NpdGlvbiB0ZXh0IGRvZXMgbm90IHJlc3VsdCBpbiBhIGNyYXNoLgorVG8gbWFu
dWFsbHkgdGVzdCwgdHlwZSBpbiB0aGUgYm94IGJlbG93IHVzaW5nIGlucHV0IG1ldGhvZCAoZS5n
LiBKYXBhbmVzZSBvciBDaGluZXNlKS4gV2ViS2l0IG9uIGlPUyBzaG91bGQgbm90IGNyYXNoLgor
CitQQVNTIC0gV2ViS2l0IGRpZCBub3QgY3Jhc2gKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Vk
aXRpbmcvaW5wdXQvZGVsZXRlLXRleHQtaW4tY29tcG9zaXRpb24uaHRtbCBiL0xheW91dFRlc3Rz
L2VkaXRpbmcvaW5wdXQvZGVsZXRlLXRleHQtaW4tY29tcG9zaXRpb24uaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mYWE4MjI5MzlkOWQ1OThlNDk4ZjcyYjAzYzljM2I2MjUzNWZlMmMyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9kZWxldGUtdGV4dC1pbi1jb21wb3NpdGlv
bi5odG1sCkBAIC0wLDAgKzEsMzYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4K
KzxwPlRoaXMgdGVzdHMgZGVsZXRpbmcgdGhlIGNvbXBvc2l0aW9uIHRleHQgZG9lcyBub3QgcmVz
dWx0IGluIGEgY3Jhc2guPGJyPgorVG8gbWFudWFsbHkgdGVzdCwgdHlwZSBpbiB0aGUgYm94IGJl
bG93IHVzaW5nIGlucHV0IG1ldGhvZCAoZS5nLiBKYXBhbmVzZSBvciBDaGluZXNlKS4gV2ViS2l0
IG9uIGlPUyBzaG91bGQgbm90IGNyYXNoLjwvcD4KKzxkaXYgaWQ9ImVkaXRvciIgc3R5bGU9ImJv
cmRlcjogc29saWQgMnB4IGJsdWU7IHBhZGRpbmc6IDVweDsiIGNvbnRlbnRlZGl0YWJsZT48L2Rp
dj4KKzxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy91aS1o
ZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7
CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7Cit9CisKK2VkaXRvci5mb2N1cygpOworCithc3luYyBmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgIGlmICh3aW5kb3cudGV4dElucHV0Q29udHJvbGxlcikgeworICAgICAgICB0ZXh0SW5w
dXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoImhlbGxvIiwgMCwgNSk7CisgICAgICAgIGF3YWl0
IFVJSGVscGVyLmVuc3VyZVByZXNlbnRhdGlvblVwZGF0ZSgpOworICAgICAgICBlZGl0b3IuZmly
c3RDaGlsZC5kYXRhID0gJyc7CisgICAgICAgIGF3YWl0IFVJSGVscGVyLmVuc3VyZVBvc2l0aW9u
SW5mb3JtYXRpb25VcGRhdGVGb3JFbGVtZW50KGVkaXRvcik7CisgICAgICAgIHJlc3VsdC50ZXh0
Q29udGVudCA9ICdQQVNTIC0gV2ViS2l0IGRpZCBub3QgY3Jhc2gnOworICAgIH0KKyAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKK30KKword2luZG93Lm9ubG9hZCA9IHJ1blRlc3Q7CisKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMgYi9MYXlv
dXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpzCmluZGV4IDllYjk3ZDA3MGVlYjRkMGNkNGM0
Yzg5ZDFlZDg2NTBmNGM1NWNlYmMuLjMwNjkzYjliZWI0MjFhOTA5ZDJhYjQwZDcxNDg5ZDZkNDU2
NTMzNTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMKKysr
IGIvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3VpLWhlbHBlci5qcwpAQCAtMjU0LDYgKzI1NCwyNSBA
QCB3aW5kb3cuVUlIZWxwZXIgPSBjbGFzcyBVSUhlbHBlciB7CiAgICAgICAgIH0pOwogICAgIH0K
IAorICAgIHN0YXRpYyBlbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uVXBkYXRlRm9yRWxlbWVudChl
bGVtZW50KQorICAgIHsKKyAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID0gZWxlbWVudC5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgY29uc3QgeCA9IGJvdW5kaW5nUmVjdC54ICsg
NTsKKyAgICAgICAgY29uc3QgeSA9IGJvdW5kaW5nUmVjdC55ICsgNTsKKworICAgICAgICBpZiAo
IXRoaXMuaXNXZWJLaXQyKCkpIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZGlzcGxheSgpOwor
ICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4geworICAgICAgICAgICAgdGVzdFJ1bm5l
ci5ydW5VSVNjcmlwdChgCisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLmVuc3VyZVBvc2l0
aW9uSW5mb3JtYXRpb25Jc1VwVG9EYXRlQXQoJHt4fSwgJHt5fSwgZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIudWlTY3JpcHRDb21wbGV0ZSgpOworICAgICAg
ICAgICAgICAgIH0pO2AsIHJlc29sdmUpOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBzdGF0
aWMgZGVsYXlGb3IobXMpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2
ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373531</attachid>
            <date>2019-07-05 13:59:00 -0700</date>
            <delta_ts>2019-07-05 14:56:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199503-20190705135859.patch</filename>
            <type>text/plain</type>
            <size>14540</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2OTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTk2ODI0ZjRhZGE4OGNm
YzljOTVhZmY1YjRlZTczOTc5ZmIxNDgxZS4uZTA1N2QyNjQwNjU3NmFkNjhiODEzMmRjYWIyMjE3
OWY2YTY2YzFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTA3LTA0ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFtpT1NdIENyYXNoIGluIFdl
YktpdDo6V2ViUGFnZTo6cG9zaXRpb25JbmZvcm1hdGlvbiB2aWEgUmFuZ2U6OnN0YXJ0UG9zaXRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTUw
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRp
dGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wb3NpdGlvblJh
bmdlIGNvbnN0KTogQWRkZWQgYSBGSVhNRS4KKwogMjAxOS0wNi0yNyAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjQ2ODY5KTog
QVNTRVJUSU9OIEZBSUxFRDogIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgfHwg
cmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0ID09IHJlbmRlcmVy
KCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJGb3JS
ZXBhaW50KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU5Y2YwYTRiZTlkZmQyZmE4NDQ3MDY3MzllMjhlMDJmNThk
Nzc0ZTguLmYzYTllNmI5YjYzYWUwZmE0YzNhNDE2OTgxYzM4MDRmZjFiZmZjYjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMDctMDQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgW2lPU10gQ3Jhc2ggaW4gV2ViS2l0OjpXZWJQYWdlOjpwb3NpdGlv
bkluZm9ybWF0aW9uIHZpYSBSYW5nZTo6c3RhcnRQb3NpdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5NTAzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNyYXNoIHdhcyBjYXVzZWQgYmVjYXVz
ZSBmb2N1c2VkRWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24gYXNzc3VtZXMgRWRpdG9yOjpjb21w
b3NpdGlvblJhbmdlIGlzIG5vdCBudWxsCisgICAgICAgIHdoZW5ldmVyIEVkaXRvcjo6aGFzQ29t
cG9zaXRpb24gcmV0dXJucyB0cnVlLCB3aGljaCBpcyBub3QgbmVjZXNzYXJ5IHRoZSBjYXNlIHdo
ZW4gRWRpdG9yOjptX2NvbXBvc2l0aW9uTm9kZQorICAgICAgICBjb250YWlucyBubyB0ZXh0IChk
YXRhIGlzIG9mIGxlbmd0aCAwKS4KKworICAgICAgICBGaXhlZCB0aGUgY3Jhc2ggYnkgYWRkaW5n
IGFuIGVhcmx5IHJldHVybiBmb3Igd2hlbiBFZGl0b3I6OmNvbXBvc2l0aW9uUmFuZ2UgcmV0dXJu
cyBudWxscHRyLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tOgorICAgICAgICAoV2ViS2l0Ojpmb2N1c2VkRWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24p
OgorCiAyMDE5LTA2LTI3ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlZ3Jlc3Npb24ocjI0NjUyNik6IFN0b3JhZ2VNYW5hZ2VyIHRocmVhZCBoYW5ncwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDA1OWUxY2JmOTFmM2ZkNjhmMjUxYTc1MjQyZjA4
NzVkNDM0ZGQ3OTMuLjc5MzQyYzQ5Nzc1M2Q5YTE1MjZlMDU1NTQ5ZmM3Nzk3MjE0YmY2ZTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTMwNzcsNiArMzA3Nyw3IEBAIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjpjb21wb3NpdGlvblJhbmdlKCkgY29uc3QKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBtX2NvbXBvc2l0aW9uTm9kZS0+bGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgc3RhcnQgPSBz
dGQ6Om1pbihtX2NvbXBvc2l0aW9uU3RhcnQsIGxlbmd0aCk7CiAgICAgdW5zaWduZWQgZW5kID0g
c3RkOjptaW4oc3RkOjptYXgoc3RhcnQsIG1fY29tcG9zaXRpb25FbmQpLCBsZW5ndGgpOworICAg
IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBlYXJseSByZXR1cm4gbmVlZWQ/CiAgICAgaWYgKHN0YXJ0
ID49IGVuZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIFJhbmdlOjpjcmVh
dGUobV9jb21wb3NpdGlvbk5vZGUtPmRvY3VtZW50KCksIG1fY29tcG9zaXRpb25Ob2RlLmdldCgp
LCBzdGFydCwgbV9jb21wb3NpdGlvbk5vZGUuZ2V0KCksIGVuZCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDkxOTA1YTNh
ZTYyMzljNjEzMTljNTJmNGFmODRkMzdhY2E0Njk0ZjUuLmI2MjYyMDZhZDJkNTY0MmM5Mjg0ZDYw
MWIyMDk5Mjc3ZTM3N2Y1YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0yNDc5LDYgKzI0NzksOSBAQCBzdGF0aWMgdm9p
ZCBmb2N1c2VkRWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24oV2ViUGFnZSYgcGFnZSwgRWxlbWVu
dCYgZm9jdXNlZEVsZQogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnZpc2li
bGVQb3NpdGlvbkZvclBvaW50KGNvbnN0cmFpbmVkUG9pbnQpOwogCiAgICAgUmVmUHRyPFJhbmdl
PiBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwor
ICAgIGlmICghY29tcG9zaXRpb25SYW5nZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHBv
c2l0aW9uIDwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKQogICAgICAgICBwb3Np
dGlvbiA9IGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKICAgICBlbHNlIGlmIChw
b3NpdGlvbiA+IGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTE0YjEyMzk0YjUxMGMxMjc4
ZmY0ODNiMTdkNTU2YTVmYmZmOGE0OC4uYWJiZDE5YzJjNjRjOTljODMwMjBlMzgxZTc5NDRlNDFi
YjkyZjFlYSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI2IEBACisyMDE5LTA3LTA0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFtpT1NdIENyYXNoIGluIFdlYktpdDo6V2ViUGFnZTo6cG9zaXRp
b25JbmZvcm1hdGlvbiB2aWEgUmFuZ2U6OnN0YXJ0UG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTUwMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIFVJU2NyaXB0Q29udHJvbGxlci5l
bnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZUF0IHVzaW5nIHRoZSBleGlzdGluZyBX
S1dlYlZpZXcgU1BJOgorICAgICAgICBfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBvc2l0aW9u
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1t
OgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OmVuc3VyZVBvc2l0aW9uSW5mb3Jt
YXRpb25Jc1VwVG9EYXRlQXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9VSVNjcmlw
dENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6ZW5z
dXJlUG9zaXRpb25JbmZvcm1hdGlvbklzVXBUb0RhdGVBdCk6CisgICAgICAgICogVGVzdFJ1bm5l
clNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbDoK
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OmVuc3VyZVBvc2l0
aW9uSW5mb3JtYXRpb25Jc1VwVG9EYXRlQXQpOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQv
VUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VUlT
Y3JpcHRDb250cm9sbGVyOjplbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZUF0KToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW06
CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6ZW5zdXJlUG9zaXRpb25JbmZvcm1h
dGlvbklzVXBUb0RhdGVBdCk6CisKIDIwMTktMDYtMjcgIEJldGggRGFraW4gIDxiZGFraW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFVwc3RyZWFtIHVzZSBvZiBNQUNDQVRBTFlTVApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KaW5kZXggYmEx
ZjNlZGE3M2VlOWNjM2YzOTI1NDA0NjRkYjIyYjBhOWI3MTE3YS4uMGE1OWVhMmE2NzgxMWIyZWU0
ZjJkNmNhNGIwYTc3MWQxOWRjNjMyOCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
aW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBAIC02Myw2ICs2MywxMSBAQCB2b2lkIFVJU2Ny
aXB0Q29udHJvbGxlcjo6ZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGUoSlNWYWx1
ZVJlZiBjYWxsYmFjawogICAgIGRvQXN5bmNUYXNrKGNhbGxiYWNrKTsKIH0KIAordm9pZCBVSVNj
cmlwdENvbnRyb2xsZXI6OmVuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1VwVG9EYXRlQXQobG9u
ZyB4LCBsb25nIHksIEpTVmFsdWVSZWYgY2FsbGJhY2spCit7CisgICAgcmV0dXJuIGRvQXN5bmNU
YXNrKGNhbGxiYWNrKTsKK30KKwogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OmRvQWZ0ZXJWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGUoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBkb0FzeW5j
VGFzayhjYWxsYmFjayk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlT
Y3JpcHRDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJU2NyaXB0
Q29udHJvbGxlck1hYy5tbQppbmRleCBhZjk0YmU1NzAwNGRhZDE2Y2VhYWMwZjQzZDRhODQ1MTU5
NjE5N2RjLi5mMjZkMmEwMjRkMDIwNDM3ZmJkN2JmMTRlM2I3ZjJiNWY4YTU4YjhjIDEwMDY0NAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KQEAg
LTYxLDYgKzYxLDExIEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpkb0FmdGVyTmV4dFN0YWJs
ZVByZXNlbnRhdGlvblVwZGF0ZShKU1ZhbHVlUmVmIGNhbGxiYWNrCiAgICAgZG9Bc3luY1Rhc2so
Y2FsbGJhY2spOwogfQogCit2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6ZW5zdXJlUG9zaXRpb25J
bmZvcm1hdGlvbklzVXBUb0RhdGVBdChsb25nIHgsIGxvbmcgeSwgSlNWYWx1ZVJlZiBjYWxsYmFj
aykKK3sKKyAgICBkb0FzeW5jVGFzayhjYWxsYmFjayk7Cit9CisKIHZvaWQgVUlTY3JpcHRDb250
cm9sbGVyOjpkb0FmdGVyVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKEpTVmFsdWVSZWYgY2FsbGJh
Y2spCiB7CiAgICAgZG9Bc3luY1Rhc2soY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVy
LmlkbCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJ
U2NyaXB0Q29udHJvbGxlci5pZGwKaW5kZXggM2I2OWNkZTEyNzUzZDQxMzAzYzYxNTI5Y2Y3NmI4
NDAyY2ZhYjQxZi4uN2FkYWY0MGQ2NDIyMzk2MzVjNjM4ZjZlNTI2YzY1NzcwZTdlMjcyZSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3Mv
VUlTY3JpcHRDb250cm9sbGVyLmlkbAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCkBAIC00NSw3ICs0NSw3
IEBAIGludGVyZmFjZSBVSVNjcmlwdENvbnRyb2xsZXIgewogCiAgICAgdm9pZCBkb0FmdGVyUHJl
c2VudGF0aW9uVXBkYXRlKG9iamVjdCBjYWxsYmFjayk7IC8vIENhbGwgdGhlIGNhbGxiYWNrIGFm
dGVyIHNlbmRpbmcgYSBtZXNzYWdlIHRvIHRoZSBXZWJQcm9jZXNzIGFuZCByZWNlaXZpbmcgYSBz
dWJzZXF1ZW50IHVwZGF0ZS4KICAgICB2b2lkIGRvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9u
VXBkYXRlKG9iamVjdCBjYWxsYmFjayk7Ci0KKyAgICB2b2lkIGVuc3VyZVBvc2l0aW9uSW5mb3Jt
YXRpb25Jc1VwVG9EYXRlQXQobG9uZyB4LCBsb25nIHksIG9iamVjdCBjYWxsYmFjayk7CiAgICAg
dm9pZCBkb0FmdGVyVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKG9iamVjdCBjYWxsYmFjayk7CiAK
ICAgICB2b2lkIHNpbXVsYXRlQWNjZXNzaWJpbGl0eVNldHRpbmdzQ2hhbmdlTm90aWZpY2F0aW9u
KG9iamVjdCBjYWxsYmFjayk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJ
U2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNo
YXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCAxYmVkZDdl
YjE2Zjc0NTk2MTYxOTk4ODVhNGZkMjEwYTNlZWI3NmQ1Li5mMzU0YjY1MmIzM2UyNDc4ZGYyZDVk
MGYwMDY5ZThhNDRlNWJjYTYwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJ
U2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTEwMSw2
ICsxMDEsMTAgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OmRvQWZ0ZXJOZXh0U3RhYmxlUHJl
c2VudGF0aW9uVXBkYXRlKEpTVmFsdWVSZWYpCiB7CiB9CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9s
bGVyOjplbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZUF0KGxvbmcgeCwgbG9uZyB5
LCBKU1ZhbHVlUmVmKQoreworfQorCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6ZG9BZnRlclZp
c2libGVDb250ZW50UmVjdFVwZGF0ZShKU1ZhbHVlUmVmKQogewogfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgg
Yi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xs
ZXIuaAppbmRleCAwYmVkYzA0YTEyZWM0YWMzYzIzNDBiNDA3ZDc3ZTBiMGVjZWRiOGE3Li5jODNj
OGQyZGY5MDM3ODUyNzg2ZGNkN2FiYTdiOTQ3NTIwZjVjNDdjIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAorKysg
Yi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xs
ZXIuaApAQCAtNjcsNiArNjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkb0FzeW5jVGFzayhKU1Zh
bHVlUmVmIGNhbGxiYWNrKTsKICAgICB2b2lkIGRvQWZ0ZXJQcmVzZW50YXRpb25VcGRhdGUoSlNW
YWx1ZVJlZiBjYWxsYmFjayk7CiAgICAgdm9pZCBkb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlv
blVwZGF0ZShKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKKyAgICB2b2lkIGVuc3VyZVBvc2l0aW9uSW5m
b3JtYXRpb25Jc1VwVG9EYXRlQXQobG9uZyB4LCBsb25nIHksIEpTVmFsdWVSZWYgY2FsbGJhY2sp
OwogICAgIHZvaWQgZG9BZnRlclZpc2libGVDb250ZW50UmVjdFVwZGF0ZShKU1ZhbHVlUmVmIGNh
bGxiYWNrKTsKIAogICAgIHZvaWQgem9vbVRvU2NhbGUoZG91YmxlIHNjYWxlLCBKU1ZhbHVlUmVm
IGNhbGxiYWNrKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2Ny
aXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0
Q29udHJvbGxlcklPUy5tbQppbmRleCA5OTMzMTUwNTAzZjQ4OWQ1Njc4MTFhMzUxMzJjNWVkNWM1
YTQ3N2M5Li4xOGVlOTE4YzYzZmVmNGY1ZjNhZWZlZWVjZjEwNmMxMmNlMWRlMTBhIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0K
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1t
CkBAIC0xNTcsNiArMTU3LDE4IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpkb0FmdGVyTmV4
dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZShKU1ZhbHVlUmVmIGNhbGxiYWNrCiAgICAgfV07CiB9
CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjplbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNV
cFRvRGF0ZUF0KGxvbmcgeCwgbG9uZyB5LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQoreworICAgIFRl
c3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CisKKyAgICB1bnNpZ25lZCBjYWxsYmFja0lE
ID0gbV9jb250ZXh0LT5wcmVwYXJlRm9yQXN5bmNUYXNrKGNhbGxiYWNrLCBDYWxsYmFja1R5cGVO
b25QZXJzaXN0ZW50KTsKKyAgICBbd2ViVmlldyBfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBv
c2l0aW9uOkNHUG9pbnRNYWtlKHgsIHkpIGNvbXBsZXRpb25CbG9jazpeKF9XS0FjdGl2YXRlZEVs
ZW1lbnRJbmZvICopIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG1fY29udGV4dC0+YXN5bmNUYXNrQ29tcGxldGUoY2FsbGJhY2tJRCk7Cisg
ICAgfV07Cit9CisKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpkb0FmdGVyVmlzaWJsZUNvbnRl
bnRSZWN0VXBkYXRlKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgVGVzdFJ1bm5lcldLV2Vi
VmlldyAqd2ViVmlldyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVZpZXcoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFj
L1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJ
U2NyaXB0Q29udHJvbGxlck1hYy5tbQppbmRleCA1NmZhODNmMmZjMTA5ODgwNzg1MjM3YjAzOGI2
MjE3ZmViOWY3N2QzLi5hY2IyNmMyNmQ1NzI3NzFkYTY3NjJiMzk2ODYwY2FmNWZiZGU1Y2VjIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJN
YWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVy
TWFjLm1tCkBAIC01OSw2ICs1OSwxMSBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6ZG9BZnRl
ck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGUoSlNWYWx1ZVJlZiBjYWxsYmFjawogICAgIGRv
QXN5bmNUYXNrKGNhbGxiYWNrKTsKIH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OmVuc3Vy
ZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1VwVG9EYXRlQXQobG9uZywgbG9uZywgSlNWYWx1ZVJlZiBj
YWxsYmFjaykKK3sKKyAgICBkb0FzeW5jVGFzayhjYWxsYmFjayk7Cit9CisKIHZvaWQgVUlTY3Jp
cHRDb250cm9sbGVyOjpkb0FmdGVyVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKEpTVmFsdWVSZWYg
Y2FsbGJhY2spCiB7CiAgICAgZG9Bc3luY1Rhc2soY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGFmNjFiMTEz
N2Q4YWI2MmJhN2MzMmY4YjA4ZjU3N2VjYjdmMzg0YmUuLjE2OTdkZTA3YTY1OTg1ODA2MTMzMTll
M2IwYWJjMWQzOWJlNzg4ZmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOS0wNy0wNCAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBbaU9TXSBDcmFzaCBpbiBX
ZWJLaXQ6OldlYlBhZ2U6OnBvc2l0aW9uSW5mb3JtYXRpb24gdmlhIFJhbmdlOjpzdGFydFBvc2l0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk1
MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBhIHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhlIGNyYXNoLgorCisgICAgICAgICogZWRpdGluZy9p
bnB1dC9kZWxldGUtdGV4dC1pbi1jb21wb3NpdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGVkaXRpbmcvaW5wdXQvZGVsZXRlLXRleHQtaW4tY29tcG9zaXRpb24uaHRtbDogQWRk
ZWQuCisgICAgICAgICogcmVzb3VyY2VzL3VpLWhlbHBlci5qczoKKyAgICAgICAgKHdpbmRvdy5V
SUhlbHBlci5lbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uVXBkYXRlRm9yRWxlbWVudCk6IEFkZGVk
LgorCiAyMDE5LTA2LTI3ICBSdXNzZWxsIEVwc3RlaW4gIDxydXNzZWxsX2VAYXBwbGUuY29tPgog
CiAgICAgICAgIExheW91dCBUZXN0IGZhc3QvcGFyc2VyL3BhcnNlci15aWVsZC10aW1pbmcuaHRt
bCB3YXMgZmxha3kgZHVlIHRvIHN0cmljdCB0b2xlcmFuY2UsIGluY3JlYXNlZCB0b2xlcmFuY2Uu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L2RlbGV0ZS10ZXh0LWluLWNv
bXBvc2l0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvZGVsZXRl
LXRleHQtaW4tY29tcG9zaXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkMTEyZTYyZDVm
NDAyYjJlMDUyY2VmYzI4MzcyY2VlN2JmOWNjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9lZGl0aW5nL2lucHV0L2RlbGV0ZS10ZXh0LWluLWNvbXBvc2l0aW9uLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDcgQEAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorVGhpcyB0ZXN0cyBkZWxldGluZyB0aGUgY29tcG9zaXRpb24gdGV4dCBkb2Vz
IG5vdCByZXN1bHQgaW4gYSBjcmFzaC4KK1RvIG1hbnVhbGx5IHRlc3QsIHR5cGUgaW4gdGhlIGJv
eCBiZWxvdyB1c2luZyBpbnB1dCBtZXRob2QgKGUuZy4gSmFwYW5lc2Ugb3IgQ2hpbmVzZSkuIFdl
YktpdCBvbiBpT1Mgc2hvdWxkIG5vdCBjcmFzaC4KKworUEFTUyAtIFdlYktpdCBkaWQgbm90IGNy
YXNoCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L2RlbGV0ZS10ZXh0LWlu
LWNvbXBvc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L2RlbGV0ZS10ZXh0
LWluLWNvbXBvc2l0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmFhODIyOTM5ZDlkNTk4ZTQ5OGY3MmIw
M2M5YzNiNjI1MzVmZTJjMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcv
aW5wdXQvZGVsZXRlLXRleHQtaW4tY29tcG9zaXRpb24uaHRtbApAQCAtMCwwICsxLDM2IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3RzIGRlbGV0aW5nIHRo
ZSBjb21wb3NpdGlvbiB0ZXh0IGRvZXMgbm90IHJlc3VsdCBpbiBhIGNyYXNoLjxicj4KK1RvIG1h
bnVhbGx5IHRlc3QsIHR5cGUgaW4gdGhlIGJveCBiZWxvdyB1c2luZyBpbnB1dCBtZXRob2QgKGUu
Zy4gSmFwYW5lc2Ugb3IgQ2hpbmVzZSkuIFdlYktpdCBvbiBpT1Mgc2hvdWxkIG5vdCBjcmFzaC48
L3A+Cis8ZGl2IGlkPSJlZGl0b3IiIHN0eWxlPSJib3JkZXI6IHNvbGlkIDJweCBibHVlOyBwYWRk
aW5nOiA1cHg7IiBjb250ZW50ZWRpdGFibGU+PC9kaXY+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4
dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworfQorCitlZGl0b3IuZm9jdXMo
KTsKKworYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LnRleHRJbnB1
dENvbnRyb2xsZXIpIHsKKyAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0
KCJoZWxsbyIsIDAsIDUpOworICAgICAgICBhd2FpdCBVSUhlbHBlci5lbnN1cmVQcmVzZW50YXRp
b25VcGRhdGUoKTsKKyAgICAgICAgZWRpdG9yLmZpcnN0Q2hpbGQuZGF0YSA9ICcnOworICAgICAg
ICBhd2FpdCBVSUhlbHBlci5lbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uVXBkYXRlRm9yRWxlbWVu
dChlZGl0b3IpOworICAgICAgICByZXN1bHQudGV4dENvbnRlbnQgPSAnUEFTUyAtIFdlYktpdCBk
aWQgbm90IGNyYXNoJzsKKyAgICB9CisgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisK
K3dpbmRvdy5vbmxvYWQgPSBydW5UZXN0OworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9yZXNvdXJjZXMvdWktaGVscGVyLmpzIGIvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3VpLWhlbHBl
ci5qcwppbmRleCA5ZWI5N2QwNzBlZWI0ZDBjZDRjNGM4OWQxZWQ4NjUwZjRjNTVjZWJjLi4zMDY5
M2I5YmViNDIxYTkwOWQyYWI0MGQ3MTQ4OWQ2ZDQ1NjUzMzUzIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpzCisrKyBiL0xheW91dFRlc3RzL3Jlc291cmNlcy91
aS1oZWxwZXIuanMKQEAgLTI1NCw2ICsyNTQsMjUgQEAgd2luZG93LlVJSGVscGVyID0gY2xhc3Mg
VUlIZWxwZXIgewogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBzdGF0aWMgZW5zdXJlUG9zaXRp
b25JbmZvcm1hdGlvblVwZGF0ZUZvckVsZW1lbnQoZWxlbWVudCkKKyAgICB7CisgICAgICAgIGNv
bnN0IGJvdW5kaW5nUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAg
ICAgIGNvbnN0IHggPSBib3VuZGluZ1JlY3QueCArIDU7CisgICAgICAgIGNvbnN0IHkgPSBib3Vu
ZGluZ1JlY3QueSArIDU7CisKKyAgICAgICAgaWYgKCF0aGlzLmlzV2ViS2l0MigpKSB7CisgICAg
ICAgICAgICB0ZXN0UnVubmVyLmRpc3BsYXkoKTsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNv
bHZlID0+IHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoYAorICAgICAgICAg
ICAgICAgIHVpQ29udHJvbGxlci5lbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZUF0
KCR7eH0sICR7eX0sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgdWlDb250cm9s
bGVyLnVpU2NyaXB0Q29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICB9KTtgLCByZXNvbHZlKTsK
KyAgICAgICAgfSk7CisgICAgfQorCiAgICAgc3RhdGljIGRlbGF5Rm9yKG1zKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBt
cykpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>