<?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>71841</bug_id>
          
          <creation_ts>2011-11-08 11:39:14 -0800</creation_ts>
          <short_desc>[Qt][WK2] Add Tap Gesture recognition to UIProcess</short_desc>
          <delta_ts>2011-11-10 06:10:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zeno Albisser">zeno</reporter>
          <assigned_to name="Zeno Albisser">zeno</assigned_to>
          <cc>kenneth</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>498288</commentid>
    <comment_count>0</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-11-08 11:39:14 -0800</bug_when>
    <thetext>SSIA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498360</commentid>
    <comment_count>1</comment_count>
      <attachid>114137</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-11-08 12:42:52 -0800</bug_when>
    <thetext>Created attachment 114137
patch for feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498815</commentid>
    <comment_count>2</comment_count>
      <attachid>114137</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-11-09 04:22:02 -0800</bug_when>
    <thetext>Comment on attachment 114137
patch for feedback.

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

&gt; Source/WebKit2/ChangeLog:8
&gt; +        Add a Tap gesture recognizer that delivers GestureSingleTap
&gt; +        and GestureTapAndHold events through the WebPageProxy.
&gt; +        Add a GestureTapAndHold to WebEvent.

As this is based on code from Benjamin, I would add that. Give credit where due.
Btw you seem to support double tap as well!

&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:2
&gt; + * Copyright (C) 2011 Zeno Albisser &lt;zeno@webkit.org&gt;

We normally add Nokia copyright, though I don&apos;t know our official stand on this

&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:37
&gt; +    , m_tapState(NoPointing)

Weird name

&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:61
&gt; +        if (m_tapDoubleClickTimer.isActive()) {

We really need to make sure that hte time constants match our platform. Ie. I think the harmattan platform ignores too fast taps as well. We might need to support that.

&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:68
&gt; +                m_tapState = DoubleTapStarted;

It is kind of already recognized... why not call it DoubleTapRecognized ? or better yet, DoubleTapCandidate

&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:104
&gt; +            {
&gt; +                ASSERT(!m_tapDoubleClickTimer.isActive());
&gt; +                m_tapState = NoPointing;
&gt; +
&gt; +                const QTouchEvent::TouchPoint&amp; touchPoint = event-&gt;touchPoints().first();
&gt; +                QPointF startPosition = touchPoint.startScreenPos();
&gt; +                QPointF endPosition = touchPoint.screenPos();
&gt; +                if (QLineF(endPosition, startPosition).length() &lt; maxDoubleTapDistance &amp;&amp; m_webPageProxy)
&gt; +                    m_webPageProxy-&gt;findZoomableAreaForPoint(touchPoint.pos().toPoint());
&gt; +                break;
&gt; +            }

wrong indention I believe (chck the style guide)

I am not such a fan of calling code (findZoomableAreaForPoint) directly from the recognizer... people will not find that easily and it is not well separated... better call a method on the interaction engine such as &quot;interactionEngine-&gt;doubleTapGesture()&quot;

&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.h:42
&gt; +const qreal initialTriggerDistanceThreshold = 5;
&gt; +const qreal maxDoubleTapDistance = 120;
&gt; +const int tapAndHoldTime = 800;
&gt; +const int doubleClickInterval = 400;

These should probably consider DPI. Maybe add a FIXME

&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.h:60
&gt; +    QBasicTimer m_tapDoubleClickTimer;

doubleTapTimer?

&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.h:65
&gt; +        NoPointing,

NoTap would make more sense

&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.h:74
&gt; +#endif /* QtPanGestureRecognizer_h */

This is not correct

&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:-830
&gt;      if (wasEventHandled || event.type() == WebEvent::TouchCancel) {
&gt;          m_panGestureRecognizer.reset();
&gt;          m_pinchGestureRecognizer.reset();
&gt; -        return;

Don&apos;t you want to reset the tap one here? Or add a comment why not?

&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:837
&gt; +        const QTouchEvent* ev = event.nativeEvent();

Why not put this outside, you are doing the same lower down</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498817</commentid>
    <comment_count>3</comment_count>
      <attachid>114137</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-11-09 04:24:37 -0800</bug_when>
    <thetext>Comment on attachment 114137
patch for feedback.

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

&gt; Source/WebKit2/Shared/WebEvent.h:67
&gt;          GestureScrollBegin,
&gt;          GestureScrollEnd,
&gt;          GestureSingleTap,
&gt; +        GestureTapAndHold,

Why is there no GestureDoubleTap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498959</commentid>
    <comment_count>4</comment_count>
      <attachid>114137</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-11-09 07:54:39 -0800</bug_when>
    <thetext>Comment on attachment 114137
patch for feedback.

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

i&apos;ll post an update as soon as i figured out a good solution for sending the findZoomableAreaForPoint() call through the QtViewportInteractionEngine.

&gt;&gt; Source/WebKit2/ChangeLog:8
&gt;&gt; +        Add a GestureTapAndHold to WebEvent.
&gt; 
&gt; As this is based on code from Benjamin, I would add that. Give credit where due.
&gt; Btw you seem to support double tap as well!

sure.

&gt;&gt; Source/WebKit2/Shared/WebEvent.h:67
&gt;&gt; +        GestureTapAndHold,
&gt; 
&gt; Why is there no GestureDoubleTap?

the double tap gesture is not sent through the webPageProxy as an event. It just triggers findZoomableAreaForPoint(..).
As far as i understand, the async response should then be picked up by QtWebPageProxy::didFindZoomableArea(..).
But i think i need to look into that again in more detail.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:2
&gt;&gt; + * Copyright (C) 2011 Zeno Albisser &lt;zeno@webkit.org&gt;
&gt; 
&gt; We normally add Nokia copyright, though I don&apos;t know our official stand on this

I did it the same way it is for QtPanGestureRecognizer.h/.cpp. But you are right, i can find all sorts of examples.
I will just change it to Nokia, i guess there can nothing be wrong with that.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:37
&gt;&gt; +    , m_tapState(NoPointing)
&gt; 
&gt; Weird name

i guess you mean the &quot;NoPointing&quot; thing. I will change that to.... ... ... something different.
Do you think &quot;NoTap&quot; is better?

&gt;&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:61
&gt;&gt; +        if (m_tapDoubleClickTimer.isActive()) {
&gt; 
&gt; We really need to make sure that hte time constants match our platform. Ie. I think the harmattan platform ignores too fast taps as well. We might need to support that.

ahm... ... yes.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:68
&gt;&gt; +                m_tapState = DoubleTapStarted;
&gt; 
&gt; It is kind of already recognized... why not call it DoubleTapRecognized ? or better yet, DoubleTapCandidate

I see your point there. But it is not quite correct to say, that the gesture is already recognized. The gesture will be recognized (completely) once the TouchEnd event comes in.
Theoretically it is still possible that the gesture will be canceled before that. - I think we should leave that one.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:104
&gt;&gt; +            }
&gt; 
&gt; wrong indention I believe (chck the style guide)
&gt; 
&gt; I am not such a fan of calling code (findZoomableAreaForPoint) directly from the recognizer... people will not find that easily and it is not well separated... better call a method on the interaction engine such as &quot;interactionEngine-&gt;doubleTapGesture()&quot;

indentation: i was surprised as well. But that is what check-webkit-style wanted me to do. And the style guide doesn&apos;t say anything about scopes in switch case constructs.
I could get rid of the scope of course. it is not absolutely necessary. The reason why i left it, is that i am creating objects/variables inside that case-break construct and it seemed to be the safest way like that. Shall i change that, or leave it?

Yeah, right. That would possibly fit in there. I&apos;ll see if i can change that.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.h:60
&gt;&gt; +    QBasicTimer m_tapDoubleClickTimer;
&gt; 
&gt; doubleTapTimer?

done.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.h:65
&gt;&gt; +        NoPointing,
&gt; 
&gt; NoTap would make more sense

oh... here i have my answer to one of the previous questions already. :-)

&gt;&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.h:74
&gt;&gt; +#endif /* QtPanGestureRecognizer_h */
&gt; 
&gt; This is not correct

right.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:-830
&gt;&gt; -        return;
&gt; 
&gt; Don&apos;t you want to reset the tap one here? Or add a comment why not?

Yes, we should. - done.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:837
&gt;&gt; +        const QTouchEvent* ev = event.nativeEvent();
&gt; 
&gt; Why not put this outside, you are doing the same lower down

yeah i can optimize that i think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498965</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-11-09 08:01:07 -0800</bug_when>
    <thetext>&gt;&gt; It is kind of already recognized... why not call it DoubleTapRecognized ? or better yet, DoubleTapCandidate

&gt;I see your point there. But it is not quite correct to say, that the gesture is already recognized. The gesture will be recognized (completely) once the TouchEnd event comes in.
&gt;Theoretically it is still possible that the gesture will be canceled before that. - I think we should leave that one.

That is why DoubleTapCandidate is a good word :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499013</commentid>
    <comment_count>6</comment_count>
      <attachid>114137</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-11-09 08:48:41 -0800</bug_when>
    <thetext>Comment on attachment 114137
patch for feedback.

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:104
&gt;&gt;&gt; +            }
&gt;&gt; 
&gt;&gt; wrong indention I believe (chck the style guide)
&gt;&gt; 
&gt;&gt; I am not such a fan of calling code (findZoomableAreaForPoint) directly from the recognizer... people will not find that easily and it is not well separated... better call a method on the interaction engine such as &quot;interactionEngine-&gt;doubleTapGesture()&quot;
&gt; 
&gt; indentation: i was surprised as well. But that is what check-webkit-style wanted me to do. And the style guide doesn&apos;t say anything about scopes in switch case constructs.
&gt; I could get rid of the scope of course. it is not absolutely necessary. The reason why i left it, is that i am creating objects/variables inside that case-break construct and it seemed to be the safest way like that. Shall i change that, or leave it?
&gt; 
&gt; Yeah, right. That would possibly fit in there. I&apos;ll see if i can change that.

