<?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>168837</bug_id>
          
          <creation_ts>2017-02-24 11:58:15 -0800</creation_ts>
          <short_desc>[iOS] Throttle requestAnimationFrame to 30fps in low power mode</short_desc>
          <delta_ts>2017-02-28 13:28:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Animations</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=165694</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>168985</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1280816</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-24 11:58:15 -0800</bug_when>
    <thetext>Throttle requestAnimationFrame to 30fps in low power mode on iOS to save battery.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280817</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-02-24 11:58:53 -0800</bug_when>
    <thetext>&lt;rdar://problem/30700929&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281546</commentid>
    <comment_count>2</comment_count>
      <attachid>302874</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-27 14:47:38 -0800</bug_when>
    <thetext>Created attachment 302874
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281554</commentid>
    <comment_count>3</comment_count>
      <attachid>302874</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-02-27 14:54:39 -0800</bug_when>
    <thetext>Comment on attachment 302874
WIP patch

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

&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:52
&gt; +// Interval to hit 30ps.
&gt; +#define halfSpeedThrottlingAnimationInterval 0.030
&gt; +#define aggressiveThrottlingAnimationInterval 10

&quot;fps&quot;

Did you test that .030ms gives us 30fps? We may not need to back off as much.

Would be nice if these were &quot;Seconds&quot;.

&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:-95
&gt; -    LOG(Animations, &quot;%p - Setting RequestAnimationFrame throttling state to %d in frame %p (isMainFrame: %d)&quot;, this, isThrottled, m_document-&gt;frame(), m_document-&gt;frame() ? m_document-&gt;frame()-&gt;isMainFrame() : 0);

I would like to see a log when the throttling reasons changes (added or removed).

&gt; Source/WebCore/dom/ScriptedAnimationController.h:83
&gt; +    double animationIntervalForThrottlingState() const;

Return a Seconds

