<?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>198217</bug_id>
          
          <creation_ts>2019-05-23 23:26:29 -0700</creation_ts>
          <short_desc>iOS: REGRESSION(async scroll): Caret doesn&apos;t scroll when scrolling textarea</short_desc>
          <delta_ts>2019-07-01 11:14:18 -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 Local Build</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>iOS 12</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="Daniel Bates">dbates</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jamesr</cc>
    
    <cc>koivisto</cc>
    
    <cc>luiz</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</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>1538948</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-05-23 23:26:29 -0700</bug_when>
    <thetext>Seen on iPad in landscape orientation (&lt;—probably doesn’t matter) using a hardware keyboard.

Steps to reproduce:

1. Visit &lt;https://bugs.webkit.org/show_bug.cgi?id=198181&gt;.
2. Reply to comment #4: click Reply to the right of that comment.
3. Place the cursor somewhere that would be scrolled of screen, say line 4.
4. Scroll the text area using your finger.

Then the care is drawn at the wrong location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538949</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-23 23:26:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/51097296&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540665</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-05-31 00:48:51 -0700</bug_when>
    <thetext>This is a regression from async overflow scroll work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549100</commentid>
    <comment_count>3</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-06-30 14:52:06 -0700</bug_when>
    <thetext>I looked into this and made some observations:

1.  How did it work in iOS 12?

Selection would not update during async scrolling; after scrolling ends, the
selection rect would then appear in the right place. In iOS 12, we get a
bunch of calls to AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll
with the scrollingLayerPositionAction being Sync. Then, at the end, we get
one with Set instead. This call with ScrollingLayerPositionAction::Set at
the end allows us to update the selection to the final state.

What is responsible for scheduling the final scroll position update using
ScrollingLayerPositionAction::Set?

    ↪ AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll
      …
    ↪ RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll
    ↪ ScrollingTree::scrollPositionChangedViaDelegatedScrolling
    ↪ -[WKScrollingNodeScrollViewDelegate scrollViewDidEndDecelerating:]

...in the case where the scrolling gesture ends with momentum; otherwise,
the last update is triggered via -[WKScrollingNodeScrollViewDelegate
scrollViewDidEndDragging:willDecelerate:]. In both cases, the important bit
is that the _inUserInteraction flag is set to NO, which causes us to use
ScrollingLayerPositionAction::Set instead of ScrollingLayerPositionAction::Sync.

2.  What happens in iOS 13?

During async scrolling, we only get ScrollingLayerPositionAction::Sync.
There is no Set action at the end, so we never try to send the final editor
state update after async scrolling. This is due to two reasons:

a.  When scrolling ends, we no longer push a scrolling update through
    RemoteScrollingCoordinatorProxy, since
    ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling now bails if
    the scroll position was unchanged (that is, the check for
    scrollPositionChanged).

b.  Even if we did push a scrolling update after scrolling ends, we no
    longer use ScrollingLayerPositionAction::Set if we&apos;re not in user
    interaction (that is, if userInteraction is false in
    ScrollingTreeScrollingNodeDelegateIOS::scrollViewDidScroll), so we would
    not end up scheduling an editor state update in the web process anyways.

Tweaking the code to avoid these two conditions seems to &quot;fix&quot; this bug (at
least, by making it behave like it does in iOS 12 and prior).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549101</commentid>
    <comment_count>4</comment_count>
      <attachid>373198</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-06-30 14:56:38 -0700</bug_when>
    <thetext>Created attachment 373198
Restore iOS 12 behavior; for EWS only</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549105</commentid>
    <comment_count>5</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-06-30 15:11:42 -0700</bug_when>
    <thetext>&gt; Tweaking the code to avoid these two conditions seems to &quot;fix&quot; this bug (at
&gt; least, by making it behave like it does in iOS 12 and prior).

That said, our shipping behavior isn’t…super great. The selection view appears in the wrong place until the scrolling stops, after which the selection jumps to the expected rects.

I think we should consider scheduling editor state updates during async scrolling (not just at the end). This was probably not feasible when we were computing and sending editor states immediately during scrolling; but after fairly recent work in this area, editor state updates are only scheduled and computed during the next remote layer tree flush, so it doesn’t sound crazy to have updateScrollPositionAfterAsyncScroll always schedule editor state updates, not just when scrollingLayerPositionAction == ScrollingLayerPositionAction::Set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549207</commentid>
    <comment_count>6</comment_count>
      <attachid>373232</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-07-01 07:36:26 -0700</bug_when>
    <thetext>Created attachment 373232
Approach #2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549215</commentid>
    <comment_count>7</comment_count>
      <attachid>373235</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-07-01 08:02:07 -0700</bug_when>
    <thetext>Created attachment 373235
Approach #1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549253</commentid>
    <comment_count>8</comment_count>
      <attachid>373235</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-01 10:39:00 -0700</bug_when>
    <thetext>Comment on attachment 373235
Approach #1

The intent is always to have a &quot;Set&quot; as the last thing, so this approach seems good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549254</commentid>
    <comment_count>9</comment_count>
      <attachid>373235</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-07-01 10:40:51 -0700</bug_when>
    <thetext>Comment on attachment 373235
Approach #1

Sounds good — thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549260</commentid>
    <comment_count>10</comment_count>
      <attachid>373235</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-01 11:14:16 -0700</bug_when>
    <thetext>Comment on attachment 373235
Approach #1

Clearing flags on attachment: 373235

Committed r247013: &lt;https://trac.webkit.org/changeset/247013&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549261</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-01 11:14:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373198</attachid>
            <date>2019-06-30 14:56:38 -0700</date>
            <delta_ts>2019-07-01 08:17:10 -0700</delta_ts>
            <desc>Restore iOS 12 behavior; for EWS only</desc>
            <filename>bug-198217-20190630145638.patch</filename>
            <type>text/plain</type>
            <size>5462</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2OTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU1YmFjZGIxOGZiOTc4
