<?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>60454</bug_id>
          
          <creation_ts>2011-05-08 20:35:24 -0700</creation_ts>
          <short_desc>Make member variables of CaretBase private</short_desc>
          <delta_ts>2011-05-10 16:32:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>60273</dependson>
    
    <dependson>60505</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>cshu</cc>
    
    <cc>darin</cc>
    
    <cc>hausmann</cc>
    
    <cc>joseph.ligman</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>400335</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-08 20:35:24 -0700</bug_when>
    <thetext>Right now, all member variables of CaretBase are protected and therefore visible to FrameSelection and DragCaretController.  We should make all member variables private instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401441</commentid>
    <comment_count>1</comment_count>
      <attachid>92999</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-10 13:25:29 -0700</bug_when>
    <thetext>Created attachment 92999
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401456</commentid>
    <comment_count>2</comment_count>
      <attachid>92999</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-10 13:38:32 -0700</bug_when>
    <thetext>Comment on attachment 92999
cleanup

Attachment 92999 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8687033</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401472</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-10 14:01:43 -0700</bug_when>
    <thetext>In void QWebPagePrivate::inputMethodEvent(QInputMethodEvent *ev):

we have:
        case QInputMethodEvent::Cursor: {
            frame-&gt;selection()-&gt;setCaretVisibility(a.length ? CaretIsVisible : CaretIsHidden);
            if (a.length &gt; 0) {
                RenderObject* caretRenderer = frame-&gt;selection()-&gt;caretRenderer();
                if (caretRenderer) {
                    QColor qcolor = a.value.value&lt;QColor&gt;();
                    caretRenderer-&gt;style()-&gt;setColor(Color(makeRGBA(qcolor.red(), qcolor.green(), qcolor.blue(), qcolor.alpha())));
                }
            }
            break;
        }

which was added by http://trac.webkit.org/changeset/48967.  As far as I know, this is the only WebKit code that calls setCaretVisibility and I suspect something is wrong here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401482</commentid>
    <comment_count>4</comment_count>
      <attachid>92999</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-10 14:08:31 -0700</bug_when>
    <thetext>Comment on attachment 92999
cleanup

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

r=me but you’ll need to resolve the Qt issue and you should consider a better name for “fastLocalCaretRect”.

&gt; Source/WebCore/editing/FrameSelection.cpp:74
&gt; -CaretBase::CaretBase()
&gt; +CaretBase::CaretBase(CaretVisibility caretVisibility)

I’d just name the argument “visibility”.

&gt; Source/WebCore/editing/FrameSelection.cpp:1081
&gt; +    // First compute a rect local to the renderer at the selection start

You should add a period.

&gt; Source/WebCore/editing/FrameSelection.cpp:1086
&gt; +    // Get the renderer that will be responsible for painting the caret (which
&gt; +    // is either the renderer we just found, or one of its containers)

And one here too.

&gt; Source/WebCore/editing/FrameSelection.h:56
&gt; +    CaretBase(CaretVisibility = Hidden);

Should mark this explicit, since we wouldn’t want this to be used as a typecast.

&gt; Source/WebCore/editing/FrameSelection.h:67
&gt; +    const IntRect&amp; fastLocalCaretRect() const { return m_caretLocalRect; }

I don’t think the meaning of “fast” here is clear. Everyone wants things to be as fast as possible, so it’s critical to define who should and should not call this. I think the callers are sites that want the rect without it being updated, perhaps? I think we need a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401506</commentid>
    <comment_count>5</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-05-10 14:35:23 -0700</bug_when>
    <thetext>Why do we have to make setCaretVisibility() private?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401510</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-10 14:38:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Why do we have to make setCaretVisibility() private?

Because it&apos;s almost always wrong to call it directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401512</commentid>
    <comment_count>7</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-05-10 14:40:30 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Why do we have to make setCaretVisibility() private?
&gt; 
&gt; Because it&apos;s almost always wrong to call it directly.

I see. Is there a way to replace the qt code using public API?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401523</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-10 14:52:45 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; Why do we have to make setCaretVisibility() private?
&gt; &gt; 
&gt; &gt; Because it&apos;s almost always wrong to call it directly.
&gt; 
&gt; I see. Is there a way to replace the qt code using public API?

As far as I know, no.  However, looking at http://doc.qt.nokia.com/4.3/qinputmethodevent.html, it seems like the current Qt code is correct so I guess I&apos;ll make it public again :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401534</commentid>
    <comment_count>9</comment_count>
      <attachid>92999</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-10 15:01:41 -0700</bug_when>
    <thetext>Comment on attachment 92999
cleanup

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

&gt;&gt; Source/WebCore/editing/FrameSelection.cpp:74
&gt;&gt; +CaretBase::CaretBase(CaretVisibility caretVisibility)
&gt; 
&gt; I’d just name the argument “visibility”.

Done.

&gt;&gt; Source/WebCore/editing/FrameSelection.cpp:1081
&gt;&gt; +    // First compute a rect local to the renderer at the selection start
&gt; 
&gt; You should add a period.

Done.

&gt;&gt; Source/WebCore/editing/FrameSelection.cpp:1086
&gt;&gt; +    // is either the renderer we just found, or one of its containers)
&gt; 
&gt; And one here too.

Done.

&gt;&gt; Source/WebCore/editing/FrameSelection.h:56
&gt;&gt; +    CaretBase(CaretVisibility = Hidden);
&gt; 
&gt; Should mark this explicit, since we wouldn’t want this to be used as a typecast.

Good idea; done.

&gt;&gt; Source/WebCore/editing/FrameSelection.h:67
&gt;&gt; +    const IntRect&amp; fastLocalCaretRect() const { return m_caretLocalRect; }
&gt; 
&gt; I don’t think the meaning of “fast” here is clear. Everyone wants things to be as fast as possible, so it’s critical to define who should and should not call this. I think the callers are sites that want the rect without it being updated, perhaps? I think we need a better name.

Renamed to localCaretRectWithoutUpdate.

&gt; Source/WebCore/editing/FrameSelection.h:-190
&gt; -    void setCaretVisible(bool = true);

I added back a public inline function that calls setCaretVisibility to make qt happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401546</commentid>
    <comment_count>10</comment_count>
      <attachid>93020</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-10 15:09:54 -0700</bug_when>
    <thetext>Created attachment 93020
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401630</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-10 16:31:01 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 93020:

