<?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>21269</bug_id>
          
          <creation_ts>2008-09-30 23:52:16 -0700</creation_ts>
          <short_desc>Make paint cross-platform on ScrollView</short_desc>
          <delta_ts>2008-10-01 10:51:55 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>21083</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93514</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-09-30 23:52:16 -0700</bug_when>
    <thetext>Make paint cross-platforn on ScrollView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93516</commentid>
    <comment_count>1</comment_count>
      <attachid>23969</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-09-30 23:55:01 -0700</bug_when>
    <thetext>Created attachment 23969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93517</commentid>
    <comment_count>2</comment_count>
      <attachid>23970</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-01 00:02:35 -0700</bug_when>
    <thetext>Created attachment 23970
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93553</commentid>
    <comment_count>3</comment_count>
      <attachid>23970</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-01 09:35:51 -0700</bug_when>
    <thetext>Comment on attachment 23970
Patch

 #include &quot;ScrollView.h&quot;
+
 #include &quot;IntSize.h&quot;
+#include &quot;RenderLayer.h&quot;
 #include &lt;wtf/Forward.h&gt;
 #include &lt;wtf/OwnPtr.h&gt;

These should all be sorted, and ScrollView shouldn&apos;t be in a separate paragraph. I appreciate the thought that the base class include might be a different category than the others, but that&apos;s not our coding style approach to includes -- we just sort them all.

+    virtual void paintContents(GraphicsContext* context, const IntRect&amp; damageRect);

You can leave out the argument name &quot;context&quot; here.

+    static double sCurrentPaintTimeStamp; // used for detecting decoded resource thrash in the cache

