<?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>195178</bug_id>
          
          <creation_ts>2019-02-28 11:53:04 -0800</creation_ts>
          <short_desc>Native text selection UI is incorrectly suppressed in Microsoft Visio</short_desc>
          <delta_ts>2019-03-04 16:31:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1511037</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-02-28 11:53:04 -0800</bug_when>
    <thetext>1. Install iOS 12.
2. Request desktop site and create a new diagram in Microsoft Visio online.
3. Create a new shape and try to edit text in that shape

Expected: native text editing caret should appear, along with callout bar, etc.
Observed: selection UI is suppressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511548</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-01 12:48:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/48519394&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511745</commentid>
    <comment_count>2</comment_count>
      <attachid>363401</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-03-01 19:53:38 -0800</bug_when>
    <thetext>Created attachment 363401
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511769</commentid>
    <comment_count>3</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-03-01 21:36:54 -0800</bug_when>
    <thetext>I&apos;m gonna leave this one for zalan/smfr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511777</commentid>
    <comment_count>4</comment_count>
      <attachid>363401</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-03-01 22:14:07 -0800</bug_when>
    <thetext>Comment on attachment 363401
WIP

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

&gt; Source/WebCore/rendering/RenderObject.cpp:1558
&gt; +    auto* container = &amp;enclosingBox();
&gt; +    while (container) {

Nicer to write as a for loop. If we can’t make the third clause work we can still write:

    for (auto* container = &amp;enclosingBox(); container; ) {

&gt; Source/WebCore/rendering/RenderObject.cpp:1566
&gt; +            auto&amp; frame = container-&gt;frame();

I think this logic about walking out to the enclosing frame&apos;s renderer should be put in a helper function. Writing it out as a sequence of if statements makes the thing look too complicated and it’s really a single concept. Not sure exactly which helper function to write. Here’s one:

    static RenderBox* enclosingFrameRenderBox(RenderBox&amp; container)
    {
        auto* owner = container.frame().ownerElement();
        if (!owner)
            return nullptr;
        auto* renderer = owner-&gt;renderer();
        return is&lt;RenderBox&gt;(renderer) ? &amp;downcast&lt;RenderBox&gt;(*renderer) : nullptr;
    }

Then:

    static RenderBox* containingBlockCrossingFrameBoundaries(RenderBox&amp; container)
    {
        auto* nextContainer = container.containingBlock();
        if (!nextContainer)
            nextContainer = enclosingFrameRenderBox(container);
        return nextContainer ? nextContainer : enclosingFrameRenderBox(container);
    }

Then:

    for (auto* container = &amp;enclosingBox(); container; container = containingBlockCrossingFrameBoundaries(*container))

But I think there are other interesting factorings too that might allow sharing even more code with other call sites.

&gt; Source/WebCore/rendering/RenderObject.cpp:1572
&gt; +            if (frame.isMainFrame())
&gt; +                break;
&gt; +
&gt; +            auto* owner = frame.ownerElement();
&gt; +            if (!owner)
&gt; +                break;

It’s unnecessary to check both isMainFrame and check ownerElement for null. I suggest skipping the isMainFrame check.

&gt; Source/WebCore/rendering/RenderObject.cpp:1576
&gt; +            if (!frameRenderer || !frameRenderer-&gt;isBox())
&gt; +                break;

if (!is&lt;RenderBox&gt;(frameRenderer))
        break;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511855</commentid>
    <comment_count>5</comment_count>
      <attachid>363401</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-02 13:34:25 -0800</bug_when>
    <thetext>Comment on attachment 363401
WIP

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Currently, our heuristics for detecting hidden editable areas attempts to search for empty parent renderers with

heuristics...attempts -&gt; heuristics...attempt

&gt; Source/WebCore/rendering/RenderObject.cpp:1563
&gt; +        bool isOverflowHidden = style.overflowX() == Overflow::Hidden || style.overflowY() == Overflow::Hidden;
&gt; +        if (isOverflowHidden &amp;&amp; !container-&gt;isDocumentElementRenderer() &amp;&amp; !container-&gt;isBody() &amp;&amp; container-&gt;contentSize().isEmpty())
&gt; +            return true;
&gt; +

I think this code needs to be rewritten in terms of RenderLayer::clipRectRelativeToAncestor() or something similar. These are questions you ask of the RenderLayer rather than trying to compute yourself, which is fraught with danger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512194</commentid>
    <comment_count>6</comment_count>
      <attachid>363401</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-03-04 09:10:07 -0800</bug_when>
    <thetext>Comment on attachment 363401
WIP

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        Currently, our heuristics for detecting hidden editable areas attempts to search for empty parent renderers with
&gt; 
&gt; heuristics...attempts -&gt; heuristics...attempt

Good catch!

&gt;&gt; Source/WebCore/rendering/RenderObject.cpp:1558
&gt;&gt; +    while (container) {
&gt; 
&gt; Nicer to write as a for loop. If we can’t make the third clause work we can still write:
&gt; 
&gt;     for (auto* container = &amp;enclosingBox(); container; ) {

Sounds good — I rewrote both this and the while loop above as for loops, using static helpers to advance each iteration.

&gt;&gt; Source/WebCore/rendering/RenderObject.cpp:1563
&gt;&gt; +
&gt; 
&gt; I think this code needs to be rewritten in terms of RenderLayer::clipRectRelativeToAncestor() or something similar. These are questions you ask of the RenderLayer rather than trying to compute yourself, which is fraught with danger.

It wasn&apos;t clear how to make use of this; one approach that seems to work reasonably well is to check whether the enclosing layer&apos;s selfClipRect is empty, but this doesn&apos;t account for the scenario in which the enclosing layer&apos;s clippingRootForPainting() is itself (for instance, when a text field has &quot;transform: translateZ(0);&quot;). I was able to fix this by introducing a new helper on RenderLayer to the effect of hasEmptyClipRectRelativeToDocumentView() that computes the clip rect relative to the document view&apos;s layer instead of the clipping root for painting. But this affects no known sites and I&apos;m not sure it&apos;s worth the additional code on RenderLayer, so I omitted it in the new patch (forthcoming).

&gt;&gt; Source/WebCore/rendering/RenderObject.cpp:1566
&gt;&gt; +            auto&amp; frame = container-&gt;frame();
&gt; 
&gt; I think this logic about walking out to the enclosing frame&apos;s renderer should be put in a helper function. Writing it out as a sequence of if statements makes the thing look too complicated and it’s really a single concept. Not sure exactly which helper function to write. Here’s one:
&gt; 
&gt;     static RenderBox* enclosingFrameRenderBox(RenderBox&amp; container)
&gt;     {
&gt;         auto* owner = container.frame().ownerElement();
&gt;         if (!owner)
&gt;             return nullptr;
&gt;         auto* renderer = owner-&gt;renderer();
&gt;         return is&lt;RenderBox&gt;(renderer) ? &amp;downcast&lt;RenderBox&gt;(*renderer) : nullptr;
&gt;     }
&gt; 
&gt; Then:
&gt; 
&gt;     static RenderBox* containingBlockCrossingFrameBoundaries(RenderBox&amp; container)
&gt;     {
&gt;         auto* nextContainer = container.containingBlock();
&gt;         if (!nextContainer)
&gt;             nextContainer = enclosingFrameRenderBox(container);
&gt;         return nextContainer ? nextContainer : enclosingFrameRenderBox(container);
&gt;     }
&gt; 
&gt; Then:
&gt; 
&gt;     for (auto* container = &amp;enclosingBox(); container; container = containingBlockCrossingFrameBoundaries(*container))
&gt; 
&gt; But I think there are other interesting factorings too that might allow sharing even more code with other call sites.

Ok! I pulled out some common logic into static helpers, and used these to rewrite the two while loops here as for loops.

&gt;&gt; Source/WebCore/rendering/RenderObject.cpp:1572
&gt;&gt; +                break;
&gt; 
&gt; It’s unnecessary to check both isMainFrame and check ownerElement for null. I suggest skipping the isMainFrame check.

Fixed!

&gt;&gt; Source/WebCore/rendering/RenderObject.cpp:1576
&gt;&gt; +                break;
&gt; 
&gt; if (!is&lt;RenderBox&gt;(frameRenderer))
&gt;         break;

I ended up removing this part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512197</commentid>
    <comment_count>7</comment_count>
      <attachid>363518</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-03-04 09:12:48 -0800</bug_when>
    <thetext>Created attachment 363518
Take two</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512200</commentid>
    <comment_count>8</comment_count>
      <attachid>363518</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-03-04 09:26:24 -0800</bug_when>
    <thetext>Comment on attachment 363518
Take two

Wow, so much better in both algorithm and coding style too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512399</commentid>
    <comment_count>9</comment_count>
      <attachid>363518</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-03-04 16:04:49 -0800</bug_when>
    <thetext>Comment on attachment 363518
Take two

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512407</commentid>
    <comment_count>10</comment_count>
      <attachid>363518</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-04 16:31:38 -0800</bug_when>
    <thetext>Comment on attachment 363518
Take two

Clearing flags on attachment: 363518

Committed r242401: &lt;https://trac.webkit.org/changeset/242401&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512408</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-04 16:31:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363401</attachid>
            <date>2019-03-01 19:53:38 -0800</date>
            <delta_ts>2019-03-04 09:12:47 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195178-20190301195337.patch</filename>
            <type>text/plain</type>
            <size>14164</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMjc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY2ZTc0NmRkYTI0MDMy
NWU5OTY5ZDBhYjJjM2EwNThiMTU2MzM4NS4uZDM5YWIzZjE2YTY3Njc1NTE3NmIwM2I5ZDhjYjcx
ZmQxNzVkMmRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE5LTAzLTAxICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIE5hdGl2ZSB0ZXh0
IHNlbGVjdGlvbiBVSSBpcyBpbmNvcnJlY3RseSBzdXBwcmVzc2VkIGluIE1pY3Jvc29mdCBWaXNp
bworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1MTc4
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80ODUxOTM5ND4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHksIG91ciBoZXVyaXN0aWNzIGZv
ciBkZXRlY3RpbmcgaGlkZGVuIGVkaXRhYmxlIGFyZWFzIGF0dGVtcHRzIHRvIHNlYXJjaCBmb3Ig
ZW1wdHkgcGFyZW50IHJlbmRlcmVycyB3aXRoCisgICAgICAgICJvdmVyZmxvdzogaGlkZGVuIi4g
SXQgZG9lcyB0aGlzIGJ5IGFzY2VuZGluZyB0aGUgbGF5ZXIgdHJlZSBpbiBzZWFyY2ggb2YgcmVu
ZGVyZXJzIHRoYXQgaGF2ZSBhbiBlbXB0eSBjb250ZW50CisgICAgICAgIHNpemUsIGFuZCB3aG9z
ZSByZW5kZXJlcnMnIHN0eWxlcyBpbmRpY2F0ZSB0aGF0IHRoZXkgaGF2ZSBvdmVyZmxvdzogaGlk
ZGVuIGluIHRoZSBYIG9yIFkgZGlyZWN0aW9ucy4gVGhpcyBmYWlscworICAgICAgICBpbiB0aGUg
Y2FzZSB3aGVyZSBhIGNoaWxkIHJlbmRlcmVyIGlzIHBvc2l0aW9uZWQgb3V0IG9mIGZsb3csIHJl
bGF0aXZlIHRvIG9uZSBvZiBpdHMgcGFyZW50IGxheWVycywgc2luY2UgdGhlCisgICAgICAgIGNo
aWxkIHdpbGwgYmUgdmlzaWJsZSwgYnV0IHdlJ2xsIGluY29ycmVjdGx5IGJlbGlldmUgdGhhdCBp
dCBpcyBoaWRkZW4uIFRoaXMgbGVhZHMgdG8gc2VsZWN0aW9uIFVJIHVuZXhwZWN0ZWRseQorICAg
ICAgICBkaXNhcHBlYXJpbmcgaW4gdGhlIG9ubGluZSB2ZXJzaW9uIG9mIE1pY3Jvc29mdCBWaXNp
by4KKworICAgICAgICBUbyBmaXggdGhpcywgd2UgcHVsbCB0aGUgbG9naWMgdG8gY2hlY2sgZm9y
IGVtcHR5IG92ZXJmbG93OiBoaWRkZW4gY29udGFpbmVycyBvdXQgb2YgdGhlIGxheWVyIHRyZWUg
d2FsaywgYW5kCisgICAgICAgIGluc3RlYWQgd2FsayB1cCB0aGUgcmVuZGVyIHRyZWUgYnkgY29u
dGFpbmluZyBibG9ja3MsIHVzaW5nIG91ciBjdXJyZW50IGhldXJpc3RpYy4gTGlrZSBiZWZvcmUs
IHRoaXMgd2FsaworICAgICAgICBob3BzIGZyYW1lIGJvdW5kYXJpZXM6IHdoZW4gdGhlIG5leHQg
Y29udGFpbmluZyBibG9jayBiZWNvbWVzIGBudWxscHRyYCBhbmQgd2UncmUgbm90IHlldCBpbiB0
aGUgbWFpbiBmcmFtZSwgd2UKKyAgICAgICAgY29udGludWUgdXB3YXJkcywgc3RhcnRpbmcgZnJv
bSB0aGUgZnJhbWUncyBvd25lciBlbGVtZW50J3MgcmVuZGVyZXIuCisKKyAgICAgICAgVGVzdDog
ZWRpdGluZy9zZWxlY3Rpb24vaW9zL2RvLW5vdC1oaWRlLXNlbGVjdGlvbi1pbi12aXNpYmxlLWNv
bnRhaW5lci5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNUcmFuc3BhcmVudE9yRnVsbHlDbGlwcGVk
UmVzcGVjdGluZ1BhcmVudEZyYW1lcyBjb25zdCk6CisKIDIwMTktMDMtMDEgIFphbGFuIEJ1anRh
cyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29udGVudENoYW5nZU9ic2VydmVyXSBS
ZW5hbWUgbWVtYmVycyBhbmQgbW92ZSBpbXBsZW1lbnRhdGlvbiB0byBoZWFkZXIuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDUxY2M0NThhYWJmZWU2Zjlh
OGFlZmEyYmQ0OGFkYTVhOGExNjJhNzAuLjkyM2IyMmY1NDY3MThhNDE3ZTQ3NTllY2ZiN2FhOTBm
NTlhMmIwNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBA
IC0xNTM1LDMwICsxNTM1LDUxIEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1RyYW5zcGFyZW50T3JG
dWxseUNsaXBwZWRSZXNwZWN0aW5nUGFyZW50RnJhbWVzKCkgY29uc3QKICAgICBhdXRvKiBsYXll
ciA9IGVuY2xvc2luZ0xheWVyKCk7CiAgICAgd2hpbGUgKGxheWVyKSB7CiAgICAgICAgIGF1dG8m
IGxheWVyUmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKLSAgICAgICAgYXV0byYgc3R5bGUg
PSBsYXllclJlbmRlcmVyLnN0eWxlKCk7Ci0gICAgICAgIGlmIChhdXRvKiBib3ggPSBsYXllci0+
cmVuZGVyQm94KCkpIHsKLSAgICAgICAgICAgIGJvb2wgaXNPdmVyZmxvd0hpZGRlbiA9IHN0eWxl
Lm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpIaWRkZW4gfHwgc3R5bGUub3ZlcmZsb3dZKCkgPT0g
T3ZlcmZsb3c6OkhpZGRlbjsKLSAgICAgICAgICAgIGlmIChpc092ZXJmbG93SGlkZGVuICYmICFi
b3gtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSAmJiBib3gtPmNvbnRlbnRTaXplKCkuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IGN1cnJlbnRPcGFjaXR5ICo9IHN0eWxlLm9wYWNpdHkoKTsKKyAgICAgICAgY3VycmVudE9wYWNp
dHkgKj0gbGF5ZXJSZW5kZXJlci5zdHlsZSgpLm9wYWNpdHkoKTsKICAgICAgICAgaWYgKGN1cnJl
bnRPcGFjaXR5IDwgbWluaW11bVZpc2libGVPcGFjaXR5KQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICAgICAgYXV0byogcGFyZW50TGF5ZXIgPSBsYXllci0+cGFyZW50KCk7CiAgICAg
ICAgIGlmICghcGFyZW50TGF5ZXIpIHsKICAgICAgICAgICAgIGlmICghaXM8UmVuZGVyVmlldz4o
bGF5ZXJSZW5kZXJlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBhdXRvJiBlbmNsb3NpbmdGcmFtZSA9IGRvd25j
YXN0PFJlbmRlclZpZXc+KGxheWVyUmVuZGVyZXIpLnZpZXcoKS5mcmFtZSgpOwogICAgICAgICAg
ICAgaWYgKGVuY2xvc2luZ0ZyYW1lLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBpZiAoYXV0
byAqZnJhbWVPd25lclJlbmRlcmVyID0gZW5jbG9zaW5nRnJhbWUub3duZXJFbGVtZW50KCktPnJl
bmRlcmVyKCkpCisgICAgICAgICAgICBpZiAoYXV0byogZnJhbWVPd25lclJlbmRlcmVyID0gZW5j
bG9zaW5nRnJhbWUub3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAg
cGFyZW50TGF5ZXIgPSBmcmFtZU93bmVyUmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7CiAgICAg
ICAgIH0KICAgICAgICAgbGF5ZXIgPSBwYXJlbnRMYXllcjsKICAgICB9CisKKyAgICBhdXRvKiBj
b250YWluZXIgPSAmZW5jbG9zaW5nQm94KCk7CisgICAgd2hpbGUgKGNvbnRhaW5lcikgeworICAg
ICAgICBhdXRvJiBzdHlsZSA9IGNvbnRhaW5lci0+c3R5bGUoKTsKKyAgICAgICAgYm9vbCBpc092
ZXJmbG93SGlkZGVuID0gc3R5bGUub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkhpZGRlbiB8fCBz
dHlsZS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6SGlkZGVuOworICAgICAgICBpZiAoaXNPdmVy
Zmxvd0hpZGRlbiAmJiAhY29udGFpbmVyLT5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkgJiYg
IWNvbnRhaW5lci0+aXNCb2R5KCkgJiYgY29udGFpbmVyLT5jb250ZW50U2l6ZSgpLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIFJlbmRlckJveCogbmV4dENv
bnRhaW5lciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgIGlmICghbmV4
dENvbnRhaW5lcikgeworICAgICAgICAgICAgYXV0byYgZnJhbWUgPSBjb250YWluZXItPmZyYW1l
KCk7CisgICAgICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgYXV0byogb3duZXIgPSBmcmFtZS5vd25lckVsZW1lbnQo
KTsKKyAgICAgICAgICAgIGlmICghb3duZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGF1dG8qIGZyYW1lUmVuZGVyZXIgPSBvd25lci0+cmVuZGVyZXIoKTsKKyAgICAg
ICAgICAgIGlmICghZnJhbWVSZW5kZXJlciB8fCAhZnJhbWVSZW5kZXJlci0+aXNCb3goKSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgbmV4dENvbnRhaW5lciA9IGRvd25j
YXN0PFJlbmRlckJveD4oZnJhbWVSZW5kZXJlcik7CisgICAgICAgIH0KKyAgICAgICAgY29udGFp
bmVyID0gbmV4dENvbnRhaW5lcjsKKyAgICB9CisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA5OGRjNWY3Mjg0MzMyZGMzYjI0NWQxMjBkMzZmMzM4YjlhMzdiMWMyLi43YjZkZDEwMjE5
NGYxNDg4NmMwNTYxZmQ1OWJhYjUzNDYwMzRiYWNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIw
MTktMDMtMDEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAg
ICAgTmF0aXZlIHRleHQgc2VsZWN0aW9uIFVJIGlzIGluY29ycmVjdGx5IHN1cHByZXNzZWQgaW4g
TWljcm9zb2Z0IFZpc2lvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTUxNzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ4NTE5Mzk0PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBsYXlv
dXQgdGVzdCB0aGF0IGZvY3VzZXMgc2V2ZXJhbCBkaWZmZXJlbnQgdGV4dCBmaWVsZHMgYW5kIGNo
ZWNrcyB3aGV0aGVyIG9yIG5vdCBlZGl0aW5nIFVJIGlzIHNob3duOgorCisgICAgICAgIDEuIEEg
dGV4dCBmaWVsZCBpbnNpZGUgYW4gb3ZlcmZsb3c6IGhpZGRlbiBjb250YWluZXIsIGFsbCB3aXRo
aW4gYW4gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGlmcmFtZSwgc3VjaCB0aGF0IHRoZQorICAgICAg
ICB0ZXh0IGZpZWxkIGlzIG5vdCB2aXNpYmxlLiBUaGUgY2FyZXQgc2hvdWxkIGJlIGhpZGRlbi4K
KworICAgICAgICAyLiBBIHRleHQgZmllbGQgaW5zaWRlIGFuIGFic29sdXRlbHkgcG9zaXRpb25l
ZCBpZnJhbWUsIGluc2lkZSBhbiBvdmVyZmxvdzogaGlkZGVuIGNvbnRhaW5lciwgc3VjaCB0aGF0
IHRoZQorICAgICAgICB0ZXh0IGZpZWxkIGlzIHZpc2libGUuIFRoZSBjYXJldCBzaG91bGQgYmUg
dmlzaWJsZS4KKworICAgICAgICAzLiBBIHRleHQgZmllbGQgaW5zaWRlIGEgcmVsYXRpdmVseSBw
b3NpdGlvbmVkIGlmcmFtZSB0aGF0IGhhcyBvdmVyZmxvdzogaGlkZGVuLCBzdWNoIHRoYXQgdGhl
IHRleHQgZmllbGQgaXMKKyAgICAgICAgbm90IHZpc2libGUuIFRoZSBjYXJldCBzaG91bGQgYmUg
aGlkZGVuLgorCisgICAgICAgIDQuIEEgdGV4dCBmaWVsZCB0aGF0IGlzIHBvc2l0aW9uOiBmaXhl
ZCBpbnNpZGUgYW4gb3ZlcmZsb3c6IGhpZGRlbiBjb250YWluZXIsIHN1Y2ggdGhhdCB0aGUgdGV4
dCBmaWVsZCBpcworICAgICAgICB2aXNpYmxlLiBUaGUgY2FyZXQgc2hvdWxkIGJlIHZpc2libGUu
CisKKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9pb3MvZG8tbm90LWhpZGUtc2VsZWN0aW9u
LWluLXZpc2libGUtY29udGFpbmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRp
dGluZy9zZWxlY3Rpb24vaW9zL2RvLW5vdC1oaWRlLXNlbGVjdGlvbi1pbi12aXNpYmxlLWNvbnRh
aW5lci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9pb3MvaGlkZS1z
ZWxlY3Rpb24taW4tZW1wdHktb3ZlcmZsb3ctaGlkZGVuLWNvbnRhaW5lci5odG1sOgorICAgICAg
ICAqIHJlc291cmNlcy91aS1oZWxwZXIuanM6CisgICAgICAgICh3aW5kb3cuVUlIZWxwZXIuYWN0
aXZhdGVFbGVtZW50QW5kV2FpdEZvcklucHV0U2Vzc2lvbik6CisKKyAgICAgICAgQWRkIGEgY29u
dmVuaWVuY2UgZnVuY3Rpb24gaW4gVUlIZWxwZXIgdGhhdCB0YXBzIGEgZ2l2ZW4gZWxlbWVudCBh
bmQgd2FpdHMgZm9yIHRoZSBrZXlib2FyZCB0byBzaG93LgorCiAyMDE5LTAzLTAxICBBbnRvaW5l
IFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFdQVCBQb2ludGVy
IEV2ZW50cyB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
aW9zL2RvLW5vdC1oaWRlLXNlbGVjdGlvbi1pbi12aXNpYmxlLWNvbnRhaW5lci1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvZG8tbm90LWhpZGUtc2VsZWN0
aW9uLWluLXZpc2libGUtY29udGFpbmVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTczNzJi
ODFjMWFkNTY2NDBlMDExYmZlZjk2MTQwYzFiMmJiYTkwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaW9zL2RvLW5vdC1oaWRlLXNlbGVjdGlvbi1pbi12
aXNpYmxlLWNvbnRhaW5lci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorRmlyc3QgZmll
bGQgIFNlY29uZCBmaWVsZCAgVGhpcmQgZmllbGQgRm91cnRoIGZpZWxkIAorCisKK1ZlcmlmaWVz
IHRoYXQgbmF0aXZlIHNlbGVjdGlvbiBVSSBpcyBub3Qgc3VwcHJlc3NlZCB3aGVuIGZvY3VzaW5n
IGFuIGlucHV0IHRoYXQgaXMgaW5zaWRlIGFuIGVtcHR5IGNvbnRhaW5lciB3aXRoIGBvdmVyZmxv
dzogaGlkZGVuYCwgYnV0IGlzIHBvc2l0aW9uZWQgYWJzb2x1dGVseSBzdWNoIHRoYXQgaXQgaXMg
c3RpbGwgdmlzaWJsZS4gVG8gbWFudWFsbHkgdmVyaWZ5LCBjbGljayBvbiBlYWNoIG9mIHRoZSBm
b3VyIGJ1dHRvbnMgdG8gbW92ZSBmb2N1cyBpbnRvIGVkaXRhYmxlIGFyZWFzLiBBZnRlciB0YXBw
aW5nIHRoZSBmaXJzdCBhbmQgdGhpcmQgYnV0dG9ucywgeW91IHNob3VsZCBub3Qgc2VlIGEgY2Fy
ZXQgdmlldzsgYWZ0ZXIgdGFwcGluZyB0aGUgc2Vjb25kIGFuZCBmb3VydGggYnV0dG9ucywgeW91
IHNob3VsZCBzZWUgYSBjYXJldCB2aWV3LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
K1dhaXRpbmcgZm9yIGNhcmV0IHRvIGhpZGUuCitQQVNTIENhcmV0IHdhcyBoaWRkZW4uCitXYWl0
aW5nIGZvciBjYXJldCB0byBzaG93LgorUEFTUyBDYXJldCB3YXMgc2hvd24uCitXYWl0aW5nIGZv
ciBjYXJldCB0byBoaWRlLgorUEFTUyBDYXJldCB3YXMgaGlkZGVuLgorV2FpdGluZyBmb3IgY2Fy
ZXQgdG8gc2hvdy4KK1BBU1MgQ2FyZXQgd2FzIHNob3duLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Vk
aXRpbmcvc2VsZWN0aW9uL2lvcy9kby1ub3QtaGlkZS1zZWxlY3Rpb24taW4tdmlzaWJsZS1jb250
YWluZXIuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2lvcy9kby1ub3QtaGlk
ZS1zZWxlY3Rpb24taW4tdmlzaWJsZS1jb250YWluZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTdiOWM4
ZmYwOTliYjNlZjcxOGUwZDFhOTc5NmU2MTBkMDlhMDA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaW9zL2RvLW5vdC1oaWRlLXNlbGVjdGlvbi1pbi12
aXNpYmxlLWNvbnRhaW5lci5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8IURPQ1RZUEUgaHRtbD4g
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VGbGV4aWJsZVZpZXdwb3J0PXRydWUgXSAtLT4K
KzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2
aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHVzZXItc2NhbGFibGU9bm8iPgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KKy5o
aWRkZW4geworICAgIGhlaWdodDogMDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworfQorCitpZnJh
bWUgeworICAgIHdpZHRoOiAxMDBweDsKKyAgICBoZWlnaHQ6IDQ0cHg7CisgICAgcG9zaXRpb246
IGFic29sdXRlOworICAgIGJvcmRlcjogbm9uZTsKK30KKworI2ZyYW1lMiB7CisgICAgdG9wOiAx
MDBweDsKK30KKworI2ZyYW1lMyB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworfQorCitpbnB1
dCB7CisgICAgcG9zaXRpb246IGZpeGVkOworfQorPC9zdHlsZT4KKzxzY3JpcHQ+Citqc1Rlc3RJ
c0FzeW5jID0gdHJ1ZTsKKworYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ2FyZXRJc1Zpc2libGUoaXNW
aXNpYmxlKQoreworICAgIGlmIChpc1Zpc2libGUpCisgICAgICAgIGRlYnVnKCJXYWl0aW5nIGZv
ciBjYXJldCB0byBzaG93LiIpOworICAgIGVsc2UKKyAgICAgICAgZGVidWcoIldhaXRpbmcgZm9y
IGNhcmV0IHRvIGhpZGUuIik7CisKKyAgICBsZXQgcmVjdCA9IG51bGw7CisgICAgd2hpbGUgKCFy
ZWN0IHx8ICghaXNWaXNpYmxlICYmIHJlY3Qud2lkdGggJiYgcmVjdC5oZWlnaHQpIHx8IChpc1Zp
c2libGUgJiYgKCFyZWN0LndpZHRoIHx8ICFyZWN0LmhlaWdodCkpKQorICAgICAgICByZWN0ID0g
YXdhaXQgVUlIZWxwZXIuZ2V0VUlDYXJldFZpZXdSZWN0KCk7CisKKyAgICBpZiAoaXNWaXNpYmxl
KQorICAgICAgICB0ZXN0UGFzc2VkKCJDYXJldCB3YXMgc2hvd24uIik7CisgICAgZWxzZQorICAg
ICAgICB0ZXN0UGFzc2VkKCJDYXJldCB3YXMgaGlkZGVuLiIpOworfQorCithZGRFdmVudExpc3Rl
bmVyKCJsb2FkIiwgYXN5bmMgKCkgPT4geworICAgIGRlc2NyaXB0aW9uKCJWZXJpZmllcyB0aGF0
IG5hdGl2ZSBzZWxlY3Rpb24gVUkgaXMgbm90IHN1cHByZXNzZWQgd2hlbiBmb2N1c2luZyBhbiBp
bnB1dCB0aGF0IGlzIGluc2lkZSBhbiBlbXB0eSBjb250YWluZXIgd2l0aCBgb3ZlcmZsb3c6IGhp
ZGRlbmAsIGJ1dCBpcyBwb3NpdGlvbmVkIGFic29sdXRlbHkgc3VjaCB0aGF0IGl0IGlzIHN0aWxs
IHZpc2libGUuIFRvIG1hbnVhbGx5IHZlcmlmeSwgY2xpY2sgb24gZWFjaCBvZiB0aGUgZm91ciBi
dXR0b25zIHRvIG1vdmUgZm9jdXMgaW50byBlZGl0YWJsZSBhcmVhcy4gQWZ0ZXIgdGFwcGluZyB0
aGUgZmlyc3QgYW5kIHRoaXJkIGJ1dHRvbnMsIHlvdSBzaG91bGQgbm90IHNlZSBhIGNhcmV0IHZp
ZXc7IGFmdGVyIHRhcHBpbmcgdGhlIHNlY29uZCBhbmQgZm91cnRoIGJ1dHRvbnMsIHlvdSBzaG91
bGQgc2VlIGEgY2FyZXQgdmlldy4iKTsKKworICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIGZvciAoY29uc3QgdGVzdENhc2Ugb2YgW1tmaXJzdCwgZmFs
c2VdLCBbc2Vjb25kLCB0cnVlXSwgW3RoaXJkLCBmYWxzZV0sIFtmb3VydGgsIHRydWVdXSkgewor
ICAgICAgICBjb25zdCBbYnV0dG9uVG9UYXAsIGV4cGVjdGVkVmlzaWJpbGl0eV0gPSB0ZXN0Q2Fz
ZTsKKyAgICAgICAgYXdhaXQgVUlIZWxwZXIuYWN0aXZhdGVFbGVtZW50QW5kV2FpdEZvcklucHV0
U2Vzc2lvbihidXR0b25Ub1RhcCk7CisgICAgICAgIGF3YWl0IGVuc3VyZUNhcmV0SXNWaXNpYmxl
KGV4cGVjdGVkVmlzaWJpbGl0eSk7CisgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1
cigpOworICAgIH0KKworICAgIGF3YWl0IFVJSGVscGVyLndhaXRGb3JLZXlib2FyZFRvSGlkZSgp
OworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGNs
YXNzPSJoaWRkZW4iPgorICAgIDxidXR0b24gaWQ9ImZpcnN0Ij5GaXJzdCBmaWVsZDwvYnV0dG9u
PgorICAgIDxidXR0b24gaWQ9InNlY29uZCI+U2Vjb25kIGZpZWxkPC9idXR0b24+CisgICAgPGJ1
dHRvbiBpZD0idGhpcmQiPlRoaXJkIGZpZWxkPC9idXR0b24+CisgICAgPGJ1dHRvbiBpZD0iZm91
cnRoIj5Gb3VydGggZmllbGQ8L2J1dHRvbj4KKyAgICA8aWZyYW1lIGlkPSJmcmFtZTEiIHNyY2Rv
Yz0iCisgICAgICAgIDxkaXYgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47IGhlaWdodDogMDsgYm94
LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwOyc+CisgICAgICAg
ICAgICA8aW5wdXQ+PC9pbnB1dD4KKyAgICAgICAgPC9kaXY+Ij48L2lmcmFtZT4KKyAgICA8ZGl2
IGNsYXNzPSJoaWRkZW4iPgorICAgICAgICA8aWZyYW1lIGlkPSJmcmFtZTIiIHNyY2RvYz0iPGlu
cHV0PjwvaW5wdXQ+Ij48L2lmcmFtZT4KKyAgICAgICAgPGlucHV0PjwvaW5wdXQ+CisgICAgPC9k
aXY+CisgICAgPGlmcmFtZSBpZD0iZnJhbWUzIiBjbGFzcz0iaGlkZGVuIiBzcmNkb2M9IjxpbnB1
dD48L2lucHV0PiI+PC9pZnJhbWU+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pgor
ICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9u
IGNyZWF0ZUZyYW1lRm9jdXNIYW5kbGVyKGlkZW50aWZpZXIpIHsKKyAgICByZXR1cm4gKGV2ZW50
KSA9PiB7CisgICAgICAgIGNvbnN0IGZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRl
bnRpZmllcik7CisgICAgICAgIGZyYW1lLmZvY3VzKCk7CisgICAgICAgIGZyYW1lLmNvbnRlbnRE
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLmZvY3VzKCk7CisgICAgICAgIGV2ZW50LnBy
ZXZlbnREZWZhdWx0KCk7CisgICAgfTsKK30KKworZmlyc3QuYWRkRXZlbnRMaXN0ZW5lcigiY2xp
Y2siLCBjcmVhdGVGcmFtZUZvY3VzSGFuZGxlcigiZnJhbWUxIikpOworc2Vjb25kLmFkZEV2ZW50
TGlzdGVuZXIoImNsaWNrIiwgY3JlYXRlRnJhbWVGb2N1c0hhbmRsZXIoImZyYW1lMiIpKTsKK3Ro
aXJkLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY3JlYXRlRnJhbWVGb2N1c0hhbmRsZXIoImZy
YW1lMyIpKTsKK2ZvdXJ0aC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGV2ZW50ID0+IHsKKyAg
ICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLmZvY3VzKCk7CisgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKK30pOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvaGlkZS1zZWxlY3Rpb24taW4tZW1wdHktb3Zl
cmZsb3ctaGlkZGVuLWNvbnRhaW5lci5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vaW9zL2hpZGUtc2VsZWN0aW9uLWluLWVtcHR5LW92ZXJmbG93LWhpZGRlbi1jb250YWluZXIu
aHRtbAppbmRleCBkYjNmMDU0YmI2MjA3NjFkNTIwNGIyYjQzMDc0ZWU1ZGQ2ZTU0Y2Y3Li4zYjA1
YjU2NTcxYWI5MWI4MzAwOGMyMmFmYmYzOGU2NTU3N2NlNTRjIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvaGlkZS1zZWxlY3Rpb24taW4tZW1wdHktb3ZlcmZs
b3ctaGlkZGVuLWNvbnRhaW5lci5odG1sCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0
aW9uL2lvcy9oaWRlLXNlbGVjdGlvbi1pbi1lbXB0eS1vdmVyZmxvdy1oaWRkZW4tY29udGFpbmVy
Lmh0bWwKQEAgLTI2LDEwICsyNiw5IEBAIGJ1dHRvbiB7CiB9CiA8L3N0eWxlPgogPHNjcmlwdD4K
LWFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBydW5UZXN0KTsKIGpzVGVzdElzQXN5bmMgPSB0cnVl
OwogCi1hc3luYyBmdW5jdGlvbiBydW5UZXN0KCkgeworYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIs
IGFzeW5jICgpID0+IHsKICAgICBkZXNjcmlwdGlvbigiVmVyaWZpZXMgdGhhdCBuYXRpdmUgc2Vs
ZWN0aW9uIFVJIGlzIHN1cHByZXNzZWQgd2hlbiBmb2N1c2luZyBhIHRleHRhcmVhIHRoYXQgaXMg
Y29tcGxldGVseSBoaWRkZW4gIgogICAgICAgICArICJ1bmRlcm5lYXRoIGFuIGVtcHR5IGNvbnRh
aW5lciB3aXRoIDxjb2RlPm92ZXJmbG93OiBoaWRkZW47PC9jb2RlPi4gVG8gbWFudWFsbHkgdGVz
dCwgdGFwIHRoZSB0b3AgYnV0dG9uLCAiCiAgICAgICAgICsgImFuZCB0aGVuIHRhcCBvbiB0aGUg
Ym90dG9tIGJ1dHRvbi4gSW4gYm90aCBjYXNlcywgdGhlcmUgc2hvdWxkIGJlIG5vIHBsYXRmb3Jt
IHNlbGVjdGlvbiBzaG93bi4iKTsKQEAgLTY0LDkgKzYzLDkgQEAgYXN5bmMgZnVuY3Rpb24gcnVu
VGVzdCgpIHsKIAogICAgIGZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC5ibHVyKCk7CiAgICAgYXdhaXQgVUlIZWxwZXIud2FpdEZvcktleWJvYXJkVG9IaWRlKCk7Ci0g
ICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uLCAjY29udGFpbmVyIikuZm9yRWFj
aChlbGVtZW50ID0+IGVsZW1lbnQucmVtb3ZlKCkpCisgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rv
ckFsbCgiYnV0dG9uLCAjY29udGFpbmVyIikuZm9yRWFjaChlbGVtZW50ID0+IGVsZW1lbnQucmVt
b3ZlKCkpOwogICAgIGZpbmlzaEpTVGVzdCgpOwotfQorfSk7CiA8L3NjcmlwdD4KIDwvaGVhZD4K
IDxib2R5PgpAQCAtNzYsNyArNzUsNyBAQCBhc3luYyBmdW5jdGlvbiBydW5UZXN0KCkgewogPC9i
dXR0b24+CiA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgIDx0ZXh0YXJlYSBpZD0iZWRpdG9yIj48
L3RleHRhcmVhPgotICAgIDxpZnJhbWUgaWQ9ImZyYW1lIiBzcmNkb2M9Ijx0ZXh0YXJlYSBpZD0n
ZWRpdG9yJz48L3RleHRhcmVhPiIgb25sb2FkPSJydW5UZXN0KCkiPjwvaWZyYW1lPgorICAgIDxp
ZnJhbWUgaWQ9ImZyYW1lIiBzcmNkb2M9Ijx0ZXh0YXJlYSBpZD0nZWRpdG9yJz48L3RleHRhcmVh
PiI+PC9pZnJhbWU+CiA8L2Rpdj4KIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KIDxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3Vp
LWhlbHBlci5qcyBiL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMKaW5kZXggZGNk
NGViMGNmOTA4NDBiYzcxZmFjYjA3MjU2MTIwNjY3NGEyM2Q5ZS4uZjJkMDUyOGJiODNhY2IzZjQ4
NDRmYjNhMjdmMTRkNzNiZjZlMzI3MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcmVzb3VyY2Vz
L3VpLWhlbHBlci5qcworKysgYi9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpzCkBA
IC0yMjQsNiArMjI0LDE2IEBAIHdpbmRvdy5VSUhlbHBlciA9IGNsYXNzIFVJSGVscGVyIHsKICAg
ICAgICAgfSk7CiAgICAgfQogCisgICAgc3RhdGljIGFjdGl2YXRlRWxlbWVudEFuZFdhaXRGb3JJ
bnB1dFNlc3Npb24oZWxlbWVudCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5pc1dlYktpdDIo
KSB8fCAhdGhpcy5pc0lPUygpKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVFbGVt
ZW50KGVsZW1lbnQpOworCisgICAgICAgIGNvbnN0IHggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBl
bGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICAgICAgY29uc3QgeSA9IGVsZW1lbnQub2Zmc2V0
VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgICAgICByZXR1cm4gdGhpcy5hY3Rp
dmF0ZUFuZFdhaXRGb3JJbnB1dFNlc3Npb25BdCh4LCB5KTsKKyAgICB9CisKICAgICBzdGF0aWMg
YWN0aXZhdGVGb3JtQ29udHJvbChlbGVtZW50KQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLmlz
V2ViS2l0MigpIHx8ICF0aGlzLmlzSU9TKCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363518</attachid>
            <date>2019-03-04 09:12:48 -0800</date>
            <delta_ts>2019-03-04 16:31:38 -0800</delta_ts>
            <desc>Take two</desc>
            <filename>bug-195178-20190304091246.patch</filename>
            <type>text/plain</type>
            <size>13881</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjQ2YTQxNzdmYWFjYWEw
MjU5ZDA1NjM2MTI4NDJkN2UyMmYxOTI1Yi4uMDk4YzgzMzViNzdhZDI5MjQ5YzU1YTBjMDc5Zjk0
Yjc3ZTM1NjFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE5LTAzLTAyICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIE5hdGl2ZSB0ZXh0
IHNlbGVjdGlvbiBVSSBpcyBpbmNvcnJlY3RseSBzdXBwcmVzc2VkIGluIE1pY3Jvc29mdCBWaXNp
bworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1MTc4
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80ODUxOTM5ND4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHksIG91ciBoZXVyaXN0aWNzIGZv
ciBkZXRlY3RpbmcgaGlkZGVuIGVkaXRhYmxlIGFyZWFzIGF0dGVtcHQgdG8gc2VhcmNoIGZvciBl
bXB0eSBwYXJlbnQgcmVuZGVyZXJzIHdpdGgKKyAgICAgICAgIm92ZXJmbG93OiBoaWRkZW4iLiBJ
dCBkb2VzIHRoaXMgYnkgYXNjZW5kaW5nIHRoZSBsYXllciB0cmVlIGluIHNlYXJjaCBvZiByZW5k
ZXJlcnMgdGhhdCBoYXZlIGFuIGVtcHR5IGNvbnRlbnQKKyAgICAgICAgc2l6ZSwgYW5kIHdob3Nl
IHJlbmRlcmVycycgc3R5bGVzIGluZGljYXRlIHRoYXQgdGhleSBoYXZlIG92ZXJmbG93OiBoaWRk
ZW4gaW4gdGhlIFggb3IgWSBkaXJlY3Rpb25zLiBUaGlzIGZhaWxzCisgICAgICAgIGluIHRoZSBj
YXNlIHdoZXJlIGEgY2hpbGQgcmVuZGVyZXIgaXMgcG9zaXRpb25lZCBvdXQgb2YgZmxvdywgcmVs
YXRpdmUgdG8gb25lIG9mIGl0cyBwYXJlbnQgbGF5ZXJzLCBzaW5jZSB0aGUKKyAgICAgICAgY2hp
bGQgd2lsbCBiZSB2aXNpYmxlLCBidXQgd2UnbGwgaW5jb3JyZWN0bHkgYmVsaWV2ZSB0aGF0IGl0
IGlzIGhpZGRlbi4gVGhpcyBsZWFkcyB0byBzZWxlY3Rpb24gVUkgdW5leHBlY3RlZGx5CisgICAg
ICAgIGRpc2FwcGVhcmluZyBpbiB0aGUgb25saW5lIHZlcnNpb24gb2YgTWljcm9zb2Z0IFZpc2lv
LgorCisgICAgICAgIFRvIGZpeCB0aGlzLCB3ZSBjaGVjayB3aGV0aGVyIHRoZSBlbmNsb3Npbmcg
bGF5ZXIgYXJvdW5kIHRoZSBlZGl0YWJsZSBlbGVtZW50IGhhcyBhbiBlbXB0eSBjbGlwIHJlY3Q7
IGlmIHRoZQorICAgICAgICBlbGVtZW50IGlzIGluc2lkZSBvZiBhIHN1YmZyYW1lLCB3ZSBhZGRp
dGlvbmFsbHkgd2FsayB1cCB0byBlYWNoIGVuY2xvc2luZyBmcmFtZSdzIGxheWVyIGFuZCBjaGVj
ayBpZiB0aGF0CisgICAgICAgIGZyYW1lJ3MgbGF5ZXIgaGFzIGFuIGVtcHR5IGNsaXAgcmVjdC4K
KworICAgICAgICBUZXN0OiBlZGl0aW5nL3NlbGVjdGlvbi9pb3MvZG8tbm90LWhpZGUtc2VsZWN0
aW9uLWluLXZpc2libGUtY29udGFpbmVyLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1RyYW5zcGFy
ZW50T3JGdWxseUNsaXBwZWRSZXNwZWN0aW5nUGFyZW50RnJhbWVzIGNvbnN0KToKKwogMjAxOS0w
My0wMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBb
aU9TXSBQcm9ncmFtbWF0aWMgcGFzdGUgYWNjZXNzIHNob3VsZCBiZSBncmFudGVkIHdoZW4gY29w
eWluZyBhbmQgcGFzdGluZyB3aXRoaW4gdGhlIHNhbWUgb3JpZ2luCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDUxY2M0NThhYWJmZWU2ZjlhOGFlZmEyYmQ0
OGFkYTVhOGExNjJhNzAuLjZmMzVkMDRiMDkwZDg4MDJiYWQ1NDBlMjg0NDNmYjcxNDM2ZWMzM2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xNTI3LDM4
ICsxNTI3LDQwIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCkKICAgICBkZWxldGUgdGhp
czsKIH0KIAorc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0KQoreworICAgIGF1dG8qIG93bmVyID0gcmVuZGVyT2Jq
ZWN0LmZyYW1lKCkub3duZXJFbGVtZW50KCk7CisgICAgaWYgKCFvd25lcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBmcmFtZU93bmVyUmVuZGVyZXIgPSBvd25lci0+cmVu
ZGVyZXIoKTsKKyAgICByZXR1cm4gZnJhbWVPd25lclJlbmRlcmVyID8gZnJhbWVPd25lclJlbmRl
cmVyLT5lbmNsb3NpbmdMYXllcigpIDogbnVsbHB0cjsKK30KKworc3RhdGljIFJlbmRlckxheWVy
KiBwYXJlbnRMYXllckNyb3NzaW5nRnJhbWVCb3VuZGFyaWVzKFJlbmRlckxheWVyJiBsYXllcikK
K3sKKyAgICBpZiAoYXV0byogcGFyZW50TGF5ZXIgPSBsYXllci5wYXJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIHBhcmVudExheWVyOworCisgICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5
ZXIobGF5ZXIucmVuZGVyZXIoKSk7Cit9CisKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1RyYW5zcGFy
ZW50T3JGdWxseUNsaXBwZWRSZXNwZWN0aW5nUGFyZW50RnJhbWVzKCkgY29uc3QKIHsKICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIG1pbmltdW1WaXNpYmxlT3BhY2l0eSA9IDAuMDE7CiAKICAgICBm
bG9hdCBjdXJyZW50T3BhY2l0eSA9IDE7Ci0gICAgYXV0byogbGF5ZXIgPSBlbmNsb3NpbmdMYXll
cigpOwotICAgIHdoaWxlIChsYXllcikgewotICAgICAgICBhdXRvJiBsYXllclJlbmRlcmVyID0g
bGF5ZXItPnJlbmRlcmVyKCk7Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gbGF5ZXJSZW5kZXJlci5z
dHlsZSgpOwotICAgICAgICBpZiAoYXV0byogYm94ID0gbGF5ZXItPnJlbmRlckJveCgpKSB7Ci0g
ICAgICAgICAgICBib29sIGlzT3ZlcmZsb3dIaWRkZW4gPSBzdHlsZS5vdmVyZmxvd1goKSA9PSBP
dmVyZmxvdzo6SGlkZGVuIHx8IHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpIaWRkZW47
Ci0gICAgICAgICAgICBpZiAoaXNPdmVyZmxvd0hpZGRlbiAmJiAhYm94LT5pc0RvY3VtZW50RWxl
bWVudFJlbmRlcmVyKCkgJiYgYm94LT5jb250ZW50U2l6ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBjdXJyZW50T3BhY2l0eSAq
PSBzdHlsZS5vcGFjaXR5KCk7CisgICAgZm9yIChhdXRvKiBsYXllciA9IGVuY2xvc2luZ0xheWVy
KCk7IGxheWVyOyBsYXllciA9IHBhcmVudExheWVyQ3Jvc3NpbmdGcmFtZUJvdW5kYXJpZXMoKmxh
eWVyKSkgeworICAgICAgICBjdXJyZW50T3BhY2l0eSAqPSBsYXllci0+cmVuZGVyZXIoKS5zdHls
ZSgpLm9wYWNpdHkoKTsKICAgICAgICAgaWYgKGN1cnJlbnRPcGFjaXR5IDwgbWluaW11bVZpc2li
bGVPcGFjaXR5KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgICAgIGF1
dG8qIHBhcmVudExheWVyID0gbGF5ZXItPnBhcmVudCgpOwotICAgICAgICBpZiAoIXBhcmVudExh
eWVyKSB7Ci0gICAgICAgICAgICBpZiAoIWlzPFJlbmRlclZpZXc+KGxheWVyUmVuZGVyZXIpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgYXV0byYgZW5jbG9z
aW5nRnJhbWUgPSBkb3duY2FzdDxSZW5kZXJWaWV3PihsYXllclJlbmRlcmVyKS52aWV3KCkuZnJh
bWUoKTsKLSAgICAgICAgICAgIGlmIChlbmNsb3NpbmdGcmFtZS5pc01haW5GcmFtZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKGF1dG8gKmZyYW1l
T3duZXJSZW5kZXJlciA9IGVuY2xvc2luZ0ZyYW1lLm93bmVyRWxlbWVudCgpLT5yZW5kZXJlcigp
KQotICAgICAgICAgICAgICAgIHBhcmVudExheWVyID0gZnJhbWVPd25lclJlbmRlcmVyLT5lbmNs
b3NpbmdMYXllcigpOwotICAgICAgICB9Ci0gICAgICAgIGxheWVyID0gcGFyZW50TGF5ZXI7Cisg
ICAgZm9yIChhdXRvKiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7IGxheWVyOyBsYXllciA9IGVu
Y2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIobGF5ZXItPnJlbmRlcmVyKCkpKSB7CisgICAgICAgIGlm
IChsYXllci0+c2VsZkNsaXBSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggY2Q2MWZmNWU0OWVh
NWRiYmRmNDBmZWU2NzhmM2QwMmZkMDRkMWUzYi4uNzZkOTU0YjMyNmViN2QyZjcyMDA4YjA3MzYx
MjUxN2U1MDQ1MGQzOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE5LTAzLTAyICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIE5hdGl2ZSB0ZXh0IHNl
bGVjdGlvbiBVSSBpcyBpbmNvcnJlY3RseSBzdXBwcmVzc2VkIGluIE1pY3Jvc29mdCBWaXNpbwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1MTc4Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS80ODUxOTM5ND4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgbGF5b3V0IHRlc3QgdGhhdCBmb2N1
c2VzIHNldmVyYWwgZGlmZmVyZW50IHRleHQgZmllbGRzIGFuZCBjaGVja3Mgd2hldGhlciBvciBu
b3QgZWRpdGluZyBVSSBpcyBzaG93bjoKKworICAgICAgICAxLiBBIHRleHQgZmllbGQgaW5zaWRl
IGFuIG92ZXJmbG93OiBoaWRkZW4gY29udGFpbmVyLCBhbGwgd2l0aGluIGFuIGFic29sdXRlbHkg
cG9zaXRpb25lZCBpZnJhbWUsIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgdGV4dCBmaWVsZCBpcyBu
b3QgdmlzaWJsZS4gVGhlIGNhcmV0IHNob3VsZCBiZSBoaWRkZW4uCisKKyAgICAgICAgMi4gQSB0
ZXh0IGZpZWxkIGluc2lkZSBhbiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgaWZyYW1lLCBpbnNpZGUg
YW4gb3ZlcmZsb3c6IGhpZGRlbiBjb250YWluZXIsIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgdGV4
dCBmaWVsZCBpcyB2aXNpYmxlLiBUaGUgY2FyZXQgc2hvdWxkIGJlIHZpc2libGUuCisKKyAgICAg
ICAgMy4gQSB0ZXh0IGZpZWxkIGluc2lkZSBhIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBpZnJhbWUg
aW4gYW4gb3ZlcmZsb3c6IGhpZGRlbiBjb250YWluZXIsIHN1Y2ggdGhhdCB0aGUgdGV4dCBmaWVs
ZAorICAgICAgICBpcyBub3QgdmlzaWJsZS4gVGhlIGNhcmV0IHNob3VsZCBiZSBoaWRkZW4uCisK
KyAgICAgICAgNC4gQSB0ZXh0IGZpZWxkIHRoYXQgaXMgcG9zaXRpb246IGZpeGVkIGluc2lkZSBh
biBvdmVyZmxvdzogaGlkZGVuIGNvbnRhaW5lciwgc3VjaCB0aGF0IHRoZSB0ZXh0IGZpZWxkIGlz
CisgICAgICAgIHZpc2libGUuIFRoZSBjYXJldCBzaG91bGQgYmUgdmlzaWJsZS4KKworICAgICAg
ICAqIGVkaXRpbmcvc2VsZWN0aW9uL2lvcy9kby1ub3QtaGlkZS1zZWxlY3Rpb24taW4tdmlzaWJs
ZS1jb250YWluZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVj
dGlvbi9pb3MvZG8tbm90LWhpZGUtc2VsZWN0aW9uLWluLXZpc2libGUtY29udGFpbmVyLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2lvcy9oaWRlLXNlbGVjdGlvbi1p
bi1lbXB0eS1vdmVyZmxvdy1oaWRkZW4tY29udGFpbmVyLmh0bWw6CisgICAgICAgICogcmVzb3Vy
Y2VzL3VpLWhlbHBlci5qczoKKyAgICAgICAgKHdpbmRvdy5VSUhlbHBlci5hY3RpdmF0ZUVsZW1l
bnRBbmRXYWl0Rm9ySW5wdXRTZXNzaW9uKToKKworICAgICAgICBBZGQgYSBjb252ZW5pZW5jZSBm
dW5jdGlvbiBpbiBVSUhlbHBlciB0aGF0IHRhcHMgYSBnaXZlbiBlbGVtZW50IGFuZCB3YWl0cyBm
b3IgdGhlIGtleWJvYXJkIHRvIHNob3cuCisKIDIwMTktMDMtMDIgIFdlbnNvbiBIc2llaCAgPHdl
bnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gUHJvZ3JhbW1hdGljIHBhc3Rl
IGFjY2VzcyBzaG91bGQgYmUgZ3JhbnRlZCB3aGVuIGNvcHlpbmcgYW5kIHBhc3Rpbmcgd2l0aGlu
IHRoZSBzYW1lIG9yaWdpbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vaW9zL2RvLW5vdC1oaWRlLXNlbGVjdGlvbi1pbi12aXNpYmxlLWNvbnRhaW5lci1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvZG8tbm90LWhpZGUtc2Vs
ZWN0aW9uLWluLXZpc2libGUtY29udGFpbmVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDdj
NGI3NjczMGJmYmEzMmY4NmEyZjM1YmY4YzM5ZjExODQyYWMwCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaW9zL2RvLW5vdC1oaWRlLXNlbGVjdGlvbi1p
bi12aXNpYmxlLWNvbnRhaW5lci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOCBAQAorRmlyc3Qg
ZmllbGQgIFNlY29uZCBmaWVsZCAgVGhpcmQgZmllbGQgRm91cnRoIGZpZWxkIAorCitWZXJpZmll
cyB0aGF0IG5hdGl2ZSBzZWxlY3Rpb24gVUkgaXMgbm90IHN1cHByZXNzZWQgd2hlbiBmb2N1c2lu
ZyBhbiBpbnB1dCB0aGF0IGlzIGluc2lkZSBhbiBlbXB0eSBjb250YWluZXIgd2l0aCBgb3ZlcmZs
b3c6IGhpZGRlbmAsIGJ1dCBpcyBwb3NpdGlvbmVkIGFic29sdXRlbHkgc3VjaCB0aGF0IGl0IGlz
IHN0aWxsIHZpc2libGUuIFRvIG1hbnVhbGx5IHZlcmlmeSwgY2xpY2sgb24gZWFjaCBvZiB0aGUg
Zm91ciBidXR0b25zIHRvIG1vdmUgZm9jdXMgaW50byBlZGl0YWJsZSBhcmVhcy4gQWZ0ZXIgdGFw
cGluZyB0aGUgZmlyc3QgYW5kIHRoaXJkIGJ1dHRvbnMsIHlvdSBzaG91bGQgbm90IHNlZSBhIGNh
cmV0IHZpZXc7IGFmdGVyIHRhcHBpbmcgdGhlIHNlY29uZCBhbmQgZm91cnRoIGJ1dHRvbnMsIHlv
dSBzaG91bGQgc2VlIGEgY2FyZXQgdmlldy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CitXYWl0aW5nIGZvciBjYXJldCB0byBoaWRlLgorUEFTUyBDYXJldCB3YXMgaGlkZGVuLgorV2Fp
dGluZyBmb3IgY2FyZXQgdG8gc2hvdy4KK1BBU1MgQ2FyZXQgd2FzIHNob3duLgorV2FpdGluZyBm
b3IgY2FyZXQgdG8gaGlkZS4KK1BBU1MgQ2FyZXQgd2FzIGhpZGRlbi4KK1dhaXRpbmcgZm9yIGNh
cmV0IHRvIHNob3cuCitQQVNTIENhcmV0IHdhcyBzaG93bi4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9pb3MvZG8tbm90LWhpZGUtc2VsZWN0aW9uLWluLXZpc2libGUtY29u
dGFpbmVyLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvZG8tbm90LWhp
ZGUtc2VsZWN0aW9uLWluLXZpc2libGUtY29udGFpbmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTA4NGZm
ZTVhZDdmNWU0ZjliY2Y0YWY1ZmM4ODczNmIzMTM4MjMxMAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2lvcy9kby1ub3QtaGlkZS1zZWxlY3Rpb24taW4t
dmlzaWJsZS1jb250YWluZXIuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPCFET0NUWVBFIGh0bWw+
IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGlibGVWaWV3cG9ydD10cnVlIF0gLS0+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRl
dmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCB1c2VyLXNjYWxhYmxlPW5vIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vcmVzb3VyY2VzL3VpLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c3R5bGU+Cisu
aGlkZGVuIHsKKyAgICBoZWlnaHQ6IDA7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworaWZy
YW1lIHsKKyAgICB3aWR0aDogMTAwcHg7CisgICAgaGVpZ2h0OiA0NHB4OworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKyNmcmFtZTIgeworICAgIHRvcDog
MTAwcHg7Cit9CisKKyNmcmFtZTMgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKworaW5w
dXQgeworICAgIHBvc2l0aW9uOiBmaXhlZDsKK30KKzwvc3R5bGU+Cis8c2NyaXB0PgoranNUZXN0
SXNBc3luYyA9IHRydWU7CisKK2FzeW5jIGZ1bmN0aW9uIGVuc3VyZUNhcmV0SXNWaXNpYmxlKGlz
VmlzaWJsZSkKK3sKKyAgICBpZiAoaXNWaXNpYmxlKQorICAgICAgICBkZWJ1ZygiV2FpdGluZyBm
b3IgY2FyZXQgdG8gc2hvdy4iKTsKKyAgICBlbHNlCisgICAgICAgIGRlYnVnKCJXYWl0aW5nIGZv
ciBjYXJldCB0byBoaWRlLiIpOworCisgICAgbGV0IHJlY3QgPSBudWxsOworICAgIHdoaWxlICgh
cmVjdCB8fCAoIWlzVmlzaWJsZSAmJiByZWN0LndpZHRoICYmIHJlY3QuaGVpZ2h0KSB8fCAoaXNW
aXNpYmxlICYmICghcmVjdC53aWR0aCB8fCAhcmVjdC5oZWlnaHQpKSkKKyAgICAgICAgcmVjdCA9
IGF3YWl0IFVJSGVscGVyLmdldFVJQ2FyZXRWaWV3UmVjdCgpOworCisgICAgaWYgKGlzVmlzaWJs
ZSkKKyAgICAgICAgdGVzdFBhc3NlZCgiQ2FyZXQgd2FzIHNob3duLiIpOworICAgIGVsc2UKKyAg
ICAgICAgdGVzdFBhc3NlZCgiQ2FyZXQgd2FzIGhpZGRlbi4iKTsKK30KKworYWRkRXZlbnRMaXN0
ZW5lcigibG9hZCIsIGFzeW5jICgpID0+IHsKKyAgICBkZXNjcmlwdGlvbigiVmVyaWZpZXMgdGhh
dCBuYXRpdmUgc2VsZWN0aW9uIFVJIGlzIG5vdCBzdXBwcmVzc2VkIHdoZW4gZm9jdXNpbmcgYW4g
aW5wdXQgdGhhdCBpcyBpbnNpZGUgYW4gZW1wdHkgY29udGFpbmVyIHdpdGggYG92ZXJmbG93OiBo
aWRkZW5gLCBidXQgaXMgcG9zaXRpb25lZCBhYnNvbHV0ZWx5IHN1Y2ggdGhhdCBpdCBpcyBzdGls
bCB2aXNpYmxlLiBUbyBtYW51YWxseSB2ZXJpZnksIGNsaWNrIG9uIGVhY2ggb2YgdGhlIGZvdXIg
YnV0dG9ucyB0byBtb3ZlIGZvY3VzIGludG8gZWRpdGFibGUgYXJlYXMuIEFmdGVyIHRhcHBpbmcg
dGhlIGZpcnN0IGFuZCB0aGlyZCBidXR0b25zLCB5b3Ugc2hvdWxkIG5vdCBzZWUgYSBjYXJldCB2
aWV3OyBhZnRlciB0YXBwaW5nIHRoZSBzZWNvbmQgYW5kIGZvdXJ0aCBidXR0b25zLCB5b3Ugc2hv
dWxkIHNlZSBhIGNhcmV0IHZpZXcuIik7CisKKyAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGNvbnN0IHRlc3RDYXNlIG9mIFtbZmlyc3QsIGZh
bHNlXSwgW3NlY29uZCwgdHJ1ZV0sIFt0aGlyZCwgZmFsc2VdLCBbZm91cnRoLCB0cnVlXV0pIHsK
KyAgICAgICAgY29uc3QgW2J1dHRvblRvVGFwLCBleHBlY3RlZFZpc2liaWxpdHldID0gdGVzdENh
c2U7CisgICAgICAgIGF3YWl0IFVJSGVscGVyLmFjdGl2YXRlRWxlbWVudEFuZFdhaXRGb3JJbnB1
dFNlc3Npb24oYnV0dG9uVG9UYXApOworICAgICAgICBhd2FpdCBlbnN1cmVDYXJldElzVmlzaWJs
ZShleHBlY3RlZFZpc2liaWxpdHkpOworICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJs
dXIoKTsKKyAgICB9CisKKyAgICBhd2FpdCBVSUhlbHBlci53YWl0Rm9yS2V5Ym9hcmRUb0hpZGUo
KTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBj
bGFzcz0iaGlkZGVuIj4KKyAgICA8YnV0dG9uIGlkPSJmaXJzdCI+Rmlyc3QgZmllbGQ8L2J1dHRv
bj4KKyAgICA8YnV0dG9uIGlkPSJzZWNvbmQiPlNlY29uZCBmaWVsZDwvYnV0dG9uPgorICAgIDxi
dXR0b24gaWQ9InRoaXJkIj5UaGlyZCBmaWVsZDwvYnV0dG9uPgorICAgIDxidXR0b24gaWQ9ImZv
dXJ0aCI+Rm91cnRoIGZpZWxkPC9idXR0b24+CisgICAgPGlmcmFtZSBpZD0iZnJhbWUxIiBzcmNk
b2M9IgorICAgICAgICA8ZGl2IHN0eWxlPSdvdmVyZmxvdzogaGlkZGVuOyBoZWlnaHQ6IDA7IGJv
eC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMDsnPgorICAgICAg
ICAgICAgPGlucHV0PjwvaW5wdXQ+CisgICAgICAgIDwvZGl2PiI+PC9pZnJhbWU+CisgICAgPGRp
diBjbGFzcz0iaGlkZGVuIj4KKyAgICAgICAgPGlmcmFtZSBpZD0iZnJhbWUyIiBzcmNkb2M9Ijxp
bnB1dD48L2lucHV0PiI+PC9pZnJhbWU+CisgICAgICAgIDxpZnJhbWUgaWQ9ImZyYW1lMyIgc3Jj
ZG9jPSI8aW5wdXQ+PC9pbnB1dD4iPjwvaWZyYW1lPgorICAgICAgICA8aW5wdXQ+PC9pbnB1dD4K
KyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8L2JvZHk+Cis8c2NyaXB0PgorZnVuY3Rpb24gY3JlYXRlRnJh
bWVGb2N1c0hhbmRsZXIoaWRlbnRpZmllcikgeworICAgIHJldHVybiAoZXZlbnQpID0+IHsKKyAg
ICAgICAgY29uc3QgZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZGVudGlmaWVyKTsK
KyAgICAgICAgZnJhbWUuZm9jdXMoKTsKKyAgICAgICAgZnJhbWUuY29udGVudERvY3VtZW50LnF1
ZXJ5U2VsZWN0b3IoImlucHV0IikuZm9jdXMoKTsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKKyAgICB9OworfQorCitmaXJzdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGNyZWF0
ZUZyYW1lRm9jdXNIYW5kbGVyKCJmcmFtZTEiKSk7CitzZWNvbmQuYWRkRXZlbnRMaXN0ZW5lcigi
Y2xpY2siLCBjcmVhdGVGcmFtZUZvY3VzSGFuZGxlcigiZnJhbWUyIikpOwordGhpcmQuYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCBjcmVhdGVGcmFtZUZvY3VzSGFuZGxlcigiZnJhbWUzIikpOwor
Zm91cnRoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZXZlbnQgPT4geworICAgIGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuZm9jdXMoKTsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOworfSk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Vk
aXRpbmcvc2VsZWN0aW9uL2lvcy9oaWRlLXNlbGVjdGlvbi1pbi1lbXB0eS1vdmVyZmxvdy1oaWRk
ZW4tY29udGFpbmVyLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9pb3MvaGlk
ZS1zZWxlY3Rpb24taW4tZW1wdHktb3ZlcmZsb3ctaGlkZGVuLWNvbnRhaW5lci5odG1sCmluZGV4
IGRiM2YwNTRiYjYyMDc2MWQ1MjA0YjJiNDMwNzRlZTVkZDZlNTRjZjcuLjNiMDViNTY1NzFhYjkx
YjgzMDA4YzIyYWZiZjM4ZTY1NTc3Y2U1NGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRp
bmcvc2VsZWN0aW9uL2lvcy9oaWRlLXNlbGVjdGlvbi1pbi1lbXB0eS1vdmVyZmxvdy1oaWRkZW4t
Y29udGFpbmVyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaW9zL2hp
ZGUtc2VsZWN0aW9uLWluLWVtcHR5LW92ZXJmbG93LWhpZGRlbi1jb250YWluZXIuaHRtbApAQCAt
MjYsMTAgKzI2LDkgQEAgYnV0dG9uIHsKIH0KIDwvc3R5bGU+CiA8c2NyaXB0PgotYWRkRXZlbnRM
aXN0ZW5lcigibG9hZCIsIHJ1blRlc3QpOwoganNUZXN0SXNBc3luYyA9IHRydWU7CiAKLWFzeW5j
IGZ1bmN0aW9uIHJ1blRlc3QoKSB7CithZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgYXN5bmMgKCkg
PT4gewogICAgIGRlc2NyaXB0aW9uKCJWZXJpZmllcyB0aGF0IG5hdGl2ZSBzZWxlY3Rpb24gVUkg
aXMgc3VwcHJlc3NlZCB3aGVuIGZvY3VzaW5nIGEgdGV4dGFyZWEgdGhhdCBpcyBjb21wbGV0ZWx5
IGhpZGRlbiAiCiAgICAgICAgICsgInVuZGVybmVhdGggYW4gZW1wdHkgY29udGFpbmVyIHdpdGgg
PGNvZGU+b3ZlcmZsb3c6IGhpZGRlbjs8L2NvZGU+LiBUbyBtYW51YWxseSB0ZXN0LCB0YXAgdGhl
IHRvcCBidXR0b24sICIKICAgICAgICAgKyAiYW5kIHRoZW4gdGFwIG9uIHRoZSBib3R0b20gYnV0
dG9uLiBJbiBib3RoIGNhc2VzLCB0aGVyZSBzaG91bGQgYmUgbm8gcGxhdGZvcm0gc2VsZWN0aW9u
IHNob3duLiIpOwpAQCAtNjQsOSArNjMsOSBAQCBhc3luYyBmdW5jdGlvbiBydW5UZXN0KCkgewog
CiAgICAgZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTsK
ICAgICBhd2FpdCBVSUhlbHBlci53YWl0Rm9yS2V5Ym9hcmRUb0hpZGUoKTsKLSAgICBkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24sICNjb250YWluZXIiKS5mb3JFYWNoKGVsZW1lbnQg
PT4gZWxlbWVudC5yZW1vdmUoKSkKKyAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJidXR0
b24sICNjb250YWluZXIiKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5yZW1vdmUoKSk7CiAg
ICAgZmluaXNoSlNUZXN0KCk7Ci19Cit9KTsKIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+CkBA
IC03Niw3ICs3NSw3IEBAIGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CiA8L2J1dHRvbj4KIDxk
aXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgPHRleHRhcmVhIGlkPSJlZGl0b3IiPjwvdGV4dGFyZWE+
Ci0gICAgPGlmcmFtZSBpZD0iZnJhbWUiIHNyY2RvYz0iPHRleHRhcmVhIGlkPSdlZGl0b3InPjwv
dGV4dGFyZWE+IiBvbmxvYWQ9InJ1blRlc3QoKSI+PC9pZnJhbWU+CisgICAgPGlmcmFtZSBpZD0i
ZnJhbWUiIHNyY2RvYz0iPHRleHRhcmVhIGlkPSdlZGl0b3InPjwvdGV4dGFyZWE+Ij48L2lmcmFt
ZT4KIDwvZGl2PgogPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgogPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpz
IGIvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3VpLWhlbHBlci5qcwppbmRleCBkY2Q0ZWIwY2Y5MDg0
MGJjNzFmYWNiMDcyNTYxMjA2Njc0YTIzZDllLi4zYTYxODBlNDExNzMxY2FjYjdjYWUwNmM0NmM5
YTMyNDNiZWNkYWYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVy
LmpzCisrKyBiL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMKQEAgLTIyNCw2ICsy
MjQsMTMgQEAgd2luZG93LlVJSGVscGVyID0gY2xhc3MgVUlIZWxwZXIgewogICAgICAgICB9KTsK
ICAgICB9CiAKKyAgICBzdGF0aWMgYWN0aXZhdGVFbGVtZW50QW5kV2FpdEZvcklucHV0U2Vzc2lv
bihlbGVtZW50KQorICAgIHsKKyAgICAgICAgY29uc3QgeCA9IGVsZW1lbnQub2Zmc2V0TGVmdCAr
IGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgICAgICBjb25zdCB5ID0gZWxlbWVudC5vZmZz
ZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAgICAgIHJldHVybiB0aGlzLmFj
dGl2YXRlQW5kV2FpdEZvcklucHV0U2Vzc2lvbkF0KHgsIHkpOworICAgIH0KKwogICAgIHN0YXRp
YyBhY3RpdmF0ZUZvcm1Db250cm9sKGVsZW1lbnQpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMu
aXNXZWJLaXQyKCkgfHwgIXRoaXMuaXNJT1MoKSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>