After looking into the ViewportInteractionEngine again i consider it not the right place for wiring findZoomableAreaForPoint(..). The Interaction engine does not have the required information available. Further we are directly talking to the WebProcess in that case, updating the viewport should be a reaction to the response of the WebProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499014</commentid>
    <comment_count>7</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-11-09 08:51:03 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt;&gt; It is kind of already recognized... why not call it DoubleTapRecognized ? or better yet, DoubleTapCandidate
&gt; 
&gt; &gt;I see your point there. But it is not quite correct to say, that the gesture is already recognized. The gesture will be recognized (completely) once the TouchEnd event comes in.
&gt; &gt;Theoretically it is still possible that the gesture will be canceled before that. - I think we should leave that one.
&gt; 
&gt; That is why DoubleTapCandidate is a good word :-)

i can live with that, i think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499021</commentid>
    <comment_count>8</comment_count>
      <attachid>114295</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-11-09 08:57:50 -0800</bug_when>
    <thetext>Created attachment 114295
patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499756</commentid>
    <comment_count>9</comment_count>
      <attachid>114295</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-11-10 02:46:26 -0800</bug_when>
    <thetext>Comment on attachment 114295
patch for review.

Clearing flags on attachment: 114295

Committed r99831: &lt;http://trac.webkit.org/changeset/99831&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499757</commentid>
    <comment_count>10</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-11-10 02:46:34 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499791</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-10 04:13:53 -0800</bug_when>
    <thetext>This broke the Lion builds. The mac bot also indicates that this broke Mac OS.
Please fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499841</commentid>
    <comment_count>12</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-11-10 06:10:38 -0800</bug_when>
    <thetext>fixed in r99837</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114137</attachid>
            <date>2011-11-08 12:42:52 -0800</date>
            <delta_ts>2011-11-09 08:57:50 -0800</delta_ts>
            <desc>patch for feedback.</desc>
            <filename>71841_20111108-214026.patch</filename>
            <type>text/plain</type>
            <size>18084</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyMWNiMGU1Li4xNjhmODcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMTEtMTEtMDggIFplbm8gQWxiaXNzZXIgIDx6ZW5vLmFsYmlzc2VyQG5va2lhLmNvbT4K