Two thoughts: 1) Why not just use a normal global variable with internal linkage instead of a static data member? There&apos;s no real reason to have this in the FrameView.h header at all. 2) If it is going to be a static data member, what is our naming scheme? It&apos;s annoying to have data members be &quot;m_name&quot; and static data members be &quot;sName&quot;. I&apos;d love it if we could be consistent, at least for new code.

 NSImage* Frame::selectionImage(bool forceBlackText) const
 {
-    d-&gt;m_paintRestriction = forceBlackText ? PaintRestrictionSelectionOnlyBlackText : PaintRestrictionSelectionOnly;
+    d-&gt;m_view-&gt;setPaintRestriction(forceBlackText ? PaintRestrictionSelectionOnlyBlackText : PaintRestrictionSelectionOnly);

Does this function need a FrameView null check? What about Frame::snapshotDragImage, Frame::nodeImage, and imageFromSelection?

+    static RefPtr&lt;Image&gt; panScrollIcon;
+    if (m_drawPanScrollIcon) {
+        if (!panScrollIcon)
+            panScrollIcon = Image::loadPlatformResource(&quot;panIcon&quot;);
+        context-&gt;drawImage(panScrollIcon.get(), m_panScrollIconPoint);
+    }

I&apos;d write it like this:

    if (m_drawPanScrollIcon) {
        static Image* panScrollIcon = Image::loadPlatformResource(&quot;panIcon&quot;).release().releaseRef();
        context-&gt;drawImage(panScrollIcon, m_panScrollIconPoint);
    }

I think it&apos;s nicer to scope the panScrollIcon variable tighter, to just let the compiler do the one-time initialization rather than writing it out explicitly, and to use a raw pointer so we don&apos;t waste time decrementing the reference count when quitting.

+    virtual void paint(GraphicsContext*, const IntRect&amp;);
+
 protected:
     virtual void repaintContentRectangle(const IntRect&amp;, bool now = false);
+    virtual void paintContents(GraphicsContext* context, const IntRect&amp; damageRect) = 0;

I think you can omit the argument name &quot;context&quot; in paintContents too; and I also suggest being consistent about whether you give the name &quot;damageRect&quot; or not; both or neither would be better. Also, you could consider making paintContents private instead of protected. It should only be protected if derived classes need to call it.

In ScrollbarTheme.h if you&apos;re going to add the include of GraphicsContext, then you should remove the forward declaration of the GraphicsContext class.

+void ScrollbarThemeComposite::paintScrollCorner(ScrollView* view, GraphicsContext* context, const IntRect&amp; cornerRect)
+{
+    FrameView* frameView = static_cast&lt;FrameView*&gt;(view);
+    Page* page = frameView-&gt;frame() ? frameView-&gt;frame()-&gt;page() : 0;

Weren&apos;t you planning to get rid of these casts to FrameView using your new HostWindow class?

+    _private-&gt;coreFrame-&gt;view()-&gt;paintContents(&amp;context, enclosingIntRect(rect));

Do we need a null check of FrameView here?

+        coreFrame-&gt;view()-&gt;paintContents(&amp;spoolCtx, pageRect);

What about here?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93561</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-01 10:23:36 -0700</bug_when>
    <thetext>&quot;Weren&apos;t you planning to get rid of these casts to FrameView using your new
HostWindow class?&quot;

The custom scrollbar painting API for Windows is something I&apos;m just going to ditch completely once scrollbars can be styled with CSS, so I&apos;m not bothering to create a new host window API for it.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93564</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-01 10:24:31 -0700</bug_when>
    <thetext>BTW, you critiqued a lot of code that just moved (without changing), but I am game for fixing it anyway! :)

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93566</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-01 10:51:55 -0700</bug_when>
    <thetext>Your suggestion for how to change the pan scroll image initialization did not compile, so I ended up just leaving it alone for now.

Thanks for the review!

Fixed in r37146.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23969</attachid>
            <date>2008-09-30 23:55:01 -0700</date>
            <delta_ts>2008-10-01 00:02:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>46402</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzEzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzQgQEAKKzIwMDgtMDktMzAgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjY5
CisgIAorICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHRoZSBTY3JvbGxWaWV3OjpwYWludCBtZXRo
b2QgY3Jvc3MtcGxhdGZvcm0uICBUaGUgcGFpbnQgbWV0aG9kIGNhbGxzIHRoZSBiYXNlIGNsYXNz
CisgICAgICAgIFdpZGdldCBwYWludCBvbiBwbGF0Zm9ybXMgd2l0aCBuYXRpdmUgd2lkZ2V0cyAo
TWFjIGFuZCB3eCkuICBPdGhlcndpc2UgaXQgY2FsbHMgYSB2aXJ0dWFsIGZ1bmN0aW9uLAorICAg
ICAgICBwYWludENvbnRlbnRzLCB0byBwYWludCB0aGUgU2Nyb2xsVmlldydzIGNvbnRlbnRzLCBh
bmQgdGhlbiBpdCBwYWludHMgZWFjaCBvZiB0aGUgdHdvIHNjcm9sbGJhcnMgYW5kCisgICAgICAg
IHRoZSBzY3JvbGxiYXIgY29ybmVyLgorICAgICAgICAKKyAgICAgICAgVGhlIHNjcm9sbGJhciB0
aGVtZXMgYXJlIG5vdyByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgc2Nyb2xsYmFyIGNvcm5lcnMu
ICBBdCB0aGUgbW9tZW50IFNjcm9sbGJhclRoZW1lV2luIHN0aWxsCisgICAgICAgIHBhaW50cyB3
aGl0ZSAod2hpY2ggaXMgaW5jb3JyZWN0KSwgc28gYSBmdXR1cmUgcGF0Y2ggd2lsbCBhY3R1YWxs
eSBpbXBsZW1lbnQgcHJvcGVyIG5hdGl2ZSBzY3JvbGwgY29ybmVyIHBhaW50aW5nCisgICAgICAg
IGZvciBXaW5kb3dzLgorICAgICAgICAKKyAgICAgICAgcGFpbnRDb250ZW50cyBpcyBpbXBsZW1l
bnRlZCBieSBGcmFtZVZpZXcsIGFuZCByZXBsYWNlcyBGcmFtZTo6cGFpbnQuICBBbGwgb2YgdGhl
IEZyYW1lUHJpdmF0ZSBtZW1iZXIKKyAgICAgICAgdmFyaWFibGVzIHVzZWQgYnkgRnJhbWU6OnBh
aW50IGhhdmUgbW92ZWQgdG8gRnJhbWVWaWV3UHJpdmF0ZSBpbnN0ZWFkLiAgQWxsIGNhbGxlcnMg
b2YgRnJhbWU6OnBhaW50IGhhdmUKKyAgICAgICAgYmVlbiBwYXRjaGVkIHRvIHVzZSBGcmFtZVZp
ZXc6OnBhaW50Q29udGVudHMgaW5zdGVhZC4KKyAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBP
UiBDSEFOR0VECisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnBydW5lTGl2ZVJlc291cmNlcyk6CisgICAgICAgICog
bG9hZGVyL0NhY2hlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpk
aWREcmF3KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVQcml2
YXRlOjpGcmFtZVByaXZhdGUpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiBw
YWdlL0ZyYW1lUHJpdmF0ZS5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlld1ByaXZhdGU6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRl
Q29udHJvbFRpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFBhaW50UmVzdHJpY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojppc1BhaW50aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6c2V0Tm9kZVRvRHJhdyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y3VycmVudFBhaW50VGltZVN0YW1wKToK
KyAgICAgICAgKiBwYWdlL21hYy9GcmFtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZWxlY3Rpb25JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c25hcHNob3REcmFn
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Om5vZGVJbWFnZSk6CisgICAgICAgICog
cGFnZS93aW4vRnJhbWVDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbWFnZUZyb21TZWxl
Y3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpw
YWludCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGJhclRoZW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6OnBhaW50U2Nyb2xsQ29y
bmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6cGFpbnRTY3JvbGxDb3Ju
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1Njcm9sbFZpZXdRdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhl
bWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVF0OjpwYWludFNjcm9s
bGJhckNvcm5lcik6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpTY3JvbGxWaWV3UHJpdmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2Nyb2xsQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnByaW50UGFuU2Nyb2xs
SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpyZW1vdmVQYW5TY3JvbGxJY29u
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW1hZ2U6OmRyYXcpOgorCiAyMDA4LTA5LTMwICBEYW4gQmVybnN0ZWluICA8bWl0ekBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHJldmlzaW9uIDM3MTEzKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTA4LDggKzExMDgsOCBAQCB2b2lkIERvY3VtZW50OjpzZXREb2N1bWVudENo
YW5nZWQoYm9vbCBiCiB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFu
Z2UpCiB7CiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBlbnRlciBzdHlsZSByZWNhbGMgd2hpbGUgcGFp
bnRpbmcKLSAgICBpZiAoZnJhbWUoKSAmJiBmcmFtZSgpLT5pc1BhaW50aW5nKCkpIHsKLSAgICAg
ICAgQVNTRVJUKCFmcmFtZSgpLT5pc1BhaW50aW5nKCkpOworICAgIGlmIChmcmFtZSgpICYmIGZy
YW1lKCktPnZpZXcoKSAmJiBmcmFtZSgpLT52aWV3KCktPmlzUGFpbnRpbmcoKSkgeworICAgICAg
ICBBU1NFUlQoIWZyYW1lKCktPnZpZXcoKS0+aXNQYWludGluZygpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHJldmlzaW9uIDM3MDg2KQorKysgV2ViQ29y
ZS9sb2FkZXIvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAjaW5j
bHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCkBAIC0yNjks
NyArMjY5LDcgQEAgdm9pZCBDYWNoZTo6cHJ1bmVMaXZlUmVzb3VyY2VzKCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgdW5zaWduZWQgdGFyZ2V0U2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
YXBhY2l0eSAqIGNUYXJnZXRQcnVuZVBlcmNlbnRhZ2UpOyAvLyBDdXQgYnkgYSBwZXJjZW50YWdl
IHRvIGF2b2lkIGltbWVkaWF0ZWx5IHBydW5pbmcgYWdhaW4uCi0gICAgZG91YmxlIGN1cnJlbnRU
aW1lID0gRnJhbWU6OmN1cnJlbnRQYWludFRpbWVTdGFtcCgpOworICAgIGRvdWJsZSBjdXJyZW50
VGltZSA9IEZyYW1lVmlldzo6Y3VycmVudFBhaW50VGltZVN0YW1wKCk7CiAgICAgaWYgKCFjdXJy
ZW50VGltZSkgLy8gSW4gY2FzZSBwcnVuZSBpcyBjYWxsZWQgZGlyZWN0bHksIG91dHNpZGUgb2Yg
YSBGcmFtZSBwYWludC4KICAgICAgICAgY3VycmVudFRpbWUgPSBXZWJDb3JlOjpjdXJyZW50VGlt
ZSgpOwogICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gMzcwODYpCisr
KyBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJSZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAg
LTMwMSw3ICszMDEsNyBAQCB2b2lkIENhY2hlZEltYWdlOjpkaWREcmF3KGNvbnN0IEltYWdlKiBp
CiAgICAgaWYgKGltYWdlICE9IG1faW1hZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBk
b3VibGUgdGltZVN0YW1wID0gRnJhbWU6OmN1cnJlbnRQYWludFRpbWVTdGFtcCgpOworICAgIGRv
dWJsZSB0aW1lU3RhbXAgPSBGcmFtZVZpZXc6OmN1cnJlbnRQYWludFRpbWVTdGFtcCgpOwogICAg
IGlmICghdGltZVN0YW1wKSAvLyBJZiBkaWREcmF3IGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgRnJh
bWUgcGFpbnQuCiAgICAgICAgIHRpbWVTdGFtcCA9IGN1cnJlbnRUaW1lKCk7CiAgICAgCkluZGV4
OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHJldmlzaW9uIDM3MDg2KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTUsOCArOTUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWRvdWJsZSBG
cmFtZTo6c19jdXJyZW50UGFpbnRUaW1lU3RhbXAgPSAwLjA7Ci0KICNpZm5kZWYgTkRFQlVHICAg
IAogc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyIGZyYW1lQ291bnRlcigiRnJhbWUi
KTsKICNlbmRpZgpAQCAtMTI1NCw2OCArMTI1Miw2IEBAIHZvaWQgRnJhbWU6OnJldmVhbENhcmV0
KGNvbnN0IFJlbmRlckxheWUKICAgICB9CiB9CiAKLS8vIEZJWE1FOiB3aHkgaXMgdGhpcyBoZXJl
IGluc3RlYWQgb2Ygb24gdGhlIEZyYW1lVmlldz8KLXZvaWQgRnJhbWU6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
Ym9vbCBmaWxsV2l0aFJlZDsKLSAgICBpZiAoIWRvY3VtZW50KCkgfHwgZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSkKLSAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gUHJpbnRpbmcsIGRvbid0
IGZpbGwgd2l0aCByZWQgKGNhbid0IHJlbWVtYmVyIHdoeSkuCi0gICAgZWxzZSBpZiAoZG9jdW1l
bnQoKS0+b3duZXJFbGVtZW50KCkpCi0gICAgICAgIGZpbGxXaXRoUmVkID0gZmFsc2U7IC8vIFN1
YmZyYW1lLCBkb24ndCBmaWxsIHdpdGggcmVkLgotICAgIGVsc2UgaWYgKHZpZXcoKSAmJiB2aWV3
KCktPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gVHJh
bnNwYXJlbnQsIGRvbid0IGZpbGwgd2l0aCByZWQuCi0gICAgZWxzZSBpZiAoZC0+bV9wYWludFJl
c3RyaWN0aW9uID09IFBhaW50UmVzdHJpY3Rpb25TZWxlY3Rpb25Pbmx5IHx8IGQtPm1fcGFpbnRS
ZXN0cmljdGlvbiA9PSBQYWludFJlc3RyaWN0aW9uU2VsZWN0aW9uT25seUJsYWNrVGV4dCkKLSAg
ICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gU2VsZWN0aW9ucyBhcmUgdHJhbnNwYXJlbnQs
IGRvbid0IGZpbGwgd2l0aCByZWQuCi0gICAgZWxzZSBpZiAoZC0+bV9lbGVtZW50VG9EcmF3KQot
ICAgICAgICBmaWxsV2l0aFJlZCA9IGZhbHNlOyAvLyBFbGVtZW50IGltYWdlcyBhcmUgdHJhbnNw
YXJlbnQsIGRvbid0IGZpbGwgd2l0aCByZWQuCi0gICAgZWxzZQotICAgICAgICBmaWxsV2l0aFJl
ZCA9IHRydWU7Ci0gICAgCi0gICAgaWYgKGZpbGxXaXRoUmVkKQotICAgICAgICBwLT5maWxsUmVj
dChyZWN0LCBDb2xvcigweEZGLCAwLCAwKSk7Ci0jZW5kaWYKLQotICAgIGJvb2wgaXNUb3BMZXZl
bFBhaW50ZXIgPSAhc19jdXJyZW50UGFpbnRUaW1lU3RhbXA7Ci0gICAgaWYgKGlzVG9wTGV2ZWxQ
YWludGVyKQotICAgICAgICBzX2N1cnJlbnRQYWludFRpbWVTdGFtcCA9IGN1cnJlbnRUaW1lKCk7
Ci0gICAgCi0gICAgaWYgKGNvbnRlbnRSZW5kZXJlcigpKSB7Ci0gICAgICAgIEFTU0VSVChkLT5t
X3ZpZXcgJiYgIWQtPm1fdmlldy0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgICAgIEFTU0VSVCghZC0+
bV9pc1BhaW50aW5nKTsKLSAgICAgICAgCi0gICAgICAgIGQtPm1faXNQYWludGluZyA9IHRydWU7
Ci0gICAgICAgIAotICAgICAgICAvLyBkLT5tX2VsZW1lbnRUb0RyYXcgaXMgdXNlZCB0byBkcmF3
IG9ubHkgb25lIGVsZW1lbnQKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBlbHRSZW5kZXJlciA9IGQt
Pm1fZWxlbWVudFRvRHJhdyA/IGQtPm1fZWxlbWVudFRvRHJhdy0+cmVuZGVyZXIoKSA6IDA7Ci0g
ICAgICAgIGlmIChkLT5tX3BhaW50UmVzdHJpY3Rpb24gPT0gUGFpbnRSZXN0cmljdGlvbk5vbmUp
Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5pbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtl
cnNJblJlY3QocmVjdCk7Ci0gICAgICAgIGNvbnRlbnRSZW5kZXJlcigpLT5sYXllcigpLT5wYWlu
dChwLCByZWN0LCBkLT5tX3BhaW50UmVzdHJpY3Rpb24sIGVsdFJlbmRlcmVyKTsKLSAgICAgICAg
Ci0gICAgICAgIGQtPm1faXNQYWludGluZyA9IGZhbHNlOwotCi0jaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKQotICAgICAgICAvLyBSZWdpb25zIG1heSBoYXZlIGNoYW5nZWQgYXMgYSByZXN1
bHQgb2YgdGhlIHZpc2liaWxpdHkvei1pbmRleCBvZiBlbGVtZW50IGNoYW5naW5nLgotICAgICAg
ICBpZiAoZG9jdW1lbnQoKS0+ZGFzaGJvYXJkUmVnaW9uc0RpcnR5KCkpCi0gICAgICAgICAgICB2
aWV3KCktPnVwZGF0ZURhc2hib2FyZFJlZ2lvbnMoKTsKLSNlbmRpZgotICAgIH0gZWxzZQotICAg
ICAgICBMT0dfRVJST1IoImNhbGxlZCBGcmFtZTo6cGFpbnQgd2l0aCBuaWwgcmVuZGVyZXIiKTsK
LSAgICAgICAgCi0gICAgaWYgKGlzVG9wTGV2ZWxQYWludGVyKQotICAgICAgICBzX2N1cnJlbnRQ
YWludFRpbWVTdGFtcCA9IDA7Ci19Ci0KLXZvaWQgRnJhbWU6OnNldFBhaW50UmVzdHJpY3Rpb24o
UGFpbnRSZXN0cmljdGlvbiBwcikKLXsKLSAgICBkLT5tX3BhaW50UmVzdHJpY3Rpb24gPSBwcjsK
LX0KLSAgICAKLWJvb2wgRnJhbWU6OmlzUGFpbnRpbmcoKSBjb25zdAotewotICAgIHJldHVybiBk
LT5tX2lzUGFpbnRpbmc7Ci19Ci0KIHZvaWQgRnJhbWU6OmFkanVzdFBhZ2VIZWlnaHQoZmxvYXQg
Km5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRCb3R0b20sIGZsb2F0IGJvdHRvbUxp
bWl0KQogewogICAgIFJlbmRlclZpZXcqIHJvb3QgPSBjb250ZW50UmVuZGVyZXIoKTsKQEAgLTE2
MzcsNyArMTU3Myw3IEBAIHVuc2lnbmVkIEZyYW1lOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQoY28K
ICAgICAgICAgaWYgKCF2aXNpYmxlUmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopMCk7CiAgICAgICAg
ICAgICBjb250ZXh0LnNldFBhaW50aW5nRGlzYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgICBwYWlu
dCgmY29udGV4dCwgdmlzaWJsZVJlY3QpOworICAgICAgICAgICAgZC0+bV92aWV3LT5wYWludENv
bnRlbnRzKCZjb250ZXh0LCB2aXNpYmxlUmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC0xODg5LDEwICsxODI1LDggQEAgRnJhbWVQcml2YXRlOjpGcmFtZVByaXZhdGUoUGFnZSogcGFn
ZSwgRgogICAgICwgbV9ldmVudEhhbmRsZXIodGhpc0ZyYW1lKQogICAgICwgbV9hbmltYXRpb25D
b250cm9sbGVyKHRoaXNGcmFtZSkKICAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcih0aGlzRnJhbWUs
ICZGcmFtZTo6bGlmZVN1cHBvcnRUaW1lckZpcmVkKQotICAgICwgbV9wYWludFJlc3RyaWN0aW9u
KFBhaW50UmVzdHJpY3Rpb25Ob25lKQogICAgICwgbV9jYXJldFZpc2libGUoZmFsc2UpCiAgICAg
LCBtX2NhcmV0UGFpbnQodHJ1ZSkKLSAgICAsIG1faXNQYWludGluZyhmYWxzZSkKICAgICAsIG1f
aGlnaGxpZ2h0VGV4dE1hdGNoZXMoZmFsc2UpCiAgICAgLCBtX2luVmlld1NvdXJjZU1vZGUoZmFs
c2UpCiAgICAgLCBtX3Byb2hpYml0c1Njcm9sbGluZyhmYWxzZSkKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAz
NzA4NikKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTMg
KzE2OSw3IEBAIHB1YmxpYzoKIAogLy8gPT09IHRvIGJlIG1vdmVkIGludG8gRnJhbWVWaWV3CiAK
LXB1YmxpYzoKLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2b2lkIHNldFBhaW50UmVzdHJpY3Rpb24oUGFpbnRSZXN0cmljdGlvbik7Ci0gICAg
Ym9vbCBpc1BhaW50aW5nKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgZG91YmxlIGN1cnJlbnRQYWlu
dFRpbWVTdGFtcCgpIHsgcmV0dXJuIHNfY3VycmVudFBhaW50VGltZVN0YW1wOyB9IC8vIHJldHVy
bnMgMCBpZiBub3QgcGFpbnRpbmcKLSAgICAKK3B1YmxpYzogCiAgICAgdm9pZCBmb3JjZUxheW91
dChib29sIGFsbG93U3VidHJlZSA9IGZhbHNlKTsKICAgICB2b2lkIGZvcmNlTGF5b3V0V2l0aFBh
Z2VXaWR0aFJhbmdlKGZsb2F0IG1pblBhZ2VXaWR0aCwgZmxvYXQgbWF4UGFnZVdpZHRoLCBib29s
IGFkanVzdFZpZXdTaXplKTsKIApAQCAtMTkyLDkgKzE4Niw2IEBAIHB1YmxpYzoKICAgICBib29s
IHByb2hpYml0c1Njcm9sbGluZygpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJvaGliaXRzU2Nyb2xs
aW5nKGNvbnN0IGJvb2wpOwogCi1wcml2YXRlOgotICAgIHN0YXRpYyBkb3VibGUgc19jdXJyZW50
UGFpbnRUaW1lU3RhbXA7IC8vIHVzZWQgZm9yIGRldGVjdGluZyBkZWNvZGVkIHJlc291cmNlIHRo
cmFzaCBpbiB0aGUgY2FjaGUKLQogLy8gPT09IHRvIGJlIG1vdmVkIGludG8gQ2hyb21lCiAKIHB1
YmxpYzoKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRnJhbWVQcml2YXRlLmgJKHJldmlzaW9uIDM3MDg2KQorKysgV2ViQ29yZS9w
YWdlL0ZyYW1lUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMyArODEsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgVGltZXI8RnJhbWU+IG1fbGlmZVN1cHBvcnRUaW1l
cjsKIAotICAgICAgICBSZWZQdHI8Tm9kZT4gbV9lbGVtZW50VG9EcmF3OwotICAgICAgICBQYWlu
dFJlc3RyaWN0aW9uIG1fcGFpbnRSZXN0cmljdGlvbjsKLSAgICAgICAgCiAgICAgICAgIGJvb2wg
bV9jYXJldFZpc2libGU7CiAgICAgICAgIGJvb2wgbV9jYXJldFBhaW50OwotICAgICAgICBib29s
IG1faXNQYWludGluZzsKLQorICAgICAgICAKICAgICAgICAgYm9vbCBtX2hpZ2hsaWdodFRleHRN
YXRjaGVzOwogICAgICAgICBib29sIG1faW5WaWV3U291cmNlTW9kZTsKICAgICAgICAgYm9vbCBt
X3Byb2hpYml0c1Njcm9sbGluZzsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAzNzEwNSkK
KysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMSAr
NDUsMTQgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitkb3VibGUg
RnJhbWVWaWV3OjpzQ3VycmVudFBhaW50VGltZVN0YW1wID0gMC4wOworCiBzdHJ1Y3QgU2NoZWR1
bGVkRXZlbnQgewogICAgIFJlZlB0cjxFdmVudD4gbV9ldmVudDsKICAgICBSZWZQdHI8RXZlbnRU
YXJnZXROb2RlPiBtX2V2ZW50VGFyZ2V0OwpAQCAtMTAwLDYgKzEwMyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9yZXBhaW50Q291bnQgPSAwOwogICAgICAgICBtX3JlcGFpbnRSZWN0ID0gSW50UmVj
dCgpOwogICAgICAgICBtX3JlcGFpbnRSZWN0cy5jbGVhcigpOworICAgICAgICBtX3BhaW50UmVz
dHJpY3Rpb24gPSBQYWludFJlc3RyaWN0aW9uTm9uZTsKKyAgICAgICAgbV9pc1BhaW50aW5nID0g
ZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbCBtX2RvRnVsbFJlcGFpbnQ7CkBAIC0xNDgsNiArMTUz
LDEwIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8SW50UmVjdD4gbV9yZXBhaW50UmVjdHM7CiAKICAg
ICBib29sIG1fc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW47CisKKyAgICBSZWZQdHI8Tm9kZT4g
bV9ub2RlVG9EcmF3OworICAgIFBhaW50UmVzdHJpY3Rpb24gbV9wYWludFJlc3RyaWN0aW9uOwor
ICAgIGJvb2wgbV9pc1BhaW50aW5nOwogfTsKIAogRnJhbWVWaWV3OjpGcmFtZVZpZXcoRnJhbWUq
IGZyYW1lKQpAQCAtMzQ5LDggKzM1OCw4IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBh
bGxvd1N1YnRyZWUKICAgICB9CiAgICAgCiAgICAgLy8gd2Ugc2hvdWxkbid0IGVudGVyIGxheW91
dCgpIHdoaWxlIHBhaW50aW5nCi0gICAgQVNTRVJUKCFtX2ZyYW1lLT5pc1BhaW50aW5nKCkpOwot
ICAgIGlmIChtX2ZyYW1lLT5pc1BhaW50aW5nKCkpCisgICAgQVNTRVJUKCFpc1BhaW50aW5nKCkp
OworICAgIGlmIChpc1BhaW50aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghYWxs
b3dTdWJ0cmVlICYmIGQtPm1fbGF5b3V0Um9vdCkgewpAQCAtMTA0OSwxMSArMTA1OCw3IEBAIHZv
aWQgRnJhbWVWaWV3Ojp1cGRhdGVDb250cm9sVGludHMoKQogICAgICAgICBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCogY29uc3Qgbm9Db250ZXh0ID0gMDsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
IGNvbnRleHQobm9Db250ZXh0KTsKICAgICAgICAgY29udGV4dC5zZXRVcGRhdGluZ0NvbnRyb2xU
aW50cyh0cnVlKTsKLSNpZiAhUExBVEZPUk0oTUFDKQotICAgICAgICBTY3JvbGxWaWV3OjpwYWlu
dCgmY29udGV4dCwgZnJhbWVSZWN0KCkpOwotI2Vsc2UKLSAgICAgICAgbV9mcmFtZS0+cGFpbnQo
JmNvbnRleHQsIHZpc2libGVDb250ZW50UmVjdCgpKTsKLSNlbmRpZgorICAgICAgICBwYWludCgm
Y29udGV4dCwgZnJhbWVSZWN0KCkpOwogICAgIH0KIH0KIApAQCAtMTA2OSw2ICsxMDc0LDgzIEBA
IHZvaWQgRnJhbWVWaWV3OjpzZXRXYXNTY3JvbGxlZEJ5VXNlcihib28KICAgICBkLT5tX3dhc1Nj
cm9sbGVkQnlVc2VyID0gd2FzU2Nyb2xsZWRCeVVzZXI7CiB9CiAKKy8vIEZJWE1FOiB3aHkgaXMg
dGhpcyBoZXJlIGluc3RlYWQgb2Ygb24gdGhlIEZyYW1lVmlldz8KK3ZvaWQgRnJhbWVWaWV3Ojpw
YWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBmcmFtZSgpLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAg
ICAgIHJldHVybjsKKworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIGZpbGxXaXRoUmVkOworICAg
IGlmIChkb2N1bWVudCB8fCBkb2N1bWVudC0+cHJpbnRpbmcoKSkKKyAgICAgICAgZmlsbFdpdGhS
ZWQgPSBmYWxzZTsgLy8gUHJpbnRpbmcsIGRvbid0IGZpbGwgd2l0aCByZWQgKGNhbid0IHJlbWVt
YmVyIHdoeSkuCisgICAgZWxzZSBpZiAoZG9jdW1lbnQtPm93bmVyRWxlbWVudCgpKQorICAgICAg
ICBmaWxsV2l0aFJlZCA9IGZhbHNlOyAvLyBTdWJmcmFtZSwgZG9uJ3QgZmlsbCB3aXRoIHJlZC4K
KyAgICBlbHNlIGlmIChpc1RyYW5zcGFyZW50KCkpCisgICAgICAgIGZpbGxXaXRoUmVkID0gZmFs
c2U7IC8vIFRyYW5zcGFyZW50LCBkb24ndCBmaWxsIHdpdGggcmVkLgorICAgIGVsc2UgaWYgKGQt
Pm1fcGFpbnRSZXN0cmljdGlvbiA9PSBQYWludFJlc3RyaWN0aW9uU2VsZWN0aW9uT25seSB8fCBk
LT5tX3BhaW50UmVzdHJpY3Rpb24gPT0gUGFpbnRSZXN0cmljdGlvblNlbGVjdGlvbk9ubHlCbGFj
a1RleHQpCisgICAgICAgIGZpbGxXaXRoUmVkID0gZmFsc2U7IC8vIFNlbGVjdGlvbnMgYXJlIHRy
YW5zcGFyZW50LCBkb24ndCBmaWxsIHdpdGggcmVkLgorICAgIGVsc2UgaWYgKGQtPm1fbm9kZVRv
RHJhdykKKyAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gRWxlbWVudCBpbWFnZXMgYXJl
IHRyYW5zcGFyZW50LCBkb24ndCBmaWxsIHdpdGggcmVkLgorICAgIGVsc2UKKyAgICAgICAgZmls
bFdpdGhSZWQgPSB0cnVlOworICAgIAorICAgIGlmIChmaWxsV2l0aFJlZCkKKyAgICAgICAgcC0+
ZmlsbFJlY3QocmVjdCwgQ29sb3IoMHhGRiwgMCwgMCkpOworI2VuZGlmCisKKyAgICBib29sIGlz
VG9wTGV2ZWxQYWludGVyID0gIXNDdXJyZW50UGFpbnRUaW1lU3RhbXA7CisgICAgaWYgKGlzVG9w
TGV2ZWxQYWludGVyKQorICAgICAgICBzQ3VycmVudFBhaW50VGltZVN0YW1wID0gY3VycmVudFRp
bWUoKTsKKyAgICAKKyAgICBSZW5kZXJWaWV3KiBjb250ZW50UmVuZGVyZXIgPSBmcmFtZSgpLT5j
b250ZW50UmVuZGVyZXIoKTsKKyAgICBpZiAoIWNvbnRlbnRSZW5kZXJlcikgeworICAgICAgICBM
T0dfRVJST1IoImNhbGxlZCBGcmFtZTo6cGFpbnQgd2l0aCBuaWwgcmVuZGVyZXIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CisgICAgQVNT
RVJUKCFkLT5tX2lzUGFpbnRpbmcpOworICAgICAgICAKKyAgICBkLT5tX2lzUGFpbnRpbmcgPSB0
cnVlOworICAgICAgICAKKyAgICAvLyBtX25vZGVUb0RyYXcgaXMgdXNlZCB0byBkcmF3IG9ubHkg
b25lIGVsZW1lbnQgKGFuZCBpdHMgZGVzY2VuZGFudHMpCisgICAgUmVuZGVyT2JqZWN0KiBlbHRS
ZW5kZXJlciA9IGQtPm1fbm9kZVRvRHJhdyA/IGQtPm1fbm9kZVRvRHJhdy0+cmVuZGVyZXIoKSA6
IDA7CisgICAgaWYgKGQtPm1fcGFpbnRSZXN0cmljdGlvbiA9PSBQYWludFJlc3RyaWN0aW9uTm9u
ZSkKKyAgICAgICAgZG9jdW1lbnQtPmludmFsaWRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0lu
UmVjdChyZWN0KTsKKyAgICBjb250ZW50UmVuZGVyZXItPmxheWVyKCktPnBhaW50KHAsIHJlY3Qs
IGQtPm1fcGFpbnRSZXN0cmljdGlvbiwgZWx0UmVuZGVyZXIpOworICAgICAgICAKKyAgICBkLT5t
X2lzUGFpbnRpbmcgPSBmYWxzZTsKKworI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKyAg
ICAvLyBSZWdpb25zIG1heSBoYXZlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIHZpc2liaWxp
dHkvei1pbmRleCBvZiBlbGVtZW50IGNoYW5naW5nLgorICAgIGlmIChkb2N1bWVudC0+ZGFzaGJv
YXJkUmVnaW9uc0RpcnR5KCkpCisgICAgICAgIHVwZGF0ZURhc2hib2FyZFJlZ2lvbnMoKTsKKyNl
bmRpZgorCisgICAgaWYgKGlzVG9wTGV2ZWxQYWludGVyKQorICAgICAgICBzQ3VycmVudFBhaW50
VGltZVN0YW1wID0gMDsKK30KKwordm9pZCBGcmFtZVZpZXc6OnNldFBhaW50UmVzdHJpY3Rpb24o
UGFpbnRSZXN0cmljdGlvbiBwcikKK3sKKyAgICBkLT5tX3BhaW50UmVzdHJpY3Rpb24gPSBwcjsK
K30KKyAgICAKK2Jvb2wgRnJhbWVWaWV3Ojppc1BhaW50aW5nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZC0+bV9pc1BhaW50aW5nOworfQorCit2b2lkIEZyYW1lVmlldzo6c2V0Tm9kZVRvRHJhdyhO
b2RlKiBub2RlKQoreworICAgIGQtPm1fbm9kZVRvRHJhdyA9IG5vZGU7Cit9CisKICNpZiBQTEFU
Rk9STShXSU4pIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCiB2b2lkIEZyYW1lVmll
dzo6bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUoKQogewpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24g
MzcxMDUpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDkgQEAKICNkZWZpbmUgRnJhbWVWaWV3X2gKIAogI2luY2x1ZGUgIlNjcm9sbFZpZXcu
aCIKKwogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC05Myw3
ICs5NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzTGF5b3V0KCk7CiAKICAgICBib29s
IG5lZWRzRnVsbFJlcGFpbnQoKSBjb25zdDsKLSAKKwogICAgIHZvaWQgcmVzZXRTY3JvbGxiYXJz
KCk7CiAKICAgICB2b2lkIGNsZWFyKCk7CkBAIC0xNDgsNiArMTUwLDEzIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGFkZFdpZGdldFRvVXBkYXRlKFJlbmRlclBhcnRPYmplY3QqKTsKICAgICB2b2lkIHJl
bW92ZVdpZGdldFRvVXBkYXRlKFJlbmRlclBhcnRPYmplY3QqKTsKIAorICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCk7CisgICAgdm9pZCBzZXRQYWludFJlc3RyaWN0aW9uKFBhaW50UmVzdHJpY3Rp
b24pOworICAgIGJvb2wgaXNQYWludGluZygpIGNvbnN0OworICAgIHZvaWQgc2V0Tm9kZVRvRHJh
dyhOb2RlKik7CisKKyAgICBzdGF0aWMgZG91YmxlIGN1cnJlbnRQYWludFRpbWVTdGFtcCgpIHsg
cmV0dXJuIHNDdXJyZW50UGFpbnRUaW1lU3RhbXA7IH0gLy8gcmV0dXJucyAwIGlmIG5vdCBwYWlu
dGluZworICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGJ5
IGFsbCBwbGF0Zm9ybXMsIGJ1dCBjdXJyZW50bHkgZGVwZW5kcyBvbiBTY3JvbGxWaWV3OjpjaGls
ZHJlbiwKICAgICAvLyB3aGljaCBub3QgYWxsIHBsYXRmb3JtcyBoYXZlLiBPbmNlIEZyYW1lVmll
dyBhbmQgU2Nyb2xsVmlldyBhcmUgbWVyZ2VkLCB0aGlzICNpZiBzaG91bGQgYmUgcmVtb3ZlZC4K
ICNpZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCkBAIC0x
NzAsNiArMTc5LDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Q29udGVu
dFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiwgYm9vbCBpbW1lZGlhdGUpOwogCisgICAgc3RhdGlj
IGRvdWJsZSBzQ3VycmVudFBhaW50VGltZVN0YW1wOyAvLyB1c2VkIGZvciBkZXRlY3RpbmcgZGVj
b2RlZCByZXNvdXJjZSB0aHJhc2ggaW4gdGhlIGNhY2hlCisKICAgICB1bnNpZ25lZCBtX3JlZkNv
dW50OwogICAgIEludFNpemUgbV9zaXplOwogICAgIEludFNpemUgbV9tYXJnaW5zOwpJbmRleDog
V2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
bWFjL0ZyYW1lTWFjLm1tCShyZXZpc2lvbiAzNzA4NikKKysrIFdlYkNvcmUvcGFnZS9tYWMvRnJh
bWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxNiwxMCArMzE2LDEwIEBAIE5TSW1hZ2UqIEZy
YW1lOjppbWFnZUZyb21SZWN0KE5TUmVjdCByZWMKIAogTlNJbWFnZSogRnJhbWU6OnNlbGVjdGlv
bkltYWdlKGJvb2wgZm9yY2VCbGFja1RleHQpIGNvbnN0CiB7Ci0gICAgZC0+bV9wYWludFJlc3Ry
aWN0aW9uID0gZm9yY2VCbGFja1RleHQgPyBQYWludFJlc3RyaWN0aW9uU2VsZWN0aW9uT25seUJs
YWNrVGV4dCA6IFBhaW50UmVzdHJpY3Rpb25TZWxlY3Rpb25Pbmx5OworICAgIGQtPm1fdmlldy0+
c2V0UGFpbnRSZXN0cmljdGlvbihmb3JjZUJsYWNrVGV4dCA/IFBhaW50UmVzdHJpY3Rpb25TZWxl
Y3Rpb25Pbmx5QmxhY2tUZXh0IDogUGFpbnRSZXN0cmljdGlvblNlbGVjdGlvbk9ubHkpOwogICAg
IGQtPm1fZG9jLT51cGRhdGVMYXlvdXQoKTsKICAgICBOU0ltYWdlKiByZXN1bHQgPSBpbWFnZUZy
b21SZWN0KHNlbGVjdGlvblJlY3QoKSk7Ci0gICAgZC0+bV9wYWludFJlc3RyaWN0aW9uID0gUGFp
bnRSZXN0cmljdGlvbk5vbmU7CisgICAgZC0+bV92aWV3LT5zZXRQYWludFJlc3RyaWN0aW9uKFBh
aW50UmVzdHJpY3Rpb25Ob25lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMzUsMTEg
KzMzNSwxMSBAQCBOU0ltYWdlKiBGcmFtZTo6c25hcHNob3REcmFnSW1hZ2UoTm9kZSogCiAgICAg
SW50UmVjdCB0b3BMZXZlbFJlY3Q7CiAgICAgTlNSZWN0IHBhaW50aW5nUmVjdCA9IHJlbmRlcmVy
LT5wYWludGluZ1Jvb3RSZWN0KHRvcExldmVsUmVjdCk7CiAKLSAgICBkLT5tX2VsZW1lbnRUb0Ry
YXcgPSBub2RlOyAgICAgICAgICAgICAgLy8gaW52b2tlIHNwZWNpYWwgc3ViLXRyZWUgZHJhd2lu
ZyBtb2RlCisgICAgZC0+bV92aWV3LT5zZXROb2RlVG9EcmF3KG5vZGUpOyAgICAgICAgICAgICAg
Ly8gaW52b2tlIHNwZWNpYWwgc3ViLXRyZWUgZHJhd2luZyBtb2RlCiAgICAgTlNJbWFnZSogcmVz
dWx0ID0gaW1hZ2VGcm9tUmVjdChwYWludGluZ1JlY3QpOwogICAgIHJlbmRlcmVyLT51cGRhdGVE
cmFnU3RhdGUoZmFsc2UpOwogICAgIGQtPm1fZG9jLT51cGRhdGVMYXlvdXQoKTsKLSAgICBkLT5t
X2VsZW1lbnRUb0RyYXcgPSAwOworICAgIGQtPm1fdmlldy0+c2V0Tm9kZVRvRHJhdygwKTsKIAog
ICAgIGlmIChlbGVtZW50UmVjdCkKICAgICAgICAgKmVsZW1lbnRSZWN0ID0gdG9wTGV2ZWxSZWN0
OwpAQCAtMzU5LDkgKzM1OSw5IEBAIE5TSW1hZ2UqIEZyYW1lOjpub2RlSW1hZ2UoTm9kZSogbm9k
ZSkgY28KICAgICBJbnRSZWN0IHRvcExldmVsUmVjdDsKICAgICBOU1JlY3QgcGFpbnRpbmdSZWN0
ID0gcmVuZGVyZXItPnBhaW50aW5nUm9vdFJlY3QodG9wTGV2ZWxSZWN0KTsKIAotICAgIGQtPm1f
ZWxlbWVudFRvRHJhdyA9IG5vZGU7IC8vIGludm9rZSBzcGVjaWFsIHN1Yi10cmVlIGRyYXdpbmcg
bW9kZQorICAgIGQtPm1fdmlldy0+c2V0Tm9kZVRvRHJhdyhub2RlKTsgLy8gaW52b2tlIHNwZWNp
YWwgc3ViLXRyZWUgZHJhd2luZyBtb2RlCiAgICAgTlNJbWFnZSogcmVzdWx0ID0gaW1hZ2VGcm9t
UmVjdChwYWludGluZ1JlY3QpOwotICAgIGQtPm1fZWxlbWVudFRvRHJhdyA9IDA7CisgICAgZC0+
bV92aWV3LT5zZXROb2RlVG9EcmF3KDApOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6
IFdlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL3dpbi9GcmFtZUNHV2luLmNwcAkocmV2aXNpb24gMzcwODYpCisrKyBXZWJDb3JlL3BhZ2Uv
d2luL0ZyYW1lQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRp
YyB2b2lkIGRyYXdSZWN0SW50b0NvbnRleHQoSW50UmVjdCAKIAogSEJJVE1BUCBpbWFnZUZyb21T
ZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBib29sIGZvcmNlQmxhY2tUZXh0KQogewotICAgIGZyYW1l
LT5zZXRQYWludFJlc3RyaWN0aW9uKGZvcmNlQmxhY2tUZXh0ID8gUGFpbnRSZXN0cmljdGlvblNl
bGVjdGlvbk9ubHlCbGFja1RleHQgOiBQYWludFJlc3RyaWN0aW9uU2VsZWN0aW9uT25seSk7Cisg
ICAgZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRSZXN0cmljdGlvbihmb3JjZUJsYWNrVGV4dCA/IFBh
aW50UmVzdHJpY3Rpb25TZWxlY3Rpb25Pbmx5QmxhY2tUZXh0IDogUGFpbnRSZXN0cmljdGlvblNl
bGVjdGlvbk9ubHkpOwogICAgIEZsb2F0UmVjdCBmciA9IGZyYW1lLT5zZWxlY3Rpb25SZWN0KCk7
CiAgICAgSW50UmVjdCBpcihzdGF0aWNfY2FzdDxpbnQ+KGZyLngoKSksIHN0YXRpY19jYXN0PGlu
dD4oZnIueSgpKSwKICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oZnIud2lkdGgoKSks
IHN0YXRpY19jYXN0PGludD4oZnIuaGVpZ2h0KCkpKTsKQEAgLTc5LDcgKzc5LDcgQEAgSEJJVE1B
UCBpbWFnZUZyb21TZWxlY3Rpb24oRnJhbWUqIGZyYW1lLAogICAgIFNlbGVjdE9iamVjdChoZGMs
IGhibXBPbGQpOwogICAgIERlbGV0ZURDKGhkYyk7CiAKLSAgICBmcmFtZS0+c2V0UGFpbnRSZXN0
cmljdGlvbihQYWludFJlc3RyaWN0aW9uTm9uZSk7CisgICAgZnJhbWUtPnZpZXcoKS0+c2V0UGFp
bnRSZXN0cmljdGlvbihQYWludFJlc3RyaWN0aW9uTm9uZSk7CiAKICAgICByZXR1cm4gaGJtcDsK
IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gMzcxMDUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYs
MTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIK
IAogdXNpbmcgc3RkOjptYXg7CiAKQEAgLTQzLDYgKzQ1LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojpp
bml0KCkKICAgICAgICAgcGxhdGZvcm1TZXRDYW5CbGl0T25TY3JvbGwoKTsKICAgICBtX3Njcm9s
bGJhcnNBdm9pZGluZ1Jlc2l6ZXIgPSAwOwogICAgIG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgPSBm
YWxzZTsKKyAgICBtX2RyYXdQYW5TY3JvbGxJY29uID0gZmFsc2U7CiB9CiAKIHZvaWQgU2Nyb2xs
Vmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkgCkBAIC0zNTYsNiArMzU5LDc2IEBAIHZvaWQg
U2Nyb2xsVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUKICAgICBob3N0V2luZG93KCktPnJl
cGFpbnQoY29udGVudHNUb1dpbmRvdyhyZWN0KSwgdHJ1ZSwgbm93KTsKIH0KIAordm9pZCBTY3Jv
bGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpIHsKKyAgICAgICAgV2lkZ2V0OjpwYWlu
dChjb250ZXh0LCByZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjb250
ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgJiYgIWNvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgZG9jdW1lbnREaXJ0eVJlY3QgPSBy
ZWN0OworICAgIGRvY3VtZW50RGlydHlSZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7CisKKyAg
ICBjb250ZXh0LT5zYXZlKCk7CisKKyAgICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOwor
ICAgIGRvY3VtZW50RGlydHlSZWN0Lm1vdmUoLXgoKSwgLXkoKSk7CisKKyAgICBjb250ZXh0LT50
cmFuc2xhdGUoLXNjcm9sbFgoKSwgLXNjcm9sbFkoKSk7CisgICAgZG9jdW1lbnREaXJ0eVJlY3Qu
bW92ZShzY3JvbGxYKCksIHNjcm9sbFkoKSk7CisKKyAgICBjb250ZXh0LT5jbGlwKHZpc2libGVD
b250ZW50UmVjdCgpKTsKKworICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgZG9jdW1lbnREaXJ0
eVJlY3QpOworCisgICAgY29udGV4dC0+cmVzdG9yZSgpOworCisgICAgLy8gTm93IHBhaW50IHRo
ZSBzY3JvbGxiYXJzLgorICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiAobV9ob3Jp
em9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXIpKSB7CisgICAgICAgIGNvbnRl
eHQtPnNhdmUoKTsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxWaWV3RGlydHlSZWN0ID0gcmVjdDsK
KyAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOworICAg
ICAgICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOworICAgICAgICBzY3JvbGxWaWV3RGly
dHlSZWN0Lm1vdmUoLXgoKSwgLXkoKSk7CisgICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxi
YXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnBhaW50KGNvbnRleHQsIHNj
cm9sbFZpZXdEaXJ0eVJlY3QpOworICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAg
ICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnBhaW50KGNvbnRleHQsIHNjcm9sbFZpZXdE
aXJ0eVJlY3QpOworCisgICAgICAgIEludFJlY3QgaENvcm5lcjsKKyAgICAgICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhciAmJiB3aWR0aCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0
aCgpID4gMCkgeworICAgICAgICAgICAgaENvcm5lciA9IEludFJlY3QobV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkg
LSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2lkdGgoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkp
OworICAgICAgICAgICAgaWYgKGhDb3JuZXIuaW50ZXJzZWN0cyhzY3JvbGxWaWV3RGlydHlSZWN0
KSkKKyAgICAgICAgICAgICAgICBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+cGFpbnRT
Y3JvbGxDb3JuZXIodGhpcywgY29udGV4dCwgaENvcm5lcik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBoZWlnaHQoKSAtIG1fdmVydGljYWxTY3JvbGxi
YXItPmhlaWdodCgpID4gMCkgeworICAgICAgICAgICAgSW50UmVjdCB2Q29ybmVyKHdpZHRoKCkg
LSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVpZ2h0KCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAg
ICAgICAgICBpZiAodkNvcm5lciAhPSBoQ29ybmVyICYmIHZDb3JuZXIuaW50ZXJzZWN0cyhzY3Jv
bGxWaWV3RGlydHlSZWN0KSkKKyAgICAgICAgICAgICAgICBTY3JvbGxiYXJUaGVtZTo6bmF0aXZl
VGhlbWUoKS0+cGFpbnRTY3JvbGxDb3JuZXIodGhpcywgY29udGV4dCwgdkNvcm5lcik7CisgICAg
ICAgIH0KKworICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgfQorCisgICAgLy8gUGFp
bnQgdGhlIHBhblNjcm9sbCBJY29uCisgICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gcGFuU2Nyb2xs
SWNvbjsKKyAgICBpZiAobV9kcmF3UGFuU2Nyb2xsSWNvbikgeworICAgICAgICBpZiAoIXBhblNj
cm9sbEljb24pCisgICAgICAgICAgICBwYW5TY3JvbGxJY29uID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJwYW5JY29uIik7CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShwYW5TY3Jv
bGxJY29uLmdldCgpLCBtX3BhblNjcm9sbEljb25Qb2ludCk7CisgICAgfQorfQorCiAjaWYgIVBM
QVRGT1JNKE1BQykKIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDYW5CbGl0T25TY3JvbGwo
KQogewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDM3MTEzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw4ICsxODQsMTIg
QEAgcHVibGljOgogICAgIEludFBvaW50IHNjcmVlblRvQ29udGVudHMoY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKICNlbmRpZgogCisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCByZXBh
aW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KSA9IDA7CisKICAgICB2b2lkIHVwZGF0ZVdpbmRvd1Jl
Y3QoY29uc3QgSW50UmVjdCYsIGJvb2wgbm93ID0gZmFsc2UpOwogCiBwcml2YXRlOgpAQCAtMjAy
LDYgKzIwNiw5IEBAIHByaXZhdGU6CiAgICAgaW50IG1fc2Nyb2xsYmFyc0F2b2lkaW5nUmVzaXpl
cjsKICAgICBib29sIG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQ7CiAKKyAgICBJbnRQb2ludCBtX3Bh
blNjcm9sbEljb25Qb2ludDsKKyAgICBib29sIG1fZHJhd1BhblNjcm9sbEljb247CisKICAgICB2
b2lkIGluaXQoKTsKIAogICAgIHZvaWQgcGxhdGZvcm1BZGRDaGlsZChXaWRnZXQqKTsKQEAgLTIz
NSw4ICsyNDIsNiBAQCBwcml2YXRlOgogICAgIAogI2lmICFQTEFURk9STShNQUMpICYmICFQTEFU
Rk9STShXWCkKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOwotCiAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25z
dCBJbnRSZWN0Jik7CiAKICAgICB2b2lkIGFkZFRvRGlydHlSZWdpb24oY29uc3QgSW50UmVjdCYp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaAkocmV2aXNpb24gMzcwODYpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVfaAogI2RlZmluZSBTY3JvbGxiYXJUaGVt
ZV9oCiAKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKIApAQCAtMzQsMTIgKzM1LDEzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFBsYXRmb3JtTW91c2VF
dmVudDsKIGNsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbFZpZXc7CiAKIGNsYXNzIFNjcm9s
bGJhclRoZW1lIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZSgpIHt9Owog
Ci0gICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhciosIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyKiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50
UmVjdCYgZGFtYWdlUmVjdCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFNjcm9sbGJh
clBhcnQgaGl0VGVzdChTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSB7IHJl
dHVybiBOb1BhcnQ7IH0KICAgICAKICAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3Mo
U2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKSB7IHJldHVybiAwOyB9CkBA
IC03Miw2ICs3NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUGFy
dChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0KSB7fQogCisgICAgdmlydHVhbCB2b2lkIHBhaW50
U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIGNvcm5lclJlY3QpIHsgY29udGV4dC0+ZmlsbFJlY3QoY29ybmVyUmVjdCwgQ29s
b3I6OndoaXRlKTsgfQorCiAgICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Ny
b2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNjcm9sbGJhciopIHsgcmV0dXJuIDA7IH0gLy8g
VGhlIHBvc2l0aW9uIG9mIHRoZSB0aHVtYiByZWxhdGl2ZSB0byB0aGUgdHJhY2suCiAgICAgdmly
dHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyKikgeyByZXR1cm4gMDsgfSAvLyBUaGUgbGVu
Z3RoIG9mIHRoZSB0aHVtYiBhbG9uZyB0aGUgYXhpcyBvZiB0aGUgc2Nyb2xsYmFyLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9u
IDM3MDg2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4MSw0ICsyODEsMTQgQEAgaW50IFNjcm9sbGJhclRoZW1lQ29t
cG9zaXRlOjp0cmFja0xlbmd0aAogICAgIHJldHVybiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gdHJhY2tSZWN0KHNjcm9sbGJhcikud2lkdGgoKSA6
IHRyYWNrUmVjdChzY3JvbGxiYXIpLmhlaWdodCgpOwogfQogCit2b2lkIFNjcm9sbGJhclRoZW1l
Q29tcG9zaXRlOjpwYWludFNjcm9sbENvcm5lcihTY3JvbGxWaWV3KiB2aWV3LCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpCit7CisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih2aWV3KTsKKyAgICBQYWdl
KiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkg
OiAwOworICAgIGlmIChwYWdlICYmIHBhZ2UtPnNldHRpbmdzKCktPnNob3VsZFBhaW50Q3VzdG9t
U2Nyb2xsYmFycygpKSB7CisgICAgICAgIGlmICghcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5w
YWludEN1c3RvbVNjcm9sbENvcm5lcihjb250ZXh0LCBjb3JuZXJSZWN0KSkKKyAgICAgICAgICAg
IGNvbnRleHQtPmZpbGxSZWN0KGNvcm5lclJlY3QsIENvbG9yOjp3aGl0ZSk7CisgICAgfQorfQor
CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oCShy
ZXZpc2lvbiAzNzA4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3Np
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBpbnQgdHJhY2tQb3NpdGlvbihTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIGludCB0cmFja0xl
bmd0aChTY3JvbGxiYXIqKTsKIAorICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbENvcm5lcihT
Y3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7
CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXIqKSA9
IDA7CiAgICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhciopID0gMDsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwCShyZXZpc2lvbiAzNzExMykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NjUsNjkgKzQ2NSw2IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAK
ICAgICBtX2RhdGEtPmluVXBkYXRlU2Nyb2xsYmFycyA9IGZhbHNlOwogfQogCi12b2lkIFNjcm9s
bFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0
byBmb3JrIEZyYW1lVmlldy5oLy5jcHAuCi0gICAgLy8gSW4gdGhlIGVuZCwgRnJhbWVWaWV3IHNo
b3VsZCBqdXN0IG1lcmdlIHdpdGggU2Nyb2xsVmlldy4KLSAgICBBU1NFUlQoaXNGcmFtZVZpZXco
KSk7Ci0KLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBJbnRSZWN0IGRvY3VtZW50RGlydHlSZWN0ID0gcmVjdDsKLSAgICBkb2N1bWVu
dERpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOwotCi0gICAgY29udGV4dC0+c2F2ZSgp
OwotCi0gICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgpKTsKLSAgICBkb2N1bWVudERpcnR5
UmVjdC5tb3ZlKC14KCksIC15KCkpOwotCi0gICAgY29udGV4dC0+dHJhbnNsYXRlKC1zY3JvbGxY
KCksIC1zY3JvbGxZKCkpOwotICAgIGRvY3VtZW50RGlydHlSZWN0Lm1vdmUoc2Nyb2xsWCgpLCBz
Y3JvbGxZKCkpOwotCi0gICAgY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVD
b250ZW50UmVjdCgpKSk7Ci0gICAgc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcykt
PmZyYW1lKCktPnBhaW50KGNvbnRleHQsIGRvY3VtZW50RGlydHlSZWN0KTsKLSAgICBjb250ZXh0
LT5yZXN0b3JlKCk7Ci0KLSAgICAvLyBOb3cgcGFpbnQgdGhlIHNjcm9sbGJhcnMuCi0gICAgaWYg
KCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIChtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgbV92
ZXJ0aWNhbFNjcm9sbGJhcikpIHsKLSAgICAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgICAgICBJ
bnRSZWN0IHNjcm9sbFZpZXdEaXJ0eVJlY3QgPSByZWN0OwotICAgICAgICBzY3JvbGxWaWV3RGly
dHlSZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7Ci0gICAgICAgIGNvbnRleHQtPnRyYW5zbGF0
ZSh4KCksIHkoKSk7Ci0gICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QubW92ZSgteCgpLCAteSgp
KTsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+cGFpbnQoY29udGV4dCwgc2Nyb2xsVmlld0RpcnR5UmVjdCk7Ci0g
ICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+cGFpbnQoY29udGV4dCwgc2Nyb2xsVmlld0RpcnR5UmVjdCk7Ci0KLSAgICAgICAg
LyoKLSAgICAgICAgICogRklYTUU6IFRPRE86IENoZWNrIGlmIHRoYXQgd29ya3Mgd2l0aCBSVEwK
LSAgICAgICAgICovCi0gICAgICAgIC8vIEZpbGwgdGhlIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0
ZS4KLSAgICAgICAgSW50UmVjdCBoQ29ybmVyOwotICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyICYmIHdpZHRoKCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCkgPiAwKSB7
Ci0gICAgICAgICAgICBoQ29ybmVyID0gSW50UmVjdChtX2hvcml6b250YWxTY3JvbGxiYXItPndp
ZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aWR0aCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgICAg
ICAgICBpZiAoaENvcm5lci5pbnRlcnNlY3RzKHNjcm9sbFZpZXdEaXJ0eVJlY3QpKQotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KGhDb3JuZXIsIENvbG9yOjp3aGl0ZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBoZWlnaHQoKSAtIG1f
dmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpID4gMCkgewotICAgICAgICAgICAgSW50UmVjdCB2
Q29ybmVyKHdpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5o
ZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAodkNvcm5lciAhPSBoQ29ybmVyICYmIHZDb3JuZXIu
aW50ZXJzZWN0cyhzY3JvbGxWaWV3RGlydHlSZWN0KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5maWxsUmVjdCh2Q29ybmVyLCBDb2xvcjo6d2hpdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y29udGV4dC0+cmVzdG9yZSgpOwotICAgIH0KLX0KLQogdm9pZCBTY3JvbGxWaWV3OjphZGRUb0Rp
cnR5UmVnaW9uKGNvbnN0IEludFJlY3QmIGNvbnRhaW5pbmdXaW5kb3dSZWN0KQogewogICAgIEFT
U0VSVChpc0ZyYW1lVmlldygpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmll
d1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5j
cHAJKHJldmlzaW9uIDM3MTEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksODEgKzM1OSw2IEBAIHZvaWQgU2Nyb2xsVmlldzo6
cGxhdGZvcm1SZW1vdmVDaGlsZChXaWQKICAgICByb290KCktPmRlY3JlbWVudE5hdGl2ZVdpZGdl
dENvdW50KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdTY3JvbGxiYXJDb3JuZXIoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmIFFUX1ZFUlNJT04g
PCAweDA0MDUwMAotICAgIGNvbnRleHQtPmZpbGxSZWN0KHJlY3QsIFFBcHBsaWNhdGlvbjo6cGFs
ZXR0ZSgpLmNvbG9yKFFQYWxldHRlOjpOb3JtYWwsIFFQYWxldHRlOjpXaW5kb3cpKTsKLSNlbHNl
Ci0gICAgUVN0eWxlT3B0aW9uIG9wdGlvbjsKLSAgICBvcHRpb24ucmVjdCA9IHJlY3Q7Ci0gICAg
UUFwcGxpY2F0aW9uOjpzdHlsZSgpLT5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxTY3Jv
bGxBcmVhQ29ybmVyLAotICAgICAgICAgICAgJm9wdGlvbiwgY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCksIDApOwotI2VuZGlmCi19Ci0KLQotdm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8gRklYTUU6
IFRoaXMgY29kZSBpcyBoZXJlIHNvIHdlIGRvbid0IGhhdmUgdG8gZm9yayBGcmFtZVZpZXcuaC8u
Y3BwLgotICAgIC8vIEluIHRoZSBlbmQsIEZyYW1lVmlldyBzaG91bGQganVzdCBtZXJnZSB3aXRo
IFNjcm9sbFZpZXcuCi0gICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOwotCi0gICAgaWYgKGNvbnRl
eHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBk
b2N1bWVudERpcnR5UmVjdCA9IHJlY3Q7Ci0KLSAgICBjb250ZXh0LT5zYXZlKCk7Ci0KLSAgICBj
b250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOwotICAgIGRvY3VtZW50RGlydHlSZWN0Lm1vdmUo
LXgoKSwgLXkoKSk7Ci0KLSAgICBjb250ZXh0LT50cmFuc2xhdGUoLXNjcm9sbFgoKSwgLXNjcm9s
bFkoKSk7Ci0gICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZShzY3JvbGxYKCksIHNjcm9sbFkoKSk7
Ci0KLSAgICBkb2N1bWVudERpcnR5UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdCh2aXNp
YmxlQ29udGVudFJlY3QoKSkpOwotICAgIGNvbnRleHQtPmNsaXAoZG9jdW1lbnREaXJ0eVJlY3Qp
OwotCi0gICAgc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyktPmZyYW1lKCktPnBh
aW50KGNvbnRleHQsIGRvY3VtZW50RGlydHlSZWN0KTsKLQotICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKLQotICAgIC8vIE5vdyBwYWludCB0aGUgc2Nyb2xsYmFycy4KLSAgICBpZiAoIW1fc2Nyb2xs
YmFyc1N1cHByZXNzZWQgJiYgKG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Ny
b2xsYmFyKSkgewotICAgICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIEludFJlY3Qgc2Ny
b2xsVmlld0RpcnR5UmVjdCA9IHJlY3Q7Ci0gICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QuaW50
ZXJzZWN0KGZyYW1lUmVjdCgpKTsKLSAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgp
KTsKLSAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5tb3ZlKC14KCksIC15KCkpOwotICAgICAg
ICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5wYWludChjb250ZXh0LCBzY3JvbGxWaWV3RGlydHlSZWN0KTsKLSAgICAgICAgaWYg
KG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5w
YWludChjb250ZXh0LCBzY3JvbGxWaWV3RGlydHlSZWN0KTsKLQotICAgICAgICAvLyBGaWxsIHRo
ZSBzY3JvbGwgY29ybmVycyB1c2luZyB0aGUgY3VycmVudCBRdCBzdHlsZQotICAgICAgICBJbnRS
ZWN0IGhDb3JuZXI7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgd2lkdGgo
KSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSA+IDApIHsKLSAgICAgICAgICAgIGhD
b3JuZXIgPSBJbnRSZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5o
ZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSBtX2hvcml6
b250YWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICAgICAgICAgIGlmIChoQ29ybmVy
LmludGVyc2VjdHMoc2Nyb2xsVmlld0RpcnR5UmVjdCkpCi0gICAgICAgICAgICAgICAgZHJhd1Nj
cm9sbGJhckNvcm5lcihjb250ZXh0LCBoQ29ybmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmIGhlaWdodCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+
aGVpZ2h0KCkgPiAwKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHZDb3JuZXIod2lkdGgoKSAtIG1f
dmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICAgICAg
ICAgIGlmICh2Q29ybmVyICE9IGhDb3JuZXIgJiYgdkNvcm5lci5pbnRlcnNlY3RzKHNjcm9sbFZp
ZXdEaXJ0eVJlY3QpKQotICAgICAgICAgICAgICAgIGRyYXdTY3JvbGxiYXJDb3JuZXIoY29udGV4
dCwgdkNvcm5lcik7Ci0gICAgICAgIH0KLQotICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0g
ICAgfQotfQotCiB2b2lkIFNjcm9sbFZpZXc6OmFkZFRvRGlydHlSZWdpb24oY29uc3QgSW50UmVj
dCYgY29udGFpbmluZ1dpbmRvd1JlY3QpCiB7CiAgICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwCShyZXZpc2lvbiAz
NzExMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMCw1ICsyMTAsMTcgQEAgaW50IFNjcm9sbGJhclRoZW1lUXQ6OnRyYWNr
TGVuZ3RoKFNjcm9sbAogICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IHRyYWNrLndpZHRoKCkgOiB0cmFjay5oZWlnaHQoKTsKIH0KIAor
dm9pZCBTY3JvbGxiYXJUaGVtZVF0OjpwYWludFNjcm9sbGJhckNvcm5lcihTY3JvbGxWaWV3Kiwg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworI2lmIFFU
X1ZFUlNJT04gPCAweDA0MDUwMAorICAgIGNvbnRleHQtPmZpbGxSZWN0KHJlY3QsIFFBcHBsaWNh
dGlvbjo6cGFsZXR0ZSgpLmNvbG9yKFFQYWxldHRlOjpOb3JtYWwsIFFQYWxldHRlOjpXaW5kb3cp
KTsKKyNlbHNlCisgICAgUVN0eWxlT3B0aW9uIG9wdGlvbjsKKyAgICBvcHRpb24ucmVjdCA9IHJl
Y3Q7CisgICAgUUFwcGxpY2F0aW9uOjpzdHlsZSgpLT5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVf
UGFuZWxTY3JvbGxBcmVhQ29ybmVyLAorICAgICAgICAgICAgJm9wdGlvbiwgY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCksIDApOworI2VuZGlmCit9CisKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9xdC9TY3JvbGxiYXJUaGVtZVF0LmgJKHJldmlzaW9uIDM3MTExKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDkg
QEAgY2xhc3MgU2Nyb2xsYmFyVGhlbWVRdCA6IHB1YmxpYyBTY3JvbGxiYQogcHVibGljOgogICAg
IHZpcnR1YWwgflNjcm9sbGJhclRoZW1lUXQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludChT
Y3JvbGxiYXIqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFn
ZVJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXIqLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRT
Y3JvbGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
IGNvcm5lclJlY3QpOworCiAgICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xs
YmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4uY3BwCShyZXZpc2lvbiAzNzEx
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw4ICs1OSw2IEBAIHB1YmxpYzoKICAgICBTY3JvbGxWaWV3UHJpdmF0ZShTY3Jv
bGxWaWV3KiB2aWV3KQogICAgICAgICA6IG1fdmlldyh2aWV3KQogICAgICAgICAsIG1faW5VcGRh
dGVTY3JvbGxiYXJzKGZhbHNlKQotICAgICAgICAsIG1fcGFuU2Nyb2xsSWNvblBvaW50KDAsMCkK
LSAgICAgICAgLCBtX2RyYXdQYW5TY3JvbGxJY29uKGZhbHNlKQogICAgIHsKICAgICB9CiAKQEAg
LTgzLDggKzgxLDYgQEAgcHVibGljOgogICAgIFNjcm9sbFZpZXcqIG1fdmlldzsKICAgICBib29s
IG1faW5VcGRhdGVTY3JvbGxiYXJzOwogICAgIEhSR04gbV9kaXJ0eVJlZ2lvbjsKLSAgICBJbnRQ
b2ludCBtX3BhblNjcm9sbEljb25Qb2ludDsKLSAgICBib29sIG1fZHJhd1BhblNjcm9sbEljb247
CiB9OwogCiBjb25zdCBpbnQgcGFuSWNvblNpemVMZW5ndGggPSAyMDsKQEAgLTE0NSw5ICsxNDEs
OSBAQCB2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzY3JvCiAgICAgUkVDVCBy
ID0gdXBkYXRlUmVjdDsKICAgICA6OkludmFsaWRhdGVSZWN0KGNvbnRhaW5pbmdXaW5kb3dIYW5k
bGUsICZyLCBmYWxzZSk7CiAKLSAgICBpZiAobV9kcmF3UGFuU2Nyb2xsSWNvbikgeworICAgIGlm
IChtX3ZpZXctPm1fZHJhd1BhblNjcm9sbEljb24pIHsKICAgICAgICAgaW50IHBhbkljb25EaXJ0
eVNxdWFyZVNpemVMZW5ndGggPSAyICogKHBhbkljb25TaXplTGVuZ3RoICsgbWF4KGFicyhzY3Jv
bGxEZWx0YS53aWR0aCgpKSwgYWJzKHNjcm9sbERlbHRhLmhlaWdodCgpKSkpOyAvLyBXZSBvbmx5
IHdhbnQgdG8gcmVwYWludCB3aGF0J3MgbmVjZXNzYXJ5Ci0gICAgICAgIEludFBvaW50IHBhbklj
b25EaXJ0eVNxdWFyZUxvY2F0aW9uID0gSW50UG9pbnQobV9wYW5TY3JvbGxJY29uUG9pbnQueCgp
IC0gKHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGggLyAyKSwgbV9wYW5TY3JvbGxJY29uUG9p
bnQueSgpIC0gKHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGggLyAyKSk7CisgICAgICAgIElu
dFBvaW50IHBhbkljb25EaXJ0eVNxdWFyZUxvY2F0aW9uID0gSW50UG9pbnQobV92aWV3LT5tX3Bh
blNjcm9sbEljb25Qb2ludC54KCkgLSAocGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCAvIDIp
LCBtX3ZpZXctPm1fcGFuU2Nyb2xsSWNvblBvaW50LnkoKSAtIChwYW5JY29uRGlydHlTcXVhcmVT
aXplTGVuZ3RoIC8gMikpOwogICAgICAgICBJbnRSZWN0IHBhblNjcm9sbEljb25EaXJ0eVJlY3Qg
PSBJbnRSZWN0KHBhbkljb25EaXJ0eVNxdWFyZUxvY2F0aW9uICwgSW50U2l6ZShwYW5JY29uRGly
dHlTcXVhcmVTaXplTGVuZ3RoLCBwYW5JY29uRGlydHlTcXVhcmVTaXplTGVuZ3RoKSk7CiAgICAg
ICAgIAogICAgICAgICBtX3ZpZXctPnVwZGF0ZVdpbmRvd1JlY3QocGFuU2Nyb2xsSWNvbkRpcnR5
UmVjdCk7CkBAIC0zNTYsOTggKzM1MiwxNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9s
bGJhcnMoY29uc3QgCiAKIHZvaWQgU2Nyb2xsVmlldzo6cHJpbnRQYW5TY3JvbGxJY29uKGNvbnN0
IEludFBvaW50JiBpY29uUG9zaXRpb24pCiB7Ci0gICAgbV9kYXRhLT5tX2RyYXdQYW5TY3JvbGxJ
Y29uID0gdHJ1ZTsgICAgCi0gICAgbV9kYXRhLT5tX3BhblNjcm9sbEljb25Qb2ludCA9IEludFBv
aW50KGljb25Qb3NpdGlvbi54KCkgLSBwYW5JY29uU2l6ZUxlbmd0aCAvIDIgLCBpY29uUG9zaXRp
b24ueSgpIC0gcGFuSWNvblNpemVMZW5ndGggLyAyKSA7CisgICAgbV9kcmF3UGFuU2Nyb2xsSWNv
biA9IHRydWU7ICAgIAorICAgIG1fcGFuU2Nyb2xsSWNvblBvaW50ID0gSW50UG9pbnQoaWNvblBv
c2l0aW9uLngoKSAtIHBhbkljb25TaXplTGVuZ3RoIC8gMiAsIGljb25Qb3NpdGlvbi55KCkgLSBw
YW5JY29uU2l6ZUxlbmd0aCAvIDIpIDsKIAotICAgIHVwZGF0ZVdpbmRvd1JlY3QoSW50UmVjdCht
X2RhdGEtPm1fcGFuU2Nyb2xsSWNvblBvaW50LCBJbnRTaXplKHBhbkljb25TaXplTGVuZ3RoLHBh
bkljb25TaXplTGVuZ3RoKSksIHRydWUpOyAgICAKKyAgICB1cGRhdGVXaW5kb3dSZWN0KEludFJl
Y3QobV9wYW5TY3JvbGxJY29uUG9pbnQsIEludFNpemUocGFuSWNvblNpemVMZW5ndGgscGFuSWNv
blNpemVMZW5ndGgpKSwgdHJ1ZSk7ICAgIAogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnJlbW92ZVBh
blNjcm9sbEljb24oKQogewotICAgIG1fZGF0YS0+bV9kcmF3UGFuU2Nyb2xsSWNvbiA9IGZhbHNl
OyAKKyAgICBtX2RyYXdQYW5TY3JvbGxJY29uID0gZmFsc2U7IAogCi0gICAgdXBkYXRlV2luZG93
UmVjdChJbnRSZWN0KG1fZGF0YS0+bV9wYW5TY3JvbGxJY29uUG9pbnQsIEludFNpemUocGFuSWNv
blNpemVMZW5ndGgsIHBhbkljb25TaXplTGVuZ3RoKSksIHRydWUpOwotfQotCi12b2lkIFNjcm9s
bFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0
byBmb3JrIEZyYW1lVmlldy5oLy5jcHAuCi0gICAgLy8gSW4gdGhlIGVuZCwgRnJhbWVWaWV3IHNo
b3VsZCBqdXN0IG1lcmdlIHdpdGggU2Nyb2xsVmlldy4KLSAgICBBU1NFUlQoaXNGcmFtZVZpZXco
KSk7Ci0KLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpICYmICFjb250ZXh0LT51
cGRhdGluZ0NvbnRyb2xUaW50cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRv
Y3VtZW50RGlydHlSZWN0ID0gcmVjdDsKLSAgICBkb2N1bWVudERpcnR5UmVjdC5pbnRlcnNlY3Qo
ZnJhbWVSZWN0KCkpOwotCi0gICAgY29udGV4dC0+c2F2ZSgpOwotCi0gICAgY29udGV4dC0+dHJh
bnNsYXRlKHgoKSwgeSgpKTsKLSAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKC14KCksIC15KCkp
OwotCi0gICAgY29udGV4dC0+dHJhbnNsYXRlKC1zY3JvbGxYKCksIC1zY3JvbGxZKCkpOwotICAg
IGRvY3VtZW50RGlydHlSZWN0Lm1vdmUoc2Nyb2xsWCgpLCBzY3JvbGxZKCkpOwotCi0gICAgY29u
dGV4dC0+Y2xpcCh2aXNpYmxlQ29udGVudFJlY3QoKSk7Ci0KLSAgICBjb25zdCBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMpOwotICAgIGZy
YW1lVmlldy0+ZnJhbWUoKS0+cGFpbnQoY29udGV4dCwgZG9jdW1lbnREaXJ0eVJlY3QpOwotCi0g
ICAgY29udGV4dC0+cmVzdG9yZSgpOwotCi0gICAgLy8gTm93IHBhaW50IHRoZSBzY3JvbGxiYXJz
LgotICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiAobV9ob3Jpem9udGFsU2Nyb2xs
YmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXIpKSB7Ci0gICAgICAgIGNvbnRleHQtPnNhdmUoKTsK
LSAgICAgICAgSW50UmVjdCBzY3JvbGxWaWV3RGlydHlSZWN0ID0gcmVjdDsKLSAgICAgICAgc2Ny
b2xsVmlld0RpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOwotICAgICAgICBjb250ZXh0
LT50cmFuc2xhdGUoeCgpLCB5KCkpOwotICAgICAgICBzY3JvbGxWaWV3RGlydHlSZWN0Lm1vdmUo
LXgoKSwgLXkoKSk7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnBhaW50KGNvbnRleHQsIHNjcm9sbFZpZXdEaXJ0
eVJlY3QpOwotICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnBhaW50KGNvbnRleHQsIHNjcm9sbFZpZXdEaXJ0eVJlY3QpOwot
Ci0gICAgICAgIC8vIEZpbGwgdGhlIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZS4KLSAgICAgICAg
SW50UmVjdCBoQ29ybmVyOwotICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmIHdp
ZHRoKCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCkgPiAwKSB7Ci0gICAgICAgICAg
ICBoQ29ybmVyID0gSW50UmVjdChtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAoaENv
cm5lci5pbnRlcnNlY3RzKHNjcm9sbFZpZXdEaXJ0eVJlY3QpKSB7Ci0gICAgICAgICAgICAgICAg
UGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFn
ZSgpIDogMDsKLSAgICAgICAgICAgICAgICBpZiAocGFnZSAmJiBwYWdlLT5zZXR0aW5ncygpLT5z
aG91bGRQYWludEN1c3RvbVNjcm9sbGJhcnMoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IXBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoY29udGV4
dCwgaENvcm5lcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdCho
Q29ybmVyLCBDb2xvcjo6d2hpdGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmIGhlaWdodCgp
IC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkgPiAwKSB7Ci0gICAgICAgICAgICBJbnRS
ZWN0IHZDb3JuZXIod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1fdmVydGljYWxTY3JvbGxi
YXItPmhlaWdodCgpKTsKLSAgICAgICAgICAgIGlmICh2Q29ybmVyICE9IGhDb3JuZXIgJiYgdkNv
cm5lci5pbnRlcnNlY3RzKHNjcm9sbFZpZXdEaXJ0eVJlY3QpKSB7Ci0gICAgICAgICAgICAgICAg
UGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFn
ZSgpIDogMDsKLSAgICAgICAgICAgICAgICBpZiAocGFnZSAmJiBwYWdlLT5zZXR0aW5ncygpLT5z
aG91bGRQYWludEN1c3RvbVNjcm9sbGJhcnMoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IXBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoY29udGV4
dCwgdkNvcm5lcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdCh2
Q29ybmVyLCBDb2xvcjo6d2hpdGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICAv
L1BhaW50IHRoZSBwYW5TY3JvbGwgSWNvbgotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHBhblNj
cm9sbEljb247Ci0gICAgaWYgKG1fZGF0YS0+bV9kcmF3UGFuU2Nyb2xsSWNvbikgewotICAgICAg
ICBpZiAoIXBhblNjcm9sbEljb24pCi0gICAgICAgICAgICBwYW5TY3JvbGxJY29uID0gSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJwYW5JY29uIik7Ci0gICAgICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShwYW5TY3JvbGxJY29uLmdldCgpLCBtX2RhdGEtPm1fcGFuU2Nyb2xsSWNvblBvaW50KTsK
LSAgICB9CisgICAgdXBkYXRlV2luZG93UmVjdChJbnRSZWN0KG1fcGFuU2Nyb2xsSWNvblBvaW50
LCBJbnRTaXplKHBhbkljb25TaXplTGVuZ3RoLCBwYW5JY29uU2l6ZUxlbmd0aCkpLCB0cnVlKTsK
IH0KIAogdm9pZCBTY3JvbGxWaWV3Ojp0aGVtZUNoYW5nZWQoKQpJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMzcwODYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFNWR0lt
YWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgCiAgICAgaWYgKG1fZnJhbWUtPnZp
ZXcoKS0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAgbV9mcmFtZS0+dmlldygpLT5sYXlvdXQoKTsK
LSAgICBtX2ZyYW1lLT5wYWludChjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHNyY1JlY3QpKTsK
KyAgICBtX2ZyYW1lLT52aWV3KCktPnBhaW50KGNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qoc3Jj
UmVjdCkpOwogCiAgICAgaWYgKGNvbXBvc2l0ZU9wICE9IENvbXBvc2l0ZVNvdXJjZU92ZXIpCiAg
ICAgICAgIGNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CkluZGV4OiBXZWJLaXQvbWFj
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24g
MzcxMzkpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI1IEBACisyMDA4LTA5LTMwICAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNjkKKyAgCisg
ICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIFNjcm9sbFZpZXc6OnBhaW50IG1ldGhvZCBjcm9z
cy1wbGF0Zm9ybS4gIFRoZSBwYWludCBtZXRob2QgY2FsbHMgdGhlIGJhc2UgY2xhc3MKKyAgICAg
ICAgV2lkZ2V0IHBhaW50IG9uIHBsYXRmb3JtcyB3aXRoIG5hdGl2ZSB3aWRnZXRzIChNYWMgYW5k
IHd4KS4gIE90aGVyd2lzZSBpdCBjYWxscyBhIHZpcnR1YWwgZnVuY3Rpb24sCisgICAgICAgIHBh
aW50Q29udGVudHMsIHRvIHBhaW50IHRoZSBTY3JvbGxWaWV3J3MgY29udGVudHMsIGFuZCB0aGVu
IGl0IHBhaW50cyBlYWNoIG9mIHRoZSB0d28gc2Nyb2xsYmFycyBhbmQKKyAgICAgICAgdGhlIHNj
cm9sbGJhciBjb3JuZXIuCisgICAgICAgIAorICAgICAgICBUaGUgc2Nyb2xsYmFyIHRoZW1lcyBh
cmUgbm93IHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBzY3JvbGxiYXIgY29ybmVycy4gIEF0IHRo
ZSBtb21lbnQgU2Nyb2xsYmFyVGhlbWVXaW4gc3RpbGwKKyAgICAgICAgcGFpbnRzIHdoaXRlICh3
aGljaCBpcyBpbmNvcnJlY3QpLCBzbyBhIGZ1dHVyZSBwYXRjaCB3aWxsIGFjdHVhbGx5IGltcGxl
bWVudCBwcm9wZXIgbmF0aXZlIHNjcm9sbCBjb3JuZXIgcGFpbnRpbmcKKyAgICAgICAgZm9yIFdp
bmRvd3MuCisgICAgICAgIAorICAgICAgICBwYWludENvbnRlbnRzIGlzIGltcGxlbWVudGVkIGJ5
IEZyYW1lVmlldywgYW5kIHJlcGxhY2VzIEZyYW1lOjpwYWludC4gIEFsbCBvZiB0aGUgRnJhbWVQ
cml2YXRlIG1lbWJlcgorICAgICAgICB2YXJpYWJsZXMgdXNlZCBieSBGcmFtZTo6cGFpbnQgaGF2
ZSBtb3ZlZCB0byBGcmFtZVZpZXdQcml2YXRlIGluc3RlYWQuICBBbGwgY2FsbGVycyBvZiBGcmFt
ZTo6cGFpbnQgaGF2ZQorICAgICAgICBiZWVuIHBhdGNoZWQgdG8gdXNlIEZyYW1lVmlldzo6cGFp
bnRDb250ZW50cyBpbnN0ZWFkLgorICAgICAgIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dl
YkZyYW1lIF9kcmF3UmVjdDpdKToKKwogMjAwOC0wOS0zMCAgS2V2aW4gRGVja2VyICA8a2RlY2tl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMzcwODYpCisrKyBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTU1OSw3ICs1NTksNyBAQCBzdGF0
aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiAgICAgQVNTRVJUKFtbTlNHcmFw
aGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRmxpcHBlZF0pOwogICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KHBsYXRmb3JtQ29udGV4dCk7CiAgICAgCi0gICAgX3ByaXZhdGUtPmNvcmVG
cmFtZS0+cGFpbnQoJmNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOworICAgIF9wcml2
YXRlLT5jb3JlRnJhbWUtPnZpZXcoKS0+cGFpbnRDb250ZW50cygmY29udGV4dCwgZW5jbG9zaW5n
SW50UmVjdChyZWN0KSk7CiB9CiAKIC8vIFVzZWQgYnkgcGFnaW5hdGlvbiBjb2RlIGNhbGxlZCBm
cm9tIEFwcEtpdCB3aGVuIGEgc3RhbmRhbG9uZSB3ZWIgcGFnZSBpcyBwcmludGVkLgpJbmRleDog
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDM3MTM5KQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyNiBAQAorMjAwOC0wOS0zMCAgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5j
b20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MjY5CisgIAorICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHRoZSBTY3JvbGxWaWV3OjpwYWludCBt
ZXRob2QgY3Jvc3MtcGxhdGZvcm0uICBUaGUgcGFpbnQgbWV0aG9kIGNhbGxzIHRoZSBiYXNlIGNs
YXNzCisgICAgICAgIFdpZGdldCBwYWludCBvbiBwbGF0Zm9ybXMgd2l0aCBuYXRpdmUgd2lkZ2V0
cyAoTWFjIGFuZCB3eCkuICBPdGhlcndpc2UgaXQgY2FsbHMgYSB2aXJ0dWFsIGZ1bmN0aW9uLAor
ICAgICAgICBwYWludENvbnRlbnRzLCB0byBwYWludCB0aGUgU2Nyb2xsVmlldydzIGNvbnRlbnRz
LCBhbmQgdGhlbiBpdCBwYWludHMgZWFjaCBvZiB0aGUgdHdvIHNjcm9sbGJhcnMgYW5kCisgICAg
ICAgIHRoZSBzY3JvbGxiYXIgY29ybmVyLgorICAgICAgICAKKyAgICAgICAgVGhlIHNjcm9sbGJh
ciB0aGVtZXMgYXJlIG5vdyByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgc2Nyb2xsYmFyIGNvcm5l
cnMuICBBdCB0aGUgbW9tZW50IFNjcm9sbGJhclRoZW1lV2luIHN0aWxsCisgICAgICAgIHBhaW50
cyB3aGl0ZSAod2hpY2ggaXMgaW5jb3JyZWN0KSwgc28gYSBmdXR1cmUgcGF0Y2ggd2lsbCBhY3R1
YWxseSBpbXBsZW1lbnQgcHJvcGVyIG5hdGl2ZSBzY3JvbGwgY29ybmVyIHBhaW50aW5nCisgICAg
ICAgIGZvciBXaW5kb3dzLgorICAgICAgICAKKyAgICAgICAgcGFpbnRDb250ZW50cyBpcyBpbXBs
ZW1lbnRlZCBieSBGcmFtZVZpZXcsIGFuZCByZXBsYWNlcyBGcmFtZTo6cGFpbnQuICBBbGwgb2Yg
dGhlIEZyYW1lUHJpdmF0ZSBtZW1iZXIKKyAgICAgICAgdmFyaWFibGVzIHVzZWQgYnkgRnJhbWU6
OnBhaW50IGhhdmUgbW92ZWQgdG8gRnJhbWVWaWV3UHJpdmF0ZSBpbnN0ZWFkLiAgQWxsIGNhbGxl
cnMgb2YgRnJhbWU6OnBhaW50IGhhdmUKKyAgICAgICAgYmVlbiBwYXRjaGVkIHRvIHVzZSBGcmFt
ZVZpZXc6OnBhaW50Q29udGVudHMgaW5zdGVhZC4KKyAgICAgICAgCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAo
V2ViRnJhbWU6OnBhaW50RG9jdW1lbnRSZWN0VG9Db250ZXh0KToKKyAgICAgICAgKFdlYkZyYW1l
OjpzcG9vbFBhZ2VzKToKKwogMjAwOC0wOS0zMCAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KIAogICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1
MApJbmRleDogV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dp
bi9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDM3MDg2KQorKysgV2ViS2l0L3dpbi9XZWJGcmFtZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkZyYW1lOjpwYWluCiAgICAgZGlydHlSZWN0LnNldEhlaWdodChoZWlnaHQpOwog
ICAgIGdjLmNsaXAoZGlydHlSZWN0KTsKICAgICBnYy50cmFuc2xhdGUoLXJlY3QubGVmdCwgLXJl
Y3QudG9wKTsKLSAgICBjb3JlRnJhbWUtPnBhaW50KCZnYywgcmVjdCk7CisgICAgdmlldy0+cGFp
bnQoJmdjLCByZWN0KTsKICAgICBnYy5yZXN0b3JlKCk7CiAKICAgICByZXR1cm4gU19PSzsKQEAg
LTE4MzksNyArMTgzOSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRnJhbWU6OnNw
b28KICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBjdHgsIENHRmxvYXQoLXBhZ2VSZWN0
LngoKSksIENHRmxvYXQoLXBhZ2VSZWN0LnkoKStoZWFkZXJIZWlnaHQpKTsgICAvLyByZXNlcnZl
cyBzcGFjZSBmb3IgaGVhZGVyCiAgICAgICAgIENHQ29udGV4dFNldEJhc2VDVE0ocGN0eCwgY3Rt
KTsKIAotICAgICAgICBjb3JlRnJhbWUtPnBhaW50KCZzcG9vbEN0eCwgcGFnZVJlY3QpOworICAg
ICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+cGFpbnQoJnNwb29sQ3R4LCBwYWdlUmVjdCk7CiAKICAg
ICAgICAgaWYgKHVpMikgewogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBjdHgs
IENHRmxvYXQocGFnZVJlY3QueCgpKSwgQ0dGbG9hdChwYWdlUmVjdC55KCkpLWhlYWRlckhlaWdo
dCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23970</attachid>
            <date>2008-10-01 00:02:35 -0700</date>
            <delta_ts>2008-10-01 09:35:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>46471</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzEzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzQgQEAKKzIwMDgtMDktMzAgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjY5
CisgIAorICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHRoZSBTY3JvbGxWaWV3OjpwYWludCBtZXRo
b2QgY3Jvc3MtcGxhdGZvcm0uICBUaGUgcGFpbnQgbWV0aG9kIGNhbGxzIHRoZSBiYXNlIGNsYXNz
CisgICAgICAgIFdpZGdldCBwYWludCBvbiBwbGF0Zm9ybXMgd2l0aCBuYXRpdmUgd2lkZ2V0cyAo
TWFjIGFuZCB3eCkuICBPdGhlcndpc2UgaXQgY2FsbHMgYSB2aXJ0dWFsIGZ1bmN0aW9uLAorICAg
ICAgICBwYWludENvbnRlbnRzLCB0byBwYWludCB0aGUgU2Nyb2xsVmlldydzIGNvbnRlbnRzLCBh
bmQgdGhlbiBpdCBwYWludHMgZWFjaCBvZiB0aGUgdHdvIHNjcm9sbGJhcnMgYW5kCisgICAgICAg
IHRoZSBzY3JvbGxiYXIgY29ybmVyLgorICAgICAgICAKKyAgICAgICAgVGhlIHNjcm9sbGJhciB0
aGVtZXMgYXJlIG5vdyByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgc2Nyb2xsYmFyIGNvcm5lcnMu
ICBBdCB0aGUgbW9tZW50IFNjcm9sbGJhclRoZW1lV2luIHN0aWxsCisgICAgICAgIHBhaW50cyB3
aGl0ZSAod2hpY2ggaXMgaW5jb3JyZWN0KSwgc28gYSBmdXR1cmUgcGF0Y2ggd2lsbCBhY3R1YWxs
eSBpbXBsZW1lbnQgcHJvcGVyIG5hdGl2ZSBzY3JvbGwgY29ybmVyIHBhaW50aW5nCisgICAgICAg
IGZvciBXaW5kb3dzLgorICAgICAgICAKKyAgICAgICAgcGFpbnRDb250ZW50cyBpcyBpbXBsZW1l
bnRlZCBieSBGcmFtZVZpZXcsIGFuZCByZXBsYWNlcyBGcmFtZTo6cGFpbnQuICBBbGwgb2YgdGhl
IEZyYW1lUHJpdmF0ZSBtZW1iZXIKKyAgICAgICAgdmFyaWFibGVzIHVzZWQgYnkgRnJhbWU6OnBh
aW50IGhhdmUgbW92ZWQgdG8gRnJhbWVWaWV3UHJpdmF0ZSBpbnN0ZWFkLiAgQWxsIGNhbGxlcnMg
b2YgRnJhbWU6OnBhaW50IGhhdmUKKyAgICAgICAgYmVlbiBwYXRjaGVkIHRvIHVzZSBGcmFtZVZp
ZXc6OnBhaW50Q29udGVudHMgaW5zdGVhZC4KKyAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBP
UiBDSEFOR0VECisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnBydW5lTGl2ZVJlc291cmNlcyk6CisgICAgICAgICog
bG9hZGVyL0NhY2hlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpk
aWREcmF3KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVQcml2
YXRlOjpGcmFtZVByaXZhdGUpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiBw
YWdlL0ZyYW1lUHJpdmF0ZS5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlld1ByaXZhdGU6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRl
Q29udHJvbFRpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFBhaW50UmVzdHJpY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojppc1BhaW50aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6c2V0Tm9kZVRvRHJhdyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y3VycmVudFBhaW50VGltZVN0YW1wKToK
KyAgICAgICAgKiBwYWdlL21hYy9GcmFtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZWxlY3Rpb25JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c25hcHNob3REcmFn
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Om5vZGVJbWFnZSk6CisgICAgICAgICog
cGFnZS93aW4vRnJhbWVDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbWFnZUZyb21TZWxl
Y3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpw
YWludCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGJhclRoZW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6OnBhaW50U2Nyb2xsQ29y
bmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6cGFpbnRTY3JvbGxDb3Ju
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1Njcm9sbFZpZXdRdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhl
bWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVF0OjpwYWludFNjcm9s
bGJhckNvcm5lcik6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpTY3JvbGxWaWV3UHJpdmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2Nyb2xsQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnByaW50UGFuU2Nyb2xs
SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpyZW1vdmVQYW5TY3JvbGxJY29u
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW1hZ2U6OmRyYXcpOgorCiAyMDA4LTA5LTMwICBEYW4gQmVybnN0ZWluICA8bWl0ekBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHJldmlzaW9uIDM3MTEzKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTA4LDggKzExMDgsOCBAQCB2b2lkIERvY3VtZW50OjpzZXREb2N1bWVudENo
YW5nZWQoYm9vbCBiCiB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFu
Z2UpCiB7CiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBlbnRlciBzdHlsZSByZWNhbGMgd2hpbGUgcGFp
bnRpbmcKLSAgICBpZiAoZnJhbWUoKSAmJiBmcmFtZSgpLT5pc1BhaW50aW5nKCkpIHsKLSAgICAg
ICAgQVNTRVJUKCFmcmFtZSgpLT5pc1BhaW50aW5nKCkpOworICAgIGlmIChmcmFtZSgpICYmIGZy
YW1lKCktPnZpZXcoKSAmJiBmcmFtZSgpLT52aWV3KCktPmlzUGFpbnRpbmcoKSkgeworICAgICAg
ICBBU1NFUlQoIWZyYW1lKCktPnZpZXcoKS0+aXNQYWludGluZygpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHJldmlzaW9uIDM3MDg2KQorKysgV2ViQ29y
ZS9sb2FkZXIvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAjaW5j
bHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCkBAIC0yNjks
NyArMjY5LDcgQEAgdm9pZCBDYWNoZTo6cHJ1bmVMaXZlUmVzb3VyY2VzKCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgdW5zaWduZWQgdGFyZ2V0U2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
YXBhY2l0eSAqIGNUYXJnZXRQcnVuZVBlcmNlbnRhZ2UpOyAvLyBDdXQgYnkgYSBwZXJjZW50YWdl
IHRvIGF2b2lkIGltbWVkaWF0ZWx5IHBydW5pbmcgYWdhaW4uCi0gICAgZG91YmxlIGN1cnJlbnRU
aW1lID0gRnJhbWU6OmN1cnJlbnRQYWludFRpbWVTdGFtcCgpOworICAgIGRvdWJsZSBjdXJyZW50
VGltZSA9IEZyYW1lVmlldzo6Y3VycmVudFBhaW50VGltZVN0YW1wKCk7CiAgICAgaWYgKCFjdXJy
ZW50VGltZSkgLy8gSW4gY2FzZSBwcnVuZSBpcyBjYWxsZWQgZGlyZWN0bHksIG91dHNpZGUgb2Yg
YSBGcmFtZSBwYWludC4KICAgICAgICAgY3VycmVudFRpbWUgPSBXZWJDb3JlOjpjdXJyZW50VGlt
ZSgpOwogICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gMzcwODYpCisr
KyBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJSZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAg
LTMwMSw3ICszMDEsNyBAQCB2b2lkIENhY2hlZEltYWdlOjpkaWREcmF3KGNvbnN0IEltYWdlKiBp
CiAgICAgaWYgKGltYWdlICE9IG1faW1hZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBk
b3VibGUgdGltZVN0YW1wID0gRnJhbWU6OmN1cnJlbnRQYWludFRpbWVTdGFtcCgpOworICAgIGRv
dWJsZSB0aW1lU3RhbXAgPSBGcmFtZVZpZXc6OmN1cnJlbnRQYWludFRpbWVTdGFtcCgpOwogICAg
IGlmICghdGltZVN0YW1wKSAvLyBJZiBkaWREcmF3IGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgRnJh
bWUgcGFpbnQuCiAgICAgICAgIHRpbWVTdGFtcCA9IGN1cnJlbnRUaW1lKCk7CiAgICAgCkluZGV4
OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHJldmlzaW9uIDM3MDg2KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTUsOCArOTUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWRvdWJsZSBG
cmFtZTo6c19jdXJyZW50UGFpbnRUaW1lU3RhbXAgPSAwLjA7Ci0KICNpZm5kZWYgTkRFQlVHICAg
IAogc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyIGZyYW1lQ291bnRlcigiRnJhbWUi
KTsKICNlbmRpZgpAQCAtMTI1NCw2OCArMTI1Miw2IEBAIHZvaWQgRnJhbWU6OnJldmVhbENhcmV0
KGNvbnN0IFJlbmRlckxheWUKICAgICB9CiB9CiAKLS8vIEZJWE1FOiB3aHkgaXMgdGhpcyBoZXJl
IGluc3RlYWQgb2Ygb24gdGhlIEZyYW1lVmlldz8KLXZvaWQgRnJhbWU6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
Ym9vbCBmaWxsV2l0aFJlZDsKLSAgICBpZiAoIWRvY3VtZW50KCkgfHwgZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSkKLSAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gUHJpbnRpbmcsIGRvbid0
IGZpbGwgd2l0aCByZWQgKGNhbid0IHJlbWVtYmVyIHdoeSkuCi0gICAgZWxzZSBpZiAoZG9jdW1l
bnQoKS0+b3duZXJFbGVtZW50KCkpCi0gICAgICAgIGZpbGxXaXRoUmVkID0gZmFsc2U7IC8vIFN1
YmZyYW1lLCBkb24ndCBmaWxsIHdpdGggcmVkLgotICAgIGVsc2UgaWYgKHZpZXcoKSAmJiB2aWV3
KCktPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gVHJh
bnNwYXJlbnQsIGRvbid0IGZpbGwgd2l0aCByZWQuCi0gICAgZWxzZSBpZiAoZC0+bV9wYWludFJl
c3RyaWN0aW9uID09IFBhaW50UmVzdHJpY3Rpb25TZWxlY3Rpb25Pbmx5IHx8IGQtPm1fcGFpbnRS
ZXN0cmljdGlvbiA9PSBQYWludFJlc3RyaWN0aW9uU2VsZWN0aW9uT25seUJsYWNrVGV4dCkKLSAg
ICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gU2VsZWN0aW9ucyBhcmUgdHJhbnNwYXJlbnQs
IGRvbid0IGZpbGwgd2l0aCByZWQuCi0gICAgZWxzZSBpZiAoZC0+bV9lbGVtZW50VG9EcmF3KQot
ICAgICAgICBmaWxsV2l0aFJlZCA9IGZhbHNlOyAvLyBFbGVtZW50IGltYWdlcyBhcmUgdHJhbnNw
YXJlbnQsIGRvbid0IGZpbGwgd2l0aCByZWQuCi0gICAgZWxzZQotICAgICAgICBmaWxsV2l0aFJl
ZCA9IHRydWU7Ci0gICAgCi0gICAgaWYgKGZpbGxXaXRoUmVkKQotICAgICAgICBwLT5maWxsUmVj
dChyZWN0LCBDb2xvcigweEZGLCAwLCAwKSk7Ci0jZW5kaWYKLQotICAgIGJvb2wgaXNUb3BMZXZl
bFBhaW50ZXIgPSAhc19jdXJyZW50UGFpbnRUaW1lU3RhbXA7Ci0gICAgaWYgKGlzVG9wTGV2ZWxQ
YWludGVyKQotICAgICAgICBzX2N1cnJlbnRQYWludFRpbWVTdGFtcCA9IGN1cnJlbnRUaW1lKCk7
Ci0gICAgCi0gICAgaWYgKGNvbnRlbnRSZW5kZXJlcigpKSB7Ci0gICAgICAgIEFTU0VSVChkLT5t
X3ZpZXcgJiYgIWQtPm1fdmlldy0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgICAgIEFTU0VSVCghZC0+
bV9pc1BhaW50aW5nKTsKLSAgICAgICAgCi0gICAgICAgIGQtPm1faXNQYWludGluZyA9IHRydWU7
Ci0gICAgICAgIAotICAgICAgICAvLyBkLT5tX2VsZW1lbnRUb0RyYXcgaXMgdXNlZCB0byBkcmF3
IG9ubHkgb25lIGVsZW1lbnQKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBlbHRSZW5kZXJlciA9IGQt
Pm1fZWxlbWVudFRvRHJhdyA/IGQtPm1fZWxlbWVudFRvRHJhdy0+cmVuZGVyZXIoKSA6IDA7Ci0g
ICAgICAgIGlmIChkLT5tX3BhaW50UmVzdHJpY3Rpb24gPT0gUGFpbnRSZXN0cmljdGlvbk5vbmUp
Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5pbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtl
cnNJblJlY3QocmVjdCk7Ci0gICAgICAgIGNvbnRlbnRSZW5kZXJlcigpLT5sYXllcigpLT5wYWlu
dChwLCByZWN0LCBkLT5tX3BhaW50UmVzdHJpY3Rpb24sIGVsdFJlbmRlcmVyKTsKLSAgICAgICAg
Ci0gICAgICAgIGQtPm1faXNQYWludGluZyA9IGZhbHNlOwotCi0jaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKQotICAgICAgICAvLyBSZWdpb25zIG1heSBoYXZlIGNoYW5nZWQgYXMgYSByZXN1
bHQgb2YgdGhlIHZpc2liaWxpdHkvei1pbmRleCBvZiBlbGVtZW50IGNoYW5naW5nLgotICAgICAg
ICBpZiAoZG9jdW1lbnQoKS0+ZGFzaGJvYXJkUmVnaW9uc0RpcnR5KCkpCi0gICAgICAgICAgICB2
aWV3KCktPnVwZGF0ZURhc2hib2FyZFJlZ2lvbnMoKTsKLSNlbmRpZgotICAgIH0gZWxzZQotICAg
ICAgICBMT0dfRVJST1IoImNhbGxlZCBGcmFtZTo6cGFpbnQgd2l0aCBuaWwgcmVuZGVyZXIiKTsK
LSAgICAgICAgCi0gICAgaWYgKGlzVG9wTGV2ZWxQYWludGVyKQotICAgICAgICBzX2N1cnJlbnRQ
YWludFRpbWVTdGFtcCA9IDA7Ci19Ci0KLXZvaWQgRnJhbWU6OnNldFBhaW50UmVzdHJpY3Rpb24o
UGFpbnRSZXN0cmljdGlvbiBwcikKLXsKLSAgICBkLT5tX3BhaW50UmVzdHJpY3Rpb24gPSBwcjsK
LX0KLSAgICAKLWJvb2wgRnJhbWU6OmlzUGFpbnRpbmcoKSBjb25zdAotewotICAgIHJldHVybiBk
LT5tX2lzUGFpbnRpbmc7Ci19Ci0KIHZvaWQgRnJhbWU6OmFkanVzdFBhZ2VIZWlnaHQoZmxvYXQg
Km5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRCb3R0b20sIGZsb2F0IGJvdHRvbUxp
bWl0KQogewogICAgIFJlbmRlclZpZXcqIHJvb3QgPSBjb250ZW50UmVuZGVyZXIoKTsKQEAgLTE2
MzcsNyArMTU3Myw3IEBAIHVuc2lnbmVkIEZyYW1lOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQoY28K
ICAgICAgICAgaWYgKCF2aXNpYmxlUmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopMCk7CiAgICAgICAg
ICAgICBjb250ZXh0LnNldFBhaW50aW5nRGlzYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgICBwYWlu
dCgmY29udGV4dCwgdmlzaWJsZVJlY3QpOworICAgICAgICAgICAgZC0+bV92aWV3LT5wYWludENv
bnRlbnRzKCZjb250ZXh0LCB2aXNpYmxlUmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC0xODg5LDEwICsxODI1LDggQEAgRnJhbWVQcml2YXRlOjpGcmFtZVByaXZhdGUoUGFnZSogcGFn
ZSwgRgogICAgICwgbV9ldmVudEhhbmRsZXIodGhpc0ZyYW1lKQogICAgICwgbV9hbmltYXRpb25D
b250cm9sbGVyKHRoaXNGcmFtZSkKICAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcih0aGlzRnJhbWUs
ICZGcmFtZTo6bGlmZVN1cHBvcnRUaW1lckZpcmVkKQotICAgICwgbV9wYWludFJlc3RyaWN0aW9u
KFBhaW50UmVzdHJpY3Rpb25Ob25lKQogICAgICwgbV9jYXJldFZpc2libGUoZmFsc2UpCiAgICAg
LCBtX2NhcmV0UGFpbnQodHJ1ZSkKLSAgICAsIG1faXNQYWludGluZyhmYWxzZSkKICAgICAsIG1f
aGlnaGxpZ2h0VGV4dE1hdGNoZXMoZmFsc2UpCiAgICAgLCBtX2luVmlld1NvdXJjZU1vZGUoZmFs
c2UpCiAgICAgLCBtX3Byb2hpYml0c1Njcm9sbGluZyhmYWxzZSkKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAz
NzA4NikKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTMg
KzE2OSw3IEBAIHB1YmxpYzoKIAogLy8gPT09IHRvIGJlIG1vdmVkIGludG8gRnJhbWVWaWV3CiAK
LXB1YmxpYzoKLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2b2lkIHNldFBhaW50UmVzdHJpY3Rpb24oUGFpbnRSZXN0cmljdGlvbik7Ci0gICAg
Ym9vbCBpc1BhaW50aW5nKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgZG91YmxlIGN1cnJlbnRQYWlu
dFRpbWVTdGFtcCgpIHsgcmV0dXJuIHNfY3VycmVudFBhaW50VGltZVN0YW1wOyB9IC8vIHJldHVy
bnMgMCBpZiBub3QgcGFpbnRpbmcKLSAgICAKK3B1YmxpYzogCiAgICAgdm9pZCBmb3JjZUxheW91
dChib29sIGFsbG93U3VidHJlZSA9IGZhbHNlKTsKICAgICB2b2lkIGZvcmNlTGF5b3V0V2l0aFBh
Z2VXaWR0aFJhbmdlKGZsb2F0IG1pblBhZ2VXaWR0aCwgZmxvYXQgbWF4UGFnZVdpZHRoLCBib29s
IGFkanVzdFZpZXdTaXplKTsKIApAQCAtMTkyLDkgKzE4Niw2IEBAIHB1YmxpYzoKICAgICBib29s
IHByb2hpYml0c1Njcm9sbGluZygpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJvaGliaXRzU2Nyb2xs
aW5nKGNvbnN0IGJvb2wpOwogCi1wcml2YXRlOgotICAgIHN0YXRpYyBkb3VibGUgc19jdXJyZW50
UGFpbnRUaW1lU3RhbXA7IC8vIHVzZWQgZm9yIGRldGVjdGluZyBkZWNvZGVkIHJlc291cmNlIHRo
cmFzaCBpbiB0aGUgY2FjaGUKLQogLy8gPT09IHRvIGJlIG1vdmVkIGludG8gQ2hyb21lCiAKIHB1
YmxpYzoKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRnJhbWVQcml2YXRlLmgJKHJldmlzaW9uIDM3MDg2KQorKysgV2ViQ29yZS9w
YWdlL0ZyYW1lUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMyArODEsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgVGltZXI8RnJhbWU+IG1fbGlmZVN1cHBvcnRUaW1l
cjsKIAotICAgICAgICBSZWZQdHI8Tm9kZT4gbV9lbGVtZW50VG9EcmF3OwotICAgICAgICBQYWlu
dFJlc3RyaWN0aW9uIG1fcGFpbnRSZXN0cmljdGlvbjsKLSAgICAgICAgCiAgICAgICAgIGJvb2wg
bV9jYXJldFZpc2libGU7CiAgICAgICAgIGJvb2wgbV9jYXJldFBhaW50OwotICAgICAgICBib29s
IG1faXNQYWludGluZzsKLQorICAgICAgICAKICAgICAgICAgYm9vbCBtX2hpZ2hsaWdodFRleHRN
YXRjaGVzOwogICAgICAgICBib29sIG1faW5WaWV3U291cmNlTW9kZTsKICAgICAgICAgYm9vbCBt
X3Byb2hpYml0c1Njcm9sbGluZzsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAzNzEwNSkK
KysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMSAr
NDUsMTQgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitkb3VibGUg
RnJhbWVWaWV3OjpzQ3VycmVudFBhaW50VGltZVN0YW1wID0gMC4wOworCiBzdHJ1Y3QgU2NoZWR1
bGVkRXZlbnQgewogICAgIFJlZlB0cjxFdmVudD4gbV9ldmVudDsKICAgICBSZWZQdHI8RXZlbnRU
YXJnZXROb2RlPiBtX2V2ZW50VGFyZ2V0OwpAQCAtMTAwLDYgKzEwMyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9yZXBhaW50Q291bnQgPSAwOwogICAgICAgICBtX3JlcGFpbnRSZWN0ID0gSW50UmVj
dCgpOwogICAgICAgICBtX3JlcGFpbnRSZWN0cy5jbGVhcigpOworICAgICAgICBtX3BhaW50UmVz
dHJpY3Rpb24gPSBQYWludFJlc3RyaWN0aW9uTm9uZTsKKyAgICAgICAgbV9pc1BhaW50aW5nID0g
ZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbCBtX2RvRnVsbFJlcGFpbnQ7CkBAIC0xNDgsNiArMTUz
LDEwIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8SW50UmVjdD4gbV9yZXBhaW50UmVjdHM7CiAKICAg
ICBib29sIG1fc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW47CisKKyAgICBSZWZQdHI8Tm9kZT4g
bV9ub2RlVG9EcmF3OworICAgIFBhaW50UmVzdHJpY3Rpb24gbV9wYWludFJlc3RyaWN0aW9uOwor
ICAgIGJvb2wgbV9pc1BhaW50aW5nOwogfTsKIAogRnJhbWVWaWV3OjpGcmFtZVZpZXcoRnJhbWUq
IGZyYW1lKQpAQCAtMzQ5LDggKzM1OCw4IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBh
bGxvd1N1YnRyZWUKICAgICB9CiAgICAgCiAgICAgLy8gd2Ugc2hvdWxkbid0IGVudGVyIGxheW91
dCgpIHdoaWxlIHBhaW50aW5nCi0gICAgQVNTRVJUKCFtX2ZyYW1lLT5pc1BhaW50aW5nKCkpOwot
ICAgIGlmIChtX2ZyYW1lLT5pc1BhaW50aW5nKCkpCisgICAgQVNTRVJUKCFpc1BhaW50aW5nKCkp
OworICAgIGlmIChpc1BhaW50aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghYWxs
b3dTdWJ0cmVlICYmIGQtPm1fbGF5b3V0Um9vdCkgewpAQCAtMTA0OSwxMSArMTA1OCwxMCBAQCB2
b2lkIEZyYW1lVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKCkKICAgICAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIGNvbnN0IG5vQ29udGV4dCA9IDA7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KG5vQ29udGV4dCk7CiAgICAgICAgIGNvbnRleHQuc2V0VXBkYXRpbmdDb250cm9s
VGludHModHJ1ZSk7Ci0jaWYgIVBMQVRGT1JNKE1BQykKLSAgICAgICAgU2Nyb2xsVmlldzo6cGFp
bnQoJmNvbnRleHQsIGZyYW1lUmVjdCgpKTsKLSNlbHNlCi0gICAgICAgIG1fZnJhbWUtPnBhaW50
KCZjb250ZXh0LCB2aXNpYmxlQ29udGVudFJlY3QoKSk7Ci0jZW5kaWYKKyAgICAgICAgaWYgKHBs
YXRmb3JtV2lkZ2V0KCkpCisgICAgICAgICAgICBwYWludENvbnRlbnRzKCZjb250ZXh0LCB2aXNp
YmxlQ29udGVudFJlY3QoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhaW50KCZjb250
ZXh0LCBmcmFtZVJlY3QoKSk7CiAgICAgfQogfQogCkBAIC0xMDY5LDYgKzEwNzcsODIgQEAgdm9p
ZCBGcmFtZVZpZXc6OnNldFdhc1Njcm9sbGVkQnlVc2VyKGJvbwogICAgIGQtPm1fd2FzU2Nyb2xs
ZWRCeVVzZXIgPSB3YXNTY3JvbGxlZEJ5VXNlcjsKIH0KIAordm9pZCBGcmFtZVZpZXc6OnBhaW50
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAg
cmV0dXJuOworCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgZmlsbFdpdGhSZWQ7CisgICAgaWYg
KGRvY3VtZW50IHx8IGRvY3VtZW50LT5wcmludGluZygpKQorICAgICAgICBmaWxsV2l0aFJlZCA9
IGZhbHNlOyAvLyBQcmludGluZywgZG9uJ3QgZmlsbCB3aXRoIHJlZCAoY2FuJ3QgcmVtZW1iZXIg
d2h5KS4KKyAgICBlbHNlIGlmIChkb2N1bWVudC0+b3duZXJFbGVtZW50KCkpCisgICAgICAgIGZp
bGxXaXRoUmVkID0gZmFsc2U7IC8vIFN1YmZyYW1lLCBkb24ndCBmaWxsIHdpdGggcmVkLgorICAg
IGVsc2UgaWYgKGlzVHJhbnNwYXJlbnQoKSkKKyAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsg
Ly8gVHJhbnNwYXJlbnQsIGRvbid0IGZpbGwgd2l0aCByZWQuCisgICAgZWxzZSBpZiAoZC0+bV9w
YWludFJlc3RyaWN0aW9uID09IFBhaW50UmVzdHJpY3Rpb25TZWxlY3Rpb25Pbmx5IHx8IGQtPm1f
cGFpbnRSZXN0cmljdGlvbiA9PSBQYWludFJlc3RyaWN0aW9uU2VsZWN0aW9uT25seUJsYWNrVGV4
dCkKKyAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gU2VsZWN0aW9ucyBhcmUgdHJhbnNw
YXJlbnQsIGRvbid0IGZpbGwgd2l0aCByZWQuCisgICAgZWxzZSBpZiAoZC0+bV9ub2RlVG9EcmF3
KQorICAgICAgICBmaWxsV2l0aFJlZCA9IGZhbHNlOyAvLyBFbGVtZW50IGltYWdlcyBhcmUgdHJh
bnNwYXJlbnQsIGRvbid0IGZpbGwgd2l0aCByZWQuCisgICAgZWxzZQorICAgICAgICBmaWxsV2l0
aFJlZCA9IHRydWU7CisgICAgCisgICAgaWYgKGZpbGxXaXRoUmVkKQorICAgICAgICBwLT5maWxs
UmVjdChyZWN0LCBDb2xvcigweEZGLCAwLCAwKSk7CisjZW5kaWYKKworICAgIGJvb2wgaXNUb3BM
ZXZlbFBhaW50ZXIgPSAhc0N1cnJlbnRQYWludFRpbWVTdGFtcDsKKyAgICBpZiAoaXNUb3BMZXZl
bFBhaW50ZXIpCisgICAgICAgIHNDdXJyZW50UGFpbnRUaW1lU3RhbXAgPSBjdXJyZW50VGltZSgp
OworICAgIAorICAgIFJlbmRlclZpZXcqIGNvbnRlbnRSZW5kZXJlciA9IGZyYW1lKCktPmNvbnRl
bnRSZW5kZXJlcigpOworICAgIGlmICghY29udGVudFJlbmRlcmVyKSB7CisgICAgICAgIExPR19F
UlJPUigiY2FsbGVkIEZyYW1lOjpwYWludCB3aXRoIG5pbCByZW5kZXJlciIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKKyAgICBBU1NFUlQo
IWQtPm1faXNQYWludGluZyk7CisgICAgICAgIAorICAgIGQtPm1faXNQYWludGluZyA9IHRydWU7
CisgICAgICAgIAorICAgIC8vIG1fbm9kZVRvRHJhdyBpcyB1c2VkIHRvIGRyYXcgb25seSBvbmUg
ZWxlbWVudCAoYW5kIGl0cyBkZXNjZW5kYW50cykKKyAgICBSZW5kZXJPYmplY3QqIGVsdFJlbmRl
cmVyID0gZC0+bV9ub2RlVG9EcmF3ID8gZC0+bV9ub2RlVG9EcmF3LT5yZW5kZXJlcigpIDogMDsK
KyAgICBpZiAoZC0+bV9wYWludFJlc3RyaWN0aW9uID09IFBhaW50UmVzdHJpY3Rpb25Ob25lKQor
ICAgICAgICBkb2N1bWVudC0+aW52YWxpZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzSW5SZWN0
KHJlY3QpOworICAgIGNvbnRlbnRSZW5kZXJlci0+bGF5ZXIoKS0+cGFpbnQocCwgcmVjdCwgZC0+
bV9wYWludFJlc3RyaWN0aW9uLCBlbHRSZW5kZXJlcik7CisgICAgICAgIAorICAgIGQtPm1faXNQ
YWludGluZyA9IGZhbHNlOworCisjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgIC8v
IFJlZ2lvbnMgbWF5IGhhdmUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0aGUgdmlzaWJpbGl0eS96
LWluZGV4IG9mIGVsZW1lbnQgY2hhbmdpbmcuCisgICAgaWYgKGRvY3VtZW50LT5kYXNoYm9hcmRS
ZWdpb25zRGlydHkoKSkKKyAgICAgICAgdXBkYXRlRGFzaGJvYXJkUmVnaW9ucygpOworI2VuZGlm
CisKKyAgICBpZiAoaXNUb3BMZXZlbFBhaW50ZXIpCisgICAgICAgIHNDdXJyZW50UGFpbnRUaW1l
U3RhbXAgPSAwOworfQorCit2b2lkIEZyYW1lVmlldzo6c2V0UGFpbnRSZXN0cmljdGlvbihQYWlu
dFJlc3RyaWN0aW9uIHByKQoreworICAgIGQtPm1fcGFpbnRSZXN0cmljdGlvbiA9IHByOworfQor
ICAgIAorYm9vbCBGcmFtZVZpZXc6OmlzUGFpbnRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBk
LT5tX2lzUGFpbnRpbmc7Cit9CisKK3ZvaWQgRnJhbWVWaWV3OjpzZXROb2RlVG9EcmF3KE5vZGUq
IG5vZGUpCit7CisgICAgZC0+bV9ub2RlVG9EcmF3ID0gbm9kZTsKK30KKwogI2lmIFBMQVRGT1JN
KFdJTikgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKIHZvaWQgRnJhbWVWaWV3Ojps
YXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZSgpCiB7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiAzNzEw
NSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsOSBAQAogI2RlZmluZSBGcmFtZVZpZXdfaAogCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgor
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKQEAgLTkzLDcgKzk1
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoKTsKIAogICAgIGJvb2wgbmVl
ZHNGdWxsUmVwYWludCgpIGNvbnN0OwotIAorCiAgICAgdm9pZCByZXNldFNjcm9sbGJhcnMoKTsK
IAogICAgIHZvaWQgY2xlYXIoKTsKQEAgLTE0OCw2ICsxNTAsMTMgQEAgcHVibGljOgogICAgIHZv
aWQgYWRkV2lkZ2V0VG9VcGRhdGUoUmVuZGVyUGFydE9iamVjdCopOwogICAgIHZvaWQgcmVtb3Zl
V2lkZ2V0VG9VcGRhdGUoUmVuZGVyUGFydE9iamVjdCopOwogCisgICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0KTsKKyAgICB2b2lkIHNldFBhaW50UmVzdHJpY3Rpb24oUGFpbnRSZXN0cmljdGlvbik7
CisgICAgYm9vbCBpc1BhaW50aW5nKCkgY29uc3Q7CisgICAgdm9pZCBzZXROb2RlVG9EcmF3KE5v
ZGUqKTsKKworICAgIHN0YXRpYyBkb3VibGUgY3VycmVudFBhaW50VGltZVN0YW1wKCkgeyByZXR1
cm4gc0N1cnJlbnRQYWludFRpbWVTdGFtcDsgfSAvLyByZXR1cm5zIDAgaWYgbm90IHBhaW50aW5n
CisgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgYnkgYWxs
IHBsYXRmb3JtcywgYnV0IGN1cnJlbnRseSBkZXBlbmRzIG9uIFNjcm9sbFZpZXc6OmNoaWxkcmVu
LAogICAgIC8vIHdoaWNoIG5vdCBhbGwgcGxhdGZvcm1zIGhhdmUuIE9uY2UgRnJhbWVWaWV3IGFu
ZCBTY3JvbGxWaWV3IGFyZSBtZXJnZWQsIHRoaXMgI2lmIHNob3VsZCBiZSByZW1vdmVkLgogI2lm
IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKQEAgLTE3MCw2
ICsxNzksOCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRDb250ZW50UmVj
dGFuZ2xlKGNvbnN0IEludFJlY3QmLCBib29sIGltbWVkaWF0ZSk7CiAKKyAgICBzdGF0aWMgZG91
YmxlIHNDdXJyZW50UGFpbnRUaW1lU3RhbXA7IC8vIHVzZWQgZm9yIGRldGVjdGluZyBkZWNvZGVk
IHJlc291cmNlIHRocmFzaCBpbiB0aGUgY2FjaGUKKwogICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7
CiAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgSW50U2l6ZSBtX21hcmdpbnM7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMv
RnJhbWVNYWMubW0JKHJldmlzaW9uIDM3MDg2KQorKysgV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE2LDEwICszMTYsMTAgQEAgTlNJbWFnZSogRnJhbWU6
OmltYWdlRnJvbVJlY3QoTlNSZWN0IHJlYwogCiBOU0ltYWdlKiBGcmFtZTo6c2VsZWN0aW9uSW1h
Z2UoYm9vbCBmb3JjZUJsYWNrVGV4dCkgY29uc3QKIHsKLSAgICBkLT5tX3BhaW50UmVzdHJpY3Rp
b24gPSBmb3JjZUJsYWNrVGV4dCA/IFBhaW50UmVzdHJpY3Rpb25TZWxlY3Rpb25Pbmx5QmxhY2tU
ZXh0IDogUGFpbnRSZXN0cmljdGlvblNlbGVjdGlvbk9ubHk7CisgICAgZC0+bV92aWV3LT5zZXRQ
YWludFJlc3RyaWN0aW9uKGZvcmNlQmxhY2tUZXh0ID8gUGFpbnRSZXN0cmljdGlvblNlbGVjdGlv
bk9ubHlCbGFja1RleHQgOiBQYWludFJlc3RyaWN0aW9uU2VsZWN0aW9uT25seSk7CiAgICAgZC0+
bV9kb2MtPnVwZGF0ZUxheW91dCgpOwogICAgIE5TSW1hZ2UqIHJlc3VsdCA9IGltYWdlRnJvbVJl
Y3Qoc2VsZWN0aW9uUmVjdCgpKTsKLSAgICBkLT5tX3BhaW50UmVzdHJpY3Rpb24gPSBQYWludFJl
c3RyaWN0aW9uTm9uZTsKKyAgICBkLT5tX3ZpZXctPnNldFBhaW50UmVzdHJpY3Rpb24oUGFpbnRS
ZXN0cmljdGlvbk5vbmUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMzNSwxMSArMzM1
LDExIEBAIE5TSW1hZ2UqIEZyYW1lOjpzbmFwc2hvdERyYWdJbWFnZShOb2RlKiAKICAgICBJbnRS
ZWN0IHRvcExldmVsUmVjdDsKICAgICBOU1JlY3QgcGFpbnRpbmdSZWN0ID0gcmVuZGVyZXItPnBh
aW50aW5nUm9vdFJlY3QodG9wTGV2ZWxSZWN0KTsKIAotICAgIGQtPm1fZWxlbWVudFRvRHJhdyA9
IG5vZGU7ICAgICAgICAgICAgICAvLyBpbnZva2Ugc3BlY2lhbCBzdWItdHJlZSBkcmF3aW5nIG1v
ZGUKKyAgICBkLT5tX3ZpZXctPnNldE5vZGVUb0RyYXcobm9kZSk7ICAgICAgICAgICAgICAvLyBp
bnZva2Ugc3BlY2lhbCBzdWItdHJlZSBkcmF3aW5nIG1vZGUKICAgICBOU0ltYWdlKiByZXN1bHQg
PSBpbWFnZUZyb21SZWN0KHBhaW50aW5nUmVjdCk7CiAgICAgcmVuZGVyZXItPnVwZGF0ZURyYWdT
dGF0ZShmYWxzZSk7CiAgICAgZC0+bV9kb2MtPnVwZGF0ZUxheW91dCgpOwotICAgIGQtPm1fZWxl
bWVudFRvRHJhdyA9IDA7CisgICAgZC0+bV92aWV3LT5zZXROb2RlVG9EcmF3KDApOwogCiAgICAg
aWYgKGVsZW1lbnRSZWN0KQogICAgICAgICAqZWxlbWVudFJlY3QgPSB0b3BMZXZlbFJlY3Q7CkBA
IC0zNTksOSArMzU5LDkgQEAgTlNJbWFnZSogRnJhbWU6Om5vZGVJbWFnZShOb2RlKiBub2RlKSBj
bwogICAgIEludFJlY3QgdG9wTGV2ZWxSZWN0OwogICAgIE5TUmVjdCBwYWludGluZ1JlY3QgPSBy
ZW5kZXJlci0+cGFpbnRpbmdSb290UmVjdCh0b3BMZXZlbFJlY3QpOwogCi0gICAgZC0+bV9lbGVt
ZW50VG9EcmF3ID0gbm9kZTsgLy8gaW52b2tlIHNwZWNpYWwgc3ViLXRyZWUgZHJhd2luZyBtb2Rl
CisgICAgZC0+bV92aWV3LT5zZXROb2RlVG9EcmF3KG5vZGUpOyAvLyBpbnZva2Ugc3BlY2lhbCBz
dWItdHJlZSBkcmF3aW5nIG1vZGUKICAgICBOU0ltYWdlKiByZXN1bHQgPSBpbWFnZUZyb21SZWN0
KHBhaW50aW5nUmVjdCk7Ci0gICAgZC0+bV9lbGVtZW50VG9EcmF3ID0gMDsKKyAgICBkLT5tX3Zp
ZXctPnNldE5vZGVUb0RyYXcoMCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogV2Vi
Q29yZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
d2luL0ZyYW1lQ0dXaW4uY3BwCShyZXZpc2lvbiAzNzA4NikKKysrIFdlYkNvcmUvcGFnZS93aW4v
RnJhbWVDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIHZv
aWQgZHJhd1JlY3RJbnRvQ29udGV4dChJbnRSZWN0IAogCiBIQklUTUFQIGltYWdlRnJvbVNlbGVj
dGlvbihGcmFtZSogZnJhbWUsIGJvb2wgZm9yY2VCbGFja1RleHQpCiB7Ci0gICAgZnJhbWUtPnNl
dFBhaW50UmVzdHJpY3Rpb24oZm9yY2VCbGFja1RleHQgPyBQYWludFJlc3RyaWN0aW9uU2VsZWN0
aW9uT25seUJsYWNrVGV4dCA6IFBhaW50UmVzdHJpY3Rpb25TZWxlY3Rpb25Pbmx5KTsKKyAgICBm
cmFtZS0+dmlldygpLT5zZXRQYWludFJlc3RyaWN0aW9uKGZvcmNlQmxhY2tUZXh0ID8gUGFpbnRS
ZXN0cmljdGlvblNlbGVjdGlvbk9ubHlCbGFja1RleHQgOiBQYWludFJlc3RyaWN0aW9uU2VsZWN0
aW9uT25seSk7CiAgICAgRmxvYXRSZWN0IGZyID0gZnJhbWUtPnNlbGVjdGlvblJlY3QoKTsKICAg
ICBJbnRSZWN0IGlyKHN0YXRpY19jYXN0PGludD4oZnIueCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihm
ci55KCkpLAogICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihmci53aWR0aCgpKSwgc3Rh
dGljX2Nhc3Q8aW50Pihmci5oZWlnaHQoKSkpOwpAQCAtNzksNyArNzksNyBAQCBIQklUTUFQIGlt
YWdlRnJvbVNlbGVjdGlvbihGcmFtZSogZnJhbWUsCiAgICAgU2VsZWN0T2JqZWN0KGhkYywgaGJt
cE9sZCk7CiAgICAgRGVsZXRlREMoaGRjKTsKIAotICAgIGZyYW1lLT5zZXRQYWludFJlc3RyaWN0
aW9uKFBhaW50UmVzdHJpY3Rpb25Ob25lKTsKKyAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludFJl
c3RyaWN0aW9uKFBhaW50UmVzdHJpY3Rpb25Ob25lKTsKIAogICAgIHJldHVybiBoYm1wOwogfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiAzNzEwNSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKIAorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIK
ICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogCiB1
c2luZyBzdGQ6Om1heDsKIApAQCAtNDMsNiArNDUsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OmluaXQo
KQogICAgICAgICBwbGF0Zm9ybVNldENhbkJsaXRPblNjcm9sbCgpOwogICAgIG1fc2Nyb2xsYmFy
c0F2b2lkaW5nUmVzaXplciA9IDA7CiAgICAgbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCA9IGZhbHNl
OworICAgIG1fZHJhd1BhblNjcm9sbEljb24gPSBmYWxzZTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3
OjphZGRDaGlsZChXaWRnZXQqIGNoaWxkKSAKQEAgLTM1Niw2ICszNTksNzYgQEAgdm9pZCBTY3Jv
bGxWaWV3OjpyZXBhaW50Q29udGVudFJlY3RhbmdsZQogICAgIGhvc3RXaW5kb3coKS0+cmVwYWlu
dChjb250ZW50c1RvV2luZG93KHJlY3QpLCB0cnVlLCBub3cpOwogfQogCit2b2lkIFNjcm9sbFZp
ZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgeworICAgICAgICBXaWRnZXQ6OnBhaW50KGNv
bnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvbnRleHQt
PnBhaW50aW5nRGlzYWJsZWQoKSAmJiAhY29udGV4dC0+dXBkYXRpbmdDb250cm9sVGludHMoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBkb2N1bWVudERpcnR5UmVjdCA9IHJlY3Q7
CisgICAgZG9jdW1lbnREaXJ0eVJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKKworICAgIGNv
bnRleHQtPnNhdmUoKTsKKworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSh4KCksIHkoKSk7CisgICAg
ZG9jdW1lbnREaXJ0eVJlY3QubW92ZSgteCgpLCAteSgpKTsKKworICAgIGNvbnRleHQtPnRyYW5z
bGF0ZSgtc2Nyb2xsWCgpLCAtc2Nyb2xsWSgpKTsKKyAgICBkb2N1bWVudERpcnR5UmVjdC5tb3Zl
KHNjcm9sbFgoKSwgc2Nyb2xsWSgpKTsKKworICAgIGNvbnRleHQtPmNsaXAodmlzaWJsZUNvbnRl
bnRSZWN0KCkpOworCisgICAgcGFpbnRDb250ZW50cyhjb250ZXh0LCBkb2N1bWVudERpcnR5UmVj
dCk7CisKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisKKyAgICAvLyBOb3cgcGFpbnQgdGhlIHNj
cm9sbGJhcnMuCisgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIChtX2hvcml6b250
YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcikpIHsKKyAgICAgICAgY29udGV4dC0+
c2F2ZSgpOworICAgICAgICBJbnRSZWN0IHNjcm9sbFZpZXdEaXJ0eVJlY3QgPSByZWN0OworICAg
ICAgICBzY3JvbGxWaWV3RGlydHlSZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7CisgICAgICAg
IGNvbnRleHQtPnRyYW5zbGF0ZSh4KCksIHkoKSk7CisgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJl
Y3QubW92ZSgteCgpLCAteSgpKTsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikK
KyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+cGFpbnQoY29udGV4dCwgc2Nyb2xs
Vmlld0RpcnR5UmVjdCk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+cGFpbnQoY29udGV4dCwgc2Nyb2xsVmlld0RpcnR5
UmVjdCk7CisKKyAgICAgICAgSW50UmVjdCBoQ29ybmVyOworICAgICAgICBpZiAobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyICYmIHdpZHRoKCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCkg
PiAwKSB7CisgICAgICAgICAgICBoQ29ybmVyID0gSW50UmVjdChtX2hvcml6b250YWxTY3JvbGxi
YXItPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aWR0aCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0aCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICBpZiAoaENvcm5lci5pbnRlcnNlY3RzKHNjcm9sbFZpZXdEaXJ0eVJlY3QpKQor
ICAgICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5wYWludFNjcm9s
bENvcm5lcih0aGlzLCBjb250ZXh0LCBoQ29ybmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmIGhlaWdodCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+
aGVpZ2h0KCkgPiAwKSB7CisgICAgICAgICAgICBJbnRSZWN0IHZDb3JuZXIod2lkdGgoKSAtIG1f
dmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGlmICh2Q29ybmVyICE9IGhDb3JuZXIgJiYgdkNvcm5lci5pbnRlcnNlY3RzKHNjcm9sbFZp
ZXdEaXJ0eVJlY3QpKQorICAgICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpLT5wYWludFNjcm9sbENvcm5lcih0aGlzLCBjb250ZXh0LCB2Q29ybmVyKTsKKyAgICAgICAg
fQorCisgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9CisKKyAgICAvLyBQYWludCB0
aGUgcGFuU2Nyb2xsIEljb24KKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiBwYW5TY3JvbGxJY29u
OworICAgIGlmIChtX2RyYXdQYW5TY3JvbGxJY29uKSB7CisgICAgICAgIGlmICghcGFuU2Nyb2xs
SWNvbikKKyAgICAgICAgICAgIHBhblNjcm9sbEljb24gPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UoInBhbkljb24iKTsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHBhblNjcm9sbElj
b24uZ2V0KCksIG1fcGFuU2Nyb2xsSWNvblBvaW50KTsKKyAgICB9Cit9CisKICNpZiAhUExBVEZP
Uk0oTUFDKQogdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENhbkJsaXRPblNjcm9sbCgpCiB7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gMzcxMTMpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDggKzE4NCwxMiBAQCBw
dWJsaWM6CiAgICAgSW50UG9pbnQgc2NyZWVuVG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYpIGNv
bnN0OwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYpOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRD
b250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmLCBib29sIG5vdyA9IGZhbHNlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QpID0gMDsKKwogICAgIHZvaWQgdXBkYXRlV2luZG93UmVjdChj
b25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7CiAKIHByaXZhdGU6CkBAIC0yMDIsNiAr
MjA2LDkgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyOwog
ICAgIGJvb2wgbV9zY3JvbGxiYXJzU3VwcHJlc3NlZDsKIAorICAgIEludFBvaW50IG1fcGFuU2Ny
b2xsSWNvblBvaW50OworICAgIGJvb2wgbV9kcmF3UGFuU2Nyb2xsSWNvbjsKKwogICAgIHZvaWQg
aW5pdCgpOwogCiAgICAgdm9pZCBwbGF0Zm9ybUFkZENoaWxkKFdpZGdldCopOwpAQCAtMjM1LDgg
KzI0Miw2IEBAIHByaXZhdGU6CiAgICAgCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JN
KFdYKQogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0Jik7Ci0KICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IElu
dFJlY3QmKTsKIAogICAgIHZvaWQgYWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0Jik7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCShyZXZpc2lvbiAzNzA4NikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2lmbmRlZiBTY3JvbGxiYXJUaGVtZV9oCiAjZGVmaW5lIFNjcm9sbGJhclRoZW1lX2gK
IAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJTY3JvbGxUeXBlcy5oIgogCkBAIC0zNCwxMiArMzUsMTMgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50
OwogY2xhc3MgU2Nyb2xsYmFyOworY2xhc3MgU2Nyb2xsVmlldzsKIAogY2xhc3MgU2Nyb2xsYmFy
VGhlbWUgewogcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lKCkge307CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyKiwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBwYWludChTY3JvbGxiYXIqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
JiBkYW1hZ2VSZWN0KSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFy
dCBoaXRUZXN0KFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJu
IE5vUGFydDsgfQogICAgIAogICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3Jv
bGxiYXJDb250cm9sU2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpIHsgcmV0dXJuIDA7IH0KQEAgLTcy
LDYgKzc0LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNj
cm9sbGJhciosIFNjcm9sbGJhclBhcnQpIHt9CiAKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3Jv
bGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgY29ybmVyUmVjdCkgeyBjb250ZXh0LT5maWxsUmVjdChjb3JuZXJSZWN0LCBDb2xvcjo6
d2hpdGUpOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxi
YXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgaW50IHRodW1iUG9zaXRpb24oU2Nyb2xsYmFyKikgeyByZXR1cm4gMDsgfSAvLyBUaGUg
cG9zaXRpb24gb2YgdGhlIHRodW1iIHJlbGF0aXZlIHRvIHRoZSB0cmFjay4KICAgICB2aXJ0dWFs
IGludCB0aHVtYkxlbmd0aChTY3JvbGxiYXIqKSB7IHJldHVybiAwOyB9IC8vIFRoZSBsZW5ndGgg
b2YgdGhlIHRodW1iIGFsb25nIHRoZSBheGlzIG9mIHRoZSBzY3JvbGxiYXIuCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gMzcw
ODYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgxLDQgKzI4MSwxNCBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVDb21wb3Np
dGU6OnRyYWNrTGVuZ3RoCiAgICAgcmV0dXJuIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikgPyB0cmFja1JlY3Qoc2Nyb2xsYmFyKS53aWR0aCgpIDogdHJh
Y2tSZWN0KHNjcm9sbGJhcikuaGVpZ2h0KCk7CiB9CiAKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGU6OnBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqIHZpZXcsIEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCkKK3sKKyAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHZpZXcpOworICAgIFBhZ2UqIHBh
Z2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7
CisgICAgaWYgKHBhZ2UgJiYgcGFnZS0+c2V0dGluZ3MoKS0+c2hvdWxkUGFpbnRDdXN0b21TY3Jv
bGxiYXJzKCkpIHsKKyAgICAgICAgaWYgKCFwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBhaW50
Q3VzdG9tU2Nyb2xsQ29ybmVyKGNvbnRleHQsIGNvcm5lclJlY3QpKQorICAgICAgICAgICAgY29u
dGV4dC0+ZmlsbFJlY3QoY29ybmVyUmVjdCwgQ29sb3I6OndoaXRlKTsKKyAgICB9Cit9CisKIH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmgJKHJldmlz
aW9uIDM3MDg2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGlu
dCB0cmFja1Bvc2l0aW9uKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgaW50IHRyYWNrTGVuZ3Ro
KFNjcm9sbGJhciopOwogCisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9s
bFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKKwog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciopID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyKikgPSAwOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAJKHJldmlzaW9uIDM3MTEzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NSw2
OSArNDY1LDYgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogICAg
IG1fZGF0YS0+aW5VcGRhdGVTY3JvbGxiYXJzID0gZmFsc2U7CiB9CiAKLXZvaWQgU2Nyb2xsVmll
dzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgaGVyZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGZv
cmsgRnJhbWVWaWV3LmgvLmNwcC4KLSAgICAvLyBJbiB0aGUgZW5kLCBGcmFtZVZpZXcgc2hvdWxk
IGp1c3QgbWVyZ2Ugd2l0aCBTY3JvbGxWaWV3LgotICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsK
LQotICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEludFJlY3QgZG9jdW1lbnREaXJ0eVJlY3QgPSByZWN0OwotICAgIGRvY3VtZW50RGly
dHlSZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7Ci0KLSAgICBjb250ZXh0LT5zYXZlKCk7Ci0K
LSAgICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOwotICAgIGRvY3VtZW50RGlydHlSZWN0
Lm1vdmUoLXgoKSwgLXkoKSk7Ci0KLSAgICBjb250ZXh0LT50cmFuc2xhdGUoLXNjcm9sbFgoKSwg
LXNjcm9sbFkoKSk7Ci0gICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZShzY3JvbGxYKCksIHNjcm9s
bFkoKSk7Ci0KLSAgICBjb250ZXh0LT5jbGlwKGVuY2xvc2luZ0ludFJlY3QodmlzaWJsZUNvbnRl
bnRSZWN0KCkpKTsKLSAgICBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKS0+ZnJh
bWUoKS0+cGFpbnQoY29udGV4dCwgZG9jdW1lbnREaXJ0eVJlY3QpOwotICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsKLQotICAgIC8vIE5vdyBwYWludCB0aGUgc2Nyb2xsYmFycy4KLSAgICBpZiAoIW1f
c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgKG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyKSkgewotICAgICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIEludFJl
Y3Qgc2Nyb2xsVmlld0RpcnR5UmVjdCA9IHJlY3Q7Ci0gICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJl
Y3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKLSAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgo
KSwgeSgpKTsKLSAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5tb3ZlKC14KCksIC15KCkpOwot
ICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5wYWludChjb250ZXh0LCBzY3JvbGxWaWV3RGlydHlSZWN0KTsKLSAgICAg
ICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5wYWludChjb250ZXh0LCBzY3JvbGxWaWV3RGlydHlSZWN0KTsKLQotICAgICAgICAvKgot
ICAgICAgICAgKiBGSVhNRTogVE9ETzogQ2hlY2sgaWYgdGhhdCB3b3JrcyB3aXRoIFJUTAotICAg
ICAgICAgKi8KLSAgICAgICAgLy8gRmlsbCB0aGUgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlLgot
ICAgICAgICBJbnRSZWN0IGhDb3JuZXI7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxi
YXIgJiYgd2lkdGgoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSA+IDApIHsKLSAg
ICAgICAgICAgIGhDb3JuZXIgPSBJbnRSZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICAgICAgICAg
IGlmIChoQ29ybmVyLmludGVyc2VjdHMoc2Nyb2xsVmlld0RpcnR5UmVjdCkpCi0gICAgICAgICAg
ICAgICAgY29udGV4dC0+ZmlsbFJlY3QoaENvcm5lciwgQ29sb3I6OndoaXRlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmIGhlaWdodCgpIC0gbV92ZXJ0
aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkgPiAwKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHZDb3Ju
ZXIod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdo
dCgpKTsKLSAgICAgICAgICAgIGlmICh2Q29ybmVyICE9IGhDb3JuZXIgJiYgdkNvcm5lci5pbnRl
cnNlY3RzKHNjcm9sbFZpZXdEaXJ0eVJlY3QpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmZp
bGxSZWN0KHZDb3JuZXIsIENvbG9yOjp3aGl0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb250
ZXh0LT5yZXN0b3JlKCk7Ci0gICAgfQotfQotCiB2b2lkIFNjcm9sbFZpZXc6OmFkZFRvRGlydHlS
ZWdpb24oY29uc3QgSW50UmVjdCYgY29udGFpbmluZ1dpbmRvd1JlY3QpCiB7CiAgICAgQVNTRVJU
KGlzRnJhbWVWaWV3KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcAko
cmV2aXNpb24gMzcxMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1OSw4MSArMzU5LDYgQEAgdm9pZCBTY3JvbGxWaWV3OjpwbGF0
Zm9ybVJlbW92ZUNoaWxkKFdpZAogICAgIHJvb3QoKS0+ZGVjcmVtZW50TmF0aXZlV2lkZ2V0Q291
bnQoKTsKIH0KIAotc3RhdGljIHZvaWQgZHJhd1Njcm9sbGJhckNvcm5lcihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgUVRfVkVSU0lPTiA8IDB4
MDQwNTAwCi0gICAgY29udGV4dC0+ZmlsbFJlY3QocmVjdCwgUUFwcGxpY2F0aW9uOjpwYWxldHRl
KCkuY29sb3IoUVBhbGV0dGU6Ok5vcm1hbCwgUVBhbGV0dGU6OldpbmRvdykpOwotI2Vsc2UKLSAg
ICBRU3R5bGVPcHRpb24gb3B0aW9uOwotICAgIG9wdGlvbi5yZWN0ID0gcmVjdDsKLSAgICBRQXBw
bGljYXRpb246OnN0eWxlKCktPmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbFNjcm9sbEFy
ZWFDb3JuZXIsCi0gICAgICAgICAgICAmb3B0aW9uLCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgMCk7Ci0jZW5kaWYKLX0KLQotCi12b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyBjb2RlIGlzIGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0byBmb3JrIEZyYW1lVmlldy5oLy5jcHAu
Ci0gICAgLy8gSW4gdGhlIGVuZCwgRnJhbWVWaWV3IHNob3VsZCBqdXN0IG1lcmdlIHdpdGggU2Ny
b2xsVmlldy4KLSAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7Ci0KLSAgICBpZiAoY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRvY3Vt
ZW50RGlydHlSZWN0ID0gcmVjdDsKLQotICAgIGNvbnRleHQtPnNhdmUoKTsKLQotICAgIGNvbnRl
eHQtPnRyYW5zbGF0ZSh4KCksIHkoKSk7Ci0gICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZSgteCgp
LCAteSgpKTsKLQotICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtc2Nyb2xsWCgpLCAtc2Nyb2xsWSgp
KTsKLSAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKHNjcm9sbFgoKSwgc2Nyb2xsWSgpKTsKLQot
ICAgIGRvY3VtZW50RGlydHlSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVD
b250ZW50UmVjdCgpKSk7Ci0gICAgY29udGV4dC0+Y2xpcChkb2N1bWVudERpcnR5UmVjdCk7Ci0K
LSAgICBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKS0+ZnJhbWUoKS0+cGFpbnQo
Y29udGV4dCwgZG9jdW1lbnREaXJ0eVJlY3QpOwotCi0gICAgY29udGV4dC0+cmVzdG9yZSgpOwot
Ci0gICAgLy8gTm93IHBhaW50IHRoZSBzY3JvbGxiYXJzLgotICAgIGlmICghbV9zY3JvbGxiYXJz
U3VwcHJlc3NlZCAmJiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxi
YXIpKSB7Ci0gICAgICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxW
aWV3RGlydHlSZWN0ID0gcmVjdDsKLSAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5pbnRlcnNl
Y3QoZnJhbWVSZWN0KCkpOwotICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOwot
ICAgICAgICBzY3JvbGxWaWV3RGlydHlSZWN0Lm1vdmUoLXgoKSwgLXkoKSk7Ci0gICAgICAgIGlm
IChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxi
YXItPnBhaW50KGNvbnRleHQsIHNjcm9sbFZpZXdEaXJ0eVJlY3QpOwotICAgICAgICBpZiAobV92
ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnBhaW50
KGNvbnRleHQsIHNjcm9sbFZpZXdEaXJ0eVJlY3QpOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIHNj
cm9sbCBjb3JuZXJzIHVzaW5nIHRoZSBjdXJyZW50IFF0IHN0eWxlCi0gICAgICAgIEludFJlY3Qg
aENvcm5lcjsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiB3aWR0aCgpIC0g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0aCgpID4gMCkgewotICAgICAgICAgICAgaENvcm5l
ciA9IEludFJlY3QobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdo
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYgKGhDb3JuZXIuaW50
ZXJzZWN0cyhzY3JvbGxWaWV3RGlydHlSZWN0KSkKLSAgICAgICAgICAgICAgICBkcmF3U2Nyb2xs
YmFyQ29ybmVyKGNvbnRleHQsIGhDb3JuZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1f
dmVydGljYWxTY3JvbGxiYXIgJiYgaGVpZ2h0KCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWln
aHQoKSA+IDApIHsKLSAgICAgICAgICAgIEludFJlY3QgdkNvcm5lcih3aWR0aCgpIC0gbV92ZXJ0
aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlaWdodCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwotICAgICAgICAgICAg
aWYgKHZDb3JuZXIgIT0gaENvcm5lciAmJiB2Q29ybmVyLmludGVyc2VjdHMoc2Nyb2xsVmlld0Rp
cnR5UmVjdCkpCi0gICAgICAgICAgICAgICAgZHJhd1Njcm9sbGJhckNvcm5lcihjb250ZXh0LCB2
Q29ybmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICB9
Ci19Ci0KIHZvaWQgU2Nyb2xsVmlldzo6YWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0JiBj
b250YWluaW5nV2luZG93UmVjdCkKIHsKICAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAJKHJldmlzaW9uIDM3MTEx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEwLDUgKzIxMCwxNyBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVRdDo6dHJhY2tMZW5n
dGgoU2Nyb2xsCiAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gdHJhY2sud2lkdGgoKSA6IHRyYWNrLmhlaWdodCgpOwogfQogCit2b2lk
IFNjcm9sbGJhclRoZW1lUXQ6OnBhaW50U2Nyb2xsYmFyQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisjaWYgUVRfVkVS
U0lPTiA8IDB4MDQwNTAwCisgICAgY29udGV4dC0+ZmlsbFJlY3QocmVjdCwgUUFwcGxpY2F0aW9u
OjpwYWxldHRlKCkuY29sb3IoUVBhbGV0dGU6Ok5vcm1hbCwgUVBhbGV0dGU6OldpbmRvdykpOwor
I2Vsc2UKKyAgICBRU3R5bGVPcHRpb24gb3B0aW9uOworICAgIG9wdGlvbi5yZWN0ID0gcmVjdDsK
KyAgICBRQXBwbGljYXRpb246OnN0eWxlKCktPmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5l
bFNjcm9sbEFyZWFDb3JuZXIsCisgICAgICAgICAgICAmb3B0aW9uLCBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKSwgMCk7CisjZW5kaWYKK30KKwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3F0L1Njcm9sbGJhclRoZW1lUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0
L1Njcm9sbGJhclRoZW1lUXQuaAkocmV2aXNpb24gMzcxMTEpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3F0L1Njcm9sbGJhclRoZW1lUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOSBAQCBj
bGFzcyBTY3JvbGxiYXJUaGVtZVF0IDogcHVibGljIFNjcm9sbGJhCiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+U2Nyb2xsYmFyVGhlbWVRdCgpOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9s
bGJhciosIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCk7CisgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhciosIEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9s
bENvcm5lcihTY3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgY29y
bmVyUmVjdCk7CisKICAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXIq
LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRD
ZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsVmlld1dpbi5jcHAJKHJldmlzaW9uIDM3MTEzKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDggKzU5LDYgQEAgcHVibGljOgogICAgIFNjcm9sbFZpZXdQcml2YXRlKFNjcm9sbFZp
ZXcqIHZpZXcpCiAgICAgICAgIDogbV92aWV3KHZpZXcpCiAgICAgICAgICwgbV9pblVwZGF0ZVNj
cm9sbGJhcnMoZmFsc2UpCi0gICAgICAgICwgbV9wYW5TY3JvbGxJY29uUG9pbnQoMCwwKQotICAg
ICAgICAsIG1fZHJhd1BhblNjcm9sbEljb24oZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAtODMs
OCArODEsNiBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsVmlldyogbV92aWV3OwogICAgIGJvb2wgbV9p
blVwZGF0ZVNjcm9sbGJhcnM7CiAgICAgSFJHTiBtX2RpcnR5UmVnaW9uOwotICAgIEludFBvaW50
IG1fcGFuU2Nyb2xsSWNvblBvaW50OwotICAgIGJvb2wgbV9kcmF3UGFuU2Nyb2xsSWNvbjsKIH07
CiAKIGNvbnN0IGludCBwYW5JY29uU2l6ZUxlbmd0aCA9IDIwOwpAQCAtMTQ1LDkgKzE0MSw5IEBA
IHZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNjcm8KICAgICBSRUNUIHIgPSB1
cGRhdGVSZWN0OwogICAgIDo6SW52YWxpZGF0ZVJlY3QoY29udGFpbmluZ1dpbmRvd0hhbmRsZSwg
JnIsIGZhbHNlKTsKIAotICAgIGlmIChtX2RyYXdQYW5TY3JvbGxJY29uKSB7CisgICAgaWYgKG1f
dmlldy0+bV9kcmF3UGFuU2Nyb2xsSWNvbikgewogICAgICAgICBpbnQgcGFuSWNvbkRpcnR5U3F1
YXJlU2l6ZUxlbmd0aCA9IDIgKiAocGFuSWNvblNpemVMZW5ndGggKyBtYXgoYWJzKHNjcm9sbERl
bHRhLndpZHRoKCkpLCBhYnMoc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpKSk7IC8vIFdlIG9ubHkgd2Fu
dCB0byByZXBhaW50IHdoYXQncyBuZWNlc3NhcnkKLSAgICAgICAgSW50UG9pbnQgcGFuSWNvbkRp
cnR5U3F1YXJlTG9jYXRpb24gPSBJbnRQb2ludChtX3BhblNjcm9sbEljb25Qb2ludC54KCkgLSAo
cGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCAvIDIpLCBtX3BhblNjcm9sbEljb25Qb2ludC55
KCkgLSAocGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCAvIDIpKTsKKyAgICAgICAgSW50UG9p
bnQgcGFuSWNvbkRpcnR5U3F1YXJlTG9jYXRpb24gPSBJbnRQb2ludChtX3ZpZXctPm1fcGFuU2Ny
b2xsSWNvblBvaW50LngoKSAtIChwYW5JY29uRGlydHlTcXVhcmVTaXplTGVuZ3RoIC8gMiksIG1f
dmlldy0+bV9wYW5TY3JvbGxJY29uUG9pbnQueSgpIC0gKHBhbkljb25EaXJ0eVNxdWFyZVNpemVM
ZW5ndGggLyAyKSk7CiAgICAgICAgIEludFJlY3QgcGFuU2Nyb2xsSWNvbkRpcnR5UmVjdCA9IElu
dFJlY3QocGFuSWNvbkRpcnR5U3F1YXJlTG9jYXRpb24gLCBJbnRTaXplKHBhbkljb25EaXJ0eVNx
dWFyZVNpemVMZW5ndGgsIHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGgpKTsKICAgICAgICAg
CiAgICAgICAgIG1fdmlldy0+dXBkYXRlV2luZG93UmVjdChwYW5TY3JvbGxJY29uRGlydHlSZWN0
KTsKQEAgLTM1Niw5OCArMzUyLDE3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFy
cyhjb25zdCAKIAogdm9pZCBTY3JvbGxWaWV3OjpwcmludFBhblNjcm9sbEljb24oY29uc3QgSW50
UG9pbnQmIGljb25Qb3NpdGlvbikKIHsKLSAgICBtX2RhdGEtPm1fZHJhd1BhblNjcm9sbEljb24g
PSB0cnVlOyAgICAKLSAgICBtX2RhdGEtPm1fcGFuU2Nyb2xsSWNvblBvaW50ID0gSW50UG9pbnQo
aWNvblBvc2l0aW9uLngoKSAtIHBhbkljb25TaXplTGVuZ3RoIC8gMiAsIGljb25Qb3NpdGlvbi55
KCkgLSBwYW5JY29uU2l6ZUxlbmd0aCAvIDIpIDsKKyAgICBtX2RyYXdQYW5TY3JvbGxJY29uID0g
dHJ1ZTsgICAgCisgICAgbV9wYW5TY3JvbGxJY29uUG9pbnQgPSBJbnRQb2ludChpY29uUG9zaXRp
b24ueCgpIC0gcGFuSWNvblNpemVMZW5ndGggLyAyICwgaWNvblBvc2l0aW9uLnkoKSAtIHBhbklj
b25TaXplTGVuZ3RoIC8gMikgOwogCi0gICAgdXBkYXRlV2luZG93UmVjdChJbnRSZWN0KG1fZGF0
YS0+bV9wYW5TY3JvbGxJY29uUG9pbnQsIEludFNpemUocGFuSWNvblNpemVMZW5ndGgscGFuSWNv
blNpemVMZW5ndGgpKSwgdHJ1ZSk7ICAgIAorICAgIHVwZGF0ZVdpbmRvd1JlY3QoSW50UmVjdCht
X3BhblNjcm9sbEljb25Qb2ludCwgSW50U2l6ZShwYW5JY29uU2l6ZUxlbmd0aCxwYW5JY29uU2l6
ZUxlbmd0aCkpLCB0cnVlKTsgICAgCiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlUGFuU2Ny
b2xsSWNvbigpCiB7Ci0gICAgbV9kYXRhLT5tX2RyYXdQYW5TY3JvbGxJY29uID0gZmFsc2U7IAor
ICAgIG1fZHJhd1BhblNjcm9sbEljb24gPSBmYWxzZTsgCiAKLSAgICB1cGRhdGVXaW5kb3dSZWN0
KEludFJlY3QobV9kYXRhLT5tX3BhblNjcm9sbEljb25Qb2ludCwgSW50U2l6ZShwYW5JY29uU2l6
ZUxlbmd0aCwgcGFuSWNvblNpemVMZW5ndGgpKSwgdHJ1ZSk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmll
dzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgaGVyZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGZv
cmsgRnJhbWVWaWV3LmgvLmNwcC4KLSAgICAvLyBJbiB0aGUgZW5kLCBGcmFtZVZpZXcgc2hvdWxk
IGp1c3QgbWVyZ2Ugd2l0aCBTY3JvbGxWaWV3LgotICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsK
LQotICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgJiYgIWNvbnRleHQtPnVwZGF0
aW5nQ29udHJvbFRpbnRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgZG9jdW1l
bnREaXJ0eVJlY3QgPSByZWN0OwotICAgIGRvY3VtZW50RGlydHlSZWN0LmludGVyc2VjdChmcmFt
ZVJlY3QoKSk7Ci0KLSAgICBjb250ZXh0LT5zYXZlKCk7Ci0KLSAgICBjb250ZXh0LT50cmFuc2xh
dGUoeCgpLCB5KCkpOwotICAgIGRvY3VtZW50RGlydHlSZWN0Lm1vdmUoLXgoKSwgLXkoKSk7Ci0K
LSAgICBjb250ZXh0LT50cmFuc2xhdGUoLXNjcm9sbFgoKSwgLXNjcm9sbFkoKSk7Ci0gICAgZG9j
dW1lbnREaXJ0eVJlY3QubW92ZShzY3JvbGxYKCksIHNjcm9sbFkoKSk7Ci0KLSAgICBjb250ZXh0
LT5jbGlwKHZpc2libGVDb250ZW50UmVjdCgpKTsKLQotICAgIGNvbnN0IEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyk7Ci0gICAgZnJhbWVW
aWV3LT5mcmFtZSgpLT5wYWludChjb250ZXh0LCBkb2N1bWVudERpcnR5UmVjdCk7Ci0KLSAgICBj
b250ZXh0LT5yZXN0b3JlKCk7Ci0KLSAgICAvLyBOb3cgcGFpbnQgdGhlIHNjcm9sbGJhcnMuCi0g
ICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIChtX2hvcml6b250YWxTY3JvbGxiYXIg
fHwgbV92ZXJ0aWNhbFNjcm9sbGJhcikpIHsKLSAgICAgICAgY29udGV4dC0+c2F2ZSgpOwotICAg
ICAgICBJbnRSZWN0IHNjcm9sbFZpZXdEaXJ0eVJlY3QgPSByZWN0OwotICAgICAgICBzY3JvbGxW
aWV3RGlydHlSZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7Ci0gICAgICAgIGNvbnRleHQtPnRy
YW5zbGF0ZSh4KCksIHkoKSk7Ci0gICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QubW92ZSgteCgp
LCAteSgpKTsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+cGFpbnQoY29udGV4dCwgc2Nyb2xsVmlld0RpcnR5UmVj
dCk7Ci0gICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+cGFpbnQoY29udGV4dCwgc2Nyb2xsVmlld0RpcnR5UmVjdCk7Ci0KLSAg
ICAgICAgLy8gRmlsbCB0aGUgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlLgotICAgICAgICBJbnRS
ZWN0IGhDb3JuZXI7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgd2lkdGgo
KSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSA+IDApIHsKLSAgICAgICAgICAgIGhD
b3JuZXIgPSBJbnRSZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5o
ZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSBtX2hvcml6
b250YWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICAgICAgICAgIGlmIChoQ29ybmVy
LmludGVyc2VjdHMoc2Nyb2xsVmlld0RpcnR5UmVjdCkpIHsKLSAgICAgICAgICAgICAgICBQYWdl
KiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkg
OiAwOwotICAgICAgICAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UtPnNldHRpbmdzKCktPnNob3Vs
ZFBhaW50Q3VzdG9tU2Nyb2xsYmFycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFn
ZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wYWludEN1c3RvbVNjcm9sbENvcm5lcihjb250ZXh0LCBo
Q29ybmVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KGhDb3Ju
ZXIsIENvbG9yOjp3aGl0ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgaGVpZ2h0KCkgLSBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSA+IDApIHsKLSAgICAgICAgICAgIEludFJlY3Qg
dkNvcm5lcih3aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+
aGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYgKHZDb3JuZXIgIT0gaENvcm5lciAmJiB2Q29ybmVy
LmludGVyc2VjdHMoc2Nyb2xsVmlld0RpcnR5UmVjdCkpIHsKLSAgICAgICAgICAgICAgICBQYWdl
KiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkg
OiAwOwotICAgICAgICAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UtPnNldHRpbmdzKCktPnNob3Vs
ZFBhaW50Q3VzdG9tU2Nyb2xsYmFycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFn
ZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wYWludEN1c3RvbVNjcm9sbENvcm5lcihjb250ZXh0LCB2
Q29ybmVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHZDb3Ju
ZXIsIENvbG9yOjp3aGl0ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwotICAgIH0KLQotICAgIC8vUGFp
bnQgdGhlIHBhblNjcm9sbCBJY29uCi0gICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gcGFuU2Nyb2xs
SWNvbjsKLSAgICBpZiAobV9kYXRhLT5tX2RyYXdQYW5TY3JvbGxJY29uKSB7Ci0gICAgICAgIGlm
ICghcGFuU2Nyb2xsSWNvbikKLSAgICAgICAgICAgIHBhblNjcm9sbEljb24gPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoInBhbkljb24iKTsKLSAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdl
KHBhblNjcm9sbEljb24uZ2V0KCksIG1fZGF0YS0+bV9wYW5TY3JvbGxJY29uUG9pbnQpOwotICAg
IH0KKyAgICB1cGRhdGVXaW5kb3dSZWN0KEludFJlY3QobV9wYW5TY3JvbGxJY29uUG9pbnQsIElu
dFNpemUocGFuSWNvblNpemVMZW5ndGgsIHBhbkljb25TaXplTGVuZ3RoKSksIHRydWUpOwogfQog
CiB2b2lkIFNjcm9sbFZpZXc6OnRoZW1lQ2hhbmdlZCgpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwCShyZXZpc2lvbiAzNzA4NikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgU1ZHSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb24KICAgICAKICAgICBpZiAobV9mcmFtZS0+dmlldygp
LT5uZWVkc0xheW91dCgpKQogICAgICAgICBtX2ZyYW1lLT52aWV3KCktPmxheW91dCgpOwotICAg
IG1fZnJhbWUtPnBhaW50KGNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qoc3JjUmVjdCkpOworICAg
IG1fZnJhbWUtPnZpZXcoKS0+cGFpbnQoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChzcmNSZWN0
KSk7CiAKICAgICBpZiAoY29tcG9zaXRlT3AgIT0gQ29tcG9zaXRlU291cmNlT3ZlcikKICAgICAg
ICAgY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKSW5kZXg6IFdlYktpdC9tYWMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNzEz
OSkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMDgtMDktMzAgICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI2OQorICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUgU2Nyb2xsVmlldzo6cGFpbnQgbWV0aG9kIGNyb3NzLXBs
YXRmb3JtLiAgVGhlIHBhaW50IG1ldGhvZCBjYWxscyB0aGUgYmFzZSBjbGFzcworICAgICAgICBX
aWRnZXQgcGFpbnQgb24gcGxhdGZvcm1zIHdpdGggbmF0aXZlIHdpZGdldHMgKE1hYyBhbmQgd3gp
LiAgT3RoZXJ3aXNlIGl0IGNhbGxzIGEgdmlydHVhbCBmdW5jdGlvbiwKKyAgICAgICAgcGFpbnRD
b250ZW50cywgdG8gcGFpbnQgdGhlIFNjcm9sbFZpZXcncyBjb250ZW50cywgYW5kIHRoZW4gaXQg
cGFpbnRzIGVhY2ggb2YgdGhlIHR3byBzY3JvbGxiYXJzIGFuZAorICAgICAgICB0aGUgc2Nyb2xs
YmFyIGNvcm5lci4KKyAgICAgICAgCisgICAgICAgIFRoZSBzY3JvbGxiYXIgdGhlbWVzIGFyZSBu
b3cgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHNjcm9sbGJhciBjb3JuZXJzLiAgQXQgdGhlIG1v
bWVudCBTY3JvbGxiYXJUaGVtZVdpbiBzdGlsbAorICAgICAgICBwYWludHMgd2hpdGUgKHdoaWNo
IGlzIGluY29ycmVjdCksIHNvIGEgZnV0dXJlIHBhdGNoIHdpbGwgYWN0dWFsbHkgaW1wbGVtZW50
IHByb3BlciBuYXRpdmUgc2Nyb2xsIGNvcm5lciBwYWludGluZworICAgICAgICBmb3IgV2luZG93
cy4KKyAgICAgICAgCisgICAgICAgIHBhaW50Q29udGVudHMgaXMgaW1wbGVtZW50ZWQgYnkgRnJh
bWVWaWV3LCBhbmQgcmVwbGFjZXMgRnJhbWU6OnBhaW50LiAgQWxsIG9mIHRoZSBGcmFtZVByaXZh
dGUgbWVtYmVyCisgICAgICAgIHZhcmlhYmxlcyB1c2VkIGJ5IEZyYW1lOjpwYWludCBoYXZlIG1v
dmVkIHRvIEZyYW1lVmlld1ByaXZhdGUgaW5zdGVhZC4gIEFsbCBjYWxsZXJzIG9mIEZyYW1lOjpw
YWludCBoYXZlCisgICAgICAgIGJlZW4gcGF0Y2hlZCB0byB1c2UgRnJhbWVWaWV3OjpwYWludENv
bnRlbnRzIGluc3RlYWQuCisgICAgICAgCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJh
bWUgX2RyYXdSZWN0Ol0pOgorCiAyMDA4LTA5LTMwICBLZXZpbiBEZWNrZXIgIDxrZGVja2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiAzNzA4NikKKysrIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTU5LDcgKzU1OSw3IEBAIHN0YXRpYyBp
bmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZSgKICAgICBBU1NFUlQoW1tOU0dyYXBoaWNz
Q29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNGbGlwcGVkXSk7CiAgICAgR3JhcGhpY3NDb250ZXh0
IGNvbnRleHQocGxhdGZvcm1Db250ZXh0KTsKICAgICAKLSAgICBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5wYWludCgmY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7CisgICAgX3ByaXZhdGUt
PmNvcmVGcmFtZS0+dmlldygpLT5wYWludENvbnRlbnRzKCZjb250ZXh0LCBlbmNsb3NpbmdJbnRS
ZWN0KHJlY3QpKTsKIH0KIAogLy8gVXNlZCBieSBwYWdpbmF0aW9uIGNvZGUgY2FsbGVkIGZyb20g
QXBwS2l0IHdoZW4gYSBzdGFuZGFsb25lIHdlYiBwYWdlIGlzIHByaW50ZWQuCkluZGV4OiBXZWJL
aXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2
aXNpb24gMzcxMzkpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI2IEBACisyMDA4LTA5LTMwICAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNjkK
KyAgCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIFNjcm9sbFZpZXc6OnBhaW50IG1ldGhv
ZCBjcm9zcy1wbGF0Zm9ybS4gIFRoZSBwYWludCBtZXRob2QgY2FsbHMgdGhlIGJhc2UgY2xhc3MK
KyAgICAgICAgV2lkZ2V0IHBhaW50IG9uIHBsYXRmb3JtcyB3aXRoIG5hdGl2ZSB3aWRnZXRzIChN
YWMgYW5kIHd4KS4gIE90aGVyd2lzZSBpdCBjYWxscyBhIHZpcnR1YWwgZnVuY3Rpb24sCisgICAg
ICAgIHBhaW50Q29udGVudHMsIHRvIHBhaW50IHRoZSBTY3JvbGxWaWV3J3MgY29udGVudHMsIGFu
ZCB0aGVuIGl0IHBhaW50cyBlYWNoIG9mIHRoZSB0d28gc2Nyb2xsYmFycyBhbmQKKyAgICAgICAg
dGhlIHNjcm9sbGJhciBjb3JuZXIuCisgICAgICAgIAorICAgICAgICBUaGUgc2Nyb2xsYmFyIHRo
ZW1lcyBhcmUgbm93IHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBzY3JvbGxiYXIgY29ybmVycy4g
IEF0IHRoZSBtb21lbnQgU2Nyb2xsYmFyVGhlbWVXaW4gc3RpbGwKKyAgICAgICAgcGFpbnRzIHdo
aXRlICh3aGljaCBpcyBpbmNvcnJlY3QpLCBzbyBhIGZ1dHVyZSBwYXRjaCB3aWxsIGFjdHVhbGx5
IGltcGxlbWVudCBwcm9wZXIgbmF0aXZlIHNjcm9sbCBjb3JuZXIgcGFpbnRpbmcKKyAgICAgICAg
Zm9yIFdpbmRvd3MuCisgICAgICAgIAorICAgICAgICBwYWludENvbnRlbnRzIGlzIGltcGxlbWVu
dGVkIGJ5IEZyYW1lVmlldywgYW5kIHJlcGxhY2VzIEZyYW1lOjpwYWludC4gIEFsbCBvZiB0aGUg
RnJhbWVQcml2YXRlIG1lbWJlcgorICAgICAgICB2YXJpYWJsZXMgdXNlZCBieSBGcmFtZTo6cGFp
bnQgaGF2ZSBtb3ZlZCB0byBGcmFtZVZpZXdQcml2YXRlIGluc3RlYWQuICBBbGwgY2FsbGVycyBv
ZiBGcmFtZTo6cGFpbnQgaGF2ZQorICAgICAgICBiZWVuIHBhdGNoZWQgdG8gdXNlIEZyYW1lVmll
dzo6cGFpbnRDb250ZW50cyBpbnN0ZWFkLgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJG
cmFtZTo6cGFpbnREb2N1bWVudFJlY3RUb0NvbnRleHQpOgorICAgICAgICAoV2ViRnJhbWU6OnNw
b29sUGFnZXMpOgorCiAyMDA4LTA5LTMwICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgog
CiAgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjUwCklu
ZGV4OiBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dl
YkZyYW1lLmNwcAkocmV2aXNpb24gMzcwODYpCisrKyBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViRnJhbWU6OnBhaW4KICAgICBkaXJ0eVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7CiAgICAg
Z2MuY2xpcChkaXJ0eVJlY3QpOwogICAgIGdjLnRyYW5zbGF0ZSgtcmVjdC5sZWZ0LCAtcmVjdC50
b3ApOwotICAgIGNvcmVGcmFtZS0+cGFpbnQoJmdjLCByZWN0KTsKKyAgICB2aWV3LT5wYWludENv
bnRlbnRzKCZnYywgcmVjdCk7CiAgICAgZ2MucmVzdG9yZSgpOwogCiAgICAgcmV0dXJuIFNfT0s7
CkBAIC0xODM5LDcgKzE4MzksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkZyYW1l
OjpzcG9vCiAgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwY3R4LCBDR0Zsb2F0KC1wYWdl
UmVjdC54KCkpLCBDR0Zsb2F0KC1wYWdlUmVjdC55KCkraGVhZGVySGVpZ2h0KSk7ICAgLy8gcmVz
ZXJ2ZXMgc3BhY2UgZm9yIGhlYWRlcgogICAgICAgICBDR0NvbnRleHRTZXRCYXNlQ1RNKHBjdHgs
IGN0bSk7CiAKLSAgICAgICAgY29yZUZyYW1lLT5wYWludCgmc3Bvb2xDdHgsIHBhZ2VSZWN0KTsK
KyAgICAgICAgY29yZUZyYW1lLT52aWV3KCktPnBhaW50Q29udGVudHMoJnNwb29sQ3R4LCBwYWdl
UmVjdCk7CiAKICAgICAgICAgaWYgKHVpMikgewogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKHBjdHgsIENHRmxvYXQocGFnZVJlY3QueCgpKSwgQ0dGbG9hdChwYWdlUmVjdC55KCkp
LWhlYWRlckhlaWdodCk7Cg==
</data>
<flag name="review"
          id="10827"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>