OGY4Y2ZiMGMyYTZhOTdmNWVmZDFhOGM1NC4uYmMzYTU4YzQ5OTZjNDg3MTZhM2MyYTBlNjM4YzBm
NzIwNjhiMDBlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTA2LTMwICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIGlPUzogUkVHUkVT
U0lPTihhc3luYyBzY3JvbGwpOiBDYXJldCBkb2Vzbid0IHNjcm9sbCB3aGVuIHNjcm9sbGluZyB0
ZXh0YXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk4MjE3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTA5NzI5Nj4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgRVdTIG9ubHkuCisK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6d2FzU2Nyb2xs
ZWRCeURlbGVnYXRlZFNjcm9sbGluZyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGUuaDoKKwogMjAxOS0wNi0yOCAgWmFsYW4gQnVqdGFzICA8emFs
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtUZXh0IGF1dG9zaXppbmddW2lQYWRPU10gYmluZy5j
b20gaXMgaGFyZCB0byByZWFkIGV2ZW4gd2l0aCBib29zdGVkIHRleHQgYmVjYXVzZSBvZiB0aGUg
bGluZSBoZWlnaHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOGVhZDU0ZmY2ZjRhYmVmYjU4YTI4NmUxOWI5MTkzMWQw
YWJmNDVhMi4uZDgyYjQ1ZmMzNDdjMWUzYjA5MjllN2Y5ZjZiZjE2MmJiMzllZDEwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0wNi0zMCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hz
aWVoQGFwcGxlLmNvbT4KKworICAgICAgICBpT1M6IFJFR1JFU1NJT04oYXN5bmMgc2Nyb2xsKTog
Q2FyZXQgZG9lc24ndCBzY3JvbGwgd2hlbiBzY3JvbGxpbmcgdGV4dGFyZWEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODIxNworICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNTEwOTcyOTY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUGF0Y2ggZm9yIEVXUyBvbmx5LgorCisgICAgICAgICogVUlQcm9jZXNz
L1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlP
Uy5tbToKKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUzo6c2Nyb2xsVmlld0RpZFNjcm9sbCk6CisKIDIwMTktMDYtMjggIFJ5YW4gSGFkZGFkICA8
cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYXR0
ZW1wdCBhZnRlciByMjQ2OTI4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCmluZGV4IDUxYjM1NmE5
NDFmNzEzYTMxNGZjMDE4MmZmZGM0YzRhNjAzMzMxOTQuLjQ0ZDZlOGM2NjdiNjZiZTlkYjMzYmEw
ZjgyMjc2NGUxMGVlNmY3NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKQEAgLTE5NCwxMCAr
MTk0LDEwIEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmFwcGx5TGF5ZXJQb3Np
dGlvbnMoKQogICAgIHJlcG9zaXRpb25SZWxhdGVkTGF5ZXJzKCk7CiB9CiAKLXZvaWQgU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGU6Ondhc1Njcm9sbGVkQnlEZWxlZ2F0ZWRTY3JvbGxpbmcoY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIE9wdGlvbmFsPEZsb2F0UmVjdD4gb3ZlcnJpZGVMYXlv
dXRWaWV3cG9ydCkKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6Ondhc1Njcm9sbGVk
QnlEZWxlZ2F0ZWRTY3JvbGxpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIE9wdGlvbmFs
PEZsb2F0UmVjdD4gb3ZlcnJpZGVMYXlvdXRWaWV3cG9ydCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlv
bkFjdGlvbiBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKQogewogICAgIGJvb2wgc2Nyb2xs
UG9zaXRpb25DaGFuZ2VkID0gIXNjcm9sbFBvc2l0aW9uQW5kTGF5b3V0Vmlld3BvcnRNYXRjaChw
b3NpdGlvbiwgb3ZlcnJpZGVMYXlvdXRWaWV3cG9ydCk7Ci0gICAgaWYgKCFzY3JvbGxQb3NpdGlv
bkNoYW5nZWQpCisgICAgaWYgKCFzY3JvbGxQb3NpdGlvbkNoYW5nZWQgJiYgc2Nyb2xsaW5nTGF5
ZXJQb3NpdGlvbkFjdGlvbiAhPSBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fY3VycmVudFNjcm9sbFBvc2l0aW9uID0gYWRqdXN0ZWRT
Y3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgU2Nyb2xsUG9zaXRpb25DbGFtcDo6Tm9uZSk7CkBAIC0y
MDYsNyArMjA2LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6d2FzU2Nyb2xs
ZWRCeURlbGVnYXRlZFNjcm9sbGluZyhjb25zdCBGbG9hdFBvaW4KICAgICByZXBvc2l0aW9uUmVs
YXRlZExheWVycygpOwogCiAgICAgc2Nyb2xsaW5nVHJlZSgpLm5vdGlmeVJlbGF0ZWROb2Rlc0Fm
dGVyU2Nyb2xsUG9zaXRpb25DaGFuZ2UoKnRoaXMpOwotICAgIHNjcm9sbGluZ1RyZWUoKS5zY3Jv
bGxpbmdUcmVlTm9kZURpZFNjcm9sbCgqdGhpcyk7CisgICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9s
bGluZ1RyZWVOb2RlRGlkU2Nyb2xsKCp0aGlzLCBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9u
KTsKICAgICBzY3JvbGxpbmdUcmVlKCkuZGlkU2Nyb2xsQnlEZWxlZ2F0ZWRTY3JvbGxpbmcoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKaW5kZXggYjIyZmZhNzkyMjVhOTI5Y2IwNjlhNjczMGYx
YmVkNzkxOGQzMjQwOS4uN2U1ZTQ1Y2EzMjk3ZWVjMGRiZjFlZDY3Nzk3ZWFjOWUzN2U1OGJhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZS5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNjcm9sbFRvKGNvbnN0IEZsb2F0UG9pbnQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNl
ciwgU2Nyb2xsUG9zaXRpb25DbGFtcCA9IFNjcm9sbFBvc2l0aW9uQ2xhbXA6OlRvQ29udGVudEVk
Z2VzKTsKICAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYsIFNjcm9sbFBvc2l0aW9u
Q2xhbXAgPSBTY3JvbGxQb3NpdGlvbkNsYW1wOjpUb0NvbnRlbnRFZGdlcyk7CiAKLSAgICB2b2lk
IHdhc1Njcm9sbGVkQnlEZWxlZ2F0ZWRTY3JvbGxpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24sIE9wdGlvbmFsPEZsb2F0UmVjdD4gb3ZlcnJpZGVMYXlvdXRWaWV3cG9ydCA9IHsgfSk7Cisg
ICAgdm9pZCB3YXNTY3JvbGxlZEJ5RGVsZWdhdGVkU2Nyb2xsaW5nKGNvbnN0IEZsb2F0UG9pbnQm
IHBvc2l0aW9uLCBPcHRpb25hbDxGbG9hdFJlY3Q+IG92ZXJyaWRlTGF5b3V0Vmlld3BvcnQgPSB7
IH0sIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24gPSBTY3JvbGxpbmdMYXllclBvc2l0aW9u
QWN0aW9uOjpTeW5jKTsKICAgICAKICAgICBjb25zdCBGbG9hdFNpemUmIHNjcm9sbGFibGVBcmVh
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFTaXplOyB9CiAgICAgY29uc3Qg
RmxvYXRTaXplJiB0b3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxDb250
ZW50c1NpemU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQppbmRleCA1ZWEwMzgyZDRjN2U0NTE0Y2E4N2ZhODE0
NjBmMmE0YTQ3MWMwZDg1Li4xZTU1ZTRlZjk0ZjNhZGU2ZDA3ZGZiNzg3YmMxYjU2YWE4ZmQ0ZTI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9z
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TLm1tCkBAIC0zMjcsNyArMzI3LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzY3JvbGxWaWV3RGlkU2Nyb2xsKGNvbnN0IEZsb2F0
UG9pbnQKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzY3JvbGxQb3NpdGlvbiA9IFNjcm9s
bGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoc2Nyb2xsT2Zmc2V0LCB0b0Zsb2F0
U2l6ZShzY3JvbGxPcmlnaW4oKSkpOwotICAgIHNjcm9sbGluZ05vZGUoKS53YXNTY3JvbGxlZEJ5
RGVsZWdhdGVkU2Nyb2xsaW5nKHNjcm9sbFBvc2l0aW9uKTsKKyAgICBzY3JvbGxpbmdOb2RlKCku
d2FzU2Nyb2xsZWRCeURlbGVnYXRlZFNjcm9sbGluZyhzY3JvbGxQb3NpdGlvbiwgeyB9LCBpblVz
ZXJJbnRlcmFjdGlvbiA/IFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5bmMgOiBTY3Jv
bGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQpOwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdl
KHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373232</attachid>
            <date>2019-07-01 07:36:26 -0700</date>
            <delta_ts>2019-07-01 10:40:37 -0700</delta_ts>
            <desc>Approach #2</desc>
            <filename>bug-198217-20190701073625.patch</filename>
            <type>text/plain</type>
            <size>11812</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2OTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU1YmFjZGIxOGZiOTc4