&gt; Source/WebCore/page/Page.cpp:1119
&gt; +    for (Frame* frame = &amp;page.mainFrame(); frame; frame = frame-&gt;tree().traverseNext()) {
&gt; +        auto* document = frame-&gt;document();
&gt; +        if (!document)
&gt; +            continue;
&gt; +        auto* scriptedAnimationController = document-&gt;scriptedAnimationController();
&gt; +        if (!scriptedAnimationController)
&gt; +            continue;
&gt; +
&gt; +        if (operation == ThrottlingReasonOperation::Add)
&gt; +            scriptedAnimationController-&gt;addThrottlingReason(reason);
&gt; +        else
&gt; +            scriptedAnimationController-&gt;removeThrottlingReason(reason);

What happens to unparented frames? Should we update a frame&apos;s throttling state when added to the DOM?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281558</commentid>
    <comment_count>4</comment_count>
      <attachid>302874</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-27 15:03:12 -0800</bug_when>
    <thetext>Comment on attachment 302874
WIP patch

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

&gt;&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:52
&gt;&gt; +#define aggressiveThrottlingAnimationInterval 10
&gt; 
&gt; &quot;fps&quot;
&gt; 
&gt; Did you test that .030ms gives us 30fps? We may not need to back off as much.
&gt; 
&gt; Would be nice if these were &quot;Seconds&quot;.

I am in the process of verifying the result on device.

What do you mean by &quot;Seconds&quot;? Do you think I should use static const variables of std::chrono type or Just append &quot;Seconds&quot; suffix to the defines.
I think we should kill those defines in favor of static const variables personally. I would also use std::chrono types for more clarity.

&gt;&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:-95
&gt;&gt; -    LOG(Animations, &quot;%p - Setting RequestAnimationFrame throttling state to %d in frame %p (isMainFrame: %d)&quot;, this, isThrottled, m_document-&gt;frame(), m_document-&gt;frame() ? m_document-&gt;frame()-&gt;isMainFrame() : 0);
&gt; 
&gt; I would like to see a log when the throttling reasons changes (added or removed).

Sure, I&apos;ll add back logging. RELEASE_LOG() or good old LOG()? I would go with RELEASE_LOG personally as long as it does not log too frequently.

&gt;&gt; Source/WebCore/page/Page.cpp:1119
&gt;&gt; +            scriptedAnimationController-&gt;removeThrottlingReason(reason);
&gt; 
&gt; What happens to unparented frames? Should we update a frame&apos;s throttling state when added to the DOM?

I haven&apos;t looked into this case yet. I&apos;ll make sure to look into it before uploading for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281566</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-02-27 15:16:19 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 302874 [details]
&gt; WIP patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=302874&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:52
&gt; &gt;&gt; +#define aggressiveThrottlingAnimationInterval 10
&gt; &gt; 
&gt; &gt; &quot;fps&quot;
&gt; &gt; 
&gt; &gt; Did you test that .030ms gives us 30fps? We may not need to back off as much.
&gt; &gt; 
&gt; &gt; Would be nice if these were &quot;Seconds&quot;.
&gt; 
&gt; I am in the process of verifying the result on device.
&gt; 
&gt; What do you mean by &quot;Seconds&quot;? Do you think I should use static const
&gt; variables of std::chrono type or Just append &quot;Seconds&quot; suffix to the defines.
&gt; I think we should kill those defines in favor of static const variables
&gt; personally. I would also use std::chrono types for more clarity.

I meant the Seconds type. We&apos;re moving away from std::chrono in favor of wtf/Seconds etc.

&gt; &gt;&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:-95
&gt; &gt;&gt; -    LOG(Animations, &quot;%p - Setting RequestAnimationFrame throttling state to %d in frame %p (isMainFrame: %d)&quot;, this, isThrottled, m_document-&gt;frame(), m_document-&gt;frame() ? m_document-&gt;frame()-&gt;isMainFrame() : 0);
&gt; &gt; 
&gt; &gt; I would like to see a log when the throttling reasons changes (added or removed).
&gt; 
&gt; Sure, I&apos;ll add back logging. RELEASE_LOG() or good old LOG()? I would go
&gt; with RELEASE_LOG personally as long as it does not log too frequently.

Sure

&gt; &gt;&gt; Source/WebCore/page/Page.cpp:1119
&gt; &gt;&gt; +            scriptedAnimationController-&gt;removeThrottlingReason(reason);
&gt; &gt; 
&gt; &gt; What happens to unparented frames? Should we update a frame&apos;s throttling state when added to the DOM?
&gt; 
&gt; I haven&apos;t looked into this case yet. I&apos;ll make sure to look into it before
&gt; uploading for review.

Thanks. With a test! I could imagine a page unparenting an iframe while throttled, then reparenting it when unthrottled; it needs to get updated in that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281578</commentid>
    <comment_count>6</comment_count>
      <attachid>302882</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-27 16:01:28 -0800</bug_when>
    <thetext>Created attachment 302882
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281824</commentid>
    <comment_count>7</comment_count>
      <attachid>302953</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-28 11:15:06 -0800</bug_when>
    <thetext>Created attachment 302953
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281843</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-28 11:41:00 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Comment on attachment 302874 [details]
&gt; &gt; WIP patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=302874&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:52
&gt; &gt; &gt;&gt; +#define aggressiveThrottlingAnimationInterval 10
&gt; &gt; &gt; 
&gt; &gt; &gt; &quot;fps&quot;
&gt; &gt; &gt; 
&gt; &gt; &gt; Did you test that .030ms gives us 30fps? We may not need to back off as much.
&gt; &gt; &gt; 
&gt; &gt; &gt; Would be nice if these were &quot;Seconds&quot;.
&gt; &gt; 
&gt; &gt; I am in the process of verifying the result on device.
&gt; &gt; 
&gt; &gt; What do you mean by &quot;Seconds&quot;? Do you think I should use static const
&gt; &gt; variables of std::chrono type or Just append &quot;Seconds&quot; suffix to the defines.
&gt; &gt; I think we should kill those defines in favor of static const variables
&gt; &gt; personally. I would also use std::chrono types for more clarity.
&gt; 
&gt; I meant the Seconds type. We&apos;re moving away from std::chrono in favor of
&gt; wtf/Seconds etc.
&gt; 
&gt; &gt; &gt;&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:-95
&gt; &gt; &gt;&gt; -    LOG(Animations, &quot;%p - Setting RequestAnimationFrame throttling state to %d in frame %p (isMainFrame: %d)&quot;, this, isThrottled, m_document-&gt;frame(), m_document-&gt;frame() ? m_document-&gt;frame()-&gt;isMainFrame() : 0);
&gt; &gt; &gt; 
&gt; &gt; &gt; I would like to see a log when the throttling reasons changes (added or removed).
&gt; &gt; 
&gt; &gt; Sure, I&apos;ll add back logging. RELEASE_LOG() or good old LOG()? I would go
&gt; &gt; with RELEASE_LOG personally as long as it does not log too frequently.
&gt; 
&gt; Sure
&gt; 
&gt; &gt; &gt;&gt; Source/WebCore/page/Page.cpp:1119
&gt; &gt; &gt;&gt; +            scriptedAnimationController-&gt;removeThrottlingReason(reason);
&gt; &gt; &gt; 
&gt; &gt; &gt; What happens to unparented frames? Should we update a frame&apos;s throttling state when added to the DOM?
&gt; &gt; 
&gt; &gt; I haven&apos;t looked into this case yet. I&apos;ll make sure to look into it before
&gt; &gt; uploading for review.
&gt; 
&gt; Thanks. With a test! I could imagine a page unparenting an iframe while
&gt; throttled, then reparenting it when unthrottled; it needs to get updated in
&gt; that case.

From the HTML spec:
&quot;When an iframe element is removed from a document, the user agent must discard the element&apos;s nested browsing context, if it is not null, and then set the element&apos;s nested browsing context to null.&quot;

and

&quot;When an iframe element is inserted into a document that has a browsing context, the user agent must create a new browsing context, set the element&apos;s nested browsing context to the newly-created browsing context, and then process the iframe attributes for the &quot;first time&quot;.&quot;

So when you remove an iframe from the document and then insert it back, it reloads, it does not keep its state. Upon reloading, the rAF would start again and get the right throttling (I&apos;ll add a test).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281853</commentid>
    <comment_count>9</comment_count>
      <attachid>302961</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-28 11:59:02 -0800</bug_when>
    <thetext>Created attachment 302961
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281862</commentid>
    <comment_count>10</comment_count>
      <attachid>302966</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-28 12:11:51 -0800</bug_when>
    <thetext>Created attachment 302966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281909</commentid>
    <comment_count>11</comment_count>
      <attachid>302966</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-28 13:28:21 -0800</bug_when>
    <thetext>Comment on attachment 302966
Patch

Clearing flags on attachment: 302966

Committed r213169: &lt;http://trac.webkit.org/changeset/213169&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281910</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-28 13:28:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302874</attachid>
            <date>2017-02-27 14:47:38 -0800</date>
            <delta_ts>2017-02-27 16:01:28 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>168837_throttle_rAF_lowPowerMode_wip.patch</filename>
            <type>text/plain</type>
            <size>14173</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL09wdGlvblNldC5oIGIvU291cmNlL1dURi93dGYv
T3B0aW9uU2V0LmgKaW5kZXggZTgzOWY0MjIyODQuLmYzYThjMDAyNGVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9PcHRpb25TZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25TZXQu
aApAQCAtMTI1LDYgKzEyNSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBsaHM7CiAgICAg
fQogCisgICAgZnJpZW5kIE9wdGlvblNldCYgb3BlcmF0b3ItPShPcHRpb25TZXQmIGxocywgT3B0
aW9uU2V0IHJocykKKyAgICB7CisgICAgICAgIGxocy5tX3N0b3JhZ2UgJj0gfnJocy5tX3N0b3Jh
Z2U7CisKKyAgICAgICAgcmV0dXJuIGxoczsKKyAgICB9CisKICAgICBjb25zdGV4cHIgZnJpZW5k
IE9wdGlvblNldCBvcGVyYXRvci0oT3B0aW9uU2V0IGxocywgT3B0aW9uU2V0IHJocykKICAgICB7
CiAgICAgICAgIHJldHVybiBPcHRpb25TZXQ6OmZyb21SYXcobGhzLm1fc3RvcmFnZSAmIH5yaHMu
bV9zdG9yYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGRmOGI2ZjdjNmQ3Li41Njk4
NmU4N2Q4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01NDgxLDEyICs1NDgxLDYgQEAg
dm9pZCBEb2N1bWVudDo6cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tz
KCkKICAgICAgICAgbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPnJlc3VtZSgpOwogfQog
Ci12b2lkIERvY3VtZW50OjpzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJTZXRUaHJvdHRsZWQo
Ym9vbCBpc1Rocm90dGxlZCkKLXsKLSAgICBpZiAobV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXIpCi0gICAgICAgIG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLT5zZXRUaHJvdHRsZWQo
aXNUaHJvdHRsZWQpOwotfQotCiB2b2lkIERvY3VtZW50Ojp3aW5kb3dTY3JlZW5EaWRDaGFuZ2Uo
UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogewogICAgIGlmIChtX3NjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggOTlmZmNkYjBjYzYuLjYxZGUz
MTk1Mjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtOTU4LDcgKzk1OCw2IEBAIHB1YmxpYzoK
ICAgICBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIqIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlcigpIHsgcmV0dXJuIG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9CiAg
ICAgdm9pZCBzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tzKCk7CiAg
ICAgdm9pZCByZXN1bWVTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKTsKLSAg
ICB2b2lkIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlclNldFRocm90dGxlZChib29sKTsKICAg
ICAKICAgICB2b2lkIHdpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAKaW5kZXggYjk0ZWJkZjM2NTcuLmI2MjExMDljMTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtNDYsOCArNDYsMTAg
QEAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogLy8gQWxsb3cgYSBsaXR0bGUgbW9y
ZSB0aGFuIDYwZnBzIHRvIG1ha2Ugc3VyZSB3ZSBjYW4gYXQgbGVhc3QgaGl0IHRoYXQgZnJhbWUg
cmF0ZS4KLSNkZWZpbmUgTWluaW11bUFuaW1hdGlvbkludGVydmFsIDAuMDE1Ci0jZGVmaW5lIE1p
bmltdW1UaHJvdHRsZWRBbmltYXRpb25JbnRlcnZhbCAxMAorI2RlZmluZSBmdWxsU3BlZWRBbmlt
YXRpb25JbnRlcnZhbCAwLjAxNQorLy8gSW50ZXJ2YWwgdG8gaGl0IDMwcHMuCisjZGVmaW5lIGhh
bGZTcGVlZFRocm90dGxpbmdBbmltYXRpb25JbnRlcnZhbCAwLjAzMAorI2RlZmluZSBhZ2dyZXNz
aXZlVGhyb3R0bGluZ0FuaW1hdGlvbkludGVydmFsIDEwCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNTksNiArNjEsMTAgQEAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpT
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBQbGEKICNlbmRp
ZgogewogICAgIHdpbmRvd1NjcmVlbkRpZENoYW5nZShkaXNwbGF5SUQpOworCisgICAgYXV0byog
cGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CisgICAgaWYgKHBhZ2UgJiYgcGFnZS0+aXNMb3dQb3dl
ck1vZGVFbmFibGVkKCkpCisgICAgICAgIGFkZFRocm90dGxpbmdSZWFzb24oVGhyb3R0bGluZ1Jl
YXNvbjo6TG93UG93ZXJNb2RlKTsKIH0KIAogU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjp+
U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKCkKQEAgLTg2LDI4ICs5Miw0NCBAQCB2b2lkIFNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lKCkKICAgICAgICAgc2NoZWR1bGVBbmlt
YXRpb24oKTsKIH0KIAotdm9pZCBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNldFRocm90
dGxlZChib29sIGlzVGhyb3R0bGVkKQordm9pZCBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6
OmFkZFRocm90dGxpbmdSZWFzb24oVGhyb3R0bGluZ1JlYXNvbiByZWFzb24pCit7CisjaWYgVVNF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBVU0UoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUVfRElTUExBWV9NT05JVE9SKQorICAgIGlmIChtX3Rocm90dGxpbmdSZWFzb25zLmNvbnRh
aW5zKHJlYXNvbikpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGhyb3R0bGluZ1JlYXNvbnMg
fD0gcmVhc29uOworCisgICAgaWYgKG1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkgeworICAg
ICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKKyAgICAgICAgc2NoZWR1bGVBbmltYXRpb24o
KTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworI2VuZGlmCit9CisK
K3ZvaWQgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVUaHJvdHRsaW5nUmVhc29u
KFRocm90dGxpbmdSZWFzb24gcmVhc29uKQogewogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRV9USU1FUikgJiYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRP
UikKLSAgICBpZiAobV9pc1Rocm90dGxlZCA9PSBpc1Rocm90dGxlZCkKKyAgICBpZiAoIW1fdGhy
b3R0bGluZ1JlYXNvbnMuY29udGFpbnMocmVhc29uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
TE9HKEFuaW1hdGlvbnMsICIlcCAtIFNldHRpbmcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRocm90
dGxpbmcgc3RhdGUgdG8gJWQgaW4gZnJhbWUgJXAgKGlzTWFpbkZyYW1lOiAlZCkiLCB0aGlzLCBp
c1Rocm90dGxlZCwgbV9kb2N1bWVudC0+ZnJhbWUoKSwgbV9kb2N1bWVudC0+ZnJhbWUoKSA/IG1f
ZG9jdW1lbnQtPmZyYW1lKCktPmlzTWFpbkZyYW1lKCkgOiAwKTsKKyAgICBtX3Rocm90dGxpbmdS
ZWFzb25zIC09IHJlYXNvbjsKIAotICAgIG1faXNUaHJvdHRsZWQgPSBpc1Rocm90dGxlZDsKICAg
ICBpZiAobV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKSB7CiAgICAgICAgIG1fYW5pbWF0aW9u
VGltZXIuc3RvcCgpOwogICAgICAgICBzY2hlZHVsZUFuaW1hdGlvbigpOwogICAgIH0KICNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGlzVGhyb3R0bGVkKTsKKyAgICBVTlVTRURfUEFSQU0ocmVhc29u
KTsKICNlbmRpZgogfQogCiBib29sIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNUaHJv
dHRsZWQoKSBjb25zdAogewogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikg
JiYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICByZXR1
cm4gbV9pc1Rocm90dGxlZDsKKyAgICByZXR1cm4gIW1fdGhyb3R0bGluZ1JlYXNvbnMuaXNFbXB0
eSgpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTE5Miw2ICsyMTQsMTgg
QEAgdm9pZCBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OndpbmRvd1NjcmVlbkRpZENoYW5n
ZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGEKICNlbmRpZgogfQogCitkb3VibGUgU2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyOjphbmltYXRpb25JbnRlcnZhbEZvclRocm90dGxpbmdTdGF0ZSgp
IGNvbnN0Cit7CisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBVU0Uo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQorICAgIGlmIChtX3Rocm90
dGxpbmdSZWFzb25zLmNvbnRhaW5zKFRocm90dGxpbmdSZWFzb246OlZpc3VhbGx5SWRsZSkgfHwg
bV90aHJvdHRsaW5nUmVhc29ucy5jb250YWlucyhUaHJvdHRsaW5nUmVhc29uOjpPdXRzaWRlVmll
d3BvcnQpKQorICAgICAgICByZXR1cm4gYWdncmVzc2l2ZVRocm90dGxpbmdBbmltYXRpb25JbnRl
cnZhbDsKKyAgICBpZiAobV90aHJvdHRsaW5nUmVhc29ucy5jb250YWlucyhUaHJvdHRsaW5nUmVh
c29uOjpMb3dQb3dlck1vZGUpKQorICAgICAgICByZXR1cm4gaGFsZlNwZWVkVGhyb3R0bGluZ0Fu
aW1hdGlvbkludGVydmFsOworICAgIEFTU0VSVChtX3Rocm90dGxpbmdSZWFzb25zLmlzRW1wdHko
KSk7CisjZW5kaWYKKyAgICByZXR1cm4gZnVsbFNwZWVkQW5pbWF0aW9uSW50ZXJ2YWw7Cit9CisK
IHZvaWQgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7
CiAgICAgaWYgKCFyZXF1ZXN0QW5pbWF0aW9uRnJhbWVFbmFibGVkKCkpCkBAIC0xOTksNyArMjMz
LDcgQEAgdm9pZCBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNjaGVkdWxlQW5pbWF0aW9u
KCkKIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKICNpZiBVU0UoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIGlmICghbV9pc1VzaW5n
VGltZXIgJiYgIW1faXNUaHJvdHRsZWQpIHsKKyAgICBpZiAoIW1faXNVc2luZ1RpbWVyICYmICFp
c1Rocm90dGxlZCgpKSB7CiAgICAgICAgIGlmIChEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2Vy
OjpzaGFyZWRNYW5hZ2VyKCkuc2NoZWR1bGVBbmltYXRpb24oKnRoaXMpKQogICAgICAgICAgICAg
cmV0dXJuOwogCkBAIC0yMDksMTIgKzI0Myw3IEBAIHZvaWQgU2NyaXB0ZWRBbmltYXRpb25Db250
cm9sbGVyOjpzY2hlZHVsZUFuaW1hdGlvbigpCiAgICAgaWYgKG1fYW5pbWF0aW9uVGltZXIuaXNB
Y3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIGFuaW1hdGlvbkludGVydmFs
ID0gTWluaW11bUFuaW1hdGlvbkludGVydmFsOwotI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRV9USU1FUikgJiYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRP
UikKLSAgICBpZiAobV9pc1Rocm90dGxlZCkKLSAgICAgICAgYW5pbWF0aW9uSW50ZXJ2YWwgPSBN
aW5pbXVtVGhyb3R0bGVkQW5pbWF0aW9uSW50ZXJ2YWw7Ci0jZW5kaWYKLQorICAgIGRvdWJsZSBh
bmltYXRpb25JbnRlcnZhbCA9IGFuaW1hdGlvbkludGVydmFsRm9yVGhyb3R0bGluZ1N0YXRlKCk7
CiAgICAgZG91YmxlIHNjaGVkdWxlRGVsYXkgPSBzdGQ6Om1heDxkb3VibGU+KGFuaW1hdGlvbklu
dGVydmFsIC0gKG1fZG9jdW1lbnQtPmRvbVdpbmRvdygpLT5ub3dUaW1lc3RhbXAoKSAtIG1fbGFz
dEFuaW1hdGlvbkZyYW1lVGltZXN0YW1wKSwgMCk7CiAgICAgbV9hbmltYXRpb25UaW1lci5zdGFy
dE9uZVNob3Qoc2NoZWR1bGVEZWxheSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4IDAxMmMyNTg2MjZkLi42OWZiNWVh
MTBlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRy
b2xsZXIuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiRE9NVGltZVN0YW1wLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNjgsNyArNjksMTAgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzdXNwZW5kKCk7CiAgICAgdm9pZCByZXN1bWUoKTsKLSAgICB2b2lkIHNldFRocm90dGxlZChi
b29sKTsKKworICAgIGVudW0gY2xhc3MgVGhyb3R0bGluZ1JlYXNvbiB7IFZpc3VhbGx5SWRsZSwg
T3V0c2lkZVZpZXdwb3J0LCBMb3dQb3dlck1vZGUgfTsKKyAgICB2b2lkIGFkZFRocm90dGxpbmdS
ZWFzb24oVGhyb3R0bGluZ1JlYXNvbik7CisgICAgdm9pZCByZW1vdmVUaHJvdHRsaW5nUmVhc29u
KFRocm90dGxpbmdSZWFzb24pOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNUaHJvdHRsZWQo
KSBjb25zdDsKIAogICAgIHZvaWQgd2luZG93U2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxh
eUlEKTsKQEAgLTc2LDYgKzgwLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQqLCBQbGF0Zm9ybURpc3BsYXlJRCk7CiAKKyAgICBk
b3VibGUgYW5pbWF0aW9uSW50ZXJ2YWxGb3JUaHJvdHRsaW5nU3RhdGUoKSBjb25zdDsKKwogICAg
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4+IENh
bGxiYWNrTGlzdDsKICAgICBDYWxsYmFja0xpc3QgbV9jYWxsYmFja3M7CiAKQEAgLTk3LDcgKzEw
Myw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRl
RGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIGJvb2wgbV9pc1VzaW5nVGltZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Rocm90
dGxlZCB7IGZhbHNlIH07CisKKyAgICBPcHRpb25TZXQ8VGhyb3R0bGluZ1JlYXNvbj4gbV90aHJv
dHRsaW5nUmVhc29uczsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmlu
ZGV4IGQxNTA4MDVkYjQ1Li4zYzljZWE5ZjY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cApAQCAtMjU2Myw4ICsyNTYzLDEyIEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVTY3JpcHRlZEFu
aW1hdGlvbnNBbmRUaW1lcnNUaHJvdHRsaW5nU3RhdGUoY29uc3QgSW50UmVjdCYKICAgICAvLyBX
ZSBkb24ndCB0aHJvdHRsZSB6ZXJvLXNpemUgb3IgZGlzcGxheTpub25lIGZyYW1lcyBiZWNhdXNl
IHRob3NlIGFyZSB1c3VhbGx5IHV0aWxpdHkgZnJhbWVzLgogICAgIGJvb2wgc2hvdWxkVGhyb3R0
bGUgPSB2aXNpYmxlUmVjdC5pc0VtcHR5KCkgJiYgIW1fc2l6ZS5pc0VtcHR5KCkgJiYgZnJhbWUo
KS5vd25lclJlbmRlcmVyKCk7CiAKLSAgICBpZiAoYXV0byogc2NyaXB0ZWRBbmltYXRpb25Db250
cm9sbGVyID0gZG9jdW1lbnQtPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcigpKQotICAgICAg
ICBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPnNldFRocm90dGxlZChzaG91bGRUaHJvdHRs
ZSk7CisgICAgaWYgKGF1dG8qIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IGRvY3VtZW50
LT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKSkgeworICAgICAgICBpZiAoc2hvdWxkVGhy
b3R0bGUpCisgICAgICAgICAgICBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPmFkZFRocm90
dGxpbmdSZWFzb24oU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpUaHJvdHRsaW5nUmVhc29u
OjpPdXRzaWRlVmlld3BvcnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZVRocm90dGxpbmdSZWFzb24oU2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOjpUaHJvdHRsaW5nUmVhc29uOjpPdXRzaWRlVmlld3BvcnQpOworICAgIH0K
IAogICAgIGRvY3VtZW50LT5zZXRUaW1lclRocm90dGxpbmdFbmFibGVkKHNob3VsZFRocm90dGxl
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDU2NzA0NDc5ZWRkLi43ZjMxMjVlNzYzNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTGliV2ViUlRDUHJvdmlkZXIuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTG93UG93ZXJNb2RlTm90aWZpZXIuaCIKICNpbmNsdWRl
ICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKICNpbmNs
dWRlICJOYXZpZ2F0b3IuaCIKQEAgLTg0LDYgKzg1LDcgQEAKICNpbmNsdWRlICJTVkdEb2N1bWVu
dEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC0yNjMsNiArMjY1LDcgQEAgUGFnZTo6
UGFnZShQYWdlQ29uZmlndXJhdGlvbiYmIHBhZ2VDb25maWd1cmF0aW9uKQogICAgICwgbV9pc0Ns
b3NpbmcoZmFsc2UpCiAgICAgLCBtX2lzVXRpbGl0eVBhZ2UoaXNVdGlsaXR5UGFnZUNocm9tZUNs
aWVudChjaHJvbWUoKS5jbGllbnQoKSkpCiAgICAgLCBtX3BlcmZvcm1hbmNlTW9uaXRvcihpc1V0
aWxpdHlQYWdlKCkgPyBudWxscHRyIDogc3RkOjptYWtlX3VuaXF1ZTxQZXJmb3JtYW5jZU1vbml0
b3I+KCp0aGlzKSkKKyAgICAsIG1fbG93UG93ZXJNb2RlTm90aWZpZXIoc3RkOjptYWtlX3VuaXF1
ZTxMb3dQb3dlck1vZGVOb3RpZmllcj4oW3RoaXNdKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVk
KSB7IGhhbmRsZUxvd01vZGVQb3dlckNoYW5nZShpc0xvd1Bvd2VyTW9kZUVuYWJsZWQpOyB9KSkK
IHsKICAgICB1cGRhdGVUaW1lclRocm90dGxpbmdTdGF0ZSgpOwogCkBAIC05NTQsNiArOTU3LDEx
IEBAIGJvb2wgUGFnZTo6aXNPbmx5Tm9uVXRpbGl0eVBhZ2UoKSBjb25zdAogICAgIHJldHVybiAh
aXNVdGlsaXR5UGFnZSgpICYmIG5vblV0aWxpdHlQYWdlQ291bnQgPT0gMTsKIH0KIAorYm9vbCBQ
YWdlOjppc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xvd1Bv
d2VyTW9kZU5vdGlmaWVyLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKTsKK30KKwogdm9pZCBQYWdl
OjpzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQogewogICAgIGlmIChtX3Rv
cENvbnRlbnRJbnNldCA9PSBjb250ZW50SW5zZXQpCkBAIC0xMDk0LDE0ICsxMTAyLDM0IEBAIHZv
aWQgUGFnZTo6cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25zKCkKICAgICB9CiB9CiAKLXZvaWQgUGFn
ZTo6c2V0SXNWaXN1YWxseUlkbGVJbnRlcm5hbChib29sIGlzVmlzdWFsbHlJZGxlKQorZW51bSBj
bGFzcyBUaHJvdHRsaW5nUmVhc29uT3BlcmF0aW9uIHsgQWRkLCBSZW1vdmUgfTsKK3N0YXRpYyB2
b2lkIHVwZGF0ZVNjcmlwdGVkQW5pbWF0aW9uc1Rocm90dGxpbmdSZWFzb24oUGFnZSYgcGFnZSwg
VGhyb3R0bGluZ1JlYXNvbk9wZXJhdGlvbiBvcGVyYXRpb24sIFNjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlcjo6VGhyb3R0bGluZ1JlYXNvbiByZWFzb24pCiB7Ci0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZnJh
bWUtPmRvY3VtZW50KCktPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlclNldFRocm90dGxlZChp
c1Zpc3VhbGx5SWRsZSk7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS5tYWluRnJhbWUo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgICAg
ICBhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgICAgICBpZiAoIWRvY3Vt
ZW50KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8qIHNjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlciA9IGRvY3VtZW50LT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKTsK
KyAgICAgICAgaWYgKCFzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBpZiAob3BlcmF0aW9uID09IFRocm90dGxpbmdSZWFzb25PcGVy
YXRpb246OkFkZCkKKyAgICAgICAgICAgIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+YWRk
VGhyb3R0bGluZ1JlYXNvbihyZWFzb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3Jp
cHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZVRocm90dGxpbmdSZWFzb24ocmVhc29uKTsK
ICAgICB9CiB9CiAKK3ZvaWQgUGFnZTo6c2V0SXNWaXN1YWxseUlkbGVJbnRlcm5hbChib29sIGlz
VmlzdWFsbHlJZGxlKQoreworICAgIHVwZGF0ZVNjcmlwdGVkQW5pbWF0aW9uc1Rocm90dGxpbmdS
ZWFzb24oKnRoaXMsIGlzVmlzdWFsbHlJZGxlID8gVGhyb3R0bGluZ1JlYXNvbk9wZXJhdGlvbjo6
QWRkIDogVGhyb3R0bGluZ1JlYXNvbk9wZXJhdGlvbjo6UmVtb3ZlLCBTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb246OlZpc3VhbGx5SWRsZSk7Cit9CisKK3ZvaWQg
UGFnZTo6aGFuZGxlTG93TW9kZVBvd2VyQ2hhbmdlKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVk
KQoreworICAgIHVwZGF0ZVNjcmlwdGVkQW5pbWF0aW9uc1Rocm90dGxpbmdSZWFzb24oKnRoaXMs
IGlzTG93UG93ZXJNb2RlRW5hYmxlZCA/IFRocm90dGxpbmdSZWFzb25PcGVyYXRpb246OkFkZCA6
IFRocm90dGxpbmdSZWFzb25PcGVyYXRpb246OlJlbW92ZSwgU2NyaXB0ZWRBbmltYXRpb25Db250
cm9sbGVyOjpUaHJvdHRsaW5nUmVhc29uOjpMb3dQb3dlck1vZGUpOworfQorCiB2b2lkIFBhZ2U6
OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKCkKIHsKICAgICAvLyBGSVhNRTogRXZlbnR1
YWxseSB3ZSB3aWxsIG1vdmUgdG8gYSBtb2RlbCBvZiBqdXN0IGJlaW5nIGhhbmRlZCB0aGUgc2hl
ZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmgKaW5kZXggNzNlZTI2OTJiMTEuLmEzYzZkYThmOTMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuaApAQCAtOTksNiArOTksNyBAQCBjbGFzcyBVc2VySW5wdXRCcmlkZ2U7CiBjbGFzcyBJbnNw
ZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwogY2xhc3MgTGliV2ViUlRD
UHJvdmlkZXI7CitjbGFzcyBMb3dQb3dlck1vZGVOb3RpZmllcjsKIGNsYXNzIE1haW5GcmFtZTsK
IGNsYXNzIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcjsKIGNsYXNzIE1lZGlhUGxheWJhY2tUYXJnZXQ7
CkBAIC01NzYsNiArNTc3LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFz
U2VsZWN0aW9uQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAjZW5kaWYKIAor
ICAgIGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBpbml0R3JvdXAoKTsKIApAQCAtNTk4LDYgKzYwMSw4IEBAIHBy
aXZhdGU6CiAKICAgICBWZWN0b3I8UmVmPFBsdWdpblZpZXdCYXNlPj4gcGx1Z2luVmlld3MoKTsK
IAorICAgIHZvaWQgaGFuZGxlTG93TW9kZVBvd2VyQ2hhbmdlKGJvb2wpOworCiAgICAgZW51bSBj
bGFzcyBUaW1lclRocm90dGxpbmdTdGF0ZSB7IERpc2FibGVkLCBFbmFibGVkLCBFbmFibGVkSW5j
cmVhc2luZyB9OwogICAgIHZvaWQgaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hh
bmdlZCgpOwogICAgIHZvaWQgc2V0VGltZXJUaHJvdHRsaW5nU3RhdGUoVGltZXJUaHJvdHRsaW5n
U3RhdGUpOwpAQCAtNzgwLDYgKzc4NSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25hbDxF
dmVudFRocm90dGxpbmdCZWhhdmlvcj4gbV9ldmVudFRocm90dGxpbmdCZWhhdmlvck92ZXJyaWRl
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBlcmZvcm1hbmNlTW9uaXRvcj4gbV9wZXJmb3JtYW5j
ZU1vbml0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPExvd1Bvd2VyTW9kZU5vdGlmaWVyPiBtX2xv
d1Bvd2VyTW9kZU5vdGlmaWVyOwogCiAgICAgYm9vbCBtX2lzUnVubmluZ1VzZXJTY3JpcHRzIHsg
ZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9P
cHRpb25TZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uU2V0LmNw
cAppbmRleCBmMDE3MzgzMWI5MS4uNzU1MTc5NDhhNWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL09wdGlvblNldC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvT3B0aW9uU2V0LmNwcApAQCAtODYsNiArODYsMTggQEAgVEVTVChXVEZfT3B0
aW9uU2V0LCBNaW51cykKICAgICBFWFBFQ1RfVFJVRSgoc2V0IC0gc2V0KS5pc0VtcHR5KCkpOwog
fQogCitURVNUKFdURl9PcHRpb25TZXQsIE1pbnVzRXF1YWwpCit7CisgICAgT3B0aW9uU2V0PEV4
YW1wbGVGbGFncz4gc2V0IHsgRXhhbXBsZUZsYWdzOjpBLCBFeGFtcGxlRmxhZ3M6OkIsIEV4YW1w
bGVGbGFnczo6QyB9OworCisgICAgRVhQRUNUX1RSVUUoKChzZXQgLT0gRXhhbXBsZUZsYWdzOjpB
KSA9PSBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiB7IEV4YW1wbGVGbGFnczo6QiwgRXhhbXBsZUZs
YWdzOjpDIH0pKTsKKyAgICBFWFBFQ1RfVFJVRSgoc2V0ID09IE9wdGlvblNldDxFeGFtcGxlRmxh
Z3M+IHsgRXhhbXBsZUZsYWdzOjpCLCBFeGFtcGxlRmxhZ3M6OkMgfSkpOworICAgIEVYUEVDVF9U
UlVFKCgoc2V0IC09IEV4YW1wbGVGbGFnczo6RCkgPT0gT3B0aW9uU2V0PEV4YW1wbGVGbGFncz4g
eyBFeGFtcGxlRmxhZ3M6OkIsIEV4YW1wbGVGbGFnczo6QyB9KSk7CisgICAgRVhQRUNUX1RSVUUo
KHNldCA9PSBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiB7IEV4YW1wbGVGbGFnczo6QiwgRXhhbXBs
ZUZsYWdzOjpDIH0pKTsKKyAgICBFWFBFQ1RfVFJVRSgoc2V0IC09IHNldCkuaXNFbXB0eSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShzZXQuaXNFbXB0eSgpKTsKK30KKwogVEVTVChXVEZfT3B0aW9uU2V0
LCBDb250YWluc1R3b0ZsYWdzKQogewogICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+IHNldCB7
IEV4YW1wbGVGbGFnczo6QSwgRXhhbXBsZUZsYWdzOjpCIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302882</attachid>
            <date>2017-02-27 16:01:28 -0800</date>
            <delta_ts>2017-02-28 11:15:06 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>168837_throttle_rAF_lowPowerMode_wip.patch</filename>
            <type>text/plain</type>
            <size>17824</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL09wdGlvblNldC5oIGIvU291cmNlL1dURi93dGYv
T3B0aW9uU2V0LmgKaW5kZXggZTgzOWY0MjIyODQuLmYzYThjMDAyNGVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9PcHRpb25TZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25TZXQu
aApAQCAtMTI1LDYgKzEyNSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBsaHM7CiAgICAg
fQogCisgICAgZnJpZW5kIE9wdGlvblNldCYgb3BlcmF0b3ItPShPcHRpb25TZXQmIGxocywgT3B0
aW9uU2V0IHJocykKKyAgICB7CisgICAgICAgIGxocy5tX3N0b3JhZ2UgJj0gfnJocy5tX3N0b3Jh
Z2U7CisKKyAgICAgICAgcmV0dXJuIGxoczsKKyAgICB9CisKICAgICBjb25zdGV4cHIgZnJpZW5k
IE9wdGlvblNldCBvcGVyYXRvci0oT3B0aW9uU2V0IGxocywgT3B0aW9uU2V0IHJocykKICAgICB7
CiAgICAgICAgIHJldHVybiBPcHRpb25TZXQ6OmZyb21SYXcobGhzLm1fc3RvcmFnZSAmIH5yaHMu
bV9zdG9yYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGRmOGI2ZjdjNmQ3Li5iMWUy
ZjRhMmE5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01NDgxLDEyICs1NDgxLDYgQEAg
dm9pZCBEb2N1bWVudDo6cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tz
KCkKICAgICAgICAgbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPnJlc3VtZSgpOwogfQog
Ci12b2lkIERvY3VtZW50OjpzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJTZXRUaHJvdHRsZWQo
Ym9vbCBpc1Rocm90dGxlZCkKLXsKLSAgICBpZiAobV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXIpCi0gICAgICAgIG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLT5zZXRUaHJvdHRsZWQo
aXNUaHJvdHRsZWQpOwotfQotCiB2b2lkIERvY3VtZW50Ojp3aW5kb3dTY3JlZW5EaWRDaGFuZ2Uo
UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogewogICAgIGlmIChtX3NjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlcikKQEAgLTYwNTgsOSArNjA1Miw5IEBAIGludCBEb2N1bWVudDo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJiBjYWxs
YmFjCiB7CiAgICAgaWYgKCFtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcikgewogI2lmIFVT
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAgICAgIG1fc2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpj
cmVhdGUodGhpcywgcGFnZSgpID8gcGFnZSgpLT5jaHJvbWUoKS5kaXNwbGF5SUQoKSA6IDApOwor
ICAgICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IFNjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlcjo6Y3JlYXRlKCp0aGlzLCBwYWdlKCkgPyBwYWdlKCktPmNocm9tZSgpLmRpc3Bs
YXlJRCgpIDogMCk7CiAjZWxzZQotICAgICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxl
ciA9IFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKHRoaXMsIDApOworICAgICAg
ICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IFNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlcjo6Y3JlYXRlKCp0aGlzLCAwKTsKICNlbmRpZgogICAgICAgICAvLyBJdCdzIHBvc3NpYmxl
IHRoYXQgdGhlIFBhZ2UgbWF5IGhhdmUgc3VzcGVuZGVkIHNjcmlwdGVkIGFuaW1hdGlvbnMgYmVm
b3JlCiAgICAgICAgIC8vIHdlIHdlcmUgY3JlYXRlZC4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhh
dCB3ZSBkb24ndCBzdGFydCB1cCB0aGUgYW5pbWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4
IDk5ZmZjZGIwY2M2Li42MWRlMzE5NTI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTk1OCw3
ICs5NTgsNiBAQCBwdWJsaWM6CiAgICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKiBzY3Jp
cHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVybiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlci5nZXQoKTsgfQogICAgIHZvaWQgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlckNhbGxiYWNrcygpOwogICAgIHZvaWQgcmVzdW1lU2NyaXB0ZWRBbmltYXRpb25Db250cm9s
bGVyQ2FsbGJhY2tzKCk7Ci0gICAgdm9pZCBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJTZXRU
aHJvdHRsZWQoYm9vbCk7CiAgICAgCiAgICAgdm9pZCB3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoUGxh
dGZvcm1EaXNwbGF5SUQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGI5NGViZGYzNjU3Li4zNzMxYWVkZWE2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAKQEAgLTQwLDI1ICs0MCwzNCBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8
d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
X1RJTUVSKQogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KIAogLy8gQWxsb3cgYSBsaXR0bGUgbW9yZSB0aGFuIDYwZnBzIHRvIG1ha2Ugc3VyZSB3ZSBj
YW4gYXQgbGVhc3QgaGl0IHRoYXQgZnJhbWUgcmF0ZS4KLSNkZWZpbmUgTWluaW11bUFuaW1hdGlv
bkludGVydmFsIDAuMDE1Ci0jZGVmaW5lIE1pbmltdW1UaHJvdHRsZWRBbmltYXRpb25JbnRlcnZh
bCAxMAorc3RhdGljIGNvbnN0IFNlY29uZHMgZnVsbFNwZWVkQW5pbWF0aW9uSW50ZXJ2YWwgeyAw
LjAxNSB9OworLy8gQWxsb3cgYSBsaXR0bGUgbW9yZSB0aGFuIDMwZnBzIHRvIG1ha2Ugc3VyZSB3
ZSBjYW4gYXQgbGVhc3QgaGl0IHRoYXQgZnJhbWUgcmF0ZS4KK3N0YXRpYyBjb25zdCBTZWNvbmRz
IGhhbGZTcGVlZFRocm90dGxpbmdBbmltYXRpb25JbnRlcnZhbCB7IDAuMDMwIH07CitzdGF0aWMg
Y29uc3QgU2Vjb25kcyBhZ2dyZXNzaXZlVGhyb3R0bGluZ0FuaW1hdGlvbkludGVydmFsIHsgMTAg
fTsKICNlbmRpZgogCisjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAuLi4pIFJF
TEVBU0VfTE9HX0lGKHBhZ2UoKSAmJiBwYWdlKCktPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
LCBQZXJmb3JtYW5jZUxvZ2dpbmcsICIlcCAtIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6
IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoRG9j
dW1lbnQqIGRvY3VtZW50LCBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCi0gICAgOiBtX2Rv
Y3VtZW50KGRvY3VtZW50KQorU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpTY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50LCBQbGF0Zm9ybURpc3BsYXlJRCBk
aXNwbGF5SUQpCisgICAgOiBtX2RvY3VtZW50KCZkb2N1bWVudCkKICNpZiBVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfVElNRVIpCiAgICAgLCBtX2FuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjphbmltYXRpb25UaW1lckZpcmVkKQogI2VuZGlmCiB7
CiAgICAgd2luZG93U2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCk7CisKKyAgICBhdXRvKiBwYWdl
ID0gZG9jdW1lbnQucGFnZSgpOworICAgIGlmIChwYWdlICYmIHBhZ2UtPmlzTG93UG93ZXJNb2Rl
RW5hYmxlZCgpKQorICAgICAgICBhZGRUaHJvdHRsaW5nUmVhc29uKFRocm90dGxpbmdSZWFzb246
Okxvd1Bvd2VyTW9kZSk7CiB9CiAKIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6flNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcigpCkBAIC04NiwyOCArOTUsNzQgQEAgdm9pZCBTY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZSgpCiAgICAgICAgIHNjaGVkdWxlQW5pbWF0aW9u
KCk7CiB9CiAKLXZvaWQgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpzZXRUaHJvdHRsZWQo
Ym9vbCBpc1Rocm90dGxlZCkKK3N0YXRpYyBjb25zdCBjaGFyKiB0aHJvdHRsaW5nUmVhc29uVG9T
dHJpbmcoU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpUaHJvdHRsaW5nUmVhc29uIHJlYXNv
bikKK3sKKyAgICBzd2l0Y2ggKHJlYXNvbikgeworICAgIGNhc2UgU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyOjpUaHJvdHRsaW5nUmVhc29uOjpWaXN1YWxseUlkbGU6CisgICAgICAgIHJldHVy
biAiVmlzdWFsbHlJZGxlIjsKKyAgICBjYXNlIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6
VGhyb3R0bGluZ1JlYXNvbjo6T3V0c2lkZVZpZXdwb3J0OgorICAgICAgICByZXR1cm4gIk91dHNp
ZGVWaWV3cG9ydCI7CisgICAgY2FzZSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OlRocm90
dGxpbmdSZWFzb246Okxvd1Bvd2VyTW9kZToKKyAgICAgICAgcmV0dXJuICJMb3dQb3dlck1vZGUi
OworICAgIH0KK30KKworc3RhdGljIFN0cmluZyB0aHJvdHRsaW5nUmVhc29uc1RvU3RyaW5nKE9w
dGlvblNldDxTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb24+IHJl
YXNvbnMpCit7CisgICAgaWYgKHJlYXNvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJbVW50aHJvdHRsZWRdIik7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisgICAgZm9yIChhdXRvIHJlYXNvbiA6IHJlYXNvbnMpIHsKKyAgICAgICAgaWYgKCFidWlsZGVy
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCd8Jyk7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHRocm90dGxpbmdSZWFzb25Ub1N0cmluZyhyZWFzb24pKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwordm9pZCBTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXI6OmFkZFRocm90dGxpbmdSZWFzb24oVGhyb3R0bGluZ1JlYXNvbiByZWFzb24p
Cit7CisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBVU0UoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQorICAgIGlmIChtX3Rocm90dGxpbmdS
ZWFzb25zLmNvbnRhaW5zKHJlYXNvbikpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGhyb3R0
bGluZ1JlYXNvbnMgfD0gcmVhc29uOworCisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiYWRk
VGhyb3R0bGluZ1JlYXNvbiglcykgLT4gJXMiLCB0aHJvdHRsaW5nUmVhc29uVG9TdHJpbmcocmVh
c29uKSwgdGhyb3R0bGluZ1JlYXNvbnNUb1N0cmluZyhtX3Rocm90dGxpbmdSZWFzb25zKS51dGY4
KCkuZGF0YSgpKTsKKworICAgIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpIHsKKyAg
ICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7CisgICAgICAgIHNjaGVkdWxlQW5pbWF0aW9u
KCk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVhc29uKTsKKyNlbmRpZgorfQor
Cit2b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlVGhyb3R0bGluZ1JlYXNv
bihUaHJvdHRsaW5nUmVhc29uIHJlYXNvbikKIHsKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUVfVElNRVIpICYmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklU
T1IpCi0gICAgaWYgKG1faXNUaHJvdHRsZWQgPT0gaXNUaHJvdHRsZWQpCisgICAgaWYgKCFtX3Ro
cm90dGxpbmdSZWFzb25zLmNvbnRhaW5zKHJlYXNvbikpCiAgICAgICAgIHJldHVybjsKIAotICAg
IExPRyhBbmltYXRpb25zLCAiJXAgLSBTZXR0aW5nIFJlcXVlc3RBbmltYXRpb25GcmFtZSB0aHJv
dHRsaW5nIHN0YXRlIHRvICVkIGluIGZyYW1lICVwIChpc01haW5GcmFtZTogJWQpIiwgdGhpcywg
aXNUaHJvdHRsZWQsIG1fZG9jdW1lbnQtPmZyYW1lKCksIG1fZG9jdW1lbnQtPmZyYW1lKCkgPyBt
X2RvY3VtZW50LT5mcmFtZSgpLT5pc01haW5GcmFtZSgpIDogMCk7CisgICAgbV90aHJvdHRsaW5n
UmVhc29ucyAtPSByZWFzb247CisKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJyZW1vdmVU
aHJvdHRsaW5nUmVhc29uKCVzKSAtPiAlcyIsIHRocm90dGxpbmdSZWFzb25Ub1N0cmluZyhyZWFz
b24pLCB0aHJvdHRsaW5nUmVhc29uc1RvU3RyaW5nKG1fdGhyb3R0bGluZ1JlYXNvbnMpLnV0Zjgo
KS5kYXRhKCkpOwogCi0gICAgbV9pc1Rocm90dGxlZCA9IGlzVGhyb3R0bGVkOwogICAgIGlmICht
X2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpIHsKICAgICAgICAgbV9hbmltYXRpb25UaW1lci5z
dG9wKCk7CiAgICAgICAgIHNjaGVkdWxlQW5pbWF0aW9uKCk7CiAgICAgfQogI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oaXNUaHJvdHRsZWQpOworICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOwogI2Vu
ZGlmCiB9CiAKIGJvb2wgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjppc1Rocm90dGxlZCgp
IGNvbnN0CiB7CiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBVU0Uo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIHJldHVybiBtX2lz
VGhyb3R0bGVkOworICAgIHJldHVybiAhbV90aHJvdHRsaW5nUmVhc29ucy5pc0VtcHR5KCk7CiAj
ZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAtMTkyLDYgKzI0NywyMyBAQCB2b2lk
IFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKFBsYXRm
b3JtRGlzcGxheUlEIGRpc3BsYQogI2VuZGlmCiB9CiAKK1NlY29uZHMgU2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOjphbmltYXRpb25JbnRlcnZhbEZvclRocm90dGxpbmdTdGF0ZSgpIGNvbnN0
Cit7CisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBVU0UoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQorICAgIGlmIChtX3Rocm90dGxpbmdS
ZWFzb25zLmNvbnRhaW5zKFRocm90dGxpbmdSZWFzb246OlZpc3VhbGx5SWRsZSkgfHwgbV90aHJv
dHRsaW5nUmVhc29ucy5jb250YWlucyhUaHJvdHRsaW5nUmVhc29uOjpPdXRzaWRlVmlld3BvcnQp
KQorICAgICAgICByZXR1cm4gYWdncmVzc2l2ZVRocm90dGxpbmdBbmltYXRpb25JbnRlcnZhbDsK
KyAgICBpZiAobV90aHJvdHRsaW5nUmVhc29ucy5jb250YWlucyhUaHJvdHRsaW5nUmVhc29uOjpM
b3dQb3dlck1vZGUpKQorICAgICAgICByZXR1cm4gaGFsZlNwZWVkVGhyb3R0bGluZ0FuaW1hdGlv
bkludGVydmFsOworICAgIEFTU0VSVChtX3Rocm90dGxpbmdSZWFzb25zLmlzRW1wdHkoKSk7Cisj
ZW5kaWYKKyAgICByZXR1cm4gZnVsbFNwZWVkQW5pbWF0aW9uSW50ZXJ2YWw7Cit9CisKK1BhZ2Uq
IFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6cGFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZG9jdW1lbnQgPyBtX2RvY3VtZW50LT5wYWdlKCkgOiBudWxscHRyOworfQorCiB2b2lkIFNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVBbmltYXRpb24oKQogewogICAgIGlm
ICghcmVxdWVzdEFuaW1hdGlvbkZyYW1lRW5hYmxlZCgpKQpAQCAtMTk5LDcgKzI3MSw3IEBAIHZv
aWQgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpzY2hlZHVsZUFuaW1hdGlvbigpCiAKICNp
ZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCiAjaWYgVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICBpZiAoIW1faXNVc2luZ1RpbWVyICYm
ICFtX2lzVGhyb3R0bGVkKSB7CisgICAgaWYgKCFtX2lzVXNpbmdUaW1lciAmJiAhaXNUaHJvdHRs
ZWQoKSkgewogICAgICAgICBpZiAoRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnNjaGVkdWxlQW5pbWF0aW9uKCp0aGlzKSkKICAgICAgICAgICAgIHJldHVybjsK
IApAQCAtMjA5LDEzICsyODEsOCBAQCB2b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6
c2NoZWR1bGVBbmltYXRpb24oKQogICAgIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGRvdWJsZSBhbmltYXRpb25JbnRlcnZhbCA9IE1pbmlt
dW1BbmltYXRpb25JbnRlcnZhbDsKLSNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElN
RVIpICYmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAg
aWYgKG1faXNUaHJvdHRsZWQpCi0gICAgICAgIGFuaW1hdGlvbkludGVydmFsID0gTWluaW11bVRo
cm90dGxlZEFuaW1hdGlvbkludGVydmFsOwotI2VuZGlmCi0KLSAgICBkb3VibGUgc2NoZWR1bGVE
ZWxheSA9IHN0ZDo6bWF4PGRvdWJsZT4oYW5pbWF0aW9uSW50ZXJ2YWwgLSAobV9kb2N1bWVudC0+
ZG9tV2luZG93KCktPm5vd1RpbWVzdGFtcCgpIC0gbV9sYXN0QW5pbWF0aW9uRnJhbWVUaW1lc3Rh
bXApLCAwKTsKKyAgICBTZWNvbmRzIGFuaW1hdGlvbkludGVydmFsID0gYW5pbWF0aW9uSW50ZXJ2
YWxGb3JUaHJvdHRsaW5nU3RhdGUoKTsKKyAgICBkb3VibGUgc2NoZWR1bGVEZWxheSA9IHN0ZDo6
bWF4PGRvdWJsZT4oYW5pbWF0aW9uSW50ZXJ2YWwudmFsdWUoKSAtIChtX2RvY3VtZW50LT5kb21X
aW5kb3coKS0+bm93VGltZXN0YW1wKCkgLSBtX2xhc3RBbmltYXRpb25GcmFtZVRpbWVzdGFtcCks
IDApOwogICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KHNjaGVkdWxlRGVsYXkpOwog
I2Vsc2UKICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2RvY3VtZW50LT52aWV3KCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmgK
aW5kZXggMDEyYzI1ODYyNmQuLmM3MjY4NjNkN2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
bmNsdWRlICJET01UaW1lU3RhbXAuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01Miw3ICs1
Myw3IEBAIGNsYXNzIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlCiAjZW5kaWYKIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKERvY3VtZW50KiBk
b2N1bWVudCwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQorICAgIHN0YXRpYyBSZWY8U2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoZG9jdW1lbnQsIGRpc3BsYXlJRCkpOwog
ICAgIH0KQEAgLTY4LDEzICs2OSwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN1c3BlbmQoKTsK
ICAgICB2b2lkIHJlc3VtZSgpOwotICAgIHZvaWQgc2V0VGhyb3R0bGVkKGJvb2wpOworCisgICAg
ZW51bSBjbGFzcyBUaHJvdHRsaW5nUmVhc29uIHsKKyAgICAgICAgVmlzdWFsbHlJZGxlICAgID0g
MSA8PCAwLAorICAgICAgICBPdXRzaWRlVmlld3BvcnQgPSAxIDw8IDEsCisgICAgICAgIExvd1Bv
d2VyTW9kZSAgICA9IDEgPDwgMiwKKyAgICB9OworICAgIHZvaWQgYWRkVGhyb3R0bGluZ1JlYXNv
bihUaHJvdHRsaW5nUmVhc29uKTsKKyAgICB2b2lkIHJlbW92ZVRocm90dGxpbmdSZWFzb24oVGhy
b3R0bGluZ1JlYXNvbik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1Rocm90dGxlZCgpIGNv
bnN0OwogCiAgICAgdm9pZCB3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQp
OwogCiBwcml2YXRlOgotICAgIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcihEb2N1bWVudCos
IFBsYXRmb3JtRGlzcGxheUlEKTsKKyAgICBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoRG9j
dW1lbnQmLCBQbGF0Zm9ybURpc3BsYXlJRCk7CisKKyAgICBTZWNvbmRzIGFuaW1hdGlvbkludGVy
dmFsRm9yVGhyb3R0bGluZ1N0YXRlKCkgY29uc3Q7CisgICAgUGFnZSogcGFnZSgpIGNvbnN0Owog
CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNr
Pj4gQ2FsbGJhY2tMaXN0OwogICAgIENhbGxiYWNrTGlzdCBtX2NhbGxiYWNrczsKQEAgLTk3LDcg
KzEwOCw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3Jl
YXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIGJvb2wgbV9pc1VzaW5nVGltZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Ro
cm90dGxlZCB7IGZhbHNlIH07CisKKyAgICBPcHRpb25TZXQ8VGhyb3R0bGluZ1JlYXNvbj4gbV90
aHJvdHRsaW5nUmVhc29uczsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CmluZGV4IGQxNTA4MDVkYjQ1Li4zYzljZWE5ZjY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcApAQCAtMjU2Myw4ICsyNTYzLDEyIEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVTY3JpcHRl
ZEFuaW1hdGlvbnNBbmRUaW1lcnNUaHJvdHRsaW5nU3RhdGUoY29uc3QgSW50UmVjdCYKICAgICAv
LyBXZSBkb24ndCB0aHJvdHRsZSB6ZXJvLXNpemUgb3IgZGlzcGxheTpub25lIGZyYW1lcyBiZWNh
dXNlIHRob3NlIGFyZSB1c3VhbGx5IHV0aWxpdHkgZnJhbWVzLgogICAgIGJvb2wgc2hvdWxkVGhy
b3R0bGUgPSB2aXNpYmxlUmVjdC5pc0VtcHR5KCkgJiYgIW1fc2l6ZS5pc0VtcHR5KCkgJiYgZnJh
bWUoKS5vd25lclJlbmRlcmVyKCk7CiAKLSAgICBpZiAoYXV0byogc2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyID0gZG9jdW1lbnQtPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcigpKQotICAg
ICAgICBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPnNldFRocm90dGxlZChzaG91bGRUaHJv
dHRsZSk7CisgICAgaWYgKGF1dG8qIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IGRvY3Vt
ZW50LT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKSkgeworICAgICAgICBpZiAoc2hvdWxk
VGhyb3R0bGUpCisgICAgICAgICAgICBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPmFkZFRo
cm90dGxpbmdSZWFzb24oU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpUaHJvdHRsaW5nUmVh
c29uOjpPdXRzaWRlVmlld3BvcnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZVRocm90dGxpbmdSZWFzb24oU2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyOjpUaHJvdHRsaW5nUmVhc29uOjpPdXRzaWRlVmlld3BvcnQpOworICAg
IH0KIAogICAgIGRvY3VtZW50LT5zZXRUaW1lclRocm90dGxpbmdFbmFibGVkKHNob3VsZFRocm90
dGxlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDU2NzA0NDc5ZWRkLi43ZjMxMjVlNzYzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTGliV2ViUlRDUHJvdmlkZXIuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTG93UG93ZXJNb2RlTm90aWZpZXIuaCIKICNpbmNs
dWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKICNp
bmNsdWRlICJOYXZpZ2F0b3IuaCIKQEAgLTg0LDYgKzg1LDcgQEAKICNpbmNsdWRlICJTVkdEb2N1
bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUg
IlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC0yNjMsNiArMjY1LDcgQEAgUGFn
ZTo6UGFnZShQYWdlQ29uZmlndXJhdGlvbiYmIHBhZ2VDb25maWd1cmF0aW9uKQogICAgICwgbV9p
c0Nsb3NpbmcoZmFsc2UpCiAgICAgLCBtX2lzVXRpbGl0eVBhZ2UoaXNVdGlsaXR5UGFnZUNocm9t
ZUNsaWVudChjaHJvbWUoKS5jbGllbnQoKSkpCiAgICAgLCBtX3BlcmZvcm1hbmNlTW9uaXRvcihp
c1V0aWxpdHlQYWdlKCkgPyBudWxscHRyIDogc3RkOjptYWtlX3VuaXF1ZTxQZXJmb3JtYW5jZU1v
bml0b3I+KCp0aGlzKSkKKyAgICAsIG1fbG93UG93ZXJNb2RlTm90aWZpZXIoc3RkOjptYWtlX3Vu
aXF1ZTxMb3dQb3dlck1vZGVOb3RpZmllcj4oW3RoaXNdKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFi
bGVkKSB7IGhhbmRsZUxvd01vZGVQb3dlckNoYW5nZShpc0xvd1Bvd2VyTW9kZUVuYWJsZWQpOyB9
KSkKIHsKICAgICB1cGRhdGVUaW1lclRocm90dGxpbmdTdGF0ZSgpOwogCkBAIC05NTQsNiArOTU3
LDExIEBAIGJvb2wgUGFnZTo6aXNPbmx5Tm9uVXRpbGl0eVBhZ2UoKSBjb25zdAogICAgIHJldHVy
biAhaXNVdGlsaXR5UGFnZSgpICYmIG5vblV0aWxpdHlQYWdlQ291bnQgPT0gMTsKIH0KIAorYm9v
bCBQYWdlOjppc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xv
d1Bvd2VyTW9kZU5vdGlmaWVyLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKTsKK30KKwogdm9pZCBQ
YWdlOjpzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQogewogICAgIGlmICht
X3RvcENvbnRlbnRJbnNldCA9PSBjb250ZW50SW5zZXQpCkBAIC0xMDk0LDE0ICsxMTAyLDM0IEBA
IHZvaWQgUGFnZTo6cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25zKCkKICAgICB9CiB9CiAKLXZvaWQg
UGFnZTo6c2V0SXNWaXN1YWxseUlkbGVJbnRlcm5hbChib29sIGlzVmlzdWFsbHlJZGxlKQorZW51
bSBjbGFzcyBUaHJvdHRsaW5nUmVhc29uT3BlcmF0aW9uIHsgQWRkLCBSZW1vdmUgfTsKK3N0YXRp
YyB2b2lkIHVwZGF0ZVNjcmlwdGVkQW5pbWF0aW9uc1Rocm90dGxpbmdSZWFzb24oUGFnZSYgcGFn
ZSwgVGhyb3R0bGluZ1JlYXNvbk9wZXJhdGlvbiBvcGVyYXRpb24sIFNjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlcjo6VGhyb3R0bGluZ1JlYXNvbiByZWFzb24pCiB7Ci0gICAgZm9yIChGcmFtZSog
ZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAg
ZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlclNldFRocm90dGxl
ZChpc1Zpc3VhbGx5SWRsZSk7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS5tYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAg
ICAgICBhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgICAgICBpZiAoIWRv
Y3VtZW50KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8qIHNjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlciA9IGRvY3VtZW50LT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIo
KTsKKyAgICAgICAgaWYgKCFzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBpZiAob3BlcmF0aW9uID09IFRocm90dGxpbmdSZWFzb25P
cGVyYXRpb246OkFkZCkKKyAgICAgICAgICAgIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+
YWRkVGhyb3R0bGluZ1JlYXNvbihyZWFzb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZVRocm90dGxpbmdSZWFzb24ocmVhc29u
KTsKICAgICB9CiB9CiAKK3ZvaWQgUGFnZTo6c2V0SXNWaXN1YWxseUlkbGVJbnRlcm5hbChib29s
IGlzVmlzdWFsbHlJZGxlKQoreworICAgIHVwZGF0ZVNjcmlwdGVkQW5pbWF0aW9uc1Rocm90dGxp
bmdSZWFzb24oKnRoaXMsIGlzVmlzdWFsbHlJZGxlID8gVGhyb3R0bGluZ1JlYXNvbk9wZXJhdGlv
bjo6QWRkIDogVGhyb3R0bGluZ1JlYXNvbk9wZXJhdGlvbjo6UmVtb3ZlLCBTY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb246OlZpc3VhbGx5SWRsZSk7Cit9CisKK3Zv
aWQgUGFnZTo6aGFuZGxlTG93TW9kZVBvd2VyQ2hhbmdlKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFi
bGVkKQoreworICAgIHVwZGF0ZVNjcmlwdGVkQW5pbWF0aW9uc1Rocm90dGxpbmdSZWFzb24oKnRo
aXMsIGlzTG93UG93ZXJNb2RlRW5hYmxlZCA/IFRocm90dGxpbmdSZWFzb25PcGVyYXRpb246OkFk
ZCA6IFRocm90dGxpbmdSZWFzb25PcGVyYXRpb246OlJlbW92ZSwgU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyOjpUaHJvdHRsaW5nUmVhc29uOjpMb3dQb3dlck1vZGUpOworfQorCiB2b2lkIFBh
Z2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKCkKIHsKICAgICAvLyBGSVhNRTogRXZl
bnR1YWxseSB3ZSB3aWxsIG1vdmUgdG8gYSBtb2RlbCBvZiBqdXN0IGJlaW5nIGhhbmRlZCB0aGUg
c2hlZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggNzNlZTI2OTJiMTEuLmEzYzZkYThmOTMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuaApAQCAtOTksNiArOTksNyBAQCBjbGFzcyBVc2VySW5wdXRCcmlkZ2U7CiBjbGFzcyBJ
bnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwogY2xhc3MgTGliV2Vi
UlRDUHJvdmlkZXI7CitjbGFzcyBMb3dQb3dlck1vZGVOb3RpZmllcjsKIGNsYXNzIE1haW5GcmFt
ZTsKIGNsYXNzIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcjsKIGNsYXNzIE1lZGlhUGxheWJhY2tUYXJn
ZXQ7CkBAIC01NzYsNiArNTc3LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
aGFzU2VsZWN0aW9uQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAjZW5kaWYK
IAorICAgIGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKCkgY29uc3Q7CisKIHByaXZhdGU6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbml0R3JvdXAoKTsKIApAQCAtNTk4LDYgKzYwMSw4IEBA
IHByaXZhdGU6CiAKICAgICBWZWN0b3I8UmVmPFBsdWdpblZpZXdCYXNlPj4gcGx1Z2luVmlld3Mo
KTsKIAorICAgIHZvaWQgaGFuZGxlTG93TW9kZVBvd2VyQ2hhbmdlKGJvb2wpOworCiAgICAgZW51
bSBjbGFzcyBUaW1lclRocm90dGxpbmdTdGF0ZSB7IERpc2FibGVkLCBFbmFibGVkLCBFbmFibGVk
SW5jcmVhc2luZyB9OwogICAgIHZvaWQgaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRl
Q2hhbmdlZCgpOwogICAgIHZvaWQgc2V0VGltZXJUaHJvdHRsaW5nU3RhdGUoVGltZXJUaHJvdHRs
aW5nU3RhdGUpOwpAQCAtNzgwLDYgKzc4NSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25h
bDxFdmVudFRocm90dGxpbmdCZWhhdmlvcj4gbV9ldmVudFRocm90dGxpbmdCZWhhdmlvck92ZXJy
aWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBlcmZvcm1hbmNlTW9uaXRvcj4gbV9wZXJmb3Jt
YW5jZU1vbml0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPExvd1Bvd2VyTW9kZU5vdGlmaWVyPiBt
X2xvd1Bvd2VyTW9kZU5vdGlmaWVyOwogCiAgICAgYm9vbCBtX2lzUnVubmluZ1VzZXJTY3JpcHRz
IHsgZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9PcHRpb25TZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uU2V0
LmNwcAppbmRleCBmMDE3MzgzMWI5MS4uNzU1MTc5NDhhNWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL09wdGlvblNldC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvT3B0aW9uU2V0LmNwcApAQCAtODYsNiArODYsMTggQEAgVEVTVChXVEZf
T3B0aW9uU2V0LCBNaW51cykKICAgICBFWFBFQ1RfVFJVRSgoc2V0IC0gc2V0KS5pc0VtcHR5KCkp
OwogfQogCitURVNUKFdURl9PcHRpb25TZXQsIE1pbnVzRXF1YWwpCit7CisgICAgT3B0aW9uU2V0
PEV4YW1wbGVGbGFncz4gc2V0IHsgRXhhbXBsZUZsYWdzOjpBLCBFeGFtcGxlRmxhZ3M6OkIsIEV4
YW1wbGVGbGFnczo6QyB9OworCisgICAgRVhQRUNUX1RSVUUoKChzZXQgLT0gRXhhbXBsZUZsYWdz
OjpBKSA9PSBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiB7IEV4YW1wbGVGbGFnczo6QiwgRXhhbXBs
ZUZsYWdzOjpDIH0pKTsKKyAgICBFWFBFQ1RfVFJVRSgoc2V0ID09IE9wdGlvblNldDxFeGFtcGxl
RmxhZ3M+IHsgRXhhbXBsZUZsYWdzOjpCLCBFeGFtcGxlRmxhZ3M6OkMgfSkpOworICAgIEVYUEVD
VF9UUlVFKCgoc2V0IC09IEV4YW1wbGVGbGFnczo6RCkgPT0gT3B0aW9uU2V0PEV4YW1wbGVGbGFn
cz4geyBFeGFtcGxlRmxhZ3M6OkIsIEV4YW1wbGVGbGFnczo6QyB9KSk7CisgICAgRVhQRUNUX1RS
VUUoKHNldCA9PSBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiB7IEV4YW1wbGVGbGFnczo6QiwgRXhh
bXBsZUZsYWdzOjpDIH0pKTsKKyAgICBFWFBFQ1RfVFJVRSgoc2V0IC09IHNldCkuaXNFbXB0eSgp
KTsKKyAgICBFWFBFQ1RfVFJVRShzZXQuaXNFbXB0eSgpKTsKK30KKwogVEVTVChXVEZfT3B0aW9u
U2V0LCBDb250YWluc1R3b0ZsYWdzKQogewogICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+IHNl
dCB7IEV4YW1wbGVGbGFnczo6QSwgRXhhbXBsZUZsYWdzOjpCIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302953</attachid>
            <date>2017-02-28 11:15:06 -0800</date>
            <delta_ts>2017-02-28 11:58:55 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>168837_throttle_rAF_lowPowerMode_wip.patch</filename>
            <type>text/plain</type>
            <size>24670</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9u
LWZyYW1lLXRocm90dGxpbmctbG93UG93ZXJNb2RlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXRocm90dGxpbmctbG93UG93
ZXJNb2RlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uOTgzM2ZmYjExZGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1h
dGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS10aHJvdHRsaW5nLWxvd1Bvd2VyTW9kZS1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwyNiBAQAorVGVzdCB0aGF0IHJlcXVlc3RBbmltYXRpb25GcmFt
ZSBnZXRzIHRocm90dGxlZCBpbiBsb3cgcG93ZXIgbW9kZS4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0
bGVkKCkgaXMgZmFsc2UKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVy
dmFsIGlzIEluZmluaXR5CityQUZIYW5kbGUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZG9Xb3Jr
KTsKK1BBU1MgaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMg
ZmFsc2UKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIGlzIDAu
MDE1CitpbnRlcm5hbHMuc2V0TG93UG93ZXJNb2RlRW5hYmxlZCh0cnVlKTsKK1BBU1MgaW50ZXJu
YWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMgdHJ1ZQorUEFTUyBpbnRl
cm5hbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwgaXMgMC4wMzAKK2NhbmNlbEFuaW1h
dGlvbkZyYW1lKHJBRkhhbmRsZSk7CitQQVNTIGludGVybmFscy5pc1JlcXVlc3RBbmltYXRpb25G
cmFtZVRocm90dGxlZCgpIGlzIHRydWUKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25G
cmFtZUludGVydmFsIGlzIDAuMDMwCityQUZIYW5kbGUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
ZG9Xb3JrKTsKK1BBU1MgaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVk
KCkgaXMgdHJ1ZQorUEFTUyBpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwg
aXMgMC4wMzAKK2ludGVybmFscy5zZXRMb3dQb3dlck1vZGVFbmFibGVkKGZhbHNlKTsKK1BBU1Mg
aW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMgZmFsc2UKK1BB
U1MgaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIGlzIDAuMDE1CitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdGhy
b3R0bGluZy1sb3dQb3dlck1vZGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3Jl
cXVlc3QtYW5pbWF0aW9uLWZyYW1lLXRocm90dGxpbmctbG93UG93ZXJNb2RlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRiYWUwOWYxNjI5Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJh
bWUtdGhyb3R0bGluZy1sb3dQb3dlck1vZGUuaHRtbApAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB0aGF0
IHJlcXVlc3RBbmltYXRpb25GcmFtZSBnZXRzIHRocm90dGxlZCBpbiBsb3cgcG93ZXIgbW9kZS4i
KTsKKworbGV0IHJBRkhhbmRsZTsKK2xldCBpID0gMDsKK2Z1bmN0aW9uIGRvV29yaygpCit7Cisg
ICAgaSsrOworICAgIHJBRkhhbmRsZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkb1dvcmspOwor
fQorCitzaG91bGRCZUZhbHNlKCJpbnRlcm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJv
dHRsZWQoKSIpOworc2hvdWxkQmUoImludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRl
cnZhbCIsICJJbmZpbml0eSIpOworZXZhbEFuZExvZygickFGSGFuZGxlID0gcmVxdWVzdEFuaW1h
dGlvbkZyYW1lKGRvV29yayk7Iik7CitzaG91bGRCZUZhbHNlKCJpbnRlcm5hbHMuaXNSZXF1ZXN0
QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSIpOworc2hvdWxkQmUoImludGVybmFscy5yZXF1ZXN0
QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCIsICIwLjAxNSIpOworZXZhbEFuZExvZygiaW50ZXJuYWxz
LnNldExvd1Bvd2VyTW9kZUVuYWJsZWQodHJ1ZSk7Iik7CitzaG91bGRCZVRydWUoImludGVybmFs
cy5pc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgpIik7CitzaG91bGRCZSgiaW50ZXJu
YWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIiwgIjAuMDMwIik7CitldmFsQW5kTG9n
KCJjYW5jZWxBbmltYXRpb25GcmFtZShyQUZIYW5kbGUpOyIpOworc2hvdWxkQmVUcnVlKCJpbnRl
cm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSIpOworc2hvdWxkQmUoImlu
dGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCIsICIwLjAzMCIpOworZXZhbEFu
ZExvZygickFGSGFuZGxlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRvV29yayk7Iik7CitzaG91
bGRCZVRydWUoImludGVybmFscy5pc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgpIik7
CitzaG91bGRCZSgiaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIiwgIjAu
MDMwIik7CitldmFsQW5kTG9nKCJpbnRlcm5hbHMuc2V0TG93UG93ZXJNb2RlRW5hYmxlZChmYWxz
ZSk7Iik7CitzaG91bGRCZUZhbHNlKCJpbnRlcm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVU
aHJvdHRsZWQoKSIpOworc2hvdWxkQmUoImludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJ
bnRlcnZhbCIsICIwLjAxNSIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25TZXQuaCBiL1NvdXJjZS9XVEYvd3RmL09wdGlvblNl
dC5oCmluZGV4IGU4MzlmNDIyMjg0Li5mM2E4YzAwMjRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvT3B0aW9uU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvT3B0aW9uU2V0LmgKQEAgLTEy
NSw2ICsxMjUsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbGhzOwogICAgIH0KIAorICAg
IGZyaWVuZCBPcHRpb25TZXQmIG9wZXJhdG9yLT0oT3B0aW9uU2V0JiBsaHMsIE9wdGlvblNldCBy
aHMpCisgICAgeworICAgICAgICBsaHMubV9zdG9yYWdlICY9IH5yaHMubV9zdG9yYWdlOworCisg
ICAgICAgIHJldHVybiBsaHM7CisgICAgfQorCiAgICAgY29uc3RleHByIGZyaWVuZCBPcHRpb25T
ZXQgb3BlcmF0b3ItKE9wdGlvblNldCBsaHMsIE9wdGlvblNldCByaHMpCiAgICAgewogICAgICAg
ICByZXR1cm4gT3B0aW9uU2V0Ojpmcm9tUmF3KGxocy5tX3N0b3JhZ2UgJiB+cmhzLm1fc3RvcmFn
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBkZjhiNmY3YzZkNy4uYjFlMmY0YTJhOTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTQ4MSwxMiArNTQ4MSw2IEBAIHZvaWQgRG9j
dW1lbnQ6OnJlc3VtZVNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpCiAgICAg
ICAgIG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLT5yZXN1bWUoKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6c2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyU2V0VGhyb3R0bGVkKGJvb2wgaXNU
aHJvdHRsZWQpCi17Ci0gICAgaWYgKG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKQotICAg
ICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+c2V0VGhyb3R0bGVkKGlzVGhyb3R0
bGVkKTsKLX0KLQogdm9pZCBEb2N1bWVudDo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3Jt
RGlzcGxheUlEIGRpc3BsYXlJRCkKIHsKICAgICBpZiAobV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRy
b2xsZXIpCkBAIC02MDU4LDkgKzYwNTIsOSBAQCBpbnQgRG9jdW1lbnQ6OnJlcXVlc3RBbmltYXRp
b25GcmFtZShSZWY8UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+JiYgY2FsbGJhYwogewog
ICAgIGlmICghbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIpIHsKICNpZiBVU0UoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgICAgICBtX3NjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlciA9IFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKHRo
aXMsIHBhZ2UoKSA/IHBhZ2UoKS0+Y2hyb21lKCkuZGlzcGxheUlEKCkgOiAwKTsKKyAgICAgICAg
bV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNyZWF0ZSgqdGhpcywgcGFnZSgpID8gcGFnZSgpLT5jaHJvbWUoKS5kaXNwbGF5SUQoKSA6
IDApOwogI2Vsc2UKLSAgICAgICAgbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBTY3Jp
cHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzLCAwKTsKKyAgICAgICAgbV9zY3Jp
cHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNy
ZWF0ZSgqdGhpcywgMCk7CiAjZW5kaWYKICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRo
ZSBQYWdlIG1heSBoYXZlIHN1c3BlbmRlZCBzY3JpcHRlZCBhbmltYXRpb25zIGJlZm9yZQogICAg
ICAgICAvLyB3ZSB3ZXJlIGNyZWF0ZWQuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9u
J3Qgc3RhcnQgdXAgdGhlIGFuaW1hdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA5OWZmY2Ri
MGNjNi4uNjFkZTMxOTUyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC05NTgsNyArOTU4LDYg
QEAgcHVibGljOgogICAgIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciogc2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyKCkgeyByZXR1cm4gbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIu
Z2V0KCk7IH0KICAgICB2b2lkIHN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxs
YmFja3MoKTsKICAgICB2b2lkIHJlc3VtZVNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxi
YWNrcygpOwotICAgIHZvaWQgc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyU2V0VGhyb3R0bGVk
KGJvb2wpOwogICAgIAogICAgIHZvaWQgd2luZG93U2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlz
cGxheUlEKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyLmNwcAppbmRleCBiOTRlYmRmMzY1Ny4uNjA1ZGY2ZTVmZTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC00
MCwyNSArNDAsMzQgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikK
ICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIC8v
IEFsbG93IGEgbGl0dGxlIG1vcmUgdGhhbiA2MGZwcyB0byBtYWtlIHN1cmUgd2UgY2FuIGF0IGxl
YXN0IGhpdCB0aGF0IGZyYW1lIHJhdGUuCi0jZGVmaW5lIE1pbmltdW1BbmltYXRpb25JbnRlcnZh
bCAwLjAxNQotI2RlZmluZSBNaW5pbXVtVGhyb3R0bGVkQW5pbWF0aW9uSW50ZXJ2YWwgMTAKK3N0
YXRpYyBjb25zdCBTZWNvbmRzIGZ1bGxTcGVlZEFuaW1hdGlvbkludGVydmFsIHsgMC4wMTUgfTsK
Ky8vIEFsbG93IGEgbGl0dGxlIG1vcmUgdGhhbiAzMGZwcyB0byBtYWtlIHN1cmUgd2UgY2FuIGF0
IGxlYXN0IGhpdCB0aGF0IGZyYW1lIHJhdGUuCitzdGF0aWMgY29uc3QgU2Vjb25kcyBoYWxmU3Bl
ZWRUaHJvdHRsaW5nQW5pbWF0aW9uSW50ZXJ2YWwgeyAwLjAzMCB9Oworc3RhdGljIGNvbnN0IFNl
Y29uZHMgYWdncmVzc2l2ZVRocm90dGxpbmdBbmltYXRpb25JbnRlcnZhbCB7IDEwIH07CiAjZW5k
aWYKIAorI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwgLi4uKSBSRUxFQVNFX0xP
R19JRihwYWdlKCkgJiYgcGFnZSgpLT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgUGVyZm9y
bWFuY2VMb2dnaW5nLCAiJXAgLSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OiIgZm10LCB0
aGlzLCAjI19fVkFfQVJHU19fKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlcjo6U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKERvY3VtZW50KiBk
b2N1bWVudCwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQotICAgIDogbV9kb2N1bWVudChk
b2N1bWVudCkKK1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6U2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyKERvY3VtZW50JiBkb2N1bWVudCwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlE
KQorICAgIDogbV9kb2N1bWVudCgmZG9jdW1lbnQpCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX1RJTUVSKQogICAgICwgbV9hbmltYXRpb25UaW1lcigqdGhpcywgJlNjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKICNlbmRpZgogewogICAgIHdp
bmRvd1NjcmVlbkRpZENoYW5nZShkaXNwbGF5SUQpOworCisgICAgYXV0byogcGFnZSA9IGRvY3Vt
ZW50LnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQo
KSkKKyAgICAgICAgYWRkVGhyb3R0bGluZ1JlYXNvbihUaHJvdHRsaW5nUmVhc29uOjpMb3dQb3dl
ck1vZGUpOwogfQogCiBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6On5TY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIoKQpAQCAtODYsMjggKzk1LDc4IEBAIHZvaWQgU2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOjpyZXN1bWUoKQogICAgICAgICBzY2hlZHVsZUFuaW1hdGlvbigpOwogfQog
Ci12b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2V0VGhyb3R0bGVkKGJvb2wgaXNU
aHJvdHRsZWQpCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBVU0Uo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKSAmJiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKworc3RhdGljIGNvbnN0IGNoYXIqIHRocm90dGxpbmdSZWFzb25Ub1N0cmluZyhT
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb24gcmVhc29uKQorewor
ICAgIHN3aXRjaCAocmVhc29uKSB7CisgICAgY2FzZSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXI6OlRocm90dGxpbmdSZWFzb246OlZpc3VhbGx5SWRsZToKKyAgICAgICAgcmV0dXJuICJWaXN1
YWxseUlkbGUiOworICAgIGNhc2UgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpUaHJvdHRs
aW5nUmVhc29uOjpPdXRzaWRlVmlld3BvcnQ6CisgICAgICAgIHJldHVybiAiT3V0c2lkZVZpZXdw
b3J0IjsKKyAgICBjYXNlIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6VGhyb3R0bGluZ1Jl
YXNvbjo6TG93UG93ZXJNb2RlOgorICAgICAgICByZXR1cm4gIkxvd1Bvd2VyTW9kZSI7CisgICAg
fQorfQorCitzdGF0aWMgU3RyaW5nIHRocm90dGxpbmdSZWFzb25zVG9TdHJpbmcoT3B0aW9uU2V0
PFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6VGhyb3R0bGluZ1JlYXNvbj4gcmVhc29ucykK
K3sKKyAgICBpZiAocmVhc29ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoIltVbnRocm90dGxlZF0iKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBm
b3IgKGF1dG8gcmVhc29uIDogcmVhc29ucykgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0
eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ3wnKTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQodGhyb3R0bGluZ1JlYXNvblRvU3RyaW5nKHJlYXNvbikpOworICAgIH0KKyAgICByZXR1
cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCisjZW5kaWYKKwordm9pZCBTY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXI6OmFkZFRocm90dGxpbmdSZWFzb24oVGhyb3R0bGluZ1JlYXNvbiByZWFz
b24pCiB7CiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBVU0UoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIGlmIChtX2lzVGhyb3R0
bGVkID09IGlzVGhyb3R0bGVkKQorICAgIGlmIChtX3Rocm90dGxpbmdSZWFzb25zLmNvbnRhaW5z
KHJlYXNvbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhBbmltYXRpb25zLCAiJXAgLSBT
ZXR0aW5nIFJlcXVlc3RBbmltYXRpb25GcmFtZSB0aHJvdHRsaW5nIHN0YXRlIHRvICVkIGluIGZy
YW1lICVwIChpc01haW5GcmFtZTogJWQpIiwgdGhpcywgaXNUaHJvdHRsZWQsIG1fZG9jdW1lbnQt
PmZyYW1lKCksIG1fZG9jdW1lbnQtPmZyYW1lKCkgPyBtX2RvY3VtZW50LT5mcmFtZSgpLT5pc01h
aW5GcmFtZSgpIDogMCk7CisgICAgbV90aHJvdHRsaW5nUmVhc29ucyB8PSByZWFzb247CisKKyAg
ICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJhZGRUaHJvdHRsaW5nUmVhc29uKCVzKSAtPiAlcyIs
IHRocm90dGxpbmdSZWFzb25Ub1N0cmluZyhyZWFzb24pLCB0aHJvdHRsaW5nUmVhc29uc1RvU3Ry
aW5nKG1fdGhyb3R0bGluZ1JlYXNvbnMpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgbV9pc1Rocm90
dGxlZCA9IGlzVGhyb3R0bGVkOwogICAgIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkp
IHsKICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7CiAgICAgICAgIHNjaGVkdWxlQW5p
bWF0aW9uKCk7CiAgICAgfQogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaXNUaHJvdHRsZWQpOwor
ICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyOjpyZW1vdmVUaHJvdHRsaW5nUmVhc29uKFRocm90dGxpbmdSZWFzb24g
cmVhc29uKQoreworI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikgJiYgVVNF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICBpZiAoIW1fdGhy
b3R0bGluZ1JlYXNvbnMuY29udGFpbnMocmVhc29uKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV90aHJvdHRsaW5nUmVhc29ucyAtPSByZWFzb247CisKKyAgICBSRUxFQVNFX0xPR19JRl9BTExP
V0VEKCJyZW1vdmVUaHJvdHRsaW5nUmVhc29uKCVzKSAtPiAlcyIsIHRocm90dGxpbmdSZWFzb25U
b1N0cmluZyhyZWFzb24pLCB0aHJvdHRsaW5nUmVhc29uc1RvU3RyaW5nKG1fdGhyb3R0bGluZ1Jl
YXNvbnMpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKG1fYW5pbWF0aW9uVGltZXIuaXNBY3Rp
dmUoKSkgeworICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKKyAgICAgICAgc2NoZWR1
bGVBbmltYXRpb24oKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOwog
I2VuZGlmCiB9CiAKIGJvb2wgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjppc1Rocm90dGxl
ZCgpIGNvbnN0CiB7CiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIHJldHVybiBt
X2lzVGhyb3R0bGVkOworICAgIHJldHVybiAhbV90aHJvdHRsaW5nUmVhc29ucy5pc0VtcHR5KCk7
CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAtMTkyLDYgKzI1MSwyMyBAQCB2
b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKFBs
YXRmb3JtRGlzcGxheUlEIGRpc3BsYQogI2VuZGlmCiB9CiAKK1NlY29uZHMgU2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyOjppbnRlcnZhbCgpIGNvbnN0Cit7CisjaWYgVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExB
WV9NT05JVE9SKQorICAgIGlmIChtX3Rocm90dGxpbmdSZWFzb25zLmNvbnRhaW5zKFRocm90dGxp
bmdSZWFzb246OlZpc3VhbGx5SWRsZSkgfHwgbV90aHJvdHRsaW5nUmVhc29ucy5jb250YWlucyhU
aHJvdHRsaW5nUmVhc29uOjpPdXRzaWRlVmlld3BvcnQpKQorICAgICAgICByZXR1cm4gYWdncmVz
c2l2ZVRocm90dGxpbmdBbmltYXRpb25JbnRlcnZhbDsKKyAgICBpZiAobV90aHJvdHRsaW5nUmVh
c29ucy5jb250YWlucyhUaHJvdHRsaW5nUmVhc29uOjpMb3dQb3dlck1vZGUpKQorICAgICAgICBy
ZXR1cm4gaGFsZlNwZWVkVGhyb3R0bGluZ0FuaW1hdGlvbkludGVydmFsOworICAgIEFTU0VSVCht
X3Rocm90dGxpbmdSZWFzb25zLmlzRW1wdHkoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gZnVsbFNw
ZWVkQW5pbWF0aW9uSW50ZXJ2YWw7Cit9CisKK1BhZ2UqIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlcjo6cGFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQgPyBtX2RvY3VtZW50
LT5wYWdlKCkgOiBudWxscHRyOworfQorCiB2b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxl
cjo6c2NoZWR1bGVBbmltYXRpb24oKQogewogICAgIGlmICghcmVxdWVzdEFuaW1hdGlvbkZyYW1l
RW5hYmxlZCgpKQpAQCAtMTk5LDcgKzI3NSw3IEBAIHZvaWQgU2NyaXB0ZWRBbmltYXRpb25Db250
cm9sbGVyOjpzY2hlZHVsZUFuaW1hdGlvbigpCiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUVfVElNRVIpCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9O
SVRPUikKLSAgICBpZiAoIW1faXNVc2luZ1RpbWVyICYmICFtX2lzVGhyb3R0bGVkKSB7CisgICAg
aWYgKCFtX2lzVXNpbmdUaW1lciAmJiAhaXNUaHJvdHRsZWQoKSkgewogICAgICAgICBpZiAoRGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnNjaGVkdWxlQW5pbWF0
aW9uKCp0aGlzKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMjA5LDEzICsyODUsOCBAQCB2
b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVBbmltYXRpb24oKQogICAg
IGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGRvdWJsZSBhbmltYXRpb25JbnRlcnZhbCA9IE1pbmltdW1BbmltYXRpb25JbnRlcnZhbDsKLSNp
ZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpICYmIFVTRShSRVFVRVNUX0FOSU1B
VElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAgaWYgKG1faXNUaHJvdHRsZWQpCi0gICAg
ICAgIGFuaW1hdGlvbkludGVydmFsID0gTWluaW11bVRocm90dGxlZEFuaW1hdGlvbkludGVydmFs
OwotI2VuZGlmCi0KLSAgICBkb3VibGUgc2NoZWR1bGVEZWxheSA9IHN0ZDo6bWF4PGRvdWJsZT4o
YW5pbWF0aW9uSW50ZXJ2YWwgLSAobV9kb2N1bWVudC0+ZG9tV2luZG93KCktPm5vd1RpbWVzdGFt
cCgpIC0gbV9sYXN0QW5pbWF0aW9uRnJhbWVUaW1lc3RhbXApLCAwKTsKKyAgICBTZWNvbmRzIGFu
aW1hdGlvbkludGVydmFsID0gaW50ZXJ2YWwoKTsKKyAgICBkb3VibGUgc2NoZWR1bGVEZWxheSA9
IHN0ZDo6bWF4PGRvdWJsZT4oYW5pbWF0aW9uSW50ZXJ2YWwudmFsdWUoKSAtIChtX2RvY3VtZW50
LT5kb21XaW5kb3coKS0+bm93VGltZXN0YW1wKCkgLSBtX2xhc3RBbmltYXRpb25GcmFtZVRpbWVz
dGFtcCksIDApOwogICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KHNjaGVkdWxlRGVs
YXkpOwogI2Vsc2UKICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2RvY3VtZW50LT52
aWV3KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9s
bGVyLmgKaW5kZXggMDEyYzI1ODYyNmQuLjQwZGExMjFhM2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpbmNsdWRlICJET01UaW1lU3RhbXAuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5o
IgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01
Miw3ICs1Myw3IEBAIGNsYXNzIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlCiAjZW5kaWYKIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKERvY3Vt
ZW50KiBkb2N1bWVudCwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQorICAgIHN0YXRpYyBS
ZWY8U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50
LCBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoZG9jdW1lbnQsIGRpc3BsYXlJ
RCkpOwogICAgIH0KQEAgLTY4LDEzICs2OSwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN1c3Bl
bmQoKTsKICAgICB2b2lkIHJlc3VtZSgpOwotICAgIHZvaWQgc2V0VGhyb3R0bGVkKGJvb2wpOwor
CisgICAgZW51bSBjbGFzcyBUaHJvdHRsaW5nUmVhc29uIHsKKyAgICAgICAgVmlzdWFsbHlJZGxl
ICAgID0gMSA8PCAwLAorICAgICAgICBPdXRzaWRlVmlld3BvcnQgPSAxIDw8IDEsCisgICAgICAg
IExvd1Bvd2VyTW9kZSAgICA9IDEgPDwgMiwKKyAgICB9OworICAgIHZvaWQgYWRkVGhyb3R0bGlu
Z1JlYXNvbihUaHJvdHRsaW5nUmVhc29uKTsKKyAgICB2b2lkIHJlbW92ZVRocm90dGxpbmdSZWFz
b24oVGhyb3R0bGluZ1JlYXNvbik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1Rocm90dGxl
ZCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFNlY29uZHMgaW50ZXJ2YWwoKSBjb25zdDsK
IAogICAgIHZvaWQgd2luZG93U2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlEKTsKIAog
cHJpdmF0ZToKLSAgICBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQqLCBQbGF0
Zm9ybURpc3BsYXlJRCk7CisgICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKERvY3VtZW50
JiwgUGxhdGZvcm1EaXNwbGF5SUQpOworCisgICAgUGFnZSogcGFnZSgpIGNvbnN0OwogCiAgICAg
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPj4gQ2Fs
bGJhY2tMaXN0OwogICAgIENhbGxiYWNrTGlzdCBtX2NhbGxiYWNrczsKQEAgLTk3LDcgKzEwOCw4
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlz
cGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIGJvb2wgbV9pc1VzaW5nVGltZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Rocm90dGxl
ZCB7IGZhbHNlIH07CisKKyAgICBPcHRpb25TZXQ8VGhyb3R0bGluZ1JlYXNvbj4gbV90aHJvdHRs
aW5nUmVhc29uczsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4
IGQxNTA4MDVkYjQ1Li4zYzljZWE5ZjY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApA
QCAtMjU2Myw4ICsyNTYzLDEyIEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVTY3JpcHRlZEFuaW1h
dGlvbnNBbmRUaW1lcnNUaHJvdHRsaW5nU3RhdGUoY29uc3QgSW50UmVjdCYKICAgICAvLyBXZSBk
b24ndCB0aHJvdHRsZSB6ZXJvLXNpemUgb3IgZGlzcGxheTpub25lIGZyYW1lcyBiZWNhdXNlIHRo
b3NlIGFyZSB1c3VhbGx5IHV0aWxpdHkgZnJhbWVzLgogICAgIGJvb2wgc2hvdWxkVGhyb3R0bGUg
PSB2aXNpYmxlUmVjdC5pc0VtcHR5KCkgJiYgIW1fc2l6ZS5pc0VtcHR5KCkgJiYgZnJhbWUoKS5v
d25lclJlbmRlcmVyKCk7CiAKLSAgICBpZiAoYXV0byogc2NyaXB0ZWRBbmltYXRpb25Db250cm9s
bGVyID0gZG9jdW1lbnQtPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcigpKQotICAgICAgICBz
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPnNldFRocm90dGxlZChzaG91bGRUaHJvdHRsZSk7
CisgICAgaWYgKGF1dG8qIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IGRvY3VtZW50LT5z
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKSkgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3R0
bGUpCisgICAgICAgICAgICBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPmFkZFRocm90dGxp
bmdSZWFzb24oU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpUaHJvdHRsaW5nUmVhc29uOjpP
dXRzaWRlVmlld3BvcnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXItPnJlbW92ZVRocm90dGxpbmdSZWFzb24oU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyOjpUaHJvdHRsaW5nUmVhc29uOjpPdXRzaWRlVmlld3BvcnQpOworICAgIH0KIAog
ICAgIGRvY3VtZW50LT5zZXRUaW1lclRocm90dGxpbmdFbmFibGVkKHNob3VsZFRocm90dGxlKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDU2NzA0NDc5ZWRkLi4xMzFiMDk4YzI3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTGliV2ViUlRDUHJvdmlkZXIuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSAiTG93UG93ZXJNb2RlTm90aWZpZXIuaCIKICNpbmNsdWRlICJN
YWluRnJhbWUuaCIKICNpbmNsdWRlICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKICNpbmNsdWRl
ICJOYXZpZ2F0b3IuaCIKQEAgLTg0LDYgKzg1LDcgQEAKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4
dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC0yNjMsNiArMjY1LDcgQEAgUGFnZTo6UGFn
ZShQYWdlQ29uZmlndXJhdGlvbiYmIHBhZ2VDb25maWd1cmF0aW9uKQogICAgICwgbV9pc0Nsb3Np
bmcoZmFsc2UpCiAgICAgLCBtX2lzVXRpbGl0eVBhZ2UoaXNVdGlsaXR5UGFnZUNocm9tZUNsaWVu
dChjaHJvbWUoKS5jbGllbnQoKSkpCiAgICAgLCBtX3BlcmZvcm1hbmNlTW9uaXRvcihpc1V0aWxp
dHlQYWdlKCkgPyBudWxscHRyIDogc3RkOjptYWtlX3VuaXF1ZTxQZXJmb3JtYW5jZU1vbml0b3I+
KCp0aGlzKSkKKyAgICAsIG1fbG93UG93ZXJNb2RlTm90aWZpZXIoc3RkOjptYWtlX3VuaXF1ZTxM
b3dQb3dlck1vZGVOb3RpZmllcj4oW3RoaXNdKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKSB7
IGhhbmRsZUxvd01vZGVQb3dlckNoYW5nZShpc0xvd1Bvd2VyTW9kZUVuYWJsZWQpOyB9KSkKIHsK
ICAgICB1cGRhdGVUaW1lclRocm90dGxpbmdTdGF0ZSgpOwogCkBAIC05NTQsNiArOTU3LDIwIEBA
IGJvb2wgUGFnZTo6aXNPbmx5Tm9uVXRpbGl0eVBhZ2UoKSBjb25zdAogICAgIHJldHVybiAhaXNV
dGlsaXR5UGFnZSgpICYmIG5vblV0aWxpdHlQYWdlQ291bnQgPT0gMTsKIH0KIAorYm9vbCBQYWdl
Ojppc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKSBjb25zdAoreworICAgIGlmIChtX2xvd1Bvd2VyTW9k
ZUVuYWJsZWRPdmVycmlkZUZvclRlc3RpbmcpCisgICAgICAgIHJldHVybiBtX2xvd1Bvd2VyTW9k
ZUVuYWJsZWRPdmVycmlkZUZvclRlc3RpbmcudmFsdWUoKTsKKworICAgIHJldHVybiBtX2xvd1Bv
d2VyTW9kZU5vdGlmaWVyLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKTsKK30KKwordm9pZCBQYWdl
OjpzZXRMb3dQb3dlck1vZGVFbmFibGVkT3ZlcnJpZGVGb3JUZXN0aW5nKHN0ZDo6b3B0aW9uYWw8
Ym9vbD4gaXNFbmFibGVkKQoreworICAgIG1fbG93UG93ZXJNb2RlRW5hYmxlZE92ZXJyaWRlRm9y
VGVzdGluZyA9IGlzRW5hYmxlZDsKKyAgICBoYW5kbGVMb3dNb2RlUG93ZXJDaGFuZ2UobV9sb3dQ
b3dlck1vZGVFbmFibGVkT3ZlcnJpZGVGb3JUZXN0aW5nLnZhbHVlX29yKGZhbHNlKSk7Cit9CisK
IHZvaWQgUGFnZTo6c2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKIHsKICAg
ICBpZiAobV90b3BDb250ZW50SW5zZXQgPT0gY29udGVudEluc2V0KQpAQCAtMTA5NCwxNCArMTEx
MSwzNCBAQCB2b2lkIFBhZ2U6OnJlc3VtZVNjcmlwdGVkQW5pbWF0aW9ucygpCiAgICAgfQogfQog
Ci12b2lkIFBhZ2U6OnNldElzVmlzdWFsbHlJZGxlSW50ZXJuYWwoYm9vbCBpc1Zpc3VhbGx5SWRs
ZSkKK2VudW0gY2xhc3MgVGhyb3R0bGluZ1JlYXNvbk9wZXJhdGlvbiB7IEFkZCwgUmVtb3ZlIH07
CitzdGF0aWMgdm9pZCB1cGRhdGVTY3JpcHRlZEFuaW1hdGlvbnNUaHJvdHRsaW5nUmVhc29uKFBh
Z2UmIHBhZ2UsIFRocm90dGxpbmdSZWFzb25PcGVyYXRpb24gb3BlcmF0aW9uLCBTY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb24gcmVhc29uKQogewotICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAg
ICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJTZXRU
aHJvdHRsZWQoaXNWaXN1YWxseUlkbGUpOworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2Uu
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKKyAgICAgICAgYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAg
aWYgKCFkb2N1bWVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvKiBzY3Jp
cHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBkb2N1bWVudC0+c2NyaXB0ZWRBbmltYXRpb25Db250
cm9sbGVyKCk7CisgICAgICAgIGlmICghc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBUaHJvdHRsaW5n
UmVhc29uT3BlcmF0aW9uOjpBZGQpCisgICAgICAgICAgICBzY3JpcHRlZEFuaW1hdGlvbkNvbnRy
b2xsZXItPmFkZFRocm90dGxpbmdSZWFzb24ocmVhc29uKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLT5yZW1vdmVUaHJvdHRsaW5nUmVhc29u
KHJlYXNvbik7CiAgICAgfQogfQogCit2b2lkIFBhZ2U6OnNldElzVmlzdWFsbHlJZGxlSW50ZXJu
YWwoYm9vbCBpc1Zpc3VhbGx5SWRsZSkKK3sKKyAgICB1cGRhdGVTY3JpcHRlZEFuaW1hdGlvbnNU
aHJvdHRsaW5nUmVhc29uKCp0aGlzLCBpc1Zpc3VhbGx5SWRsZSA/IFRocm90dGxpbmdSZWFzb25P
cGVyYXRpb246OkFkZCA6IFRocm90dGxpbmdSZWFzb25PcGVyYXRpb246OlJlbW92ZSwgU2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyOjpUaHJvdHRsaW5nUmVhc29uOjpWaXN1YWxseUlkbGUpOwor
fQorCit2b2lkIFBhZ2U6OmhhbmRsZUxvd01vZGVQb3dlckNoYW5nZShib29sIGlzTG93UG93ZXJN
b2RlRW5hYmxlZCkKK3sKKyAgICB1cGRhdGVTY3JpcHRlZEFuaW1hdGlvbnNUaHJvdHRsaW5nUmVh
c29uKCp0aGlzLCBpc0xvd1Bvd2VyTW9kZUVuYWJsZWQgPyBUaHJvdHRsaW5nUmVhc29uT3BlcmF0
aW9uOjpBZGQgOiBUaHJvdHRsaW5nUmVhc29uT3BlcmF0aW9uOjpSZW1vdmUsIFNjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlcjo6VGhyb3R0bGluZ1JlYXNvbjo6TG93UG93ZXJNb2RlKTsKK30KKwog
dm9pZCBQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZCgpCiB7CiAgICAgLy8gRklY
TUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCBtb3ZlIHRvIGEgbW9kZWwgb2YganVzdCBiZWluZyBoYW5k
ZWQgdGhlIHNoZWV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDczZWUyNjkyYjExLi45MzhhMDk2ZmI3MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmgKQEAgLTk5LDYgKzk5LDcgQEAgY2xhc3MgVXNlcklucHV0QnJpZGdlOwog
Y2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKIGNsYXNz
IExpYldlYlJUQ1Byb3ZpZGVyOworY2xhc3MgTG93UG93ZXJNb2RlTm90aWZpZXI7CiBjbGFzcyBN
YWluRnJhbWU7CiBjbGFzcyBNZWRpYUNhblN0YXJ0TGlzdGVuZXI7CiBjbGFzcyBNZWRpYVBsYXli
YWNrVGFyZ2V0OwpAQCAtNTc2LDYgKzU3Nyw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGhhc1NlbGVjdGlvbkF0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owog
I2VuZGlmCiAKKyAgICBib29sIGlzTG93UG93ZXJNb2RlRW5hYmxlZCgpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0TG93UG93ZXJNb2RlRW5hYmxlZE92ZXJyaWRlRm9yVGVzdGlu
ZyhzdGQ6Om9wdGlvbmFsPGJvb2w+KTsKKwogcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGluaXRHcm91cCgpOwogCkBAIC01OTgsNiArNjAyLDggQEAgcHJpdmF0ZToKIAogICAgIFZl
Y3RvcjxSZWY8UGx1Z2luVmlld0Jhc2U+PiBwbHVnaW5WaWV3cygpOwogCisgICAgdm9pZCBoYW5k
bGVMb3dNb2RlUG93ZXJDaGFuZ2UoYm9vbCk7CisKICAgICBlbnVtIGNsYXNzIFRpbWVyVGhyb3R0
bGluZ1N0YXRlIHsgRGlzYWJsZWQsIEVuYWJsZWQsIEVuYWJsZWRJbmNyZWFzaW5nIH07CiAgICAg
dm9pZCBoaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7CiAgICAgdm9p
ZCBzZXRUaW1lclRocm90dGxpbmdTdGF0ZShUaW1lclRocm90dGxpbmdTdGF0ZSk7CkBAIC03ODAs
NiArNzg2LDggQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlvbmFsPEV2ZW50VGhyb3R0bGluZ0Jl
aGF2aW9yPiBtX2V2ZW50VGhyb3R0bGluZ0JlaGF2aW9yT3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UGVyZm9ybWFuY2VNb25pdG9yPiBtX3BlcmZvcm1hbmNlTW9uaXRvcjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TG93UG93ZXJNb2RlTm90aWZpZXI+IG1fbG93UG93ZXJNb2RlTm90aWZp
ZXI7CisgICAgc3RkOjpvcHRpb25hbDxib29sPiBtX2xvd1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlk
ZUZvclRlc3Rpbmc7CiAKICAgICBib29sIG1faXNSdW5uaW5nVXNlclNjcmlwdHMgeyBmYWxzZSB9
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBkNjliMmM5YjIyMS4u
MjFlNzRmM2YzY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQzNiw2
ICs0MzYsNyBAQCB2b2lkIEludGVybmFsczo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShQYWdlJiBw
YWdlKQogI2VuZGlmCiAKICAgICBwYWdlLnNldFNob3dBbGxQbHVnaW5zKGZhbHNlKTsKKyAgICBw
YWdlLnNldExvd1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3Rpbmcoc3RkOjpudWxsb3B0
KTsKIAogI2lmIFVTRShRVUlDS19MT09LKQogICAgIE1vY2tRdWlja0xvb2tIYW5kbGVDbGllbnQ6
OnNpbmdsZXRvbigpLnNldFBhc3N3b3JkKCIiKTsKQEAgLTEwMTksNiArMTAyMCwxNCBAQCBib29s
IEludGVybmFsczo6aXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSBjb25zdAogICAg
IHJldHVybiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPmlzVGhyb3R0bGVkKCk7CiB9CiAK
K2RvdWJsZSBJbnRlcm5hbHM6OnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsKCkgY29uc3QK
K3sKKyAgICBhdXRvKiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBjb250ZXh0RG9jdW1l
bnQoKS0+c2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKCk7CisgICAgaWYgKCFzY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBJTkZJTklUWTsKKyAgICByZXR1cm4g
c2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLT5pbnRlcnZhbCgpLnZhbHVlKCk7Cit9CisKIGJv
b2wgSW50ZXJuYWxzOjphcmVUaW1lcnNUaHJvdHRsZWQoKSBjb25zdAogewogICAgIHJldHVybiBj
b250ZXh0RG9jdW1lbnQoKS0+aXNUaW1lclRocm90dGxpbmdFbmFibGVkKCk7CkBAIC0xMjkwLDYg
KzEyOTksMTkgQEAgdm9pZCBJbnRlcm5hbHM6OmludmFsaWRhdGVGb250Q2FjaGUoKQogICAgIEZv
bnRDYWNoZTo6c2luZ2xldG9uKCkuaW52YWxpZGF0ZSgpOwogfQogCitFeGNlcHRpb25Pcjx2b2lk
PiBJbnRlcm5hbHM6OnNldExvd1Bvd2VyTW9kZUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpCit7Cisg
ICAgYXV0byogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50
KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
YXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisKKyAgICBwYWdlLT5zZXRM
b3dQb3dlck1vZGVFbmFibGVkT3ZlcnJpZGVGb3JUZXN0aW5nKGlzRW5hYmxlZCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRTY3JvbGxWaWV3
UG9zaXRpb24oaW50IHgsIGludCB5KQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRl
eHREb2N1bWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggNDczYTM0NDY4
M2QuLjNkYzQ1ZjZlYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTEzMCw2
ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgLy8gRE9NVGltZXJzIHRocm90dGxpbmcgdGVzdGluZy4K
ICAgICBFeGNlcHRpb25Pcjxib29sPiBpc1RpbWVyVGhyb3R0bGVkKGludCB0aW1lb3V0SWQpOwog
ICAgIGJvb2wgaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSBjb25zdDsKKyAgICBk
b3VibGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwoKSBjb25zdDsKICAgICBib29sIGFy
ZVRpbWVyc1Rocm90dGxlZCgpIGNvbnN0OwogCiAgICAgZW51bSBFdmVudFRocm90dGxpbmdCZWhh
dmlvciB7IFJlc3BvbnNpdmUsIFVucmVzcG9uc2l2ZSB9OwpAQCAtMTc0LDYgKzE3NSw3IEBAIHB1
YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkKGJvb2wpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlRm9udENhY2hlKCk7CisgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gc2V0TG93UG93ZXJNb2RlRW5hYmxlZChib29sKTsKIAogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldFNjcm9sbFZpZXdQb3NpdGlvbihpbnQgeCwgaW50IHkpOwogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDhiYmI5ZGUzZjU0Li4xMDI0ODQy
ZjAzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtMzUwLDYgKzM1MCw5
IEBAIGVudW0gRXZlbnRUaHJvdHRsaW5nQmVoYXZpb3IgewogICAgIGJvb2xlYW4gaXNSZXF1ZXN0
QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKTsKICAgICBib29sZWFuIGFyZVRpbWVyc1Rocm90dGxl
ZCgpOwogCisgICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIHNldExvd1Bvd2VyTW9kZUVuYWJs
ZWQoYm9vbGVhbiBlbmFibGVkKTsKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIHJlcXVl
c3RBbmltYXRpb25GcmFtZUludGVydmFsOworCiAgICAgLy8gT3ZlcnJpZGUgdGhlIGJlaGF2aW9y
IG9mIFdlYlBhZ2U6OmV2ZW50VGhyb3R0bGluZ0RlbGF5KCksIHdoaWNoIG9ubHkgYWZmZWN0cyBp
T1MuCiAgICAgYXR0cmlidXRlIEV2ZW50VGhyb3R0bGluZ0JlaGF2aW9yPyBldmVudFRocm90dGxp
bmdCZWhhdmlvck92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9PcHRpb25TZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0
aW9uU2V0LmNwcAppbmRleCBmMDE3MzgzMWI5MS4uNzU1MTc5NDhhNWIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL09wdGlvblNldC5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uU2V0LmNwcApAQCAtODYsNiArODYsMTggQEAgVEVT
VChXVEZfT3B0aW9uU2V0LCBNaW51cykKICAgICBFWFBFQ1RfVFJVRSgoc2V0IC0gc2V0KS5pc0Vt
cHR5KCkpOwogfQogCitURVNUKFdURl9PcHRpb25TZXQsIE1pbnVzRXF1YWwpCit7CisgICAgT3B0
aW9uU2V0PEV4YW1wbGVGbGFncz4gc2V0IHsgRXhhbXBsZUZsYWdzOjpBLCBFeGFtcGxlRmxhZ3M6
OkIsIEV4YW1wbGVGbGFnczo6QyB9OworCisgICAgRVhQRUNUX1RSVUUoKChzZXQgLT0gRXhhbXBs
ZUZsYWdzOjpBKSA9PSBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiB7IEV4YW1wbGVGbGFnczo6Qiwg
RXhhbXBsZUZsYWdzOjpDIH0pKTsKKyAgICBFWFBFQ1RfVFJVRSgoc2V0ID09IE9wdGlvblNldDxF
eGFtcGxlRmxhZ3M+IHsgRXhhbXBsZUZsYWdzOjpCLCBFeGFtcGxlRmxhZ3M6OkMgfSkpOworICAg
IEVYUEVDVF9UUlVFKCgoc2V0IC09IEV4YW1wbGVGbGFnczo6RCkgPT0gT3B0aW9uU2V0PEV4YW1w
bGVGbGFncz4geyBFeGFtcGxlRmxhZ3M6OkIsIEV4YW1wbGVGbGFnczo6QyB9KSk7CisgICAgRVhQ
RUNUX1RSVUUoKHNldCA9PSBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiB7IEV4YW1wbGVGbGFnczo6
QiwgRXhhbXBsZUZsYWdzOjpDIH0pKTsKKyAgICBFWFBFQ1RfVFJVRSgoc2V0IC09IHNldCkuaXNF
bXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShzZXQuaXNFbXB0eSgpKTsKK30KKwogVEVTVChXVEZf
T3B0aW9uU2V0LCBDb250YWluc1R3b0ZsYWdzKQogewogICAgIE9wdGlvblNldDxFeGFtcGxlRmxh
Z3M+IHNldCB7IEV4YW1wbGVGbGFnczo6QSwgRXhhbXBsZUZsYWdzOjpCIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302961</attachid>
            <date>2017-02-28 11:59:02 -0800</date>
            <delta_ts>2017-02-28 12:11:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168837-20170228115605.patch</filename>
            <type>text/plain</type>
            <size>36458</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzMDg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGUyYzRkYzE3MWRhZmYyNzQ2Y2NmYTkx
Y2QxNDEyMWU0OWE0MzQwNTQuLmVlNjEyMWUyYWM5MWNlZDQzMTk1ZjUzNDY0Mjk5OWEzMzVhYmUx
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDItMjggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBUaHJvdHRsZSByZXF1ZXN0QW5pbWF0aW9uRnJh
bWUgdG8gMzBmcHMgaW4gbG93IHBvd2VyIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODgzNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzA3
MDA5Mjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIG9wZXJhdG9yIC09IG9uIFdURjo6T3B0aW9uU2V0IGZvciBjb252ZW5p
ZW5jZToKKyAgICAgICAgICAgIHNldCAtPSBFbnVtOjpBOworICAgICAgICBsb29rcyBtdWNoIGJl
dHRlciB0aGFuOgorICAgICAgICAgICAgc2V0ID0gc2V0IC0gRW51bTo6QTsKKworICAgICAgICAq
IHd0Zi9PcHRpb25TZXQuaDoKKyAgICAgICAgKFdURjo6T3B0aW9uU2V0OjpvcGVyYXRvci09KToK
KwogMjAxNy0wMi0yNCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgcHVibGljIG1ldGhvZCB0byBNZWRpYVRpbWUgZm9yIGRvaW5nIHRpbWVTY2FsZSBjb252
ZXJzaW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDhjMjgxYTc4NjU0NTZjNjliYjRmMzhiNmZkMWI0OWQ3MDk2
YmY2NTUuLjIzMjdjYWNkNDE0YmZkMzE5NjZhMWMxMDlkMzI0YjdiNDM5MWU2MTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw2MCBAQAorMjAxNy0wMi0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgorCisgICAgICAgIFtpT1NdIFRocm90dGxlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0
byAzMGZwcyBpbiBsb3cgcG93ZXIgbW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY4ODM3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDcwMDky
OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaHJv
dHRsZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gMzBmcHMgaW4gbG93IHBvd2VyIG1vZGUgb24g
aU9TIHRvIHNhdmUgYmF0dGVyeS4KKworICAgICAgICBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXIgbm93IG1haW50YWlucyBhbiBPcHRpb25TZXQgb2YgdGhyb3R0bGluZyByZWFzb25zLgorICAg
ICAgICBUaHJvdHRsaW5nIHJlYXNvbnMgZm9yIG5vdyBhcmU6IE91dHNpZGVWaWV3cG9ydCwgVmlz
dWFsbHlJZGxlLCBhbmQgTG93UG93ZXJNb2RlLgorICAgICAgICBUaGUgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lIGludGVydmFsIGlzIHRoZW4gZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aG9zZSB0aHJvdHRs
aW5nCisgICAgICAgIHJlYXNvbnM6CisgICAgICAgIC0gT3V0c2lkZVZpZXdwb3J0IG9yIFZpc3Vh
bGx5SWRsZTogMTAgc2Vjb25kcyAodmVyeSBhZ2dyZXNzaXZlIHRocm90dGxpbmcpCisgICAgICAg
IC0gTG93UG93ZXJNb2RlOiAzMGZwcworICAgICAgICAtIE5vIHJlYXNvbnM6IDYwZnBzCisKKyAg
ICAgICAgVGhlIFBhZ2Ugbm93IGtlZXBzIHRyYWNrIG9mIGxvdyBwb3dlciBtb2RlIHN0YXRlIHVz
aW5nIGEgTG93UG93ZXJNb2RlTm90aWZpZXIuCisgICAgICAgIFdoZW5ldmVyIGxvdyBwb3dlciBt
b2RlIGNoYW5nZXMsIGl0IHVwZGF0ZXMgdGhlIHRocm90dGxpbmcgcmVhc29ucyBpbiBhbGwgdGhl
CisgICAgICAgIGRvY3VtZW50cycgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVycyBpbiB0aGUg
ZnJhbWUgdHJlZS4KKworICAgICAgICBUZXN0czogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmlt
YXRpb24tZnJhbWUtdGhyb3R0bGluZy1kZXRhY2hlZC1pZnJhbWUuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdGhyb3R0bGluZy1sb3dQ
b3dlck1vZGUuaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5oOgorICAgICAgICAqIGRvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpTY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3R0bGluZ1JlYXNv
blRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm90dGxpbmdSZWFzb25zVG9TdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjphZGRUaHJv
dHRsaW5nUmVhc29uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlcjo6cmVtb3ZlVGhyb3R0bGluZ1JlYXNvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzVGhyb3R0bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6aW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpwYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAq
IGRvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZVNjcmlwdGVkQW5p
bWF0aW9uc0FuZFRpbWVyc1Rocm90dGxpbmdTdGF0ZSk6CisgICAgICAgICogcGFnZS9QYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6aXNMb3dQb3dlck1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldExv
d1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
dXBkYXRlU2NyaXB0ZWRBbmltYXRpb25zVGhyb3R0bGluZ1JlYXNvbik6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXRJc1Zpc3VhbGx5SWRsZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OmhhbmRsZUxvd01vZGVQb3dlckNoYW5nZSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjpzZXRMb3dQb3dlck1vZGVFbmFibGVkKToKKyAgICAgICAgKiB0ZXN0aW5nL0lu
dGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAxNy0wMi0y
NyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtNb2Rlcm4g
TWVkaWEgQ29udHJvbHNdIFN0YXR1cyB0ZXh0IGRvZXMgbm90IGFwcGVhciBvbiBpT1MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL09wdGlvblNldC5oIGIvU291cmNlL1dURi93dGYvT3B0aW9u
U2V0LmgKaW5kZXggZTgzOWY0MjIyODRjZTEyZmM4NTAyMDY3NWI4YjY5YzFiODFiMzkwYy4uZjNh
OGMwMDI0ZWU0MTM3N2M3YmQzMzZlNzk2ZTkzYzEzNGJlNjU1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvT3B0aW9uU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvT3B0aW9uU2V0LmgKQEAg
LTEyNSw2ICsxMjUsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbGhzOwogICAgIH0KIAor
ICAgIGZyaWVuZCBPcHRpb25TZXQmIG9wZXJhdG9yLT0oT3B0aW9uU2V0JiBsaHMsIE9wdGlvblNl
dCByaHMpCisgICAgeworICAgICAgICBsaHMubV9zdG9yYWdlICY9IH5yaHMubV9zdG9yYWdlOwor
CisgICAgICAgIHJldHVybiBsaHM7CisgICAgfQorCiAgICAgY29uc3RleHByIGZyaWVuZCBPcHRp
b25TZXQgb3BlcmF0b3ItKE9wdGlvblNldCBsaHMsIE9wdGlvblNldCByaHMpCiAgICAgewogICAg
ICAgICByZXR1cm4gT3B0aW9uU2V0Ojpmcm9tUmF3KGxocy5tX3N0b3JhZ2UgJiB+cmhzLm1fc3Rv
cmFnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBkZjhiNmY3YzZkN2RiZjMzMWVmYjVl
MGQzNzUzNDVjNmRhNWUyZWMxLi5iMWUyZjRhMmE5MTRjNGI1YTc3M2RmODZmYWM1ODc3MTYwMGUx
ZTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU0ODEsMTIgKzU0ODEsNiBAQCB2b2lk
IERvY3VtZW50OjpyZXN1bWVTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKQog
ICAgICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+cmVzdW1lKCk7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlclNldFRocm90dGxlZChib29s
IGlzVGhyb3R0bGVkKQotewotICAgIGlmIChtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcikK
LSAgICAgICAgbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPnNldFRocm90dGxlZChpc1Ro
cm90dGxlZCk7Ci19Ci0KIHZvaWQgRG9jdW1lbnQ6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCiB7CiAgICAgaWYgKG1fc2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyKQpAQCAtNjA1OCw5ICs2MDUyLDkgQEAgaW50IERvY3VtZW50OjpyZXF1ZXN0QW5p
bWF0aW9uRnJhbWUoUmVmPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmIGNhbGxiYWMK
IHsKICAgICBpZiAoIW1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKSB7CiAjaWYgVVNFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICAgICAgbV9zY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZSh0aGlzLCBwYWdlKCkgPyBwYWdlKCktPmNocm9tZSgpLmRpc3BsYXlJRCgpIDogMCk7CisgICAg
ICAgIG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250
cm9sbGVyOjpjcmVhdGUoKnRoaXMsIHBhZ2UoKSA/IHBhZ2UoKS0+Y2hyb21lKCkuZGlzcGxheUlE
KCkgOiAwKTsKICNlbHNlCi0gICAgICAgIG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyID0g
U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUodGhpcywgMCk7CisgICAgICAgIG1f
c2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVy
OjpjcmVhdGUoKnRoaXMsIDApOwogI2VuZGlmCiAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhh
dCB0aGUgUGFnZSBtYXkgaGF2ZSBzdXNwZW5kZWQgc2NyaXB0ZWQgYW5pbWF0aW9ucyBiZWZvcmUK
ICAgICAgICAgLy8gd2Ugd2VyZSBjcmVhdGVkLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdl
IGRvbid0IHN0YXJ0IHVwIHRoZSBhbmltYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggOTlm
ZmNkYjBjYzZjYWQ3NTNhYmM5MWRhYjg5OWNhNzA5ZDM2YTgwNC4uNjFkZTMxOTUyODYyOWMyZTJk
MDcxOWIzMmEyYzA5ZWE5MWQ3YTlhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTk1OCw3ICs5
NTgsNiBAQCBwdWJsaWM6CiAgICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKiBzY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVybiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlci5nZXQoKTsgfQogICAgIHZvaWQgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxl
ckNhbGxiYWNrcygpOwogICAgIHZvaWQgcmVzdW1lU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVy
Q2FsbGJhY2tzKCk7Ci0gICAgdm9pZCBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJTZXRUaHJv
dHRsZWQoYm9vbCk7CiAgICAgCiAgICAgdm9pZCB3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoUGxhdGZv
cm1EaXNwbGF5SUQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGI5NGViZGYzNjU3MzU5N2MwMGI4YjQ4MjQ2MTc3N2Iy
YzNkNjNhNzYuLjYwNWRmNmU1ZmU1MjcyYmQ1NDVhMWY2MmQ4YjcyZjlmNjhkMGM1YzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
CkBAIC00MCwyNSArNDAsMzQgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9U
SU1FUikKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CiAKIC8vIEFsbG93IGEgbGl0dGxlIG1vcmUgdGhhbiA2MGZwcyB0byBtYWtlIHN1cmUgd2UgY2Fu
IGF0IGxlYXN0IGhpdCB0aGF0IGZyYW1lIHJhdGUuCi0jZGVmaW5lIE1pbmltdW1BbmltYXRpb25J
bnRlcnZhbCAwLjAxNQotI2RlZmluZSBNaW5pbXVtVGhyb3R0bGVkQW5pbWF0aW9uSW50ZXJ2YWwg
MTAKK3N0YXRpYyBjb25zdCBTZWNvbmRzIGZ1bGxTcGVlZEFuaW1hdGlvbkludGVydmFsIHsgMC4w
MTUgfTsKKy8vIEFsbG93IGEgbGl0dGxlIG1vcmUgdGhhbiAzMGZwcyB0byBtYWtlIHN1cmUgd2Ug
Y2FuIGF0IGxlYXN0IGhpdCB0aGF0IGZyYW1lIHJhdGUuCitzdGF0aWMgY29uc3QgU2Vjb25kcyBo
YWxmU3BlZWRUaHJvdHRsaW5nQW5pbWF0aW9uSW50ZXJ2YWwgeyAwLjAzMCB9Oworc3RhdGljIGNv
bnN0IFNlY29uZHMgYWdncmVzc2l2ZVRocm90dGxpbmdBbmltYXRpb25JbnRlcnZhbCB7IDEwIH07
CiAjZW5kaWYKIAorI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwgLi4uKSBSRUxF
QVNFX0xPR19JRihwYWdlKCkgJiYgcGFnZSgpLT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwg
UGVyZm9ybWFuY2VMb2dnaW5nLCAiJXAgLSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OiIg
Zm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKERvY3Vt
ZW50KiBkb2N1bWVudCwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQotICAgIDogbV9kb2N1
bWVudChkb2N1bWVudCkKK1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6U2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyKERvY3VtZW50JiBkb2N1bWVudCwgUGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKQorICAgIDogbV9kb2N1bWVudCgmZG9jdW1lbnQpCiAjaWYgVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX1RJTUVSKQogICAgICwgbV9hbmltYXRpb25UaW1lcigqdGhpcywgJlNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKICNlbmRpZgogewog
ICAgIHdpbmRvd1NjcmVlbkRpZENoYW5nZShkaXNwbGF5SUQpOworCisgICAgYXV0byogcGFnZSA9
IGRvY3VtZW50LnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5pc0xvd1Bvd2VyTW9kZUVu
YWJsZWQoKSkKKyAgICAgICAgYWRkVGhyb3R0bGluZ1JlYXNvbihUaHJvdHRsaW5nUmVhc29uOjpM
b3dQb3dlck1vZGUpOwogfQogCiBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6On5TY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXIoKQpAQCAtODYsMjggKzk1LDc4IEBAIHZvaWQgU2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyOjpyZXN1bWUoKQogICAgICAgICBzY2hlZHVsZUFuaW1hdGlvbigp
OwogfQogCi12b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2V0VGhyb3R0bGVkKGJv
b2wgaXNUaHJvdHRsZWQpCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAm
JiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKSAmJiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKKworc3RhdGljIGNvbnN0IGNoYXIqIHRocm90dGxpbmdSZWFzb25Ub1N0
cmluZyhTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb24gcmVhc29u
KQoreworICAgIHN3aXRjaCAocmVhc29uKSB7CisgICAgY2FzZSBTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb246OlZpc3VhbGx5SWRsZToKKyAgICAgICAgcmV0dXJu
ICJWaXN1YWxseUlkbGUiOworICAgIGNhc2UgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpU
aHJvdHRsaW5nUmVhc29uOjpPdXRzaWRlVmlld3BvcnQ6CisgICAgICAgIHJldHVybiAiT3V0c2lk
ZVZpZXdwb3J0IjsKKyAgICBjYXNlIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6VGhyb3R0
bGluZ1JlYXNvbjo6TG93UG93ZXJNb2RlOgorICAgICAgICByZXR1cm4gIkxvd1Bvd2VyTW9kZSI7
CisgICAgfQorfQorCitzdGF0aWMgU3RyaW5nIHRocm90dGxpbmdSZWFzb25zVG9TdHJpbmcoT3B0
aW9uU2V0PFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6VGhyb3R0bGluZ1JlYXNvbj4gcmVh
c29ucykKK3sKKyAgICBpZiAocmVhc29ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoIltVbnRocm90dGxlZF0iKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICBmb3IgKGF1dG8gcmVhc29uIDogcmVhc29ucykgeworICAgICAgICBpZiAoIWJ1aWxkZXIu
aXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ3wnKTsKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQodGhyb3R0bGluZ1JlYXNvblRvU3RyaW5nKHJlYXNvbikpOworICAgIH0KKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCisjZW5kaWYKKwordm9pZCBTY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZFRocm90dGxpbmdSZWFzb24oVGhyb3R0bGluZ1JlYXNv
biByZWFzb24pCiB7CiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIGlmIChtX2lz
VGhyb3R0bGVkID09IGlzVGhyb3R0bGVkKQorICAgIGlmIChtX3Rocm90dGxpbmdSZWFzb25zLmNv
bnRhaW5zKHJlYXNvbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhBbmltYXRpb25zLCAi
JXAgLSBTZXR0aW5nIFJlcXVlc3RBbmltYXRpb25GcmFtZSB0aHJvdHRsaW5nIHN0YXRlIHRvICVk
IGluIGZyYW1lICVwIChpc01haW5GcmFtZTogJWQpIiwgdGhpcywgaXNUaHJvdHRsZWQsIG1fZG9j
dW1lbnQtPmZyYW1lKCksIG1fZG9jdW1lbnQtPmZyYW1lKCkgPyBtX2RvY3VtZW50LT5mcmFtZSgp
LT5pc01haW5GcmFtZSgpIDogMCk7CisgICAgbV90aHJvdHRsaW5nUmVhc29ucyB8PSByZWFzb247
CisKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJhZGRUaHJvdHRsaW5nUmVhc29uKCVzKSAt
PiAlcyIsIHRocm90dGxpbmdSZWFzb25Ub1N0cmluZyhyZWFzb24pLCB0aHJvdHRsaW5nUmVhc29u
c1RvU3RyaW5nKG1fdGhyb3R0bGluZ1JlYXNvbnMpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgbV9p
c1Rocm90dGxlZCA9IGlzVGhyb3R0bGVkOwogICAgIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0
aXZlKCkpIHsKICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7CiAgICAgICAgIHNjaGVk
dWxlQW5pbWF0aW9uKCk7CiAgICAgfQogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaXNUaHJvdHRs
ZWQpOworICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVUaHJvdHRsaW5nUmVhc29uKFRocm90dGxpbmdS
ZWFzb24gcmVhc29uKQoreworI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikg
JiYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICBpZiAo
IW1fdGhyb3R0bGluZ1JlYXNvbnMuY29udGFpbnMocmVhc29uKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV90aHJvdHRsaW5nUmVhc29ucyAtPSByZWFzb247CisKKyAgICBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKCJyZW1vdmVUaHJvdHRsaW5nUmVhc29uKCVzKSAtPiAlcyIsIHRocm90dGxpbmdS
ZWFzb25Ub1N0cmluZyhyZWFzb24pLCB0aHJvdHRsaW5nUmVhc29uc1RvU3RyaW5nKG1fdGhyb3R0
bGluZ1JlYXNvbnMpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKG1fYW5pbWF0aW9uVGltZXIu
aXNBY3RpdmUoKSkgeworICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKKyAgICAgICAg
c2NoZWR1bGVBbmltYXRpb24oKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZWFz
b24pOwogI2VuZGlmCiB9CiAKIGJvb2wgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjppc1Ro
cm90dGxlZCgpIGNvbnN0CiB7CiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVS
KSAmJiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIHJl
dHVybiBtX2lzVGhyb3R0bGVkOworICAgIHJldHVybiAhbV90aHJvdHRsaW5nUmVhc29ucy5pc0Vt
cHR5KCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAtMTkyLDYgKzI1MSwy
MyBAQCB2b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6d2luZG93U2NyZWVuRGlkQ2hh
bmdlKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYQogI2VuZGlmCiB9CiAKK1NlY29uZHMgU2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyOjppbnRlcnZhbCgpIGNvbnN0Cit7CisjaWYgVVNFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVf
RElTUExBWV9NT05JVE9SKQorICAgIGlmIChtX3Rocm90dGxpbmdSZWFzb25zLmNvbnRhaW5zKFRo
cm90dGxpbmdSZWFzb246OlZpc3VhbGx5SWRsZSkgfHwgbV90aHJvdHRsaW5nUmVhc29ucy5jb250
YWlucyhUaHJvdHRsaW5nUmVhc29uOjpPdXRzaWRlVmlld3BvcnQpKQorICAgICAgICByZXR1cm4g
YWdncmVzc2l2ZVRocm90dGxpbmdBbmltYXRpb25JbnRlcnZhbDsKKyAgICBpZiAobV90aHJvdHRs
aW5nUmVhc29ucy5jb250YWlucyhUaHJvdHRsaW5nUmVhc29uOjpMb3dQb3dlck1vZGUpKQorICAg
ICAgICByZXR1cm4gaGFsZlNwZWVkVGhyb3R0bGluZ0FuaW1hdGlvbkludGVydmFsOworICAgIEFT
U0VSVChtX3Rocm90dGxpbmdSZWFzb25zLmlzRW1wdHkoKSk7CisjZW5kaWYKKyAgICByZXR1cm4g
ZnVsbFNwZWVkQW5pbWF0aW9uSW50ZXJ2YWw7Cit9CisKK1BhZ2UqIFNjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlcjo6cGFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQgPyBtX2Rv
Y3VtZW50LT5wYWdlKCkgOiBudWxscHRyOworfQorCiB2b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlcjo6c2NoZWR1bGVBbmltYXRpb24oKQogewogICAgIGlmICghcmVxdWVzdEFuaW1hdGlv
bkZyYW1lRW5hYmxlZCgpKQpAQCAtMTk5LDcgKzI3NSw3IEBAIHZvaWQgU2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOjpzY2hlZHVsZUFuaW1hdGlvbigpCiAKICNpZiBVU0UoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUVfVElNRVIpCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BM
QVlfTU9OSVRPUikKLSAgICBpZiAoIW1faXNVc2luZ1RpbWVyICYmICFtX2lzVGhyb3R0bGVkKSB7
CisgICAgaWYgKCFtX2lzVXNpbmdUaW1lciAmJiAhaXNUaHJvdHRsZWQoKSkgewogICAgICAgICBp
ZiAoRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnNjaGVkdWxl
QW5pbWF0aW9uKCp0aGlzKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMjA5LDEzICsyODUs
OCBAQCB2b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVBbmltYXRpb24o
KQogICAgIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGRvdWJsZSBhbmltYXRpb25JbnRlcnZhbCA9IE1pbmltdW1BbmltYXRpb25JbnRlcnZh
bDsKLSNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpICYmIFVTRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAgaWYgKG1faXNUaHJvdHRsZWQp
Ci0gICAgICAgIGFuaW1hdGlvbkludGVydmFsID0gTWluaW11bVRocm90dGxlZEFuaW1hdGlvbklu
dGVydmFsOwotI2VuZGlmCi0KLSAgICBkb3VibGUgc2NoZWR1bGVEZWxheSA9IHN0ZDo6bWF4PGRv
dWJsZT4oYW5pbWF0aW9uSW50ZXJ2YWwgLSAobV9kb2N1bWVudC0+ZG9tV2luZG93KCktPm5vd1Rp
bWVzdGFtcCgpIC0gbV9sYXN0QW5pbWF0aW9uRnJhbWVUaW1lc3RhbXApLCAwKTsKKyAgICBTZWNv
bmRzIGFuaW1hdGlvbkludGVydmFsID0gaW50ZXJ2YWwoKTsKKyAgICBkb3VibGUgc2NoZWR1bGVE
ZWxheSA9IHN0ZDo6bWF4PGRvdWJsZT4oYW5pbWF0aW9uSW50ZXJ2YWwudmFsdWUoKSAtIChtX2Rv
Y3VtZW50LT5kb21XaW5kb3coKS0+bm93VGltZXN0YW1wKCkgLSBtX2xhc3RBbmltYXRpb25GcmFt
ZVRpbWVzdGFtcCksIDApOwogICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KHNjaGVk
dWxlRGVsYXkpOwogI2Vsc2UKICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2RvY3Vt
ZW50LT52aWV3KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyLmgKaW5kZXggMDEyYzI1ODYyNmRjZmIyNzk4ZmU2OTE4Nzc1OGUxMTI4OTdiZjVh
ZS4uNDBkYTEyMWEzZDUzMDA5YzIyZTM2MWU3ZGE1MTM2OTk1MjVkYTFmNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaW5jbHVkZSAiRE9NVGltZVN0YW1wLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
Y3JlZW4uaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgpAQCAtNTIsNyArNTMsNyBAQCBjbGFzcyBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZQogI2VuZGlmCiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0
ZShEb2N1bWVudCogZG9jdW1lbnQsIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKKyAgICBz
dGF0aWMgUmVmPFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKERvY3VtZW50JiBk
b2N1bWVudCwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKGRvY3VtZW50LCBk
aXNwbGF5SUQpKTsKICAgICB9CkBAIC02OCwxMyArNjksMjMgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzdXNwZW5kKCk7CiAgICAgdm9pZCByZXN1bWUoKTsKLSAgICB2b2lkIHNldFRocm90dGxlZChi
b29sKTsKKworICAgIGVudW0gY2xhc3MgVGhyb3R0bGluZ1JlYXNvbiB7CisgICAgICAgIFZpc3Vh
bGx5SWRsZSAgICA9IDEgPDwgMCwKKyAgICAgICAgT3V0c2lkZVZpZXdwb3J0ID0gMSA8PCAxLAor
ICAgICAgICBMb3dQb3dlck1vZGUgICAgPSAxIDw8IDIsCisgICAgfTsKKyAgICB2b2lkIGFkZFRo
cm90dGxpbmdSZWFzb24oVGhyb3R0bGluZ1JlYXNvbik7CisgICAgdm9pZCByZW1vdmVUaHJvdHRs
aW5nUmVhc29uKFRocm90dGxpbmdSZWFzb24pOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNU
aHJvdHRsZWQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTZWNvbmRzIGludGVydmFsKCkg
Y29uc3Q7CiAKICAgICB2b2lkIHdpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJ
RCk7CiAKIHByaXZhdGU6Ci0gICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKERvY3VtZW50
KiwgUGxhdGZvcm1EaXNwbGF5SUQpOworICAgIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcihE
b2N1bWVudCYsIFBsYXRmb3JtRGlzcGxheUlEKTsKKworICAgIFBhZ2UqIHBhZ2UoKSBjb25zdDsK
IAogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFj
az4+IENhbGxiYWNrTGlzdDsKICAgICBDYWxsYmFja0xpc3QgbV9jYWxsYmFja3M7CkBAIC05Nyw3
ICsxMDgsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNy
ZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBib29sIG1faXNVc2luZ1RpbWVyIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNU
aHJvdHRsZWQgeyBmYWxzZSB9OworCisgICAgT3B0aW9uU2V0PFRocm90dGxpbmdSZWFzb24+IG1f
dGhyb3R0bGluZ1JlYXNvbnM7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCBkMTUwODA1ZGI0NWRhYWI3NDg3ZGE1NGZkNTgyMzk4OTBjM2QwOGExLi4zYzljZWE5
ZjY1ZTE5MWY3ZTQ2MzVmYTNkMDA0MTc4ZWQ3MmNjOWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC0yNTYzLDggKzI1NjMsMTIgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZVNjcmlw
dGVkQW5pbWF0aW9uc0FuZFRpbWVyc1Rocm90dGxpbmdTdGF0ZShjb25zdCBJbnRSZWN0JgogICAg
IC8vIFdlIGRvbid0IHRocm90dGxlIHplcm8tc2l6ZSBvciBkaXNwbGF5Om5vbmUgZnJhbWVzIGJl
Y2F1c2UgdGhvc2UgYXJlIHVzdWFsbHkgdXRpbGl0eSBmcmFtZXMuCiAgICAgYm9vbCBzaG91bGRU
aHJvdHRsZSA9IHZpc2libGVSZWN0LmlzRW1wdHkoKSAmJiAhbV9zaXplLmlzRW1wdHkoKSAmJiBm
cmFtZSgpLm93bmVyUmVuZGVyZXIoKTsKIAotICAgIGlmIChhdXRvKiBzY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXIgPSBkb2N1bWVudC0+c2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKCkpCi0g
ICAgICAgIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+c2V0VGhyb3R0bGVkKHNob3VsZFRo
cm90dGxlKTsKKyAgICBpZiAoYXV0byogc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyID0gZG9j
dW1lbnQtPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcigpKSB7CisgICAgICAgIGlmIChzaG91
bGRUaHJvdHRsZSkKKyAgICAgICAgICAgIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+YWRk
VGhyb3R0bGluZ1JlYXNvbihTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OlRocm90dGxpbmdS
ZWFzb246Ok91dHNpZGVWaWV3cG9ydCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlVGhyb3R0bGluZ1JlYXNvbihTY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb246Ok91dHNpZGVWaWV3cG9ydCk7Cisg
ICAgfQogCiAgICAgZG9jdW1lbnQtPnNldFRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoc2hvdWxkVGhy
b3R0bGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggNTY3MDQ0NzllZGRjYTg2ZTYyMGI3ZDg1
NmI5MDgwMDA0OGY5YTA2OC4uMTMxYjA5OGMyNzgyNDM1NmNmYjYyYjMyNGZlMmFmYzczODIyYTQ5
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTGliV2ViUlRDUHJvdmlkZXIuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTG93UG93ZXJNb2RlTm90aWZpZXIuaCIKICNp
bmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIK
ICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKQEAgLTg0LDYgKzg1LDcgQEAKICNpbmNsdWRlICJTVkdE
b2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC0yNjMsNiArMjY1LDcgQEAg
UGFnZTo6UGFnZShQYWdlQ29uZmlndXJhdGlvbiYmIHBhZ2VDb25maWd1cmF0aW9uKQogICAgICwg
bV9pc0Nsb3NpbmcoZmFsc2UpCiAgICAgLCBtX2lzVXRpbGl0eVBhZ2UoaXNVdGlsaXR5UGFnZUNo
cm9tZUNsaWVudChjaHJvbWUoKS5jbGllbnQoKSkpCiAgICAgLCBtX3BlcmZvcm1hbmNlTW9uaXRv
cihpc1V0aWxpdHlQYWdlKCkgPyBudWxscHRyIDogc3RkOjptYWtlX3VuaXF1ZTxQZXJmb3JtYW5j
ZU1vbml0b3I+KCp0aGlzKSkKKyAgICAsIG1fbG93UG93ZXJNb2RlTm90aWZpZXIoc3RkOjptYWtl
X3VuaXF1ZTxMb3dQb3dlck1vZGVOb3RpZmllcj4oW3RoaXNdKGJvb2wgaXNMb3dQb3dlck1vZGVF
bmFibGVkKSB7IGhhbmRsZUxvd01vZGVQb3dlckNoYW5nZShpc0xvd1Bvd2VyTW9kZUVuYWJsZWQp
OyB9KSkKIHsKICAgICB1cGRhdGVUaW1lclRocm90dGxpbmdTdGF0ZSgpOwogCkBAIC05NTQsNiAr
OTU3LDIwIEBAIGJvb2wgUGFnZTo6aXNPbmx5Tm9uVXRpbGl0eVBhZ2UoKSBjb25zdAogICAgIHJl
dHVybiAhaXNVdGlsaXR5UGFnZSgpICYmIG5vblV0aWxpdHlQYWdlQ291bnQgPT0gMTsKIH0KIAor
Ym9vbCBQYWdlOjppc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKSBjb25zdAoreworICAgIGlmIChtX2xv
d1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3RpbmcpCisgICAgICAgIHJldHVybiBtX2xv
d1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3RpbmcudmFsdWUoKTsKKworICAgIHJldHVy
biBtX2xvd1Bvd2VyTW9kZU5vdGlmaWVyLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKTsKK30KKwor
dm9pZCBQYWdlOjpzZXRMb3dQb3dlck1vZGVFbmFibGVkT3ZlcnJpZGVGb3JUZXN0aW5nKHN0ZDo6
b3B0aW9uYWw8Ym9vbD4gaXNFbmFibGVkKQoreworICAgIG1fbG93UG93ZXJNb2RlRW5hYmxlZE92
ZXJyaWRlRm9yVGVzdGluZyA9IGlzRW5hYmxlZDsKKyAgICBoYW5kbGVMb3dNb2RlUG93ZXJDaGFu
Z2UobV9sb3dQb3dlck1vZGVFbmFibGVkT3ZlcnJpZGVGb3JUZXN0aW5nLnZhbHVlX29yKGZhbHNl
KSk7Cit9CisKIHZvaWQgUGFnZTo6c2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNl
dCkKIHsKICAgICBpZiAobV90b3BDb250ZW50SW5zZXQgPT0gY29udGVudEluc2V0KQpAQCAtMTA5
NCwxNCArMTExMSwzNCBAQCB2b2lkIFBhZ2U6OnJlc3VtZVNjcmlwdGVkQW5pbWF0aW9ucygpCiAg
ICAgfQogfQogCi12b2lkIFBhZ2U6OnNldElzVmlzdWFsbHlJZGxlSW50ZXJuYWwoYm9vbCBpc1Zp
c3VhbGx5SWRsZSkKK2VudW0gY2xhc3MgVGhyb3R0bGluZ1JlYXNvbk9wZXJhdGlvbiB7IEFkZCwg
UmVtb3ZlIH07CitzdGF0aWMgdm9pZCB1cGRhdGVTY3JpcHRlZEFuaW1hdGlvbnNUaHJvdHRsaW5n
UmVhc29uKFBhZ2UmIHBhZ2UsIFRocm90dGxpbmdSZWFzb25PcGVyYXRpb24gb3BlcmF0aW9uLCBT
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb24gcmVhc29uKQogewot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQo
KSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRy
b2xsZXJTZXRUaHJvdHRsZWQoaXNWaXN1YWxseUlkbGUpOworICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJnBhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KCkpIHsKKyAgICAgICAgYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsK
KyAgICAgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBh
dXRvKiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBkb2N1bWVudC0+c2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyKCk7CisgICAgICAgIGlmICghc2NyaXB0ZWRBbmltYXRpb25Db250cm9s
bGVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBU
aHJvdHRsaW5nUmVhc29uT3BlcmF0aW9uOjpBZGQpCisgICAgICAgICAgICBzY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXItPmFkZFRocm90dGxpbmdSZWFzb24ocmVhc29uKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLT5yZW1vdmVUaHJvdHRs
aW5nUmVhc29uKHJlYXNvbik7CiAgICAgfQogfQogCit2b2lkIFBhZ2U6OnNldElzVmlzdWFsbHlJ
ZGxlSW50ZXJuYWwoYm9vbCBpc1Zpc3VhbGx5SWRsZSkKK3sKKyAgICB1cGRhdGVTY3JpcHRlZEFu
aW1hdGlvbnNUaHJvdHRsaW5nUmVhc29uKCp0aGlzLCBpc1Zpc3VhbGx5SWRsZSA/IFRocm90dGxp
bmdSZWFzb25PcGVyYXRpb246OkFkZCA6IFRocm90dGxpbmdSZWFzb25PcGVyYXRpb246OlJlbW92
ZSwgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpUaHJvdHRsaW5nUmVhc29uOjpWaXN1YWxs
eUlkbGUpOworfQorCit2b2lkIFBhZ2U6OmhhbmRsZUxvd01vZGVQb3dlckNoYW5nZShib29sIGlz
TG93UG93ZXJNb2RlRW5hYmxlZCkKK3sKKyAgICB1cGRhdGVTY3JpcHRlZEFuaW1hdGlvbnNUaHJv
dHRsaW5nUmVhc29uKCp0aGlzLCBpc0xvd1Bvd2VyTW9kZUVuYWJsZWQgPyBUaHJvdHRsaW5nUmVh
c29uT3BlcmF0aW9uOjpBZGQgOiBUaHJvdHRsaW5nUmVhc29uT3BlcmF0aW9uOjpSZW1vdmUsIFNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6VGhyb3R0bGluZ1JlYXNvbjo6TG93UG93ZXJNb2Rl
KTsKK30KKwogdm9pZCBQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZCgpCiB7CiAg
ICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCBtb3ZlIHRvIGEgbW9kZWwgb2YganVzdCBi
ZWluZyBoYW5kZWQgdGhlIHNoZWV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDczZWUyNjkyYjExZjBjODNi
NmRiY2NlMmE2Y2YwNzZkOTU0NzljNWUuLjkzOGEwOTZmYjczOWQ5OWY2N2UyZWRjYjU5NDMyZWZk
ZjE1NmY1MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC05OSw2ICs5OSw3IEBAIGNsYXNzIFVzZXJJbnB1
dEJyaWRnZTsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckNvbnRyb2xs
ZXI7CiBjbGFzcyBMaWJXZWJSVENQcm92aWRlcjsKK2NsYXNzIExvd1Bvd2VyTW9kZU5vdGlmaWVy
OwogY2xhc3MgTWFpbkZyYW1lOwogY2xhc3MgTWVkaWFDYW5TdGFydExpc3RlbmVyOwogY2xhc3Mg
TWVkaWFQbGF5YmFja1RhcmdldDsKQEAgLTU3Niw2ICs1NzcsOSBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBoYXNTZWxlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdDsKICNlbmRpZgogCisgICAgYm9vbCBpc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvd1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlk
ZUZvclRlc3Rpbmcoc3RkOjpvcHRpb25hbDxib29sPik7CisKIHByaXZhdGU6CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBpbml0R3JvdXAoKTsKIApAQCAtNTk4LDYgKzYwMiw4IEBAIHByaXZhdGU6
CiAKICAgICBWZWN0b3I8UmVmPFBsdWdpblZpZXdCYXNlPj4gcGx1Z2luVmlld3MoKTsKIAorICAg
IHZvaWQgaGFuZGxlTG93TW9kZVBvd2VyQ2hhbmdlKGJvb2wpOworCiAgICAgZW51bSBjbGFzcyBU
aW1lclRocm90dGxpbmdTdGF0ZSB7IERpc2FibGVkLCBFbmFibGVkLCBFbmFibGVkSW5jcmVhc2lu
ZyB9OwogICAgIHZvaWQgaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCgp
OwogICAgIHZvaWQgc2V0VGltZXJUaHJvdHRsaW5nU3RhdGUoVGltZXJUaHJvdHRsaW5nU3RhdGUp
OwpAQCAtNzgwLDYgKzc4Niw4IEBAIHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25hbDxFdmVudFRo
cm90dGxpbmdCZWhhdmlvcj4gbV9ldmVudFRocm90dGxpbmdCZWhhdmlvck92ZXJyaWRlOwogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBlcmZvcm1hbmNlTW9uaXRvcj4gbV9wZXJmb3JtYW5jZU1vbml0
b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPExvd1Bvd2VyTW9kZU5vdGlmaWVyPiBtX2xvd1Bvd2Vy
TW9kZU5vdGlmaWVyOworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbV9sb3dQb3dlck1vZGVFbmFi
bGVkT3ZlcnJpZGVGb3JUZXN0aW5nOwogCiAgICAgYm9vbCBtX2lzUnVubmluZ1VzZXJTY3JpcHRz
IHsgZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggZDY5
YjJjOWIyMjEwNzM1OTkxZjVjNWJjNWEyNWMxYmY3ZTFmMzE2Mi4uMjFlNzRmM2YzY2JiMDdkNWRl
NGEzYWE1OWE3Zjc5MTkwNjU4MTBmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cApAQCAtNDM2LDYgKzQzNiw3IEBAIHZvaWQgSW50ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVudFN0
YXRlKFBhZ2UmIHBhZ2UpCiAjZW5kaWYKIAogICAgIHBhZ2Uuc2V0U2hvd0FsbFBsdWdpbnMoZmFs
c2UpOworICAgIHBhZ2Uuc2V0TG93UG93ZXJNb2RlRW5hYmxlZE92ZXJyaWRlRm9yVGVzdGluZyhz
dGQ6Om51bGxvcHQpOwogCiAjaWYgVVNFKFFVSUNLX0xPT0spCiAgICAgTW9ja1F1aWNrTG9va0hh
bmRsZUNsaWVudDo6c2luZ2xldG9uKCkuc2V0UGFzc3dvcmQoIiIpOwpAQCAtMTAxOSw2ICsxMDIw
LDE0IEBAIGJvb2wgSW50ZXJuYWxzOjppc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgp
IGNvbnN0CiAgICAgcmV0dXJuIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+aXNUaHJvdHRs
ZWQoKTsKIH0KIAorZG91YmxlIEludGVybmFsczo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2
YWwoKSBjb25zdAoreworICAgIGF1dG8qIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IGNv
bnRleHREb2N1bWVudCgpLT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBpZiAo
IXNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIElORklOSVRZOwor
ICAgIHJldHVybiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPmludGVydmFsKCkudmFsdWUo
KTsKK30KKwogYm9vbCBJbnRlcm5hbHM6OmFyZVRpbWVyc1Rocm90dGxlZCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGNvbnRleHREb2N1bWVudCgpLT5pc1RpbWVyVGhyb3R0bGluZ0VuYWJsZWQoKTsK
QEAgLTEyOTAsNiArMTI5OSwxOSBAQCB2b2lkIEludGVybmFsczo6aW52YWxpZGF0ZUZvbnRDYWNo
ZSgpCiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5pbnZhbGlkYXRlKCk7CiB9CiAKK0V4Y2Vw
dGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0TG93UG93ZXJNb2RlRW5hYmxlZChib29sIGlzRW5h
YmxlZCkKK3sKKyAgICBhdXRvKiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOworICAgIGlm
ICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICBhdXRvKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2Up
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKworICAg
IHBhZ2UtPnNldExvd1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3RpbmcoaXNFbmFibGVk
KTsKKyAgICByZXR1cm4geyB9OworfQorCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNl
dFNjcm9sbFZpZXdQb3NpdGlvbihpbnQgeCwgaW50IHkpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY29udGV4dERvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRl
eCA0NzNhMzQ0NjgzZGRhMGRkM2M3YmZiY2RkODJkYTJlMjY3Y2IzZGIxLi4zZGM0NWY2ZWI5MWNl
ZDEwMTE5MDEwNjI3OTIzZDgxODUxYmRiYWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgKQEAgLTEzMCw2ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgLy8gRE9NVGltZXJzIHRocm90dGxp
bmcgdGVzdGluZy4KICAgICBFeGNlcHRpb25Pcjxib29sPiBpc1RpbWVyVGhyb3R0bGVkKGludCB0
aW1lb3V0SWQpOwogICAgIGJvb2wgaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSBj
b25zdDsKKyAgICBkb3VibGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwoKSBjb25zdDsK
ICAgICBib29sIGFyZVRpbWVyc1Rocm90dGxlZCgpIGNvbnN0OwogCiAgICAgZW51bSBFdmVudFRo
cm90dGxpbmdCZWhhdmlvciB7IFJlc3BvbnNpdmUsIFVucmVzcG9uc2l2ZSB9OwpAQCAtMTc0LDYg
KzE3NSw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRNYXJrZWRUZXh0TWF0
Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlRm9udENhY2hl
KCk7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TG93UG93ZXJNb2RlRW5hYmxlZChib29sKTsK
IAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFNjcm9sbFZpZXdQb3NpdGlvbihpbnQgeCwgaW50
IHkpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDhiYmI5ZGUz
ZjU0MWQ1MmU4NTk1YmQ0NjNlYTI5ZTU2MDFlNTA5ZTEuLjEwMjQ4NDJmMDNjYWNjZDZlY2Q2MmNi
Mjg4OTI2NGNiOTQxMjcyMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAg
LTM1MCw2ICszNTAsOSBAQCBlbnVtIEV2ZW50VGhyb3R0bGluZ0JlaGF2aW9yIHsKICAgICBib29s
ZWFuIGlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCk7CiAgICAgYm9vbGVhbiBhcmVU
aW1lcnNUaHJvdHRsZWQoKTsKIAorICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBzZXRMb3dQ
b3dlck1vZGVFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7CisgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGRvdWJsZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbDsKKwogICAgIC8vIE92ZXJyaWRl
IHRoZSBiZWhhdmlvciBvZiBXZWJQYWdlOjpldmVudFRocm90dGxpbmdEZWxheSgpLCB3aGljaCBv
bmx5IGFmZmVjdHMgaU9TLgogICAgIGF0dHJpYnV0ZSBFdmVudFRocm90dGxpbmdCZWhhdmlvcj8g
ZXZlbnRUaHJvdHRsaW5nQmVoYXZpb3JPdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA3MjM1ZWJiYTkwMzJmYjIxZjAyNjZmODEx
NWE5ZGY3NTE0ZWQ2NzAuLmY3MWRmOTk1MTRjOWMxMDA1ODNjM2Y1MDhkYWU0YzA5NGUwNTVhMjkg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNy0wMi0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFtpT1NdIFRocm90dGxlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byAzMGZwcyBp
biBsb3cgcG93ZXIgbW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY4ODM3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDcwMDkyOT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdW5pdCB0ZXN0
IGZvciAtPSBvcGVyYXRvciBvbiBXVEY6Ok9wdGlvblNldC4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL09wdGlvblNldC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKToKKwogMjAxNy0wMi0yNyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgc3BlY2lmaWNhdGlvbiBhbmQgc3RhdHVzIG1ldGFkYXRhIHRvIENT
U1Byb3BlcnRpZXMuanNvbiwgYW5kIHZhbGlkYXRlIGl0CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25TZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvT3B0aW9uU2V0LmNwcAppbmRleCBmMDE3MzgzMWI5MWMwMTUwMmMyMDU0YWY4NmM5
YTFkN2VhNzQ5NDE2Li43NTUxNzk0OGE1YjAzYmJiMWNmNDg3NzNhYmI0Y2U5OTdkOWVlNjIzIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25TZXQuY3BwCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL09wdGlvblNldC5jcHAKQEAgLTg2LDYg
Kzg2LDE4IEBAIFRFU1QoV1RGX09wdGlvblNldCwgTWludXMpCiAgICAgRVhQRUNUX1RSVUUoKHNl
dCAtIHNldCkuaXNFbXB0eSgpKTsKIH0KIAorVEVTVChXVEZfT3B0aW9uU2V0LCBNaW51c0VxdWFs
KQoreworICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+IHNldCB7IEV4YW1wbGVGbGFnczo6QSwg
RXhhbXBsZUZsYWdzOjpCLCBFeGFtcGxlRmxhZ3M6OkMgfTsKKworICAgIEVYUEVDVF9UUlVFKCgo
c2V0IC09IEV4YW1wbGVGbGFnczo6QSkgPT0gT3B0aW9uU2V0PEV4YW1wbGVGbGFncz4geyBFeGFt
cGxlRmxhZ3M6OkIsIEV4YW1wbGVGbGFnczo6QyB9KSk7CisgICAgRVhQRUNUX1RSVUUoKHNldCA9
PSBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiB7IEV4YW1wbGVGbGFnczo6QiwgRXhhbXBsZUZsYWdz
OjpDIH0pKTsKKyAgICBFWFBFQ1RfVFJVRSgoKHNldCAtPSBFeGFtcGxlRmxhZ3M6OkQpID09IE9w
dGlvblNldDxFeGFtcGxlRmxhZ3M+IHsgRXhhbXBsZUZsYWdzOjpCLCBFeGFtcGxlRmxhZ3M6OkMg
fSkpOworICAgIEVYUEVDVF9UUlVFKChzZXQgPT0gT3B0aW9uU2V0PEV4YW1wbGVGbGFncz4geyBF
eGFtcGxlRmxhZ3M6OkIsIEV4YW1wbGVGbGFnczo6QyB9KSk7CisgICAgRVhQRUNUX1RSVUUoKHNl
dCAtPSBzZXQpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUoc2V0LmlzRW1wdHkoKSk7Cit9
CisKIFRFU1QoV1RGX09wdGlvblNldCwgQ29udGFpbnNUd29GbGFncykKIHsKICAgICBPcHRpb25T
ZXQ8RXhhbXBsZUZsYWdzPiBzZXQgeyBFeGFtcGxlRmxhZ3M6OkEsIEV4YW1wbGVGbGFnczo6QiB9
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDRkZGIwZTMwZjQwYmU4YjhiODFkMjkzZTYyYWI0YTU0M2IxZWZjMmQuLjkzN2I3
NTRhNzkyMWRiM2I4NjY1ZmRhMTQ1OWZmZmIxY2NlMGI2NTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxNy0wMi0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAg
IFtpT1NdIFRocm90dGxlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byAzMGZwcyBpbiBsb3cgcG93
ZXIgbW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY4ODM3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDcwMDkyOT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbGF5b3V0IHRlc3QgY292ZXJh
Z2UuCisKKyAgICAgICAgKiBmYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS10
aHJvdHRsaW5nLWRldGFjaGVkLWlmcmFtZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXRocm90dGxpbmctZGV0YWNo
ZWQtaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3Qt
YW5pbWF0aW9uLWZyYW1lLXRocm90dGxpbmctbG93UG93ZXJNb2RlLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdGhy
b3R0bGluZy1sb3dQb3dlck1vZGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9hbmltYXRp
b24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5pbWF0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDE3LTAy
LTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0VGVz
dCBmYXN0L2V2ZW50cy9jdXJyZW50VGFyZ2V0LWdjLWNyYXNoLmh0bWwgaXMgYSBmbGFreSBmYWls
dXJlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1h
dGlvbi1mcmFtZS10aHJvdHRsaW5nLWRldGFjaGVkLWlmcmFtZS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS10aHJvdHRsaW5n
LWRldGFjaGVkLWlmcmFtZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzI4NjQ4ODhmZDQ1OWQ5
YmM1OWJlYzczYjM1ZDQxNjNiN2FlNDMwMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXRocm90dGxpbmctZGV0YWNo
ZWQtaWZyYW1lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMxIEBACitUZXN0IHRoYXQgcmVxdWVz
dEFuaW1hdGlvbkZyYW1lIGdldHMgdGhlIHJpZ2h0IHRocm90dGxpbmcgaW4gYW4gaWZyYW1lIHdo
ZW4gaW5zZXJ0ZWQgaW50byBhIGRvY3VtZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBpbnRlcm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSBp
cyBmYWxzZQorUEFTUyBpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwgaXMg
MC4wMTUKK1BBU1MgZnJhbWUuY29udGVudFdpbmRvdy5pbnRlcm5hbHMuaXNSZXF1ZXN0QW5pbWF0
aW9uRnJhbWVUaHJvdHRsZWQoKSBpcyBmYWxzZQorUEFTUyBmcmFtZS5jb250ZW50V2luZG93Lmlu
dGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCBpcyAwLjAxNQoraW50ZXJuYWxz
LnNldExvd1Bvd2VyTW9kZUVuYWJsZWQodHJ1ZSk7CitQQVNTIGludGVybmFscy5pc1JlcXVlc3RB
bmltYXRpb25GcmFtZVRocm90dGxlZCgpIGlzIHRydWUKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RB
bmltYXRpb25GcmFtZUludGVydmFsIGlzIDAuMDMwCitQQVNTIGZyYW1lLmNvbnRlbnRXaW5kb3cu
aW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMgdHJ1ZQorUEFT
UyBmcmFtZS5jb250ZW50V2luZG93LmludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRl
cnZhbCBpcyAwLjAzMAorZnJhbWUucmVtb3ZlKCkKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
ZnJhbWUpCitQQVNTIGludGVybmFscy5pc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgp
IGlzIHRydWUKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIGlz
IDAuMDMwCitQQVNTIGZyYW1lLmNvbnRlbnRXaW5kb3cuaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1h
dGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMgdHJ1ZQorUEFTUyBmcmFtZS5jb250ZW50V2luZG93Lmlu
dGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCBpcyAwLjAzMAorZnJhbWUucmVt
b3ZlKCkKK2ludGVybmFscy5zZXRMb3dQb3dlck1vZGVFbmFibGVkKGZhbHNlKTsKK1BBU1MgaW50
ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMgZmFsc2UKK1BBU1Mg
aW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIGlzIDAuMDE1Citkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGZyYW1lKQorUEFTUyBmcmFtZS5jb250ZW50V2luZG93LmludGVy
bmFscy5pc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgpIGlzIGZhbHNlCitQQVNTIGZy
YW1lLmNvbnRlbnRXaW5kb3cuaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFs
IGlzIDAuMDE1CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKyAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5p
bWF0aW9uLWZyYW1lLXRocm90dGxpbmctZGV0YWNoZWQtaWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS10aHJvdHRsaW5nLWRldGFj
aGVkLWlmcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MjgwYzNlZGZjMTU4NDU3MjJiMTc4MWRjZjUy
M2YxMWE2NDljNTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlv
bi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS10aHJvdHRsaW5nLWRldGFjaGVkLWlmcmFtZS5odG1s
CkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGdldHMgdGhl
IHJpZ2h0IHRocm90dGxpbmcgaW4gYW4gaWZyYW1lIHdoZW4gaW5zZXJ0ZWQgaW50byBhIGRvY3Vt
ZW50LiIpOworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2xldCBpID0gMDsKK2Z1bmN0aW9uIGRv
V29yaygpCit7CisgICAgaSsrOworICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShkb1dvcmspOwor
fQorCityZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZG9Xb3JrKTsKKworY29uc3QgZnJhbWUgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKK2ZyYW1lLnNyYyA9ICJyZXNvdXJjZXMvZnJh
bWUtd2l0aC1hbmltYXRpb24uaHRtbCI7CitmcmFtZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAg
ICBzaG91bGRCZUZhbHNlKCJpbnRlcm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRs
ZWQoKSIpOworICAgIHNob3VsZEJlKCJpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50
ZXJ2YWwiLCAiMC4wMTUiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJmcmFtZS5jb250ZW50V2luZG93
LmludGVybmFscy5pc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgpIik7CisgICAgc2hv
dWxkQmUoImZyYW1lLmNvbnRlbnRXaW5kb3cuaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFt
ZUludGVydmFsIiwgIjAuMDE1Iik7CisKKyAgICBldmFsQW5kTG9nKCJpbnRlcm5hbHMuc2V0TG93
UG93ZXJNb2RlRW5hYmxlZCh0cnVlKTsiKTsKKyAgICBzaG91bGRCZVRydWUoImludGVybmFscy5p
c1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgpIik7CisgICAgc2hvdWxkQmUoImludGVy
bmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCIsICIwLjAzMCIpOworICAgIHNob3Vs
ZEJlVHJ1ZSgiZnJhbWUuY29udGVudFdpbmRvdy5pbnRlcm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9u
RnJhbWVUaHJvdHRsZWQoKSIpOworICAgIHNob3VsZEJlKCJmcmFtZS5jb250ZW50V2luZG93Lmlu
dGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCIsICIwLjAzMCIpOworICAgIGV2
YWxBbmRMb2coImZyYW1lLnJlbW92ZSgpIik7CisKKyAgICBldmFsQW5kTG9nKCJkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKGZyYW1lKSIpOworICAgIGZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBzaG91bGRCZVRydWUoImludGVybmFscy5pc1JlcXVlc3RBbmltYXRpb25GcmFt
ZVRocm90dGxlZCgpIik7CisgICAgICAgIHNob3VsZEJlKCJpbnRlcm5hbHMucmVxdWVzdEFuaW1h
dGlvbkZyYW1lSW50ZXJ2YWwiLCAiMC4wMzAiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJmcmFt
ZS5jb250ZW50V2luZG93LmludGVybmFscy5pc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxl
ZCgpIik7CisgICAgICAgIHNob3VsZEJlKCJmcmFtZS5jb250ZW50V2luZG93LmludGVybmFscy5y
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCIsICIwLjAzMCIpOworCisgICAgICAgIGV2YWxB
bmRMb2coImZyYW1lLnJlbW92ZSgpIik7CisgICAgICAgIGV2YWxBbmRMb2coImludGVybmFscy5z
ZXRMb3dQb3dlck1vZGVFbmFibGVkKGZhbHNlKTsiKTsKKyAgICAgICAgc2hvdWxkQmVGYWxzZSgi
aW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkiKTsKKyAgICAgICAg
c2hvdWxkQmUoImludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCIsICIwLjAx
NSIpOworCisgICAgICAgIGV2YWxBbmRMb2coImRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJh
bWUpIik7CisgICAgICAgIGZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
c2hvdWxkQmVGYWxzZSgiZnJhbWUuY29udGVudFdpbmRvdy5pbnRlcm5hbHMuaXNSZXF1ZXN0QW5p
bWF0aW9uRnJhbWVUaHJvdHRsZWQoKSIpOworICAgICAgICAgICAgc2hvdWxkQmUoImZyYW1lLmNv
bnRlbnRXaW5kb3cuaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIiwgIjAu
MDE1Iik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfQorICAgIH0KK307
Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYW1lKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1h
bmltYXRpb24tZnJhbWUtdGhyb3R0bGluZy1sb3dQb3dlck1vZGUtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdGhyb3R0bGlu
Zy1sb3dQb3dlck1vZGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4MzNmZmIxMWRjYjgyOWJm
ZmFjNzNkNWMyYzNlZGI3ZTMyNDkzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS10aHJvdHRsaW5nLWxvd1Bvd2Vy
TW9kZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNiBAQAorVGVzdCB0aGF0IHJlcXVlc3RBbmlt
YXRpb25GcmFtZSBnZXRzIHRocm90dGxlZCBpbiBsb3cgcG93ZXIgbW9kZS4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZy
YW1lVGhyb3R0bGVkKCkgaXMgZmFsc2UKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25G
cmFtZUludGVydmFsIGlzIEluZmluaXR5CityQUZIYW5kbGUgPSByZXF1ZXN0QW5pbWF0aW9uRnJh
bWUoZG9Xb3JrKTsKK1BBU1MgaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0
bGVkKCkgaXMgZmFsc2UKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVy
dmFsIGlzIDAuMDE1CitpbnRlcm5hbHMuc2V0TG93UG93ZXJNb2RlRW5hYmxlZCh0cnVlKTsKK1BB
U1MgaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMgdHJ1ZQor
UEFTUyBpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwgaXMgMC4wMzAKK2Nh
bmNlbEFuaW1hdGlvbkZyYW1lKHJBRkhhbmRsZSk7CitQQVNTIGludGVybmFscy5pc1JlcXVlc3RB
bmltYXRpb25GcmFtZVRocm90dGxlZCgpIGlzIHRydWUKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RB
bmltYXRpb25GcmFtZUludGVydmFsIGlzIDAuMDMwCityQUZIYW5kbGUgPSByZXF1ZXN0QW5pbWF0
aW9uRnJhbWUoZG9Xb3JrKTsKK1BBU1MgaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1l
VGhyb3R0bGVkKCkgaXMgdHJ1ZQorUEFTUyBpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1l
SW50ZXJ2YWwgaXMgMC4wMzAKK2ludGVybmFscy5zZXRMb3dQb3dlck1vZGVFbmFibGVkKGZhbHNl
KTsKK1BBU1MgaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMg
ZmFsc2UKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIGlzIDAu
MDE1CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24t
ZnJhbWUtdGhyb3R0bGluZy1sb3dQb3dlck1vZGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvYW5p
bWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXRocm90dGxpbmctbG93UG93ZXJNb2RlLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGJhZTA5ZjE2MjkxMzNlMGM2ZTE0NjhmYTU2NTlmY2EwMDdlZjY1ZQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5p
bWF0aW9uLWZyYW1lLXRocm90dGxpbmctbG93UG93ZXJNb2RlLmh0bWwKQEAgLTAsMCArMSwzNiBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24o
IlRlc3QgdGhhdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZ2V0cyB0aHJvdHRsZWQgaW4gbG93IHBv
d2VyIG1vZGUuIik7CisKK2xldCByQUZIYW5kbGU7CitsZXQgaSA9IDA7CitmdW5jdGlvbiBkb1dv
cmsoKQoreworICAgIGkrKzsKKyAgICByQUZIYW5kbGUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
ZG9Xb3JrKTsKK30KKworc2hvdWxkQmVGYWxzZSgiaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlv
bkZyYW1lVGhyb3R0bGVkKCkiKTsKK3Nob3VsZEJlKCJpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlv
bkZyYW1lSW50ZXJ2YWwiLCAiSW5maW5pdHkiKTsKK2V2YWxBbmRMb2coInJBRkhhbmRsZSA9IHJl
cXVlc3RBbmltYXRpb25GcmFtZShkb1dvcmspOyIpOworc2hvdWxkQmVGYWxzZSgiaW50ZXJuYWxz
LmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkiKTsKK3Nob3VsZEJlKCJpbnRlcm5h
bHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwiLCAiMC4wMTUiKTsKK2V2YWxBbmRMb2co
ImludGVybmFscy5zZXRMb3dQb3dlck1vZGVFbmFibGVkKHRydWUpOyIpOworc2hvdWxkQmVUcnVl
KCJpbnRlcm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSIpOworc2hvdWxk
QmUoImludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCIsICIwLjAzMCIpOwor
ZXZhbEFuZExvZygiY2FuY2VsQW5pbWF0aW9uRnJhbWUockFGSGFuZGxlKTsiKTsKK3Nob3VsZEJl
VHJ1ZSgiaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkiKTsKK3No
b3VsZEJlKCJpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwiLCAiMC4wMzAi
KTsKK2V2YWxBbmRMb2coInJBRkhhbmRsZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkb1dvcmsp
OyIpOworc2hvdWxkQmVUcnVlKCJpbnRlcm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJv
dHRsZWQoKSIpOworc2hvdWxkQmUoImludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRl
cnZhbCIsICIwLjAzMCIpOworZXZhbEFuZExvZygiaW50ZXJuYWxzLnNldExvd1Bvd2VyTW9kZUVu
YWJsZWQoZmFsc2UpOyIpOworc2hvdWxkQmVGYWxzZSgiaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1h
dGlvbkZyYW1lVGhyb3R0bGVkKCkiKTsKK3Nob3VsZEJlKCJpbnRlcm5hbHMucmVxdWVzdEFuaW1h
dGlvbkZyYW1lSW50ZXJ2YWwiLCAiMC4wMTUiKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVzb3VyY2VzL2ZyYW1l
LXdpdGgtYW5pbWF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXNvdXJj
ZXMvZnJhbWUtd2l0aC1hbmltYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZWI3OTZlNjdhMjU3NjZm
Y2FkOGMwZTMzZGExY2FhMjI1ZDNhMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9hbmltYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5pbWF0aW9uLmh0bWwKQEAgLTAs
MCArMSwxMCBAQAorPHNjcmlwdD4KK2xldCBpID0gMDsKK2Z1bmN0aW9uIGRvV29yaygpCit7Cisg
ICAgaSsrOworICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShkb1dvcmspOworfQorCityZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoZG9Xb3JrKTsKKzwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302966</attachid>
            <date>2017-02-28 12:11:51 -0800</date>
            <delta_ts>2017-02-28 13:28:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168837-20170228120855.patch</filename>
            <type>text/plain</type>
            <size>36653</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzMDg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGUyYzRkYzE3MWRhZmYyNzQ2Y2NmYTkx
Y2QxNDEyMWU0OWE0MzQwNTQuLmVlNjEyMWUyYWM5MWNlZDQzMTk1ZjUzNDY0Mjk5OWEzMzVhYmUx
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDItMjggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBUaHJvdHRsZSByZXF1ZXN0QW5pbWF0aW9uRnJh
bWUgdG8gMzBmcHMgaW4gbG93IHBvd2VyIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODgzNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzA3
MDA5Mjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIG9wZXJhdG9yIC09IG9uIFdURjo6T3B0aW9uU2V0IGZvciBjb252ZW5p
ZW5jZToKKyAgICAgICAgICAgIHNldCAtPSBFbnVtOjpBOworICAgICAgICBsb29rcyBtdWNoIGJl
dHRlciB0aGFuOgorICAgICAgICAgICAgc2V0ID0gc2V0IC0gRW51bTo6QTsKKworICAgICAgICAq
IHd0Zi9PcHRpb25TZXQuaDoKKyAgICAgICAgKFdURjo6T3B0aW9uU2V0OjpvcGVyYXRvci09KToK
KwogMjAxNy0wMi0yNCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgcHVibGljIG1ldGhvZCB0byBNZWRpYVRpbWUgZm9yIGRvaW5nIHRpbWVTY2FsZSBjb252
ZXJzaW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDhjMjgxYTc4NjU0NTZjNjliYjRmMzhiNmZkMWI0OWQ3MDk2
YmY2NTUuLjIzMjdjYWNkNDE0YmZkMzE5NjZhMWMxMDlkMzI0YjdiNDM5MWU2MTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw2MCBAQAorMjAxNy0wMi0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgorCisgICAgICAgIFtpT1NdIFRocm90dGxlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0
byAzMGZwcyBpbiBsb3cgcG93ZXIgbW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY4ODM3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDcwMDky
OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaHJv
dHRsZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gMzBmcHMgaW4gbG93IHBvd2VyIG1vZGUgb24g
aU9TIHRvIHNhdmUgYmF0dGVyeS4KKworICAgICAgICBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXIgbm93IG1haW50YWlucyBhbiBPcHRpb25TZXQgb2YgdGhyb3R0bGluZyByZWFzb25zLgorICAg
ICAgICBUaHJvdHRsaW5nIHJlYXNvbnMgZm9yIG5vdyBhcmU6IE91dHNpZGVWaWV3cG9ydCwgVmlz
dWFsbHlJZGxlLCBhbmQgTG93UG93ZXJNb2RlLgorICAgICAgICBUaGUgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lIGludGVydmFsIGlzIHRoZW4gZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aG9zZSB0aHJvdHRs
aW5nCisgICAgICAgIHJlYXNvbnM6CisgICAgICAgIC0gT3V0c2lkZVZpZXdwb3J0IG9yIFZpc3Vh
bGx5SWRsZTogMTAgc2Vjb25kcyAodmVyeSBhZ2dyZXNzaXZlIHRocm90dGxpbmcpCisgICAgICAg
IC0gTG93UG93ZXJNb2RlOiAzMGZwcworICAgICAgICAtIE5vIHJlYXNvbnM6IDYwZnBzCisKKyAg
ICAgICAgVGhlIFBhZ2Ugbm93IGtlZXBzIHRyYWNrIG9mIGxvdyBwb3dlciBtb2RlIHN0YXRlIHVz
aW5nIGEgTG93UG93ZXJNb2RlTm90aWZpZXIuCisgICAgICAgIFdoZW5ldmVyIGxvdyBwb3dlciBt
b2RlIGNoYW5nZXMsIGl0IHVwZGF0ZXMgdGhlIHRocm90dGxpbmcgcmVhc29ucyBpbiBhbGwgdGhl
CisgICAgICAgIGRvY3VtZW50cycgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVycyBpbiB0aGUg
ZnJhbWUgdHJlZS4KKworICAgICAgICBUZXN0czogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmlt
YXRpb24tZnJhbWUtdGhyb3R0bGluZy1kZXRhY2hlZC1pZnJhbWUuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdGhyb3R0bGluZy1sb3dQ
b3dlck1vZGUuaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5oOgorICAgICAgICAqIGRvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpTY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3R0bGluZ1JlYXNv
blRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm90dGxpbmdSZWFzb25zVG9TdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjphZGRUaHJv
dHRsaW5nUmVhc29uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlcjo6cmVtb3ZlVGhyb3R0bGluZ1JlYXNvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzVGhyb3R0bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6aW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpwYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAq
IGRvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZVNjcmlwdGVkQW5p
bWF0aW9uc0FuZFRpbWVyc1Rocm90dGxpbmdTdGF0ZSk6CisgICAgICAgICogcGFnZS9QYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6aXNMb3dQb3dlck1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldExv
d1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
dXBkYXRlU2NyaXB0ZWRBbmltYXRpb25zVGhyb3R0bGluZ1JlYXNvbik6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXRJc1Zpc3VhbGx5SWRsZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OmhhbmRsZUxvd01vZGVQb3dlckNoYW5nZSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjpzZXRMb3dQb3dlck1vZGVFbmFibGVkKToKKyAgICAgICAgKiB0ZXN0aW5nL0lu
dGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAxNy0wMi0y
NyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtNb2Rlcm4g
TWVkaWEgQ29udHJvbHNdIFN0YXR1cyB0ZXh0IGRvZXMgbm90IGFwcGVhciBvbiBpT1MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL09wdGlvblNldC5oIGIvU291cmNlL1dURi93dGYvT3B0aW9u
U2V0LmgKaW5kZXggZTgzOWY0MjIyODRjZTEyZmM4NTAyMDY3NWI4YjY5YzFiODFiMzkwYy4uZjNh
OGMwMDI0ZWU0MTM3N2M3YmQzMzZlNzk2ZTkzYzEzNGJlNjU1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvT3B0aW9uU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvT3B0aW9uU2V0LmgKQEAg
LTEyNSw2ICsxMjUsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbGhzOwogICAgIH0KIAor
ICAgIGZyaWVuZCBPcHRpb25TZXQmIG9wZXJhdG9yLT0oT3B0aW9uU2V0JiBsaHMsIE9wdGlvblNl
dCByaHMpCisgICAgeworICAgICAgICBsaHMubV9zdG9yYWdlICY9IH5yaHMubV9zdG9yYWdlOwor
CisgICAgICAgIHJldHVybiBsaHM7CisgICAgfQorCiAgICAgY29uc3RleHByIGZyaWVuZCBPcHRp
b25TZXQgb3BlcmF0b3ItKE9wdGlvblNldCBsaHMsIE9wdGlvblNldCByaHMpCiAgICAgewogICAg
ICAgICByZXR1cm4gT3B0aW9uU2V0Ojpmcm9tUmF3KGxocy5tX3N0b3JhZ2UgJiB+cmhzLm1fc3Rv
cmFnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBkZjhiNmY3YzZkN2RiZjMzMWVmYjVl
MGQzNzUzNDVjNmRhNWUyZWMxLi5iMWUyZjRhMmE5MTRjNGI1YTc3M2RmODZmYWM1ODc3MTYwMGUx
ZTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU0ODEsMTIgKzU0ODEsNiBAQCB2b2lk
IERvY3VtZW50OjpyZXN1bWVTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKQog
ICAgICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+cmVzdW1lKCk7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlclNldFRocm90dGxlZChib29s
IGlzVGhyb3R0bGVkKQotewotICAgIGlmIChtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcikK
LSAgICAgICAgbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPnNldFRocm90dGxlZChpc1Ro
cm90dGxlZCk7Ci19Ci0KIHZvaWQgRG9jdW1lbnQ6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCiB7CiAgICAgaWYgKG1fc2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyKQpAQCAtNjA1OCw5ICs2MDUyLDkgQEAgaW50IERvY3VtZW50OjpyZXF1ZXN0QW5p
bWF0aW9uRnJhbWUoUmVmPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmIGNhbGxiYWMK
IHsKICAgICBpZiAoIW1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKSB7CiAjaWYgVVNFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICAgICAgbV9zY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZSh0aGlzLCBwYWdlKCkgPyBwYWdlKCktPmNocm9tZSgpLmRpc3BsYXlJRCgpIDogMCk7CisgICAg
ICAgIG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250
cm9sbGVyOjpjcmVhdGUoKnRoaXMsIHBhZ2UoKSA/IHBhZ2UoKS0+Y2hyb21lKCkuZGlzcGxheUlE
KCkgOiAwKTsKICNlbHNlCi0gICAgICAgIG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyID0g
U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUodGhpcywgMCk7CisgICAgICAgIG1f
c2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVy
OjpjcmVhdGUoKnRoaXMsIDApOwogI2VuZGlmCiAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhh
dCB0aGUgUGFnZSBtYXkgaGF2ZSBzdXNwZW5kZWQgc2NyaXB0ZWQgYW5pbWF0aW9ucyBiZWZvcmUK
ICAgICAgICAgLy8gd2Ugd2VyZSBjcmVhdGVkLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdl
IGRvbid0IHN0YXJ0IHVwIHRoZSBhbmltYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggOTlm
ZmNkYjBjYzZjYWQ3NTNhYmM5MWRhYjg5OWNhNzA5ZDM2YTgwNC4uNjFkZTMxOTUyODYyOWMyZTJk
MDcxOWIzMmEyYzA5ZWE5MWQ3YTlhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTk1OCw3ICs5
NTgsNiBAQCBwdWJsaWM6CiAgICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKiBzY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVybiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlci5nZXQoKTsgfQogICAgIHZvaWQgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxl
ckNhbGxiYWNrcygpOwogICAgIHZvaWQgcmVzdW1lU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVy
Q2FsbGJhY2tzKCk7Ci0gICAgdm9pZCBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJTZXRUaHJv
dHRsZWQoYm9vbCk7CiAgICAgCiAgICAgdm9pZCB3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoUGxhdGZv
cm1EaXNwbGF5SUQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGI5NGViZGYzNjU3MzU5N2MwMGI4YjQ4MjQ2MTc3N2Iy
YzNkNjNhNzYuLjYwNWRmNmU1ZmU1MjcyYmQ1NDVhMWY2MmQ4YjcyZjlmNjhkMGM1YzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
CkBAIC00MCwyNSArNDAsMzQgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9U
SU1FUikKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CiAKIC8vIEFsbG93IGEgbGl0dGxlIG1vcmUgdGhhbiA2MGZwcyB0byBtYWtlIHN1cmUgd2UgY2Fu
IGF0IGxlYXN0IGhpdCB0aGF0IGZyYW1lIHJhdGUuCi0jZGVmaW5lIE1pbmltdW1BbmltYXRpb25J
bnRlcnZhbCAwLjAxNQotI2RlZmluZSBNaW5pbXVtVGhyb3R0bGVkQW5pbWF0aW9uSW50ZXJ2YWwg
MTAKK3N0YXRpYyBjb25zdCBTZWNvbmRzIGZ1bGxTcGVlZEFuaW1hdGlvbkludGVydmFsIHsgMC4w
MTUgfTsKKy8vIEFsbG93IGEgbGl0dGxlIG1vcmUgdGhhbiAzMGZwcyB0byBtYWtlIHN1cmUgd2Ug
Y2FuIGF0IGxlYXN0IGhpdCB0aGF0IGZyYW1lIHJhdGUuCitzdGF0aWMgY29uc3QgU2Vjb25kcyBo
YWxmU3BlZWRUaHJvdHRsaW5nQW5pbWF0aW9uSW50ZXJ2YWwgeyAwLjAzMCB9Oworc3RhdGljIGNv
bnN0IFNlY29uZHMgYWdncmVzc2l2ZVRocm90dGxpbmdBbmltYXRpb25JbnRlcnZhbCB7IDEwIH07
CiAjZW5kaWYKIAorI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwgLi4uKSBSRUxF
QVNFX0xPR19JRihwYWdlKCkgJiYgcGFnZSgpLT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwg
UGVyZm9ybWFuY2VMb2dnaW5nLCAiJXAgLSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OiIg
Zm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKERvY3Vt
ZW50KiBkb2N1bWVudCwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQotICAgIDogbV9kb2N1
bWVudChkb2N1bWVudCkKK1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6U2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyKERvY3VtZW50JiBkb2N1bWVudCwgUGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKQorICAgIDogbV9kb2N1bWVudCgmZG9jdW1lbnQpCiAjaWYgVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX1RJTUVSKQogICAgICwgbV9hbmltYXRpb25UaW1lcigqdGhpcywgJlNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKICNlbmRpZgogewog
ICAgIHdpbmRvd1NjcmVlbkRpZENoYW5nZShkaXNwbGF5SUQpOworCisgICAgYXV0byogcGFnZSA9
IGRvY3VtZW50LnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5pc0xvd1Bvd2VyTW9kZUVu
YWJsZWQoKSkKKyAgICAgICAgYWRkVGhyb3R0bGluZ1JlYXNvbihUaHJvdHRsaW5nUmVhc29uOjpM
b3dQb3dlck1vZGUpOwogfQogCiBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6On5TY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXIoKQpAQCAtODYsMjggKzk1LDc4IEBAIHZvaWQgU2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyOjpyZXN1bWUoKQogICAgICAgICBzY2hlZHVsZUFuaW1hdGlvbigp
OwogfQogCi12b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2V0VGhyb3R0bGVkKGJv
b2wgaXNUaHJvdHRsZWQpCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAm
JiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKSAmJiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKKworc3RhdGljIGNvbnN0IGNoYXIqIHRocm90dGxpbmdSZWFzb25Ub1N0
cmluZyhTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb24gcmVhc29u
KQoreworICAgIHN3aXRjaCAocmVhc29uKSB7CisgICAgY2FzZSBTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb246OlZpc3VhbGx5SWRsZToKKyAgICAgICAgcmV0dXJu
ICJWaXN1YWxseUlkbGUiOworICAgIGNhc2UgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpU
aHJvdHRsaW5nUmVhc29uOjpPdXRzaWRlVmlld3BvcnQ6CisgICAgICAgIHJldHVybiAiT3V0c2lk
ZVZpZXdwb3J0IjsKKyAgICBjYXNlIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6VGhyb3R0
bGluZ1JlYXNvbjo6TG93UG93ZXJNb2RlOgorICAgICAgICByZXR1cm4gIkxvd1Bvd2VyTW9kZSI7
CisgICAgfQorfQorCitzdGF0aWMgU3RyaW5nIHRocm90dGxpbmdSZWFzb25zVG9TdHJpbmcoT3B0
aW9uU2V0PFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6VGhyb3R0bGluZ1JlYXNvbj4gcmVh
c29ucykKK3sKKyAgICBpZiAocmVhc29ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoIltVbnRocm90dGxlZF0iKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICBmb3IgKGF1dG8gcmVhc29uIDogcmVhc29ucykgeworICAgICAgICBpZiAoIWJ1aWxkZXIu
aXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ3wnKTsKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQodGhyb3R0bGluZ1JlYXNvblRvU3RyaW5nKHJlYXNvbikpOworICAgIH0KKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCisjZW5kaWYKKwordm9pZCBTY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZFRocm90dGxpbmdSZWFzb24oVGhyb3R0bGluZ1JlYXNv
biByZWFzb24pCiB7CiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIGlmIChtX2lz
VGhyb3R0bGVkID09IGlzVGhyb3R0bGVkKQorICAgIGlmIChtX3Rocm90dGxpbmdSZWFzb25zLmNv
bnRhaW5zKHJlYXNvbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhBbmltYXRpb25zLCAi
JXAgLSBTZXR0aW5nIFJlcXVlc3RBbmltYXRpb25GcmFtZSB0aHJvdHRsaW5nIHN0YXRlIHRvICVk
IGluIGZyYW1lICVwIChpc01haW5GcmFtZTogJWQpIiwgdGhpcywgaXNUaHJvdHRsZWQsIG1fZG9j
dW1lbnQtPmZyYW1lKCksIG1fZG9jdW1lbnQtPmZyYW1lKCkgPyBtX2RvY3VtZW50LT5mcmFtZSgp
LT5pc01haW5GcmFtZSgpIDogMCk7CisgICAgbV90aHJvdHRsaW5nUmVhc29ucyB8PSByZWFzb247
CisKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJhZGRUaHJvdHRsaW5nUmVhc29uKCVzKSAt
PiAlcyIsIHRocm90dGxpbmdSZWFzb25Ub1N0cmluZyhyZWFzb24pLCB0aHJvdHRsaW5nUmVhc29u
c1RvU3RyaW5nKG1fdGhyb3R0bGluZ1JlYXNvbnMpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgbV9p
c1Rocm90dGxlZCA9IGlzVGhyb3R0bGVkOwogICAgIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0
aXZlKCkpIHsKICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7CiAgICAgICAgIHNjaGVk
dWxlQW5pbWF0aW9uKCk7CiAgICAgfQogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaXNUaHJvdHRs
ZWQpOworICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVUaHJvdHRsaW5nUmVhc29uKFRocm90dGxpbmdS
ZWFzb24gcmVhc29uKQoreworI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikg
JiYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICBpZiAo
IW1fdGhyb3R0bGluZ1JlYXNvbnMuY29udGFpbnMocmVhc29uKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV90aHJvdHRsaW5nUmVhc29ucyAtPSByZWFzb247CisKKyAgICBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKCJyZW1vdmVUaHJvdHRsaW5nUmVhc29uKCVzKSAtPiAlcyIsIHRocm90dGxpbmdS
ZWFzb25Ub1N0cmluZyhyZWFzb24pLCB0aHJvdHRsaW5nUmVhc29uc1RvU3RyaW5nKG1fdGhyb3R0
bGluZ1JlYXNvbnMpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKG1fYW5pbWF0aW9uVGltZXIu
aXNBY3RpdmUoKSkgeworICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKKyAgICAgICAg
c2NoZWR1bGVBbmltYXRpb24oKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZWFz
b24pOwogI2VuZGlmCiB9CiAKIGJvb2wgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjppc1Ro
cm90dGxlZCgpIGNvbnN0CiB7CiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVS
KSAmJiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIHJl
dHVybiBtX2lzVGhyb3R0bGVkOworICAgIHJldHVybiAhbV90aHJvdHRsaW5nUmVhc29ucy5pc0Vt
cHR5KCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAtMTkyLDYgKzI1MSwy
MyBAQCB2b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6d2luZG93U2NyZWVuRGlkQ2hh
bmdlKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYQogI2VuZGlmCiB9CiAKK1NlY29uZHMgU2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyOjppbnRlcnZhbCgpIGNvbnN0Cit7CisjaWYgVVNFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVf
RElTUExBWV9NT05JVE9SKQorICAgIGlmIChtX3Rocm90dGxpbmdSZWFzb25zLmNvbnRhaW5zKFRo
cm90dGxpbmdSZWFzb246OlZpc3VhbGx5SWRsZSkgfHwgbV90aHJvdHRsaW5nUmVhc29ucy5jb250
YWlucyhUaHJvdHRsaW5nUmVhc29uOjpPdXRzaWRlVmlld3BvcnQpKQorICAgICAgICByZXR1cm4g
YWdncmVzc2l2ZVRocm90dGxpbmdBbmltYXRpb25JbnRlcnZhbDsKKyAgICBpZiAobV90aHJvdHRs
aW5nUmVhc29ucy5jb250YWlucyhUaHJvdHRsaW5nUmVhc29uOjpMb3dQb3dlck1vZGUpKQorICAg
ICAgICByZXR1cm4gaGFsZlNwZWVkVGhyb3R0bGluZ0FuaW1hdGlvbkludGVydmFsOworICAgIEFT
U0VSVChtX3Rocm90dGxpbmdSZWFzb25zLmlzRW1wdHkoKSk7CisjZW5kaWYKKyAgICByZXR1cm4g
ZnVsbFNwZWVkQW5pbWF0aW9uSW50ZXJ2YWw7Cit9CisKK1BhZ2UqIFNjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlcjo6cGFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQgPyBtX2Rv
Y3VtZW50LT5wYWdlKCkgOiBudWxscHRyOworfQorCiB2b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlcjo6c2NoZWR1bGVBbmltYXRpb24oKQogewogICAgIGlmICghcmVxdWVzdEFuaW1hdGlv
bkZyYW1lRW5hYmxlZCgpKQpAQCAtMTk5LDcgKzI3NSw3IEBAIHZvaWQgU2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOjpzY2hlZHVsZUFuaW1hdGlvbigpCiAKICNpZiBVU0UoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUVfVElNRVIpCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BM
QVlfTU9OSVRPUikKLSAgICBpZiAoIW1faXNVc2luZ1RpbWVyICYmICFtX2lzVGhyb3R0bGVkKSB7
CisgICAgaWYgKCFtX2lzVXNpbmdUaW1lciAmJiAhaXNUaHJvdHRsZWQoKSkgewogICAgICAgICBp
ZiAoRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnNjaGVkdWxl
QW5pbWF0aW9uKCp0aGlzKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMjA5LDEzICsyODUs
OCBAQCB2b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVBbmltYXRpb24o
KQogICAgIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGRvdWJsZSBhbmltYXRpb25JbnRlcnZhbCA9IE1pbmltdW1BbmltYXRpb25JbnRlcnZh
bDsKLSNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpICYmIFVTRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAgaWYgKG1faXNUaHJvdHRsZWQp
Ci0gICAgICAgIGFuaW1hdGlvbkludGVydmFsID0gTWluaW11bVRocm90dGxlZEFuaW1hdGlvbklu
dGVydmFsOwotI2VuZGlmCi0KLSAgICBkb3VibGUgc2NoZWR1bGVEZWxheSA9IHN0ZDo6bWF4PGRv
dWJsZT4oYW5pbWF0aW9uSW50ZXJ2YWwgLSAobV9kb2N1bWVudC0+ZG9tV2luZG93KCktPm5vd1Rp
bWVzdGFtcCgpIC0gbV9sYXN0QW5pbWF0aW9uRnJhbWVUaW1lc3RhbXApLCAwKTsKKyAgICBTZWNv
bmRzIGFuaW1hdGlvbkludGVydmFsID0gaW50ZXJ2YWwoKTsKKyAgICBkb3VibGUgc2NoZWR1bGVE
ZWxheSA9IHN0ZDo6bWF4PGRvdWJsZT4oYW5pbWF0aW9uSW50ZXJ2YWwudmFsdWUoKSAtIChtX2Rv
Y3VtZW50LT5kb21XaW5kb3coKS0+bm93VGltZXN0YW1wKCkgLSBtX2xhc3RBbmltYXRpb25GcmFt
ZVRpbWVzdGFtcCksIDApOwogICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KHNjaGVk
dWxlRGVsYXkpOwogI2Vsc2UKICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2RvY3Vt
ZW50LT52aWV3KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyLmgKaW5kZXggMDEyYzI1ODYyNmRjZmIyNzk4ZmU2OTE4Nzc1OGUxMTI4OTdiZjVh
ZS4uODc1YTM2NjVlNmFjNDI1ODJhNDRiMGY2ZWZjZjhmYjBlODAyMGQyNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaW5jbHVkZSAiRE9NVGltZVN0YW1wLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
Y3JlZW4uaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgpAQCAtNDQsNiArNDUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVu
dDsKK2NsYXNzIFBhZ2U7CiBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKIAog
Y2xhc3MgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8U2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyPgpAQCAtNTIsNyArNTQsNyBAQCBjbGFzcyBTY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZQogI2VuZGlmCiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIFBsYXRmb3JtRGlz
cGxheUlEIGRpc3BsYXlJRCkKKyAgICBzdGF0aWMgUmVmPFNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlcj4gY3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxh
eUlEKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyKGRvY3VtZW50LCBkaXNwbGF5SUQpKTsKICAgICB9CkBAIC02OCwxMyArNzAs
MjMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdXNwZW5kKCk7CiAgICAgdm9pZCByZXN1bWUoKTsK
LSAgICB2b2lkIHNldFRocm90dGxlZChib29sKTsKKworICAgIGVudW0gY2xhc3MgVGhyb3R0bGlu
Z1JlYXNvbiB7CisgICAgICAgIFZpc3VhbGx5SWRsZSAgICA9IDEgPDwgMCwKKyAgICAgICAgT3V0
c2lkZVZpZXdwb3J0ID0gMSA8PCAxLAorICAgICAgICBMb3dQb3dlck1vZGUgICAgPSAxIDw8IDIs
CisgICAgfTsKKyAgICB2b2lkIGFkZFRocm90dGxpbmdSZWFzb24oVGhyb3R0bGluZ1JlYXNvbik7
CisgICAgdm9pZCByZW1vdmVUaHJvdHRsaW5nUmVhc29uKFRocm90dGxpbmdSZWFzb24pOwogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNUaHJvdHRsZWQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBTZWNvbmRzIGludGVydmFsKCkgY29uc3Q7CiAKICAgICB2b2lkIHdpbmRvd1NjcmVlbkRp
ZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCk7CiAKIHByaXZhdGU6Ci0gICAgU2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyKERvY3VtZW50KiwgUGxhdGZvcm1EaXNwbGF5SUQpOworICAgIFNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcihEb2N1bWVudCYsIFBsYXRmb3JtRGlzcGxheUlEKTsKKwor
ICAgIFBhZ2UqIHBhZ2UoKSBjb25zdDsKIAogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4+IENhbGxiYWNrTGlzdDsKICAgICBDYWxsYmFja0xp
c3QgbV9jYWxsYmFja3M7CkBAIC05Nyw3ICsxMDksOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxE
aXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9y
bURpc3BsYXlJRCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIG1faXNVc2luZ1RpbWVyIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1faXNUaHJvdHRsZWQgeyBmYWxzZSB9OworCisgICAgT3B0aW9u
U2V0PFRocm90dGxpbmdSZWFzb24+IG1fdGhyb3R0bGluZ1JlYXNvbnM7CiAjZW5kaWYKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBkMTUwODA1ZGI0NWRhYWI3NDg3ZGE1NGZk
NTgyMzk4OTBjM2QwOGExLi4zYzljZWE5ZjY1ZTE5MWY3ZTQ2MzVmYTNkMDA0MTc4ZWQ3MmNjOWI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0yNTYzLDggKzI1NjMsMTIgQEAgdm9p
ZCBGcmFtZVZpZXc6OnVwZGF0ZVNjcmlwdGVkQW5pbWF0aW9uc0FuZFRpbWVyc1Rocm90dGxpbmdT
dGF0ZShjb25zdCBJbnRSZWN0JgogICAgIC8vIFdlIGRvbid0IHRocm90dGxlIHplcm8tc2l6ZSBv
ciBkaXNwbGF5Om5vbmUgZnJhbWVzIGJlY2F1c2UgdGhvc2UgYXJlIHVzdWFsbHkgdXRpbGl0eSBm
cmFtZXMuCiAgICAgYm9vbCBzaG91bGRUaHJvdHRsZSA9IHZpc2libGVSZWN0LmlzRW1wdHkoKSAm
JiAhbV9zaXplLmlzRW1wdHkoKSAmJiBmcmFtZSgpLm93bmVyUmVuZGVyZXIoKTsKIAotICAgIGlm
IChhdXRvKiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBkb2N1bWVudC0+c2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyKCkpCi0gICAgICAgIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxl
ci0+c2V0VGhyb3R0bGVkKHNob3VsZFRocm90dGxlKTsKKyAgICBpZiAoYXV0byogc2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyID0gZG9jdW1lbnQtPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxl
cigpKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvdHRsZSkKKyAgICAgICAgICAgIHNjcmlwdGVk
QW5pbWF0aW9uQ29udHJvbGxlci0+YWRkVGhyb3R0bGluZ1JlYXNvbihTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXI6OlRocm90dGxpbmdSZWFzb246Ok91dHNpZGVWaWV3cG9ydCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlVGhy
b3R0bGluZ1JlYXNvbihTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OlRocm90dGxpbmdSZWFz
b246Ok91dHNpZGVWaWV3cG9ydCk7CisgICAgfQogCiAgICAgZG9jdW1lbnQtPnNldFRpbWVyVGhy
b3R0bGluZ0VuYWJsZWQoc2hvdWxkVGhyb3R0bGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXgg
NTY3MDQ0NzllZGRjYTg2ZTYyMGI3ZDg1NmI5MDgwMDA0OGY5YTA2OC4uMTMxYjA5OGMyNzgyNDM1
NmNmYjYyYjMyNGZlMmFmYzczODIyYTQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC01Nyw2ICs1
Nyw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAi
TGliV2ViUlRDUHJvdmlkZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTG93
UG93ZXJNb2RlTm90aWZpZXIuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJN
ZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKQEAgLTg0LDYg
Kzg1LDcgQEAKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJT
Y2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29y
ZGluYXRvci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCkBAIC0yNjMsNiArMjY1LDcgQEAgUGFnZTo6UGFnZShQYWdlQ29uZmlndXJhdGlvbiYmIHBh
Z2VDb25maWd1cmF0aW9uKQogICAgICwgbV9pc0Nsb3NpbmcoZmFsc2UpCiAgICAgLCBtX2lzVXRp
bGl0eVBhZ2UoaXNVdGlsaXR5UGFnZUNocm9tZUNsaWVudChjaHJvbWUoKS5jbGllbnQoKSkpCiAg
ICAgLCBtX3BlcmZvcm1hbmNlTW9uaXRvcihpc1V0aWxpdHlQYWdlKCkgPyBudWxscHRyIDogc3Rk
OjptYWtlX3VuaXF1ZTxQZXJmb3JtYW5jZU1vbml0b3I+KCp0aGlzKSkKKyAgICAsIG1fbG93UG93
ZXJNb2RlTm90aWZpZXIoc3RkOjptYWtlX3VuaXF1ZTxMb3dQb3dlck1vZGVOb3RpZmllcj4oW3Ro
aXNdKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKSB7IGhhbmRsZUxvd01vZGVQb3dlckNoYW5n
ZShpc0xvd1Bvd2VyTW9kZUVuYWJsZWQpOyB9KSkKIHsKICAgICB1cGRhdGVUaW1lclRocm90dGxp
bmdTdGF0ZSgpOwogCkBAIC05NTQsNiArOTU3LDIwIEBAIGJvb2wgUGFnZTo6aXNPbmx5Tm9uVXRp
bGl0eVBhZ2UoKSBjb25zdAogICAgIHJldHVybiAhaXNVdGlsaXR5UGFnZSgpICYmIG5vblV0aWxp
dHlQYWdlQ291bnQgPT0gMTsKIH0KIAorYm9vbCBQYWdlOjppc0xvd1Bvd2VyTW9kZUVuYWJsZWQo
KSBjb25zdAoreworICAgIGlmIChtX2xvd1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3Rp
bmcpCisgICAgICAgIHJldHVybiBtX2xvd1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3Rp
bmcudmFsdWUoKTsKKworICAgIHJldHVybiBtX2xvd1Bvd2VyTW9kZU5vdGlmaWVyLT5pc0xvd1Bv
d2VyTW9kZUVuYWJsZWQoKTsKK30KKwordm9pZCBQYWdlOjpzZXRMb3dQb3dlck1vZGVFbmFibGVk
T3ZlcnJpZGVGb3JUZXN0aW5nKHN0ZDo6b3B0aW9uYWw8Ym9vbD4gaXNFbmFibGVkKQoreworICAg
IG1fbG93UG93ZXJNb2RlRW5hYmxlZE92ZXJyaWRlRm9yVGVzdGluZyA9IGlzRW5hYmxlZDsKKyAg
ICBoYW5kbGVMb3dNb2RlUG93ZXJDaGFuZ2UobV9sb3dQb3dlck1vZGVFbmFibGVkT3ZlcnJpZGVG
b3JUZXN0aW5nLnZhbHVlX29yKGZhbHNlKSk7Cit9CisKIHZvaWQgUGFnZTo6c2V0VG9wQ29udGVu
dEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKIHsKICAgICBpZiAobV90b3BDb250ZW50SW5zZXQg
PT0gY29udGVudEluc2V0KQpAQCAtMTA5NCwxNCArMTExMSwzNCBAQCB2b2lkIFBhZ2U6OnJlc3Vt
ZVNjcmlwdGVkQW5pbWF0aW9ucygpCiAgICAgfQogfQogCi12b2lkIFBhZ2U6OnNldElzVmlzdWFs
bHlJZGxlSW50ZXJuYWwoYm9vbCBpc1Zpc3VhbGx5SWRsZSkKK2VudW0gY2xhc3MgVGhyb3R0bGlu
Z1JlYXNvbk9wZXJhdGlvbiB7IEFkZCwgUmVtb3ZlIH07CitzdGF0aWMgdm9pZCB1cGRhdGVTY3Jp
cHRlZEFuaW1hdGlvbnNUaHJvdHRsaW5nUmVhc29uKFBhZ2UmIHBhZ2UsIFRocm90dGxpbmdSZWFz
b25PcGVyYXRpb24gb3BlcmF0aW9uLCBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OlRocm90
dGxpbmdSZWFzb24gcmVhc29uKQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAg
ICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgp
LT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJTZXRUaHJvdHRsZWQoaXNWaXN1YWxseUlkbGUp
OworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgYXV0byogZG9jdW1l
bnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvKiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIg
PSBkb2N1bWVudC0+c2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKCk7CisgICAgICAgIGlmICgh
c2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgaWYgKG9wZXJhdGlvbiA9PSBUaHJvdHRsaW5nUmVhc29uT3BlcmF0aW9uOjpBZGQpCisg
ICAgICAgICAgICBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPmFkZFRocm90dGxpbmdSZWFz
b24ocmVhc29uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyLT5yZW1vdmVUaHJvdHRsaW5nUmVhc29uKHJlYXNvbik7CiAgICAgfQogfQogCit2
b2lkIFBhZ2U6OnNldElzVmlzdWFsbHlJZGxlSW50ZXJuYWwoYm9vbCBpc1Zpc3VhbGx5SWRsZSkK
K3sKKyAgICB1cGRhdGVTY3JpcHRlZEFuaW1hdGlvbnNUaHJvdHRsaW5nUmVhc29uKCp0aGlzLCBp
c1Zpc3VhbGx5SWRsZSA/IFRocm90dGxpbmdSZWFzb25PcGVyYXRpb246OkFkZCA6IFRocm90dGxp
bmdSZWFzb25PcGVyYXRpb246OlJlbW92ZSwgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpU
aHJvdHRsaW5nUmVhc29uOjpWaXN1YWxseUlkbGUpOworfQorCit2b2lkIFBhZ2U6OmhhbmRsZUxv
d01vZGVQb3dlckNoYW5nZShib29sIGlzTG93UG93ZXJNb2RlRW5hYmxlZCkKK3sKKyAgICB1cGRh
dGVTY3JpcHRlZEFuaW1hdGlvbnNUaHJvdHRsaW5nUmVhc29uKCp0aGlzLCBpc0xvd1Bvd2VyTW9k
ZUVuYWJsZWQgPyBUaHJvdHRsaW5nUmVhc29uT3BlcmF0aW9uOjpBZGQgOiBUaHJvdHRsaW5nUmVh
c29uT3BlcmF0aW9uOjpSZW1vdmUsIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6VGhyb3R0
bGluZ1JlYXNvbjo6TG93UG93ZXJNb2RlKTsKK30KKwogdm9pZCBQYWdlOjp1c2VyU3R5bGVTaGVl
dExvY2F0aW9uQ2hhbmdlZCgpCiB7CiAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCBt
b3ZlIHRvIGEgbW9kZWwgb2YganVzdCBiZWluZyBoYW5kZWQgdGhlIHNoZWV0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CmluZGV4IDczZWUyNjkyYjExZjBjODNiNmRiY2NlMmE2Y2YwNzZkOTU0NzljNWUuLjkzOGEwOTZm
YjczOWQ5OWY2N2UyZWRjYjU5NDMyZWZkZjE1NmY1MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC05OSw2
ICs5OSw3IEBAIGNsYXNzIFVzZXJJbnB1dEJyaWRnZTsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsK
IGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CiBjbGFzcyBMaWJXZWJSVENQcm92aWRlcjsKK2Ns
YXNzIExvd1Bvd2VyTW9kZU5vdGlmaWVyOwogY2xhc3MgTWFpbkZyYW1lOwogY2xhc3MgTWVkaWFD
YW5TdGFydExpc3RlbmVyOwogY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldDsKQEAgLTU3Niw2ICs1
NzcsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNTZWxlY3Rpb25BdFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICNlbmRpZgogCisgICAgYm9vbCBpc0xv
d1Bvd2VyTW9kZUVuYWJsZWQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExv
d1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3Rpbmcoc3RkOjpvcHRpb25hbDxib29sPik7
CisKIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbml0R3JvdXAoKTsKIApAQCAt
NTk4LDYgKzYwMiw4IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8UmVmPFBsdWdpblZpZXdCYXNl
Pj4gcGx1Z2luVmlld3MoKTsKIAorICAgIHZvaWQgaGFuZGxlTG93TW9kZVBvd2VyQ2hhbmdlKGJv
b2wpOworCiAgICAgZW51bSBjbGFzcyBUaW1lclRocm90dGxpbmdTdGF0ZSB7IERpc2FibGVkLCBF
bmFibGVkLCBFbmFibGVkSW5jcmVhc2luZyB9OwogICAgIHZvaWQgaGlkZGVuUGFnZURPTVRpbWVy
VGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCgpOwogICAgIHZvaWQgc2V0VGltZXJUaHJvdHRsaW5nU3Rh
dGUoVGltZXJUaHJvdHRsaW5nU3RhdGUpOwpAQCAtNzgwLDYgKzc4Niw4IEBAIHByaXZhdGU6CiAg
ICAgc3RkOjpvcHRpb25hbDxFdmVudFRocm90dGxpbmdCZWhhdmlvcj4gbV9ldmVudFRocm90dGxp
bmdCZWhhdmlvck92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBlcmZvcm1hbmNlTW9u
aXRvcj4gbV9wZXJmb3JtYW5jZU1vbml0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPExvd1Bvd2Vy
TW9kZU5vdGlmaWVyPiBtX2xvd1Bvd2VyTW9kZU5vdGlmaWVyOworICAgIHN0ZDo6b3B0aW9uYWw8
Ym9vbD4gbV9sb3dQb3dlck1vZGVFbmFibGVkT3ZlcnJpZGVGb3JUZXN0aW5nOwogCiAgICAgYm9v
bCBtX2lzUnVubmluZ1VzZXJTY3JpcHRzIHsgZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKaW5kZXggZDY5YjJjOWIyMjEwNzM1OTkxZjVjNWJjNWEyNWMxYmY3ZTFm
MzE2Mi4uMjFlNzRmM2YzY2JiMDdkNWRlNGEzYWE1OWE3Zjc5MTkwNjU4MTBmNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNDM2LDYgKzQzNiw3IEBAIHZvaWQgSW50ZXJu
YWxzOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKFBhZ2UmIHBhZ2UpCiAjZW5kaWYKIAogICAgIHBh
Z2Uuc2V0U2hvd0FsbFBsdWdpbnMoZmFsc2UpOworICAgIHBhZ2Uuc2V0TG93UG93ZXJNb2RlRW5h
YmxlZE92ZXJyaWRlRm9yVGVzdGluZyhzdGQ6Om51bGxvcHQpOwogCiAjaWYgVVNFKFFVSUNLX0xP
T0spCiAgICAgTW9ja1F1aWNrTG9va0hhbmRsZUNsaWVudDo6c2luZ2xldG9uKCkuc2V0UGFzc3dv
cmQoIiIpOwpAQCAtMTAxOSw2ICsxMDIwLDE0IEBAIGJvb2wgSW50ZXJuYWxzOjppc1JlcXVlc3RB
bmltYXRpb25GcmFtZVRocm90dGxlZCgpIGNvbnN0CiAgICAgcmV0dXJuIHNjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlci0+aXNUaHJvdHRsZWQoKTsKIH0KIAorZG91YmxlIEludGVybmFsczo6cmVx
dWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwoKSBjb25zdAoreworICAgIGF1dG8qIHNjcmlwdGVk
QW5pbWF0aW9uQ29udHJvbGxlciA9IGNvbnRleHREb2N1bWVudCgpLT5zY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIXNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcikKKyAg
ICAgICAgcmV0dXJuIElORklOSVRZOworICAgIHJldHVybiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRy
b2xsZXItPmludGVydmFsKCkudmFsdWUoKTsKK30KKwogYm9vbCBJbnRlcm5hbHM6OmFyZVRpbWVy
c1Rocm90dGxlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvbnRleHREb2N1bWVudCgpLT5pc1Rp
bWVyVGhyb3R0bGluZ0VuYWJsZWQoKTsKQEAgLTEyOTAsNiArMTI5OSwxOSBAQCB2b2lkIEludGVy
bmFsczo6aW52YWxpZGF0ZUZvbnRDYWNoZSgpCiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5p
bnZhbGlkYXRlKCk7CiB9CiAKK0V4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0TG93UG93
ZXJNb2RlRW5hYmxlZChib29sIGlzRW5hYmxlZCkKK3sKKyAgICBhdXRvKiBkb2N1bWVudCA9IGNv
bnRleHREb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICBhdXRvKiBwYWdlID0gZG9jdW1lbnQt
PnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKworICAgIHBhZ2UtPnNldExvd1Bvd2VyTW9kZUVuYWJsZWRPdmVy
cmlkZUZvclRlc3RpbmcoaXNFbmFibGVkKTsKKyAgICByZXR1cm4geyB9OworfQorCiBFeGNlcHRp
b25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldFNjcm9sbFZpZXdQb3NpdGlvbihpbnQgeCwgaW50IHkp
CiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCA0NzNhMzQ0NjgzZGRhMGRkM2M3YmZiY2RkODJkYTJl
MjY3Y2IzZGIxLi4zZGM0NWY2ZWI5MWNlZDEwMTE5MDEwNjI3OTIzZDgxODUxYmRiYWIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTEzMCw2ICsxMzAsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gRE9NVGltZXJzIHRocm90dGxpbmcgdGVzdGluZy4KICAgICBFeGNlcHRpb25Pcjxib29s
PiBpc1RpbWVyVGhyb3R0bGVkKGludCB0aW1lb3V0SWQpOwogICAgIGJvb2wgaXNSZXF1ZXN0QW5p
bWF0aW9uRnJhbWVUaHJvdHRsZWQoKSBjb25zdDsKKyAgICBkb3VibGUgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lSW50ZXJ2YWwoKSBjb25zdDsKICAgICBib29sIGFyZVRpbWVyc1Rocm90dGxlZCgpIGNv
bnN0OwogCiAgICAgZW51bSBFdmVudFRocm90dGxpbmdCZWhhdmlvciB7IFJlc3BvbnNpdmUsIFVu
cmVzcG9uc2l2ZSB9OwpAQCAtMTc0LDYgKzE3NSw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25P
cjx2b2lkPiBzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wpOwogCiAgICAg
dm9pZCBpbnZhbGlkYXRlRm9udENhY2hlKCk7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TG93
UG93ZXJNb2RlRW5hYmxlZChib29sKTsKIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFNjcm9s
bFZpZXdQb3NpdGlvbihpbnQgeCwgaW50IHkpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaWRsCmluZGV4IDhiYmI5ZGUzZjU0MWQ1MmU4NTk1YmQ0NjNlYTI5ZTU2MDFlNTA5ZTEu
LjEwMjQ4NDJmMDNjYWNjZDZlY2Q2MmNiMjg4OTI2NGNiOTQxMjcyMGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTM1MCw2ICszNTAsOSBAQCBlbnVtIEV2ZW50VGhyb3R0
bGluZ0JlaGF2aW9yIHsKICAgICBib29sZWFuIGlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0
bGVkKCk7CiAgICAgYm9vbGVhbiBhcmVUaW1lcnNUaHJvdHRsZWQoKTsKIAorICAgIFtNYXlUaHJv
d0V4Y2VwdGlvbl0gdm9pZCBzZXRMb3dQb3dlck1vZGVFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7
CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIGRvdWJsZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRl
cnZhbDsKKwogICAgIC8vIE92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBXZWJQYWdlOjpldmVudFRo
cm90dGxpbmdEZWxheSgpLCB3aGljaCBvbmx5IGFmZmVjdHMgaU9TLgogICAgIGF0dHJpYnV0ZSBF
dmVudFRocm90dGxpbmdCZWhhdmlvcj8gZXZlbnRUaHJvdHRsaW5nQmVoYXZpb3JPdmVycmlkZTsK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA3
MjM1ZWJiYTkwMzJmYjIxZjAyNjZmODExNWE5ZGY3NTE0ZWQ2NzAuLmY3MWRmOTk1MTRjOWMxMDA1
ODNjM2Y1MDhkYWU0YzA5NGUwNTVhMjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wMi0yOCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFRocm90dGxlIHJlcXVlc3RB
bmltYXRpb25GcmFtZSB0byAzMGZwcyBpbiBsb3cgcG93ZXIgbW9kZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4ODM3CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zMDcwMDkyOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgdW5pdCB0ZXN0IGZvciAtPSBvcGVyYXRvciBvbiBXVEY6Ok9wdGlvblNl
dC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL09wdGlvblNldC5jcHA6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0wMi0yNyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3BlY2lmaWNhdGlvbiBh
bmQgc3RhdHVzIG1ldGFkYXRhIHRvIENTU1Byb3BlcnRpZXMuanNvbiwgYW5kIHZhbGlkYXRlIGl0
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25TZXQuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uU2V0LmNwcAppbmRleCBmMDE3
MzgzMWI5MWMwMTUwMmMyMDU0YWY4NmM5YTFkN2VhNzQ5NDE2Li43NTUxNzk0OGE1YjAzYmJiMWNm
NDg3NzNhYmI0Y2U5OTdkOWVlNjIzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9PcHRpb25TZXQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L09wdGlvblNldC5jcHAKQEAgLTg2LDYgKzg2LDE4IEBAIFRFU1QoV1RGX09wdGlvblNldCwgTWlu
dXMpCiAgICAgRVhQRUNUX1RSVUUoKHNldCAtIHNldCkuaXNFbXB0eSgpKTsKIH0KIAorVEVTVChX
VEZfT3B0aW9uU2V0LCBNaW51c0VxdWFsKQoreworICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+
IHNldCB7IEV4YW1wbGVGbGFnczo6QSwgRXhhbXBsZUZsYWdzOjpCLCBFeGFtcGxlRmxhZ3M6OkMg
fTsKKworICAgIEVYUEVDVF9UUlVFKCgoc2V0IC09IEV4YW1wbGVGbGFnczo6QSkgPT0gT3B0aW9u
U2V0PEV4YW1wbGVGbGFncz4geyBFeGFtcGxlRmxhZ3M6OkIsIEV4YW1wbGVGbGFnczo6QyB9KSk7
CisgICAgRVhQRUNUX1RSVUUoKHNldCA9PSBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiB7IEV4YW1w
bGVGbGFnczo6QiwgRXhhbXBsZUZsYWdzOjpDIH0pKTsKKyAgICBFWFBFQ1RfVFJVRSgoKHNldCAt
PSBFeGFtcGxlRmxhZ3M6OkQpID09IE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+IHsgRXhhbXBsZUZs
YWdzOjpCLCBFeGFtcGxlRmxhZ3M6OkMgfSkpOworICAgIEVYUEVDVF9UUlVFKChzZXQgPT0gT3B0
aW9uU2V0PEV4YW1wbGVGbGFncz4geyBFeGFtcGxlRmxhZ3M6OkIsIEV4YW1wbGVGbGFnczo6QyB9
KSk7CisgICAgRVhQRUNUX1RSVUUoKHNldCAtPSBzZXQpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNU
X1RSVUUoc2V0LmlzRW1wdHkoKSk7Cit9CisKIFRFU1QoV1RGX09wdGlvblNldCwgQ29udGFpbnNU
d29GbGFncykKIHsKICAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQgeyBFeGFtcGxlRmxh
Z3M6OkEsIEV4YW1wbGVGbGFnczo6QiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRkZGIwZTMwZjQwYmU4YjhiODFkMjkz
ZTYyYWI0YTU0M2IxZWZjMmQuLjkzN2I3NTRhNzkyMWRiM2I4NjY1ZmRhMTQ1OWZmZmIxY2NlMGI2
NTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNy0wMi0yOCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFRocm90dGxlIHJlcXVlc3RBbmltYXRpb25G
cmFtZSB0byAzMGZwcyBpbiBsb3cgcG93ZXIgbW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4ODM3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
MDcwMDkyOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgbGF5b3V0IHRlc3QgY292ZXJhZ2UuCisKKyAgICAgICAgKiBmYXN0L2FuaW1hdGlvbi9y
ZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS10aHJvdHRsaW5nLWRldGFjaGVkLWlmcmFtZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9u
LWZyYW1lLXRocm90dGxpbmctZGV0YWNoZWQtaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXRocm90dGxpbmctbG93UG93
ZXJNb2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9hbmltYXRpb24vcmVx
dWVzdC1hbmltYXRpb24tZnJhbWUtdGhyb3R0bGluZy1sb3dQb3dlck1vZGUuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9hbmltYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5pbWF0aW9u
Lmh0bWw6IEFkZGVkLgorCiAyMDE3LTAyLTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgTGF5b3V0VGVzdCBmYXN0L2V2ZW50cy9jdXJyZW50VGFyZ2V0LWdjLWNy
YXNoLmh0bWwgaXMgYSBmbGFreSBmYWlsdXJlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS10aHJvdHRsaW5nLWRldGFjaGVkLWlm
cmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFu
aW1hdGlvbi1mcmFtZS10aHJvdHRsaW5nLWRldGFjaGVkLWlmcmFtZS1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzI4NjQ4ODhmZDQ1OWQ5YmM1OWJlYzczYjM1ZDQxNjNiN2FlNDMwMgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9u
LWZyYW1lLXRocm90dGxpbmctZGV0YWNoZWQtaWZyYW1lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDMxIEBACitUZXN0IHRoYXQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGdldHMgdGhlIHJpZ2h0IHRo
cm90dGxpbmcgaW4gYW4gaWZyYW1lIHdoZW4gaW5zZXJ0ZWQgaW50byBhIGRvY3VtZW50LgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBpbnRlcm5hbHMuaXNSZXF1ZXN0QW5p
bWF0aW9uRnJhbWVUaHJvdHRsZWQoKSBpcyBmYWxzZQorUEFTUyBpbnRlcm5hbHMucmVxdWVzdEFu
aW1hdGlvbkZyYW1lSW50ZXJ2YWwgaXMgMC4wMTUKK1BBU1MgZnJhbWUuY29udGVudFdpbmRvdy5p
bnRlcm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSBpcyBmYWxzZQorUEFT
UyBmcmFtZS5jb250ZW50V2luZG93LmludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRl
cnZhbCBpcyAwLjAxNQoraW50ZXJuYWxzLnNldExvd1Bvd2VyTW9kZUVuYWJsZWQodHJ1ZSk7CitQ
QVNTIGludGVybmFscy5pc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgpIGlzIHRydWUK
K1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIGlzIDAuMDMwCitQ
QVNTIGZyYW1lLmNvbnRlbnRXaW5kb3cuaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1l
VGhyb3R0bGVkKCkgaXMgdHJ1ZQorUEFTUyBmcmFtZS5jb250ZW50V2luZG93LmludGVybmFscy5y
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCBpcyAwLjAzMAorZnJhbWUucmVtb3ZlKCkKK2Rv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpCitQQVNTIGludGVybmFscy5pc1JlcXVlc3RB
bmltYXRpb25GcmFtZVRocm90dGxlZCgpIGlzIHRydWUKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RB
bmltYXRpb25GcmFtZUludGVydmFsIGlzIDAuMDMwCitQQVNTIGZyYW1lLmNvbnRlbnRXaW5kb3cu
aW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMgdHJ1ZQorUEFT
UyBmcmFtZS5jb250ZW50V2luZG93LmludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRl
cnZhbCBpcyAwLjAzMAorZnJhbWUucmVtb3ZlKCkKK2ludGVybmFscy5zZXRMb3dQb3dlck1vZGVF
bmFibGVkKGZhbHNlKTsKK1BBU1MgaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhy
b3R0bGVkKCkgaXMgZmFsc2UKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlu
dGVydmFsIGlzIDAuMDE1Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYW1lKQorUEFTUyBm
cmFtZS5jb250ZW50V2luZG93LmludGVybmFscy5pc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90
dGxlZCgpIGlzIGZhbHNlCitQQVNTIGZyYW1lLmNvbnRlbnRXaW5kb3cuaW50ZXJuYWxzLnJlcXVl
c3RBbmltYXRpb25GcmFtZUludGVydmFsIGlzIDAuMDE1CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXRocm90dGxpbmctZGV0YWNoZWQt
aWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlv
bi1mcmFtZS10aHJvdHRsaW5nLWRldGFjaGVkLWlmcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0Mjgw
YzNlZGZjMTU4NDU3MjJiMTc4MWRjZjUyM2YxMWE2NDljNTUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS10aHJvdHRs
aW5nLWRldGFjaGVkLWlmcmFtZS5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgcmVxdWVz
dEFuaW1hdGlvbkZyYW1lIGdldHMgdGhlIHJpZ2h0IHRocm90dGxpbmcgaW4gYW4gaWZyYW1lIHdo
ZW4gaW5zZXJ0ZWQgaW50byBhIGRvY3VtZW50LiIpOworanNUZXN0SXNBc3luYyA9IHRydWU7CisK
K2xldCBpID0gMDsKK2Z1bmN0aW9uIGRvV29yaygpCit7CisgICAgaSsrOworICAgIHJlcXVlc3RB
bmltYXRpb25GcmFtZShkb1dvcmspOworfQorCityZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZG9Xb3Jr
KTsKKworY29uc3QgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKK2Zy
YW1lLnNyYyA9ICJyZXNvdXJjZXMvZnJhbWUtd2l0aC1hbmltYXRpb24uaHRtbCI7CitmcmFtZS5v
bmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICBzaG91bGRCZUZhbHNlKCJpbnRlcm5hbHMuaXNSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSIpOworICAgIHNob3VsZEJlKCJpbnRlcm5hbHMu
cmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwiLCAiMC4wMTUiKTsKKyAgICBzaG91bGRCZUZh
bHNlKCJmcmFtZS5jb250ZW50V2luZG93LmludGVybmFscy5pc1JlcXVlc3RBbmltYXRpb25GcmFt
ZVRocm90dGxlZCgpIik7CisgICAgc2hvdWxkQmUoImZyYW1lLmNvbnRlbnRXaW5kb3cuaW50ZXJu
YWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIiwgIjAuMDE1Iik7CisKKyAgICBldmFs
QW5kTG9nKCJpbnRlcm5hbHMuc2V0TG93UG93ZXJNb2RlRW5hYmxlZCh0cnVlKTsiKTsKKyAgICBz
aG91bGRCZVRydWUoImludGVybmFscy5pc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgp
Iik7CisgICAgc2hvdWxkQmUoImludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZh
bCIsICIwLjAzMCIpOworICAgIHNob3VsZEJlVHJ1ZSgiZnJhbWUuY29udGVudFdpbmRvdy5pbnRl
cm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSIpOworICAgIHNob3VsZEJl
KCJmcmFtZS5jb250ZW50V2luZG93LmludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRl
cnZhbCIsICIwLjAzMCIpOworICAgIGV2YWxBbmRMb2coImZyYW1lLnJlbW92ZSgpIik7CisKKyAg
ICBldmFsQW5kTG9nKCJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYW1lKSIpOworICAgIGZy
YW1lLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzaG91bGRCZVRydWUoImludGVybmFs
cy5pc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgpIik7CisgICAgICAgIHNob3VsZEJl
KCJpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwiLCAiMC4wMzAiKTsKKyAg
ICAgICAgc2hvdWxkQmVUcnVlKCJmcmFtZS5jb250ZW50V2luZG93LmludGVybmFscy5pc1JlcXVl
c3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgpIik7CisgICAgICAgIHNob3VsZEJlKCJmcmFtZS5j
b250ZW50V2luZG93LmludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCIsICIw
LjAzMCIpOworCisgICAgICAgIGV2YWxBbmRMb2coImZyYW1lLnJlbW92ZSgpIik7CisgICAgICAg
IGV2YWxBbmRMb2coImludGVybmFscy5zZXRMb3dQb3dlck1vZGVFbmFibGVkKGZhbHNlKTsiKTsK
KyAgICAgICAgc2hvdWxkQmVGYWxzZSgiaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1l
VGhyb3R0bGVkKCkiKTsKKyAgICAgICAgc2hvdWxkQmUoImludGVybmFscy5yZXF1ZXN0QW5pbWF0
aW9uRnJhbWVJbnRlcnZhbCIsICIwLjAxNSIpOworCisgICAgICAgIGV2YWxBbmRMb2coImRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpIik7CisgICAgICAgIGZyYW1lLm9ubG9hZCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgc2hvdWxkQmVGYWxzZSgiZnJhbWUuY29udGVudFdpbmRv
dy5pbnRlcm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSIpOworICAgICAg
ICAgICAgc2hvdWxkQmUoImZyYW1lLmNvbnRlbnRXaW5kb3cuaW50ZXJuYWxzLnJlcXVlc3RBbmlt
YXRpb25GcmFtZUludGVydmFsIiwgIjAuMDE1Iik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKKyAgICAgICAgfQorICAgIH0KK307Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYW1l
KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdGhyb3R0bGluZy1sb3dQb3dl
ck1vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1h
bmltYXRpb24tZnJhbWUtdGhyb3R0bGluZy1sb3dQb3dlck1vZGUtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk4MzNmZmIxMWRjYjgyOWJmZmFjNzNkNWMyYzNlZGI3ZTMyNDkzZWUKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1m
cmFtZS10aHJvdHRsaW5nLWxvd1Bvd2VyTW9kZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNiBA
QAorVGVzdCB0aGF0IHJlcXVlc3RBbmltYXRpb25GcmFtZSBnZXRzIHRocm90dGxlZCBpbiBsb3cg
cG93ZXIgbW9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgaW50ZXJu
YWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMgZmFsc2UKK1BBU1MgaW50
ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIGlzIEluZmluaXR5CityQUZIYW5k
bGUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZG9Xb3JrKTsKK1BBU1MgaW50ZXJuYWxzLmlzUmVx
dWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMgZmFsc2UKK1BBU1MgaW50ZXJuYWxzLnJl
cXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIGlzIDAuMDE1CitpbnRlcm5hbHMuc2V0TG93UG93
ZXJNb2RlRW5hYmxlZCh0cnVlKTsKK1BBU1MgaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZy
YW1lVGhyb3R0bGVkKCkgaXMgdHJ1ZQorUEFTUyBpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlvbkZy
YW1lSW50ZXJ2YWwgaXMgMC4wMzAKK2NhbmNlbEFuaW1hdGlvbkZyYW1lKHJBRkhhbmRsZSk7CitQ
QVNTIGludGVybmFscy5pc1JlcXVlc3RBbmltYXRpb25GcmFtZVRocm90dGxlZCgpIGlzIHRydWUK
K1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZUludGVydmFsIGlzIDAuMDMwCity
QUZIYW5kbGUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZG9Xb3JrKTsKK1BBU1MgaW50ZXJuYWxz
LmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMgdHJ1ZQorUEFTUyBpbnRlcm5h
bHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwgaXMgMC4wMzAKK2ludGVybmFscy5zZXRM
b3dQb3dlck1vZGVFbmFibGVkKGZhbHNlKTsKK1BBU1MgaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1h
dGlvbkZyYW1lVGhyb3R0bGVkKCkgaXMgZmFsc2UKK1BBU1MgaW50ZXJuYWxzLnJlcXVlc3RBbmlt
YXRpb25GcmFtZUludGVydmFsIGlzIDAuMDE1CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9hbmlt
YXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdGhyb3R0bGluZy1sb3dQb3dlck1vZGUuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXRo
cm90dGxpbmctbG93UG93ZXJNb2RlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJhZTA5ZjE2MjkxMzNlMGM2
ZTE0NjhmYTU2NTlmY2EwMDdlZjY1ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXRocm90dGxpbmctbG93UG93ZXJN
b2RlLmh0bWwKQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdGhhdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUg
Z2V0cyB0aHJvdHRsZWQgaW4gbG93IHBvd2VyIG1vZGUuIik7CisKK2xldCByQUZIYW5kbGU7Cits
ZXQgaSA9IDA7CitmdW5jdGlvbiBkb1dvcmsoKQoreworICAgIGkrKzsKKyAgICByQUZIYW5kbGUg
PSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZG9Xb3JrKTsKK30KKworc2hvdWxkQmVGYWxzZSgiaW50
ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkiKTsKK3Nob3VsZEJlKCJp
bnRlcm5hbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwiLCAiSW5maW5pdHkiKTsKK2V2
YWxBbmRMb2coInJBRkhhbmRsZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkb1dvcmspOyIpOwor
c2hvdWxkQmVGYWxzZSgiaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVk
KCkiKTsKK3Nob3VsZEJlKCJpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwi
LCAiMC4wMTUiKTsKK2V2YWxBbmRMb2coImludGVybmFscy5zZXRMb3dQb3dlck1vZGVFbmFibGVk
KHRydWUpOyIpOworc2hvdWxkQmVUcnVlKCJpbnRlcm5hbHMuaXNSZXF1ZXN0QW5pbWF0aW9uRnJh
bWVUaHJvdHRsZWQoKSIpOworc2hvdWxkQmUoImludGVybmFscy5yZXF1ZXN0QW5pbWF0aW9uRnJh
bWVJbnRlcnZhbCIsICIwLjAzMCIpOworZXZhbEFuZExvZygiY2FuY2VsQW5pbWF0aW9uRnJhbWUo
ckFGSGFuZGxlKTsiKTsKK3Nob3VsZEJlVHJ1ZSgiaW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlv
bkZyYW1lVGhyb3R0bGVkKCkiKTsKK3Nob3VsZEJlKCJpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlv
bkZyYW1lSW50ZXJ2YWwiLCAiMC4wMzAiKTsKK2V2YWxBbmRMb2coInJBRkhhbmRsZSA9IHJlcXVl
c3RBbmltYXRpb25GcmFtZShkb1dvcmspOyIpOworc2hvdWxkQmVUcnVlKCJpbnRlcm5hbHMuaXNS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVUaHJvdHRsZWQoKSIpOworc2hvdWxkQmUoImludGVybmFscy5y
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbnRlcnZhbCIsICIwLjAzMCIpOworZXZhbEFuZExvZygiaW50
ZXJuYWxzLnNldExvd1Bvd2VyTW9kZUVuYWJsZWQoZmFsc2UpOyIpOworc2hvdWxkQmVGYWxzZSgi
aW50ZXJuYWxzLmlzUmVxdWVzdEFuaW1hdGlvbkZyYW1lVGhyb3R0bGVkKCkiKTsKK3Nob3VsZEJl
KCJpbnRlcm5hbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW50ZXJ2YWwiLCAiMC4wMTUiKTsKKzwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9h
bmltYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5pbWF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2FuaW1hdGlvbi9yZXNvdXJjZXMvZnJhbWUtd2l0aC1hbmltYXRpb24uaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lZWI3OTZlNjdhMjU3NjZmY2FkOGMwZTMzZGExY2FhMjI1ZDNhMTI3Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdp
dGgtYW5pbWF0aW9uLmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPHNjcmlwdD4KK2xldCBpID0gMDsK
K2Z1bmN0aW9uIGRvV29yaygpCit7CisgICAgaSsrOworICAgIHJlcXVlc3RBbmltYXRpb25GcmFt
ZShkb1dvcmspOworfQorCityZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZG9Xb3JrKTsKKzwvc2NyaXB0
Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>