java/lc3/JavaObject/JavaObjectToByte-006.html bug 60333 (author: ap@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401632</commentid>
    <comment_count>12</comment_count>
      <attachid>93020</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-10 16:32:28 -0700</bug_when>
    <thetext>Comment on attachment 93020
patch for landing

Clearing flags on attachment: 93020

Committed r86193: &lt;http://trac.webkit.org/changeset/86193&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401633</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-10 16:32:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92999</attachid>
            <date>2011-05-10 13:25:29 -0700</date>
            <delta_ts>2011-05-10 15:09:50 -0700</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-60454-20110510132528.patch</filename>
            <type>text/plain</type>
            <size>17186</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYxNjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ZjhhNmQ0OTZmZmY0NmQ1
NzlmNTU2OWJiZWYzMjliYTgxZGU1MTJiLi4zYThiZTRkZDEyZTFjYjBmZWU2ZjUwM2E2OGZmNTY2
MjQwM2VmYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDUtMTAgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTWFrZSBtZW1iZXIgdmFyaWFibGVzIG9mIENhcmV0QmFzZSBw
cml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MDQ1NAorCisgICAgICAgIE1vdmVkIG1fYWJzQ2FyZXRCb3VuZHMsIG1fYWJzb2x1dGVDYXJldFJl
cGFpbnRCb3VuZHMsIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSwgYW5kIG1fY2FyZXRQYWludCBiYWNr
CisgICAgICAgIGZyb20gQ2FyZXRCYXNlIHRvIEZyYW1lU2VsZWN0aW9uIGJlY2F1c2UgdGhleSBh
cmUgb25seSB1c2VkIGluIEZyYW1lU2VsZWN0aW9uLCBhbmQgbWFkZSB0aGUgcmVzdAorICAgICAg
ICBvZiBtZW1iZXIgdmFyaWFibGVzIGluIENhcmV0QmFzZSBwcml2YXRlLgorCisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXJldEJhc2U6
OkNhcmV0QmFzZSk6IFRha2VzIENhcmV0VmlzaWJpbGl0eSBhcyBhbiBhcmd1bWVudC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdDYXJldENvbnRyb2xsZXI6OkRyYWdDYXJldENvbnRyb2xsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKTogSW5pdGlh
bGl6ZXMgbV9hYnNDYXJldEJvdW5kc0RpcnR5IGFuZCBtX2NhcmV0UGFpbnQKKyAgICAgICAgbm93
IHRoYXQgdGhleSBhcmUgcGFydCBvZiBGcmFtZVNlbGVjdGlvbiBhZ2Fpbi4KKyAgICAgICAgKFdl
YkNvcmU6OkRyYWdDYXJldENvbnRyb2xsZXI6OnNldENhcmV0UG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDYXJldEJhc2U6OmNsZWFyQ2FyZXRSZWN0KTogRXh0cmFjdGVkIGZyb20gdXBkYXRlQ2FyZXRS
ZWN0LgorICAgICAgICAoV2ViQ29yZTo6Q2FyZXRCYXNlOjp1cGRhdGVDYXJldFJlY3QpOiBObyBs
b25nZXIgY2xlYXJzIGNhcmV0OyBhbGwgY2FsbCBzaXRlcyAobmFtZWx5IHNldENhcmV0UG9zaXRp
b24KKyAgICAgICAgYW5kIGxvY2FsQ2FyZXRSZWN0KSB0aGF0IHVzZWQgdG8gY2FsbCB1cGRhdGVD
YXJldFJlY3Qgbm93IG5lZWQgdG8gY2FsbCBjbGVhckNhcmV0UmVjdCBvciB1cGRhdGVDYXJldFJl
Y3QKKyAgICAgICAgYmFzZWQgb24gc29tZSBjb25kaXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhcmV0
QmFzZTo6Y2FyZXRSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjpwYWludENhcmV0KTogT25seSBjYWxscyBDYXJldEJhc2U6OnBhaW50Q2FyZXQgaWYgbV9jYXJl
dFBhaW50IGlzIHRydWUuCisgICAgICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OnBhaW50Q2FyZXQp
OiBSZW1vdmVkIGFuIGVhcmx5IGV4aXQgZm9yIHdoZW4gbV9jYXJldFBhaW50IGlzIGZhbHNlIHNp
bmNlIG1fY2FyZXRQYWludAorICAgICAgICBoYXMgYmVlbiBtb3ZlZCBmcm9tIENhcmV0QmFzZSB0
byBGcmFtZVNlbGVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpmb2N1
c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldENhcmV0VmlzaWJpbGl0eSk6IFRha2VzIENhcmV0VmlzaWJpbGl0eSBpbnN0ZWFkIG9mIGJv
b2wuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Y2FyZXRCbGlua1RpbWVyRmly
ZWQpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhcmV0QmFzZTo6ZmFzdExvY2FsQ2FyZXRSZWN0KTogQWRkZWQ7IHJlcGxhY2VzIGxvY2Fs
Q2FyZXRSZWN0Rm9yUGFpbnRpbmcuCisgICAgICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OnNob3Vs
ZFVwZGF0ZUNhcmV0UmVjdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FyZXRCYXNlOjpz
ZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FyZXRC
YXNlOjpzZXRDYXJldFZpc2liaWxpdHkpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhcmV0
QmFzZTo6Y2FyZXRJc1Zpc2libGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSk6IEFkZGVkLgorCiAyMDExLTA1LTEwICBB
bGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKaW5kZXggOGE0OTBhMjUzYmEyNzYyODdmZWQyYjY3ZTMwYzlkMDkxNTQzNzMzMi4uYjFh
YjkxMDc5MDcxYmQ2YWMxMTUxYjUxNTU2ZWFmMWY2YWU4YWU0OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTcxLDE3ICs3MSwxNSBAQCB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCiBjb25zdCBpbnQgTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmln
YXRpb24gPSBJTlRfTUlOOwogCi1DYXJldEJhc2U6OkNhcmV0QmFzZSgpCitDYXJldEJhc2U6OkNh
cmV0QmFzZShDYXJldFZpc2liaWxpdHkgY2FyZXRWaXNpYmlsaXR5KQogICAgIDogbV9jYXJldFJl
Y3ROZWVkc1VwZGF0ZSh0cnVlKQotICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5KHRydWUpCi0g
ICAgLCBtX2NhcmV0VmlzaWJsZShmYWxzZSkKLSAgICAsIG1fY2FyZXRQYWludCh0cnVlKQorICAg
ICwgbV9jYXJldFZpc2liaWxpdHkoY2FyZXRWaXNpYmlsaXR5KQogewogfQogCiBEcmFnQ2FyZXRD
b250cm9sbGVyOjpEcmFnQ2FyZXRDb250cm9sbGVyKCkKKyAgICA6IENhcmV0QmFzZShWaXNpYmxl
KQogewotICAgIG1fY2FyZXRWaXNpYmxlID0gdHJ1ZTsKIH0KIAogYm9vbCBEcmFnQ2FyZXRDb250
cm9sbGVyOjppc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0CkBAIC05NCw2ICs5Miw4IEBA
IEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiAgICAgLCBtX3hQ
b3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdh
dGlvbikKICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCiAgICAgLCBt
X2NhcmV0QmxpbmtUaW1lcih0aGlzLCAmRnJhbWVTZWxlY3Rpb246OmNhcmV0QmxpbmtUaW1lckZp
cmVkKQorICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5KHRydWUpCisgICAgLCBtX2NhcmV0UGFp
bnQodHJ1ZSkKICAgICAsIG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkKGZhbHNlKQogICAgICwg
bV9mb2N1c2VkKGZyYW1lICYmIGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+Zm9jdXND
b250cm9sbGVyKCktPmZvY3VzZWRGcmFtZSgpID09IGZyYW1lKQogewpAQCAtMTQ2LDEzICsxNDYs
MTYgQEAgdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpzZXRDYXJldFBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgaWYgKE5vZGUqIG5vZGUgPSBtX3Bvc2l0aW9u
LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgaW52YWxpZGF0ZUNh
cmV0UmVjdChub2RlKTsKICAgICBtX3Bvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgbV9jYXJldFJl
Y3ROZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSAwOwogICAgIGlmIChOb2RlKiBub2RlID0gbV9wb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpIHsKICAgICAgICAgaW52YWxpZGF0
ZUNhcmV0UmVjdChub2RlKTsKICAgICAgICAgZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwog
ICAgIH0KLSAgICB1cGRhdGVDYXJldFJlY3QoZG9jdW1lbnQsIG1fcG9zaXRpb24sIG1fcG9zaXRp
b24uaXNOb3ROdWxsKCkgPyBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbiA6IFZpc2li
bGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uLCBtX3Bvc2l0aW9uLmlzT3JwaGFuKCkpOworICAgIGlm
IChtX3Bvc2l0aW9uLmlzTnVsbCgpIHx8IG1fcG9zaXRpb24uaXNPcnBoYW4oKSkKKyAgICAgICAg
Y2xlYXJDYXJldFJlY3QoKTsKKyAgICBlbHNlCisgICAgICAgIHVwZGF0ZUNhcmV0UmVjdChkb2N1
bWVudCwgbV9wb3NpdGlvbik7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzLCBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMs
IEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwg
RGlyZWN0aW9uYWxpdHlQb2xpY3kgZGlyZWN0aW9uYWxpdHlQb2xpY3kpCkBAIC0xOTUsOCArMTk4
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHMsIFNldFNlbGVjdGlvbk9wdGlvbnMKICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNl
bGVjdGlvbiA9IG1fc2VsZWN0aW9uOwogCiAgICAgbV9zZWxlY3Rpb24gPSBzOwotICAgIAotICAg
IG1fY2FyZXRSZWN0TmVlZHNVcGRhdGUgPSB0cnVlOworICAgIHNldENhcmV0UmVjdE5lZWRzVXBk
YXRlKCk7CiAgICAgCiAgICAgaWYgKCFzLmlzTm9uZSgpKQogICAgICAgICBzZXRGb2N1c2VkTm9k
ZUlmTmVlZGVkKCk7CkBAIC0xMDU5LDU0ICsxMDYxLDQ3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
OnNldEV4dGVudChjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wg
dXNlCiAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9zZWxlY3Rpb24uYmFzZSgp
LCBwb3MsIGFmZmluaXR5KSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OnNl
dENhcmV0UmVjdE5lZWRzVXBkYXRlKGJvb2wgZmxhZykKK3ZvaWQgQ2FyZXRCYXNlOjpjbGVhckNh
cmV0UmVjdCgpCiB7Ci0gICAgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSA9IGZsYWc7CisgICAgbV9j
YXJldExvY2FsUmVjdCA9IEludFJlY3QoKTsKIH0KIAotdm9pZCBDYXJldEJhc2U6OnVwZGF0ZUNh
cmV0UmVjdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgY2FyZXRQ
b3NpdGlvbiwgVmlzaWJsZVNlbGVjdGlvbjo6U2VsZWN0aW9uVHlwZSB0eXBlLCBib29sIGlzT3Jw
aGFuZWQpCitib29sIENhcmV0QmFzZTo6dXBkYXRlQ2FyZXRSZWN0KERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjYXJldFBvc2l0aW9uKQogewotICAgIGlmICh0eXBl
ID09IFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uIHx8IGlzT3JwaGFuZWQpIHsKLSAgICAg
ICAgbV9jYXJldFJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBkb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIG1fY2FyZXRMb2NhbFJlY3Qg
PSBJbnRSZWN0KCk7CiAKLSAgICBtX2NhcmV0UmVjdCA9IEludFJlY3QoKTsKLSAgICAKLSAgICBp
ZiAodHlwZSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgewotICAgICAgICBp
ZiAoY2FyZXRQb3NpdGlvbi5pc05vdE51bGwoKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhcmV0
UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKTsK
LQotICAgICAgICAgICAgLy8gRmlyc3QgY29tcHV0ZSBhIHJlY3QgbG9jYWwgdG8gdGhlIHJlbmRl
cmVyIGF0IHRoZSBzZWxlY3Rpb24gc3RhcnQKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXI7Ci0gICAgICAgICAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IGNhcmV0UG9zaXRpb24ubG9j
YWxDYXJldFJlY3QocmVuZGVyZXIpOwotCi0gICAgICAgICAgICAvLyBHZXQgdGhlIHJlbmRlcmVy
IHRoYXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgdGhlIGNhcmV0ICh3aGljaAot
ICAgICAgICAgICAgLy8gaXMgZWl0aGVyIHRoZSByZW5kZXJlciB3ZSBqdXN0IGZvdW5kLCBvciBv
bmUgb2YgaXRzIGNvbnRhaW5lcnMpCi0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNhcmV0UGFp
bnRlciA9IGNhcmV0UmVuZGVyZXIoY2FyZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCkpOwotCi0gICAgICAgICAgICAvLyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVu
IHRoZSByZW5kZXJlciBhbmQgdGhlIGNhcmV0UGFpbnRlcgotICAgICAgICAgICAgYm9vbCB1bnJv
b3RlZCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHJlbmRlcmVyICE9IGNhcmV0UGFpbnRl
cikgewotICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyT2JqZWN0ID0gcmVu
ZGVyZXItPmNvbnRhaW5lcigpOwotICAgICAgICAgICAgICAgIGlmICghY29udGFpbmVyT2JqZWN0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVucm9vdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxvY2FsUmVj
dC5tb3ZlKHJlbmRlcmVyLT5vZmZzZXRGcm9tQ29udGFpbmVyKGNvbnRhaW5lck9iamVjdCwgbG9j
YWxSZWN0LmxvY2F0aW9uKCkpKTsKLSAgICAgICAgICAgICAgICByZW5kZXJlciA9IGNvbnRhaW5l
ck9iamVjdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCF1
bnJvb3RlZCkKLSAgICAgICAgICAgICAgICBtX2NhcmV0UmVjdCA9IGxvY2FsUmVjdDsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9hYnNDYXJldEJvdW5kc0RpcnR5ID0gdHJ1ZTsKKyAgICBt
X2NhcmV0UmVjdE5lZWRzVXBkYXRlID0gZmFsc2U7CisKKyAgICBpZiAoY2FyZXRQb3NpdGlvbi5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGNhcmV0UG9zaXRp
b24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKTsKKworICAg
IC8vIEZpcnN0IGNvbXB1dGUgYSByZWN0IGxvY2FsIHRvIHRoZSByZW5kZXJlciBhdCB0aGUgc2Vs
ZWN0aW9uIHN0YXJ0CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcjsKKyAgICBJbnRSZWN0IGxv
Y2FsUmVjdCA9IGNhcmV0UG9zaXRpb24ubG9jYWxDYXJldFJlY3QocmVuZGVyZXIpOworCisgICAg
Ly8gR2V0IHRoZSByZW5kZXJlciB0aGF0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5n
IHRoZSBjYXJldCAod2hpY2gKKyAgICAvLyBpcyBlaXRoZXIgdGhlIHJlbmRlcmVyIHdlIGp1c3Qg
Zm91bmQsIG9yIG9uZSBvZiBpdHMgY29udGFpbmVycykKKyAgICBSZW5kZXJPYmplY3QqIGNhcmV0
UGFpbnRlciA9IGNhcmV0UmVuZGVyZXIoY2FyZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRl
cHJlY2F0ZWROb2RlKCkpOworCisgICAgLy8gQ29tcHV0ZSBhbiBvZmZzZXQgYmV0d2VlbiB0aGUg
cmVuZGVyZXIgYW5kIHRoZSBjYXJldFBhaW50ZXIKKyAgICBib29sIHVucm9vdGVkID0gZmFsc2U7
CisgICAgd2hpbGUgKHJlbmRlcmVyICE9IGNhcmV0UGFpbnRlcikgeworICAgICAgICBSZW5kZXJP
YmplY3QqIGNvbnRhaW5lck9iamVjdCA9IHJlbmRlcmVyLT5jb250YWluZXIoKTsKKyAgICAgICAg
aWYgKCFjb250YWluZXJPYmplY3QpIHsKKyAgICAgICAgICAgIHVucm9vdGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGxvY2FsUmVjdC5tb3ZlKHJlbmRl
cmVyLT5vZmZzZXRGcm9tQ29udGFpbmVyKGNvbnRhaW5lck9iamVjdCwgbG9jYWxSZWN0LmxvY2F0
aW9uKCkpKTsKKyAgICAgICAgcmVuZGVyZXIgPSBjb250YWluZXJPYmplY3Q7CiAgICAgfQogCi0g
ICAgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSA9IGZhbHNlOworICAgIGlmICghdW5yb290ZWQpCisg
ICAgICAgIG1fY2FyZXRMb2NhbFJlY3QgPSBsb2NhbFJlY3Q7CisKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogc3RhdGljIGlubGluZSBib29sIGNhcmV0UmVuZGVyc0luc2lkZU5vZGUoTm9kZSogbm9k
ZSkKQEAgLTExNDAsMTIgKzExMzUsMTQgQEAgUmVuZGVyT2JqZWN0KiBEcmFnQ2FyZXRDb250cm9s
bGVyOjpjYXJldFJlbmRlcmVyKCkgY29uc3QKIAogSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6bG9j
YWxDYXJldFJlY3QoKQogewotICAgIGlmIChtX2NhcmV0UmVjdE5lZWRzVXBkYXRlKSB7Ci0gICAg
ICAgIGJvb2wgaXNPcnBoYW5lZCA9ICFpc05vbmUoKSAmJiAoIW1fc2VsZWN0aW9uLnN0YXJ0KCku
YW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkgfHwgIW1fc2VsZWN0aW9uLmVuZCgpLmFuY2hvck5v
ZGUoKS0+aW5Eb2N1bWVudCgpKTsKLSAgICAgICAgdXBkYXRlQ2FyZXRSZWN0KG1fZnJhbWUtPmRv
Y3VtZW50KCksIFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlv
bi5hZmZpbml0eSgpKSwgbV9zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpLCBpc09ycGhhbmVkKTsK
KyAgICBpZiAoc2hvdWxkVXBkYXRlQ2FyZXRSZWN0KCkpIHsKKyAgICAgICAgaWYgKCFpc0NhcmV0
KCkgfHwgbV9zZWxlY3Rpb24uc3RhcnQoKS5pc09ycGhhbigpIHx8IG1fc2VsZWN0aW9uLmVuZCgp
LmlzT3JwaGFuKCkpCisgICAgICAgICAgICBjbGVhckNhcmV0UmVjdCgpOworICAgICAgICBlbHNl
IGlmICh1cGRhdGVDYXJldFJlY3QobV9mcmFtZS0+ZG9jdW1lbnQoKSwgVmlzaWJsZVBvc2l0aW9u
KG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKSkKKyAgICAgICAg
ICAgIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSA9IHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIG1f
Y2FyZXRSZWN0OworICAgIHJldHVybiBmYXN0TG9jYWxDYXJldFJlY3QoKTsKIH0KIAogSW50UmVj
dCBDYXJldEJhc2U6OmFic29sdXRlQm91bmRzRm9yTG9jYWxSZWN0KE5vZGUqIG5vZGUsIGNvbnN0
IEludFJlY3QmIHJlY3QpIGNvbnN0CkBAIC0xMTc4LDEyICsxMTc1LDEyIEBAIHN0YXRpYyBJbnRS
ZWN0IHJlcGFpbnRSZWN0Rm9yQ2FyZXQoSW50UmVjdCBjYXJldCkKIAogSW50UmVjdCBDYXJldEJh
c2U6OmNhcmV0UmVwYWludFJlY3QoTm9kZSogbm9kZSkgY29uc3QKIHsKLSAgICByZXR1cm4gYWJz
b2x1dGVCb3VuZHNGb3JMb2NhbFJlY3Qobm9kZSwgcmVwYWludFJlY3RGb3JDYXJldChsb2NhbENh
cmV0UmVjdEZvclBhaW50aW5nKCkpKTsKKyAgICByZXR1cm4gYWJzb2x1dGVCb3VuZHNGb3JMb2Nh
bFJlY3Qobm9kZSwgcmVwYWludFJlY3RGb3JDYXJldChmYXN0TG9jYWxDYXJldFJlY3QoKSkpOwog
fQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoKQogewotICAgIGlm
ICghbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSkKKyAgICBpZiAoIXNob3VsZFVwZGF0ZUNhcmV0UmVj
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fZnJhbWUpCkBAIC0xMTkz
LDE0ICsxMTkwLDE0IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgp
CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRSZWN0IG9sZFJl
Y3QgPSBtX2NhcmV0UmVjdDsKKyAgICBJbnRSZWN0IG9sZFJlY3QgPSBmYXN0TG9jYWxDYXJldFJl
Y3QoKTsKICAgICBJbnRSZWN0IG5ld1JlY3QgPSBsb2NhbENhcmV0UmVjdCgpOwogICAgIGlmIChv
bGRSZWN0ID09IG5ld1JlY3QgJiYgIW1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgSW50UmVjdCBvbGRBYnNDYXJldEJvdW5kcyA9IG1fYWJzQ2FyZXRC
b3VuZHM7CiAgICAgLy8gRklYTUU6IFJlbmFtZSBtX2NhcmV0UmVjdCB0byBtX2xvY2FsQ2FyZXRS
ZWN0LgotICAgIG1fYWJzQ2FyZXRCb3VuZHMgPSBhYnNvbHV0ZUJvdW5kc0ZvckxvY2FsUmVjdCht
X3NlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCksIG1fY2FyZXRSZWN0KTsKKyAgICBt
X2Fic0NhcmV0Qm91bmRzID0gYWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJlY3QobV9zZWxlY3Rpb24u
c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLCBmYXN0TG9jYWxDYXJldFJlY3QoKSk7CiAgICAgbV9h
YnNDYXJldEJvdW5kc0RpcnR5ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKG9sZEFic0NhcmV0Qm91
bmRzID09IG1fYWJzQ2FyZXRCb3VuZHMpCkBAIC0xMjYxLDIxICsxMjU4LDE3IEBAIHZvaWQgQ2Fy
ZXRCYXNlOjppbnZhbGlkYXRlQ2FyZXRSZWN0KE5vZGUqIG5vZGUsIGJvb2wgY2FyZXRSZWN0Q2hh
bmdlZCkKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6cGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKLSAg
ICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2Fy
ZXRCYXNlOjpwYWludENhcmV0KG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSwg
Y29udGV4dCwgdHgsIHR5LCBjbGlwUmVjdCk7CisgICAgaWYgKG1fc2VsZWN0aW9uLmlzQ2FyZXQo
KSAmJiBtX2NhcmV0UGFpbnQpCisgICAgICAgIENhcmV0QmFzZTo6cGFpbnRDYXJldChtX3NlbGVj
dGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCksIGNvbnRleHQsIHR4LCB0eSwgY2xpcFJlY3Qp
OwogfQogCiB2b2lkIENhcmV0QmFzZTo6cGFpbnRDYXJldChOb2RlKiBub2RlLCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkg
Y29uc3QKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBpZiAoIW1fY2FyZXRWaXNpYmxl
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2NhcmV0UGFpbnQpCisgICAgaWYgKG1fY2Fy
ZXRWaXNpYmlsaXR5ID09IEhpZGRlbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBk
cmF3aW5nUmVjdCA9IGxvY2FsQ2FyZXRSZWN0Rm9yUGFpbnRpbmcoKTsKKyAgICBJbnRSZWN0IGRy
YXdpbmdSZWN0ID0gZmFzdExvY2FsQ2FyZXRSZWN0KCk7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGNhcmV0UmVuZGVyZXIobm9kZSk7CiAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVy
LT5pc0JveCgpKQogICAgICAgICB0b1JlbmRlckJveChyZW5kZXJlciktPmZsaXBGb3JXcml0aW5n
TW9kZShkcmF3aW5nUmVjdCk7CkBAIC0xNTY2LDcgKzE1NTksNyBAQCB2b2lkIEZyYW1lU2VsZWN0
aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogICAgIC8vIENhcmV0IGFwcGVhcnMg
aW4gdGhlIGFjdGl2ZSBmcmFtZS4KICAgICBpZiAoYWN0aXZlQW5kRm9jdXNlZCkKICAgICAgICAg
c2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKLSAgICBzZXRDYXJldFZpc2libGUoYWN0aXZlQW5kRm9j
dXNlZCk7CisgICAgc2V0Q2FyZXRWaXNpYmlsaXR5KGFjdGl2ZUFuZEZvY3VzZWQgPyBWaXNpYmxl
IDogSGlkZGVuKTsKIAogICAgIC8vIFVwZGF0ZSBmb3IgY2FwcyBsb2NrIHN0YXRlCiAgICAgbV9m
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpOwpAQCAt
MTYyNSw4ICsxNjE4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgp
CiAgICAgYm9vbCBjYXJldFJlY3RDaGFuZ2VkID0gcmVjb21wdXRlQ2FyZXRSZWN0KCk7CiAKICAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpICYmIG1fZnJhbWUtPnNl
dHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgYm9vbCBzaG91bGRCbGluayA9
IG1fY2FyZXRWaXNpYmxlCi0gICAgICAgICYmIGlzQ2FyZXQoKSAmJiAoaXNDb250ZW50RWRpdGFi
bGUoKSB8fCBjYXJldEJyb3dzaW5nKTsKKyAgICBib29sIHNob3VsZEJsaW5rID0gY2FyZXRJc1Zp
c2libGUoKSAmJiBpc0NhcmV0KCkgJiYgKGlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93
c2luZyk7CiAKICAgICAvLyBJZiB0aGUgY2FyZXQgbW92ZWQsIHN0b3AgdGhlIGJsaW5rIHRpbWVy
IHNvIHdlIGNhbiByZXN0YXJ0IHdpdGggYQogICAgIC8vIGJsYWNrIGNhcmV0IGluIHRoZSBuZXcg
bG9jYXRpb24uCkBAIC0xNjgyLDEyICsxNjc0LDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVw
ZGF0ZUFwcGVhcmFuY2UoKQogICAgIH0KIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2Fy
ZXRWaXNpYmxlKGJvb2wgZmxhZykKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJp
bGl0eShDYXJldFZpc2liaWxpdHkgdmlzaWJpbGl0eSkKIHsKLSAgICBpZiAobV9jYXJldFZpc2li
bGUgPT0gZmxhZykKKyAgICBpZiAoY2FyZXRWaXNpYmlsaXR5KCkgPT0gdmlzaWJpbGl0eSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQoKTsKLSAgICBtX2NhcmV0
VmlzaWJsZSA9IGZsYWc7CisgICAgQ2FyZXRCYXNlOjpzZXRDYXJldFZpc2liaWxpdHkodmlzaWJp
bGl0eSk7CiAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogfQogCkBAIC0xNzA0LDcgKzE2OTYsNyBA
QCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpjbGVhckNhcmV0UmVjdElmTmVlZGVkKCkKIHZvaWQgRnJh
bWVTZWxlY3Rpb246OmNhcmV0QmxpbmtUaW1lckZpcmVkKFRpbWVyPEZyYW1lU2VsZWN0aW9uPiop
CiB7CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgQVNTRVJUKG1fY2FyZXRWaXNpYmxlKTsK
KyAgICBBU1NFUlQoY2FyZXRJc1Zpc2libGUoKSk7CiAgICAgQVNTRVJUKGlzQ2FyZXQoKSk7CiAg
ICAgYm9vbCBjYXJldFBhaW50ID0gbV9jYXJldFBhaW50OwogICAgIGlmIChpc0NhcmV0Qmxpbmtp
bmdTdXNwZW5kZWQoKSAmJiBjYXJldFBhaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5oCmluZGV4IDI3MDI1NjZkNjRmNDk5ZTExNTMzYjA2NWVjNzQ1ZGRkOWI3MGNkNjEu
LjNkMTc5N2ZhN2FjNWJjYjFkNjdlZGQwMzUxOTA5Njg1NTA5ZDljMmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTUyLDI4ICs1MiwzMSBAQCBjbGFzcyBDYXJl
dEJhc2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhcmV0QmFzZSk7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwcm90ZWN0ZWQ6Ci0gICAgQ2FyZXRCYXNlKCk7CisgICAgZW51
bSBDYXJldFZpc2liaWxpdHkgeyBWaXNpYmxlLCBIaWRkZW4gfTsKKyAgICBDYXJldEJhc2UoQ2Fy
ZXRWaXNpYmlsaXR5ID0gSGlkZGVuKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZUNhcmV0UmVjdChO
b2RlKiwgYm9vbCBjYXJldFJlY3RDaGFuZ2VkID0gZmFsc2UpOwotICAgIHZvaWQgdXBkYXRlQ2Fy
ZXRSZWN0KERvY3VtZW50KiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjYXJldFBvc2l0aW9uLCBW
aXNpYmxlU2VsZWN0aW9uOjpTZWxlY3Rpb25UeXBlLCBib29sIGlzT3JwaGFuZWQpOworICAgIHZv
aWQgY2xlYXJDYXJldFJlY3QoKTsKKyAgICBib29sIHVwZGF0ZUNhcmV0UmVjdChEb2N1bWVudCos
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgY2FyZXRQb3NpdGlvbik7CiAgICAgSW50UmVjdCBhYnNv
bHV0ZUJvdW5kc0ZvckxvY2FsUmVjdChOb2RlKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAg
IEludFJlY3QgYWJzb2x1dGVDYXJldEJvdW5kcyhib29sIGlzQ29udGVudEVkaXRhYmxlKTsKICAg
ICBJbnRSZWN0IGNhcmV0UmVwYWludFJlY3QoTm9kZSopIGNvbnN0OwogICAgIGJvb2wgc2hvdWxk
UmVwYWludENhcmV0KGNvbnN0IFJlbmRlclZpZXcqLCBib29sIGlzQ29udGVudEVkaXRhYmxlKSBj
b25zdDsKLQotICAgIEludFJlY3QgbG9jYWxDYXJldFJlY3RGb3JQYWludGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fY2FyZXRSZWN0OyB9CiAgICAgdm9pZCBwYWludENhcmV0KE5vZGUqLCBHcmFwaGlj
c0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0
OwotCiAgICAgUmVuZGVyT2JqZWN0KiBjYXJldFJlbmRlcmVyKE5vZGUqKSBjb25zdDsKIAotICAg
IEludFJlY3QgbV9jYXJldFJlY3Q7IC8vIGNhcmV0IHJlY3QgaW4gY29vcmRzIGxvY2FsIHRvIHRo
ZSByZW5kZXJlciByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgdGhlIGNhcmV0Ci0gICAgSW50UmVj
dCBtX2Fic0NhcmV0Qm91bmRzOyAvLyBhYnNvbHV0ZSBib3VuZGluZyByZWN0IGZvciB0aGUgY2Fy
ZXQKLSAgICBJbnRSZWN0IG1fYWJzb2x1dGVDYXJldFJlcGFpbnRCb3VuZHM7CisgICAgY29uc3Qg
SW50UmVjdCYgZmFzdExvY2FsQ2FyZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jYXJldExvY2Fs
UmVjdDsgfQogCi0gICAgYm9vbCBtX2NhcmV0UmVjdE5lZWRzVXBkYXRlOyAvLyB0cnVlIGlmIG1f
Y2FyZXRSZWN0IGFuZCBtX2Fic0NhcmV0Qm91bmRzIG5lZWQgdG8gYmUgY2FsY3VsYXRlZAotICAg
IGJvb2wgbV9hYnNDYXJldEJvdW5kc0RpcnR5OwotICAgIGJvb2wgbV9jYXJldFZpc2libGU7Ci0g
ICAgYm9vbCBtX2NhcmV0UGFpbnQ7CisgICAgYm9vbCBzaG91bGRVcGRhdGVDYXJldFJlY3QoKSBj
b25zdCB7IHJldHVybiBtX2NhcmV0UmVjdE5lZWRzVXBkYXRlOyB9CisgICAgdm9pZCBzZXRDYXJl
dFJlY3ROZWVkc1VwZGF0ZSgpIHsgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSA9IHRydWU7IH0KKwor
ICAgIHZvaWQgc2V0Q2FyZXRWaXNpYmlsaXR5KENhcmV0VmlzaWJpbGl0eSB2aXNpYmlsaXR5KSB7
IG1fY2FyZXRWaXNpYmlsaXR5ID0gdmlzaWJpbGl0eTsgfQorICAgIGJvb2wgY2FyZXRJc1Zpc2li
bGUoKSBjb25zdCB7IHJldHVybiBtX2NhcmV0VmlzaWJpbGl0eSA9PSBWaXNpYmxlOyB9CisgICAg
Q2FyZXRWaXNpYmlsaXR5IGNhcmV0VmlzaWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FyZXRW
aXNpYmlsaXR5OyB9CisKK3ByaXZhdGU6CisgICAgSW50UmVjdCBtX2NhcmV0TG9jYWxSZWN0OyAv
LyBjYXJldCByZWN0IGluIGNvb3JkcyBsb2NhbCB0byB0aGUgcmVuZGVyZXIgcmVzcG9uc2libGUg
Zm9yIHBhaW50aW5nIHRoZSBjYXJldAorICAgIGJvb2wgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZTsg
Ly8gdHJ1ZSBpZiBtX2NhcmV0UmVjdCAoYW5kIG1fYWJzQ2FyZXRCb3VuZHMgaW4gRnJhbWVTZWxl
Y3Rpb24pIG5lZWQgdG8gYmUgY2FsY3VsYXRlZAorICAgIENhcmV0VmlzaWJpbGl0eSBtX2NhcmV0
VmlzaWJpbGl0eTsKIH07CiAKIGNsYXNzIERyYWdDYXJldENvbnRyb2xsZXIgOiBwcml2YXRlIENh
cmV0QmFzZSB7CkBAIC0xNjgsNyArMTcxLDcgQEAgcHVibGljOgogCiAgICAgLy8gQm91bmRzIG9m
IChwb3NzaWJseSB0cmFuc2Zvcm1lZCkgY2FyZXQgaW4gYWJzb2x1dGUgY29vcmRzCiAgICAgSW50
UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRzKCk7Ci0gICAgdm9pZCBzZXRDYXJldFJlY3ROZWVkc1Vw
ZGF0ZShib29sIGZsYWcgPSB0cnVlKTsKKyAgICB2b2lkIHNldENhcmV0UmVjdE5lZWRzVXBkYXRl
KCkgeyBDYXJldEJhc2U6OnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7IH0KIAogICAgIHZvaWQg
c2V0SXNEaXJlY3Rpb25hbChib29sKTsKICAgICB2b2lkIHdpbGxCZU1vZGlmaWVkKEVBbHRlcmF0
aW9uLCBTZWxlY3Rpb25EaXJlY3Rpb24pOwpAQCAtMTg3LDcgKzE5MCw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUqKTsKICAgICB2b2lkIHRleHRXaWxsQmVSZXBs
YWNlZChDaGFyYWN0ZXJEYXRhKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBvbGRMZW5ndGgs
IHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAKLSAgICB2b2lkIHNldENhcmV0VmlzaWJsZShib29sID0g
dHJ1ZSk7CiAgICAgdm9pZCBjbGVhckNhcmV0UmVjdElmTmVlZGVkKCk7CiAgICAgYm9vbCByZWNv
bXB1dGVDYXJldFJlY3QoKTsKICAgICB2b2lkIGludmFsaWRhdGVDYXJldFJlY3QoKTsKQEAgLTI2
Myw2ICsyNjUsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRVc2VTZWN1cmVLZXlib2FyZEVu
dHJ5KGJvb2wpOwogCisgICAgdm9pZCBzZXRDYXJldFZpc2liaWxpdHkoQ2FyZXRWaXNpYmlsaXR5
KTsKKwogICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAgICAgaW50IG1feFBvc0ZvclZlcnRpY2FsQXJy
b3dOYXZpZ2F0aW9uOwpAQCAtMjczLDYgKzI3NywxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxF
ZGl0aW5nU3R5bGU+IG1fdHlwaW5nU3R5bGU7CiAKICAgICBUaW1lcjxGcmFtZVNlbGVjdGlvbj4g
bV9jYXJldEJsaW5rVGltZXI7CisgICAgSW50UmVjdCBtX2Fic0NhcmV0Qm91bmRzOyAvLyBhYnNv
bHV0ZSBib3VuZGluZyByZWN0IGZvciB0aGUgY2FyZXQKKyAgICBJbnRSZWN0IG1fYWJzb2x1dGVD
YXJldFJlcGFpbnRCb3VuZHM7CisgICAgYm9vbCBtX2Fic0NhcmV0Qm91bmRzRGlydHk7CisgICAg
Ym9vbCBtX2NhcmV0UGFpbnQ7CiAKICAgICBib29sIG1faXNEaXJlY3Rpb25hbDsKICAgICBib29s
IG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93020</attachid>
            <date>2011-05-10 15:09:54 -0700</date>
            <delta_ts>2011-05-10 16:32:28 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>bug-60454-20110510150953.patch</filename>
            <type>text/plain</type>
            <size>17334</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYxNzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ZmQyMzczMDA2YTFkYzBh
OGM5OTI5OGRlZTA5ZDFjZjhkYmI2MzNkLi5jN2QzZmFiNjQ3MDY2MjIyMDA1MTM1NmE1NWQwMGU3
MjM3MzUzOTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDUtMTAgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCisKKyAgICAgICAgTWFrZSBtZW1iZXIgdmFyaWFibGVzIG9mIENhcmV0QmFzZSBwcml2
YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQ1
NAorCisgICAgICAgIE1vdmVkIG1fYWJzQ2FyZXRCb3VuZHMsIG1fYWJzb2x1dGVDYXJldFJlcGFp
bnRCb3VuZHMsIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSwgYW5kIG1fY2FyZXRQYWludCBiYWNrCisg
ICAgICAgIGZyb20gQ2FyZXRCYXNlIHRvIEZyYW1lU2VsZWN0aW9uIGJlY2F1c2UgdGhleSBhcmUg
b25seSB1c2VkIGluIEZyYW1lU2VsZWN0aW9uLCBhbmQgbWFkZSB0aGUgcmVzdAorICAgICAgICBv
ZiBtZW1iZXIgdmFyaWFibGVzIGluIENhcmV0QmFzZSBwcml2YXRlLgorCisgICAgICAgICogZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OkNh
cmV0QmFzZSk6IFRha2VzIENhcmV0VmlzaWJpbGl0eSBhcyBhbiBhcmd1bWVudC4KKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdDYXJldENvbnRyb2xsZXI6OkRyYWdDYXJldENvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKTogSW5pdGlhbGl6
ZXMgbV9hYnNDYXJldEJvdW5kc0RpcnR5IGFuZCBtX2NhcmV0UGFpbnQKKyAgICAgICAgbm93IHRo
YXQgdGhleSBhcmUgcGFydCBvZiBGcmFtZVNlbGVjdGlvbiBhZ2Fpbi4KKyAgICAgICAgKFdlYkNv
cmU6OkRyYWdDYXJldENvbnRyb2xsZXI6OnNldENhcmV0UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
YXJldEJhc2U6OmNsZWFyQ2FyZXRSZWN0KTogRXh0cmFjdGVkIGZyb20gdXBkYXRlQ2FyZXRSZWN0
LgorICAgICAgICAoV2ViQ29yZTo6Q2FyZXRCYXNlOjp1cGRhdGVDYXJldFJlY3QpOiBObyBsb25n
ZXIgY2xlYXJzIGNhcmV0OyBhbGwgY2FsbCBzaXRlcyAobmFtZWx5IHNldENhcmV0UG9zaXRpb24K
KyAgICAgICAgYW5kIGxvY2FsQ2FyZXRSZWN0KSB0aGF0IHVzZWQgdG8gY2FsbCB1cGRhdGVDYXJl
dFJlY3Qgbm93IG5lZWQgdG8gY2FsbCBjbGVhckNhcmV0UmVjdCBvciB1cGRhdGVDYXJldFJlY3QK
KyAgICAgICAgYmFzZWQgb24gc29tZSBjb25kaXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhcmV0QmFz
ZTo6Y2FyZXRSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpw
YWludENhcmV0KTogT25seSBjYWxscyBDYXJldEJhc2U6OnBhaW50Q2FyZXQgaWYgbV9jYXJldFBh
aW50IGlzIHRydWUuCisgICAgICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OnBhaW50Q2FyZXQpOiBS
ZW1vdmVkIGFuIGVhcmx5IGV4aXQgZm9yIHdoZW4gbV9jYXJldFBhaW50IGlzIGZhbHNlIHNpbmNl
IG1fY2FyZXRQYWludAorICAgICAgICBoYXMgYmVlbiBtb3ZlZCBmcm9tIENhcmV0QmFzZSB0byBG
cmFtZVNlbGVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpmb2N1c2Vk
T3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNl
dENhcmV0VmlzaWJpbGl0eSk6IFRha2VzIENhcmV0VmlzaWJpbGl0eSBpbnN0ZWFkIG9mIGJvb2wu
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQp
OgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhcmV0QmFzZTo6ZmFzdExvY2FsQ2FyZXRSZWN0KTogQWRkZWQ7IHJlcGxhY2VzIGxvY2FsQ2Fy
ZXRSZWN0Rm9yUGFpbnRpbmcuCisgICAgICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OnNob3VsZFVw
ZGF0ZUNhcmV0UmVjdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FyZXRCYXNlOjpzZXRD
YXJldFJlY3ROZWVkc1VwZGF0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FyZXRCYXNl
OjpzZXRDYXJldFZpc2liaWxpdHkpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhcmV0QmFz
ZTo6Y2FyZXRJc1Zpc2libGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSk6IEFkZGVkLgorCiAyMDExLTA1LTEwICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGlj
ZSBMaXUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDhh
NDkwYTI1M2JhMjc2Mjg3ZmVkMmI2N2UzMGM5ZDA5MTU0MzczMzIuLjc4YjE4ODQzZWU0YzhkN2Zh
OGM3Yjg0NGIwMDgyYzllOTMzZjM3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCkBAIC03MSwxNyArNzEsMTUgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogY29uc3QgaW50IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0gSU5UX01J
TjsKIAotQ2FyZXRCYXNlOjpDYXJldEJhc2UoKQorQ2FyZXRCYXNlOjpDYXJldEJhc2UoQ2FyZXRW
aXNpYmlsaXR5IHZpc2liaWxpdHkpCiAgICAgOiBtX2NhcmV0UmVjdE5lZWRzVXBkYXRlKHRydWUp
Ci0gICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKLSAgICAsIG1fY2FyZXRWaXNpYmxl
KGZhbHNlKQotICAgICwgbV9jYXJldFBhaW50KHRydWUpCisgICAgLCBtX2NhcmV0VmlzaWJpbGl0
eSh2aXNpYmlsaXR5KQogewogfQogCiBEcmFnQ2FyZXRDb250cm9sbGVyOjpEcmFnQ2FyZXRDb250
cm9sbGVyKCkKKyAgICA6IENhcmV0QmFzZShWaXNpYmxlKQogewotICAgIG1fY2FyZXRWaXNpYmxl
ID0gdHJ1ZTsKIH0KIAogYm9vbCBEcmFnQ2FyZXRDb250cm9sbGVyOjppc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpIGNvbnN0CkBAIC05NCw2ICs5Miw4IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNl
bGVjdGlvbihGcmFtZSogZnJhbWUpCiAgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdh
dGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikKICAgICAsIG1fZ3JhbnVsYXJp
dHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCiAgICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlzLCAm
RnJhbWVTZWxlY3Rpb246OmNhcmV0QmxpbmtUaW1lckZpcmVkKQorICAgICwgbV9hYnNDYXJldEJv
dW5kc0RpcnR5KHRydWUpCisgICAgLCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJl
dEJsaW5raW5nU3VzcGVuZGVkKGZhbHNlKQogICAgICwgbV9mb2N1c2VkKGZyYW1lICYmIGZyYW1l
LT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFt
ZSgpID09IGZyYW1lKQogewpAQCAtMTQ2LDEzICsxNDYsMTYgQEAgdm9pZCBEcmFnQ2FyZXRDb250
cm9sbGVyOjpzZXRDYXJldFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24p
CiAgICAgaWYgKE5vZGUqIG5vZGUgPSBtX3Bvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKSkKICAgICAgICAgaW52YWxpZGF0ZUNhcmV0UmVjdChub2RlKTsKICAgICBtX3Bv
c2l0aW9uID0gcG9zaXRpb247Ci0gICAgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSA9IHRydWU7Cisg
ICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSAw
OwogICAgIGlmIChOb2RlKiBub2RlID0gbV9wb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCkpIHsKICAgICAgICAgaW52YWxpZGF0ZUNhcmV0UmVjdChub2RlKTsKICAgICAg
ICAgZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwogICAgIH0KLSAgICB1cGRhdGVDYXJldFJl
Y3QoZG9jdW1lbnQsIG1fcG9zaXRpb24sIG1fcG9zaXRpb24uaXNOb3ROdWxsKCkgPyBWaXNpYmxl
U2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbiA6IFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9u
LCBtX3Bvc2l0aW9uLmlzT3JwaGFuKCkpOworICAgIGlmIChtX3Bvc2l0aW9uLmlzTnVsbCgpIHx8
IG1fcG9zaXRpb24uaXNPcnBoYW4oKSkKKyAgICAgICAgY2xlYXJDYXJldFJlY3QoKTsKKyAgICBl
bHNlCisgICAgICAgIHVwZGF0ZUNhcmV0UmVjdChkb2N1bWVudCwgbV9wb3NpdGlvbik7CiB9CiAK
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzLCBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMsIEN1cnNvckFsaWduT25TY3JvbGwgYWxp
Z24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgRGlyZWN0aW9uYWxpdHlQb2xpY3kgZGly
ZWN0aW9uYWxpdHlQb2xpY3kpCkBAIC0xOTUsOCArMTk4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHMsIFNldFNlbGVjdGlvbk9w
dGlvbnMKICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwog
CiAgICAgbV9zZWxlY3Rpb24gPSBzOwotICAgIAotICAgIG1fY2FyZXRSZWN0TmVlZHNVcGRhdGUg
PSB0cnVlOworICAgIHNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CiAgICAgCiAgICAgaWYgKCFz
LmlzTm9uZSgpKQogICAgICAgICBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7CkBAIC0xMDU5LDU0
ICsxMDYxLDQ3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBQb3NpdGlv
biAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgdXNlCiAgICAgc2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24obV9zZWxlY3Rpb24uYmFzZSgpLCBwb3MsIGFmZmluaXR5KSwgb3B0aW9u
cyk7CiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKGJv
b2wgZmxhZykKK3ZvaWQgQ2FyZXRCYXNlOjpjbGVhckNhcmV0UmVjdCgpCiB7Ci0gICAgbV9jYXJl
dFJlY3ROZWVkc1VwZGF0ZSA9IGZsYWc7CisgICAgbV9jYXJldExvY2FsUmVjdCA9IEludFJlY3Qo
KTsKIH0KIAotdm9pZCBDYXJldEJhc2U6OnVwZGF0ZUNhcmV0UmVjdChEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgY2FyZXRQb3NpdGlvbiwgVmlzaWJsZVNlbGVjdGlv
bjo6U2VsZWN0aW9uVHlwZSB0eXBlLCBib29sIGlzT3JwaGFuZWQpCitib29sIENhcmV0QmFzZTo6
dXBkYXRlQ2FyZXRSZWN0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBjYXJldFBvc2l0aW9uKQogewotICAgIGlmICh0eXBlID09IFZpc2libGVTZWxlY3Rpb246Ok5v
U2VsZWN0aW9uIHx8IGlzT3JwaGFuZWQpIHsKLSAgICAgICAgbV9jYXJldFJlY3QgPSBJbnRSZWN0
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVJ
Zk5lZWRlZCgpOworICAgIG1fY2FyZXRMb2NhbFJlY3QgPSBJbnRSZWN0KCk7CiAKLSAgICBtX2Nh
cmV0UmVjdCA9IEludFJlY3QoKTsKLSAgICAKLSAgICBpZiAodHlwZSA9PSBWaXNpYmxlU2VsZWN0
aW9uOjpDYXJldFNlbGVjdGlvbikgewotICAgICAgICBpZiAoY2FyZXRQb3NpdGlvbi5pc05vdE51
bGwoKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhcmV0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKTsKLQotICAgICAgICAgICAgLy8gRmlyc3Qg
Y29tcHV0ZSBhIHJlY3QgbG9jYWwgdG8gdGhlIHJlbmRlcmVyIGF0IHRoZSBzZWxlY3Rpb24gc3Rh
cnQKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXI7Ci0gICAgICAgICAgICBJbnRS
ZWN0IGxvY2FsUmVjdCA9IGNhcmV0UG9zaXRpb24ubG9jYWxDYXJldFJlY3QocmVuZGVyZXIpOwot
Ci0gICAgICAgICAgICAvLyBHZXQgdGhlIHJlbmRlcmVyIHRoYXQgd2lsbCBiZSByZXNwb25zaWJs
ZSBmb3IgcGFpbnRpbmcgdGhlIGNhcmV0ICh3aGljaAotICAgICAgICAgICAgLy8gaXMgZWl0aGVy
IHRoZSByZW5kZXJlciB3ZSBqdXN0IGZvdW5kLCBvciBvbmUgb2YgaXRzIGNvbnRhaW5lcnMpCi0g
ICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNhcmV0UGFpbnRlciA9IGNhcmV0UmVuZGVyZXIoY2Fy
ZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOwotCi0gICAgICAg
ICAgICAvLyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVuIHRoZSByZW5kZXJlciBhbmQgdGhlIGNh
cmV0UGFpbnRlcgotICAgICAgICAgICAgYm9vbCB1bnJvb3RlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgd2hpbGUgKHJlbmRlcmVyICE9IGNhcmV0UGFpbnRlcikgewotICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogY29udGFpbmVyT2JqZWN0ID0gcmVuZGVyZXItPmNvbnRhaW5lcigpOwotICAg
ICAgICAgICAgICAgIGlmICghY29udGFpbmVyT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHVucm9vdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGxvY2FsUmVjdC5tb3ZlKHJlbmRlcmVyLT5vZmZzZXRG
cm9tQ29udGFpbmVyKGNvbnRhaW5lck9iamVjdCwgbG9jYWxSZWN0LmxvY2F0aW9uKCkpKTsKLSAg
ICAgICAgICAgICAgICByZW5kZXJlciA9IGNvbnRhaW5lck9iamVjdDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCF1bnJvb3RlZCkKLSAgICAgICAgICAgICAg
ICBtX2NhcmV0UmVjdCA9IGxvY2FsUmVjdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9h
YnNDYXJldEJvdW5kc0RpcnR5ID0gdHJ1ZTsKKyAgICBtX2NhcmV0UmVjdE5lZWRzVXBkYXRlID0g
ZmFsc2U7CisKKyAgICBpZiAoY2FyZXRQb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgQVNTRVJUKGNhcmV0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXBy
ZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKTsKKworICAgIC8vIEZpcnN0IGNvbXB1dGUgYSByZWN0
IGxvY2FsIHRvIHRoZSByZW5kZXJlciBhdCB0aGUgc2VsZWN0aW9uIHN0YXJ0LgorICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXI7CisgICAgSW50UmVjdCBsb2NhbFJlY3QgPSBjYXJldFBvc2l0aW9u
LmxvY2FsQ2FyZXRSZWN0KHJlbmRlcmVyKTsKKworICAgIC8vIEdldCB0aGUgcmVuZGVyZXIgdGhh
dCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGUgY2FyZXQKKyAgICAvLyAod2hp
Y2ggaXMgZWl0aGVyIHRoZSByZW5kZXJlciB3ZSBqdXN0IGZvdW5kLCBvciBvbmUgb2YgaXRzIGNv
bnRhaW5lcnMpLgorICAgIFJlbmRlck9iamVjdCogY2FyZXRQYWludGVyID0gY2FyZXRSZW5kZXJl
cihjYXJldFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisKKyAg
ICAvLyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVuIHRoZSByZW5kZXJlciBhbmQgdGhlIGNhcmV0
UGFpbnRlci4KKyAgICBib29sIHVucm9vdGVkID0gZmFsc2U7CisgICAgd2hpbGUgKHJlbmRlcmVy
ICE9IGNhcmV0UGFpbnRlcikgeworICAgICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5lck9iamVj
dCA9IHJlbmRlcmVyLT5jb250YWluZXIoKTsKKyAgICAgICAgaWYgKCFjb250YWluZXJPYmplY3Qp
IHsKKyAgICAgICAgICAgIHVucm9vdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CisgICAgICAgIGxvY2FsUmVjdC5tb3ZlKHJlbmRlcmVyLT5vZmZzZXRGcm9tQ29udGFp
bmVyKGNvbnRhaW5lck9iamVjdCwgbG9jYWxSZWN0LmxvY2F0aW9uKCkpKTsKKyAgICAgICAgcmVu
ZGVyZXIgPSBjb250YWluZXJPYmplY3Q7CiAgICAgfQogCi0gICAgbV9jYXJldFJlY3ROZWVkc1Vw
ZGF0ZSA9IGZhbHNlOworICAgIGlmICghdW5yb290ZWQpCisgICAgICAgIG1fY2FyZXRMb2NhbFJl
Y3QgPSBsb2NhbFJlY3Q7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGlubGluZSBi
b29sIGNhcmV0UmVuZGVyc0luc2lkZU5vZGUoTm9kZSogbm9kZSkKQEAgLTExNDAsMTIgKzExMzUs
MTQgQEAgUmVuZGVyT2JqZWN0KiBEcmFnQ2FyZXRDb250cm9sbGVyOjpjYXJldFJlbmRlcmVyKCkg
Y29uc3QKIAogSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6bG9jYWxDYXJldFJlY3QoKQogewotICAg
IGlmIChtX2NhcmV0UmVjdE5lZWRzVXBkYXRlKSB7Ci0gICAgICAgIGJvb2wgaXNPcnBoYW5lZCA9
ICFpc05vbmUoKSAmJiAoIW1fc2VsZWN0aW9uLnN0YXJ0KCkuYW5jaG9yTm9kZSgpLT5pbkRvY3Vt
ZW50KCkgfHwgIW1fc2VsZWN0aW9uLmVuZCgpLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKTsK
LSAgICAgICAgdXBkYXRlQ2FyZXRSZWN0KG1fZnJhbWUtPmRvY3VtZW50KCksIFZpc2libGVQb3Np
dGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSwgbV9zZWxl
Y3Rpb24uc2VsZWN0aW9uVHlwZSgpLCBpc09ycGhhbmVkKTsKKyAgICBpZiAoc2hvdWxkVXBkYXRl
Q2FyZXRSZWN0KCkpIHsKKyAgICAgICAgaWYgKCFpc0NhcmV0KCkgfHwgbV9zZWxlY3Rpb24uc3Rh
cnQoKS5pc09ycGhhbigpIHx8IG1fc2VsZWN0aW9uLmVuZCgpLmlzT3JwaGFuKCkpCisgICAgICAg
ICAgICBjbGVhckNhcmV0UmVjdCgpOworICAgICAgICBlbHNlIGlmICh1cGRhdGVDYXJldFJlY3Qo
bV9mcmFtZS0+ZG9jdW1lbnQoKSwgVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCks
IG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKSkKKyAgICAgICAgICAgIG1fYWJzQ2FyZXRCb3VuZHNE
aXJ0eSA9IHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fY2FyZXRSZWN0OworICAgIHJldHVy
biBsb2NhbENhcmV0UmVjdFdpdGhvdXRVcGRhdGUoKTsKIH0KIAogSW50UmVjdCBDYXJldEJhc2U6
OmFic29sdXRlQm91bmRzRm9yTG9jYWxSZWN0KE5vZGUqIG5vZGUsIGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0CkBAIC0xMTc4LDEyICsxMTc1LDEyIEBAIHN0YXRpYyBJbnRSZWN0IHJlcGFpbnRS
ZWN0Rm9yQ2FyZXQoSW50UmVjdCBjYXJldCkKIAogSW50UmVjdCBDYXJldEJhc2U6OmNhcmV0UmVw
YWludFJlY3QoTm9kZSogbm9kZSkgY29uc3QKIHsKLSAgICByZXR1cm4gYWJzb2x1dGVCb3VuZHNG
b3JMb2NhbFJlY3Qobm9kZSwgcmVwYWludFJlY3RGb3JDYXJldChsb2NhbENhcmV0UmVjdEZvclBh
aW50aW5nKCkpKTsKKyAgICByZXR1cm4gYWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJlY3Qobm9kZSwg
cmVwYWludFJlY3RGb3JDYXJldChsb2NhbENhcmV0UmVjdFdpdGhvdXRVcGRhdGUoKSkpOwogfQog
CiBib29sIEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoKQogewotICAgIGlmICgh
bV9jYXJldFJlY3ROZWVkc1VwZGF0ZSkKKyAgICBpZiAoIXNob3VsZFVwZGF0ZUNhcmV0UmVjdCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fZnJhbWUpCkBAIC0xMTkzLDE0
ICsxMTkwLDE0IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAg
ICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRSZWN0IG9sZFJlY3Qg
PSBtX2NhcmV0UmVjdDsKKyAgICBJbnRSZWN0IG9sZFJlY3QgPSBsb2NhbENhcmV0UmVjdFdpdGhv
dXRVcGRhdGUoKTsKICAgICBJbnRSZWN0IG5ld1JlY3QgPSBsb2NhbENhcmV0UmVjdCgpOwogICAg
IGlmIChvbGRSZWN0ID09IG5ld1JlY3QgJiYgIW1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW50UmVjdCBvbGRBYnNDYXJldEJvdW5kcyA9IG1fYWJz
Q2FyZXRCb3VuZHM7CiAgICAgLy8gRklYTUU6IFJlbmFtZSBtX2NhcmV0UmVjdCB0byBtX2xvY2Fs
Q2FyZXRSZWN0LgotICAgIG1fYWJzQ2FyZXRCb3VuZHMgPSBhYnNvbHV0ZUJvdW5kc0ZvckxvY2Fs
UmVjdChtX3NlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCksIG1fY2FyZXRSZWN0KTsK
KyAgICBtX2Fic0NhcmV0Qm91bmRzID0gYWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJlY3QobV9zZWxl
Y3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLCBsb2NhbENhcmV0UmVjdFdpdGhvdXRVcGRh
dGUoKSk7CiAgICAgbV9hYnNDYXJldEJvdW5kc0RpcnR5ID0gZmFsc2U7CiAgICAgCiAgICAgaWYg
KG9sZEFic0NhcmV0Qm91bmRzID09IG1fYWJzQ2FyZXRCb3VuZHMpCkBAIC0xMjYxLDIxICsxMjU4
LDE3IEBAIHZvaWQgQ2FyZXRCYXNlOjppbnZhbGlkYXRlQ2FyZXRSZWN0KE5vZGUqIG5vZGUsIGJv
b2wgY2FyZXRSZWN0Q2hhbmdlZCkKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6cGFpbnRDYXJldChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCkKIHsKLSAgICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQ2FyZXRCYXNlOjpwYWludENhcmV0KG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVw
cmVjYXRlZE5vZGUoKSwgY29udGV4dCwgdHgsIHR5LCBjbGlwUmVjdCk7CisgICAgaWYgKG1fc2Vs
ZWN0aW9uLmlzQ2FyZXQoKSAmJiBtX2NhcmV0UGFpbnQpCisgICAgICAgIENhcmV0QmFzZTo6cGFp
bnRDYXJldChtX3NlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCksIGNvbnRleHQsIHR4
LCB0eSwgY2xpcFJlY3QpOwogfQogCiB2b2lkIENhcmV0QmFzZTo6cGFpbnRDYXJldChOb2RlKiBu
b2RlLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRS
ZWN0JiBjbGlwUmVjdCkgY29uc3QKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBpZiAo
IW1fY2FyZXRWaXNpYmxlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2NhcmV0UGFpbnQp
CisgICAgaWYgKG1fY2FyZXRWaXNpYmlsaXR5ID09IEhpZGRlbikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IGxvY2FsQ2FyZXRSZWN0Rm9yUGFpbnRpbmcoKTsK
KyAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gbG9jYWxDYXJldFJlY3RXaXRob3V0VXBkYXRlKCk7
CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNhcmV0UmVuZGVyZXIobm9kZSk7CiAgICAg
aWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JveCgpKQogICAgICAgICB0b1JlbmRlckJveChy
ZW5kZXJlciktPmZsaXBGb3JXcml0aW5nTW9kZShkcmF3aW5nUmVjdCk7CkBAIC0xNTY2LDcgKzE1
NTksNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQo
KQogICAgIC8vIENhcmV0IGFwcGVhcnMgaW4gdGhlIGFjdGl2ZSBmcmFtZS4KICAgICBpZiAoYWN0
aXZlQW5kRm9jdXNlZCkKICAgICAgICAgc2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKLSAgICBzZXRD
YXJldFZpc2libGUoYWN0aXZlQW5kRm9jdXNlZCk7CisgICAgc2V0Q2FyZXRWaXNpYmlsaXR5KGFj
dGl2ZUFuZEZvY3VzZWQgPyBWaXNpYmxlIDogSGlkZGVuKTsKIAogICAgIC8vIFVwZGF0ZSBmb3Ig
Y2FwcyBsb2NrIHN0YXRlCiAgICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhcHNMb2NrU3Rh
dGVNYXlIYXZlQ2hhbmdlZCgpOwpAQCAtMTYyNSw4ICsxNjE4LDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgYm9vbCBjYXJldFJlY3RDaGFuZ2VkID0gcmVj
b21wdXRlQ2FyZXRSZWN0KCk7CiAKICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5z
ZXR0aW5ncygpICYmIG1fZnJhbWUtPnNldHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7
Ci0gICAgYm9vbCBzaG91bGRCbGluayA9IG1fY2FyZXRWaXNpYmxlCi0gICAgICAgICYmIGlzQ2Fy
ZXQoKSAmJiAoaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKTsKKyAgICBib29s
IHNob3VsZEJsaW5rID0gY2FyZXRJc1Zpc2libGUoKSAmJiBpc0NhcmV0KCkgJiYgKGlzQ29udGVu
dEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZyk7CiAKICAgICAvLyBJZiB0aGUgY2FyZXQgbW92
ZWQsIHN0b3AgdGhlIGJsaW5rIHRpbWVyIHNvIHdlIGNhbiByZXN0YXJ0IHdpdGggYQogICAgIC8v
IGJsYWNrIGNhcmV0IGluIHRoZSBuZXcgbG9jYXRpb24uCkBAIC0xNjgyLDEyICsxNjc0LDEyIEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogICAgIH0KIH0KIAotdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRWaXNpYmxlKGJvb2wgZmxhZykKK3ZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eShDYXJldFZpc2liaWxpdHkgdmlzaWJpbGl0eSkK
IHsKLSAgICBpZiAobV9jYXJldFZpc2libGUgPT0gZmxhZykKKyAgICBpZiAoY2FyZXRWaXNpYmls
aXR5KCkgPT0gdmlzaWJpbGl0eSkKICAgICAgICAgcmV0dXJuOwogICAgIGNsZWFyQ2FyZXRSZWN0
SWZOZWVkZWQoKTsKLSAgICBtX2NhcmV0VmlzaWJsZSA9IGZsYWc7CisgICAgQ2FyZXRCYXNlOjpz
ZXRDYXJldFZpc2liaWxpdHkodmlzaWJpbGl0eSk7CiAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwog
fQogCkBAIC0xNzA0LDcgKzE2OTYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpjbGVhckNhcmV0
UmVjdElmTmVlZGVkKCkKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmNhcmV0QmxpbmtUaW1lckZpcmVk
KFRpbWVyPEZyYW1lU2VsZWN0aW9uPiopCiB7CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAg
QVNTRVJUKG1fY2FyZXRWaXNpYmxlKTsKKyAgICBBU1NFUlQoY2FyZXRJc1Zpc2libGUoKSk7CiAg
ICAgQVNTRVJUKGlzQ2FyZXQoKSk7CiAgICAgYm9vbCBjYXJldFBhaW50ID0gbV9jYXJldFBhaW50
OwogICAgIGlmIChpc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoKSAmJiBjYXJldFBhaW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IDI3MDI1NjZkNjRmNDk5ZTEx
NTMzYjA2NWVjNzQ1ZGRkOWI3MGNkNjEuLmZmMzZlODBmYWM0MzA1NzlkMjgwMjIwOTZhNzQ1MTEw
YzY3ZmZmMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTUy
LDI4ICs1MiwzMSBAQCBjbGFzcyBDYXJldEJhc2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENhcmV0QmFzZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcm90ZWN0ZWQ6Ci0g
ICAgQ2FyZXRCYXNlKCk7CisgICAgZW51bSBDYXJldFZpc2liaWxpdHkgeyBWaXNpYmxlLCBIaWRk
ZW4gfTsKKyAgICBleHBsaWNpdCBDYXJldEJhc2UoQ2FyZXRWaXNpYmlsaXR5ID0gSGlkZGVuKTsK
IAogICAgIHZvaWQgaW52YWxpZGF0ZUNhcmV0UmVjdChOb2RlKiwgYm9vbCBjYXJldFJlY3RDaGFu
Z2VkID0gZmFsc2UpOwotICAgIHZvaWQgdXBkYXRlQ2FyZXRSZWN0KERvY3VtZW50KiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBjYXJldFBvc2l0aW9uLCBWaXNpYmxlU2VsZWN0aW9uOjpTZWxlY3Rp
b25UeXBlLCBib29sIGlzT3JwaGFuZWQpOworICAgIHZvaWQgY2xlYXJDYXJldFJlY3QoKTsKKyAg
ICBib29sIHVwZGF0ZUNhcmV0UmVjdChEb2N1bWVudCosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
Y2FyZXRQb3NpdGlvbik7CiAgICAgSW50UmVjdCBhYnNvbHV0ZUJvdW5kc0ZvckxvY2FsUmVjdChO
b2RlKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIEludFJlY3QgYWJzb2x1dGVDYXJldEJv
dW5kcyhib29sIGlzQ29udGVudEVkaXRhYmxlKTsKICAgICBJbnRSZWN0IGNhcmV0UmVwYWludFJl
Y3QoTm9kZSopIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkUmVwYWludENhcmV0KGNvbnN0IFJlbmRl
clZpZXcqLCBib29sIGlzQ29udGVudEVkaXRhYmxlKSBjb25zdDsKLQotICAgIEludFJlY3QgbG9j
YWxDYXJldFJlY3RGb3JQYWludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fY2FyZXRSZWN0OyB9CiAg
ICAgdm9pZCBwYWludENhcmV0KE5vZGUqLCBHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0
eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OwotCiAgICAgUmVuZGVyT2JqZWN0KiBj
YXJldFJlbmRlcmVyKE5vZGUqKSBjb25zdDsKIAotICAgIEludFJlY3QgbV9jYXJldFJlY3Q7IC8v
IGNhcmV0IHJlY3QgaW4gY29vcmRzIGxvY2FsIHRvIHRoZSByZW5kZXJlciByZXNwb25zaWJsZSBm
b3IgcGFpbnRpbmcgdGhlIGNhcmV0Ci0gICAgSW50UmVjdCBtX2Fic0NhcmV0Qm91bmRzOyAvLyBh
YnNvbHV0ZSBib3VuZGluZyByZWN0IGZvciB0aGUgY2FyZXQKLSAgICBJbnRSZWN0IG1fYWJzb2x1
dGVDYXJldFJlcGFpbnRCb3VuZHM7CisgICAgY29uc3QgSW50UmVjdCYgbG9jYWxDYXJldFJlY3RX
aXRob3V0VXBkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9jYXJldExvY2FsUmVjdDsgfQogCi0gICAg
Ym9vbCBtX2NhcmV0UmVjdE5lZWRzVXBkYXRlOyAvLyB0cnVlIGlmIG1fY2FyZXRSZWN0IGFuZCBt
X2Fic0NhcmV0Qm91bmRzIG5lZWQgdG8gYmUgY2FsY3VsYXRlZAotICAgIGJvb2wgbV9hYnNDYXJl
dEJvdW5kc0RpcnR5OwotICAgIGJvb2wgbV9jYXJldFZpc2libGU7Ci0gICAgYm9vbCBtX2NhcmV0
UGFpbnQ7CisgICAgYm9vbCBzaG91bGRVcGRhdGVDYXJldFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2NhcmV0UmVjdE5lZWRzVXBkYXRlOyB9CisgICAgdm9pZCBzZXRDYXJldFJlY3ROZWVkc1VwZGF0
ZSgpIHsgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSA9IHRydWU7IH0KKworICAgIHZvaWQgc2V0Q2Fy
ZXRWaXNpYmlsaXR5KENhcmV0VmlzaWJpbGl0eSB2aXNpYmlsaXR5KSB7IG1fY2FyZXRWaXNpYmls
aXR5ID0gdmlzaWJpbGl0eTsgfQorICAgIGJvb2wgY2FyZXRJc1Zpc2libGUoKSBjb25zdCB7IHJl
dHVybiBtX2NhcmV0VmlzaWJpbGl0eSA9PSBWaXNpYmxlOyB9CisgICAgQ2FyZXRWaXNpYmlsaXR5
IGNhcmV0VmlzaWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FyZXRWaXNpYmlsaXR5OyB9CisK
K3ByaXZhdGU6CisgICAgSW50UmVjdCBtX2NhcmV0TG9jYWxSZWN0OyAvLyBjYXJldCByZWN0IGlu
IGNvb3JkcyBsb2NhbCB0byB0aGUgcmVuZGVyZXIgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRo
ZSBjYXJldAorICAgIGJvb2wgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZTsgLy8gdHJ1ZSBpZiBtX2Nh
cmV0UmVjdCAoYW5kIG1fYWJzQ2FyZXRCb3VuZHMgaW4gRnJhbWVTZWxlY3Rpb24pIG5lZWQgdG8g
YmUgY2FsY3VsYXRlZAorICAgIENhcmV0VmlzaWJpbGl0eSBtX2NhcmV0VmlzaWJpbGl0eTsKIH07
CiAKIGNsYXNzIERyYWdDYXJldENvbnRyb2xsZXIgOiBwcml2YXRlIENhcmV0QmFzZSB7CkBAIC0x
NjgsNyArMTcxLDcgQEAgcHVibGljOgogCiAgICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFu
c2Zvcm1lZCkgY2FyZXQgaW4gYWJzb2x1dGUgY29vcmRzCiAgICAgSW50UmVjdCBhYnNvbHV0ZUNh
cmV0Qm91bmRzKCk7Ci0gICAgdm9pZCBzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZShib29sIGZsYWcg
PSB0cnVlKTsKKyAgICB2b2lkIHNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCkgeyBDYXJldEJhc2U6
OnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7IH0KIAogICAgIHZvaWQgc2V0SXNEaXJlY3Rpb25h
bChib29sKTsKICAgICB2b2lkIHdpbGxCZU1vZGlmaWVkKEVBbHRlcmF0aW9uLCBTZWxlY3Rpb25E
aXJlY3Rpb24pOwpAQCAtMTg3LDcgKzE5MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vZGVXaWxs
QmVSZW1vdmVkKE5vZGUqKTsKICAgICB2b2lkIHRleHRXaWxsQmVSZXBsYWNlZChDaGFyYWN0ZXJE
YXRhKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xl
bmd0aCk7CiAKLSAgICB2b2lkIHNldENhcmV0VmlzaWJsZShib29sID0gdHJ1ZSk7CisgICAgdm9p
ZCBzZXRDYXJldFZpc2libGUoYm9vbCBjYXJldElzVmlzaWJsZSkgeyBzZXRDYXJldFZpc2liaWxp
dHkoY2FyZXRJc1Zpc2libGUgPyBWaXNpYmxlIDogSGlkZGVuKTsgfQogICAgIHZvaWQgY2xlYXJD
YXJldFJlY3RJZk5lZWRlZCgpOwogICAgIGJvb2wgcmVjb21wdXRlQ2FyZXRSZWN0KCk7CiAgICAg
dm9pZCBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7CkBAIC0yNjMsNiArMjY2LDggQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgc2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShib29sKTsKIAorICAgIHZvaWQg
c2V0Q2FyZXRWaXNpYmlsaXR5KENhcmV0VmlzaWJpbGl0eSk7CisKICAgICBGcmFtZSogbV9mcmFt
ZTsKIAogICAgIGludCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKQEAgLTI3Myw2
ICsyNzgsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBtX3R5cGluZ1N0
eWxlOwogCiAgICAgVGltZXI8RnJhbWVTZWxlY3Rpb24+IG1fY2FyZXRCbGlua1RpbWVyOworICAg
IEludFJlY3QgbV9hYnNDYXJldEJvdW5kczsgLy8gYWJzb2x1dGUgYm91bmRpbmcgcmVjdCBmb3Ig
dGhlIGNhcmV0CisgICAgSW50UmVjdCBtX2Fic29sdXRlQ2FyZXRSZXBhaW50Qm91bmRzOworICAg
IGJvb2wgbV9hYnNDYXJldEJvdW5kc0RpcnR5OworICAgIGJvb2wgbV9jYXJldFBhaW50OwogCiAg
ICAgYm9vbCBtX2lzRGlyZWN0aW9uYWw7CiAgICAgYm9vbCBtX2lzQ2FyZXRCbGlua2luZ1N1c3Bl
bmRlZDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>