OGY4Y2ZiMGMyYTZhOTdmNWVmZDFhOGM1NC4uNWI0NWYzMTc5MDkxNTgxMjQxMTE4ZWRkMGM0ZTNk
ZGI5NWIwNzI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE5LTA2LTMwICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIGlPUzogUkVHUkVT
U0lPTihhc3luYyBzY3JvbGwpOiBDYXJldCBkb2Vzbid0IHNjcm9sbCB3aGVuIHNjcm9sbGluZyB0
ZXh0YXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk4MjE3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTA5NzI5Nj4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBpT1MgMTIsIHdoZW4gc2Nyb2xs
aW5nIGEgdGV4dCBzZWxlY3Rpb24gaW4gYW4gZmFzdC1zY3JvbGxpbmcgY29udGFpbmVyLCBlZGl0
b3Igc3RhdGUgdXBkYXRlcyBhcmUgc2NoZWR1bGVkCisgICAgICAgIHVuZGVyIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFBvc2l0aW9uQWZ0ZXJBc3luY1Njcm9sbCBhZnRl
ciB0aGUgZW5kIG9mIHRoZSBzY3JvbGxpbmcgZ2VzdHVyZSwKKyAgICAgICAgd2hlbiB0aGUgc2Ny
b2xsaW5nIGxheWVyIGFjdGlvbiBpcyBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQu
IFRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlIGluIGlPUyAxMywKKyAgICAgICAgYmVjYXVzZSB3
ZSBub3cgYmFpbCBpbiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6d2FzU2Nyb2xsZWRCeURl
bGVnYXRlZFNjcm9sbGluZyBhZnRlciBzY3JvbGwgZGVjZWxlcmF0aW9uCisgICAgICAgIGZpbmlz
aGVzIHNpbmNlIHRoZSBzY3JvbGwgcG9zaXRpb24gZGlkbid0IGVuZCB1cCBjaGFuZ2luZy4gQWRk
aXRpb25hbGx5LCB3ZSBubyBsb25nZXIgdXNlCisgICAgICAgIFNjcm9sbGluZ0xheWVyUG9zaXRp
b25BY3Rpb246OlNldCBpbiB0aGUgY2FzZSB3aGVyZSBzY3JvbGxpbmcgZmluaXNoZWQgZGVjZWxl
cmF0aW5nLCBzaW5jZQorICAgICAgICBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
SU9TOjpzY3JvbGxWaWV3RGlkU2Nyb2xsIG5vIGxvbmdlciB1c2VzIHRvIHZhbHVlIG9mIGluVXNl
ckludGVyYWN0aW9uIHRvCisgICAgICAgIGRldGVybWluZSB3aGV0aGVyIHRvIFNldCBvciBTeW5j
IHNjcm9sbGluZyBsYXllciBwb3NpdGlvbnMuCisKKyAgICAgICAgSW5zdGVhZCwgd2UgY2FuIGZp
eCB0aGlzIGJ5IGhhdmluZyBhc3luYyBzY3JvbGxpbmcgc2NoZWR1bGUgZWRpdG9yIHN0YXRlIHVw
ZGF0ZXMsIGJ1dCBvbmx5IHdoZW4gdGhlIHNlbGVjdGlvbiBpcworICAgICAgICBlaXRoZXIgYSBy
YW5nZSwgb3IgYSBjYXJldCBpbiBlZGl0YWJsZSBjb250ZW50IChpbiB3aGljaCBjYXNlIHVwLXRv
LWRhdGUgc2VsZWN0aW9uIGluZm9ybWF0aW9uIGlzIG5lZWRlZCkuCisKKyAgICAgICAgVGVzdDog
ZWRpdGluZy9zZWxlY3Rpb24vaW9zL3VwZGF0ZS1zZWxlY3Rpb24tYWZ0ZXItb3ZlcmZsb3ctc2Ny
b2xsLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oOgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsUG9zaXRp
b25BZnRlckFzeW5jU2Nyb2xsKToKKwogMjAxOS0wNi0yOCAgWmFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtUZXh0IGF1dG9zaXppbmddW2lQYWRPU10gYmluZy5jb20g
aXMgaGFyZCB0byByZWFkIGV2ZW4gd2l0aCBib29zdGVkIHRleHQgYmVjYXVzZSBvZiB0aGUgbGlu
ZSBoZWlnaHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKaW5kZXggOGVhZDU0ZmY2ZjRhYmVmYjU4YTI4NmUxOWI5MTkzMWQwYWJm
NDVhMi4uZWVhMzJiZmI4Y2ZiZmE4NDI4YWMzMjg2Y2JmMmQ2YzY3MDE5ZWVmMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxOS0wNi0zMCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KKworICAgICAgICBpT1M6IFJFR1JFU1NJT04oYXN5bmMgc2Nyb2xsKTogQ2Fy
ZXQgZG9lc24ndCBzY3JvbGwgd2hlbiBzY3JvbGxpbmcgdGV4dGFyZWEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODIxNworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNTEwOTcyOTY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRG9uJ3QgYm90aGVyIHNjaGVkdWxpbmcgZWRpdG9yIHN0YXRlIHVwZGF0ZXMg
ZHVyaW5nIG92ZXJmbG93IHNjcm9sbGluZyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBkb24ndCBoYXZl
IGEKKyAgICAgICAgc2VsZWN0aW9uLCBvciB0aGUgc2VsZWN0aW9uIGlzIGEgY2FyZXQgaW4gbm9u
LWVkaXRhYmxlIGNvbnRlbnQuIFNlZSB0aGUgV2ViQ29yZSBDaGFuZ2VMb2cgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ2hhbmdlT3ZlcmZsb3dTY3JvbGxQb3NpdGlvbik6CisK
IDIwMTktMDYtMjggIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYXR0ZW1wdCBhZnRlciByMjQ2OTI4LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAppbmRleCBhOTQzZGE4YTc3NzJkNmNjY2Jm
ZTJhYzdkOGVmZmExNDdiMWY4YzFhLi4wZDM0MmJlMzc2ODUzOGM3NDYxYTkyYWYyNTU0MjQ2ZGE0
NDAzNjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaApAQCAt
OTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCog
cm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXND
b250ZW50RWRpdGFibGUoKSBjb25zdDsKLSAgICBib29sIGhhc0VkaXRhYmxlU3R5bGUoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc0VkaXRhYmxlU3R5bGUoKSBjb25zdDsKICAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgY29uc3Q7CiAg
ICAgLy8gUmV0dXJucyBhIHNoYWRvdyB0cmVlIG5vZGUgZm9yIGxlZ2FjeSBzaGFkb3cgdHJlZXMs
IGEgY2hpbGQgb2YgdGhlCiAgICAgLy8gU2hhZG93Um9vdCBub2RlIGZvciBuZXcgc2hhZG93IHRy
ZWVzLCBvciAwIGZvciBub24tc2hhZG93IHRyZWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRl
eCBjYTY4Zjc2MzA3NjVjYmNiZTU5OGQwNWU3MGZmZWFmMTAyMzdkYWMyLi5hYTRjOTMxODk2MDE3
NDE4NTJhNTVmZmRhZDQxYzZiMDU3ZWMyYjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAt
MzM5LDcgKzMzOSw3IEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlU2Ny
b2xsUG9zaXRpb25BZnRlckFzeW5jU2Nyb2xsKFNjcm9sbGluZ05vCiAgICAgICAgIHNjcm9sbGFi
bGVBcmVhLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgdG9GbG9hdFNpemUoc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpKSkpOwogICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0
Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKIAotICAgICAgICBpZiAoc2Ny
b2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiA9PSBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9u
OjpTZXQpCisgICAgICAgIGlmIChzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uID09IFNjcm9s
bGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlNldCB8fCBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0
aW9uID09IFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5bmMpCiAgICAgICAgICAgICBt
X3BhZ2UtPmVkaXRvckNsaWVudCgpLm92ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CiAK
ICNpZiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKaW5kZXggOTU3ZmZmMWFiNzIzODc3MmM5N2RlYmU3NmZiZTlmMzRjOTkxMGNl
OC4uYjAzNzc5ZmQwMWI3Zjk2NWFkNzlmMGJmZTNjMjVjNTU4OTZiOGRlZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTUzNTksNiArNTM1OSwx
MyBAQCB2b2lkIFdlYlBhZ2U6OmRpZENoYW5nZUNvbnRlbnRzKCkKIAogdm9pZCBXZWJQYWdlOjpk
aWRDaGFuZ2VPdmVyZmxvd1Njcm9sbFBvc2l0aW9uKCkKIHsKKyAgICBhdXRvIGZyYW1lID0gbWFr
ZVJlZihtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpKTsKKyAg
ICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8IGZyYW1lLT5lZGl0b3IoKS5pZ25v
cmVTZWxlY3Rpb25DaGFuZ2VzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChmcmFtZS0+
c2VsZWN0aW9uKCkuaXNDYXJldCgpICYmICFmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
aGFzRWRpdGFibGVTdHlsZSgpKQorICAgICAgICByZXR1cm47CisKICAgICBkaWRDaGFuZ2VTZWxl
Y3Rpb25Pck92ZXJmbG93U2Nyb2xsUG9zaXRpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDEyNTM1MGQyNjJl
YTAxMWE4OTY5OTJhYjI2ZjdmOWQ2YmE2YzZiMmUuLjcyMWM5NjI3NzIwYmY5MDQxYzIwOThlZjhi
NmMzZDdhZGVjN2FkNGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOS0wNi0zMCAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBpT1M6IFJFR1JFU1NJ
T04oYXN5bmMgc2Nyb2xsKTogQ2FyZXQgZG9lc24ndCBzY3JvbGwgd2hlbiBzY3JvbGxpbmcgdGV4
dGFyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
ODIxNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTEwOTcyOTY+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IGxheW91dCB0ZXN0IHRv
IGNoZWNrIHRoYXQgdGhlIHRleHQgc2VsZWN0aW9uIHZpZXdzIGFyZSB1cGRhdGVkIGFmdGVyIHNj
cm9sbGluZyBpbiBhIGZhc3Qgb3ZlcmZsb3cKKyAgICAgICAgc2Nyb2xsaW5nIGNvbnRhaW5lci4K
KworICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2lvcy91cGRhdGUtc2VsZWN0aW9uLWFmdGVy
LW92ZXJmbG93LXNjcm9sbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcv
c2VsZWN0aW9uL2lvcy91cGRhdGUtc2VsZWN0aW9uLWFmdGVyLW92ZXJmbG93LXNjcm9sbC5odG1s
OiBBZGRlZC4KKwogMjAxOS0wNi0yOCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtUZXh0IGF1dG9zaXppbmddW2lQYWRPU10gYmluZy5jb20gaXMgaGFyZCB0byBy
ZWFkIGV2ZW4gd2l0aCBib29zdGVkIHRleHQgYmVjYXVzZSBvZiB0aGUgbGluZSBoZWlnaHQKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2lvcy91cGRhdGUtc2VsZWN0
aW9uLWFmdGVyLW92ZXJmbG93LXNjcm9sbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi9pb3MvdXBkYXRlLXNlbGVjdGlvbi1hZnRlci1vdmVyZmxvdy1zY3JvbGwt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwZjNkYThjNDRiYjJhMDU1MDE2NzU2NjlmNTA2YWE5
ODY3NDdlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9pb3MvdXBkYXRlLXNlbGVjdGlvbi1hZnRlci1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMjQgQEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGEgc2VsZWN0aW9uIGlu
IGEgZmFzdCBzY3JvbGxhYmxlIGFyZWEgaXMga2VwdCB1cCB0byBkYXRlIGFmdGVyIHNjcm9sbGlu
Zy4gVG8gdGVzdCBtYW51YWxseSwgdGFwIHRoZSBidXR0b24gYW5kIHNjcm9sbCB0aGUgZWRpdGFi
bGUgYXJlYSBkb3duOyB0aGUgc2VsZWN0aW9uIG1vdmUgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBz
Y3JvbGwgcG9zaXRpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBzZWxl
Y3Rpb25SZWN0c0JlZm9yZVswXS50b3AgaXMgMTA4CitQQVNTIHNlbGVjdGlvblJlY3RzQmVmb3Jl
WzBdLndpZHRoIGlzIDMyMAorUEFTUyBzZWxlY3Rpb25SZWN0c0JlZm9yZVswXS5sZWZ0IGlzIDAK
K1BBU1Mgc2VsZWN0aW9uUmVjdHNCZWZvcmVbMF0uaGVpZ2h0IGlzIDI5CitQQVNTIHNlbGVjdGlv
blJlY3RzQmVmb3JlWzFdLnRvcCBpcyAxMzcKK1BBU1Mgc2VsZWN0aW9uUmVjdHNCZWZvcmVbMV0u
d2lkdGggaXMgMTcyCitQQVNTIHNlbGVjdGlvblJlY3RzQmVmb3JlWzFdLmxlZnQgaXMgMAorUEFT
UyBzZWxlY3Rpb25SZWN0c0JlZm9yZVsxXS5oZWlnaHQgaXMgMzAKK1BBU1Mgc2VsZWN0aW9uUmVj
dHNBZnRlclswXS50b3AgaXMgNTgKK1BBU1Mgc2VsZWN0aW9uUmVjdHNBZnRlclswXS53aWR0aCBp
cyAzMjAKK1BBU1Mgc2VsZWN0aW9uUmVjdHNBZnRlclswXS5sZWZ0IGlzIDAKK1BBU1Mgc2VsZWN0
aW9uUmVjdHNBZnRlclswXS5oZWlnaHQgaXMgMjkKK1BBU1Mgc2VsZWN0aW9uUmVjdHNBZnRlclsx
XS50b3AgaXMgODcKK1BBU1Mgc2VsZWN0aW9uUmVjdHNBZnRlclsxXS53aWR0aCBpcyAxNzIKK1BB
U1Mgc2VsZWN0aW9uUmVjdHNBZnRlclsxXS5sZWZ0IGlzIDAKK1BBU1Mgc2VsZWN0aW9uUmVjdHNB
ZnRlclsxXS5oZWlnaHQgaXMgMzAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9pb3MvdXBkYXRlLXNlbGVjdGlvbi1hZnRlci1vdmVyZmxvdy1zY3JvbGwuaHRtbCBiL0xheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2lvcy91cGRhdGUtc2VsZWN0aW9uLWFmdGVyLW92ZXJm
bG93LXNjcm9sbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyYmRiNmQxMDQ2NzA4ZDBjOGVmMjQwMzhiOTg3
OWRhZTdlNGNmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVj
dGlvbi9pb3MvdXBkYXRlLXNlbGVjdGlvbi1hZnRlci1vdmVyZmxvdy1zY3JvbGwuaHRtbApAQCAt
MCwwICsxLDEwMyBAQAorPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
dXNlRmxleGlibGVWaWV3cG9ydD10cnVlIGludGVybmFsOkFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdF
bmFibGVkPXRydWUgXSAtLT4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jl
c291cmNlcy91aS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPG1ldGEgbmFtZT12aWV3cG9ydCBjb250
ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Cis8c3R5bGU+Citib2R5
LCBodG1sIHsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBoZWlnaHQ6IDEwMCU7CisgICAgbWFyZ2lu
OiAwOworfQorCisjZWRpdG9yIHsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgd2lkdGg6IDMy
MHB4OworICAgIGhlaWdodDogMjAwcHg7CisgICAgb3ZlcmZsb3c6IHNjcm9sbDsKK30KKworI2Nv
bnNvbGUsICNkZXNjcmlwdGlvbiB7CisgICAgd2lkdGg6IDEwMCU7Cit9Cis8L3N0eWxlPgorPHNj
cmlwdD4KK2pzVGVzdElzQXN5bmMgPSB0cnVlOworCitmdW5jdGlvbiByZWN0c0FyZUVxdWFsKHJl
Y3RzLCBvdGhlclJlY3RzKQoreworICAgIGlmIChyZWN0cy5sZW5ndGggIT0gb3RoZXJSZWN0cy5s
ZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
cmVjdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHJlY3RzW2ldLnRvcCAhPSBvdGhlclJl
Y3RzW2ldLnRvcAorICAgICAgICAgICAgfHwgcmVjdHNbaV0ubGVmdCAhPSBvdGhlclJlY3RzW2ld
LmxlZnQKKyAgICAgICAgICAgIHx8IHJlY3RzW2ldLndpZHRoICE9IG90aGVyUmVjdHNbaV0ud2lk
dGgKKyAgICAgICAgICAgIHx8IHJlY3RzW2ldLmhlaWdodCAhPSBvdGhlclJlY3RzW2ldLmhlaWdo
dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYXN5bmMgZnVuY3Rpb24gd2FpdEZvclNlbGVjdGlvblJlY3RzVG9DaGFuZ2UoZnJvbVJl
Y3RzKQoreworICAgIGxldCByZWN0cyA9IGZyb21SZWN0czsKKyAgICB3aGlsZSAocmVjdHNBcmVF
cXVhbChyZWN0cywgZnJvbVJlY3RzKSkKKyAgICAgICAgcmVjdHMgPSBhd2FpdCBVSUhlbHBlci5n
ZXRVSVNlbGVjdGlvblZpZXdSZWN0cygpOworICAgIHJldHVybiByZWN0czsKK30KKworYWRkRXZl
bnRMaXN0ZW5lcigibG9hZCIsIGFzeW5jIGZ1bmN0aW9uKCkgeworICAgIGRlc2NyaXB0aW9uKCJU
aGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBhIHNlbGVjdGlvbiBpbiBhIGZhc3Qgc2Nyb2xsYWJsZSBh
cmVhIGlzIGtlcHQgdXAgdG8gZGF0ZSBhZnRlciBzY3JvbGxpbmcuIFRvIHRlc3QgbWFudWFsbHks
IHRhcCB0aGUgYnV0dG9uIGFuZCBzY3JvbGwgdGhlIGVkaXRhYmxlIGFyZWEgZG93bjsgdGhlIHNl
bGVjdGlvbiBtb3ZlIHRvIGFjY291bnQgZm9yIHRoZSBuZXcgc2Nyb2xsIHBvc2l0aW9uLiIpOwor
CisgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXRvciIpOwor
ICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJ1dHRvbiIpOworICAg
IGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGV2ZW50ID0+IHsKKyAgICAgICAgZWRp
dG9yLmZvY3VzKCk7CisgICAgICAgIGdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxlY3QtdGFyZ2V0IikpOworICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOworICAgIH0pOworCisgICAgYXdhaXQgVUlIZWxwZXIuYWN0aXZhdGVF
bGVtZW50QW5kV2FpdEZvcklucHV0U2Vzc2lvbihidXR0b24pOworICAgIHNlbGVjdGlvblJlY3Rz
QmVmb3JlID0gYXdhaXQgd2FpdEZvclNlbGVjdGlvblJlY3RzVG9DaGFuZ2UoW10pOworCisgICAg
YXdhaXQgVUlIZWxwZXIuaW1tZWRpYXRlU2Nyb2xsRWxlbWVudEF0Q29udGVudFBvaW50VG9PZmZz
ZXQoMTUwLCAxMDAsIDAsIDUwKTsKKyAgICBzZWxlY3Rpb25SZWN0c0FmdGVyID0gYXdhaXQgd2Fp
dEZvclNlbGVjdGlvblJlY3RzVG9DaGFuZ2Uoc2VsZWN0aW9uUmVjdHNCZWZvcmUpOworCisgICAg
c2hvdWxkQmUoInNlbGVjdGlvblJlY3RzQmVmb3JlWzBdLnRvcCIsICIxMDgiKTsKKyAgICBzaG91
bGRCZSgic2VsZWN0aW9uUmVjdHNCZWZvcmVbMF0ud2lkdGgiLCAiMzIwIik7CisgICAgc2hvdWxk
QmUoInNlbGVjdGlvblJlY3RzQmVmb3JlWzBdLmxlZnQiLCAiMCIpOworICAgIHNob3VsZEJlKCJz
ZWxlY3Rpb25SZWN0c0JlZm9yZVswXS5oZWlnaHQiLCAiMjkiKTsKKyAgICBzaG91bGRCZSgic2Vs
ZWN0aW9uUmVjdHNCZWZvcmVbMV0udG9wIiwgIjEzNyIpOworICAgIHNob3VsZEJlKCJzZWxlY3Rp
b25SZWN0c0JlZm9yZVsxXS53aWR0aCIsICIxNzIiKTsKKyAgICBzaG91bGRCZSgic2VsZWN0aW9u
UmVjdHNCZWZvcmVbMV0ubGVmdCIsICIwIik7CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3Rz
QmVmb3JlWzFdLmhlaWdodCIsICIzMCIpOworCisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3Rz
QWZ0ZXJbMF0udG9wIiwgIjU4Iik7CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3RzQWZ0ZXJb
MF0ud2lkdGgiLCAiMzIwIik7CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3RzQWZ0ZXJbMF0u
bGVmdCIsICIwIik7CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3RzQWZ0ZXJbMF0uaGVpZ2h0
IiwgIjI5Iik7CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3RzQWZ0ZXJbMV0udG9wIiwgIjg3
Iik7CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3RzQWZ0ZXJbMV0ud2lkdGgiLCAiMTcyIik7
CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3RzQWZ0ZXJbMV0ubGVmdCIsICIwIik7CisgICAg
c2hvdWxkQmUoInNlbGVjdGlvblJlY3RzQWZ0ZXJbMV0uaGVpZ2h0IiwgIjMwIik7CisKKyAgICBl
ZGl0b3IucmVtb3ZlKCk7CisgICAgYnV0dG9uLnJlbW92ZSgpOworICAgIGZpbmlzaEpTVGVzdCgp
OworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZWRpdG9yIiBjb250
ZW50ZWRpdGFibGU+CisgICAgPHA+VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUg
bGF6eSBkb2cuPC9wPgorICAgIDxwIGlkPSJzZWxlY3QtdGFyZ2V0Ij5UaGUgcXVpY2sgYnJvd24g
Zm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5IGRvZy48L3A+CisgICAgPHA+VGhlIHF1aWNrIGJyb3du
IGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cuPC9wPgorPC9kaXY+Cis8YnV0dG9uPkNsaWNr
IHRvIHNlbGVjdCB0ZXh0PC9idXR0b24+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCg==
</data>
<flag name="review"
          id="388987"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373235</attachid>
            <date>2019-07-01 08:02:07 -0700</date>
            <delta_ts>2019-07-01 11:14:16 -0700</delta_ts>
            <desc>Approach #1</desc>
            <filename>bug-198217-20190701080206.patch</filename>
            <type>text/plain</type>
            <size>13062</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2OTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU1YmFjZGIxOGZiOTc4