KworICAgICAgICBbUXRdW1dLMl0gQWRkIFRhcCBHZXN0dXJlIHJlY29nbml0aW9uIHRvIFVJUHJv
Y2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE4
NDEKKworICAgICAgICBBZGQgYSBUYXAgZ2VzdHVyZSByZWNvZ25pemVyIHRoYXQgZGVsaXZlcnMg
R2VzdHVyZVNpbmdsZVRhcAorICAgICAgICBhbmQgR2VzdHVyZVRhcEFuZEhvbGQgZXZlbnRzIHRo
cm91Z2ggdGhlIFdlYlBhZ2VQcm94eS4KKyAgICAgICAgQWRkIGEgR2VzdHVyZVRhcEFuZEhvbGQg
dG8gV2ViRXZlbnQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTaGFyZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OlF0VGFwR2VzdHVyZVJlY29nbml6
ZXIpOgorICAgICAgICAoV2ViS2l0OjpRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjpzZXRXZWJQYWdl
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjpyZWNvZ25p
emUpOgorICAgICAgICAoV2ViS2l0OjpRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjp0YXBUaW1lb3V0
KToKKyAgICAgICAgKFdlYktpdDo6UXRUYXBHZXN0dXJlUmVjb2duaXplcjo6dGFwQW5kSG9sZFRp
bWVvdXQpOgorICAgICAgICAoV2ViS2l0OjpRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjpyZXNldCk6
CisgICAgICAgIChXZWJLaXQ6OlF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OnRpbWVyRXZlbnQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmg6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChRdFdl
YlBhZ2VQcm94eTo6UXRXZWJQYWdlUHJveHkpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OnBy
b2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6ZG9uZVdpdGhUb3VjaEV2
ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaDoKKwogMjAxMS0x
MS0wOCAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAogICAg
ICAgICBbUXRdIE1lcmdlIFF0RGVza3RvcFdlYlBhZ2VQcm94eSBhbmQgUXRUb3VjaFdlYlBhZ2VQ
cm94eSBpbnRvIFF0V2ViUGFnZVByb3h5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAppbmRleCAy
N2FhMmY4Li44MjAzNGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZl
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaApAQCAtNjQsNiArNjQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIEdlc3R1cmVTY3JvbGxCZWdpbiwKICAgICAgICAgR2VzdHVy
ZVNjcm9sbEVuZCwKICAgICAgICAgR2VzdHVyZVNpbmdsZVRhcCwKKyAgICAgICAgR2VzdHVyZVRh
cEFuZEhvbGQsCiAjZW5kaWYKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpp
bmRleCAzM2I4YTRkLi4zZWY1YzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI1NCw2ICsyNTQsNyBAQCBI
RUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oIFwKICAg
ICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oIFwKICAgICBVSVByb2Nlc3Mv
cXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmggXAorICAgIFVJUHJvY2Vzcy9xdC9RdFRhcEdl
c3R1cmVSZWNvZ25pemVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmggXAogICAg
IFVJUHJvY2Vzcy9xdC9RdERvd25sb2FkTWFuYWdlci5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlUHJveHkuaCBcCkBAIC00OTcsNiArNDk4LDcgQEAgU09VUkNFUyArPSBcCiAgICAgVUlQ
cm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRQ
YW5HZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVy
ZVJlY29nbml6ZXIuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXpl
ci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmNwcCBcCiAgICAgVUlQcm9jZXNz
L3F0L1F0RG93bmxvYWRNYW5hZ2VyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVBy
b3h5LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUYXBH
ZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUYXBH
ZXN0dXJlUmVjb2duaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZWQ2NjYzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFRhcEdlc3R1cmVSZWNvZ25pemVyLmNwcApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRdFRhcEdlc3R1cmVSZWNvZ25pemVyLmgi
CisKKyNpbmNsdWRlICJRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKKyNpbmNsdWRlIDxR
VG91Y2hFdmVudD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1F0VGFwR2VzdHVyZVJlY29nbml6
ZXI6OlF0VGFwR2VzdHVyZVJlY29nbml6ZXIoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBp
bnRlcmFjdGlvbkVuZ2luZSkKKyAgICA6IFF0R2VzdHVyZVJlY29nbml6ZXIoaW50ZXJhY3Rpb25F
bmdpbmUpCisgICAgLCBtX3dlYlBhZ2VQcm94eSgwKQorICAgICwgbV90YXBTdGF0ZShOb1BvaW50
aW5nKQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQgUXRUYXBHZXN0dXJlUmVjb2duaXplcjo6
c2V0V2ViUGFnZVByb3h5KFdlYlBhZ2VQcm94eSogcHJveHkpCit7CisgICAgbV93ZWJQYWdlUHJv
eHkgPSBwcm94eTsKK30KKworYm9vbCBRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjpyZWNvZ25pemUo
Y29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7
CisgICAgaWYgKGV2ZW50LT50b3VjaFBvaW50cygpLnNpemUoKSAhPSAxKSB7CisgICAgICAgIHJl
c2V0KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGV2ZW50
LT50eXBlKCkpIHsKKyAgICBjYXNlIFFFdmVudDo6VG91Y2hCZWdpbjoKKyAgICAgICAgQVNTRVJU
KG1fdGFwU3RhdGUgPT0gTm9Qb2ludGluZyk7CisgICAgICAgIEFTU0VSVCghbV90YXBBbmRIb2xk
VGltZXIuaXNBY3RpdmUoKSk7CisKKyAgICAgICAgbV90YXBBbmRIb2xkVGltZXIuc3RhcnQodGFw
QW5kSG9sZFRpbWUsIHRoaXMpOworCisgICAgICAgIGlmIChtX3RhcERvdWJsZUNsaWNrVGltZXIu
aXNBY3RpdmUoKSkgeworICAgICAgICAgICAgLy8gTWlnaHQgYmUgZG91YmxlIHRhcC4KKyAgICAg
ICAgICAgIEFTU0VSVChtX3RvdWNoQmVnaW5FdmVudEZvclRhcCk7CisgICAgICAgICAgICBtX3Rh
cERvdWJsZUNsaWNrVGltZXIuc3RvcCgpOworICAgICAgICAgICAgUVBvaW50RiBsYXN0UG9zaXRp
b24gPSBtX3RvdWNoQmVnaW5FdmVudEZvclRhcC0+dG91Y2hQb2ludHMoKS5maXJzdCgpLnNjcmVl
blBvcygpOworICAgICAgICAgICAgUVBvaW50RiBuZXdQb3NpdGlvbiA9IGV2ZW50LT50b3VjaFBv
aW50cygpLmZpcnN0KCkuc2NyZWVuUG9zKCk7CisgICAgICAgICAgICBpZiAoUUxpbmVGKGxhc3RQ
b3NpdGlvbiwgbmV3UG9zaXRpb24pLmxlbmd0aCgpIDwgbWF4RG91YmxlVGFwRGlzdGFuY2UpCisg
ICAgICAgICAgICAgICAgbV90YXBTdGF0ZSA9IERvdWJsZVRhcFN0YXJ0ZWQ7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBSZWNlaXZlZCBhIG5ldyB0YXAsIHRoYXQgaXMg
dW5yZWxhdGVkIHRvIHRoZSBwcmV2aW91cyBvbmUuCisgICAgICAgICAgICAgICAgdGFwVGltZW91
dCgpOworICAgICAgICAgICAgICAgIG1fdGFwU3RhdGUgPSBTaW5nbGVUYXBTdGFydGVkOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fdGFwU3RhdGUgPSBTaW5n
bGVUYXBTdGFydGVkOworICAgICAgICBtX3RvdWNoQmVnaW5FdmVudEZvclRhcCA9IGFkb3B0UHRy
KG5ldyBRVG91Y2hFdmVudCgqZXZlbnQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRRXZl
bnQ6OlRvdWNoVXBkYXRlOgorICAgICAgICAvLyBJZiB0aGUgdG91Y2ggcG9pbnQgbW92ZXMgZnVy
dGhlciB0aGFuIHRoZSB0aHJlc2hvbGQsIHdlIGNhbmNlbCB0aGUgdGFwIGdlc3R1cmUuCisgICAg
ICAgIGlmIChtX3RhcFN0YXRlID09IFNpbmdsZVRhcFN0YXJ0ZWQpIHsKKyAgICAgICAgICAgIGNv
bnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiB0b3VjaFBvaW50ID0gZXZlbnQtPnRvdWNoUG9p
bnRzKCkuZmlyc3QoKTsKKyAgICAgICAgICAgIFFQb2ludEYgb2Zmc2V0KHRvdWNoUG9pbnQuc2Nl
bmVQb3MoKSAtIG1fdG91Y2hCZWdpbkV2ZW50Rm9yVGFwLT50b3VjaFBvaW50cygpLmZpcnN0KCku
c2NlbmVQb3MoKSk7CisgICAgICAgICAgICBjb25zdCBxcmVhbCBkaXN0WCA9IHFBYnMob2Zmc2V0
LngoKSk7CisgICAgICAgICAgICBjb25zdCBxcmVhbCBkaXN0WSA9IHFBYnMob2Zmc2V0LnkoKSk7
CisgICAgICAgICAgICBpZiAoZGlzdFggPiBpbml0aWFsVHJpZ2dlckRpc3RhbmNlVGhyZXNob2xk
IHx8IGRpc3RZID4gaW5pdGlhbFRyaWdnZXJEaXN0YW5jZVRocmVzaG9sZCkKKyAgICAgICAgICAg
ICAgICByZXNldCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUUV2ZW50
OjpUb3VjaEVuZDoKKyAgICAgICAgbV90YXBBbmRIb2xkVGltZXIuc3RvcCgpOworCisgICAgICAg
IHN3aXRjaCAobV90YXBTdGF0ZSkgeworICAgICAgICBjYXNlIERvdWJsZVRhcFN0YXJ0ZWQ6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX3RhcERvdWJsZUNsaWNrVGlt
ZXIuaXNBY3RpdmUoKSk7CisgICAgICAgICAgICAgICAgbV90YXBTdGF0ZSA9IE5vUG9pbnRpbmc7
CisKKyAgICAgICAgICAgICAgICBjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91Y2hQ
b2ludCA9IGV2ZW50LT50b3VjaFBvaW50cygpLmZpcnN0KCk7CisgICAgICAgICAgICAgICAgUVBv
aW50RiBzdGFydFBvc2l0aW9uID0gdG91Y2hQb2ludC5zdGFydFNjcmVlblBvcygpOworICAgICAg
ICAgICAgICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSB0b3VjaFBvaW50LnNjcmVlblBvcygpOwor
ICAgICAgICAgICAgICAgIGlmIChRTGluZUYoZW5kUG9zaXRpb24sIHN0YXJ0UG9zaXRpb24pLmxl
bmd0aCgpIDwgbWF4RG91YmxlVGFwRGlzdGFuY2UgJiYgbV93ZWJQYWdlUHJveHkpCisgICAgICAg
ICAgICAgICAgICAgIG1fd2ViUGFnZVByb3h5LT5maW5kWm9vbWFibGVBcmVhRm9yUG9pbnQodG91
Y2hQb2ludC5wb3MoKS50b1BvaW50KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICBjYXNlIFNpbmdsZVRhcFN0YXJ0ZWQ6CisgICAgICAgICAgICBBU1NF
UlQoIW1fdGFwRG91YmxlQ2xpY2tUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICAgICAgICAgIG1fdGFw
RG91YmxlQ2xpY2tUaW1lci5zdGFydChkb3VibGVDbGlja0ludGVydmFsLCB0aGlzKTsKKyAgICAg
ICAgICAgIG1fdGFwU3RhdGUgPSBOb1BvaW50aW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVGFwQW5kSG9sZDoKKyAgICAgICAgICAgIG1fdGFwU3RhdGUgPSBOb1BvaW50aW5n
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK3ZvaWQgUXRUYXBHZXN0dXJlUmVj
b2duaXplcjo6dGFwVGltZW91dCgpCit7CisgICAgbV90YXBEb3VibGVDbGlja1RpbWVyLnN0b3Ao
KTsKKyAgICBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCB0YXBQb2ludCA9IG1fdG91Y2hCZWdpbkV2
ZW50Rm9yVGFwLT50b3VjaFBvaW50cygpLmF0KDApOworICAgIFdlYkdlc3R1cmVFdmVudCBnZXN0
dXJlKFdlYkV2ZW50OjpHZXN0dXJlU2luZ2xlVGFwLCB0YXBQb2ludC5wb3MoKS50b1BvaW50KCks
IHRhcFBvaW50LnNjcmVlblBvcygpLnRvUG9pbnQoKSwgV2ViRXZlbnQ6Ok1vZGlmaWVycygwKSwg
MCk7CisgICAgaWYgKG1fd2ViUGFnZVByb3h5KQorICAgICAgICBtX3dlYlBhZ2VQcm94eS0+aGFu
ZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmUpOworICAgIG1fdG91Y2hCZWdpbkV2ZW50Rm9yVGFwLmNs
ZWFyKCk7Cit9CisKK3ZvaWQgUXRUYXBHZXN0dXJlUmVjb2duaXplcjo6dGFwQW5kSG9sZFRpbWVv
dXQoKQoreworICAgIEFTU0VSVChtX3RvdWNoQmVnaW5FdmVudEZvclRhcCk7CisgICAgbV90YXBB
bmRIb2xkVGltZXIuc3RvcCgpOworICAgIFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50IHRhcFBvaW50
ID0gbV90b3VjaEJlZ2luRXZlbnRGb3JUYXAtPnRvdWNoUG9pbnRzKCkuYXQoMCk7CisgICAgV2Vi
R2VzdHVyZUV2ZW50IGdlc3R1cmUoV2ViRXZlbnQ6Okdlc3R1cmVUYXBBbmRIb2xkLCB0YXBQb2lu
dC5wb3MoKS50b1BvaW50KCksIHRhcFBvaW50LnNjcmVlblBvcygpLnRvUG9pbnQoKSwgV2ViRXZl
bnQ6Ok1vZGlmaWVycygwKSwgMCk7CisgICAgaWYgKG1fd2ViUGFnZVByb3h5KQorICAgICAgICBt
X3dlYlBhZ2VQcm94eS0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmUpOworICAgIG1fdG91Y2hC
ZWdpbkV2ZW50Rm9yVGFwLmNsZWFyKCk7CisgICAgbV90YXBTdGF0ZSA9IFRhcEFuZEhvbGQ7CisK
KyAgICBBU1NFUlQoIW1fdGFwRG91YmxlQ2xpY2tUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICBtX3Rh
cERvdWJsZUNsaWNrVGltZXIuc3RvcCgpOworfQorCit2b2lkIFF0VGFwR2VzdHVyZVJlY29nbml6
ZXI6OnJlc2V0KCkKK3sKKyAgICBtX3RhcFN0YXRlID0gTm9Qb2ludGluZzsKKyAgICBtX3RvdWNo
QmVnaW5FdmVudEZvclRhcC5jbGVhcigpOworICAgIG1fdGFwQW5kSG9sZFRpbWVyLnN0b3AoKTsK
KworICAgIFF0R2VzdHVyZVJlY29nbml6ZXI6OnJlc2V0KCk7Cit9CisKK3ZvaWQgUXRUYXBHZXN0
dXJlUmVjb2duaXplcjo6dGltZXJFdmVudChRVGltZXJFdmVudCogZXYpCit7CisgICAgaW50IHRp
bWVySWQgPSBldi0+dGltZXJJZCgpOworICAgIGlmICh0aW1lcklkID09IG1fdGFwRG91YmxlQ2xp
Y2tUaW1lci50aW1lcklkKCkpCisgICAgICAgIHRhcFRpbWVvdXQoKTsKKyAgICBlbHNlIGlmICh0
aW1lcklkID09IG1fdGFwQW5kSG9sZFRpbWVyLnRpbWVySWQoKSkKKyAgICAgICAgdGFwQW5kSG9s
ZFRpbWVvdXQoKTsKKyAgICBlbHNlCisgICAgICAgIFFPYmplY3Q6OnRpbWVyRXZlbnQoZXYpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjM1ODg1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFF0VGFwR2VzdHVyZVJlY29nbml6ZXJfaAorI2RlZmluZSBRdFRh
cEdlc3R1cmVSZWNvZ25pemVyX2gKKworI2luY2x1ZGUgIlF0R2VzdHVyZVJlY29nbml6ZXIuaCIK
KworI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFF0Q29yZS9RQmFzaWNUaW1l
cj4KKyNpbmNsdWRlIDxRdENvcmUvUXRHbG9iYWw+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xh
c3MgUVRvdWNoRXZlbnQ7CitRVF9FTkRfTkFNRVNQQUNFCisKK2NvbnN0IHFyZWFsIGluaXRpYWxU
cmlnZ2VyRGlzdGFuY2VUaHJlc2hvbGQgPSA1OworY29uc3QgcXJlYWwgbWF4RG91YmxlVGFwRGlz
dGFuY2UgPSAxMjA7Citjb25zdCBpbnQgdGFwQW5kSG9sZFRpbWUgPSA4MDA7Citjb25zdCBpbnQg
ZG91YmxlQ2xpY2tJbnRlcnZhbCA9IDQwMDsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFF0VGFwR2VzdHVyZVJlY29nbml6ZXIgOiBwdWJsaWMgUU9iamVjdCwgcHJpdmF0ZSBRdEdlc3R1
cmVSZWNvZ25pemVyIHsKK3B1YmxpYzoKKyAgICBRdFRhcEdlc3R1cmVSZWNvZ25pemVyKFF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZSopOworICAgIHZvaWQgc2V0V2ViUGFnZVByb3h5KFdlYlBh
Z2VQcm94eSopOworICAgIGJvb2wgcmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiwgcWludDY0
IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB2b2lkIHJlc2V0KCk7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKTsKKyAgICB2b2lkIHRhcFRpbWVvdXQo
KTsKKyAgICB2b2lkIHRhcEFuZEhvbGRUaW1lb3V0KCk7CisKK3ByaXZhdGU6CisgICAgV2ViUGFn
ZVByb3h5KiBtX3dlYlBhZ2VQcm94eTsKKyAgICBRQmFzaWNUaW1lciBtX3RhcERvdWJsZUNsaWNr
VGltZXI7CisgICAgUUJhc2ljVGltZXIgbV90YXBBbmRIb2xkVGltZXI7CisgICAgT3duUHRyPFFU
b3VjaEV2ZW50PiBtX3RvdWNoQmVnaW5FdmVudEZvclRhcDsKKworICAgIGVudW0geworICAgICAg
ICBOb1BvaW50aW5nLAorICAgICAgICBTaW5nbGVUYXBTdGFydGVkLAorICAgICAgICBEb3VibGVU
YXBTdGFydGVkLAorICAgICAgICBUYXBBbmRIb2xkCisgICAgfSBtX3RhcFN0YXRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBRdFBhbkdlc3R1cmVSZWNvZ25pemVy
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3Bw
CmluZGV4IDk3YTZlZDAuLmMzY2VkZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZVByb3h5LmNwcApAQCAtMTMyLDYgKzEzMiw3IEBAIFF0V2ViUGFnZVByb3h5
OjpRdFdlYlBhZ2VQcm94eShRdFZpZXdJbnRlcmZhY2UqIHZpZXdJbnRlcmZhY2UsIFF0Vmlld3Bv
cnRJbnRlcmFjCiAgICAgLCBtX2ludGVyYWN0aW9uRW5naW5lKHZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmUpCiAgICAgLCBtX3Bhbkdlc3R1cmVSZWNvZ25pemVyKHZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmUpCiAgICAgLCBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIodmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZSkKKyAgICAsIG1fdGFwR2VzdHVyZVJlY29nbml6ZXIodmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZSkKICAgICAsIG1fcG9saWN5SW50ZXJmYWNlKHBvbGljeUludGVyZmFjZSkKICAgICAs
IG1fY29udGV4dChjb250ZXh0UmVmID8gdG9JbXBsKGNvbnRleHRSZWYpIDogZGVmYXVsdFdLQ29u
dGV4dCgpKQogICAgICwgbV91bmRvU3RhY2soYWRvcHRQdHIobmV3IFFVbmRvU3RhY2sodGhpcykp
KQpAQCAtMTQwLDYgKzE0MSw3IEBAIFF0V2ViUGFnZVByb3h5OjpRdFdlYlBhZ2VQcm94eShRdFZp
ZXdJbnRlcmZhY2UqIHZpZXdJbnRlcmZhY2UsIFF0Vmlld3BvcnRJbnRlcmFjCiB7CiAgICAgQVNT
RVJUKHZpZXdJbnRlcmZhY2UpOwogICAgIG1fd2ViUGFnZVByb3h5ID0gbV9jb250ZXh0LT5jcmVh
dGVXZWJQYWdlKHRoaXMsIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKKyAgICBtX3RhcEdlc3R1cmVS
ZWNvZ25pemVyLnNldFdlYlBhZ2VQcm94eShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7CiAgICAgbV9o
aXN0b3J5ID0gUVdLSGlzdG9yeVByaXZhdGU6OmNyZWF0ZUhpc3RvcnkodGhpcywgbV93ZWJQYWdl
UHJveHktPmJhY2tGb3J3YXJkTGlzdCgpKTsKICAgICBpZiAoIWNvbnRleHRSZWYpCiAgICAgICAg
IHNfZGVmYXVsdFBhZ2VQcm94eUNvdW50Kys7CkBAIC02NTEsNiArNjUzLDcgQEAgdm9pZCBRdFdl
YlBhZ2VQcm94eTo6cHJvY2Vzc0RpZENyYXNoKCkKICAgICB1cGRhdGVOYXZpZ2F0aW9uU3RhdGUo
KTsKICAgICBtX3Bhbkdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7CiAgICAgbV9waW5jaEdlc3R1
cmVSZWNvZ25pemVyLnJlc2V0KCk7CisgICAgbV90YXBHZXN0dXJlUmVjb2duaXplci5yZXNldCgp
OwogICAgIG1fdmlld0ludGVyZmFjZS0+cHJvY2Vzc0RpZENyYXNoKCk7CiB9CiAKQEAgLTgyNCw0
MyArODI3LDUwIEBAIHZvaWQgUXRXZWJQYWdlUHJveHk6OmRvbmVXaXRoVG91Y2hFdmVudChjb25z
dCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCwgYm9vbCB3CiB7CiAgICAgaWYgKCFtX2ludGVy
YWN0aW9uRW5naW5lKQogICAgICAgICByZXR1cm47CisKKyAgICAvLyBDb252ZXJ0IHRoZSBldmVu
dCB0aW1lc3RhbXAgZnJvbSBzZWNvbmQgdG8gbWlsbGlzZWNvbmQuCisgICAgcWludDY0IGV2ZW50
VGltZXN0YW1wTWlsbGlzID0gc3RhdGljX2Nhc3Q8cWludDY0PihldmVudC50aW1lc3RhbXAoKSAq
IDEwMDApOwogICAgIGlmICh3YXNFdmVudEhhbmRsZWQgfHwgZXZlbnQudHlwZSgpID09IFdlYkV2
ZW50OjpUb3VjaENhbmNlbCkgewogICAgICAgICBtX3Bhbkdlc3R1cmVSZWNvZ25pemVyLnJlc2V0
KCk7CiAgICAgICAgIG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5yZXNldCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IFFUb3VjaEV2ZW50KiBl
diA9IGV2ZW50Lm5hdGl2ZUV2ZW50KCk7CisKKyAgICAgICAgc3dpdGNoIChldi0+dHlwZSgpKSB7
CisgICAgICAgIGNhc2UgUUV2ZW50OjpUb3VjaEJlZ2luOgorICAgICAgICAgICAgQVNTRVJUKCFt
X2ludGVyYWN0aW9uRW5naW5lLT5wYW5HZXN0dXJlQWN0aXZlKCkpOworICAgICAgICAgICAgQVNT
RVJUKCFtX2ludGVyYWN0aW9uRW5naW5lLT5waW5jaEdlc3R1cmVBY3RpdmUoKSk7CisKKyAgICAg
ICAgICAgIC8vIFRoZSBpbnRlcmFjdGlvbiBlbmdpbmUgbWlnaHQgc3RpbGwgYmUgYW5pbWF0aW5n
IGtpbmV0aWMgc2Nyb2xsaW5nIG9yIGEgc2NhbGUgYW5pbWF0aW9uCisgICAgICAgICAgICAvLyBz
dWNoIGFzIGRvdWJsZS10YXAgdG8gem9vbSBvciB0aGUgYm91bmNlIGJhY2sgZWZmZWN0LiBBIHRv
dWNoIHN0b3BzIHRoZSBraW5ldGljIHNjcm9sbGluZworICAgICAgICAgICAgLy8gd2hlcmUgYXMg
aXQgZG9lcyBub3Qgc3RvcCB0aGUgc2NhbGUgYW5pbWF0aW9uLgorICAgICAgICAgICAgaWYgKG1f
aW50ZXJhY3Rpb25FbmdpbmUtPnNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICAgICAg
ICAgIG1faW50ZXJhY3Rpb25FbmdpbmUtPmludGVycnVwdFNjcm9sbEFuaW1hdGlvbigpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToKKyAgICAg
ICAgICAgIC8vIFRoZSBzY2FsZSBhbmltYXRpb24gY2FuIG9ubHkgYmUgaW50ZXJydXB0ZWQgYnkg
YSBwaW5jaCBnZXN0dXJlLCB3aGljaCB3aWxsIHRoZW4gdGFrZSBvdmVyLgorICAgICAgICAgICAg
aWYgKG1faW50ZXJhY3Rpb25FbmdpbmUtPnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgJiYgbV9waW5j
aEdlc3R1cmVSZWNvZ25pemVyLmlzUmVjb2duaXplZCgpKQorICAgICAgICAgICAgICAgIG1faW50
ZXJhY3Rpb25FbmdpbmUtPmludGVycnVwdFNjYWxlQW5pbWF0aW9uKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAK
LSAgICBjb25zdCBRVG91Y2hFdmVudCogZXYgPSBldmVudC5uYXRpdmVFdmVudCgpOworICAgICAg
ICAvLyBJZiB0aGUgc2NhbGUgYW5pbWF0aW9uIGlzIGFjdGl2ZSB3ZSBkb24ndCBwYXNzIHRoZSBl
dmVudCB0byB0aGUgcmVjb2duaXplcnMuIEluIHRoZSBmdXR1cmUKKyAgICAgICAgLy8gd2Ugd291
bGQgd2FudCB0byBxdWV1ZSB0aGUgZXZlbnQgaGVyZSBhbmQgcmVwb3N0IHRoZW4gd2hlbiB0aGUg
YW5pbWF0aW9uIGVuZHMuCisgICAgICAgIGlmIChtX2ludGVyYWN0aW9uRW5naW5lLT5zY2FsZUFu
aW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgc3dpdGNoIChldi0+
dHlwZSgpKSB7Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoQmVnaW46Ci0gICAgICAgIEFTU0VSVCgh
bV9pbnRlcmFjdGlvbkVuZ2luZS0+cGFuR2VzdHVyZUFjdGl2ZSgpKTsKLSAgICAgICAgQVNTRVJU
KCFtX2ludGVyYWN0aW9uRW5naW5lLT5waW5jaEdlc3R1cmVBY3RpdmUoKSk7Ci0KLSAgICAgICAg
Ly8gVGhlIGludGVyYWN0aW9uIGVuZ2luZSBtaWdodCBzdGlsbCBiZSBhbmltYXRpbmcga2luZXRp
YyBzY3JvbGxpbmcgb3IgYSBzY2FsZSBhbmltYXRpb24KLSAgICAgICAgLy8gc3VjaCBhcyBkb3Vi
bGUtdGFwIHRvIHpvb20gb3IgdGhlIGJvdW5jZSBiYWNrIGVmZmVjdC4gQSB0b3VjaCBzdG9wcyB0
aGUga2luZXRpYyBzY3JvbGxpbmcKLSAgICAgICAgLy8gd2hlcmUgYXMgaXQgZG9lcyBub3Qgc3Rv
cCB0aGUgc2NhbGUgYW5pbWF0aW9uLgotICAgICAgICBpZiAobV9pbnRlcmFjdGlvbkVuZ2luZS0+
c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCi0gICAgICAgICAgICBtX2ludGVyYWN0aW9uRW5naW5l
LT5pbnRlcnJ1cHRTY3JvbGxBbmltYXRpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBR
RXZlbnQ6OlRvdWNoVXBkYXRlOgotICAgICAgICAvLyBUaGUgc2NhbGUgYW5pbWF0aW9uIGNhbiBv
bmx5IGJlIGludGVycnVwdGVkIGJ5IGEgcGluY2ggZ2VzdHVyZSwgd2hpY2ggd2lsbCB0aGVuIHRh
a2Ugb3Zlci4KLSAgICAgICAgaWYgKG1faW50ZXJhY3Rpb25FbmdpbmUtPnNjYWxlQW5pbWF0aW9u
QWN0aXZlKCkgJiYgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLmlzUmVjb2duaXplZCgpKQotICAg
ICAgICAgICAgbV9pbnRlcmFjdGlvbkVuZ2luZS0+aW50ZXJydXB0U2NhbGVBbmltYXRpb24oKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgICAgIG1f
cGFuR2VzdHVyZVJlY29nbml6ZXIucmVjb2duaXplKGV2LCBldmVudFRpbWVzdGFtcE1pbGxpcyk7
CisgICAgICAgIG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5yZWNvZ25pemUoZXYpOwogICAgIH0K
IAotICAgIC8vIElmIHRoZSBzY2FsZSBhbmltYXRpb24gaXMgYWN0aXZlIHdlIGRvbid0IHBhc3Mg
dGhlIGV2ZW50IHRvIHRoZSByZWNvZ25pemVycy4gSW4gdGhlIGZ1dHVyZQotICAgIC8vIHdlIHdv
dWxkIHdhbnQgdG8gcXVldWUgdGhlIGV2ZW50IGhlcmUgYW5kIHJlcG9zdCB0aGVuIHdoZW4gdGhl
IGFuaW1hdGlvbiBlbmRzLgotICAgIGlmIChtX2ludGVyYWN0aW9uRW5naW5lLT5zY2FsZUFuaW1h
dGlvbkFjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDb252ZXJ0IHRoZSBldmVu
dCB0aW1lc3RhbXAgZnJvbSBzZWNvbmQgdG8gbWlsbGlzZWNvbmQuCi0gICAgcWludDY0IGV2ZW50
VGltZXN0YW1wTWlsbGlzID0gc3RhdGljX2Nhc3Q8cWludDY0PihldmVudC50aW1lc3RhbXAoKSAq
IDEwMDApOwotICAgIG1fcGFuR2VzdHVyZVJlY29nbml6ZXIucmVjb2duaXplKGV2LCBldmVudFRp
bWVzdGFtcE1pbGxpcyk7Ci0gICAgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLnJlY29nbml6ZShl
dik7CisgICAgaWYgKG1fcGFuR2VzdHVyZVJlY29nbml6ZXIuaXNSZWNvZ25pemVkKCkgfHwgbV9w
aW5jaEdlc3R1cmVSZWNvZ25pemVyLmlzUmVjb2duaXplZCgpKQorICAgICAgICBtX3RhcEdlc3R1
cmVSZWNvZ25pemVyLnJlc2V0KCk7CisgICAgZWxzZSB7CisgICAgICAgIGNvbnN0IFFUb3VjaEV2
ZW50KiBldiA9IGV2ZW50Lm5hdGl2ZUV2ZW50KCk7CisgICAgICAgIG1fdGFwR2VzdHVyZVJlY29n
bml6ZXIucmVjb2duaXplKGV2LCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgfQogfQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKaW5k
ZXggZGNjODY1Zi4uMmQzZTY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZVByb3h5LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJRdFBhbkdlc3R1cmVS
ZWNvZ25pemVyLmgiCiAjaW5jbHVkZSAiUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmgiCiAjaW5j
bHVkZSAiUXRQb2xpY3lJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJRdFRhcEdlc3R1cmVSZWNvZ25p
emVyLmgiCiAjaW5jbHVkZSAiUXRWaWV3SW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxl
Qml0bWFwLmgiCiAjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKQEAgLTIwOCw2ICsyMDks
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBtX2ludGVy
YWN0aW9uRW5naW5lOwogICAgIFF0UGFuR2VzdHVyZVJlY29nbml6ZXIgbV9wYW5HZXN0dXJlUmVj
b2duaXplcjsKICAgICBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIgbV9waW5jaEdlc3R1cmVSZWNv
Z25pemVyOworICAgIFF0VGFwR2VzdHVyZVJlY29nbml6ZXIgbV90YXBHZXN0dXJlUmVjb2duaXpl
cjsKICAgICBXZWJLaXQ6OlF0UG9saWN5SW50ZXJmYWNlKiBjb25zdCBtX3BvbGljeUludGVyZmFj
ZTsKIAogcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114295</attachid>
            <date>2011-11-09 08:57:50 -0800</date>
            <delta_ts>2011-11-10 02:46:26 -0800</delta_ts>
            <desc>patch for review.</desc>
            <filename>71841_20111109-175200.patch</filename>
            <type>text/plain</type>
            <size>15446</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyMWNiMGU1Li5lOGY2MjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQg
QEAKKzIwMTEtMTEtMDggIFplbm8gQWxiaXNzZXIgIDx6ZW5vLmFsYmlzc2VyQG5va2lhLmNvbT4K
KworICAgICAgICBbUXRdW1dLMl0gQWRkIFRhcCBHZXN0dXJlIHJlY29nbml0aW9uIHRvIFVJUHJv
Y2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE4
NDEKKworICAgICAgICBBZGQgYSBUYXAgZ2VzdHVyZSByZWNvZ25pemVyIHRoYXQgZGVsaXZlcnMg
R2VzdHVyZVNpbmdsZVRhcAorICAgICAgICBhbmQgR2VzdHVyZVRhcEFuZEhvbGQgZXZlbnRzIHRo
cm91Z2ggdGhlIFdlYlBhZ2VQcm94eS4KKyAgICAgICAgQWRkIGEgR2VzdHVyZVRhcEFuZEhvbGQg
dG8gV2ViRXZlbnQuCisgICAgICAgIEFkZCBhIERvdWJsZVRhcCBnZXN0dXJlIGZvciB6b29taW5n
IGluIGFuZCBvdXQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBiYXNlZCBvbiB3b3JrIG9mIEJl
bmphbWluIFBvdWxhaW4uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTaGFyZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OlF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OlF0VGFwR2VzdHVyZVJlY29n
bml6ZXIpOgorICAgICAgICAoV2ViS2l0OjpRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjpzZXRXZWJQ
YWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjpyZWNv
Z25pemUpOgorICAgICAgICAoV2ViS2l0OjpRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjp0YXBUaW1l
b3V0KToKKyAgICAgICAgKFdlYktpdDo6UXRUYXBHZXN0dXJlUmVjb2duaXplcjo6dGFwQW5kSG9s
ZFRpbWVvdXQpOgorICAgICAgICAoV2ViS2l0OjpRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjpyZXNl
dCk6CisgICAgICAgIChXZWJLaXQ6OlF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OnRpbWVyRXZlbnQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChR
dFdlYlBhZ2VQcm94eTo6UXRXZWJQYWdlUHJveHkpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6
OnByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6ZG9uZVdpdGhUb3Vj
aEV2ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaDoKKwogMjAx
MS0xMS0wOCAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAog
ICAgICAgICBbUXRdIE1lcmdlIFF0RGVza3RvcFdlYlBhZ2VQcm94eSBhbmQgUXRUb3VjaFdlYlBh
Z2VQcm94eSBpbnRvIFF0V2ViUGFnZVByb3h5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAppbmRl
eCAyN2FhMmY4Li44MjAzNGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaApAQCAtNjQsNiAr
NjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEdlc3R1cmVTY3JvbGxCZWdpbiwKICAgICAgICAgR2Vz
dHVyZVNjcm9sbEVuZCwKICAgICAgICAgR2VzdHVyZVNpbmdsZVRhcCwKKyAgICAgICAgR2VzdHVy
ZVRhcEFuZEhvbGQsCiAjZW5kaWYKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnBy
aQppbmRleCAzM2I4YTRkLi4zZWY1YzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI1NCw2ICsyNTQsNyBA
QCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oIFwKICAgICBVSVByb2Nl
c3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmggXAorICAgIFVJUHJvY2Vzcy9xdC9RdFRh
cEdlc3R1cmVSZWNvZ25pemVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmggXAog
ICAgIFVJUHJvY2Vzcy9xdC9RdERvd25sb2FkTWFuYWdlci5oIFwKICAgICBVSVByb2Nlc3MvcXQv
UXRXZWJQYWdlUHJveHkuaCBcCkBAIC00OTcsNiArNDk4LDcgQEAgU09VUkNFUyArPSBcCiAgICAg
VUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQv
UXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBpbmNoR2Vz
dHVyZVJlY29nbml6ZXIuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2du
aXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0RG93bmxvYWRNYW5hZ2VyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZVByb3h5LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRU
YXBHZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRU
YXBHZXN0dXJlUmVjb2duaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uM2M3ZTgwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmNwcApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlF0VGFwR2Vz
dHVyZVJlY29nbml6ZXIuaCIKKworI2luY2x1ZGUgIlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZS5oIgorI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUXRU
YXBHZXN0dXJlUmVjb2duaXplcjo6UXRUYXBHZXN0dXJlUmVjb2duaXplcihRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUqIGludGVyYWN0aW9uRW5naW5lKQorICAgIDogUXRHZXN0dXJlUmVjb2du
aXplcihpbnRlcmFjdGlvbkVuZ2luZSkKKyAgICAsIG1fd2ViUGFnZVByb3h5KDApCisgICAgLCBt
X3RhcFN0YXRlKE5vVGFwKQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQgUXRUYXBHZXN0dXJl
UmVjb2duaXplcjo6c2V0V2ViUGFnZVByb3h5KFdlYlBhZ2VQcm94eSogcHJveHkpCit7CisgICAg
bV93ZWJQYWdlUHJveHkgPSBwcm94eTsKK30KKworYm9vbCBRdFRhcEdlc3R1cmVSZWNvZ25pemVy
OjpyZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50LCBxaW50NjQgZXZlbnRUaW1lc3Rh
bXBNaWxsaXMpCit7CisgICAgaWYgKGV2ZW50LT50b3VjaFBvaW50cygpLnNpemUoKSAhPSAxKSB7
CisgICAgICAgIHJlc2V0KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBz
d2l0Y2ggKGV2ZW50LT50eXBlKCkpIHsKKyAgICBjYXNlIFFFdmVudDo6VG91Y2hCZWdpbjoKKyAg
ICAgICAgQVNTRVJUKG1fdGFwU3RhdGUgPT0gTm9UYXApOworICAgICAgICBBU1NFUlQoIW1fdGFw
QW5kSG9sZFRpbWVyLmlzQWN0aXZlKCkpOworCisgICAgICAgIG1fdGFwQW5kSG9sZFRpbWVyLnN0
YXJ0KHRhcEFuZEhvbGRUaW1lLCB0aGlzKTsKKworICAgICAgICBpZiAobV9kb3VibGVUYXBUaW1l
ci5pc0FjdGl2ZSgpKSB7CisgICAgICAgICAgICAvLyBNaWdodCBiZSBkb3VibGUgdGFwLgorICAg
ICAgICAgICAgQVNTRVJUKG1fdG91Y2hCZWdpbkV2ZW50Rm9yVGFwKTsKKyAgICAgICAgICAgIG1f
ZG91YmxlVGFwVGltZXIuc3RvcCgpOworICAgICAgICAgICAgUVBvaW50RiBsYXN0UG9zaXRpb24g
PSBtX3RvdWNoQmVnaW5FdmVudEZvclRhcC0+dG91Y2hQb2ludHMoKS5maXJzdCgpLnNjcmVlblBv
cygpOworICAgICAgICAgICAgUVBvaW50RiBuZXdQb3NpdGlvbiA9IGV2ZW50LT50b3VjaFBvaW50
cygpLmZpcnN0KCkuc2NyZWVuUG9zKCk7CisgICAgICAgICAgICBpZiAoUUxpbmVGKGxhc3RQb3Np
dGlvbiwgbmV3UG9zaXRpb24pLmxlbmd0aCgpIDwgbWF4RG91YmxlVGFwRGlzdGFuY2UpCisgICAg
ICAgICAgICAgICAgbV90YXBTdGF0ZSA9IERvdWJsZVRhcENhbmRpZGF0ZTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFJlY2VpdmVkIGEgbmV3IHRhcCwgdGhhdCBpcyB1
bnJlbGF0ZWQgdG8gdGhlIHByZXZpb3VzIG9uZS4KKyAgICAgICAgICAgICAgICB0YXBUaW1lb3V0
KCk7CisgICAgICAgICAgICAgICAgbV90YXBTdGF0ZSA9IFNpbmdsZVRhcFN0YXJ0ZWQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV90YXBTdGF0ZSA9IFNpbmds
ZVRhcFN0YXJ0ZWQ7CisgICAgICAgIG1fdG91Y2hCZWdpbkV2ZW50Rm9yVGFwID0gYWRvcHRQdHIo
bmV3IFFUb3VjaEV2ZW50KCpldmVudCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFFdmVu
dDo6VG91Y2hVcGRhdGU6CisgICAgICAgIC8vIElmIHRoZSB0b3VjaCBwb2ludCBtb3ZlcyBmdXJ0
aGVyIHRoYW4gdGhlIHRocmVzaG9sZCwgd2UgY2FuY2VsIHRoZSB0YXAgZ2VzdHVyZS4KKyAgICAg
ICAgaWYgKG1fdGFwU3RhdGUgPT0gU2luZ2xlVGFwU3RhcnRlZCkgeworICAgICAgICAgICAgY29u
c3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHRvdWNoUG9pbnQgPSBldmVudC0+dG91Y2hQb2lu
dHMoKS5maXJzdCgpOworICAgICAgICAgICAgUVBvaW50RiBvZmZzZXQodG91Y2hQb2ludC5zY2Vu
ZVBvcygpIC0gbV90b3VjaEJlZ2luRXZlbnRGb3JUYXAtPnRvdWNoUG9pbnRzKCkuZmlyc3QoKS5z
Y2VuZVBvcygpKTsKKyAgICAgICAgICAgIGNvbnN0IHFyZWFsIGRpc3RYID0gcUFicyhvZmZzZXQu
eCgpKTsKKyAgICAgICAgICAgIGNvbnN0IHFyZWFsIGRpc3RZID0gcUFicyhvZmZzZXQueSgpKTsK
KyAgICAgICAgICAgIGlmIChkaXN0WCA+IGluaXRpYWxUcmlnZ2VyRGlzdGFuY2VUaHJlc2hvbGQg
fHwgZGlzdFkgPiBpbml0aWFsVHJpZ2dlckRpc3RhbmNlVGhyZXNob2xkKQorICAgICAgICAgICAg
ICAgIHJlc2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRRXZlbnQ6
OlRvdWNoRW5kOgorICAgICAgICBtX3RhcEFuZEhvbGRUaW1lci5zdG9wKCk7CisKKyAgICAgICAg
c3dpdGNoIChtX3RhcFN0YXRlKSB7CisgICAgICAgIGNhc2UgRG91YmxlVGFwQ2FuZGlkYXRlOgor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9kb3VibGVUYXBUaW1lci5p
c0FjdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBtX3RhcFN0YXRlID0gTm9UYXA7CisKKyAgICAg
ICAgICAgICAgICBjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91Y2hQb2ludCA9IGV2
ZW50LT50b3VjaFBvaW50cygpLmZpcnN0KCk7CisgICAgICAgICAgICAgICAgUVBvaW50RiBzdGFy
dFBvc2l0aW9uID0gdG91Y2hQb2ludC5zdGFydFNjcmVlblBvcygpOworICAgICAgICAgICAgICAg
IFFQb2ludEYgZW5kUG9zaXRpb24gPSB0b3VjaFBvaW50LnNjcmVlblBvcygpOworICAgICAgICAg
ICAgICAgIGlmIChRTGluZUYoZW5kUG9zaXRpb24sIHN0YXJ0UG9zaXRpb24pLmxlbmd0aCgpIDwg
bWF4RG91YmxlVGFwRGlzdGFuY2UgJiYgbV93ZWJQYWdlUHJveHkpCisgICAgICAgICAgICAgICAg
ICAgIG1fd2ViUGFnZVByb3h5LT5maW5kWm9vbWFibGVBcmVhRm9yUG9pbnQodG91Y2hQb2ludC5w
b3MoKS50b1BvaW50KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICBjYXNlIFNpbmdsZVRhcFN0YXJ0ZWQ6CisgICAgICAgICAgICBBU1NFUlQoIW1fZG91
YmxlVGFwVGltZXIuaXNBY3RpdmUoKSk7CisgICAgICAgICAgICBtX2RvdWJsZVRhcFRpbWVyLnN0
YXJ0KGRvdWJsZUNsaWNrSW50ZXJ2YWwsIHRoaXMpOworICAgICAgICAgICAgbV90YXBTdGF0ZSA9
IE5vVGFwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGFwQW5kSG9sZDoKKyAg
ICAgICAgICAgIG1fdGFwU3RhdGUgPSBOb1RhcDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworCit2b2lkIFF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OnRhcFRpbWVvdXQoKQoreworICAg
IG1fZG91YmxlVGFwVGltZXIuc3RvcCgpOworICAgIFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50IHRh
cFBvaW50ID0gbV90b3VjaEJlZ2luRXZlbnRGb3JUYXAtPnRvdWNoUG9pbnRzKCkuYXQoMCk7Cisg
ICAgV2ViR2VzdHVyZUV2ZW50IGdlc3R1cmUoV2ViRXZlbnQ6Okdlc3R1cmVTaW5nbGVUYXAsIHRh
cFBvaW50LnBvcygpLnRvUG9pbnQoKSwgdGFwUG9pbnQuc2NyZWVuUG9zKCkudG9Qb2ludCgpLCBX
ZWJFdmVudDo6TW9kaWZpZXJzKDApLCAwKTsKKyAgICBpZiAobV93ZWJQYWdlUHJveHkpCisgICAg
ICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVHZXN0dXJlRXZlbnQoZ2VzdHVyZSk7CisgICAgbV90
b3VjaEJlZ2luRXZlbnRGb3JUYXAuY2xlYXIoKTsKK30KKwordm9pZCBRdFRhcEdlc3R1cmVSZWNv
Z25pemVyOjp0YXBBbmRIb2xkVGltZW91dCgpCit7CisgICAgQVNTRVJUKG1fdG91Y2hCZWdpbkV2
ZW50Rm9yVGFwKTsKKyAgICBtX3RhcEFuZEhvbGRUaW1lci5zdG9wKCk7CisgICAgUVRvdWNoRXZl
bnQ6OlRvdWNoUG9pbnQgdGFwUG9pbnQgPSBtX3RvdWNoQmVnaW5FdmVudEZvclRhcC0+dG91Y2hQ
b2ludHMoKS5hdCgwKTsKKyAgICBXZWJHZXN0dXJlRXZlbnQgZ2VzdHVyZShXZWJFdmVudDo6R2Vz
dHVyZVRhcEFuZEhvbGQsIHRhcFBvaW50LnBvcygpLnRvUG9pbnQoKSwgdGFwUG9pbnQuc2NyZWVu
UG9zKCkudG9Qb2ludCgpLCBXZWJFdmVudDo6TW9kaWZpZXJzKDApLCAwKTsKKyAgICBpZiAobV93
ZWJQYWdlUHJveHkpCisgICAgICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVHZXN0dXJlRXZlbnQo
Z2VzdHVyZSk7CisgICAgbV90b3VjaEJlZ2luRXZlbnRGb3JUYXAuY2xlYXIoKTsKKyAgICBtX3Rh
cFN0YXRlID0gVGFwQW5kSG9sZDsKKworICAgIEFTU0VSVCghbV9kb3VibGVUYXBUaW1lci5pc0Fj
dGl2ZSgpKTsKKyAgICBtX2RvdWJsZVRhcFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBRdFRhcEdl
c3R1cmVSZWNvZ25pemVyOjpyZXNldCgpCit7CisgICAgbV90YXBTdGF0ZSA9IE5vVGFwOworICAg
IG1fdG91Y2hCZWdpbkV2ZW50Rm9yVGFwLmNsZWFyKCk7CisgICAgbV90YXBBbmRIb2xkVGltZXIu
c3RvcCgpOworCisgICAgUXRHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKTsKK30KKwordm9pZCBR
dFRhcEdlc3R1cmVSZWNvZ25pemVyOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldikKK3sKKyAg
ICBpbnQgdGltZXJJZCA9IGV2LT50aW1lcklkKCk7CisgICAgaWYgKHRpbWVySWQgPT0gbV9kb3Vi
bGVUYXBUaW1lci50aW1lcklkKCkpCisgICAgICAgIHRhcFRpbWVvdXQoKTsKKyAgICBlbHNlIGlm
ICh0aW1lcklkID09IG1fdGFwQW5kSG9sZFRpbWVyLnRpbWVySWQoKSkKKyAgICAgICAgdGFwQW5k
SG9sZFRpbWVvdXQoKTsKKyAgICBlbHNlCisgICAgICAgIFFPYmplY3Q6OnRpbWVyRXZlbnQoZXYp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjRhM2M0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5oCkBAIC0wLDAgKzEsNzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUXRUYXBHZXN0dXJlUmVjb2duaXpl
cl9oCisjZGVmaW5lIFF0VGFwR2VzdHVyZVJlY29nbml6ZXJfaAorCisjaW5jbHVkZSAiUXRHZXN0
dXJlUmVjb2duaXplci5oIgorCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8
UXRDb3JlL1FCYXNpY1RpbWVyPgorI2luY2x1ZGUgPFF0Q29yZS9RdEdsb2JhbD4KKworUVRfQkVH
SU5fTkFNRVNQQUNFCitjbGFzcyBRVG91Y2hFdmVudDsKK1FUX0VORF9OQU1FU1BBQ0UKKworLy8g
RklYTUU6IFRoZXNlIGNvbnN0YW50cyBzaG91bGQgcG9zc2libHkgZGVwZW5kIG9uIERQSS4KK2Nv
bnN0IHFyZWFsIGluaXRpYWxUcmlnZ2VyRGlzdGFuY2VUaHJlc2hvbGQgPSA1OworY29uc3QgcXJl
YWwgbWF4RG91YmxlVGFwRGlzdGFuY2UgPSAxMjA7Citjb25zdCBpbnQgdGFwQW5kSG9sZFRpbWUg
PSA4MDA7Citjb25zdCBpbnQgZG91YmxlQ2xpY2tJbnRlcnZhbCA9IDQwMDsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFF0VGFwR2VzdHVyZVJlY29nbml6ZXIgOiBwdWJsaWMgUU9iamVj
dCwgcHJpdmF0ZSBRdEdlc3R1cmVSZWNvZ25pemVyIHsKK3B1YmxpYzoKKyAgICBRdFRhcEdlc3R1
cmVSZWNvZ25pemVyKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSopOworICAgIHZvaWQgc2V0
V2ViUGFnZVByb3h5KFdlYlBhZ2VQcm94eSopOworICAgIGJvb2wgcmVjb2duaXplKGNvbnN0IFFU
b3VjaEV2ZW50KiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB2b2lkIHJlc2V0
KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKTsKKyAg
ICB2b2lkIHRhcFRpbWVvdXQoKTsKKyAgICB2b2lkIHRhcEFuZEhvbGRUaW1lb3V0KCk7CisKK3By
aXZhdGU6CisgICAgV2ViUGFnZVByb3h5KiBtX3dlYlBhZ2VQcm94eTsKKyAgICBRQmFzaWNUaW1l
ciBtX2RvdWJsZVRhcFRpbWVyOworICAgIFFCYXNpY1RpbWVyIG1fdGFwQW5kSG9sZFRpbWVyOwor
ICAgIE93blB0cjxRVG91Y2hFdmVudD4gbV90b3VjaEJlZ2luRXZlbnRGb3JUYXA7CisKKyAgICBl
bnVtIHsKKyAgICAgICAgTm9UYXAsCisgICAgICAgIFNpbmdsZVRhcFN0YXJ0ZWQsCisgICAgICAg
IERvdWJsZVRhcENhbmRpZGF0ZSwKKyAgICAgICAgVGFwQW5kSG9sZAorICAgIH0gbV90YXBTdGF0
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogUXRUYXBHZXN0dXJl
UmVjb2duaXplcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRXZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZVByb3h5LmNwcAppbmRleCA5N2E2ZWQwLi42NThjNTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKQEAgLTEzMiw2ICsxMzIsNyBAQCBRdFdl
YlBhZ2VQcm94eTo6UXRXZWJQYWdlUHJveHkoUXRWaWV3SW50ZXJmYWNlKiB2aWV3SW50ZXJmYWNl
LCBRdFZpZXdwb3J0SW50ZXJhYwogICAgICwgbV9pbnRlcmFjdGlvbkVuZ2luZSh2aWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lKQogICAgICwgbV9wYW5HZXN0dXJlUmVjb2duaXplcih2aWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lKQogICAgICwgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyKHZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUpCisgICAgLCBtX3RhcEdlc3R1cmVSZWNvZ25pemVyKHZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUpCiAgICAgLCBtX3BvbGljeUludGVyZmFjZShwb2xpY3lJbnRlcmZh
Y2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dFJlZiA/IHRvSW1wbChjb250ZXh0UmVmKSA6IGRl
ZmF1bHRXS0NvbnRleHQoKSkKICAgICAsIG1fdW5kb1N0YWNrKGFkb3B0UHRyKG5ldyBRVW5kb1N0
YWNrKHRoaXMpKSkKQEAgLTE0MCw2ICsxNDEsNyBAQCBRdFdlYlBhZ2VQcm94eTo6UXRXZWJQYWdl
UHJveHkoUXRWaWV3SW50ZXJmYWNlKiB2aWV3SW50ZXJmYWNlLCBRdFZpZXdwb3J0SW50ZXJhYwog
ewogICAgIEFTU0VSVCh2aWV3SW50ZXJmYWNlKTsKICAgICBtX3dlYlBhZ2VQcm94eSA9IG1fY29u
dGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlzLCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CisgICAgbV90
YXBHZXN0dXJlUmVjb2duaXplci5zZXRXZWJQYWdlUHJveHkobV93ZWJQYWdlUHJveHkuZ2V0KCkp
OwogICAgIG1faGlzdG9yeSA9IFFXS0hpc3RvcnlQcml2YXRlOjpjcmVhdGVIaXN0b3J5KHRoaXMs
IG1fd2ViUGFnZVByb3h5LT5iYWNrRm9yd2FyZExpc3QoKSk7CiAgICAgaWYgKCFjb250ZXh0UmVm
KQogICAgICAgICBzX2RlZmF1bHRQYWdlUHJveHlDb3VudCsrOwpAQCAtNjUxLDYgKzY1Myw3IEBA
IHZvaWQgUXRXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRDcmFzaCgpCiAgICAgdXBkYXRlTmF2aWdh
dGlvblN0YXRlKCk7CiAgICAgbV9wYW5HZXN0dXJlUmVjb2duaXplci5yZXNldCgpOwogICAgIG1f
cGluY2hHZXN0dXJlUmVjb2duaXplci5yZXNldCgpOworICAgIG1fdGFwR2VzdHVyZVJlY29nbml6
ZXIucmVzZXQoKTsKICAgICBtX3ZpZXdJbnRlcmZhY2UtPnByb2Nlc3NEaWRDcmFzaCgpOwogfQog
CkBAIC04MjQsOSArODI3LDExIEBAIHZvaWQgUXRXZWJQYWdlUHJveHk6OmRvbmVXaXRoVG91Y2hF
dmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCwgYm9vbCB3CiB7CiAgICAgaWYg
KCFtX2ludGVyYWN0aW9uRW5naW5lKQogICAgICAgICByZXR1cm47CisKICAgICBpZiAod2FzRXZl
bnRIYW5kbGVkIHx8IGV2ZW50LnR5cGUoKSA9PSBXZWJFdmVudDo6VG91Y2hDYW5jZWwpIHsKICAg
ICAgICAgbV9wYW5HZXN0dXJlUmVjb2duaXplci5yZXNldCgpOwogICAgICAgICBtX3BpbmNoR2Vz
dHVyZVJlY29nbml6ZXIucmVzZXQoKTsKKyAgICAgICAgbV90YXBHZXN0dXJlUmVjb2duaXplci5y
ZXNldCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NjEsNiArODY2LDEzIEBAIHZv
aWQgUXRXZWJQYWdlUHJveHk6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3Vj
aEV2ZW50JiBldmVudCwgYm9vbCB3CiAgICAgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzID0g
c3RhdGljX2Nhc3Q8cWludDY0PihldmVudC50aW1lc3RhbXAoKSAqIDEwMDApOwogICAgIG1fcGFu
R2VzdHVyZVJlY29nbml6ZXIucmVjb2duaXplKGV2LCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CiAg
ICAgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLnJlY29nbml6ZShldik7CisKKyAgICBpZiAobV9w
YW5HZXN0dXJlUmVjb2duaXplci5pc1JlY29nbml6ZWQoKSB8fCBtX3BpbmNoR2VzdHVyZVJlY29n
bml6ZXIuaXNSZWNvZ25pemVkKCkpCisgICAgICAgIG1fdGFwR2VzdHVyZVJlY29nbml6ZXIucmVz
ZXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgY29uc3QgUVRvdWNoRXZlbnQqIGV2ID0gZXZlbnQu
bmF0aXZlRXZlbnQoKTsKKyAgICAgICAgbV90YXBHZXN0dXJlUmVjb2duaXplci5yZWNvZ25pemUo
ZXYsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB9CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAppbmRleCBkY2M4NjVmLi4yZDNl
NjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlF0UGFuR2VzdHVyZVJlY29nbml6ZXIuaCIKICNp
bmNsdWRlICJRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaCIKICNpbmNsdWRlICJRdFBvbGljeUlu
dGVyZmFjZS5oIgorI2luY2x1ZGUgIlF0VGFwR2VzdHVyZVJlY29nbml6ZXIuaCIKICNpbmNsdWRl
ICJRdFZpZXdJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNs
dWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgpAQCAtMjA4LDYgKzIwOSw3IEBAIHByb3RlY3RlZDoK
ICAgICBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIG1faW50ZXJhY3Rpb25FbmdpbmU7CiAg
ICAgUXRQYW5HZXN0dXJlUmVjb2duaXplciBtX3Bhbkdlc3R1cmVSZWNvZ25pemVyOwogICAgIFF0
UGluY2hHZXN0dXJlUmVjb2duaXplciBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXI7CisgICAgUXRU
YXBHZXN0dXJlUmVjb2duaXplciBtX3RhcEdlc3R1cmVSZWNvZ25pemVyOwogICAgIFdlYktpdDo6
UXRQb2xpY3lJbnRlcmZhY2UqIGNvbnN0IG1fcG9saWN5SW50ZXJmYWNlOwogCiBwcml2YXRlOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>