OGY4Y2ZiMGMyYTZhOTdmNWVmZDFhOGM1NC4uZmQ0ODllZGM0MWE4ODJjNjUwMjJkYWIwM2ViNTkw
M2Y1NDUyNmMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE5LTA3LTAxICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIGlPUzogUkVHUkVT
U0lPTihhc3luYyBzY3JvbGwpOiBDYXJldCBkb2Vzbid0IHNjcm9sbCB3aGVuIHNjcm9sbGluZyB0
ZXh0YXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk4MjE3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTA5NzI5Nj4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBTY3JvbGxpbmdMYXllclBv
c2l0aW9uQWN0aW9uIGFyZ3VtZW50IHRvIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjp3YXNT
Y3JvbGxlZEJ5RGVsZWdhdGVkU2Nyb2xsaW5nLCBhbmQKKyAgICAgICAgYXZvaWQgYmFpbGluZyBl
YXJseSBpbiB0aGUgY2FzZSB3aGVyZSBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQg
aXMgdXNlZC4gU2VlIHRoZSBXZWJLaXQgQ2hhbmdlTG9nIGZvcgorICAgICAgICBtb3JlIGRldGFp
bC4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL3NlbGVjdGlvbi9pb3MvdXBkYXRlLXNlbGVjdGlv
bi1hZnRlci1vdmVyZmxvdy1zY3JvbGwuaHRtbAorCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGU6Ondhc1Njcm9sbGVkQnlEZWxlZ2F0ZWRTY3JvbGxpbmcpOgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg6CisK
IDIwMTktMDYtMjggIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBb
VGV4dCBhdXRvc2l6aW5nXVtpUGFkT1NdIGJpbmcuY29tIGlzIGhhcmQgdG8gcmVhZCBldmVuIHdp
dGggYm9vc3RlZCB0ZXh0IGJlY2F1c2Ugb2YgdGhlIGxpbmUgaGVpZ2h0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhl
YWQ1NGZmNmY0YWJlZmI1OGEyODZlMTliOTE5MzFkMGFiZjQ1YTIuLmNiNDIzYjdmZWFiOWNlNGNj
YTlmM2U1MTU4MTI5OWY0Y2NjY2UyNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTkt
MDctMDEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAg
aU9TOiBSRUdSRVNTSU9OKGFzeW5jIHNjcm9sbCk6IENhcmV0IGRvZXNuJ3Qgc2Nyb2xsIHdoZW4g
c2Nyb2xsaW5nIHRleHRhcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTgyMTcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxMDk3Mjk2PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIGlPUyAxMiwg
d2hlbiBzY3JvbGxpbmcgYSB0ZXh0IHNlbGVjdGlvbiBpbiBhbiBmYXN0LXNjcm9sbGluZyBjb250
YWluZXIsIGVkaXRvciBzdGF0ZSB1cGRhdGVzIGFyZSBzY2hlZHVsZWQKKyAgICAgICAgdW5kZXIg
QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5j
U2Nyb2xsIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHNjcm9sbGluZyBnZXN0dXJlLAorICAgICAgICB3
aGVuIHRoZSBzY3JvbGxpbmcgbGF5ZXIgYWN0aW9uIGlzIFNjcm9sbGluZ0xheWVyUG9zaXRpb25B
Y3Rpb246OlNldC4gVGhpcyBpcyBubyBsb25nZXIgdGhlIGNhc2UgaW4gaU9TIDEzLAorICAgICAg
ICBiZWNhdXNlIHdlIG5vdyBiYWlsIGluIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjp3YXNT
Y3JvbGxlZEJ5RGVsZWdhdGVkU2Nyb2xsaW5nIGFmdGVyIHNjcm9sbCBkZWNlbGVyYXRpb24KKyAg
ICAgICAgZmluaXNoZXMgc2luY2UgdGhlIHNjcm9sbCBwb3NpdGlvbiBkaWRuJ3QgZW5kIHVwIGNo
YW5naW5nLiBBZGRpdGlvbmFsbHksIHdlIG5vIGxvbmdlciB1c2UKKyAgICAgICAgU2Nyb2xsaW5n
TGF5ZXJQb3NpdGlvbkFjdGlvbjo6U2V0IGluIHRoZSBjYXNlIHdoZXJlIHNjcm9sbGluZyBmaW5p
c2hlZCBkZWNlbGVyYXRpbmcsIHNpbmNlCisgICAgICAgIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVJT1M6OnNjcm9sbFZpZXdEaWRTY3JvbGwgbm8gbG9uZ2VyIHVzZXMgdG8gdmFs
dWUgb2YgaW5Vc2VySW50ZXJhY3Rpb24gdG8KKyAgICAgICAgZGV0ZXJtaW5lIHdoZXRoZXIgdG8g
U2V0IG9yIFN5bmMgc2Nyb2xsaW5nIGxheWVyIHBvc2l0aW9ucy4KKworICAgICAgICBUbyByZXN0
b3JlIGlPUyAxMiBiZWhhdmlvciwgZW5zdXJlIHRoYXQgd2Ugc2VuZCBhIHNjcm9sbGluZyB0cmVl
IHVwZGF0ZSB1c2luZyBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQKKyAgICAgICAg
YWZ0ZXIgc2Nyb2xsaW5nIGVuZHMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tOgorICAgICAg
ICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzY3JvbGxW
aWV3RGlkU2Nyb2xsKToKKwogMjAxOS0wNi0yOCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBhdHRlbXB0IGFmdGVyIHIy
NDY5MjguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKaW5kZXggNTFiMzU2YTk0MWY3MTNhMzE0ZmMw
MTgyZmZkYzRjNGE2MDMzMzE5NC4uNDRkNmU4YzY2N2I2NmJlOWRiMzNiYTBmODIyNzY0ZTEwZWU2
Zjc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcApAQCAtMTk0LDEwICsxOTQsMTAgQEAgdm9p
ZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6YXBwbHlMYXllclBvc2l0aW9ucygpCiAgICAg
cmVwb3NpdGlvblJlbGF0ZWRMYXllcnMoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZTo6d2FzU2Nyb2xsZWRCeURlbGVnYXRlZFNjcm9sbGluZyhjb25zdCBGbG9hdFBvaW50
JiBwb3NpdGlvbiwgT3B0aW9uYWw8RmxvYXRSZWN0PiBvdmVycmlkZUxheW91dFZpZXdwb3J0KQor
dm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6d2FzU2Nyb2xsZWRCeURlbGVnYXRlZFNj
cm9sbGluZyhjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgT3B0aW9uYWw8RmxvYXRSZWN0PiBv
dmVycmlkZUxheW91dFZpZXdwb3J0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uIHNjcm9s
bGluZ0xheWVyUG9zaXRpb25BY3Rpb24pCiB7CiAgICAgYm9vbCBzY3JvbGxQb3NpdGlvbkNoYW5n
ZWQgPSAhc2Nyb2xsUG9zaXRpb25BbmRMYXlvdXRWaWV3cG9ydE1hdGNoKHBvc2l0aW9uLCBvdmVy
cmlkZUxheW91dFZpZXdwb3J0KTsKLSAgICBpZiAoIXNjcm9sbFBvc2l0aW9uQ2hhbmdlZCkKKyAg
ICBpZiAoIXNjcm9sbFBvc2l0aW9uQ2hhbmdlZCAmJiBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0
aW9uICE9IFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlNldCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9jdXJyZW50U2Nyb2xsUG9zaXRpb24gPSBhZGp1c3RlZFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uLCBTY3JvbGxQb3NpdGlvbkNsYW1wOjpOb25lKTsKQEAgLTIwNiw3ICsyMDYsNyBA
QCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjp3YXNTY3JvbGxlZEJ5RGVsZWdhdGVk
U2Nyb2xsaW5nKGNvbnN0IEZsb2F0UG9pbgogICAgIHJlcG9zaXRpb25SZWxhdGVkTGF5ZXJzKCk7
CiAKICAgICBzY3JvbGxpbmdUcmVlKCkubm90aWZ5UmVsYXRlZE5vZGVzQWZ0ZXJTY3JvbGxQb3Np
dGlvbkNoYW5nZSgqdGhpcyk7Ci0gICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2Rl
RGlkU2Nyb2xsKCp0aGlzKTsKKyAgICBzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nVHJlZU5vZGVE
aWRTY3JvbGwoKnRoaXMsIHNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24pOwogICAgIHNjcm9s
bGluZ1RyZWUoKS5kaWRTY3JvbGxCeURlbGVnYXRlZFNjcm9sbGluZygpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGUuaAppbmRleCBiMjJmZmE3OTIyNWE5MjljYjA2OWE2NzMwZjFiZWQ3OTE4ZDMyNDA5
Li43ZTVlNDVjYTMyOTdlZWMwZGJmMWVkNjc3OTdlYWM5ZTM3ZTU4YmEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2Nyb2xsVG8oY29u
c3QgRmxvYXRQb2ludCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBTY3JvbGxQb3Np
dGlvbkNsYW1wID0gU2Nyb2xsUG9zaXRpb25DbGFtcDo6VG9Db250ZW50RWRnZXMpOwogICAgIHZv
aWQgc2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiwgU2Nyb2xsUG9zaXRpb25DbGFtcCA9IFNjcm9s
bFBvc2l0aW9uQ2xhbXA6OlRvQ29udGVudEVkZ2VzKTsKIAotICAgIHZvaWQgd2FzU2Nyb2xsZWRC
eURlbGVnYXRlZFNjcm9sbGluZyhjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgT3B0aW9uYWw8
RmxvYXRSZWN0PiBvdmVycmlkZUxheW91dFZpZXdwb3J0ID0geyB9KTsKKyAgICB2b2lkIHdhc1Nj
cm9sbGVkQnlEZWxlZ2F0ZWRTY3JvbGxpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIE9w
dGlvbmFsPEZsb2F0UmVjdD4gb3ZlcnJpZGVMYXlvdXRWaWV3cG9ydCA9IHsgfSwgU2Nyb2xsaW5n
TGF5ZXJQb3NpdGlvbkFjdGlvbiA9IFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5bmMp
OwogICAgIAogICAgIGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsYWJsZUFyZWFTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYVNpemU7IH0KICAgICBjb25zdCBGbG9hdFNpemUmIHRv
dGFsQ29udGVudHNTaXplKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbENvbnRlbnRzU2l6ZTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlSU9TLm1tCmluZGV4IDVlYTAzODJkNGM3ZTQ1MTRjYTg3ZmE4MTQ2MGYyYTRhNDcxYzBk
ODUuLjFlNTVlNGVmOTRmM2FkZTZkMDdkZmI3ODdiYzFiNTZhYThmZDRlMjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJ
T1MubW0KQEAgLTMyNyw3ICszMjcsNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVJT1M6OnNjcm9sbFZpZXdEaWRTY3JvbGwoY29uc3QgRmxvYXRQb2ludAogICAgICAg
ICByZXR1cm47CiAKICAgICBhdXRvIHNjcm9sbFBvc2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFBvc2l0aW9uRnJvbU9mZnNldChzY3JvbGxPZmZzZXQsIHRvRmxvYXRTaXplKHNjcm9sbE9y
aWdpbigpKSk7Ci0gICAgc2Nyb2xsaW5nTm9kZSgpLndhc1Njcm9sbGVkQnlEZWxlZ2F0ZWRTY3Jv
bGxpbmcoc2Nyb2xsUG9zaXRpb24pOworICAgIHNjcm9sbGluZ05vZGUoKS53YXNTY3JvbGxlZEJ5
RGVsZWdhdGVkU2Nyb2xsaW5nKHNjcm9sbFBvc2l0aW9uLCB7IH0sIGluVXNlckludGVyYWN0aW9u
ID8gU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyA6IFNjcm9sbGluZ0xheWVyUG9z
aXRpb25BY3Rpb246OlNldCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZUlPUzo6Y3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UodW5zaWduZWQgaG9y
aXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwpIGNvbnN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTI1MzUwZDI2MmVhMDEx
YTg5Njk5MmFiMjZmN2Y5ZDZiYTZjNmIyZS4uYTFlMTg4N2UwMGY4YWRhYmRmY2RhM2FiZTViYzQz
ODA2NDI1OTk4ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTA3LTAxICBXZW5zb24gSHNp
ZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIGlPUzogUkVHUkVTU0lPTihh
c3luYyBzY3JvbGwpOiBDYXJldCBkb2Vzbid0IHNjcm9sbCB3aGVuIHNjcm9sbGluZyB0ZXh0YXJl
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MjE3
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTA5NzI5Nj4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgbGF5b3V0IHRlc3QgdG8gY2hl
Y2sgdGhhdCB0aGUgdGV4dCBzZWxlY3Rpb24gdmlld3MgYXJlIHVwZGF0ZWQgYWZ0ZXIgc2Nyb2xs
aW5nIGluIGEgZmFzdCBvdmVyZmxvdworICAgICAgICBzY3JvbGxpbmcgY29udGFpbmVyLgorCisg
ICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vaW9zL3VwZGF0ZS1zZWxlY3Rpb24tYWZ0ZXItb3Zl
cmZsb3ctc2Nyb2xsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9zZWxl
Y3Rpb24vaW9zL3VwZGF0ZS1zZWxlY3Rpb24tYWZ0ZXItb3ZlcmZsb3ctc2Nyb2xsLmh0bWw6IEFk
ZGVkLgorCiAyMDE5LTA2LTI4ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgW1RleHQgYXV0b3NpemluZ11baVBhZE9TXSBiaW5nLmNvbSBpcyBoYXJkIHRvIHJlYWQg
ZXZlbiB3aXRoIGJvb3N0ZWQgdGV4dCBiZWNhdXNlIG9mIHRoZSBsaW5lIGhlaWdodApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaW9zL3VwZGF0ZS1zZWxlY3Rpb24t
YWZ0ZXItb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcv
c2VsZWN0aW9uL2lvcy91cGRhdGUtc2VsZWN0aW9uLWFmdGVyLW92ZXJmbG93LXNjcm9sbC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzBmM2RhOGM0NGJiMmEwNTUwMTY3NTY2OWY1MDZhYTk4Njc0
N2U0YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2lv
cy91cGRhdGUtc2VsZWN0aW9uLWFmdGVyLW92ZXJmbG93LXNjcm9sbC1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwyNCBAQAorVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgYSBzZWxlY3Rpb24gaW4gYSBm
YXN0IHNjcm9sbGFibGUgYXJlYSBpcyBrZXB0IHVwIHRvIGRhdGUgYWZ0ZXIgc2Nyb2xsaW5nLiBU
byB0ZXN0IG1hbnVhbGx5LCB0YXAgdGhlIGJ1dHRvbiBhbmQgc2Nyb2xsIHRoZSBlZGl0YWJsZSBh
cmVhIGRvd247IHRoZSBzZWxlY3Rpb24gbW92ZSB0byBhY2NvdW50IGZvciB0aGUgbmV3IHNjcm9s
bCBwb3NpdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIHNlbGVjdGlv
blJlY3RzQmVmb3JlWzBdLnRvcCBpcyAxMDgKK1BBU1Mgc2VsZWN0aW9uUmVjdHNCZWZvcmVbMF0u
d2lkdGggaXMgMzIwCitQQVNTIHNlbGVjdGlvblJlY3RzQmVmb3JlWzBdLmxlZnQgaXMgMAorUEFT
UyBzZWxlY3Rpb25SZWN0c0JlZm9yZVswXS5oZWlnaHQgaXMgMjkKK1BBU1Mgc2VsZWN0aW9uUmVj
dHNCZWZvcmVbMV0udG9wIGlzIDEzNworUEFTUyBzZWxlY3Rpb25SZWN0c0JlZm9yZVsxXS53aWR0
aCBpcyAxNzIKK1BBU1Mgc2VsZWN0aW9uUmVjdHNCZWZvcmVbMV0ubGVmdCBpcyAwCitQQVNTIHNl
bGVjdGlvblJlY3RzQmVmb3JlWzFdLmhlaWdodCBpcyAzMAorUEFTUyBzZWxlY3Rpb25SZWN0c0Fm
dGVyWzBdLnRvcCBpcyA1OAorUEFTUyBzZWxlY3Rpb25SZWN0c0FmdGVyWzBdLndpZHRoIGlzIDMy
MAorUEFTUyBzZWxlY3Rpb25SZWN0c0FmdGVyWzBdLmxlZnQgaXMgMAorUEFTUyBzZWxlY3Rpb25S
ZWN0c0FmdGVyWzBdLmhlaWdodCBpcyAyOQorUEFTUyBzZWxlY3Rpb25SZWN0c0FmdGVyWzFdLnRv
cCBpcyA4NworUEFTUyBzZWxlY3Rpb25SZWN0c0FmdGVyWzFdLndpZHRoIGlzIDE3MgorUEFTUyBz
ZWxlY3Rpb25SZWN0c0FmdGVyWzFdLmxlZnQgaXMgMAorUEFTUyBzZWxlY3Rpb25SZWN0c0FmdGVy
WzFdLmhlaWdodCBpcyAzMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2lv
cy91cGRhdGUtc2VsZWN0aW9uLWFmdGVyLW92ZXJmbG93LXNjcm9sbC5odG1sIGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vaW9zL3VwZGF0ZS1zZWxlY3Rpb24tYWZ0ZXItb3ZlcmZsb3ct
c2Nyb2xsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTJiZGI2ZDEwNDY3MDhkMGM4ZWYyNDAzOGI5ODc5ZGFl
N2U0Y2ZjNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9u
L2lvcy91cGRhdGUtc2VsZWN0aW9uLWFmdGVyLW92ZXJmbG93LXNjcm9sbC5odG1sCkBAIC0wLDAg
KzEsMTAzIEBACis8IURPQ1RZUEUgaHRtbD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VG
bGV4aWJsZVZpZXdwb3J0PXRydWUgaW50ZXJuYWw6QXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3Vy
Y2VzL3VpLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8bWV0YSBuYW1lPXZpZXdwb3J0IGNvbnRlbnQ9
IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KKzxzdHlsZT4KK2JvZHksIGh0
bWwgeworICAgIHdpZHRoOiAxMDAlOworICAgIGhlaWdodDogMTAwJTsKKyAgICBtYXJnaW46IDA7
Cit9CisKKyNlZGl0b3IgeworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICB3aWR0aDogMzIwcHg7
CisgICAgaGVpZ2h0OiAyMDBweDsKKyAgICBvdmVyZmxvdzogc2Nyb2xsOworfQorCisjY29uc29s
ZSwgI2Rlc2NyaXB0aW9uIHsKKyAgICB3aWR0aDogMTAwJTsKK30KKzwvc3R5bGU+Cis8c2NyaXB0
PgoranNUZXN0SXNBc3luYyA9IHRydWU7CisKK2Z1bmN0aW9uIHJlY3RzQXJlRXF1YWwocmVjdHMs
IG90aGVyUmVjdHMpCit7CisgICAgaWYgKHJlY3RzLmxlbmd0aCAhPSBvdGhlclJlY3RzLmxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0
cy5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAocmVjdHNbaV0udG9wICE9IG90aGVyUmVjdHNb
aV0udG9wCisgICAgICAgICAgICB8fCByZWN0c1tpXS5sZWZ0ICE9IG90aGVyUmVjdHNbaV0ubGVm
dAorICAgICAgICAgICAgfHwgcmVjdHNbaV0ud2lkdGggIT0gb3RoZXJSZWN0c1tpXS53aWR0aAor
ICAgICAgICAgICAgfHwgcmVjdHNbaV0uaGVpZ2h0ICE9IG90aGVyUmVjdHNbaV0uaGVpZ2h0KQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Cithc3luYyBmdW5jdGlvbiB3YWl0Rm9yU2VsZWN0aW9uUmVjdHNUb0NoYW5nZShmcm9tUmVjdHMp
Cit7CisgICAgbGV0IHJlY3RzID0gZnJvbVJlY3RzOworICAgIHdoaWxlIChyZWN0c0FyZUVxdWFs
KHJlY3RzLCBmcm9tUmVjdHMpKQorICAgICAgICByZWN0cyA9IGF3YWl0IFVJSGVscGVyLmdldFVJ
U2VsZWN0aW9uVmlld1JlY3RzKCk7CisgICAgcmV0dXJuIHJlY3RzOworfQorCithZGRFdmVudExp
c3RlbmVyKCJsb2FkIiwgYXN5bmMgZnVuY3Rpb24oKSB7CisgICAgZGVzY3JpcHRpb24oIlRoaXMg
dGVzdCB2ZXJpZmllcyB0aGF0IGEgc2VsZWN0aW9uIGluIGEgZmFzdCBzY3JvbGxhYmxlIGFyZWEg
aXMga2VwdCB1cCB0byBkYXRlIGFmdGVyIHNjcm9sbGluZy4gVG8gdGVzdCBtYW51YWxseSwgdGFw
IHRoZSBidXR0b24gYW5kIHNjcm9sbCB0aGUgZWRpdGFibGUgYXJlYSBkb3duOyB0aGUgc2VsZWN0
aW9uIG1vdmUgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBzY3JvbGwgcG9zaXRpb24uIik7CisKKyAg
ICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdG9yIik7CisgICAg
Y29uc3QgYnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYnV0dG9uIik7CisgICAgYnV0
dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZXZlbnQgPT4geworICAgICAgICBlZGl0b3Iu
Zm9jdXMoKTsKKyAgICAgICAgZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInNlbGVjdC10YXJnZXQiKSk7CisgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7CisgICAgfSk7CisKKyAgICBhd2FpdCBVSUhlbHBlci5hY3RpdmF0ZUVsZW1l
bnRBbmRXYWl0Rm9ySW5wdXRTZXNzaW9uKGJ1dHRvbik7CisgICAgc2VsZWN0aW9uUmVjdHNCZWZv
cmUgPSBhd2FpdCB3YWl0Rm9yU2VsZWN0aW9uUmVjdHNUb0NoYW5nZShbXSk7CisKKyAgICBhd2Fp
dCBVSUhlbHBlci5pbW1lZGlhdGVTY3JvbGxFbGVtZW50QXRDb250ZW50UG9pbnRUb09mZnNldCgx
NTAsIDEwMCwgMCwgNTApOworICAgIHNlbGVjdGlvblJlY3RzQWZ0ZXIgPSBhd2FpdCB3YWl0Rm9y
U2VsZWN0aW9uUmVjdHNUb0NoYW5nZShzZWxlY3Rpb25SZWN0c0JlZm9yZSk7CisKKyAgICBzaG91
bGRCZSgic2VsZWN0aW9uUmVjdHNCZWZvcmVbMF0udG9wIiwgIjEwOCIpOworICAgIHNob3VsZEJl
KCJzZWxlY3Rpb25SZWN0c0JlZm9yZVswXS53aWR0aCIsICIzMjAiKTsKKyAgICBzaG91bGRCZSgi
c2VsZWN0aW9uUmVjdHNCZWZvcmVbMF0ubGVmdCIsICIwIik7CisgICAgc2hvdWxkQmUoInNlbGVj
dGlvblJlY3RzQmVmb3JlWzBdLmhlaWdodCIsICIyOSIpOworICAgIHNob3VsZEJlKCJzZWxlY3Rp
b25SZWN0c0JlZm9yZVsxXS50b3AiLCAiMTM3Iik7CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJl
Y3RzQmVmb3JlWzFdLndpZHRoIiwgIjE3MiIpOworICAgIHNob3VsZEJlKCJzZWxlY3Rpb25SZWN0
c0JlZm9yZVsxXS5sZWZ0IiwgIjAiKTsKKyAgICBzaG91bGRCZSgic2VsZWN0aW9uUmVjdHNCZWZv
cmVbMV0uaGVpZ2h0IiwgIjMwIik7CisKKyAgICBzaG91bGRCZSgic2VsZWN0aW9uUmVjdHNBZnRl
clswXS50b3AiLCAiNTgiKTsKKyAgICBzaG91bGRCZSgic2VsZWN0aW9uUmVjdHNBZnRlclswXS53
aWR0aCIsICIzMjAiKTsKKyAgICBzaG91bGRCZSgic2VsZWN0aW9uUmVjdHNBZnRlclswXS5sZWZ0
IiwgIjAiKTsKKyAgICBzaG91bGRCZSgic2VsZWN0aW9uUmVjdHNBZnRlclswXS5oZWlnaHQiLCAi
MjkiKTsKKyAgICBzaG91bGRCZSgic2VsZWN0aW9uUmVjdHNBZnRlclsxXS50b3AiLCAiODciKTsK
KyAgICBzaG91bGRCZSgic2VsZWN0aW9uUmVjdHNBZnRlclsxXS53aWR0aCIsICIxNzIiKTsKKyAg
ICBzaG91bGRCZSgic2VsZWN0aW9uUmVjdHNBZnRlclsxXS5sZWZ0IiwgIjAiKTsKKyAgICBzaG91
bGRCZSgic2VsZWN0aW9uUmVjdHNBZnRlclsxXS5oZWlnaHQiLCAiMzAiKTsKKworICAgIGVkaXRv
ci5yZW1vdmUoKTsKKyAgICBidXR0b24ucmVtb3ZlKCk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9
KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJlZGl0b3IiIGNvbnRlbnRl
ZGl0YWJsZT4KKyAgICA8cD5UaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5
IGRvZy48L3A+CisgICAgPHAgaWQ9InNlbGVjdC10YXJnZXQiPlRoZSBxdWljayBicm93biBmb3gg
anVtcGVkIG92ZXIgdGhlIGxhenkgZG9nLjwvcD4KKyAgICA8cD5UaGUgcXVpY2sgYnJvd24gZm94
IGp1bXBlZCBvdmVyIHRoZSBsYXp5IGRvZy48L3A+Cis8L2Rpdj4KKzxidXR0b24+Q2xpY2sgdG8g
c2VsZWN0IHRleHQ8L2J1dHRvbj4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>