<?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>44958</bug_id>
          
          <creation_ts>2010-08-31 09:08:18 -0700</creation_ts>
          <short_desc>Add support for autocorrection UI on Mac OS X.</short_desc>
          <delta_ts>2010-10-14 11:56:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>45070</blocked>
    
    <blocked>45071</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jia Pu">jiapu.mail</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ddavidso</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>mitz</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>272123</commentid>
    <comment_count>0</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-08-31 09:08:18 -0700</bug_when>
    <thetext>Add support for autocorrection UI that is used by other text editing UI on Mac OS X, so that the experience of text editing in WebView is consistent with the rest of the OS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272219</commentid>
    <comment_count>1</comment_count>
      <attachid>66075</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-08-31 11:05:44 -0700</bug_when>
    <thetext>Created attachment 66075
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272232</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-31 11:30:46 -0700</bug_when>
    <thetext>Attachment 66075 did not build on qt:
Build output: http://queues.webkit.org/results/3883181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272301</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 13:06:11 -0700</bug_when>
    <thetext>Attachment 66075 did not build on chromium:
Build output: http://queues.webkit.org/results/3873209</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272308</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 13:16:52 -0700</bug_when>
    <thetext>Attachment 66075 did not build on gtk:
Build output: http://queues.webkit.org/results/3877182</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272312</commentid>
    <comment_count>5</comment_count>
      <attachid>66092</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-08-31 13:21:01 -0700</bug_when>
    <thetext>Created attachment 66092
Proposed patch

Second version of the patch, which resolves build failure on non-macosx platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272339</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-31 13:54:12 -0700</bug_when>
    <thetext>Attachment 66092 did not build on qt:
Build output: http://queues.webkit.org/results/3853181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272411</commentid>
    <comment_count>7</comment_count>
      <attachid>66118</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-08-31 14:56:02 -0700</bug_when>
    <thetext>Created attachment 66118
Proposed patch (v3)

Fixed more build issues on non-mac platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272465</commentid>
    <comment_count>8</comment_count>
      <attachid>66118</attachid>
    <who name="">mitz</who>
    <bug_when>2010-08-31 16:16:19 -0700</bug_when>
    <thetext>Comment on attachment 66118
Proposed patch (v3)

&gt; WebCore/ChangeLog:9
&gt; +        No new tests. (OOPS!)
We cannot check in change log entries with the word OOPS in them. Please remove this line. 

&gt; WebCore/ChangeLog:11
&gt; +        Several new member methods are added to EditorClient for communication between WebCore and WebKit. A new handler, executeCancelOperation(), is added to EditorCommand.cpp so that WebCore can intercept the ESC key event to dismiss autocorrection UI. A new DocumentMarker value, RejectedCorrection, is added to keep track of the corrections that user has rejected, so that it will not be suggested again later. The autocorrection is driven by a timer. Every time the editor inserts a new letter, the timer is reset. If the timer fires, it means neither has user entered any new letter for current word, nor has he entered whitespace or punctuation to complete the word. In this case, we query for autocorrection.
Please hard-wrap this at the 80-100 column mark.

&gt; WebCore/ChangeLog:19
&gt; +        (WebCore::Editor::~Editor): Make sure autocorrection UI is dismiss before destroying Editor object.
typo: dismiss -&gt; dismissed

&gt; WebCore/ChangeLog:21
&gt; +        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Added an argument to indicate whether we want to show autocorrection UI. Added code to show autocorrection UI if it is necessary. Replaced all four boolean arguments with enum to improve readability.
I think a single enum-based bitfield would have been even better. Please wrap this long line.

&gt; WebCore/editing/Editor.cpp:2373
&gt; +        markAllMisspellingsAndBadGrammarInRanges(MarkSpelling, adjacentWords.toNormalizedRange().get(), markGrammar, selectedSentence.toNormalizedRange().get(), performTextCheckingReplacements, DoNotShowCorrectionPanel);
Might be better to use MarkGrammar instead of markGrammar here.

&gt; WebCore/editing/Editor.cpp:2685
&gt; +                        // We only the show correction panel on the last word.
typo: the show -&gt; show the

&gt; WebCore/editing/Editor.cpp:2701
&gt; +            if (doReplacement) {
I think I may have misled you about this in an earlier review, but it seems like this block could now be entered in cases where previously it wasn’t, because the result-type check and the canEdit() and shouldInsertText() checks aren’t applied here.

&gt; WebCore/editing/Editor.cpp:2720
&gt; +    if (selectionChanged &amp;&amp; !shouldShowCorrectionPanel) {
Can you explain this change? How could selectionChanged be true if we are just showing the correction UI?

&gt; WebCore/editing/Editor.h:351
&gt; +    void correctionPanelTimerFired(Timer&lt;Editor&gt;* timer);
Please omit the name “timer” here.

&gt; WebCore/platform/graphics/GraphicsContext.h:276
&gt; +            TextCheckingInvalidLineStyle = -1,
The invalid value is not needed.

&gt; WebCore/platform/graphics/GraphicsContext.h:284
&gt; +        void drawLineForTextChecking(const IntPoint&amp;, int width, TextCheckingLineStyle);
&gt; +#else
&gt;          void drawLineForMisspellingOrBadGrammar(const IntPoint&amp;, int width, bool grammar);
&gt; -
&gt; +#endif
It’s really bad the have different GraphicsContext methods for Mac and all the other ports. It shouldn’t be hard to blindly change all other ports to adopt the new method.

&gt; WebCore/rendering/InlineTextBox.cpp:785
&gt; +#if PLATFORM(MAC)
&gt; +static GraphicsContext::TextCheckingLineStyle textCheckingLineStyleForMarkerType(DocumentMarker::MarkerType markerType)
&gt; +{
&gt; +    switch (markerType) {
&gt; +    case DocumentMarker::Spelling:
&gt; +        return GraphicsContext::TextCheckingSpellingLineStyle;
&gt; +    case DocumentMarker::Grammar:
&gt; +        return GraphicsContext::TextCheckingGrammarLineStyle;
&gt; +    case DocumentMarker::Replacement:
&gt; +        return GraphicsContext::TextCheckingReplacementLineStyle;
&gt; +    default:
&gt; +        return GraphicsContext::TextCheckingInvalidLineStyle;
&gt; +    }
&gt; +}
&gt; +#endif
In the default case you should ASSERT_NOT_REACHED() and return one of the valid values. It is a programming error to call this method with anything besides Spelling, Geammar or Replacement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272466</commentid>
    <comment_count>9</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-08-31 16:18:00 -0700</bug_when>
    <thetext>I r-ed because of the change log issues and what I think is a logic mistake in markAllMisspellingsAndBadGrammarInRanges().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272499</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 16:49:30 -0700</bug_when>
    <thetext>Attachment 66092 did not build on gtk:
Build output: http://queues.webkit.org/results/3880217</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272642</commentid>
    <comment_count>11</comment_count>
      <attachid>66168</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-08-31 22:33:21 -0700</bug_when>
    <thetext>Created attachment 66168
Proposed patch (v4)

Code changes based on comment #8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272643</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 22:36:13 -0700</bug_when>
    <thetext>Attachment 66168 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272644</commentid>
    <comment_count>13</comment_count>
      <attachid>66169</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-08-31 22:43:28 -0700</bug_when>
    <thetext>Created attachment 66169
Proposed patch (v5)

code change based on comment #8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272647</commentid>
    <comment_count>14</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-31 23:01:05 -0700</bug_when>
    <thetext>Attachment 66168 did not build on qt:
Build output: http://queues.webkit.org/results/3958007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272657</commentid>
    <comment_count>15</comment_count>
      <attachid>66171</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-08-31 23:18:12 -0700</bug_when>
    <thetext>Created attachment 66171
Proposed patch (v6)

Code changes based on comment #8.
Fixed a build failure on InlineTextBox.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272675</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-01 00:34:59 -0700</bug_when>
    <thetext>Attachment 66169 did not build on chromium:
Build output: http://queues.webkit.org/results/3901016</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272782</commentid>
    <comment_count>17</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-09-01 06:38:43 -0700</bug_when>
    <thetext>
&gt; 
&gt; &gt; WebCore/ChangeLog:21
&gt; &gt; +        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Added an argument to indicate whether we want to show autocorrection UI. Added code to show autocorrection UI if it is necessary. Replaced all four boolean arguments with enum to improve readability.
&gt; I think a single enum-based bitfield would have been even better. Please wrap this long line.

Replaced all boolean arguments with a bitfield.


&gt; &gt; WebCore/editing/Editor.cpp:2701
&gt; &gt; +            if (doReplacement) {
&gt; I think I may have misled you about this in an earlier review, but it seems like this block could now be entered in cases where previously it wasn’t, because the result-type check and the canEdit() and shouldInsertText() checks aren’t applied here.

Yes, I should have reviewed your review more closely. :)

&gt; 
&gt; &gt; WebCore/platform/graphics/GraphicsContext.h:284
&gt; &gt; +        void drawLineForTextChecking(const IntPoint&amp;, int width, TextCheckingLineStyle);
&gt; &gt; +#else
&gt; &gt;          void drawLineForMisspellingOrBadGrammar(const IntPoint&amp;, int width, bool grammar);
&gt; &gt; -
&gt; &gt; +#endif
&gt; It’s really bad the have different GraphicsContext methods for Mac and all the other ports. It shouldn’t be hard to blindly change all other ports to adopt the new method.

This is indeed unwieldy given the different platforms we need to build on. I have replaced all calls to drawLineForMisspellingOrBadGrammar() with drawLineForTextChecking().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272792</commentid>
    <comment_count>18</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-09-01 07:13:57 -0700</bug_when>
    <thetext>I think this was closed by accident.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272827</commentid>
    <comment_count>19</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-09-01 09:00:40 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; I think this was closed by accident.

Ah, yes, I was confused by the interface. Thanks for correcting this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272834</commentid>
    <comment_count>20</comment_count>
      <attachid>66171</attachid>
    <who name="">mitz</who>
    <bug_when>2010-09-01 09:16:58 -0700</bug_when>
    <thetext>Comment on attachment 66171
Proposed patch (v6)

One last comment:

&gt; +    enum TextCheckingOptions {
&gt; +        MarkSpelling = 1 &lt;&lt; 0,
&gt; +        MarkGrammar = 1 &lt;&lt; 1,
&gt; +        PerformReplacement = 1 &lt;&lt; 2,
&gt; +        ShowCorrectionPanel = 1 &lt;&lt; 3,
&gt; +    };
&gt; +    void markAllMisspellingsAndBadGrammarInRanges(int textCheckingOptions, Range* spellingRange, Range* grammarRange);

The way these flags enums usually work in WebKit is that in addition to an enum for the flags, there is also a typedef for the bitmask, which is used as the parameter type:

    enum TextCheckingOptionFlags {
        MarkSpelling = 1 &lt;&lt; 0,
        MarkGrammar = 1 &lt;&lt; 1,
        PerformReplacement = 1 &lt;&lt; 2,
        ShowCorrectionPanel = 1 &lt;&lt; 3,
    };
    typedef unsigned TextCheckingOptions;

    void markAllMisspellingsAndBadGrammarInRanges(TextCheckingOptions, Range* spellingRange, Range* grammarRange);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272919</commentid>
    <comment_count>21</comment_count>
      <attachid>66241</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-09-01 11:56:05 -0700</bug_when>
    <thetext>Created attachment 66241
Proposed patch (v7)

Added typedef for the bit mask per comment #20.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272968</commentid>
    <comment_count>22</comment_count>
      <attachid>66241</attachid>
    <who name="">mitz</who>
    <bug_when>2010-09-01 13:17:27 -0700</bug_when>
    <thetext>Comment on attachment 66241
Proposed patch (v7)

r=me

Please file follow-up bugs on the things we’ve discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294232</commentid>
    <comment_count>23</comment_count>
      <attachid>66241</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-14 11:35:32 -0700</bug_when>
    <thetext>Comment on attachment 66241
Proposed patch (v7)

Marking this cq+ since jpu is not a committer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294239</commentid>
    <comment_count>24</comment_count>
      <attachid>66241</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-14 11:37:29 -0700</bug_when>
    <thetext>Comment on attachment 66241
Proposed patch (v7)

Rejecting patch 66241 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=abarth-cq-sl&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--quiet&apos;, 66241]&quot; exit_code: 2
Cleaning working directory
Updating working directory
Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=66241&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=44958&amp;ctype=xml
Processing 1 patch from 1 bug.
Processing patch 66241 from bug 44958.
Failed to run &quot;[u&apos;/Users/abarth/git/webkit-queue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Dan Bernstein&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/4432032</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294255</commentid>
    <comment_count>25</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-10-14 11:51:01 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 66241 [details])
&gt; Rejecting patch 66241 from commit-queue.
&gt; 
&gt; Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=abarth-cq-sl&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--quiet&apos;, 66241]&quot; exit_code: 2
&gt; Cleaning working directory
&gt; Updating working directory
&gt; Logging in as commit-queue@webkit.org...
&gt; Fetching: https://bugs.webkit.org/attachment.cgi?id=66241&amp;action=edit
&gt; Fetching: https://bugs.webkit.org/show_bug.cgi?id=44958&amp;ctype=xml
&gt; Processing 1 patch from 1 bug.
&gt; Processing patch 66241 from bug 44958.
&gt; Failed to run &quot;[u&apos;/Users/abarth/git/webkit-queue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Dan Bernstein&apos;, u&apos;--force&apos;]&quot; exit_code: 1
&gt; 
&gt; Full output: http://queues.webkit.org/results/4432032

Dan, I thought this patch has been landed long time ago.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294259</commentid>
    <comment_count>26</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-14 11:56:47 -0700</bug_when>
    <thetext>It probably was, the bug was just never updated or closed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66075</attachid>
            <date>2010-08-31 11:05:44 -0700</date>
            <delta_ts>2010-08-31 13:21:01 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>WebKitAutoCorrection.patch</filename>
            <type>text/plain</type>
            <size>49190</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMTAtMDgtMzEgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yIGF1dG9jb3JyZWN0aW9uIFVJIG9uIE1hYyBPUyBYLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5NTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzcyOTk2MjE+CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgU2V2
ZXJhbCBuZXcgbWVtYmVyIG1ldGhvZHMgYXJlIGFkZGVkIHRvIEVkaXRvckNsaWVudCBmb3IgY29t
bXVuaWNhdGlvbiBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktpdC4gQSBuZXcgaGFuZGxlciwgZXhl
Y3V0ZUNhbmNlbE9wZXJhdGlvbigpLCBpcyBhZGRlZCB0byBFZGl0b3JDb21tYW5kLmNwcCBzbyB0
aGF0IFdlYkNvcmUgY2FuIGludGVyY2VwdCB0aGUgRVNDIGtleSBldmVudCB0byBkaXNtaXNzIGF1
dG9jb3JyZWN0aW9uIFVJLiBBIG5ldyBEb2N1bWVudE1hcmtlciB2YWx1ZSwgUmVqZWN0ZWRDb3Jy
ZWN0aW9uLCBpcyBhZGRlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjb3JyZWN0aW9ucyB0aGF0IHVz
ZXIgaGFzIHJlamVjdGVkLCBzbyB0aGF0IGl0IHdpbGwgbm90IGJlIHN1Z2dlc3RlZCBhZ2FpbiBs
YXRlci4gVGhlIGF1dG9jb3JyZWN0aW9uIGlzIGRyaXZlbiBieSBhIHRpbWVyLiBFdmVyeSB0aW1l
IHRoZSBlZGl0b3IgaW5zZXJ0cyBhIG5ldyBsZXR0ZXIsIHRoZSB0aW1lciBpcyByZXNldC4gSWYg
dGhlIHRpbWVyIGZpcmVzLCBpdCBtZWFucyBuZWl0aGVyIGhhcyB1c2VyIGVudGVyZWQgYW55IG5l
dyBsZXR0ZXIgZm9yIGN1cnJlbnQgd29yZCwgbm9yIGhhcyBoZSBlbnRlcmVkIHdoaXRlc3BhY2Ug
b3IgcHVuY3R1YXRpb24gdG8gY29tcGxldGUgdGhlIHdvcmQuIEluIHRoaXMgY2FzZSwgd2UgcXVl
cnkgZm9yIGF1dG9jb3JyZWN0aW9uLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IFVwZGF0
ZWQKKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlci5oOiBBZGRlZCBSZWplY3RlZENvcnJl
Y3Rpb24gdG8gaW5kaWNhdGUgd29yZCBvbiB3aGljaCB1c2VyIGhhcyByZWplY3RlZCBhdXRvY29y
cmVjdGlvbi4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKTogSW5pdGlhbGl6ZSBhdXRvY29ycmVjdGlvbiB0aW1lci4KKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6fkVkaXRvcik6IE1ha2Ugc3VyZSBhdXRvY29ycmVjdGlv
biBVSSBpcyBkaXNtaXNzIGJlZm9yZSBkZXN0cm95aW5nIEVkaXRvciBvYmplY3QuCisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24p
OiBBZG9wdGVkIG5ldyBzaWduYXR1cmUgb2YgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXJJblJhbmdlcygpLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKTogQWRkZWQgYW4gYXJndW1lbnQgdG8gaW5kaWNhdGUg
d2hldGhlciB3ZSB3YW50IHRvIHNob3cgYXV0b2NvcnJlY3Rpb24gVUkuIEFkZGVkIGNvZGUgdG8g
c2hvdyBhdXRvY29ycmVjdGlvbiBVSSBpZiBpdCBpcyBuZWNlc3NhcnkuIFJlcGxhY2VkIGFsbCBm
b3VyIGJvb2xlYW4gYXJndW1lbnRzIHdpdGggZW51bSB0byBpbXByb3ZlIHJlYWRhYmlsaXR5Lgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcik6
QWRvcHRlZCBuZXcgc2lnbmF0dXJlIG9mIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29ycmVjdGlvblBhbmVsVGlt
ZXJGaXJlZCk6IENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgc2hvdyBhdXRvY29ycmVjdGlvbiBV
SSB3aGVuIHVzZXIgcGF1c2VzIGR1cmluZyB0eXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbik6IFVwZGF0ZSB1c2VyIGRpY3Rpb25hcnkgd2hl
biBhbiBhdXRvY29ycmVjdGlvbiBpcyByZWplY3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcik6IFN0YXJ0IGF1dG9jb3JyZWN0aW9uIHRpbWVy
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOiBEaXNt
aXNzIGF1dG9jb3JyZWN0aW9uIFVJIHdoZW4gRVNDIGtleSBpcyBwcmVzc2VkLgorCisgICAgICAg
ICogZWRpdGluZy9FZGl0b3IuaDogQWRkZWQgYXV0b2NvcnJlY3Rpb24gcmVsYXRlZCBtZW1iZXIg
bWV0aG9kcyBhbmQgdmFyaWFibGVzLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVDYW5jZWxPcGVyYXRpb24pOiBIYW5kbGUg
RVNDIGtleSBldmVudC4gRGlzbWlzcyBhdXRvY29ycmVjdGlvbiBVSS4KKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUNvbW1hbmRNYXApOiBVcGRhdGVkIGZvciBleGVjdXRlQ2FuY2VsT3BlcmF0aW9u
KCkuCisKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKTogUmVzZXQg
YXV0b2NvcnJlY3Rpb24gdGltZXIgYWZ0ZXIgaW5zZXJ0aW9uLgorCisgICAgICAgICogbG9hZGVy
L0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNo
b3dDb3JyZWN0aW9uUGFuZWwpOiBEdW1teSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKTogRGl0dG8KKwor
ICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6IEFkZGVkIG1ldGhvZHMgZm9yIGNvbW11bmlj
YXRpb24gYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgcmVnYXJkaW5nIGF1dG9jb3JyZWN0aW9u
LgorCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6IERpc21pc3MgYXV0b2NvcnJlY3Rpb24gVUkuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDogQWRkZWQgZW51
bSBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgdG8gc3BlY2lmeSB0aGUgdW5kZXJsaW5lIGZvciBkaWZm
ZXJlbnQgdHlwZSBvZiB0ZXh0IGNoZWNraW5nIHJlc3VsdC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKTogUmVwbGFjZWQgZHJhd0xp
bmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcigpIHdpdGggdGhpcyBtZXRob2QgaW4gb3JkZXIg
dG8gZHJhdyB1bmRlcmxpbmUgb24gYXV0b2NvcnJlY3RlZCB3b3JkLgorCisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENoZWNraW5n
TGluZVN0eWxlRm9yTWFya2VyVHlwZSk6IFJldHVybiBsaW5lIHN0eWxlIGZvciBhIGdpdmVuIGRv
Y3VtZW50IG1hcmtlciB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFp
bnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcik6IFJlcGxhY2VkIGRyYXdMaW5lRm9yTWlzc3BlbGxp
bmdPckJhZEdyYW1tYXIoKSB3aXRoIGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKCkuCisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2Vycyk6IEhhbmRsZSBu
ZXcgbWFya2VyIHZhbHVlLCBSZWplY3RlZENvcnJlY3Rpb24uCisKIDIwMTAtMDgtMzEgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDY2NDg4KQorKysgV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNjIxLDYgKzYyMSw3IEBAIF9fWk43V2ViQ29yZTZF
ZGl0b3IyMWFwcGx5U3R5bGVUb1NlbGVjdGkKIF9fWk43V2ViQ29yZTZFZGl0b3IyMWlzU2VsZWN0
aW9uTWlzc3BlbGxlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjNzZXRCYXNlV3JpdGluZ0RpcmVj
dGlvbkVOU18xNldyaXRpbmdEaXJlY3Rpb25FCiBfX1pON1dlYkNvcmU2RWRpdG9yMjRhZHZhbmNl
VG9OZXh0TWlzc3BlbGxpbmdFYgorX19aTjdXZWJDb3JlNkVkaXRvcjI0aGFuZGxlUmVqZWN0ZWRD
b3JyZWN0aW9uRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNh
bEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBf
X1pON1dlYkNvcmU2RWRpdG9yMjZpbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CkluZGV4OiBX
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50TWFya2VyLmgJKHJldmlzaW9uIDY2NDg4KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnRN
YXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCBzdHJ1Y3QgRG9jdW1lbnRN
YXJrZXIgewogICAgICAgICBTcGVsbGluZywKICAgICAgICAgR3JhbW1hciwKICAgICAgICAgVGV4
dE1hdGNoLAotICAgICAgICBSZXBsYWNlbWVudAorICAgICAgICBSZXBsYWNlbWVudCwKKyAgICAg
ICAgUmVqZWN0ZWRDb3JyZWN0aW9uCiAgICAgfTsKIAogICAgIE1hcmtlclR5cGUgdHlwZTsKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUzLDExICsxMDUzLDE2IEBAIEVkaXRvcjo6RWRp
dG9yKEZyYW1lKiBmcmFtZSkKICAgICAvLyBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LCBzaW5jZSBt
b3N0IGVkaXRvcnMgd2FudCB0aGlzIGJlaGF2aW9yICh0aGlzIG1hdGNoZXMgSUUgYnV0IG5vdCBG
RikuCiAgICAgLCBtX3Nob3VsZFN0eWxlV2l0aENTUyhmYWxzZSkKICAgICAsIG1fa2lsbFJpbmco
YWRvcHRQdHIobmV3IEtpbGxSaW5nKSkKLXsgCisgICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVy
KHRoaXMsICZFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7CiB9CiAKIEVkaXRv
cjo6fkVkaXRvcigpCiB7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50
KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7CisjZW5kaWYKIH0KIAogdm9pZCBFZGl0
b3I6OmNsZWFyKCkKQEAgLTIzNTEsMjIgKzIzNTYsMjMgQEAgYm9vbCBFZGl0b3I6OnNwZWxsaW5n
UGFuZWxJc1Nob3dpbmcoKQogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGlu
Z1RvUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwKQogewogI2lmIFBMQVRGT1JNKE1B
QykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpCi0gICAgYm9vbCBtYXJrU3BlbGxpbmcgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpOwotICAgIGJvb2wgbWFya0dyYW1tYXIgPSBtYXJrU3BlbGxpbmcgJiYgaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgYm9vbCBwZXJmb3JtVGV4dENoZWNraW5nUmVw
bGFjZW1lbnRzID0gaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKSAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJs
ZWQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtYXJrU3Bl
bGxpbmcgJiYgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpOworICAgIE1h
cmtTcGVsbGluZ09yTm90IG1hcmtTcGVsbGluZyA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCkgPyBNYXJrU3BlbGxpbmcgOiBEb05vdE1hcmtTcGVsbGluZzsKKyAgICBNYXJrR3Jh
bW1hck9yTm90IG1hcmtHcmFtbWFyID0gbWFya1NwZWxsaW5nICYmIGlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCgpID8gTWFya0dyYW1tYXIgOiBEb05vdE1hcmtHcmFtbWFyOworICAgIFBlcmZvcm1U
ZXh0Q2hlY2tpbmdSZXBsYWNlbWVudE9yTm90IHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVu
dHMgPSAoaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAobWFya1NwZWxsaW5nICYmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9u
RW5hYmxlZCgpKSApID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBs
YWNlbWVudCA6IERvTm90UGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50OwogICAgIGlmICgh
bWFya1NwZWxsaW5nICYmICFwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKQogICAgICAg
ICByZXR1cm47Ci0gICAgCisKICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBW
aXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHAsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5k
T2ZXb3JkKHAsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogICAgIGlmIChtYXJrR3JhbW1hcikg
ewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGVkU2VudGVuY2UgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShwKSwgZW5kT2ZTZW50ZW5jZShwKSk7Ci0gICAgICAgIG1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModHJ1ZSwgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCB0cnVlLCBzZWxlY3RlZFNlbnRlbmNlLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpOwor
ICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE1hcmtTcGVs
bGluZywgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBtYXJrR3JhbW1h
ciwgc2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBwZXJmb3JtVGV4
dENoZWNraW5nUmVwbGFjZW1lbnRzLCBEb05vdFNob3dDb3JyZWN0aW9uUGFuZWwpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMo
bWFya1NwZWxsaW5nLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGZh
bHNlLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHBlcmZvcm1UZXh0
Q2hlY2tpbmdSZXBsYWNlbWVudHMpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKG1hcmtTcGVsbGluZywgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBEb05vdE1hcmtHcmFtbWFyLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMsIERvTm90U2hv
d0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgfQogI2Vsc2UKICAgICBpZiAoIWlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNTEwLDEzICsyNTE2LDEzIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2gKICAgICByZXR1cm4gY2hhcmFjdGVyID09ICdc
JycgfHwgY2hhcmFjdGVyID09IHJpZ2h0U2luZ2xlUXVvdGF0aW9uTWFyayB8fCBjaGFyYWN0ZXIg
PT0gaGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW07CiB9CiAKLXZvaWQgRWRpdG9yOjptYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKGJvb2wgbWFya1NwZWxsaW5nLCBSYW5n
ZSogc3BlbGxpbmdSYW5nZSwgYm9vbCBtYXJrR3JhbW1hciwgUmFuZ2UqIGdyYW1tYXJSYW5nZSwg
Ym9vbCBwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKQordm9pZCBFZGl0b3I6Om1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoTWFya1NwZWxsaW5nT3JOb3Qgc2hv
dWxkTWFya1NwZWxsaW5nLCBSYW5nZSogc3BlbGxpbmdSYW5nZSwgTWFya0dyYW1tYXJPck5vdCBz
aG91bGRNYXJrR3JhbW1hciwgUmFuZ2UqIGdyYW1tYXJSYW5nZSwgUGVyZm9ybVRleHRDaGVja2lu
Z1JlcGxhY2VtZW50T3JOb3Qgc2hvdWxkUGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cywg
U2hvd0NvcnJlY3Rpb25QYW5lbE9yTm90IHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCiB7CiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzZWxlY3Rpb25zIGFscmVhZHkgZXhw
YW5kZWQgdG8gd29yZCBib3VuZGFyaWVzLgogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGlmICghY2xpZW50KCkgfHwgIXNwZWxsaW5nUmFuZ2UgfHwgKG1hcmtHcmFtbWFyICYmICFncmFt
bWFyUmFuZ2UpKQorICAgIGlmICghY2xpZW50KCkgfHwgIXNwZWxsaW5nUmFuZ2UgfHwgKHNob3Vs
ZE1hcmtHcmFtbWFyICYmICFncmFtbWFyUmFuZ2UpKQogICAgICAgICByZXR1cm47Ci0gICAgCisK
ICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUgbm9kZSwgYmFpbC4KICAgICBOb2Rl
KiBlZGl0YWJsZU5vZGUgPSBzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpOwogICAgIGlm
ICghZWRpdGFibGVOb2RlIHx8ICFlZGl0YWJsZU5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCkBA
IC0yNTM5LDggKzI1NDUsOCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJh
ZEdyCiAgICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFs
c2U7CiAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZzsKICAgICBSZWZQdHI8UmFuZ2U+IHBhcmFn
cmFwaFJhbmdlOwotICAgIAotICAgIGlmIChtYXJrR3JhbW1hcikgeworCisgICAgaWYgKHNob3Vs
ZE1hcmtHcmFtbWFyKSB7CiAgICAgICAgIC8vIFRoZSBzcGVsbGluZyByYW5nZSBzaG91bGQgYmUg
Y29udGFpbmVkIGluIHRoZSBwYXJhZ3JhcGgtYWxpZ25lZCBleHRlbnNpb24gb2YgdGhlIGdyYW1t
YXIgcmFuZ2UuCiAgICAgICAgIHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBoQWxpZ25lZFJhbmdl
Rm9yUmFuZ2UoZ3JhbW1hclJhbmdlLCBncmFtbWFyUmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBo
U3RyaW5nKTsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJh
Z3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBzcGVsbGluZ1JhbmdlLT5zdGFydFBvc2l0aW9u
KCkpOwpAQCAtMjU1MSwxMCArMjU1NywxMCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyCiAgICAgfQogICAgIHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgPSBzcGVsbGlu
Z1JhbmdlU3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHNwZWxsaW5nUmFu
Z2UpOwogICAgIHBhcmFncmFwaExlbmd0aCA9IHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKTsKLSAg
ICBpZiAocGFyYWdyYXBoTGVuZ3RoIDw9IDAgfHwgKHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCA+
PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmICghbWFya0dyYW1tYXIgfHwgZ3JhbW1hclJhbmdl
U3RhcnRPZmZzZXQgPj0gZ3JhbW1hclJhbmdlRW5kT2Zmc2V0KSkpCisgICAgaWYgKHBhcmFncmFw
aExlbmd0aCA8PSAwIHx8IChzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQgPj0gc3BlbGxpbmdSYW5n
ZUVuZE9mZnNldCAmJiAoIXNob3VsZE1hcmtHcmFtbWFyIHx8IGdyYW1tYXJSYW5nZVN0YXJ0T2Zm
c2V0ID49IGdyYW1tYXJSYW5nZUVuZE9mZnNldCkpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgaWYgKHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpIHsKKworICAgIGlmIChzaG91
bGRQZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKSB7CiAgICAgICAgIGlmIChtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0
U2VsZWN0aW9uKSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHNhdmUgdGhlIGNhcmV0IHBv
c2l0aW9uIHNvIHdlIGNhbiByZXN0b3JlIGl0IGxhdGVyIGlmIG5lZWRlZAogICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKQEAgLTI1NzAsMTQg
KzI1NzYsMTYgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICB1aW50NjRfdCBjaGVja2luZ1R5cGVzID0gMDsKLSAg
ICBpZiAobWFya1NwZWxsaW5nKQorICAgIGlmIChzaG91bGRNYXJrU3BlbGxpbmcpCiAgICAgICAg
IGNoZWNraW5nVHlwZXMgfD0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOwotICAgIGlmIChtYXJr
R3JhbW1hcikKKyAgICBpZiAoc2hvdWxkTWFya0dyYW1tYXIpCiAgICAgICAgIGNoZWNraW5nVHlw
ZXMgfD0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXI7Ci0gICAgaWYgKHBlcmZvcm1UZXh0Q2hlY2tp
bmdSZXBsYWNlbWVudHMpIHsKKyAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCkKKyAg
ICAgICAgY2hlY2tpbmdUeXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjsKKyAgICBp
ZiAoc2hvdWxkUGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cykgewogICAgICAgICBpZiAo
aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgY2hlY2tpbmdU
eXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlTGluazsKICAgICAgICAgaWYgKGlzQXV0b21hdGljUXVv
dGVTdWJzdGl0dXRpb25FbmFibGVkKCkpCkBAIC0yNTg2LDIwICsyNTk0LDI2IEBAIHZvaWQgRWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgIGNoZWNraW5nVHlw
ZXMgfD0gVGV4dENoZWNraW5nVHlwZURhc2g7CiAgICAgICAgIGlmIChpc0F1dG9tYXRpY1RleHRS
ZXBsYWNlbWVudEVuYWJsZWQoKSkKICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4dENo
ZWNraW5nVHlwZVJlcGxhY2VtZW50OwotICAgICAgICBpZiAobWFya1NwZWxsaW5nICYmIGlzQXV0
b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQorICAgICAgICBpZiAoc2hvdWxkTWFy
a1NwZWxsaW5nICYmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQogICAg
ICAgICAgICAgY2hlY2tpbmdUeXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjsKICAg
ICB9CiAgICAgY2xpZW50KCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5j
aGFyYWN0ZXJzKCksIHBhcmFncmFwaExlbmd0aCwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7Ci0g
ICAgCisKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCisgICAgLy8gSWYgdGhpcyBjaGVja2luZyBpcyBvbmx5IGZvciBzaG93aW5n
IGNvcnJlY3Rpb24gcGFuZWwsIHdlIHNob3VsZG4ndCBib3RoZXIgdG8gbWFyayBtaXNzcGVsbGlu
Z3MuCisgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCisgICAgICAgIHNob3VsZE1h
cmtTcGVsbGluZyA9IERvTm90TWFya1NwZWxsaW5nOworI2VuZGlmCisKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAgICBjb25zdCBUZXh0
Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwogICAgICAgICBpbnQgcmVzdWx0
TG9jYXRpb24gPSByZXN1bHQtPmxvY2F0aW9uICsgb2Zmc2V0RHVlVG9SZXBsYWNlbWVudDsKICAg
ICAgICAgaW50IHJlc3VsdExlbmd0aCA9IHJlc3VsdC0+bGVuZ3RoOwotICAgICAgICBpZiAobWFy
a1NwZWxsaW5nICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYg
cmVzdWx0TG9jYXRpb24gPj0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0ICYmIHJlc3VsdExvY2F0
aW9uICsgcmVzdWx0TGVuZ3RoIDw9IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQpIHsKKyAgICAgICAg
aWYgKHNob3VsZE1hcmtTcGVsbGluZyAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlw
ZVNwZWxsaW5nICYmIHJlc3VsdExvY2F0aW9uID49IHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCAm
JiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0
KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlv
biA+PSAwKTsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2Uoc3BlbGxpbmdSYW5nZSwgcmVzdWx0TG9jYXRpb24gLSBzcGVs
bGluZ1JhbmdlU3RhcnRPZmZzZXQsIHJlc3VsdExlbmd0aCk7CiAgICAgICAgICAgICBtaXNzcGVs
bGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRk
TWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7
Ci0gICAgICAgIH0gZWxzZSBpZiAobWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRD
aGVja2luZ1R5cGVHcmFtbWFyICYmIHJlc3VsdExvY2F0aW9uIDwgZ3JhbW1hclJhbmdlRW5kT2Zm
c2V0ICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoID4gZ3JhbW1hclJhbmdlU3RhcnRP
ZmZzZXQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRNYXJrR3JhbW1hciAmJiByZXN1bHQt
PnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcmVzdWx0TG9jYXRpb24gPCBncmFt
bWFyUmFuZ2VFbmRPZmZzZXQgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPiBncmFt
bWFyUmFuZ2VTdGFydE9mZnNldCkgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+
IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgcmVzdWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgICAgICAg
Y29uc3QgR3JhbW1hckRldGFpbCogZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKQEAgLTI2
MDksMTIgKzI2MjMsMTIgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRH
cgogICAgICAgICAgICAgICAgICAgICBncmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRpb24pOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChwZXJmb3JtVGV4
dENoZWNraW5nUmVwbGFjZW1lbnRzICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoIDw9
IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGgg
Pj0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0CisgICAgICAgIH0gZWxzZSBpZiAoKHNob3VsZFBl
cmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMgfHwgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5l
bCkgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPD0gc3BlbGxpbmdSYW5nZUVuZE9m
ZnNldCAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA+PSBzcGVsbGluZ1JhbmdlU3Rh
cnRPZmZzZXQKICAgICAgICAgICAgICAgICAgICAgJiYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hl
Y2tpbmdUeXBlTGluawogICAgICAgICAgICAgICAgICAgICB8fCByZXN1bHQtPnR5cGUgPT0gVGV4
dENoZWNraW5nVHlwZVF1b3RlCiAgICAgICAgICAgICAgICAgICAgIHx8IHJlc3VsdC0+dHlwZSA9
PSBUZXh0Q2hlY2tpbmdUeXBlRGFzaAogICAgICAgICAgICAgICAgICAgICB8fCByZXN1bHQtPnR5
cGUgPT0gVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50Ci0gICAgICAgICAgICAgICAgICAgIHx8
IHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgfHwgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9u
KSkgeyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHRoZSByZXN1bHQg
cmFuZ2UganVzdCBoYXMgdG8gdG91Y2ggdGhlIHNwZWxsaW5nIHJhbmdlLCBzbyB3ZSBjYW4gaGFu
ZGxlIHJlcGxhY2luZyBub24td29yZCB0ZXh0IHN1Y2ggYXMgcHVuY3R1YXRpb24uCiAgICAgICAg
ICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKICAg
ICAgICAgICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IHJlc3VsdC0+cmVwbGFjZW1lbnQubGVu
Z3RoKCk7CkBAIC0yNjQwLDcgKzI2NTQsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyCiAgICAgICAgICAgICAgICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vy
cy5zaXplKCk7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJD
b3VudDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBt
YXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUg
PT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmIHN0YXRpY19jYXN0PGludD4obWFya2Vy
LnN0YXJ0T2Zmc2V0KSA8IGVuZE9mZnNldCAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRP
ZmZzZXQpID4gc3RhcnRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChtYXJrZXIu
dHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgfHwgbWFya2VyLnR5cGUgPT0gRG9j
dW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbikgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJr
ZXIuc3RhcnRPZmZzZXQpIDwgZW5kT2Zmc2V0ICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVu
ZE9mZnNldCkgPiBzdGFydE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICAgICAgZG9SZXBs
YWNlbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTI2NDgsNyArMjY2Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb1JlcGxhY2Vt
ZW50ICYmIHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkpIHsKKyAgICAgICAgICAgIGlmIChkb1JlcGxhY2VtZW50ICYmICFzaG91bGRTaG93Q29y
cmVjdGlvblBhbmVsICYmIHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+c2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpOwog
ICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKQEAgLTI2NTYsMzEg
KzI2NzAsNTQgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAg
ICAgICAgICAgICAgICAgICBkb1JlcGxhY2VtZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmc7CiAg
ICAgICAgICAgICBpZiAoZG9SZXBsYWNlbWVudCkgewogICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUxpbmspIHsKICAgICAgICAgICAgICAgICAgICAg
cmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseUNvbW1h
bmQoQ3JlYXRlTGlua0NvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCByZXN1bHQt
PnJlcGxhY2VtZW50KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkgJiYg
c2hvdWxkSW5zZXJ0VGV4dChyZXN1bHQtPnJlcGxhY2VtZW50LCByYW5nZVRvUmVwbGFjZS5nZXQo
KSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmlu
ZyByZXBsYWNlZFN0cmluZzsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9
PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlc3VsdC0+cmVwbGFjZW1lbnQs
IGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nUmFuZ2VFbmRPZmZz
ZXQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAg
ICAgIG9mZnNldER1ZVRvUmVwbGFjZW1lbnQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRM
ZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiA8IHNlbGVjdGlv
bk9mZnNldCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9mZnNldCArPSByZXBs
YWNlbWVudExlbmd0aCAtIHJlc3VsdExlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQgY29ycmVjdGlvbnMgY2FuIGVhc2ls
eSBiZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3RlZC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFu
Z2UocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0
aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5l
cigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIHJlcGxhY2VkU3RyaW5nKTsKKyNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsICYmIHJlc3Vs
dExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoID09IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgcmVz
dWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBvbmx5IHRoZSBzaG93IGNvcnJlY3Rpb24gcGFuZWwgb24gdGhlIGxh
c3Qgd29yZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRR
dWFkczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlVG9SZXBsYWNlLT50ZXh0UXVhZHMo
dGV4dFF1YWRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSB0ZXh0UXVhZHMuZW5kKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBGbG9hdFJlY3QgdG90YWxCb3VuZGluZ0JveDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoVmVjdG9yPEZsb2F0UXVhZD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dFF1YWRzLmJl
Z2luKCk7IGl0IDwgZW5kOyArK2l0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFs
Qm91bmRpbmdCb3gudW5pdGUoaXQtPmJvdW5kaW5nQm94KCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbiA9IHJhbmdlVG9SZXBsYWNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHJpbmdUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24g
PSByZXBsYWNlZFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudCgpLT5zaG93
Q29ycmVjdGlvblBhbmVsKHRvdGFsQm91bmRpbmdCb3gsIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlD
b3JyZWN0aW9uLCByZXN1bHQtPnJlcGxhY2VtZW50LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRvUmVwbGFjZW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQorI2Vu
ZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
ZG9SZXBsYWNlbWVudCkgeworICAgICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4
dChyZXN1bHQtPnJlcGxhY2VtZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHNw
ZWxsaW5nUmFuZ2VFbmRPZmZzZXQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7
CisgICAgICAgICAgICAgICAgb2Zmc2V0RHVlVG9SZXBsYWNlbWVudCArPSByZXBsYWNlbWVudExl
bmd0aCAtIHJlc3VsdExlbmd0aDsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24g
PCBzZWxlY3Rpb25PZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9mZnNldCAr
PSByZXBsYWNlbWVudExlbmd0aCAtIHJlc3VsdExlbmd0aDsKKyAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKSB7CisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBj
bGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgICAgICAvLyBBZGQgYSBtYXJrZXIgc28gdGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5
IGJlIHVuZG9uZSBhbmQgd29uJ3QgYmUgcmUtY29ycmVjdGVkLgorICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBh
cmFncmFwaFJhbmdlLmdldCgpLCByZXN1bHRMb2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5ndGgpOwor
ICAgICAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1
bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQsIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgaWYgKHNlbGVjdGlv
bkNoYW5nZWQpIHsKKworICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkICYmICFzaG91bGRTaG93Q29y
cmVjdGlvblBhbmVsKSB7CiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGNhcmV0IHBvc2l0aW9uIGlm
IHdlIGhhdmUgbWFkZSBhbnkgcmVwbGFjZW1lbnRzCiAgICAgICAgIHNldEVuZChwYXJhZ3JhcGhS
YW5nZS5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgoc3RhcnRPZk5leHRQYXJhZ3JhcGgocGFyYWdyYXBo
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpKTsKICAgICAgICAgaW50IG5ld0xlbmd0aCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwpAQCAtMjcyMSw3ICsy
NzU4LDggQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbQogI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXJJblJhbmdlcyh0cnVlLCBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgZ3JhbW1h
clNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBmYWxzZSk7CisgICAgTWFya0dy
YW1tYXJPck5vdCBzaG91bGRNYXJrR3JhbW1hciA9IG1hcmtHcmFtbWFyICYmIGlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCgpID8gTWFya0dyYW1tYXIgOiBEb05vdE1hcmtHcmFtbWFyOworICAgIG1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoTWFya1NwZWxsaW5nLCBzcGVs
bGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBzaG91bGRNYXJrR3JhbW1h
ciwgZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBEb05vdFBlcmZv
cm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudCwgRG9Ob3RTaG93Q29ycmVjdGlvblBhbmVsKTsKICNl
bHNlCiAgICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01p
c3NwZWxsaW5ncyhzcGVsbGluZ1NlbGVjdGlvbiwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKQEAg
LTI3MzAsNiArMjc2OCw0MyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tCiAjZW5kaWYKIH0KIAordm9pZCBFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQo
VGltZXI8RWRpdG9yPiopCit7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUo
KS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQo
c2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAg
VmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFy
dCk7CisgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhNYXJrU3Bl
bGxpbmcsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRG9Ob3RNYXJr
R3JhbW1hciwgMCwgRG9Ob3RQZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnQsIFNob3dDb3Jy
ZWN0aW9uUGFuZWwpOworfQorCit2b2lkIEVkaXRvcjo6aGFuZGxlUmVqZWN0ZWRDb3JyZWN0aW9u
KCkKK3sKKyAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNv
cnJlY3Rpb24uZ2V0KCk7CisgICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3Vt
ZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRD
b3JyZWN0aW9uLCBtX3N0cmluZ1RvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbik7Cit9CisKK3ZvaWQg
RWRpdG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKK3sKKyNpZiBQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4zOworICAgIGlm
IChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1
ZSk7CisgICAgaWYgKGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQorICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0YXJ0T25lU2hvdChjb3JyZWN0aW9uUGFuZWxU
aW1lckludGVydmFsKTsKKyNlbmRpZgorfQorCit2b2lkIEVkaXRvcjo6aGFuZGxlQ2FuY2VsT3Bl
cmF0aW9uKCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpCisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChmYWxzZSk7CisjZW5kaWYKK30KKwogUGFzc1JlZlB0cjxS
YW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkK
IHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudEF0UG9pbnQod2lu
ZG93UG9pbnQpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gNjY0ODgpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgdG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50KCk7CiAgICAgYm9vbCBp
c0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKICAgICB2b2lkIHRvZ2dsZUF1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpOwotICAgIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyhib29sIG1hcmtTcGVsbGluZywgUmFuZ2UqIHNwZWxsaW5n
UmFuZ2UsIGJvb2wgbWFya0dyYW1tYXIsIFJhbmdlKiBncmFtbWFyUmFuZ2UsIGJvb2wgcGVyZm9y
bVRleHRDaGVja2luZ1JlcGxhY2VtZW50cyk7CisgICAgZW51bSBNYXJrU3BlbGxpbmdPck5vdCB7
IERvTm90TWFya1NwZWxsaW5nLCBNYXJrU3BlbGxpbmcgfTsKKyAgICBlbnVtIE1hcmtHcmFtbWFy
T3JOb3QgeyBEb05vdE1hcmtHcmFtbWFyLCBNYXJrR3JhbW1hciB9OworICAgIGVudW0gUGVyZm9y
bVRleHRDaGVja2luZ1JlcGxhY2VtZW50T3JOb3QgeyBEb05vdFBlcmZvcm1UZXh0Q2hlY2tpbmdS
ZXBsYWNlbWVudCwgUGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50IH07CisgICAgZW51bSBT
aG93Q29ycmVjdGlvblBhbmVsT3JOb3QgeyBEb05vdFNob3dDb3JyZWN0aW9uUGFuZWwsIFNob3dD
b3JyZWN0aW9uUGFuZWwgfTsKKyAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFySW5SYW5nZXMoTWFya1NwZWxsaW5nT3JOb3QsIFJhbmdlKiBzcGVsbGluZ1JhbmdlLCBNYXJr
R3JhbW1hck9yTm90LCBSYW5nZSogZ3JhbW1hclJhbmdlLCBQZXJmb3JtVGV4dENoZWNraW5nUmVw
bGFjZW1lbnRPck5vdCwgU2hvd0NvcnJlY3Rpb25QYW5lbE9yTm90KTsKICAgICB2b2lkIGNoYW5n
ZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpOwogI2Vu
ZGlmCiAgICAgdm9pZCBhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbiA9IGZhbHNlKTsKQEAgLTI5NCw5ICsyOTgsMTMgQEAgcHVibGljOgogICAgIGJvb2wg
aW5zaWRlVmlzaWJsZUFyZWEoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICBib29sIGluc2lk
ZVZpc2libGVBcmVhKFJhbmdlKikgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4dFZp
c2libGVSYW5nZShSYW5nZSosIGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNl
RmxhZywgYm9vbCB3cmFwRmxhZyk7Ci0gICAgCisKICAgICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFu
Z2UqLCBib29sIHByZXBlbmQpOwogCisgICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKTsK
KyAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyAgICB2b2lkIGhhbmRsZVJl
amVjdGVkQ29ycmVjdGlvbigpOworCiAgICAgdm9pZCBwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7
CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc21hcnRSZXBs
YWNlKTsKIApAQCAtMzE4LDYgKzMyNiw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN0
YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZTsKICAgICBib29sIG1fc2hvdWxkU3R5bGVXaXRoQ1NTOwog
ICAgIE93blB0cjxLaWxsUmluZz4gbV9raWxsUmluZzsKKyAgICBSZWZQdHI8UmFuZ2U+IG1fcmFu
Z2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb247CisgICAgU3RyaW5nIG1fc3RyaW5nVG9CZVJlcGxh
Y2VkQnlDb3JyZWN0aW9uOworICAgIFRpbWVyPEVkaXRvcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1l
cjsKIAogICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIGNh
blNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqKTsKQEAgLTMzNSw4ICszNDYs
OSBAQCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gZmlyc3RWaXNpYmxlUmFuZ2Uo
Y29uc3QgU3RyaW5nJiwgYm9vbCBjYXNlRmxhZyk7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbGFz
dFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcmLCBib29sIGNhc2VGbGFnKTsKLSAgICAKKwogICAg
IHZvaWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG5ld1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKTsK
KyAgICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiogdGltZXIp
OwogICAgIE5vZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKIH07CiAK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY2NDg4KQorKysgV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY5LDYg
KzEwNjksMTQgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVlhbmtBbmRTZWxlY3QoRnJhbWUqIAogICAg
IHJldHVybiB0cnVlOwogfQogCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorc3RhdGljIGJvb2wgZXhlY3V0ZUNhbmNlbE9wZXJh
dGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3Ry
aW5nJikKK3sKKyAgICBmcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpOwor
ICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIC8vIFN1cHBvcnRlZCBmdW5jdGlvbnMKIAog
c3RhdGljIGJvb2wgc3VwcG9ydGVkKEZyYW1lKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKQEAgLTE0
NTUsNiArMTQ2Myw5IEBAIHN0YXRpYyBjb25zdCBDb21tYW5kTWFwJiBjcmVhdGVDb21tYW5kTWEK
ICAgICAgICAgeyAiVW5zZWxlY3QiLCB7IGV4ZWN1dGVVbnNlbGVjdCwgc3VwcG9ydGVkLCBlbmFi
bGVkVmlzaWJsZVNlbGVjdGlvbiwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRp
b24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAogICAgICAgICB7ICJZYW5r
IiwgeyBleGVjdXRlWWFuaywgc3VwcG9ydGVkRnJvbU1lbnVPcktleUJpbmRpbmcsIGVuYWJsZWRJ
bkVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24sIGRv
Tm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAogICAgICAgICB7ICJZYW5rQW5kU2Vs
ZWN0IiwgeyBleGVjdXRlWWFua0FuZFNlbGVjdCwgc3VwcG9ydGVkRnJvbU1lbnVPcktleUJpbmRp
bmcsIGVuYWJsZWRJbkVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJ
bnNlcnRpb24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAorI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAg
ICAgICAgeyAiQ2FuY2VsT3BlcmF0aW9uIiwgeyBleGVjdXRlQ2FuY2VsT3BlcmF0aW9uLCBzdXBw
b3J0ZWRGcm9tTWVudU9yS2V5QmluZGluZywgZW5hYmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5v
bmUsIHZhbHVlTnVsbCwgbm90VGV4dEluc2VydGlvbiwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5E
aXNhYmxlZCB9IH0sCisjZW5kaWYKICAgICB9OwogCiAgICAgLy8gVGhlc2UgdW5zdXBwb3J0ZWQg
Y29tbWFuZHMgYXJlIGxpc3RlZCBoZXJlIHNpbmNlIHRoZXkgYXBwZWFyIGluIHRoZSBNaWNyb3Nv
ZnQKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY2NDg4KQorKysg
V2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcs
NiArMzA3LDEwIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGUKICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZP
bkJvdW5kYXJ5KTsKICAgICAgICAgaWYgKHAxICE9IHAyKQogICAgICAgICAgICAgZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRp
b24ocDEpOworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyNlbmRpZgogICAg
IH0KIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDY2NDg4KQorKysgV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2MCw2ICs0NjAs
MTAgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
VElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCiAgICAgdmlydHVhbCB2b2lk
IGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiwgaW50LCB1aW50NjRfdCwgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4mKSB7IH07CiAjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgdmlydHVhbCB2
b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiwgRWRpdG9yKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoYm9vbCkgeyB9CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRh
aWwmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZChjb25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUko
Ym9vbCkgeyB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNv
cmUvcGFnZS9FZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
I2RlZmluZSBFZGl0b3JDbGllbnRfaAogCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTEs
NiArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRp
b247CiBjbGFzcyBFZGl0Q29tbWFuZDsKK2NsYXNzIEVkaXRvcjsKIGNsYXNzIEVsZW1lbnQ7CiBj
bGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxFbGVtZW50OwpAQCAtMTc3LDYgKzE3OSwxMiBAQCBwdWJs
aWM6CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIHVpbnQ2NF90IGNoZWNr
aW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKSA9IDA7CiAjZW5k
aWYKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NO
T1dfTEVPUEFSRCkKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBFZGl0b3IqKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9u
QWNjZXB0ZWQpID0gMDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBk
ZXRhaWwpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVs
bGVkV29yZChjb25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGlu
Z1VJKGJvb2wgc2hvdykgPSAwOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNv
cmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDgsOCArMTQ0OCwxMCBAQCB2
b2lkIEZyYW1lOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvCiAKICAgICAgICAgLy8gVGhp
cyBvbmx5IGVyYXNlcyBtYXJrZXJzIHRoYXQgYXJlIGluIHRoZSBmaXJzdCB1bml0ICh3b3JkIG9y
IHNlbnRlbmNlKSBvZiB0aGUgc2VsZWN0aW9uLgogICAgICAgICAvLyBQZXJoYXBzIHBlY3VsaWFy
LCBidXQgaXQgbWF0Y2hlcyBBcHBLaXQuCi0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRS
YW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICAgICAgaWYg
KFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRS
YW5nZSgpKSB7CiAgICAgICAgICAgICBkb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtl
cnMod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwg
RG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoUmVm
UHRyPFJhbmdlPiBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6
ZWRSYW5nZSgpKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJr
ZXJzKHNlbnRlbmNlUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICB9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJl
dmlzaW9uIDY2NDg4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDcgKzI3MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYpOwogCiAgICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEludFBvaW50JiwgaW50
IHdpZHRoLCBib29sIHByaW50aW5nKTsKLSAgICAgICAgdm9pZCBkcmF3TGluZUZvck1pc3NwZWxs
aW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoLCBib29sIGdyYW1tYXIp
OworICAgICAgICBlbnVtIFRleHRDaGVja2luZ0xpbmVTdHlsZSB7CisgICAgICAgICAgICBUZXh0
Q2hlY2tpbmdJbnZhbGlkTGluZVN0eWxlID0gLTEsCisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdT
cGVsbGluZ0xpbmVTdHlsZSwKKyAgICAgICAgICAgIFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5
bGUsCisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZQorICAgICAg
ICB9OworICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEludFBvaW50
JiwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpOwogCiAgICAgICAgIGJvb2wgcGFp
bnRpbmdEaXNhYmxlZCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFBhaW50aW5nRGlzYWJsZWQo
Ym9vbCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0TWFjLm1tCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTMgKzI1LDExIEBACiAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250
ZXh0LmgiCi0KICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCisj
aW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxBcHBLaXQvQXBwS2l0
Lmg+CiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKLSNpbXBvcnQgIldlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UuaCIKLQogQGNsYXNzIE5TQ29sb3I7CiAKIC8vIEZJWE1FOiBNb3JlIG9mIHRo
aXMgc2hvdWxkIHVzZSBDb3JlR3JhcGhpY3MgaW5zdGVhZCBvZiBBcHBLaXQuCkBAIC0xMTksNyAr
MTE3LDcgQEAgc3RhdGljIE5TQ29sb3IqIGNyZWF0ZVBhdHRlcm5Db2xvcihOU1N0cgogfQogCiAv
LyBXZWJLaXQgb24gTWFjIGlzIGEgc3RhbmRhcmQgcGxhdGZvcm0gY29tcG9uZW50LCBzbyBpdCBt
dXN0IHVzZSB0aGUgc3RhbmRhcmQgcGxhdGZvcm0gYXJ0d29yayBmb3IgdW5kZXJsaW5lLgotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29u
c3QgSW50UG9pbnQmIHBvaW50LCBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBJbnRQb2ludCYgcG9pbnQs
IGludCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyNywyMyArMTI1LDQxIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWwKICAgICAvLyBUaGVzZSBhcmUg
dGhlIHNhbWUgZm9yIG1pc3NwZWxsaW5nIG9yIGJhZCBncmFtbWFyLgogICAgIGludCBwYXR0ZXJu
SGVpZ2h0ID0gY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzczsKICAgICBpbnQgcGF0dGVybldpZHRo
ID0gY01pc3NwZWxsaW5nTGluZVBhdHRlcm5XaWR0aDsKLSAKKwogICAgIGJvb2wgdXNpbmdEb3Q7
CiAgICAgTlNDb2xvciAqcGF0dGVybkNvbG9yOwotICAgIGlmIChncmFtbWFyKSB7Ci0gICAgICAg
IC8vIENvbnN0YW50cyBmb3IgZ3JhbW1hciBwYXR0ZXJuIGNvbG9yLgotICAgICAgICBzdGF0aWMg
Ym9vbCB1c2luZ0RvdEZvckdyYW1tYXIgPSBmYWxzZTsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChSZXRhaW5QdHI8TlNDb2xvcj4sIGdyYW1tYXJQYXR0ZXJuQ29sb3IsIChjcmVhdGVQYXR0
ZXJuQ29sb3IoQCJHcmFtbWFyRG90IiwgW05TQ29sb3IgZ3JlZW5Db2xvcl0sIHVzaW5nRG90Rm9y
R3JhbW1hcikpKTsKLSAgICAgICAgCi0gICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RGb3JHcmFt
bWFyOwotICAgICAgICBwYXR0ZXJuQ29sb3IgPSBncmFtbWFyUGF0dGVybkNvbG9yLmdldCgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcgcGF0dGVybiBj
b2xvci4KLSAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JTcGVsbGluZyA9IGZhbHNlOwot
ICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxOU0NvbG9yPiwgc3BlbGxpbmdQ
YXR0ZXJuQ29sb3IsIChjcmVhdGVQYXR0ZXJuQ29sb3IoQCJTcGVsbGluZ0RvdCIsIFtOU0NvbG9y
IHJlZENvbG9yXSwgdXNpbmdEb3RGb3JTcGVsbGluZykpKTsKLSAgICAgICAgCi0gICAgICAgIHVz
aW5nRG90ID0gdXNpbmdEb3RGb3JTcGVsbGluZzsKLSAgICAgICAgcGF0dGVybkNvbG9yID0gc3Bl
bGxpbmdQYXR0ZXJuQ29sb3IuZ2V0KCk7CisgICAgc3dpdGNoIChzdHlsZSkgeworICAgICAgICBj
YXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBDb25zdGFudHMgZm9yIHNwZWxsaW5nIHBhdHRlcm4gY29sb3IuCisgICAgICAgICAgICBz
dGF0aWMgYm9vbCB1c2luZ0RvdEZvclNwZWxsaW5nID0gZmFsc2U7CisgICAgICAgICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxOU0NvbG9yPiwgc3BlbGxpbmdQYXR0ZXJuQ29sb3Is
IChjcmVhdGVQYXR0ZXJuQ29sb3IoQCJTcGVsbGluZ0RvdCIsIFtOU0NvbG9yIHJlZENvbG9yXSwg
dXNpbmdEb3RGb3JTcGVsbGluZykpKTsKKyAgICAgICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RG
b3JTcGVsbGluZzsKKyAgICAgICAgICAgIHBhdHRlcm5Db2xvciA9IHNwZWxsaW5nUGF0dGVybkNv
bG9yLmdldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBU
ZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBD
b25zdGFudHMgZm9yIGdyYW1tYXIgcGF0dGVybiBjb2xvci4KKyAgICAgICAgICAgIHN0YXRpYyBi
b29sIHVzaW5nRG90Rm9yR3JhbW1hciA9IGZhbHNlOworICAgICAgICAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChSZXRhaW5QdHI8TlNDb2xvcj4sIGdyYW1tYXJQYXR0ZXJuQ29sb3IsIChjcmVhdGVQ
YXR0ZXJuQ29sb3IoQCJHcmFtbWFyRG90IiwgW05TQ29sb3IgZ3JlZW5Db2xvcl0sIHVzaW5nRG90
Rm9yR3JhbW1hcikpKTsKKyAgICAgICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RGb3JHcmFtbWFy
OworICAgICAgICAgICAgcGF0dGVybkNvbG9yID0gZ3JhbW1hclBhdHRlcm5Db2xvci5nZXQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgICAgICBjYXNlIFRleHRD
aGVja2luZ1JlcGxhY2VtZW50TGluZVN0eWxlOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBD
b25zdGFudHMgZm9yIHNwZWxsaW5nIHBhdHRlcm4gY29sb3IuCisgICAgICAgICAgICBzdGF0aWMg
Ym9vbCB1c2luZ0RvdEZvclNwZWxsaW5nID0gZmFsc2U7CisgICAgICAgICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFJldGFpblB0cjxOU0NvbG9yPiwgc3BlbGxpbmdQYXR0ZXJuQ29sb3IsIChjcmVh
dGVQYXR0ZXJuQ29sb3IoQCJDb3JyZWN0aW9uRG90IiwgW05TQ29sb3IgYmx1ZUNvbG9yXSwgdXNp
bmdEb3RGb3JTcGVsbGluZykpKTsKKyAgICAgICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RGb3JT
cGVsbGluZzsKKyAgICAgICAgICAgIHBhdHRlcm5Db2xvciA9IHNwZWxsaW5nUGF0dGVybkNvbG9y
LmdldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIE1ha2Ugc3VyZSB0
byBkcmF3IG9ubHkgY29tcGxldGUgZG90cy4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjgsNiArNzY4LDIwIEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXAKICAgICAgICAgY29udGV4dC0+Y2xlYXJTaGFkb3co
KTsKIH0KIAorc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5nTGluZVN0eWxlIHRl
eHRDaGVja2luZ0xpbmVTdHlsZUZvck1hcmtlclR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGUgbWFya2VyVHlwZSkKK3sKKyAgICBzd2l0Y2ggKG1hcmtlclR5cGUpIHsKKyAgICBjYXNlIERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZzoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6
VGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU7CisgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6
R3JhbW1hcjoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5nR3Jh
bW1hckxpbmVTdHlsZTsKKyAgICBjYXNlIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudDoKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5nUmVwbGFjZW1lbnRMaW5l
U3R5bGU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4
dENoZWNraW5nSW52YWxpZExpbmVTdHlsZTsKKyAgICB9Cit9CisKIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBpbnQg
dHgsIGludCB0eSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJp
bnQgc3BlbGxpbmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQpAQCAtODMxLDcgKzg0NSw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW0KICAgICAgICAgLy8gSW4g
bGFyZ2VyIGZvbnRzLCB0aG91Z2gsIHBsYWNlIHRoZSB1bmRlcmxpbmUgdXAgbmVhciB0aGUgYmFz
ZWxpbmUgdG8gcHJldmVudCBhIGJpZyBnYXAuCiAgICAgICAgIHVuZGVybGluZU9mZnNldCA9IGJh
c2VsaW5lICsgMjsKICAgICB9Ci0gICAgcHQtPmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdy
YW1tYXIoSW50UG9pbnQodHggKyBtX3ggKyBzdGFydCwgdHkgKyBtX3kgKyB1bmRlcmxpbmVPZmZz
ZXQpLCB3aWR0aCwgZ3JhbW1hcik7CisgICAgcHQtPmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKElu
dFBvaW50KHR4ICsgbV94ICsgc3RhcnQsIHR5ICsgbV95ICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lk
dGgsIHRleHRDaGVja2luZ0xpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLnR5cGUpKTsKIH0K
IAogdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRl
eHQqIHB0LCBpbnQgdHgsIGludCB0eSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250KQpAQCAtODk4LDEwICs5MTIsMTAgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycwogICAgICAgICAgICAgY2Fz
ZSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjoKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nOgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1l
bnQ6CisgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb246
CiAgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmQpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoOgogICAgICAgICAgICAgICAgIGlm
ICghYmFja2dyb3VuZCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC05MzMsNiAr
OTQ3LDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQ6CiAgICAgICAgICAgICAgICAgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcih0
eCwgdHksIG1hcmtlciwgc3R5bGUsIGZvbnQpOworICAgICAgICAgICAgICAgIHBhaW50U3BlbGxp
bmdPckdyYW1tYXJNYXJrZXIocHQsIHR4LCB0eSwgbWFya2VyLCBzdHlsZSwgZm9udCwgZmFsc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtl
cjo6UmVqZWN0ZWRDb3JyZWN0aW9uOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6
IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2NjQ4OCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMTAtMDgtMzEgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1
dG9jb3JyZWN0aW9uIFVJIG9uIE1hYyBPUyBYLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5NTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyOTk2
MjE+CisKKyAgICAgICAgU2VlIGRldGFpbGVkIGhpZ2ggbGV2ZWwgZGVzY3JpcHRpb24gaW4gV2Vi
Q29yZS9DaGFuZ2VMb2cuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hv
d0NvcnJlY3Rpb25QYW5lbCk6IER1bW15IGltcGxlbWVudGF0aW9uLgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOiBEaXR0bworCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDogQWRkZWQg
bmV3IG1ldGhvZHMgZGVjbGFyZWQgaW4gYmFzZSBjbGFzcy4KKwogMjAxMC0wOC0zMSAgWm9sdGFu
IEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBCdWlsZCBmaXggYWZ0ZXIg
cjY2NDQ4IG9uIFdlYktpdDIuCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gNjY0ODgpCisrKyBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDY5LDQgKzQ2OSwxNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6c2V0
SW5wdXRNZXRob2RTdGF0CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAorI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6
c2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIFdlYkNvcmU6OkVkaXRvciopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJ
KHJldmlzaW9uIDY2NDg4KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSw5IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi1wcml2YXRlOiAgICAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHBhZ2VEZXN0cm95ZWQoKTsKLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVS
YW5nZShXZWJDb3JlOjpSYW5nZSopOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93RGVsZXRl
SW50ZXJmYWNlKFdlYkNvcmU6OkhUTUxFbGVtZW50Kik7CiAgICAgdmlydHVhbCBib29sIHNtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOyAKQEAgLTEzMSw3ICsxMzEsMTAgQEAgcHJpdmF0ZTogICAg
CiAgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFdURjo6U3RyaW5nJiwg
VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3Nlcyk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJ
bnB1dE1ldGhvZFN0YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUo
Ym9vbCBlbmFibGVkKTsKLQorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xF
T1BBUkQpCisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3Ry
aW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
LCBXZWJDb3JlOjpFZGl0b3IqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChib29sIGNvcnJlY3Rpb25BY2NlcHRlZCk7CisjZW5kaWYKICAgICBXZWJQYWdlKiBtX3Bh
Z2U7CiB9OwogCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNjY0ODgpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEwLTA4LTMxICBKaWEgUHUgIDxq
cHVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBzdXBwb3J0IGZvciBhdXRvY29ycmVjdGlvbiBVSSBvbiBNYWMgT1MgWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTU4CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83Mjk5NjIxPgorCisgICAgICAgIFNlZSBkZXRhaWxlZCBoaWdo
IGxldmVsIGRlc2NyaXB0aW9uIGluIFdlYkNvcmUvQ2hhbmdlTG9nLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6IEFkZGVkIG5ldyBtZW1iZXIgbWV0aG9kcyBk
ZWNsYXJlZCBpbiBFZGl0b3JDbGllbnQuIEFkZGVkIG1fY29ycmVjdGlvblBhbmVsVGFnIHRvIHN0
b3JlIHRoZSBJRCBvZiBjdXJyZW50IGF1dG9jb3JyZWN0aW9uIFVJIG9iamVjdC4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRv
ckNsaWVudDo6V2ViRWRpdG9yQ2xpZW50KTogSW5pdGlhbGl6ZSBtX2NvcnJlY3Rpb25QYW5lbFRh
Zy4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6fldlYkVkaXRvckNsaWVudCk6IE1ha2Ugc3Vy
ZSB0aGUgYXV0b2NvcnJlY3Rpb24gVUkgaXMgZGlzbWlzc2VkIGJlZm9yZSBkZXN0cm95aW5nIHRo
ZSBvYmplY3QuCisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxl
Y3Rpb24pOiBEaXNtaXNzIGF1dG9jb3JyZWN0aW9uIFVJIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24g
Y2hhbmdlcy4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6
IFNob3cgYXV0b2NvcnJlY3Rpb24gVUkuCisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpc21p
c3NDb3JyZWN0aW9uUGFuZWwpOiBEaXNtaXNzIGF1dG9jb3JyZWN0aW9uIFVJLgorCiAyMDEwLTA4
LTMwICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmgJKHJldmlzaW9uIDY2NDg4KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCisjaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9FZGl0b3JDbGllbnQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0
Zi9Gb3J3YXJkLmg+CkBAIC0zOCw3ICszOSw3IEBACiBjbGFzcyBXZWJFZGl0b3JDbGllbnQgOiBw
dWJsaWMgV2ViQ29yZTo6RWRpdG9yQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXZWJFZGl0b3JDbGll
bnQoV2ViVmlldyAqKTsKLSAgICAKKyAgICB2aXJ0dWFsIH5XZWJFZGl0b3JDbGllbnQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCgpOwpAQCAtMTI5LDEyICsxMzAsMTkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYsIFdURjo6
VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3Nlcyk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJ
bnB1dE1ldGhvZFN0YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUo
Ym9vbCBlbmFibGVkKTsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9Q
QVJEKQorICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywg
V2ViQ29yZTo6RWRpdG9yKik7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQpOworI2VuZGlmCiBwcml2YXRlOgogICAgIHZvaWQg
cmVnaXN0ZXJDb21tYW5kRm9yVW5kb09yUmVkbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21t
YW5kPiwgYm9vbCBpc1JlZG8pOwogICAgIFdlYkVkaXRvckNsaWVudCgpOwotICAgIAorCiAgICAg
V2ViVmlldyAqbV93ZWJWaWV3OwogICAgIFJldGFpblB0cjxXZWJFZGl0b3JVbmRvVGFyZ2V0PiBt
X3VuZG9UYXJnZXQ7Ci0gICAgCiAgICAgYm9vbCBtX2hhdmVVbmRvUmVkb09wZXJhdGlvbnM7CisK
KyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIE5TSW50
ZWdlciBtX2NvcnJlY3Rpb25QYW5lbFRhZzsKKyNlbmRpZgogfTsKSW5kZXg6IFdlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiA2NjQ4OCkKKysr
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw2ICs2NCw5IEBACiAjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuaD4KICNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvVGhyZWFkaW5n
Lmg+CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpbXBv
cnQgPEFwcEtpdC9OU1RleHRDaGVja2VyLmg+CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtMTcxLDcgKzE3NCwxNyBAQCBXZWJFZGl0
b3JDbGllbnQ6OldlYkVkaXRvckNsaWVudChXZWJWaWV3CiAgICAgOiBtX3dlYlZpZXcod2ViVmll
dykKICAgICAsIG1fdW5kb1RhcmdldChbW1tXZWJFZGl0b3JVbmRvVGFyZ2V0IGFsbG9jXSBpbml0
XSBhdXRvcmVsZWFzZV0pCiAgICAgLCBtX2hhdmVVbmRvUmVkb09wZXJhdGlvbnMoZmFsc2UpCisj
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAsIG1fY29y
cmVjdGlvblBhbmVsVGFnKC0xKQorI2VuZGlmCit7Cit9CisKK1dlYkVkaXRvckNsaWVudDo6fldl
YkVkaXRvckNsaWVudCgpCiB7CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1df
TEVPUEFSRCkKKyAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOworI2VuZGlmCiB9CiAK
IGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgp
CkBAIC0yODYsNiArMjk5LDEwIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFu
Z2VkU2UKIHsKICAgICBbbV93ZWJWaWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsKIAorI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbCh0cnVlKTsKKyNlbmRpZgorCiAgICAgLy8gRklYTUU6IFRoaXMgcXVpcmsgaXMgbmVl
ZGVkIGR1ZSB0byA8cmRhcjovL3Byb2JsZW0vNTAwOTYyNT4gLSBXZSBjYW4gcGhhc2UgaXQgb3V0
IG9uY2UgQXBlcnR1cmUgY2FuIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igb24gdGhlaXIgZW5kCiAg
ICAgaWYgKCFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9V
VF9BUEVSVFVSRV9RVUlSSykgJiYgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRp
Zmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLkFwZXJ0dXJlIl0pCiAgICAgICAgIHJl
dHVybjsKQEAgLTc5MCw2ICs4MDcsMzUgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNw
ZWxsaW5nVUlXaQogI2VuZGlmCiB9CiAKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwo
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIEVkaXRv
ciogZWRpdG9yKSB7CisgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKKworICAgIE5T
UmVjdCBib3VuZGluZ0JveEFzTlNSZWN0ID0gYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nOwor
ICAgIE5TUmVjdCB3ZWJWaWV3RnJhbWUgPSBtX3dlYlZpZXcuZnJhbWU7CisgICAgYm91bmRpbmdC
b3hBc05TUmVjdC5vcmlnaW4ueSA9IHdlYlZpZXdGcmFtZS5zaXplLmhlaWdodC1OU01heFkoYm91
bmRpbmdCb3hBc05TUmVjdCk7CisKKyAgICAvLyBOZWVkIHRvIGV4cGxpY2l0bHkgdXNlIHRoZXNl
IGxvY2FsIE5TU3RyaW5nIG9iamVjdHMsIGJlY2F1c2UgdGhlIEMrKyByZWZlcmVuY2VzIG1heSBi
ZSBpbnZhbGlkYXRlZCBieSB0aGUgdGltZSB0aGUgYmxvY2sgYmVsb3cgaXMgZXhlY3V0ZWQuCisg
ICAgTlNTdHJpbmcgKnJlcGxhY2VkU3RyaW5nQXNOU1N0cmluZyA9IHJlcGxhY2VkU3RyaW5nOwor
ICAgIE5TU3RyaW5nICpyZXBsYWNlbWVudFN0cmluZ0FzTlNTdHJpbmcgPSByZXBsYWNlbWVudFN0
cmluZzsKKworICAgIG1fY29ycmVjdGlvblBhbmVsVGFnID0gW1tOU1NwZWxsQ2hlY2tlciBzaGFy
ZWRTcGVsbENoZWNrZXJdIHNob3dDb3JyZWN0aW9uOnJlcGxhY2VtZW50U3RyaW5nQXNOU1N0cmlu
ZyBmb3JTdHJpbmdJblJlY3Q6Ym91bmRpbmdCb3hBc05TUmVjdCB2aWV3Om1fd2ViVmlldyBjb21w
bGV0aW9uSGFuZGxlcjpeKEJPT0wgYWNjZXB0ZWQpIHsKKyAgICAgICAgaWYgKCFhY2NlcHRlZCkg
eworICAgICAgICAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHJlY29y
ZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmVqZWN0ZWQgdG9Db3JyZWN0aW9uOnJlcGxh
Y2VtZW50U3RyaW5nQXNOU1N0cmluZyBmb3JXb3JkOnJlcGxhY2VkU3RyaW5nQXNOU1N0cmluZyBs
YW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpbbV93ZWJWaWV3IHNwZWxsQ2hlY2tl
ckRvY3VtZW50VGFnXV07CisgICAgICAgICAgICBlZGl0b3ItPmhhbmRsZVJlamVjdGVkQ29ycmVj
dGlvbigpOworICAgICAgICB9CisgICAgfV07Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpk
aXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKQoreworICAgIGlm
IChtX2NvcnJlY3Rpb25QYW5lbFRhZyA+PSAwKSB7CisgICAgICAgIFtbTlNTcGVsbENoZWNrZXIg
c2hhcmVkU3BlbGxDaGVja2VyXSBkaXNtaXNzQ29ycmVjdGlvbjptX2NvcnJlY3Rpb25QYW5lbFRh
ZyBhY2NlcHRDb3JyZWN0aW9uOmNvcnJlY3Rpb25BY2NlcHRlZF07CisgICAgICAgIG1fY29ycmVj
dGlvblBhbmVsVGFnID0gLTE7CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlz
c3BlbGxlZFdvcmQpCiB7CiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJd
IHVwZGF0ZVNwZWxsaW5nUGFuZWxXaXRoTWlzc3BlbGxlZFdvcmQ6bWlzc3BlbGxlZFdvcmRdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66092</attachid>
            <date>2010-08-31 13:21:01 -0700</date>
            <delta_ts>2010-08-31 14:56:02 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>WebKitAutoCorrection.patch</filename>
            <type>text/plain</type>
            <size>49281</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMTAtMDgtMzEgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yIGF1dG9jb3JyZWN0aW9uIFVJIG9uIE1hYyBPUyBYLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5NTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzcyOTk2MjE+CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgU2V2
ZXJhbCBuZXcgbWVtYmVyIG1ldGhvZHMgYXJlIGFkZGVkIHRvIEVkaXRvckNsaWVudCBmb3IgY29t
bXVuaWNhdGlvbiBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktpdC4gQSBuZXcgaGFuZGxlciwgZXhl
Y3V0ZUNhbmNlbE9wZXJhdGlvbigpLCBpcyBhZGRlZCB0byBFZGl0b3JDb21tYW5kLmNwcCBzbyB0
aGF0IFdlYkNvcmUgY2FuIGludGVyY2VwdCB0aGUgRVNDIGtleSBldmVudCB0byBkaXNtaXNzIGF1
dG9jb3JyZWN0aW9uIFVJLiBBIG5ldyBEb2N1bWVudE1hcmtlciB2YWx1ZSwgUmVqZWN0ZWRDb3Jy
ZWN0aW9uLCBpcyBhZGRlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjb3JyZWN0aW9ucyB0aGF0IHVz
ZXIgaGFzIHJlamVjdGVkLCBzbyB0aGF0IGl0IHdpbGwgbm90IGJlIHN1Z2dlc3RlZCBhZ2FpbiBs
YXRlci4gVGhlIGF1dG9jb3JyZWN0aW9uIGlzIGRyaXZlbiBieSBhIHRpbWVyLiBFdmVyeSB0aW1l
IHRoZSBlZGl0b3IgaW5zZXJ0cyBhIG5ldyBsZXR0ZXIsIHRoZSB0aW1lciBpcyByZXNldC4gSWYg
dGhlIHRpbWVyIGZpcmVzLCBpdCBtZWFucyBuZWl0aGVyIGhhcyB1c2VyIGVudGVyZWQgYW55IG5l
dyBsZXR0ZXIgZm9yIGN1cnJlbnQgd29yZCwgbm9yIGhhcyBoZSBlbnRlcmVkIHdoaXRlc3BhY2Ug
b3IgcHVuY3R1YXRpb24gdG8gY29tcGxldGUgdGhlIHdvcmQuIEluIHRoaXMgY2FzZSwgd2UgcXVl
cnkgZm9yIGF1dG9jb3JyZWN0aW9uLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IFVwZGF0
ZWQKKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlci5oOiBBZGRlZCBSZWplY3RlZENvcnJl
Y3Rpb24gdG8gaW5kaWNhdGUgd29yZCBvbiB3aGljaCB1c2VyIGhhcyByZWplY3RlZCBhdXRvY29y
cmVjdGlvbi4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKTogSW5pdGlhbGl6ZSBhdXRvY29ycmVjdGlvbiB0aW1lci4KKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6fkVkaXRvcik6IE1ha2Ugc3VyZSBhdXRvY29ycmVjdGlv
biBVSSBpcyBkaXNtaXNzIGJlZm9yZSBkZXN0cm95aW5nIEVkaXRvciBvYmplY3QuCisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24p
OiBBZG9wdGVkIG5ldyBzaWduYXR1cmUgb2YgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXJJblJhbmdlcygpLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKTogQWRkZWQgYW4gYXJndW1lbnQgdG8gaW5kaWNhdGUg
d2hldGhlciB3ZSB3YW50IHRvIHNob3cgYXV0b2NvcnJlY3Rpb24gVUkuIEFkZGVkIGNvZGUgdG8g
c2hvdyBhdXRvY29ycmVjdGlvbiBVSSBpZiBpdCBpcyBuZWNlc3NhcnkuIFJlcGxhY2VkIGFsbCBm
b3VyIGJvb2xlYW4gYXJndW1lbnRzIHdpdGggZW51bSB0byBpbXByb3ZlIHJlYWRhYmlsaXR5Lgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcik6
QWRvcHRlZCBuZXcgc2lnbmF0dXJlIG9mIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29ycmVjdGlvblBhbmVsVGlt
ZXJGaXJlZCk6IENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgc2hvdyBhdXRvY29ycmVjdGlvbiBV
SSB3aGVuIHVzZXIgcGF1c2VzIGR1cmluZyB0eXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbik6IFVwZGF0ZSB1c2VyIGRpY3Rpb25hcnkgd2hl
biBhbiBhdXRvY29ycmVjdGlvbiBpcyByZWplY3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcik6IFN0YXJ0IGF1dG9jb3JyZWN0aW9uIHRpbWVy
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOiBEaXNt
aXNzIGF1dG9jb3JyZWN0aW9uIFVJIHdoZW4gRVNDIGtleSBpcyBwcmVzc2VkLgorCisgICAgICAg
ICogZWRpdGluZy9FZGl0b3IuaDogQWRkZWQgYXV0b2NvcnJlY3Rpb24gcmVsYXRlZCBtZW1iZXIg
bWV0aG9kcyBhbmQgdmFyaWFibGVzLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVDYW5jZWxPcGVyYXRpb24pOiBIYW5kbGUg
RVNDIGtleSBldmVudC4gRGlzbWlzcyBhdXRvY29ycmVjdGlvbiBVSS4KKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUNvbW1hbmRNYXApOiBVcGRhdGVkIGZvciBleGVjdXRlQ2FuY2VsT3BlcmF0aW9u
KCkuCisKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKTogUmVzZXQg
YXV0b2NvcnJlY3Rpb24gdGltZXIgYWZ0ZXIgaW5zZXJ0aW9uLgorCisgICAgICAgICogbG9hZGVy
L0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNo
b3dDb3JyZWN0aW9uUGFuZWwpOiBEdW1teSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKTogRGl0dG8KKwor
ICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6IEFkZGVkIG1ldGhvZHMgZm9yIGNvbW11bmlj
YXRpb24gYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgcmVnYXJkaW5nIGF1dG9jb3JyZWN0aW9u
LgorCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6IERpc21pc3MgYXV0b2NvcnJlY3Rpb24gVUkuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDogQWRkZWQgZW51
bSBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgdG8gc3BlY2lmeSB0aGUgdW5kZXJsaW5lIGZvciBkaWZm
ZXJlbnQgdHlwZSBvZiB0ZXh0IGNoZWNraW5nIHJlc3VsdC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKTogUmVwbGFjZWQgZHJhd0xp
bmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcigpIHdpdGggdGhpcyBtZXRob2QgaW4gb3JkZXIg
dG8gZHJhdyB1bmRlcmxpbmUgb24gYXV0b2NvcnJlY3RlZCB3b3JkLgorCisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENoZWNraW5n
TGluZVN0eWxlRm9yTWFya2VyVHlwZSk6IFJldHVybiBsaW5lIHN0eWxlIGZvciBhIGdpdmVuIGRv
Y3VtZW50IG1hcmtlciB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFp
bnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcik6IFJlcGxhY2VkIGRyYXdMaW5lRm9yTWlzc3BlbGxp
bmdPckJhZEdyYW1tYXIoKSB3aXRoIGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKCkuCisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2Vycyk6IEhhbmRsZSBu
ZXcgbWFya2VyIHZhbHVlLCBSZWplY3RlZENvcnJlY3Rpb24uCisKIDIwMTAtMDgtMzEgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDY2NDg4KQorKysgV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNjIxLDYgKzYyMSw3IEBAIF9fWk43V2ViQ29yZTZF
ZGl0b3IyMWFwcGx5U3R5bGVUb1NlbGVjdGkKIF9fWk43V2ViQ29yZTZFZGl0b3IyMWlzU2VsZWN0
aW9uTWlzc3BlbGxlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjNzZXRCYXNlV3JpdGluZ0RpcmVj
dGlvbkVOU18xNldyaXRpbmdEaXJlY3Rpb25FCiBfX1pON1dlYkNvcmU2RWRpdG9yMjRhZHZhbmNl
VG9OZXh0TWlzc3BlbGxpbmdFYgorX19aTjdXZWJDb3JlNkVkaXRvcjI0aGFuZGxlUmVqZWN0ZWRD
b3JyZWN0aW9uRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNh
bEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBf
X1pON1dlYkNvcmU2RWRpdG9yMjZpbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CkluZGV4OiBX
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50TWFya2VyLmgJKHJldmlzaW9uIDY2NDg4KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnRN
YXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCBzdHJ1Y3QgRG9jdW1lbnRN
YXJrZXIgewogICAgICAgICBTcGVsbGluZywKICAgICAgICAgR3JhbW1hciwKICAgICAgICAgVGV4
dE1hdGNoLAotICAgICAgICBSZXBsYWNlbWVudAorICAgICAgICBSZXBsYWNlbWVudCwKKyAgICAg
ICAgUmVqZWN0ZWRDb3JyZWN0aW9uCiAgICAgfTsKIAogICAgIE1hcmtlclR5cGUgdHlwZTsKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUzLDExICsxMDUzLDE2IEBAIEVkaXRvcjo6RWRp
dG9yKEZyYW1lKiBmcmFtZSkKICAgICAvLyBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LCBzaW5jZSBt
b3N0IGVkaXRvcnMgd2FudCB0aGlzIGJlaGF2aW9yICh0aGlzIG1hdGNoZXMgSUUgYnV0IG5vdCBG
RikuCiAgICAgLCBtX3Nob3VsZFN0eWxlV2l0aENTUyhmYWxzZSkKICAgICAsIG1fa2lsbFJpbmco
YWRvcHRQdHIobmV3IEtpbGxSaW5nKSkKLXsgCisgICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVy
KHRoaXMsICZFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7CiB9CiAKIEVkaXRv
cjo6fkVkaXRvcigpCiB7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50
KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7CisjZW5kaWYKIH0KIAogdm9pZCBFZGl0
b3I6OmNsZWFyKCkKQEAgLTIzNTEsMjIgKzIzNTYsMjMgQEAgYm9vbCBFZGl0b3I6OnNwZWxsaW5n
UGFuZWxJc1Nob3dpbmcoKQogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGlu
Z1RvUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwKQogewogI2lmIFBMQVRGT1JNKE1B
QykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpCi0gICAgYm9vbCBtYXJrU3BlbGxpbmcgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpOwotICAgIGJvb2wgbWFya0dyYW1tYXIgPSBtYXJrU3BlbGxpbmcgJiYgaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgYm9vbCBwZXJmb3JtVGV4dENoZWNraW5nUmVw
bGFjZW1lbnRzID0gaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKSAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJs
ZWQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtYXJrU3Bl
bGxpbmcgJiYgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpOworICAgIE1h
cmtTcGVsbGluZ09yTm90IG1hcmtTcGVsbGluZyA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCkgPyBNYXJrU3BlbGxpbmcgOiBEb05vdE1hcmtTcGVsbGluZzsKKyAgICBNYXJrR3Jh
bW1hck9yTm90IG1hcmtHcmFtbWFyID0gbWFya1NwZWxsaW5nICYmIGlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCgpID8gTWFya0dyYW1tYXIgOiBEb05vdE1hcmtHcmFtbWFyOworICAgIFBlcmZvcm1U
ZXh0Q2hlY2tpbmdSZXBsYWNlbWVudE9yTm90IHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVu
dHMgPSAoaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAobWFya1NwZWxsaW5nICYmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9u
RW5hYmxlZCgpKSApID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBs
YWNlbWVudCA6IERvTm90UGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50OwogICAgIGlmICgh
bWFya1NwZWxsaW5nICYmICFwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKQogICAgICAg
ICByZXR1cm47Ci0gICAgCisKICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBW
aXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHAsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5k
T2ZXb3JkKHAsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogICAgIGlmIChtYXJrR3JhbW1hcikg
ewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGVkU2VudGVuY2UgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShwKSwgZW5kT2ZTZW50ZW5jZShwKSk7Ci0gICAgICAgIG1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModHJ1ZSwgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCB0cnVlLCBzZWxlY3RlZFNlbnRlbmNlLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpOwor
ICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE1hcmtTcGVs
bGluZywgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBtYXJrR3JhbW1h
ciwgc2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBwZXJmb3JtVGV4
dENoZWNraW5nUmVwbGFjZW1lbnRzLCBEb05vdFNob3dDb3JyZWN0aW9uUGFuZWwpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMo
bWFya1NwZWxsaW5nLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGZh
bHNlLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHBlcmZvcm1UZXh0
Q2hlY2tpbmdSZXBsYWNlbWVudHMpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKG1hcmtTcGVsbGluZywgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBEb05vdE1hcmtHcmFtbWFyLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMsIERvTm90U2hv
d0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgfQogI2Vsc2UKICAgICBpZiAoIWlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNTEwLDEzICsyNTE2LDEzIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2gKICAgICByZXR1cm4gY2hhcmFjdGVyID09ICdc
JycgfHwgY2hhcmFjdGVyID09IHJpZ2h0U2luZ2xlUXVvdGF0aW9uTWFyayB8fCBjaGFyYWN0ZXIg
PT0gaGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW07CiB9CiAKLXZvaWQgRWRpdG9yOjptYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKGJvb2wgbWFya1NwZWxsaW5nLCBSYW5n
ZSogc3BlbGxpbmdSYW5nZSwgYm9vbCBtYXJrR3JhbW1hciwgUmFuZ2UqIGdyYW1tYXJSYW5nZSwg
Ym9vbCBwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKQordm9pZCBFZGl0b3I6Om1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoTWFya1NwZWxsaW5nT3JOb3Qgc2hv
dWxkTWFya1NwZWxsaW5nLCBSYW5nZSogc3BlbGxpbmdSYW5nZSwgTWFya0dyYW1tYXJPck5vdCBz
aG91bGRNYXJrR3JhbW1hciwgUmFuZ2UqIGdyYW1tYXJSYW5nZSwgUGVyZm9ybVRleHRDaGVja2lu
Z1JlcGxhY2VtZW50T3JOb3Qgc2hvdWxkUGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cywg
U2hvd0NvcnJlY3Rpb25QYW5lbE9yTm90IHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCiB7CiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzZWxlY3Rpb25zIGFscmVhZHkgZXhw
YW5kZWQgdG8gd29yZCBib3VuZGFyaWVzLgogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGlmICghY2xpZW50KCkgfHwgIXNwZWxsaW5nUmFuZ2UgfHwgKG1hcmtHcmFtbWFyICYmICFncmFt
bWFyUmFuZ2UpKQorICAgIGlmICghY2xpZW50KCkgfHwgIXNwZWxsaW5nUmFuZ2UgfHwgKHNob3Vs
ZE1hcmtHcmFtbWFyICYmICFncmFtbWFyUmFuZ2UpKQogICAgICAgICByZXR1cm47Ci0gICAgCisK
ICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUgbm9kZSwgYmFpbC4KICAgICBOb2Rl
KiBlZGl0YWJsZU5vZGUgPSBzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpOwogICAgIGlm
ICghZWRpdGFibGVOb2RlIHx8ICFlZGl0YWJsZU5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCkBA
IC0yNTM5LDggKzI1NDUsOCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJh
ZEdyCiAgICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFs
c2U7CiAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZzsKICAgICBSZWZQdHI8UmFuZ2U+IHBhcmFn
cmFwaFJhbmdlOwotICAgIAotICAgIGlmIChtYXJrR3JhbW1hcikgeworCisgICAgaWYgKHNob3Vs
ZE1hcmtHcmFtbWFyKSB7CiAgICAgICAgIC8vIFRoZSBzcGVsbGluZyByYW5nZSBzaG91bGQgYmUg
Y29udGFpbmVkIGluIHRoZSBwYXJhZ3JhcGgtYWxpZ25lZCBleHRlbnNpb24gb2YgdGhlIGdyYW1t
YXIgcmFuZ2UuCiAgICAgICAgIHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBoQWxpZ25lZFJhbmdl
Rm9yUmFuZ2UoZ3JhbW1hclJhbmdlLCBncmFtbWFyUmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBo
U3RyaW5nKTsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJh
Z3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBzcGVsbGluZ1JhbmdlLT5zdGFydFBvc2l0aW9u
KCkpOwpAQCAtMjU1MSwxMCArMjU1NywxMCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyCiAgICAgfQogICAgIHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgPSBzcGVsbGlu
Z1JhbmdlU3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHNwZWxsaW5nUmFu
Z2UpOwogICAgIHBhcmFncmFwaExlbmd0aCA9IHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKTsKLSAg
ICBpZiAocGFyYWdyYXBoTGVuZ3RoIDw9IDAgfHwgKHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCA+
PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmICghbWFya0dyYW1tYXIgfHwgZ3JhbW1hclJhbmdl
U3RhcnRPZmZzZXQgPj0gZ3JhbW1hclJhbmdlRW5kT2Zmc2V0KSkpCisgICAgaWYgKHBhcmFncmFw
aExlbmd0aCA8PSAwIHx8IChzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQgPj0gc3BlbGxpbmdSYW5n
ZUVuZE9mZnNldCAmJiAoIXNob3VsZE1hcmtHcmFtbWFyIHx8IGdyYW1tYXJSYW5nZVN0YXJ0T2Zm
c2V0ID49IGdyYW1tYXJSYW5nZUVuZE9mZnNldCkpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgaWYgKHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpIHsKKworICAgIGlmIChzaG91
bGRQZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKSB7CiAgICAgICAgIGlmIChtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0
U2VsZWN0aW9uKSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHNhdmUgdGhlIGNhcmV0IHBv
c2l0aW9uIHNvIHdlIGNhbiByZXN0b3JlIGl0IGxhdGVyIGlmIG5lZWRlZAogICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKQEAgLTI1NzAsMTQg
KzI1NzYsMTYgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICB1aW50NjRfdCBjaGVja2luZ1R5cGVzID0gMDsKLSAg
ICBpZiAobWFya1NwZWxsaW5nKQorICAgIGlmIChzaG91bGRNYXJrU3BlbGxpbmcpCiAgICAgICAg
IGNoZWNraW5nVHlwZXMgfD0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOwotICAgIGlmIChtYXJr
R3JhbW1hcikKKyAgICBpZiAoc2hvdWxkTWFya0dyYW1tYXIpCiAgICAgICAgIGNoZWNraW5nVHlw
ZXMgfD0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXI7Ci0gICAgaWYgKHBlcmZvcm1UZXh0Q2hlY2tp
bmdSZXBsYWNlbWVudHMpIHsKKyAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCkKKyAg
ICAgICAgY2hlY2tpbmdUeXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjsKKyAgICBp
ZiAoc2hvdWxkUGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cykgewogICAgICAgICBpZiAo
aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgY2hlY2tpbmdU
eXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlTGluazsKICAgICAgICAgaWYgKGlzQXV0b21hdGljUXVv
dGVTdWJzdGl0dXRpb25FbmFibGVkKCkpCkBAIC0yNTg2LDIwICsyNTk0LDI2IEBAIHZvaWQgRWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgIGNoZWNraW5nVHlw
ZXMgfD0gVGV4dENoZWNraW5nVHlwZURhc2g7CiAgICAgICAgIGlmIChpc0F1dG9tYXRpY1RleHRS
ZXBsYWNlbWVudEVuYWJsZWQoKSkKICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4dENo
ZWNraW5nVHlwZVJlcGxhY2VtZW50OwotICAgICAgICBpZiAobWFya1NwZWxsaW5nICYmIGlzQXV0
b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQorICAgICAgICBpZiAoc2hvdWxkTWFy
a1NwZWxsaW5nICYmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQogICAg
ICAgICAgICAgY2hlY2tpbmdUeXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjsKICAg
ICB9CiAgICAgY2xpZW50KCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5j
aGFyYWN0ZXJzKCksIHBhcmFncmFwaExlbmd0aCwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7Ci0g
ICAgCisKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCisgICAgLy8gSWYgdGhpcyBjaGVja2luZyBpcyBvbmx5IGZvciBzaG93aW5n
IGNvcnJlY3Rpb24gcGFuZWwsIHdlIHNob3VsZG4ndCBib3RoZXIgdG8gbWFyayBtaXNzcGVsbGlu
Z3MuCisgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCisgICAgICAgIHNob3VsZE1h
cmtTcGVsbGluZyA9IERvTm90TWFya1NwZWxsaW5nOworI2VuZGlmCisKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAgICBjb25zdCBUZXh0
Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwogICAgICAgICBpbnQgcmVzdWx0
TG9jYXRpb24gPSByZXN1bHQtPmxvY2F0aW9uICsgb2Zmc2V0RHVlVG9SZXBsYWNlbWVudDsKICAg
ICAgICAgaW50IHJlc3VsdExlbmd0aCA9IHJlc3VsdC0+bGVuZ3RoOwotICAgICAgICBpZiAobWFy
a1NwZWxsaW5nICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYg
cmVzdWx0TG9jYXRpb24gPj0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0ICYmIHJlc3VsdExvY2F0
aW9uICsgcmVzdWx0TGVuZ3RoIDw9IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQpIHsKKyAgICAgICAg
aWYgKHNob3VsZE1hcmtTcGVsbGluZyAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlw
ZVNwZWxsaW5nICYmIHJlc3VsdExvY2F0aW9uID49IHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCAm
JiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0
KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlv
biA+PSAwKTsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2Uoc3BlbGxpbmdSYW5nZSwgcmVzdWx0TG9jYXRpb24gLSBzcGVs
bGluZ1JhbmdlU3RhcnRPZmZzZXQsIHJlc3VsdExlbmd0aCk7CiAgICAgICAgICAgICBtaXNzcGVs
bGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRk
TWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7
Ci0gICAgICAgIH0gZWxzZSBpZiAobWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRD
aGVja2luZ1R5cGVHcmFtbWFyICYmIHJlc3VsdExvY2F0aW9uIDwgZ3JhbW1hclJhbmdlRW5kT2Zm
c2V0ICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoID4gZ3JhbW1hclJhbmdlU3RhcnRP
ZmZzZXQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRNYXJrR3JhbW1hciAmJiByZXN1bHQt
PnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcmVzdWx0TG9jYXRpb24gPCBncmFt
bWFyUmFuZ2VFbmRPZmZzZXQgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPiBncmFt
bWFyUmFuZ2VTdGFydE9mZnNldCkgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+
IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgcmVzdWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgICAgICAg
Y29uc3QgR3JhbW1hckRldGFpbCogZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKQEAgLTI2
MDksMTIgKzI2MjMsMTIgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRH
cgogICAgICAgICAgICAgICAgICAgICBncmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRpb24pOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChwZXJmb3JtVGV4
dENoZWNraW5nUmVwbGFjZW1lbnRzICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoIDw9
IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGgg
Pj0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0CisgICAgICAgIH0gZWxzZSBpZiAoKHNob3VsZFBl
cmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMgfHwgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5l
bCkgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPD0gc3BlbGxpbmdSYW5nZUVuZE9m
ZnNldCAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA+PSBzcGVsbGluZ1JhbmdlU3Rh
cnRPZmZzZXQKICAgICAgICAgICAgICAgICAgICAgJiYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hl
Y2tpbmdUeXBlTGluawogICAgICAgICAgICAgICAgICAgICB8fCByZXN1bHQtPnR5cGUgPT0gVGV4
dENoZWNraW5nVHlwZVF1b3RlCiAgICAgICAgICAgICAgICAgICAgIHx8IHJlc3VsdC0+dHlwZSA9
PSBUZXh0Q2hlY2tpbmdUeXBlRGFzaAogICAgICAgICAgICAgICAgICAgICB8fCByZXN1bHQtPnR5
cGUgPT0gVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50Ci0gICAgICAgICAgICAgICAgICAgIHx8
IHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgfHwgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9u
KSkgeyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHRoZSByZXN1bHQg
cmFuZ2UganVzdCBoYXMgdG8gdG91Y2ggdGhlIHNwZWxsaW5nIHJhbmdlLCBzbyB3ZSBjYW4gaGFu
ZGxlIHJlcGxhY2luZyBub24td29yZCB0ZXh0IHN1Y2ggYXMgcHVuY3R1YXRpb24uCiAgICAgICAg
ICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKICAg
ICAgICAgICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IHJlc3VsdC0+cmVwbGFjZW1lbnQubGVu
Z3RoKCk7CkBAIC0yNjQwLDcgKzI2NTQsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyCiAgICAgICAgICAgICAgICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vy
cy5zaXplKCk7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJD
b3VudDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBt
YXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUg
PT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmIHN0YXRpY19jYXN0PGludD4obWFya2Vy
LnN0YXJ0T2Zmc2V0KSA8IGVuZE9mZnNldCAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRP
ZmZzZXQpID4gc3RhcnRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChtYXJrZXIu
dHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgfHwgbWFya2VyLnR5cGUgPT0gRG9j
dW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbikgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJr
ZXIuc3RhcnRPZmZzZXQpIDwgZW5kT2Zmc2V0ICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVu
ZE9mZnNldCkgPiBzdGFydE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICAgICAgZG9SZXBs
YWNlbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTI2NDgsNyArMjY2Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb1JlcGxhY2Vt
ZW50ICYmIHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkpIHsKKyAgICAgICAgICAgIGlmIChkb1JlcGxhY2VtZW50ICYmICFzaG91bGRTaG93Q29y
cmVjdGlvblBhbmVsICYmIHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+c2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpOwog
ICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKQEAgLTI2NTYsMzEg
KzI2NzAsNTQgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAg
ICAgICAgICAgICAgICAgICBkb1JlcGxhY2VtZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmc7CiAg
ICAgICAgICAgICBpZiAoZG9SZXBsYWNlbWVudCkgewogICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUxpbmspIHsKICAgICAgICAgICAgICAgICAgICAg
cmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseUNvbW1h
bmQoQ3JlYXRlTGlua0NvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCByZXN1bHQt
PnJlcGxhY2VtZW50KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkgJiYg
c2hvdWxkSW5zZXJ0VGV4dChyZXN1bHQtPnJlcGxhY2VtZW50LCByYW5nZVRvUmVwbGFjZS5nZXQo
KSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmlu
ZyByZXBsYWNlZFN0cmluZzsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9
PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlc3VsdC0+cmVwbGFjZW1lbnQs
IGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nUmFuZ2VFbmRPZmZz
ZXQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAg
ICAgIG9mZnNldER1ZVRvUmVwbGFjZW1lbnQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRM
ZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiA8IHNlbGVjdGlv
bk9mZnNldCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9mZnNldCArPSByZXBs
YWNlbWVudExlbmd0aCAtIHJlc3VsdExlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQgY29ycmVjdGlvbnMgY2FuIGVhc2ls
eSBiZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3RlZC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFu
Z2UocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0
aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5l
cigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIHJlcGxhY2VkU3RyaW5nKTsKKyNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsICYmIHJlc3Vs
dExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoID09IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgcmVz
dWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBvbmx5IHRoZSBzaG93IGNvcnJlY3Rpb24gcGFuZWwgb24gdGhlIGxh
c3Qgd29yZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRR
dWFkczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlVG9SZXBsYWNlLT50ZXh0UXVhZHMo
dGV4dFF1YWRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSB0ZXh0UXVhZHMuZW5kKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBGbG9hdFJlY3QgdG90YWxCb3VuZGluZ0JveDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoVmVjdG9yPEZsb2F0UXVhZD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dFF1YWRzLmJl
Z2luKCk7IGl0IDwgZW5kOyArK2l0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFs
Qm91bmRpbmdCb3gudW5pdGUoaXQtPmJvdW5kaW5nQm94KCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbiA9IHJhbmdlVG9SZXBsYWNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHJpbmdUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24g
PSByZXBsYWNlZFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudCgpLT5zaG93
Q29ycmVjdGlvblBhbmVsKHRvdGFsQm91bmRpbmdCb3gsIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlD
b3JyZWN0aW9uLCByZXN1bHQtPnJlcGxhY2VtZW50LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRvUmVwbGFjZW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQorI2Vu
ZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
ZG9SZXBsYWNlbWVudCkgeworICAgICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4
dChyZXN1bHQtPnJlcGxhY2VtZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHNw
ZWxsaW5nUmFuZ2VFbmRPZmZzZXQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7
CisgICAgICAgICAgICAgICAgb2Zmc2V0RHVlVG9SZXBsYWNlbWVudCArPSByZXBsYWNlbWVudExl
bmd0aCAtIHJlc3VsdExlbmd0aDsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24g
PCBzZWxlY3Rpb25PZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9mZnNldCAr
PSByZXBsYWNlbWVudExlbmd0aCAtIHJlc3VsdExlbmd0aDsKKyAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKSB7CisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBj
bGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgICAgICAvLyBBZGQgYSBtYXJrZXIgc28gdGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5
IGJlIHVuZG9uZSBhbmQgd29uJ3QgYmUgcmUtY29ycmVjdGVkLgorICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBh
cmFncmFwaFJhbmdlLmdldCgpLCByZXN1bHRMb2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5ndGgpOwor
ICAgICAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1
bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQsIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgaWYgKHNlbGVjdGlv
bkNoYW5nZWQpIHsKKworICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkICYmICFzaG91bGRTaG93Q29y
cmVjdGlvblBhbmVsKSB7CiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGNhcmV0IHBvc2l0aW9uIGlm
IHdlIGhhdmUgbWFkZSBhbnkgcmVwbGFjZW1lbnRzCiAgICAgICAgIHNldEVuZChwYXJhZ3JhcGhS
YW5nZS5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgoc3RhcnRPZk5leHRQYXJhZ3JhcGgocGFyYWdyYXBo
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpKTsKICAgICAgICAgaW50IG5ld0xlbmd0aCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwpAQCAtMjcyMSw3ICsy
NzU4LDggQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbQogI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXJJblJhbmdlcyh0cnVlLCBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgZ3JhbW1h
clNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBmYWxzZSk7CisgICAgTWFya0dy
YW1tYXJPck5vdCBzaG91bGRNYXJrR3JhbW1hciA9IG1hcmtHcmFtbWFyICYmIGlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCgpID8gTWFya0dyYW1tYXIgOiBEb05vdE1hcmtHcmFtbWFyOworICAgIG1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoTWFya1NwZWxsaW5nLCBzcGVs
bGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBzaG91bGRNYXJrR3JhbW1h
ciwgZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBEb05vdFBlcmZv
cm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudCwgRG9Ob3RTaG93Q29ycmVjdGlvblBhbmVsKTsKICNl
bHNlCiAgICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01p
c3NwZWxsaW5ncyhzcGVsbGluZ1NlbGVjdGlvbiwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKQEAg
LTI3MzAsNiArMjc2OCw0NSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tCiAjZW5kaWYKIH0KIAordm9pZCBFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQo
VGltZXI8RWRpdG9yPiopCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwor
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFm
ZmluaXR5KCkpOworICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExl
ZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMg
PSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0KTsKKyAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKE1hcmtTcGVsbGluZywgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpLCBEb05vdE1hcmtHcmFtbWFyLCAwLCBEb05vdFBlcmZvcm1UZXh0Q2hl
Y2tpbmdSZXBsYWNlbWVudCwgU2hvd0NvcnJlY3Rpb25QYW5lbCk7CisjZW5kaWYKK30KKwordm9p
ZCBFZGl0b3I6OmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbigpCit7CisgICAgUmFuZ2UqIHJlcGxh
Y2VkUmFuZ2UgPSBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLmdldCgpOworICAgIGlm
ICghcmVwbGFjZWRSYW5nZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgpICE9IHJlcGxhY2VkUmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVwbGFjZWRSYW5nZS0+
c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFj
ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9zdHJpbmdUb0Jl
UmVwbGFjZWRCeUNvcnJlY3Rpb24pOworfQorCit2b2lkIEVkaXRvcjo6c3RhcnRDb3JyZWN0aW9u
UGFuZWxUaW1lcigpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgY29ycmVjdGlv
blBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNs
aWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOworICAgIGlmIChpc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxU
aW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7CisjZW5kaWYK
K30KKwordm9pZCBFZGl0b3I6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCit7CisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAg
IGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwo
ZmFsc2UpOworI2VuZGlmCit9CisKIFBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQ
b2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsKSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmgJKHJldmlzaW9uIDY2NDg4KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjQsNyArMjI0LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHRvZ2dsZUF1dG9t
YXRpY1RleHRSZXBsYWNlbWVudCgpOwogICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb25FbmFibGVkKCk7CiAgICAgdm9pZCB0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rp
b24oKTsKLSAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMo
Ym9vbCBtYXJrU3BlbGxpbmcsIFJhbmdlKiBzcGVsbGluZ1JhbmdlLCBib29sIG1hcmtHcmFtbWFy
LCBSYW5nZSogZ3JhbW1hclJhbmdlLCBib29sIHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVu
dHMpOworICAgIGVudW0gTWFya1NwZWxsaW5nT3JOb3QgeyBEb05vdE1hcmtTcGVsbGluZywgTWFy
a1NwZWxsaW5nIH07CisgICAgZW51bSBNYXJrR3JhbW1hck9yTm90IHsgRG9Ob3RNYXJrR3JhbW1h
ciwgTWFya0dyYW1tYXIgfTsKKyAgICBlbnVtIFBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVu
dE9yTm90IHsgRG9Ob3RQZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnQsIFBlcmZvcm1UZXh0
Q2hlY2tpbmdSZXBsYWNlbWVudCB9OworICAgIGVudW0gU2hvd0NvcnJlY3Rpb25QYW5lbE9yTm90
IHsgRG9Ob3RTaG93Q29ycmVjdGlvblBhbmVsLCBTaG93Q29ycmVjdGlvblBhbmVsIH07CisgICAg
dm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE1hcmtTcGVsbGlu
Z09yTm90LCBSYW5nZSogc3BlbGxpbmdSYW5nZSwgTWFya0dyYW1tYXJPck5vdCwgUmFuZ2UqIGdy
YW1tYXJSYW5nZSwgUGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50T3JOb3QsIFNob3dDb3Jy
ZWN0aW9uUGFuZWxPck5vdCk7CiAgICAgdm9pZCBjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKTsKICNlbmRpZgogICAgIHZvaWQgYWR2YW5jZVRv
TmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24gPSBmYWxzZSk7CkBAIC0y
OTQsOSArMjk4LDEzIEBAIHB1YmxpYzoKICAgICBib29sIGluc2lkZVZpc2libGVBcmVhKGNvbnN0
IEludFBvaW50JikgY29uc3Q7CiAgICAgYm9vbCBpbnNpZGVWaXNpYmxlQXJlYShSYW5nZSopIGNv
bnN0OwogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG5leHRWaXNpYmxlUmFuZ2UoUmFuZ2UqLCBjb25z
dCBTdHJpbmcmLCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wgd3JhcEZsYWcpOwot
ICAgIAorCiAgICAgdm9pZCBhZGRUb0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBwcmVwZW5kKTsKIAor
ICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCk7CisgICAgdm9pZCBzdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKCk7CisgICAgdm9pZCBoYW5kbGVSZWplY3RlZENvcnJlY3Rpb24oKTsKKwog
ICAgIHZvaWQgcGFzdGVBc0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJv
b2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUpOwogICAgIHZvaWQgcGFzdGVBc1BsYWlu
VGV4dChjb25zdCBTdHJpbmcmLCBib29sIHNtYXJ0UmVwbGFjZSk7CiAKQEAgLTMxOCw2ICszMjYs
OSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2U7
CiAgICAgYm9vbCBtX3Nob3VsZFN0eWxlV2l0aENTUzsKICAgICBPd25QdHI8S2lsbFJpbmc+IG1f
a2lsbFJpbmc7CisgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0
aW9uOworICAgIFN0cmluZyBtX3N0cmluZ1RvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbjsKKyAgICBU
aW1lcjxFZGl0b3I+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7CiAKICAgICBib29sIGNhbkRlbGV0
ZVJhbmdlKFJhbmdlKikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVi
b2FyZChQYXN0ZWJvYXJkKik7CkBAIC0zMzUsOCArMzQ2LDkgQEAgcHJpdmF0ZToKIAogICAgIFBh
c3NSZWZQdHI8UmFuZ2U+IGZpcnN0VmlzaWJsZVJhbmdlKGNvbnN0IFN0cmluZyYsIGJvb2wgY2Fz
ZUZsYWcpOwogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGxhc3RWaXNpYmxlUmFuZ2UoY29uc3QgU3Ry
aW5nJiwgYm9vbCBjYXNlRmxhZyk7Ci0gICAgCisKICAgICB2b2lkIGNoYW5nZVNlbGVjdGlvbkFm
dGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIGJvb2wgY2xv
c2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSk7CisgICAgdm9pZCBjb3JyZWN0aW9uUGFu
ZWxUaW1lckZpcmVkKFRpbWVyPEVkaXRvcj4qIHRpbWVyKTsKICAgICBOb2RlKiBmaW5kRXZlbnRU
YXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3Q7CiB9OwogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2OSw2ICsxMDY5LDE0IEBAIHN0YXRpYyBib29s
IGV4ZWN1dGVZYW5rQW5kU2VsZWN0KEZyYW1lKiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lm
IFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkKK3N0YXRpYyBib29sIGV4ZWN1dGVDYW5jZWxPcGVyYXRpb24oRnJhbWUqIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCit7CisgICAgZnJhbWUtPmVk
aXRvcigpLT5oYW5kbGVDYW5jZWxPcGVyYXRpb24oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNl
bmRpZgorCiAvLyBTdXBwb3J0ZWQgZnVuY3Rpb25zCiAKIHN0YXRpYyBib29sIHN1cHBvcnRlZChG
cmFtZSosIEVkaXRvckNvbW1hbmRTb3VyY2UpCkBAIC0xNDU1LDYgKzE0NjMsOSBAQCBzdGF0aWMg
Y29uc3QgQ29tbWFuZE1hcCYgY3JlYXRlQ29tbWFuZE1hCiAgICAgICAgIHsgIlVuc2VsZWN0Iiwg
eyBleGVjdXRlVW5zZWxlY3QsIHN1cHBvcnRlZCwgZW5hYmxlZFZpc2libGVTZWxlY3Rpb24sIHN0
YXRlTm9uZSwgdmFsdWVOdWxsLCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9u
V2hlbkRpc2FibGVkIH0gfSwKICAgICAgICAgeyAiWWFuayIsIHsgZXhlY3V0ZVlhbmssIHN1cHBv
cnRlZEZyb21NZW51T3JLZXlCaW5kaW5nLCBlbmFibGVkSW5FZGl0YWJsZVRleHQsIHN0YXRlTm9u
ZSwgdmFsdWVOdWxsLCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRp
c2FibGVkIH0gfSwKICAgICAgICAgeyAiWWFua0FuZFNlbGVjdCIsIHsgZXhlY3V0ZVlhbmtBbmRT
ZWxlY3QsIHN1cHBvcnRlZEZyb21NZW51T3JLZXlCaW5kaW5nLCBlbmFibGVkSW5FZGl0YWJsZVRl
eHQsIHN0YXRlTm9uZSwgdmFsdWVOdWxsLCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhl
Y3V0aW9uV2hlbkRpc2FibGVkIH0gfSwKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgICAgIHsgIkNhbmNlbE9wZXJhdGlv
biIsIHsgZXhlY3V0ZUNhbmNlbE9wZXJhdGlvbiwgc3VwcG9ydGVkRnJvbU1lbnVPcktleUJpbmRp
bmcsIGVuYWJsZWRJbkVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJ
bnNlcnRpb24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAorI2VuZGlmCiAg
ICAgfTsKIAogICAgIC8vIFRoZXNlIHVuc3VwcG9ydGVkIGNvbW1hbmRzIGFyZSBsaXN0ZWQgaGVy
ZSBzaW5jZSB0aGV5IGFwcGVhciBpbiB0aGUgTWljcm9zb2Z0CkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDYgKzMwNywxMCBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBw
MiA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIGlm
IChwMSAhPSBwMikKICAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5t
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1Bvc2l0aW9uKHAxKTsKKyNpZiBQTEFURk9STShN
QUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5zdGFydENv
cnJlY3Rpb25QYW5lbFRpbWVyKCk7CisjZW5kaWYKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjAsNiArNDYwLDEwIEBAIHB1YmxpYzoKICNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKQogICAgIHZpcnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChj
b25zdCBVQ2hhciosIGludCwgdWludDY0X3QsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jikg
eyB9OwogI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQorICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVs
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIEVkaXRvciop
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wpIHsgfQor
I2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
Zyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wpIHsgfQpJbmRleDogV2ViQ29y
ZS9wYWdlL0VkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FZGl0b3JD
bGllbnQuaAkocmV2aXNpb24gNjY0ODgpCisrKyBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgRWRpdG9yQ2xpZW50X2gK
IAogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVGV4dEFmZmluaXR5Lmgi
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTUxLDYgKzUyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgRWRpdENvbW1hbmQ7
CitjbGFzcyBFZGl0b3I7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBIVE1M
RWxlbWVudDsKQEAgLTE3Nyw2ICsxNzksMTIgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCiAgICAgdmlydHVhbCB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFy
KiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiYgcmVzdWx0cykgPSAwOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgdmlydHVh
bCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjbWVudFN0cmluZywgRWRpdG9yKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNt
aXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKSA9IDA7CisjZW5kaWYK
KwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29u
c3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYgZGV0YWlsKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpID0gMDsKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAkocmV2aXNpb24gNjY0ODgpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDQ4LDggKzE0NDgsMTAgQEAgdm9pZCBGcmFtZTo6cmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbihjbwogCiAgICAgICAgIC8vIFRoaXMgb25seSBlcmFzZXMgbWFya2VycyB0
aGF0IGFyZSBpbiB0aGUgZmlyc3QgdW5pdCAod29yZCBvciBzZW50ZW5jZSkgb2YgdGhlIHNlbGVj
dGlvbi4KICAgICAgICAgLy8gUGVyaGFwcyBwZWN1bGlhciwgYnV0IGl0IG1hdGNoZXMgQXBwS2l0
LgotICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBuZXdBZGphY2VudFdvcmRz
LnRvTm9ybWFsaXplZFJhbmdlKCkpCisgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRSYW5n
ZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewogICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwgRG9j
dW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPm1hcmtlcnMo
KS0+cmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gc2VudGVuY2VSYW5n
ZSA9IG5ld1NlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgICAg
IGRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhzZW50ZW5jZVJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3MSw3ICsyNzEsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBGbG9hdFJlY3Qg
cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgICAgICB2b2lkIGRy
YXdMaW5lRm9yVGV4dChjb25zdCBJbnRQb2ludCYsIGludCB3aWR0aCwgYm9vbCBwcmludGluZyk7
Ci0gICAgICAgIHZvaWQgZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihjb25zdCBJ
bnRQb2ludCYsIGludCB3aWR0aCwgYm9vbCBncmFtbWFyKTsKKyAgICAgICAgZW51bSBUZXh0Q2hl
Y2tpbmdMaW5lU3R5bGUgeworICAgICAgICAgICAgVGV4dENoZWNraW5nSW52YWxpZExpbmVTdHls
ZSA9IC0xLAorICAgICAgICAgICAgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGUsCisgICAg
ICAgICAgICBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlLAorICAgICAgICAgICAgVGV4dENo
ZWNraW5nUmVwbGFjZW1lbnRMaW5lU3R5bGUKKyAgICAgICAgfTsKKyAgICAgICAgdm9pZCBkcmF3
TGluZUZvclRleHRDaGVja2luZyhjb25zdCBJbnRQb2ludCYsIGludCB3aWR0aCwgVGV4dENoZWNr
aW5nTGluZVN0eWxlKTsKIAogICAgICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdDsK
ICAgICAgICAgdm9pZCBzZXRQYWludGluZ0Rpc2FibGVkKGJvb2wpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkocmV2
aXNpb24gNjY0ODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0Nv
bnRleHRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1LDEzICsyNSwxMSBAQAogCiAjaW1wb3J0
ICJjb25maWcuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgotCiAjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oIgogI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgogI2ltcG9ydCA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogCi0jaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0KIEBjbGFz
cyBOU0NvbG9yOwogCiAvLyBGSVhNRTogTW9yZSBvZiB0aGlzIHNob3VsZCB1c2UgQ29yZUdyYXBo
aWNzIGluc3RlYWQgb2YgQXBwS2l0LgpAQCAtMTE5LDcgKzExNyw3IEBAIHN0YXRpYyBOU0NvbG9y
KiBjcmVhdGVQYXR0ZXJuQ29sb3IoTlNTdHIKIH0KIAogLy8gV2ViS2l0IG9uIE1hYyBpcyBhIHN0
YW5kYXJkIHBsYXRmb3JtIGNvbXBvbmVudCwgc28gaXQgbXVzdCB1c2UgdGhlIHN0YW5kYXJkIHBs
YXRmb3JtIGFydHdvcmsgZm9yIHVuZGVybGluZS4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50
IHdpZHRoLCBib29sIGdyYW1tYXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0Q2hlY2tpbmcoY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgd2lkdGgsIFRleHRDaGVja2lu
Z0xpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xMjcsMjMgKzEyNSw0MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JNaXNzcGVsCiAgICAgLy8gVGhlc2UgYXJlIHRoZSBzYW1lIGZvciBtaXNzcGVsbGlu
ZyBvciBiYWQgZ3JhbW1hci4KICAgICBpbnQgcGF0dGVybkhlaWdodCA9IGNNaXNzcGVsbGluZ0xp
bmVUaGlja25lc3M7CiAgICAgaW50IHBhdHRlcm5XaWR0aCA9IGNNaXNzcGVsbGluZ0xpbmVQYXR0
ZXJuV2lkdGg7Ci0gCisKICAgICBib29sIHVzaW5nRG90OwogICAgIE5TQ29sb3IgKnBhdHRlcm5D
b2xvcjsKLSAgICBpZiAoZ3JhbW1hcikgewotICAgICAgICAvLyBDb25zdGFudHMgZm9yIGdyYW1t
YXIgcGF0dGVybiBjb2xvci4KLSAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JHcmFtbWFy
ID0gZmFsc2U7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5TQ29sb3I+
LCBncmFtbWFyUGF0dGVybkNvbG9yLCAoY3JlYXRlUGF0dGVybkNvbG9yKEAiR3JhbW1hckRvdCIs
IFtOU0NvbG9yIGdyZWVuQ29sb3JdLCB1c2luZ0RvdEZvckdyYW1tYXIpKSk7Ci0gICAgICAgIAot
ICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yR3JhbW1hcjsKLSAgICAgICAgcGF0dGVybkNv
bG9yID0gZ3JhbW1hclBhdHRlcm5Db2xvci5nZXQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBDb25zdGFudHMgZm9yIHNwZWxsaW5nIHBhdHRlcm4gY29sb3IuCi0gICAgICAgIHN0YXRpYyBi
b29sIHVzaW5nRG90Rm9yU3BlbGxpbmcgPSBmYWxzZTsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChSZXRhaW5QdHI8TlNDb2xvcj4sIHNwZWxsaW5nUGF0dGVybkNvbG9yLCAoY3JlYXRlUGF0
dGVybkNvbG9yKEAiU3BlbGxpbmdEb3QiLCBbTlNDb2xvciByZWRDb2xvcl0sIHVzaW5nRG90Rm9y
U3BlbGxpbmcpKSk7Ci0gICAgICAgIAotICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yU3Bl
bGxpbmc7Ci0gICAgICAgIHBhdHRlcm5Db2xvciA9IHNwZWxsaW5nUGF0dGVybkNvbG9yLmdldCgp
OworICAgIHN3aXRjaCAoc3R5bGUpIHsKKyAgICAgICAgY2FzZSBUZXh0Q2hlY2tpbmdTcGVsbGlu
Z0xpbmVTdHlsZToKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBzcGVs
bGluZyBwYXR0ZXJuIGNvbG9yLgorICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JT
cGVsbGluZyA9IGZhbHNlOworICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5Q
dHI8TlNDb2xvcj4sIHNwZWxsaW5nUGF0dGVybkNvbG9yLCAoY3JlYXRlUGF0dGVybkNvbG9yKEAi
U3BlbGxpbmdEb3QiLCBbTlNDb2xvciByZWRDb2xvcl0sIHVzaW5nRG90Rm9yU3BlbGxpbmcpKSk7
CisgICAgICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxpbmc7CisgICAgICAgICAg
ICBwYXR0ZXJuQ29sb3IgPSBzcGVsbGluZ1BhdHRlcm5Db2xvci5nZXQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVGV4dENoZWNraW5nR3JhbW1hckxpbmVT
dHlsZToKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBncmFtbWFyIHBh
dHRlcm4gY29sb3IuCisgICAgICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvckdyYW1tYXIg
PSBmYWxzZTsKKyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5TQ29s
b3I+LCBncmFtbWFyUGF0dGVybkNvbG9yLCAoY3JlYXRlUGF0dGVybkNvbG9yKEAiR3JhbW1hckRv
dCIsIFtOU0NvbG9yIGdyZWVuQ29sb3JdLCB1c2luZ0RvdEZvckdyYW1tYXIpKSk7CisgICAgICAg
ICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yR3JhbW1hcjsKKyAgICAgICAgICAgIHBhdHRlcm5D
b2xvciA9IGdyYW1tYXJQYXR0ZXJuQ29sb3IuZ2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkKKyAgICAgICAgY2FzZSBUZXh0Q2hlY2tpbmdSZXBsYWNlbWVudExpbmVT
dHlsZToKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBzcGVsbGluZyBw
YXR0ZXJuIGNvbG9yLgorICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JTcGVsbGlu
ZyA9IGZhbHNlOworICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8TlND
b2xvcj4sIHNwZWxsaW5nUGF0dGVybkNvbG9yLCAoY3JlYXRlUGF0dGVybkNvbG9yKEAiQ29ycmVj
dGlvbkRvdCIsIFtOU0NvbG9yIGJsdWVDb2xvcl0sIHVzaW5nRG90Rm9yU3BlbGxpbmcpKSk7Cisg
ICAgICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxpbmc7CisgICAgICAgICAgICBw
YXR0ZXJuQ29sb3IgPSBzcGVsbGluZ1BhdHRlcm5Db2xvci5nZXQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUgdG8gZHJhdyBvbmx5IGNvbXBsZXRlIGRv
dHMuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNjY0ODgp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzY4LDYgKzc2OCwyMCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihH
cmFwCiAgICAgICAgIGNvbnRleHQtPmNsZWFyU2hhZG93KCk7CiB9CiAKK3N0YXRpYyBHcmFwaGlj
c0NvbnRleHQ6OlRleHRDaGVja2luZ0xpbmVTdHlsZSB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JN
YXJrZXJUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCit7CisgICAg
c3dpdGNoIChtYXJrZXJUeXBlKSB7CisgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6
CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ1NwZWxsaW5nTGlu
ZVN0eWxlOworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI6CisgICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGU7CisgICAgY2Fz
ZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CisgICAgICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQ6OlRleHRDaGVja2luZ1JlcGxhY2VtZW50TGluZVN0eWxlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ0ludmFsaWRMaW5lU3R5
bGU7CisgICAgfQorfQorCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdyYW1t
YXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IERvY3Vt
ZW50TWFya2VyJiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwg
Ym9vbCBncmFtbWFyKQogewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5nL2dyYW1tYXIgbWFy
a2VycyAoNTMyNzg4NykKQEAgLTgzMSw3ICs4NDUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBh
aW50U3BlbGxpbmdPckdyYW1tCiAgICAgICAgIC8vIEluIGxhcmdlciBmb250cywgdGhvdWdoLCBw
bGFjZSB0aGUgdW5kZXJsaW5lIHVwIG5lYXIgdGhlIGJhc2VsaW5lIHRvIHByZXZlbnQgYSBiaWcg
Z2FwLgogICAgICAgICB1bmRlcmxpbmVPZmZzZXQgPSBiYXNlbGluZSArIDI7CiAgICAgfQotICAg
IHB0LT5kcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKEludFBvaW50KHR4ICsgbV94
ICsgc3RhcnQsIHR5ICsgbV95ICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIGdyYW1tYXIpOwor
ICAgIHB0LT5kcmF3TGluZUZvclRleHRDaGVja2luZyhJbnRQb2ludCh0eCArIG1feCArIHN0YXJ0
LCB0eSArIG1feSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCB0ZXh0Q2hlY2tpbmdMaW5lU3R5
bGVGb3JNYXJrZXJUeXBlKG1hcmtlci50eXBlKSk7CiB9CiAKIHZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgaW50IHR4LCBpbnQgdHks
IGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
Rm9udCYgZm9udCkKQEAgLTg5OCwxMCArOTEyLDEwIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFp
bnREb2N1bWVudE1hcmtlcnMKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXI6CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpTcGVsbGluZzoKICAgICAgICAg
ICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50OgorICAgICAgICAgICAgY2FzZSBE
b2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uOgogICAgICAgICAgICAgICAgIGlmIChi
YWNrZ3JvdW5kKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJr
ZXI6OlRleHRNYXRjaDoKICAgICAgICAgICAgICAgICBpZiAoIWJhY2tncm91bmQpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtOTMzLDYgKzk0Nyw5IEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50OgogICAgICAgICAgICAgICAg
IGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIodHgsIHR5LCBtYXJrZXIsIHN0eWxlLCBm
b250KTsKKyAgICAgICAgICAgICAgICBwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKHB0LCB0
eCwgdHksIG1hcmtlciwgc3R5bGUsIGZvbnQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbjoK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNjY0ODgpCisrKyBXZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTA4LTMxICBK
aWEgUHUgIDxqcHVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBhdXRvY29ycmVjdGlvbiBVSSBvbiBNYWMg
T1MgWC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0
OTU4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83Mjk5NjIxPgorCisgICAgICAgIFNlZSBkZXRh
aWxlZCBoaWdoIGxldmVsIGRlc2NyaXB0aW9uIGluIFdlYkNvcmUvQ2hhbmdlTG9nLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwpOiBEdW1t
eSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpkaXNt
aXNzQ29ycmVjdGlvblBhbmVsKTogRGl0dG8KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6IEFkZGVkIG5ldyBtZXRob2RzIGRlY2xhcmVkIGlu
IGJhc2UgY2xhc3MuCisKIDIwMTAtMDgtMzEgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGFmdGVyIHI2NjQ0OCBvbiBXZWJLaXQyLgpJbmRl
eDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAJKHJldmlzaW9uIDY2NDg4KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2OSw0ICs0
NjksMTYgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNldElucHV0TWV0aG9kU3RhdAogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05P
V19MRU9QQVJEKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nLCBXZWJDb3JlOjpFZGl0b3IqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29y
cmVjdGlvbkFjY2VwdGVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksOSArMzksOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotcHJpdmF0
ZTogICAgCitwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYWdlRGVzdHJveWVkKCk7Ci0gICAg
CisKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqKTsK
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShXZWJDb3JlOjpIVE1M
RWxlbWVudCopOwogICAgIHZpcnR1YWwgYm9vbCBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsg
CkBAIC0xMzEsNyArMTMxLDEwIEBAIHByaXZhdGU6ICAgIAogICAgIHZpcnR1YWwgdm9pZCBnZXRH
dWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYsIFZlY3RvcjxXVEY6OlN0cmluZz4mIGd1
ZXNzZXMpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7Ci0KKyNpZiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIHZpcnR1YWwgdm9p
ZCBzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdC
b3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgV2ViQ29yZTo6RWRpdG9yKik7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNj
ZXB0ZWQpOworI2VuZGlmCiAgICAgV2ViUGFnZSogbV9wYWdlOwogfTsKIApJbmRleDogV2ViS2l0
L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDY2NDg4KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyMiBAQAorMjAxMC0wOC0zMSAgSmlhIFB1ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
YXV0b2NvcnJlY3Rpb24gVUkgb24gTWFjIE9TIFguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDk1OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzI5
OTYyMT4KKworICAgICAgICBTZWUgZGV0YWlsZWQgaGlnaCBsZXZlbCBkZXNjcmlwdGlvbiBpbiBX
ZWJDb3JlL0NoYW5nZUxvZy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oOiBBZGRlZCBuZXcgbWVtYmVyIG1ldGhvZHMgZGVjbGFyZWQgaW4gRWRpdG9yQ2xpZW50
LiBBZGRlZCBtX2NvcnJlY3Rpb25QYW5lbFRhZyB0byBzdG9yZSB0aGUgSUQgb2YgY3VycmVudCBh
dXRvY29ycmVjdGlvbiBVSSBvYmplY3QuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OldlYkVkaXRvckNsaWVu
dCk6IEluaXRpYWxpemUgbV9jb3JyZWN0aW9uUGFuZWxUYWcuCisgICAgICAgIChXZWJFZGl0b3JD
bGllbnQ6On5XZWJFZGl0b3JDbGllbnQpOiBNYWtlIHN1cmUgdGhlIGF1dG9jb3JyZWN0aW9uIFVJ
IGlzIGRpc21pc3NlZCBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2JqZWN0LgorICAgICAgICAoV2Vi
RWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKTogRGlzbWlzcyBhdXRvY29y
cmVjdGlvbiBVSSB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuCisgICAgICAgIChXZWJF
ZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwpOiBTaG93IGF1dG9jb3JyZWN0aW9uIFVJ
LgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKTogRGlz
bWlzcyBhdXRvY29ycmVjdGlvbiBVSS4KKwogMjAxMC0wOC0zMCAgTWFyayBSb3dlICA8bXJvd2VA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA2NjQ4
OCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2ltcG9ydCA8
V2ViQ29yZS9FZGl0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yQ2xpZW50Lmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgpAQCAtMzgsNyAr
MzksNyBAQAogY2xhc3MgV2ViRWRpdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkVkaXRvckNs
aWVudCB7CiBwdWJsaWM6CiAgICAgV2ViRWRpdG9yQ2xpZW50KFdlYlZpZXcgKik7Ci0gICAgCisg
ICAgdmlydHVhbCB+V2ViRWRpdG9yQ2xpZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0
cm95ZWQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsK
QEAgLTEyOSwxMiArMTMwLDE5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nl
c0ZvcldvcmQoY29uc3QgV1RGOjpTdHJpbmcmLCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIGd1
ZXNzZXMpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7CisjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICB2aXJ0dWFsIHZvaWQg
c2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIFdlYkNvcmU6OkVkaXRvciopOworICAg
IHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2Vw
dGVkKTsKKyNlbmRpZgogcHJpdmF0ZToKICAgICB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG9P
clJlZG8oUGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4sIGJvb2wgaXNSZWRvKTsKICAg
ICBXZWJFZGl0b3JDbGllbnQoKTsKLSAgICAKKwogICAgIFdlYlZpZXcgKm1fd2ViVmlldzsKICAg
ICBSZXRhaW5QdHI8V2ViRWRpdG9yVW5kb1RhcmdldD4gbV91bmRvVGFyZ2V0OwotICAgIAogICAg
IGJvb2wgbV9oYXZlVW5kb1JlZG9PcGVyYXRpb25zOworCisjaWYgIWRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBOU0ludGVnZXIgbV9jb3JyZWN0aW9uUGFuZWxU
YWc7CisjZW5kaWYKIH07CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5tbQkocmV2aXNpb24gNjY0ODgpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOSBAQAog
I2ltcG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDx3dGYvUGFz
c1JlZlB0ci5oPgogI2ltcG9ydCA8d3RmL1RocmVhZGluZy5oPgorI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0Q2hlY2tl
ci5oPgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNl
IFdURjsKQEAgLTE3MSw3ICsxNzQsMTcgQEAgV2ViRWRpdG9yQ2xpZW50OjpXZWJFZGl0b3JDbGll
bnQoV2ViVmlldwogICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX3VuZG9UYXJnZXQo
W1tbV2ViRWRpdG9yVW5kb1RhcmdldCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdKQogICAgICwg
bV9oYXZlVW5kb1JlZG9PcGVyYXRpb25zKGZhbHNlKQorI2lmICFkZWZpbmVkKEJVSUxESU5HX09O
X1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRhZygtMSkKKyNl
bmRpZgoreworfQorCitXZWJFZGl0b3JDbGllbnQ6On5XZWJFZGl0b3JDbGllbnQoKQogeworI2lm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbCh0cnVlKTsKKyNlbmRpZgogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQpAQCAtMjg2LDYgKzI5OSwxMCBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlCiB7CiAgICAgW21fd2ViVmll
dyBfc2VsZWN0aW9uQ2hhbmdlZF07CiAKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQorICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7CisjZW5kaWYK
KwogICAgIC8vIEZJWE1FOiBUaGlzIHF1aXJrIGlzIG5lZWRlZCBkdWUgdG8gPHJkYXI6Ly9wcm9i
bGVtLzUwMDk2MjU+IC0gV2UgY2FuIHBoYXNlIGl0IG91dCBvbmNlIEFwZXJ0dXJlIGNhbiBhZG9w
dCB0aGUgbmV3IGJlaGF2aW9yIG9uIHRoZWlyIGVuZAogICAgIGlmICghV2ViS2l0TGlua2VkT25P
ckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhPVVRfQVBFUlRVUkVfUVVJUkspICYmIFtb
W05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpA
ImNvbS5hcHBsZS5BcGVydHVyZSJdKQogICAgICAgICByZXR1cm47CkBAIC03OTAsNiArODA3LDM1
IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2kKICNlbmRpZgogfQog
CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRp
bmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBFZGl0b3IqIGVkaXRvcikgeworICAgIGRpc21p
c3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7CisKKyAgICBOU1JlY3QgYm91bmRpbmdCb3hBc05TUmVj
dCA9IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZzsKKyAgICBOU1JlY3Qgd2ViVmlld0ZyYW1l
ID0gbV93ZWJWaWV3LmZyYW1lOworICAgIGJvdW5kaW5nQm94QXNOU1JlY3Qub3JpZ2luLnkgPSB3
ZWJWaWV3RnJhbWUuc2l6ZS5oZWlnaHQtTlNNYXhZKGJvdW5kaW5nQm94QXNOU1JlY3QpOworCisg
ICAgLy8gTmVlZCB0byBleHBsaWNpdGx5IHVzZSB0aGVzZSBsb2NhbCBOU1N0cmluZyBvYmplY3Rz
LCBiZWNhdXNlIHRoZSBDKysgcmVmZXJlbmNlcyBtYXkgYmUgaW52YWxpZGF0ZWQgYnkgdGhlIHRp
bWUgdGhlIGJsb2NrIGJlbG93IGlzIGV4ZWN1dGVkLgorICAgIE5TU3RyaW5nICpyZXBsYWNlZFN0
cmluZ0FzTlNTdHJpbmcgPSByZXBsYWNlZFN0cmluZzsKKyAgICBOU1N0cmluZyAqcmVwbGFjZW1l
bnRTdHJpbmdBc05TU3RyaW5nID0gcmVwbGFjZW1lbnRTdHJpbmc7CisKKyAgICBtX2NvcnJlY3Rp
b25QYW5lbFRhZyA9IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBzaG93Q29y
cmVjdGlvbjpyZXBsYWNlbWVudFN0cmluZ0FzTlNTdHJpbmcgZm9yU3RyaW5nSW5SZWN0OmJvdW5k
aW5nQm94QXNOU1JlY3QgdmlldzptX3dlYlZpZXcgY29tcGxldGlvbkhhbmRsZXI6XihCT09MIGFj
Y2VwdGVkKSB7CisgICAgICAgIGlmICghYWNjZXB0ZWQpIHsKKyAgICAgICAgICAgIFtbTlNTcGVs
bENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZWNvcmRSZXNwb25zZTpOU0NvcnJlY3Rpb25S
ZXNwb25zZVJlamVjdGVkIHRvQ29ycmVjdGlvbjpyZXBsYWNlbWVudFN0cmluZ0FzTlNTdHJpbmcg
Zm9yV29yZDpyZXBsYWNlZFN0cmluZ0FzTlNTdHJpbmcgbGFuZ3VhZ2U6bmlsIGluU3BlbGxEb2N1
bWVudFdpdGhUYWc6W21fd2ViVmlldyBzcGVsbENoZWNrZXJEb2N1bWVudFRhZ11dOworICAgICAg
ICAgICAgZWRpdG9yLT5oYW5kbGVSZWplY3RlZENvcnJlY3Rpb24oKTsKKyAgICAgICAgfQorICAg
IH1dOworfQorCit2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChi
b29sIGNvcnJlY3Rpb25BY2NlcHRlZCkKK3sKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxUYWcg
Pj0gMCkgeworICAgICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gZGlz
bWlzc0NvcnJlY3Rpb246bV9jb3JyZWN0aW9uUGFuZWxUYWcgYWNjZXB0Q29ycmVjdGlvbjpjb3Jy
ZWN0aW9uQWNjZXB0ZWRdOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbFRhZyA9IC0xOworICAg
IH0KK30KKyNlbmRpZgorCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewogICAgIFtb
TlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVTcGVsbGluZ1BhbmVsV2l0
aE1pc3NwZWxsZWRXb3JkOm1pc3NwZWxsZWRXb3JkXTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66118</attachid>
            <date>2010-08-31 14:56:02 -0700</date>
            <delta_ts>2010-08-31 22:33:21 -0700</delta_ts>
            <desc>Proposed patch (v3)</desc>
            <filename>WebKitAutoCorrection.patch</filename>
            <type>text/plain</type>
            <size>49119</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMTAtMDgtMzEgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yIGF1dG9jb3JyZWN0aW9uIFVJIG9uIE1hYyBPUyBYLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5NTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzcyOTk2MjE+CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgU2V2
ZXJhbCBuZXcgbWVtYmVyIG1ldGhvZHMgYXJlIGFkZGVkIHRvIEVkaXRvckNsaWVudCBmb3IgY29t
bXVuaWNhdGlvbiBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktpdC4gQSBuZXcgaGFuZGxlciwgZXhl
Y3V0ZUNhbmNlbE9wZXJhdGlvbigpLCBpcyBhZGRlZCB0byBFZGl0b3JDb21tYW5kLmNwcCBzbyB0
aGF0IFdlYkNvcmUgY2FuIGludGVyY2VwdCB0aGUgRVNDIGtleSBldmVudCB0byBkaXNtaXNzIGF1
dG9jb3JyZWN0aW9uIFVJLiBBIG5ldyBEb2N1bWVudE1hcmtlciB2YWx1ZSwgUmVqZWN0ZWRDb3Jy
ZWN0aW9uLCBpcyBhZGRlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjb3JyZWN0aW9ucyB0aGF0IHVz
ZXIgaGFzIHJlamVjdGVkLCBzbyB0aGF0IGl0IHdpbGwgbm90IGJlIHN1Z2dlc3RlZCBhZ2FpbiBs
YXRlci4gVGhlIGF1dG9jb3JyZWN0aW9uIGlzIGRyaXZlbiBieSBhIHRpbWVyLiBFdmVyeSB0aW1l
IHRoZSBlZGl0b3IgaW5zZXJ0cyBhIG5ldyBsZXR0ZXIsIHRoZSB0aW1lciBpcyByZXNldC4gSWYg
dGhlIHRpbWVyIGZpcmVzLCBpdCBtZWFucyBuZWl0aGVyIGhhcyB1c2VyIGVudGVyZWQgYW55IG5l
dyBsZXR0ZXIgZm9yIGN1cnJlbnQgd29yZCwgbm9yIGhhcyBoZSBlbnRlcmVkIHdoaXRlc3BhY2Ug
b3IgcHVuY3R1YXRpb24gdG8gY29tcGxldGUgdGhlIHdvcmQuIEluIHRoaXMgY2FzZSwgd2UgcXVl
cnkgZm9yIGF1dG9jb3JyZWN0aW9uLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IFVwZGF0
ZWQKKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlci5oOiBBZGRlZCBSZWplY3RlZENvcnJl
Y3Rpb24gdG8gaW5kaWNhdGUgd29yZCBvbiB3aGljaCB1c2VyIGhhcyByZWplY3RlZCBhdXRvY29y
cmVjdGlvbi4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKTogSW5pdGlhbGl6ZSBhdXRvY29ycmVjdGlvbiB0aW1lci4KKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6fkVkaXRvcik6IE1ha2Ugc3VyZSBhdXRvY29ycmVjdGlv
biBVSSBpcyBkaXNtaXNzIGJlZm9yZSBkZXN0cm95aW5nIEVkaXRvciBvYmplY3QuCisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24p
OiBBZG9wdGVkIG5ldyBzaWduYXR1cmUgb2YgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXJJblJhbmdlcygpLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKTogQWRkZWQgYW4gYXJndW1lbnQgdG8gaW5kaWNhdGUg
d2hldGhlciB3ZSB3YW50IHRvIHNob3cgYXV0b2NvcnJlY3Rpb24gVUkuIEFkZGVkIGNvZGUgdG8g
c2hvdyBhdXRvY29ycmVjdGlvbiBVSSBpZiBpdCBpcyBuZWNlc3NhcnkuIFJlcGxhY2VkIGFsbCBm
b3VyIGJvb2xlYW4gYXJndW1lbnRzIHdpdGggZW51bSB0byBpbXByb3ZlIHJlYWRhYmlsaXR5Lgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcik6
QWRvcHRlZCBuZXcgc2lnbmF0dXJlIG9mIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29ycmVjdGlvblBhbmVsVGlt
ZXJGaXJlZCk6IENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgc2hvdyBhdXRvY29ycmVjdGlvbiBV
SSB3aGVuIHVzZXIgcGF1c2VzIGR1cmluZyB0eXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbik6IFVwZGF0ZSB1c2VyIGRpY3Rpb25hcnkgd2hl
biBhbiBhdXRvY29ycmVjdGlvbiBpcyByZWplY3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcik6IFN0YXJ0IGF1dG9jb3JyZWN0aW9uIHRpbWVy
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOiBEaXNt
aXNzIGF1dG9jb3JyZWN0aW9uIFVJIHdoZW4gRVNDIGtleSBpcyBwcmVzc2VkLgorCisgICAgICAg
ICogZWRpdGluZy9FZGl0b3IuaDogQWRkZWQgYXV0b2NvcnJlY3Rpb24gcmVsYXRlZCBtZW1iZXIg
bWV0aG9kcyBhbmQgdmFyaWFibGVzLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVDYW5jZWxPcGVyYXRpb24pOiBIYW5kbGUg
RVNDIGtleSBldmVudC4gRGlzbWlzcyBhdXRvY29ycmVjdGlvbiBVSS4KKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUNvbW1hbmRNYXApOiBVcGRhdGVkIGZvciBleGVjdXRlQ2FuY2VsT3BlcmF0aW9u
KCkuCisKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKTogUmVzZXQg
YXV0b2NvcnJlY3Rpb24gdGltZXIgYWZ0ZXIgaW5zZXJ0aW9uLgorCisgICAgICAgICogbG9hZGVy
L0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNo
b3dDb3JyZWN0aW9uUGFuZWwpOiBEdW1teSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKTogRGl0dG8KKwor
ICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6IEFkZGVkIG1ldGhvZHMgZm9yIGNvbW11bmlj
YXRpb24gYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgcmVnYXJkaW5nIGF1dG9jb3JyZWN0aW9u
LgorCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6IERpc21pc3MgYXV0b2NvcnJlY3Rpb24gVUkuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDogQWRkZWQgZW51
bSBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgdG8gc3BlY2lmeSB0aGUgdW5kZXJsaW5lIGZvciBkaWZm
ZXJlbnQgdHlwZSBvZiB0ZXh0IGNoZWNraW5nIHJlc3VsdC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKTogT24gTWFjIE9TIFgsIHJl
cGxhY2VkIGRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoKSB3aXRoIHRoaXMgbWV0
aG9kIGluIG9yZGVyIHRvIGRyYXcgdW5kZXJsaW5lIG9uIGF1dG9jb3JyZWN0ZWQgd29yZC4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRleHRDaGVja2luZ0xpbmVTdHlsZUZvck1hcmtlclR5cGUpOiBSZXR1cm4gbGluZSBzdHlsZSBm
b3IgYSBnaXZlbiBkb2N1bWVudCBtYXJrZXIgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIpOiBVc2UgZHJhd0xpbmVGb3JU
ZXh0Q2hlY2tpbmcoKSBpbnN0ZWFkIG9mIGRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1t
YXIoKSB3aXRoIG9uIE1hYyBPUyBYLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
cGFpbnREb2N1bWVudE1hcmtlcnMpOiBIYW5kbGUgbmV3IG1hcmtlciB2YWx1ZSwgUmVqZWN0ZWRD
b3JyZWN0aW9uLgorCiAyMDEwLTA4LTMxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZp
c2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTYyMSw2ICs2MjEsNyBAQCBfX1pON1dlYkNvcmU2RWRpdG9yMjFhcHBseVN0eWxlVG9TZWxlY3Rp
CiBfX1pON1dlYkNvcmU2RWRpdG9yMjFpc1NlbGVjdGlvbk1pc3NwZWxsZWRFdgogX19aTjdXZWJD
b3JlNkVkaXRvcjIzc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb25FTlNfMTZXcml0aW5nRGlyZWN0aW9u
RQogX19aTjdXZWJDb3JlNkVkaXRvcjI0YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nRWIKK19fWk43
V2ViQ29yZTZFZGl0b3IyNGhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbkV2CiBfX1pON1dlYkNvcmU2
RWRpdG9yMjRpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2
ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2aW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCShyZXZpc2lvbiA2
NjQ4OCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDcgKzM5LDggQEAgc3RydWN0IERvY3VtZW50TWFya2VyIHsKICAgICAgICAgU3BlbGxpbmcs
CiAgICAgICAgIEdyYW1tYXIsCiAgICAgICAgIFRleHRNYXRjaCwKLSAgICAgICAgUmVwbGFjZW1l
bnQKKyAgICAgICAgUmVwbGFjZW1lbnQsCisgICAgICAgIFJlamVjdGVkQ29ycmVjdGlvbgogICAg
IH07CiAKICAgICBNYXJrZXJUeXBlIHR5cGU7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24g
NjY0ODgpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1MywxMSArMTA1MywxNiBAQCBFZGl0b3I6OkVkaXRvcihGcmFtZSogZnJhbWUpCiAgICAgLy8g
VGhpcyBpcyBvZmYgYnkgZGVmYXVsdCwgc2luY2UgbW9zdCBlZGl0b3JzIHdhbnQgdGhpcyBiZWhh
dmlvciAodGhpcyBtYXRjaGVzIElFIGJ1dCBub3QgRkYpLgogICAgICwgbV9zaG91bGRTdHlsZVdp
dGhDU1MoZmFsc2UpCiAgICAgLCBtX2tpbGxSaW5nKGFkb3B0UHRyKG5ldyBLaWxsUmluZykpCi17
IAorICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAmRWRpdG9yOjpjb3JyZWN0aW9u
UGFuZWxUaW1lckZpcmVkKQorewogfQogCiBFZGl0b3I6On5FZGl0b3IoKQogeworI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAg
ICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVs
KHRydWUpOworI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yOjpjbGVhcigpCkBAIC0yMzUxLDIyICsy
MzU2LDIzIEBAIGJvb2wgRWRpdG9yOjpzcGVsbGluZ1BhbmVsSXNTaG93aW5nKCkKIHZvaWQgRWRp
dG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1Bvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmcCkKIHsKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgIGJvb2wgbWFya1Nw
ZWxsaW5nID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKLSAgICBib29sIG1h
cmtHcmFtbWFyID0gbWFya1NwZWxsaW5nICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwot
ICAgIGJvb2wgcGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cyA9IGlzQXV0b21hdGljUXVv
dGVTdWJzdGl0dXRpb25FbmFibGVkKCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0
aW9uRW5hYmxlZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
aXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCAobWFya1NwZWxsaW5nICYmIGlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpKTsKKyAgICBNYXJrU3BlbGxpbmdPck5vdCBtYXJrU3BlbGxp
bmcgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpID8gTWFya1NwZWxsaW5nIDog
RG9Ob3RNYXJrU3BlbGxpbmc7CisgICAgTWFya0dyYW1tYXJPck5vdCBtYXJrR3JhbW1hciA9IG1h
cmtTcGVsbGluZyAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSA/IE1hcmtHcmFtbWFyIDog
RG9Ob3RNYXJrR3JhbW1hcjsKKyAgICBQZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRPck5v
dCBwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzID0gKGlzQXV0b21hdGljUXVvdGVTdWJz
dGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzQXV0b21hdGljTGlua0Rl
dGVjdGlvbkVuYWJsZWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNEYXNoU3Vi
c3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY1RleHRS
ZXBsYWNlbWVudEVuYWJsZWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG1hcmtTcGVsbGluZyAm
JiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkgKSA/CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnQgOiBEb05vdFBlcmZvcm1UZXh0
Q2hlY2tpbmdSZXBsYWNlbWVudDsKICAgICBpZiAoIW1hcmtTcGVsbGluZyAmJiAhcGVyZm9ybVRl
eHRDaGVja2luZ1JlcGxhY2VtZW50cykKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgVmlz
aWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29y
ZChwLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChwLCBSaWdodFdvcmRJZk9uQm91
bmRhcnkpKTsKICAgICBpZiAobWFya0dyYW1tYXIpIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3RlZFNlbnRlbmNlID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2UocCks
IGVuZE9mU2VudGVuY2UocCkpOwotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKHRydWUsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSwgdHJ1ZSwgc2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBwZXJm
b3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyhNYXJrU3BlbGxpbmcsIGFkamFjZW50V29yZHMudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgbWFya0dyYW1tYXIsIHNlbGVjdGVkU2VudGVuY2UudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgcGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cywgRG9O
b3RTaG93Q29ycmVjdGlvblBhbmVsKTsKICAgICB9IGVsc2UgewotICAgICAgICBtYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKG1hcmtTcGVsbGluZywgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBmYWxzZSwgYWRqYWNlbnRXb3Jkcy50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpLCBwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKTsKKyAg
ICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhtYXJrU3BlbGxp
bmcsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRG9Ob3RNYXJrR3Jh
bW1hciwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBwZXJmb3JtVGV4
dENoZWNraW5nUmVwbGFjZW1lbnRzLCBEb05vdFNob3dDb3JyZWN0aW9uUGFuZWwpOwogICAgIH0K
ICNlbHNlCiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQpAQCAt
MjUxMCwxMyArMjUxNiwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNBbWJpZ3VvdXNCb3VuZGFy
eUNoCiAgICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9PSByaWdodFNp
bmdsZVF1b3RhdGlvbk1hcmsgfHwgY2hhcmFjdGVyID09IGhlYnJld1B1bmN0dWF0aW9uR2Vyc2hh
eWltOwogfQogCi12b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhib29sIG1hcmtTcGVsbGluZywgUmFuZ2UqIHNwZWxsaW5nUmFuZ2UsIGJvb2wgbWFy
a0dyYW1tYXIsIFJhbmdlKiBncmFtbWFyUmFuZ2UsIGJvb2wgcGVyZm9ybVRleHRDaGVja2luZ1Jl
cGxhY2VtZW50cykKK3ZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKE1hcmtTcGVsbGluZ09yTm90IHNob3VsZE1hcmtTcGVsbGluZywgUmFuZ2UqIHNw
ZWxsaW5nUmFuZ2UsIE1hcmtHcmFtbWFyT3JOb3Qgc2hvdWxkTWFya0dyYW1tYXIsIFJhbmdlKiBn
cmFtbWFyUmFuZ2UsIFBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudE9yTm90IHNob3VsZFBl
cmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMsIFNob3dDb3JyZWN0aW9uUGFuZWxPck5vdCBz
aG91bGRTaG93Q29ycmVjdGlvblBhbmVsKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIHdpdGggc2VsZWN0aW9ucyBhbHJlYWR5IGV4cGFuZGVkIHRvIHdvcmQgYm91bmRhcmllcy4K
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAoIWNsaWVudCgpIHx8ICFzcGVsbGlu
Z1JhbmdlIHx8IChtYXJrR3JhbW1hciAmJiAhZ3JhbW1hclJhbmdlKSkKKyAgICBpZiAoIWNsaWVu
dCgpIHx8ICFzcGVsbGluZ1JhbmdlIHx8IChzaG91bGRNYXJrR3JhbW1hciAmJiAhZ3JhbW1hclJh
bmdlKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gSWYgd2UncmUgbm90IGluIGFu
IGVkaXRhYmxlIG5vZGUsIGJhaWwuCiAgICAgTm9kZSogZWRpdGFibGVOb2RlID0gc3BlbGxpbmdS
YW5nZS0+c3RhcnRDb250YWluZXIoKTsKICAgICBpZiAoIWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFi
bGVOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQpAQCAtMjUzOSw4ICsyNTQ1LDggQEAgdm9pZCBF
ZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAgIGJvb2wgYWRqdXN0U2VsZWN0
aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcyA9IGZhbHNlOwogICAgIFN0cmluZyBwYXJhZ3JhcGhT
dHJpbmc7CiAgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZTsKLSAgICAKLSAgICBpZiAo
bWFya0dyYW1tYXIpIHsKKworICAgIGlmIChzaG91bGRNYXJrR3JhbW1hcikgewogICAgICAgICAv
LyBUaGUgc3BlbGxpbmcgcmFuZ2Ugc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiB0aGUgcGFyYWdyYXBo
LWFsaWduZWQgZXh0ZW5zaW9uIG9mIHRoZSBncmFtbWFyIHJhbmdlLgogICAgICAgICBwYXJhZ3Jh
cGhSYW5nZSA9IHBhcmFncmFwaEFsaWduZWRSYW5nZUZvclJhbmdlKGdyYW1tYXJSYW5nZSwgZ3Jh
bW1hclJhbmdlU3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CiAgICAgICAgIFJlZlB0cjxS
YW5nZT4gb2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSwgc3BlbGxpbmdSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKQEAgLTI1NTEsMTAgKzI1NTcsMTAg
QEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAgIH0KICAgICBz
cGVsbGluZ1JhbmdlRW5kT2Zmc2V0ID0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0ICsgVGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aChzcGVsbGluZ1JhbmdlKTsKICAgICBwYXJhZ3JhcGhMZW5ndGgg
PSBwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCk7Ci0gICAgaWYgKHBhcmFncmFwaExlbmd0aCA8PSAw
IHx8IChzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQgPj0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAm
JiAoIW1hcmtHcmFtbWFyIHx8IGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0ID49IGdyYW1tYXJSYW5n
ZUVuZE9mZnNldCkpKQorICAgIGlmIChwYXJhZ3JhcGhMZW5ndGggPD0gMCB8fCAoc3BlbGxpbmdS
YW5nZVN0YXJ0T2Zmc2V0ID49IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgKCFzaG91bGRNYXJr
R3JhbW1hciB8fCBncmFtbWFyUmFuZ2VTdGFydE9mZnNldCA+PSBncmFtbWFyUmFuZ2VFbmRPZmZz
ZXQpKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChwZXJmb3JtVGV4dENoZWNraW5n
UmVwbGFjZW1lbnRzKSB7CisKKyAgICBpZiAoc2hvdWxkUGVyZm9ybVRleHRDaGVja2luZ1JlcGxh
Y2VtZW50cykgewogICAgICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvblR5
cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgewogICAgICAgICAgICAg
Ly8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBzbyB3ZSBjYW4gcmVzdG9yZSBp
dCBsYXRlciBpZiBuZWVkZWQKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gb2Zmc2V0QXNSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9j
dW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSk7CkBAIC0yNTcwLDE0ICsyNTc2LDE2IEBAIHZvaWQgRWRpdG9yOjpt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KLSAgICAKKwogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAg
dWludDY0X3QgY2hlY2tpbmdUeXBlcyA9IDA7Ci0gICAgaWYgKG1hcmtTcGVsbGluZykKKyAgICBp
ZiAoc2hvdWxkTWFya1NwZWxsaW5nKQogICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRDaGVj
a2luZ1R5cGVTcGVsbGluZzsKLSAgICBpZiAobWFya0dyYW1tYXIpCisgICAgaWYgKHNob3VsZE1h
cmtHcmFtbWFyKQogICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRDaGVja2luZ1R5cGVHcmFt
bWFyOwotICAgIGlmIChwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKSB7CisgICAgaWYg
KHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCisgICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4
dENoZWNraW5nVHlwZUNvcnJlY3Rpb247CisgICAgaWYgKHNob3VsZFBlcmZvcm1UZXh0Q2hlY2tp
bmdSZXBsYWNlbWVudHMpIHsKICAgICAgICAgaWYgKGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVu
YWJsZWQoKSkKICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4dENoZWNraW5nVHlwZUxp
bms7CiAgICAgICAgIGlmIChpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpKQpA
QCAtMjU4NiwyMCArMjU5NCwyNiBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyCiAgICAgICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRDaGVja2luZ1R5cGVEYXNo
OwogICAgICAgICBpZiAoaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCiAgICAg
ICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudDsKLSAg
ICAgICAgaWYgKG1hcmtTcGVsbGluZyAmJiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVu
YWJsZWQoKSkKKyAgICAgICAgaWYgKHNob3VsZE1hcmtTcGVsbGluZyAmJiBpc0F1dG9tYXRpY1Nw
ZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMgfD0g
VGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247CiAgICAgfQogICAgIGNsaWVudCgpLT5jaGVja1Rl
eHRPZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhMZW5n
dGgsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwotICAgIAorCisjaWYgUExBVEZPUk0oTUFDKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIC8vIElmIHRo
aXMgY2hlY2tpbmcgaXMgb25seSBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBzaG91
bGRuJ3QgYm90aGVyIHRvIG1hcmsgbWlzc3BlbGxpbmdzLgorICAgIGlmIChzaG91bGRTaG93Q29y
cmVjdGlvblBhbmVsKQorICAgICAgICBzaG91bGRNYXJrU3BlbGxpbmcgPSBEb05vdE1hcmtTcGVs
bGluZzsKKyNlbmRpZgorCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6
ZSgpOyBpKyspIHsKICAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAm
cmVzdWx0c1tpXTsKICAgICAgICAgaW50IHJlc3VsdExvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlv
biArIG9mZnNldER1ZVRvUmVwbGFjZW1lbnQ7CiAgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBy
ZXN1bHQtPmxlbmd0aDsKLSAgICAgICAgaWYgKG1hcmtTcGVsbGluZyAmJiByZXN1bHQtPnR5cGUg
PT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdExvY2F0aW9uID49IHNwZWxsaW5n
UmFuZ2VTdGFydE9mZnNldCAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA8PSBzcGVs
bGluZ1JhbmdlRW5kT2Zmc2V0KSB7CisgICAgICAgIGlmIChzaG91bGRNYXJrU3BlbGxpbmcgJiYg
cmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiByZXN1bHRMb2NhdGlv
biA+PSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRM
ZW5ndGggPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCkgewogICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICBSZWZQ
dHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHNwZWxs
aW5nUmFuZ2UsIHJlc3VsdExvY2F0aW9uIC0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0LCByZXN1
bHRMZW5ndGgpOwogICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIo
ZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdl
dCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICB9IGVsc2UgaWYgKG1hcmtH
cmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiByZXN1
bHRMb2NhdGlvbiA8IGdyYW1tYXJSYW5nZUVuZE9mZnNldCAmJiByZXN1bHRMb2NhdGlvbiArIHJl
c3VsdExlbmd0aCA+IGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0KSB7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkTWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVH
cmFtbWFyICYmIHJlc3VsdExvY2F0aW9uIDwgZ3JhbW1hclJhbmdlRW5kT2Zmc2V0ICYmIHJlc3Vs
dExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoID4gZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQpIHsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49IDAp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlc3VsdC0+ZGV0YWlscy5z
aXplKCk7IGorKykgewogICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRldGFp
bCA9ICZyZXN1bHQtPmRldGFpbHNbal07CkBAIC0yNjA5LDcgKzI2MjMsNyBAQCB2b2lkIEVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAgICAgICAgICAgICAgIGdyYW1t
YXJSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1h
cmtlcihiYWRHcmFtbWFyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRh
aWwtPnVzZXJEZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMgJiYgcmVz
dWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiBy
ZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA+PSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQK
KyAgICAgICAgfSBlbHNlIGlmICgoc2hvdWxkUGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50
cyB8fCBzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKSAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3Vs
dExlbmd0aCA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmIHJlc3VsdExvY2F0aW9uICsgcmVz
dWx0TGVuZ3RoID49IHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldAogICAgICAgICAgICAgICAgICAg
ICAmJiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVMaW5rCiAgICAgICAgICAgICAg
ICAgICAgIHx8IHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlUXVvdGUKICAgICAgICAg
ICAgICAgICAgICAgfHwgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVEYXNoCkBAIC0y
NjQwLDcgKzI2NTQsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
CiAgICAgICAgICAgICAgICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7CiAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJr
ZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRN
YXJrZXI6OlJlcGxhY2VtZW50ICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLnN0YXJ0T2Zmc2V0
KSA8IGVuZE9mZnNldCAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID4gc3Rh
cnRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChtYXJrZXIudHlwZSA9PSBEb2N1
bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6
OlJlamVjdGVkQ29ycmVjdGlvbikgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuc3RhcnRPZmZz
ZXQpIDwgZW5kT2Zmc2V0ICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVuZE9mZnNldCkgPiBz
dGFydE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICAgICAgZG9SZXBsYWNlbWVudCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTI2NDgsNyArMjY2Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3IKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb1JlcGxhY2VtZW50ICYmIHNlbGVj
dGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpIHsKKyAg
ICAgICAgICAgIGlmIChkb1JlcGxhY2VtZW50ICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVs
ICYmIHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KHNlbGVjdGlvblRvUmVwbGFjZSkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpOwogICAgICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKQEAgLTI2NTYsMzEgKzI2NzAsNTQgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAgICAgICAgICAgICAg
ICAgICBkb1JlcGxhY2VtZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmc7CiAgICAgICAgICAgICBp
ZiAoZG9SZXBsYWNlbWVudCkgewogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0g
VGV4dENoZWNraW5nVHlwZUxpbmspIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZVNlbGVj
dGlvbkFmdGVyQ2hhbmdlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5FZGl0
UmljaGx5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQoQ3JlYXRlTGlu
a0NvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCByZXN1bHQtPnJlcGxhY2VtZW50
KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkgJiYgc2hvdWxkSW5zZXJ0
VGV4dChyZXN1bHQtPnJlcGxhY2VtZW50LCByYW5nZVRvUmVwbGFjZS5nZXQoKSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uVHlwZWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXBsYWNlZFN0
cmluZzsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tp
bmdUeXBlQ29ycmVjdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkU3RyaW5n
ID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlc3VsdC0+cmVwbGFjZW1lbnQsIGZhbHNlLCBmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgKz0gcmVwbGFj
ZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldER1
ZVRvUmVwbGFjZW1lbnQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiA8IHNlbGVjdGlvbk9mZnNldCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9mZnNldCArPSByZXBsYWNlbWVudExlbmd0
aCAtIHJlc3VsdExlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9
PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQWRkIGEgbWFya2VyIHNvIHRoYXQgY29ycmVjdGlvbnMgY2FuIGVhc2lseSBiZSB1bmRvbmUg
YW5kIHdvbid0IGJlIHJlLWNvcnJlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0
cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBo
UmFuZ2UuZ2V0KCksIHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQsIHJlcGxhY2VkU3RyaW5nKTsKKyNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsICYmIHJlc3VsdExvY2F0aW9uICsg
cmVzdWx0TGVuZ3RoID09IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgcmVzdWx0LT50eXBlID09
IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBXZSBvbmx5IHRoZSBzaG93IGNvcnJlY3Rpb24gcGFuZWwgb24gdGhlIGxhc3Qgd29yZC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJhbmdlVG9SZXBsYWNlLT50ZXh0UXVhZHModGV4dFF1YWRzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSB0ZXh0UXVhZHMuZW5kKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl
Y3QgdG90YWxCb3VuZGluZ0JveDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoVmVjdG9y
PEZsb2F0UXVhZD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dFF1YWRzLmJlZ2luKCk7IGl0IDwg
ZW5kOyArK2l0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQm91bmRpbmdCb3gu
dW5pdGUoaXQtPmJvdW5kaW5nQm94KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9yYW5n
ZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbiA9IHJhbmdlVG9SZXBsYWNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zdHJpbmdUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24gPSByZXBsYWNlZFN0
cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBh
bmVsKHRvdGFsQm91bmRpbmdCb3gsIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLCBy
ZXN1bHQtPnJlcGxhY2VtZW50LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvUmVw
bGFjZW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZG9SZXBsYWNlbWVu
dCkgeworICAgICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXN1bHQtPnJl
cGxhY2VtZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHNwZWxsaW5nUmFuZ2VF
bmRPZmZzZXQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7CisgICAgICAgICAg
ICAgICAgb2Zmc2V0RHVlVG9SZXBsYWNlbWVudCArPSByZXBsYWNlbWVudExlbmd0aCAtIHJlc3Vs
dExlbmd0aDsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24gPCBzZWxlY3Rpb25P
ZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9mZnNldCArPSByZXBsYWNlbWVu
dExlbmd0aCAtIHJlc3VsdExlbmd0aDsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBl
ID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKSB7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAv
LyBBZGQgYSBtYXJrZXIgc28gdGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBh
bmQgd29uJ3QgYmUgcmUtY29ycmVjdGVkLgorICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJlcGxhY2VkUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdl
LmdldCgpLCByZXN1bHRMb2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5ndGgpOworICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQsIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHsK
KworICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVs
KSB7CiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGNhcmV0IHBvc2l0aW9uIGlmIHdlIGhhdmUgbWFk
ZSBhbnkgcmVwbGFjZW1lbnRzCiAgICAgICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwg
ZW5kT2ZQYXJhZ3JhcGgoc3RhcnRPZk5leHRQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSkpKTsKICAgICAgICAgaW50IG5ld0xlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwpAQCAtMjcyMSw3ICsyNzU4LDggQEAgdm9p
ZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbQogI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh0cnVlLCBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBtYXJr
R3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgZ3JhbW1hclNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBmYWxzZSk7CisgICAgTWFya0dyYW1tYXJPck5vdCBz
aG91bGRNYXJrR3JhbW1hciA9IG1hcmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpID8gTWFya0dyYW1tYXIgOiBEb05vdE1hcmtHcmFtbWFyOworICAgIG1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoTWFya1NwZWxsaW5nLCBzcGVsbGluZ1NlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBzaG91bGRNYXJrR3JhbW1hciwgZ3JhbW1hclNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBEb05vdFBlcmZvcm1UZXh0Q2hlY2tp
bmdSZXBsYWNlbWVudCwgRG9Ob3RTaG93Q29ycmVjdGlvblBhbmVsKTsKICNlbHNlCiAgICAgUmVm
UHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01pc3NwZWxsaW5ncyhz
cGVsbGluZ1NlbGVjdGlvbiwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKQEAgLTI3MzAsNiArMjc2
OCw0NSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tCiAjZW5kaWYK
IH0KIAordm9pZCBFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9y
PiopCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgIFZpc2libGVQ
b3NpdGlvbiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwor
ICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJv
dW5kYXJ5KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHAsIHN0YXJ0KTsKKyAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKE1hcmtTcGVsbGluZywgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpLCBEb05vdE1hcmtHcmFtbWFyLCAwLCBEb05vdFBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNl
bWVudCwgU2hvd0NvcnJlY3Rpb25QYW5lbCk7CisjZW5kaWYKK30KKwordm9pZCBFZGl0b3I6Omhh
bmRsZVJlamVjdGVkQ29ycmVjdGlvbigpCit7CisgICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBt
X3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLmdldCgpOworICAgIGlmICghcmVwbGFjZWRS
YW5nZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgpICE9IHJlcGxhY2VkUmFuZ2UtPm93bmVyRG9jdW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWlu
ZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9j
dW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9zdHJpbmdUb0JlUmVwbGFjZWRCeUNv
cnJlY3Rpb24pOworfQorCit2b2lkIEVkaXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigp
Cit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05P
V19MRU9QQVJEKQorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJ
bnRlcnZhbCA9IDAuMzsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOworICAgIGlmIChpc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9u
ZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7CisjZW5kaWYKK30KKwordm9pZCBF
ZGl0b3I6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIGlmIChjbGllbnQo
KSkKKyAgICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoZmFsc2UpOworI2Vu
ZGlmCit9CisKIFBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJ
bnRQb2ludCYgd2luZG93UG9pbnQpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFt
ZS0+ZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9u
IDY2NDg4KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjQsNyArMjI0LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHRvZ2dsZUF1dG9tYXRpY1RleHRSZXBs
YWNlbWVudCgpOwogICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVk
KCk7CiAgICAgdm9pZCB0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKTsKLSAgICB2
b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoYm9vbCBtYXJrU3Bl
bGxpbmcsIFJhbmdlKiBzcGVsbGluZ1JhbmdlLCBib29sIG1hcmtHcmFtbWFyLCBSYW5nZSogZ3Jh
bW1hclJhbmdlLCBib29sIHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpOworICAgIGVu
dW0gTWFya1NwZWxsaW5nT3JOb3QgeyBEb05vdE1hcmtTcGVsbGluZywgTWFya1NwZWxsaW5nIH07
CisgICAgZW51bSBNYXJrR3JhbW1hck9yTm90IHsgRG9Ob3RNYXJrR3JhbW1hciwgTWFya0dyYW1t
YXIgfTsKKyAgICBlbnVtIFBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudE9yTm90IHsgRG9O
b3RQZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnQsIFBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBs
YWNlbWVudCB9OworICAgIGVudW0gU2hvd0NvcnJlY3Rpb25QYW5lbE9yTm90IHsgRG9Ob3RTaG93
Q29ycmVjdGlvblBhbmVsLCBTaG93Q29ycmVjdGlvblBhbmVsIH07CisgICAgdm9pZCBtYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE1hcmtTcGVsbGluZ09yTm90LCBSYW5n
ZSogc3BlbGxpbmdSYW5nZSwgTWFya0dyYW1tYXJPck5vdCwgUmFuZ2UqIGdyYW1tYXJSYW5nZSwg
UGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50T3JOb3QsIFNob3dDb3JyZWN0aW9uUGFuZWxP
ck5vdCk7CiAgICAgdm9pZCBjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nKTsKICNlbmRpZgogICAgIHZvaWQgYWR2YW5jZVRvTmV4dE1pc3NwZWxs
aW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24gPSBmYWxzZSk7CkBAIC0yOTQsOSArMjk4LDEz
IEBAIHB1YmxpYzoKICAgICBib29sIGluc2lkZVZpc2libGVBcmVhKGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7CiAgICAgYm9vbCBpbnNpZGVWaXNpYmxlQXJlYShSYW5nZSopIGNvbnN0OwogICAgIFBh
c3NSZWZQdHI8UmFuZ2U+IG5leHRWaXNpYmxlUmFuZ2UoUmFuZ2UqLCBjb25zdCBTdHJpbmcmLCBi
b29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wgd3JhcEZsYWcpOwotICAgIAorCiAgICAg
dm9pZCBhZGRUb0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBwcmVwZW5kKTsKIAorICAgIHZvaWQgaGFu
ZGxlQ2FuY2VsT3BlcmF0aW9uKCk7CisgICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVy
KCk7CisgICAgdm9pZCBoYW5kbGVSZWplY3RlZENvcnJlY3Rpb24oKTsKKwogICAgIHZvaWQgcGFz
dGVBc0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc21hcnRSZXBs
YWNlLCBib29sIG1hdGNoU3R5bGUpOwogICAgIHZvaWQgcGFzdGVBc1BsYWluVGV4dChjb25zdCBT
dHJpbmcmLCBib29sIHNtYXJ0UmVwbGFjZSk7CiAKQEAgLTMxOCw2ICszMjYsOSBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9zaG91bGRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2U7CiAgICAgYm9vbCBt
X3Nob3VsZFN0eWxlV2l0aENTUzsKICAgICBPd25QdHI8S2lsbFJpbmc+IG1fa2lsbFJpbmc7Cisg
ICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uOworICAgIFN0
cmluZyBtX3N0cmluZ1RvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbjsKKyAgICBUaW1lcjxFZGl0b3I+
IG1fY29ycmVjdGlvblBhbmVsVGltZXI7CiAKICAgICBib29sIGNhbkRlbGV0ZVJhbmdlKFJhbmdl
KikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChQYXN0ZWJv
YXJkKik7CkBAIC0zMzUsOCArMzQ2LDkgQEAgcHJpdmF0ZToKIAogICAgIFBhc3NSZWZQdHI8UmFu
Z2U+IGZpcnN0VmlzaWJsZVJhbmdlKGNvbnN0IFN0cmluZyYsIGJvb2wgY2FzZUZsYWcpOwogICAg
IFBhc3NSZWZQdHI8UmFuZ2U+IGxhc3RWaXNpYmxlUmFuZ2UoY29uc3QgU3RyaW5nJiwgYm9vbCBj
YXNlRmxhZyk7Ci0gICAgCisKICAgICB2b2lkIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcsIGJv
b2wgY2xlYXJUeXBpbmdTdHlsZSk7CisgICAgdm9pZCBjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVk
KFRpbWVyPEVkaXRvcj4qIHRpbWVyKTsKICAgICBOb2RlKiBmaW5kRXZlbnRUYXJnZXRGcm9tU2Vs
ZWN0aW9uKCkgY29uc3Q7CiB9OwogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShy
ZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA2OSw2ICsxMDY5LDE0IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVZYW5r
QW5kU2VsZWN0KEZyYW1lKiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIFBMQVRGT1JNKE1B
QykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKK3N0YXRpYyBi
b29sIGV4ZWN1dGVDYW5jZWxPcGVyYXRpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCit7CisgICAgZnJhbWUtPmVkaXRvcigpLT5oYW5k
bGVDYW5jZWxPcGVyYXRpb24oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiAvLyBT
dXBwb3J0ZWQgZnVuY3Rpb25zCiAKIHN0YXRpYyBib29sIHN1cHBvcnRlZChGcmFtZSosIEVkaXRv
ckNvbW1hbmRTb3VyY2UpCkBAIC0xNDU1LDYgKzE0NjMsOSBAQCBzdGF0aWMgY29uc3QgQ29tbWFu
ZE1hcCYgY3JlYXRlQ29tbWFuZE1hCiAgICAgICAgIHsgIlVuc2VsZWN0IiwgeyBleGVjdXRlVW5z
ZWxlY3QsIHN1cHBvcnRlZCwgZW5hYmxlZFZpc2libGVTZWxlY3Rpb24sIHN0YXRlTm9uZSwgdmFs
dWVOdWxsLCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVk
IH0gfSwKICAgICAgICAgeyAiWWFuayIsIHsgZXhlY3V0ZVlhbmssIHN1cHBvcnRlZEZyb21NZW51
T3JLZXlCaW5kaW5nLCBlbmFibGVkSW5FZGl0YWJsZVRleHQsIHN0YXRlTm9uZSwgdmFsdWVOdWxs
LCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwK
ICAgICAgICAgeyAiWWFua0FuZFNlbGVjdCIsIHsgZXhlY3V0ZVlhbmtBbmRTZWxlY3QsIHN1cHBv
cnRlZEZyb21NZW51T3JLZXlCaW5kaW5nLCBlbmFibGVkSW5FZGl0YWJsZVRleHQsIHN0YXRlTm9u
ZSwgdmFsdWVOdWxsLCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRp
c2FibGVkIH0gfSwKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpCisgICAgICAgIHsgIkNhbmNlbE9wZXJhdGlvbiIsIHsgZXhlY3V0
ZUNhbmNlbE9wZXJhdGlvbiwgc3VwcG9ydGVkRnJvbU1lbnVPcktleUJpbmRpbmcsIGVuYWJsZWRJ
bkVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24sIGRv
Tm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAorI2VuZGlmCiAgICAgfTsKIAogICAg
IC8vIFRoZXNlIHVuc3VwcG9ydGVkIGNvbW1hbmRzIGFyZSBsaXN0ZWQgaGVyZSBzaW5jZSB0aGV5
IGFwcGVhciBpbiB0aGUgTWljcm9zb2Z0CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3Bw
CShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzA3LDYgKzMwNywxMCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1h
cmtNaXNzcGVsbGluZ3NBZnRlCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwMiA9IHN0YXJ0T2ZX
b3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIGlmIChwMSAhPSBwMikK
ICAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5tYXJrTWlzc3BlbGxp
bmdzQWZ0ZXJUeXBpbmdUb1Bvc2l0aW9uKHAxKTsKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5zdGFydENvcnJlY3Rpb25QYW5l
bFRpbWVyKCk7CisjZW5kaWYKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShy
ZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NjAsNiArNDYwLDEwIEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQogICAgIHZpcnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBVQ2hhcios
IGludCwgdWludDY0X3QsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JikgeyB9OwogI2VuZGlm
CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQorICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIEVkaXRvciopIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wpIHsgfQorI2VuZGlmCiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJp
bmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wpIHsgfQpJbmRleDogV2ViQ29yZS9wYWdlL0VkaXRv
ckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkocmV2
aXNpb24gNjY0ODgpCisrKyBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgRWRpdG9yQ2xpZW50X2gKIAogI2luY2x1ZGUg
IkVkaXRvckluc2VydEFjdGlvbi5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVGV4dEFmZmluaXR5LmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KQEAgLTUxLDYgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgRWRpdENvbW1hbmQ7CitjbGFzcyBFZGl0
b3I7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBIVE1MRWxlbWVudDsKQEAg
LTE3Nyw2ICsxNzksMTIgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCiAgICAg
dmlydHVhbCB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQg
bGVuZ3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiYgcmVzdWx0cykgPSAwOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgdmlydHVhbCB2b2lkIHNob3dD
b3JyZWN0aW9uUGFuZWwoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjbWVu
dFN0cmluZywgRWRpdG9yKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlv
blBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKSA9IDA7CisjZW5kaWYKKwogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwg
Y29uc3QgR3JhbW1hckRldGFpbCYgZGV0YWlsKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpID0gMDsKSW5kZXg6IFdlYkNvcmUv
cGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2
aXNpb24gNjY0ODgpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDQ4LDggKzE0NDgsMTAgQEAgdm9pZCBGcmFtZTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bihjbwogCiAgICAgICAgIC8vIFRoaXMgb25seSBlcmFzZXMgbWFya2VycyB0aGF0IGFyZSBpbiB0
aGUgZmlyc3QgdW5pdCAod29yZCBvciBzZW50ZW5jZSkgb2YgdGhlIHNlbGVjdGlvbi4KICAgICAg
ICAgLy8gUGVyaGFwcyBwZWN1bGlhciwgYnV0IGl0IG1hdGNoZXMgQXBwS2l0LgotICAgICAgICBp
ZiAoUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBuZXdBZGphY2VudFdvcmRzLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpCisgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5ld0FkamFj
ZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewogICAgICAgICAgICAgZG9jdW1lbnQoKS0+
bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFy
a2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAg
ICAgIH0KICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gc2VudGVuY2VSYW5nZSA9IG5ld1NlbGVj
dGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgICAgIGRvY3VtZW50KCkt
Pm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhzZW50ZW5jZVJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hcik7CiAgICAgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw4ICsyNzEs
MTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBGbG9hdFJlY3Qgcm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4
dChjb25zdCBJbnRQb2ludCYsIGludCB3aWR0aCwgYm9vbCBwcmludGluZyk7CisjaWYgUExBVEZP
Uk0oTUFDKQorICAgICAgICBlbnVtIFRleHRDaGVja2luZ0xpbmVTdHlsZSB7CisgICAgICAgICAg
ICBUZXh0Q2hlY2tpbmdJbnZhbGlkTGluZVN0eWxlID0gLTEsCisgICAgICAgICAgICBUZXh0Q2hl
Y2tpbmdTcGVsbGluZ0xpbmVTdHlsZSwKKyAgICAgICAgICAgIFRleHRDaGVja2luZ0dyYW1tYXJM
aW5lU3R5bGUsCisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZQor
ICAgICAgICB9OworICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IElu
dFBvaW50JiwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpOworI2Vsc2UKICAgICAg
ICAgdm9pZCBkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50
JiwgaW50IHdpZHRoLCBib29sIGdyYW1tYXIpOwotCisjZW5kaWYKICAgICAgICAgYm9vbCBwYWlu
dGluZ0Rpc2FibGVkKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0UGFpbnRpbmdEaXNhYmxlZChi
b29sKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250
ZXh0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNpb24gNjY0ODgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1
LDEzICsyNSwxMSBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29u
dGV4dC5oIgotCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgor
I2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCA8QXBwS2l0L0FwcEtp
dC5oPgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCi0jaW1wb3J0ICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCi0KIEBjbGFzcyBOU0NvbG9yOwogCiAvLyBGSVhNRTogTW9yZSBvZiB0
aGlzIHNob3VsZCB1c2UgQ29yZUdyYXBoaWNzIGluc3RlYWQgb2YgQXBwS2l0LgpAQCAtMTE5LDcg
KzExNyw3IEBAIHN0YXRpYyBOU0NvbG9yKiBjcmVhdGVQYXR0ZXJuQ29sb3IoTlNTdHIKIH0KIAog
Ly8gV2ViS2l0IG9uIE1hYyBpcyBhIHN0YW5kYXJkIHBsYXRmb3JtIGNvbXBvbmVudCwgc28gaXQg
bXVzdCB1c2UgdGhlIHN0YW5kYXJkIHBsYXRmb3JtIGFydHdvcmsgZm9yIHVuZGVybGluZS4KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNv
bnN0IEludFBvaW50JiBwb2ludCwgaW50IHdpZHRoLCBib29sIGdyYW1tYXIpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgSW50UG9pbnQmIHBvaW50
LCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjcsMjMgKzEyNSw0MSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsCiAgICAgLy8gVGhlc2UgYXJl
IHRoZSBzYW1lIGZvciBtaXNzcGVsbGluZyBvciBiYWQgZ3JhbW1hci4KICAgICBpbnQgcGF0dGVy
bkhlaWdodCA9IGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3M7CiAgICAgaW50IHBhdHRlcm5XaWR0
aCA9IGNNaXNzcGVsbGluZ0xpbmVQYXR0ZXJuV2lkdGg7Ci0gCisKICAgICBib29sIHVzaW5nRG90
OwogICAgIE5TQ29sb3IgKnBhdHRlcm5Db2xvcjsKLSAgICBpZiAoZ3JhbW1hcikgewotICAgICAg
ICAvLyBDb25zdGFudHMgZm9yIGdyYW1tYXIgcGF0dGVybiBjb2xvci4KLSAgICAgICAgc3RhdGlj
IGJvb2wgdXNpbmdEb3RGb3JHcmFtbWFyID0gZmFsc2U7Ci0gICAgICAgIERFRklORV9TVEFUSUNf
TE9DQUwoUmV0YWluUHRyPE5TQ29sb3I+LCBncmFtbWFyUGF0dGVybkNvbG9yLCAoY3JlYXRlUGF0
dGVybkNvbG9yKEAiR3JhbW1hckRvdCIsIFtOU0NvbG9yIGdyZWVuQ29sb3JdLCB1c2luZ0RvdEZv
ckdyYW1tYXIpKSk7Ci0gICAgICAgIAotICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yR3Jh
bW1hcjsKLSAgICAgICAgcGF0dGVybkNvbG9yID0gZ3JhbW1hclBhdHRlcm5Db2xvci5nZXQoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBDb25zdGFudHMgZm9yIHNwZWxsaW5nIHBhdHRlcm4g
Y29sb3IuCi0gICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcgPSBmYWxzZTsK
LSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8TlNDb2xvcj4sIHNwZWxsaW5n
UGF0dGVybkNvbG9yLCAoY3JlYXRlUGF0dGVybkNvbG9yKEAiU3BlbGxpbmdEb3QiLCBbTlNDb2xv
ciByZWRDb2xvcl0sIHVzaW5nRG90Rm9yU3BlbGxpbmcpKSk7Ci0gICAgICAgIAotICAgICAgICB1
c2luZ0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxpbmc7Ci0gICAgICAgIHBhdHRlcm5Db2xvciA9IHNw
ZWxsaW5nUGF0dGVybkNvbG9yLmdldCgpOworICAgIHN3aXRjaCAoc3R5bGUpIHsKKyAgICAgICAg
Y2FzZSBUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZToKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gQ29uc3RhbnRzIGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgorICAgICAgICAgICAg
c3RhdGljIGJvb2wgdXNpbmdEb3RGb3JTcGVsbGluZyA9IGZhbHNlOworICAgICAgICAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8TlNDb2xvcj4sIHNwZWxsaW5nUGF0dGVybkNvbG9y
LCAoY3JlYXRlUGF0dGVybkNvbG9yKEAiU3BlbGxpbmdEb3QiLCBbTlNDb2xvciByZWRDb2xvcl0s
IHVzaW5nRG90Rm9yU3BlbGxpbmcpKSk7CisgICAgICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90
Rm9yU3BlbGxpbmc7CisgICAgICAgICAgICBwYXR0ZXJuQ29sb3IgPSBzcGVsbGluZ1BhdHRlcm5D
b2xvci5nZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
VGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
Q29uc3RhbnRzIGZvciBncmFtbWFyIHBhdHRlcm4gY29sb3IuCisgICAgICAgICAgICBzdGF0aWMg
Ym9vbCB1c2luZ0RvdEZvckdyYW1tYXIgPSBmYWxzZTsKKyAgICAgICAgICAgIERFRklORV9TVEFU
SUNfTE9DQUwoUmV0YWluUHRyPE5TQ29sb3I+LCBncmFtbWFyUGF0dGVybkNvbG9yLCAoY3JlYXRl
UGF0dGVybkNvbG9yKEAiR3JhbW1hckRvdCIsIFtOU0NvbG9yIGdyZWVuQ29sb3JdLCB1c2luZ0Rv
dEZvckdyYW1tYXIpKSk7CisgICAgICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yR3JhbW1h
cjsKKyAgICAgICAgICAgIHBhdHRlcm5Db2xvciA9IGdyYW1tYXJQYXR0ZXJuQ29sb3IuZ2V0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAgICAgY2FzZSBUZXh0
Q2hlY2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZToKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
Q29uc3RhbnRzIGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgorICAgICAgICAgICAgc3RhdGlj
IGJvb2wgdXNpbmdEb3RGb3JTcGVsbGluZyA9IGZhbHNlOworICAgICAgICAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChSZXRhaW5QdHI8TlNDb2xvcj4sIHNwZWxsaW5nUGF0dGVybkNvbG9yLCAoY3Jl
YXRlUGF0dGVybkNvbG9yKEAiQ29ycmVjdGlvbkRvdCIsIFtOU0NvbG9yIGJsdWVDb2xvcl0sIHVz
aW5nRG90Rm9yU3BlbGxpbmcpKSk7CisgICAgICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9y
U3BlbGxpbmc7CisgICAgICAgICAgICBwYXR0ZXJuQ29sb3IgPSBzcGVsbGluZ1BhdHRlcm5Db2xv
ci5nZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUg
dG8gZHJhdyBvbmx5IGNvbXBsZXRlIGRvdHMuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAkocmV2aXNpb24gNjY0ODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDYgKzc2OCwyMiBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwCiAgICAgICAgIGNvbnRleHQtPmNsZWFyU2hhZG93
KCk7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCitzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpUZXh0
Q2hlY2tpbmdMaW5lU3R5bGUgdGV4dENoZWNraW5nTGluZVN0eWxlRm9yTWFya2VyVHlwZShEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQoreworICAgIHN3aXRjaCAobWFya2Vy
VHlwZSkgeworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgorICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZTsKKyAgICBj
YXNlIERvY3VtZW50TWFya2VyOjpHcmFtbWFyOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0OjpUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlOworICAgIGNhc2UgRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50OgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0Q2hl
Y2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0OjpUZXh0Q2hlY2tpbmdJbnZhbGlkTGluZVN0eWxlOworICAgIH0KK30K
KyNlbmRpZgorCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJr
ZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IERvY3VtZW50TWFy
a2VyJiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBn
cmFtbWFyKQogewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5nL2dyYW1tYXIgbWFya2VycyAo
NTMyNzg4NykKQEAgLTgzMSw3ICs4NDcsMTEgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNw
ZWxsaW5nT3JHcmFtbQogICAgICAgICAvLyBJbiBsYXJnZXIgZm9udHMsIHRob3VnaCwgcGxhY2Ug
dGhlIHVuZGVybGluZSB1cCBuZWFyIHRoZSBiYXNlbGluZSB0byBwcmV2ZW50IGEgYmlnIGdhcC4K
ICAgICAgICAgdW5kZXJsaW5lT2Zmc2V0ID0gYmFzZWxpbmUgKyAyOwogICAgIH0KKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgcHQtPmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKEludFBvaW50KHR4ICsg
bV94ICsgc3RhcnQsIHR5ICsgbV95ICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIHRleHRDaGVj
a2luZ0xpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLnR5cGUpKTsKKyNlbHNlCiAgICAgcHQt
PmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoSW50UG9pbnQodHggKyBtX3ggKyBz
dGFydCwgdHkgKyBtX3kgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgZ3JhbW1hcik7CisjZW5k
aWYKIH0KIAogdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGlj
c0NvbnRleHQqIHB0LCBpbnQgdHgsIGludCB0eSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtl
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250KQpAQCAtODk4LDEwICs5MTgs
MTAgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycwogICAgICAgICAg
ICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjoKICAgICAgICAgICAgIGNhc2UgRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nOgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQ6CisgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJl
Y3Rpb246CiAgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmQpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoOgogICAgICAgICAgICAg
ICAgIGlmICghYmFja2dyb3VuZCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC05
MzMsNiArOTUzLDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2Vycwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6
UmVwbGFjZW1lbnQ6CiAgICAgICAgICAgICAgICAgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1h
cmtlcih0eCwgdHksIG1hcmtlciwgc3R5bGUsIGZvbnQpOworICAgICAgICAgICAgICAgIHBhaW50
U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIocHQsIHR4LCB0eSwgbWFya2VyLCBzdHlsZSwgZm9udCwg
ZmFsc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb2N1bWVu
dE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjQ4OCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDgtMzEgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yIGF1dG9jb3JyZWN0aW9uIFVJIG9uIE1hYyBPUyBYLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5NTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzcyOTk2MjE+CisKKyAgICAgICAgU2VlIGRldGFpbGVkIGhpZ2ggbGV2ZWwgZGVzY3JpcHRpb24g
aW4gV2ViQ29yZS9DaGFuZ2VMb2cuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVu
dDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6IER1bW15IGltcGxlbWVudGF0aW9uLgorICAgICAgICAo
V2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOiBEaXR0bwor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDog
QWRkZWQgbmV3IG1ldGhvZHMgZGVjbGFyZWQgaW4gYmFzZSBjbGFzcy4KKwogMjAxMC0wOC0zMSAg
Wm9sdGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBCdWlsZCBmaXgg
YWZ0ZXIgcjY2NDQ4IG9uIFdlYktpdDIuCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gNjY0ODgp
CisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDQgKzQ2OSwxNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6c2V0SW5wdXRNZXRob2RTdGF0CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAorI2lmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCit2b2lkIFdlYkVkaXRvckNs
aWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIFdlYkNvcmU6OkVkaXRvciop
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRp
c21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmgJKHJldmlzaW9uIDY2NDg4KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTIgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAKLXByaXZhdGU6ICAgIAorcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwotICAgIAorCiAgICAgdmlydHVhbCBib29sIHNob3Vs
ZERlbGV0ZVJhbmdlKFdlYkNvcmU6OlJhbmdlKik7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFNo
b3dEZWxldGVJbnRlcmZhY2UoV2ViQ29yZTo6SFRNTEVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIGJv
b2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7IAorICAgIHZpcnR1YWwgYm9vbCBzbWFydElu
c2VydERlbGV0ZUVuYWJsZWQoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1do
aXRlc3BhY2VFbmFibGVkKCk7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKCk7CiAgICAgdmlydHVhbCB2b2lkIHRvZ2dsZUNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nKCk7CkBAIC0xMzEsNyArMTMxLDEwIEBAIHByaXZhdGU6ICAgIAogICAgIHZpcnR1YWwg
dm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYsIFZlY3RvcjxXVEY6OlN0
cmluZz4mIGd1ZXNzZXMpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0
ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7
Ci0KKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIHZp
cnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
Ym91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgV2ViQ29yZTo6RWRp
dG9yKik7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3Jy
ZWN0aW9uQWNjZXB0ZWQpOworI2VuZGlmCiAgICAgV2ViUGFnZSogbV9wYWdlOwogfTsKIApJbmRl
eDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDY2NDg4KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0wOC0zMSAgSmlhIFB1ICA8anB1QGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3Vw
cG9ydCBmb3IgYXV0b2NvcnJlY3Rpb24gVUkgb24gTWFjIE9TIFguCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDk1OAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzI5OTYyMT4KKworICAgICAgICBTZWUgZGV0YWlsZWQgaGlnaCBsZXZlbCBkZXNjcmlw
dGlvbiBpbiBXZWJDb3JlL0NoYW5nZUxvZy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5oOiBBZGRlZCBuZXcgbWVtYmVyIG1ldGhvZHMgZGVjbGFyZWQgaW4gRWRp
dG9yQ2xpZW50LiBBZGRlZCBtX2NvcnJlY3Rpb25QYW5lbFRhZyB0byBzdG9yZSB0aGUgSUQgb2Yg
Y3VycmVudCBhdXRvY29ycmVjdGlvbiBVSSBvYmplY3QuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OldlYkVk
aXRvckNsaWVudCk6IEluaXRpYWxpemUgbV9jb3JyZWN0aW9uUGFuZWxUYWcuCisgICAgICAgIChX
ZWJFZGl0b3JDbGllbnQ6On5XZWJFZGl0b3JDbGllbnQpOiBNYWtlIHN1cmUgdGhlIGF1dG9jb3Jy
ZWN0aW9uIFVJIGlzIGRpc21pc3NlZCBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2JqZWN0LgorICAg
ICAgICAoV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKTogRGlzbWlz
cyBhdXRvY29ycmVjdGlvbiBVSSB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuCisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwpOiBTaG93IGF1dG9jb3Jy
ZWN0aW9uIFVJLgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBh
bmVsKTogRGlzbWlzcyBhdXRvY29ycmVjdGlvbiBVSS4KKwogMjAxMC0wOC0zMCAgTWFyayBSb3dl
ICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZp
c2lvbiA2NjQ4OCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAor
I2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yQ2xpZW50
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgpA
QCAtMzgsNyArMzksNyBAQAogY2xhc3MgV2ViRWRpdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6
OkVkaXRvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgV2ViRWRpdG9yQ2xpZW50KFdlYlZpZXcgKik7
Ci0gICAgCisgICAgdmlydHVhbCB+V2ViRWRpdG9yQ2xpZW50KCk7CiAgICAgdmlydHVhbCB2b2lk
IHBhZ2VEZXN0cm95ZWQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKTsKQEAgLTEyOSwxMiArMTMwLDE5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgV1RGOjpTdHJpbmcmLCBXVEY6OlZlY3RvcjxXVEY6OlN0
cmluZz4mIGd1ZXNzZXMpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0
ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7
CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICB2aXJ0
dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJv
dW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIFdlYkNvcmU6OkVkaXRv
ciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVj
dGlvbkFjY2VwdGVkKTsKKyNlbmRpZgogcHJpdmF0ZToKICAgICB2b2lkIHJlZ2lzdGVyQ29tbWFu
ZEZvclVuZG9PclJlZG8oUGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4sIGJvb2wgaXNS
ZWRvKTsKICAgICBXZWJFZGl0b3JDbGllbnQoKTsKLSAgICAKKwogICAgIFdlYlZpZXcgKm1fd2Vi
VmlldzsKICAgICBSZXRhaW5QdHI8V2ViRWRpdG9yVW5kb1RhcmdldD4gbV91bmRvVGFyZ2V0Owot
ICAgIAogICAgIGJvb2wgbV9oYXZlVW5kb1JlZG9PcGVyYXRpb25zOworCisjaWYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBOU0ludGVnZXIgbV9jb3JyZWN0
aW9uUGFuZWxUYWc7CisjZW5kaWYKIH07CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2aXNpb24gNjY0ODgpCisrKyBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjQsNiAr
NjQsOSBAQAogI2ltcG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2ltcG9ydCA8d3RmL1RocmVhZGluZy5oPgorI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaW1wb3J0IDxBcHBLaXQvTlNU
ZXh0Q2hlY2tlci5oPgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcg
bmFtZXNwYWNlIFdURjsKQEAgLTE3MSw3ICsxNzQsMTcgQEAgV2ViRWRpdG9yQ2xpZW50OjpXZWJF
ZGl0b3JDbGllbnQoV2ViVmlldwogICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX3Vu
ZG9UYXJnZXQoW1tbV2ViRWRpdG9yVW5kb1RhcmdldCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
KQogICAgICwgbV9oYXZlVW5kb1JlZG9PcGVyYXRpb25zKGZhbHNlKQorI2lmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRh
ZygtMSkKKyNlbmRpZgoreworfQorCitXZWJFZGl0b3JDbGllbnQ6On5XZWJFZGl0b3JDbGllbnQo
KQogeworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAg
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKKyNlbmRpZgogfQogCiBib29sIFdlYkVkaXRv
ckNsaWVudDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQpAQCAtMjg2LDYgKzI5
OSwxMCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlCiB7CiAgICAg
W21fd2ViVmlldyBfc2VsZWN0aW9uQ2hhbmdlZF07CiAKKyNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7
CisjZW5kaWYKKwogICAgIC8vIEZJWE1FOiBUaGlzIHF1aXJrIGlzIG5lZWRlZCBkdWUgdG8gPHJk
YXI6Ly9wcm9ibGVtLzUwMDk2MjU+IC0gV2UgY2FuIHBoYXNlIGl0IG91dCBvbmNlIEFwZXJ0dXJl
IGNhbiBhZG9wdCB0aGUgbmV3IGJlaGF2aW9yIG9uIHRoZWlyIGVuZAogICAgIGlmICghV2ViS2l0
TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhPVVRfQVBFUlRVUkVfUVVJ
UkspICYmIFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxU
b1N0cmluZzpAImNvbS5hcHBsZS5BcGVydHVyZSJdKQogICAgICAgICByZXR1cm47CkBAIC03OTAs
NiArODA3LDM1IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2kKICNl
bmRpZgogfQogCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
K3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IEZsb2F0UmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBFZGl0b3IqIGVkaXRvcikgewor
ICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7CisKKyAgICBOU1JlY3QgYm91bmRpbmdC
b3hBc05TUmVjdCA9IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZzsKKyAgICBOU1JlY3Qgd2Vi
Vmlld0ZyYW1lID0gbV93ZWJWaWV3LmZyYW1lOworICAgIGJvdW5kaW5nQm94QXNOU1JlY3Qub3Jp
Z2luLnkgPSB3ZWJWaWV3RnJhbWUuc2l6ZS5oZWlnaHQtTlNNYXhZKGJvdW5kaW5nQm94QXNOU1Jl
Y3QpOworCisgICAgLy8gTmVlZCB0byBleHBsaWNpdGx5IHVzZSB0aGVzZSBsb2NhbCBOU1N0cmlu
ZyBvYmplY3RzLCBiZWNhdXNlIHRoZSBDKysgcmVmZXJlbmNlcyBtYXkgYmUgaW52YWxpZGF0ZWQg
YnkgdGhlIHRpbWUgdGhlIGJsb2NrIGJlbG93IGlzIGV4ZWN1dGVkLgorICAgIE5TU3RyaW5nICpy
ZXBsYWNlZFN0cmluZ0FzTlNTdHJpbmcgPSByZXBsYWNlZFN0cmluZzsKKyAgICBOU1N0cmluZyAq
cmVwbGFjZW1lbnRTdHJpbmdBc05TU3RyaW5nID0gcmVwbGFjZW1lbnRTdHJpbmc7CisKKyAgICBt
X2NvcnJlY3Rpb25QYW5lbFRhZyA9IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2Vy
XSBzaG93Q29ycmVjdGlvbjpyZXBsYWNlbWVudFN0cmluZ0FzTlNTdHJpbmcgZm9yU3RyaW5nSW5S
ZWN0OmJvdW5kaW5nQm94QXNOU1JlY3QgdmlldzptX3dlYlZpZXcgY29tcGxldGlvbkhhbmRsZXI6
XihCT09MIGFjY2VwdGVkKSB7CisgICAgICAgIGlmICghYWNjZXB0ZWQpIHsKKyAgICAgICAgICAg
IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZWNvcmRSZXNwb25zZTpOU0Nv
cnJlY3Rpb25SZXNwb25zZVJlamVjdGVkIHRvQ29ycmVjdGlvbjpyZXBsYWNlbWVudFN0cmluZ0Fz
TlNTdHJpbmcgZm9yV29yZDpyZXBsYWNlZFN0cmluZ0FzTlNTdHJpbmcgbGFuZ3VhZ2U6bmlsIGlu
U3BlbGxEb2N1bWVudFdpdGhUYWc6W21fd2ViVmlldyBzcGVsbENoZWNrZXJEb2N1bWVudFRhZ11d
OworICAgICAgICAgICAgZWRpdG9yLT5oYW5kbGVSZWplY3RlZENvcnJlY3Rpb24oKTsKKyAgICAg
ICAgfQorICAgIH1dOworfQorCit2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbChib29sIGNvcnJlY3Rpb25BY2NlcHRlZCkKK3sKKyAgICBpZiAobV9jb3JyZWN0aW9u
UGFuZWxUYWcgPj0gMCkgeworICAgICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hl
Y2tlcl0gZGlzbWlzc0NvcnJlY3Rpb246bV9jb3JyZWN0aW9uUGFuZWxUYWcgYWNjZXB0Q29ycmVj
dGlvbjpjb3JyZWN0aW9uQWNjZXB0ZWRdOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbFRhZyA9
IC0xOworICAgIH0KK30KKyNlbmRpZgorCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3Bl
bGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQog
ewogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVTcGVsbGlu
Z1BhbmVsV2l0aE1pc3NwZWxsZWRXb3JkOm1pc3NwZWxsZWRXb3JkXTsK
</data>
<flag name="review"
          id="55039"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66168</attachid>
            <date>2010-08-31 22:33:21 -0700</date>
            <delta_ts>2010-08-31 22:43:28 -0700</delta_ts>
            <desc>Proposed patch (v4)</desc>
            <filename>WebKitAutoCorrection.patch</filename>
            <type>text/plain</type>
            <size>56899</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAxIEBACisyMDEwLTA4LTMxICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBhdXRvY29ycmVjdGlvbiBVSSBvbiBNYWMgT1MgWC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTU4CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83Mjk5NjIxPgkJCisKKyAgICAgICAgU2V2ZXJhbCBuZXcgbWVtYmVyIG1ldGhvZHMgYXJlIGFk
ZGVkIHRvIEVkaXRvckNsaWVudCBmb3IgY29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVuIFdl
YkNvcmUgYW5kIFdlYktpdC4gQSBuZXcgaGFuZGxlciwgZXhlY3V0ZUNhbmNlbE9wZXJhdGlvbigp
LCBpcworICAgICAgICBhZGRlZCB0byBFZGl0b3JDb21tYW5kLmNwcCBzbyB0aGF0IFdlYkNvcmUg
Y2FuIGludGVyY2VwdCB0aGUgRVNDIGtleSBldmVudAorICAgICAgICB0byBkaXNtaXNzIGF1dG9j
b3JyZWN0aW9uIFVJLiBBIG5ldyBEb2N1bWVudE1hcmtlciB2YWx1ZSwgUmVqZWN0ZWRDb3JyZWN0
aW9uLAorICAgICAgICBpcyBhZGRlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjb3JyZWN0aW9ucyB0
aGF0IHVzZXIgaGFzIHJlamVjdGVkLCBzbyB0aGF0IGl0CisgICAgICAgIHdpbGwgbm90IGJlIHN1
Z2dlc3RlZCBhZ2FpbiBsYXRlci4gVGhlIGF1dG9jb3JyZWN0aW9uIGlzIGRyaXZlbiBieSBhIHRp
bWVyLgorICAgICAgICBFdmVyeSB0aW1lIHRoZSBlZGl0b3IgaW5zZXJ0cyBhIG5ldyBsZXR0ZXIs
IHRoZSB0aW1lciBpcyByZXNldC4gSWYgdGhlIHRpbWVyCisgICAgICAgIGZpcmVzLCBpdCBtZWFu
cyBuZWl0aGVyIGhhcyB1c2VyIGVudGVyZWQgYW55IG5ldyBsZXR0ZXIgZm9yIGN1cnJlbnQgd29y
ZCwgbm9yCisgICAgICAgIGhhcyBoZSBlbnRlcmVkIHdoaXRlc3BhY2Ugb3IgcHVuY3R1YXRpb24g
dG8gY29tcGxldGUgdGhlIHdvcmQuIEluIHRoaXMgY2FzZSwKKyAgICAgICAgd2UgcXVlcnkgZm9y
IGF1dG9jb3JyZWN0aW9uLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IFVwZGF0ZWQKKwor
ICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlci5oOiBBZGRlZCBSZWplY3RlZENvcnJlY3Rpb24g
dG8gaW5kaWNhdGUgd29yZCBvbiB3aGljaCB1c2VyCisgICAgICAgICAgaGFzIHJlamVjdGVkIGF1
dG9jb3JyZWN0aW9uLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpFZGl0b3IpOiBJbml0aWFsaXplIGF1dG9jb3JyZWN0aW9uIHRpbWVy
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp+RWRpdG9yKTogTWFrZSBzdXJlIGF1dG9jb3Jy
ZWN0aW9uIFVJIGlzIGRpc21pc3NlZCBiZWZvcmUKKyAgICAgICAgICBkZXN0cm95aW5nIEVkaXRv
ciBvYmplY3QuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRl
clR5cGluZ1RvUG9zaXRpb24pOiBBZG9wdGVkIG5ldyBzaWduYXR1cmUKKyAgICAgICAgICBvZiBt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKCkuCisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOiBD
b25zb2xpZGF0ZWQgYWxsCisgICAgICAgICAgYm9vbGVhbiBhcmd1bWVudHMgaW50byBvbmUgYml0
ZmllbGQuIFRoaXMgaW1wcm92ZXMgcmVhZGFiaWxpdHkgYW5kIGFsbG93cyB1cyB0bworICAgICAg
ICAgIHBhc3MgaW4gYSBiaXQgdG8gaW5kaWNhdGUgd2hldGhlciB3ZSB3YW50IHRvIHNob3cgYXV0
b2NvcnJlY3Rpb24gVUkuIEFsc28gYWRkZWQKKyAgICAgICAgICBjb2RlIHRvIHNob3cgYXV0b2Nv
cnJlY3Rpb24gVUkgaWYgaXQgaXMgbmVjZXNzYXJ5LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcik6IEFkb3B0ZWQgbmV3IHNpZ25hdHVyZSBv
ZgorICAgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoKS4K
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCk6IENo
ZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgc2hvdworICAgICAgICAgIGF1dG9jb3JyZWN0aW9uIFVJ
IHdoZW4gdXNlciBwYXVzZXMgZHVyaW5nIHR5cGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aGFuZGxlUmVqZWN0ZWRDb3JyZWN0aW9uKTogVXBkYXRlIHVzZXIgZGljdGlvbmFyeSB3aGVu
IGFuIGF1dG9jb3JyZWN0aW9uIGlzIHJlamVjdGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKTogU3RhcnQgYXV0b2NvcnJlY3Rpb24gdGltZXIu
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbik6IERpc21p
c3MgYXV0b2NvcnJlY3Rpb24gVUkgd2hlbiBFU0Mga2V5IGlzIHByZXNzZWQuCisKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvci5oOiBBZGRlZCBhdXRvY29ycmVjdGlvbiByZWxhdGVkIG1lbWJlciBt
ZXRob2RzIGFuZCB2YXJpYWJsZXMuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZUNhbmNlbE9wZXJhdGlvbik6IEhhbmRsZSBF
U0Mga2V5IGV2ZW50LiBEaXNtaXNzIGF1dG9jb3JyZWN0aW9uIFVJLgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlQ29tbWFuZE1hcCk6IFVwZGF0ZWQgZm9yIGV4ZWN1dGVDYW5jZWxPcGVyYXRpb24o
KS4KKworICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOiBSZXNldCBh
dXRvY29ycmVjdGlvbiB0aW1lciBhZnRlciBpbnNlcnRpb24uCisKKyAgICAgICAgKiBsb2FkZXIv
RW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6c2hv
d0NvcnJlY3Rpb25QYW5lbCk6IER1bW15IGltcGxlbWVudGF0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6RW1wdHlFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOiBEaXR0bworCisg
ICAgICAgICogcGFnZS9FZGl0b3JDbGllbnQuaDogQWRkZWQgbWV0aG9kcyBmb3IgY29tbXVuaWNh
dGlvbiBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktpdCByZWdhcmRpbmcgYXV0b2NvcnJlY3Rpb24u
CisKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKTogUmVtb3ZlIFJlcGxhY2VtZW50IG1hcmtlciB3aGVy
ZSB3ZSB1c2VkIHRvIG9ubHkgcmVtb3ZlIFNwZWxsaW5nCisgICAgICAgICAgbWFyaywgYmVjYXVz
ZSB3aGVuZXZlciB3ZSBuZWVkIHRvIHJlbW92ZSBzcGVsbGluZyB1bmRlcmxpbmUgd2UgYWxzbyBz
aG91bGQgcmVtb3ZlIGF1dG9jb3JyZWN0aW9uIHVuZGVybGluZS4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOiBBZGRlZCBlbnVtIFRleHRDaGVja2luZ0xp
bmVTdHlsZSB0byBzcGVjaWZ5IHRoZSB1bmRlcmxpbmUKKyAgICAgICAgICBmb3IgZGlmZmVyZW50
IHR5cGUgb2YgdGV4dCBjaGVja2luZyByZXN1bHQuIFJlcGxhY2VkIGRyYXdMaW5lRm9yTWlzc3Bl
bGxpbmdPckJhZEdyYW1tYXIoKSB3aXRoCisgICAgICAgICAgZHJhd0xpbmVGb3JUZXh0Q2hlY2tp
bmcoKSwgd2hpY2ggYWxsb3dzIGF1dG9jb3JyZWN0aW9uIHRvIGhhdmUgZGlmZmVyZW50IGluZGlj
YXRpb24gZnJvbSBtaXNzcGVsbGluZworICAgICAgICAgIGFuZCBncmFtbWF0aWNhbCBlcnJvci4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0
Q2hlY2tpbmcpOiBSZXBsYWNlZCBkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKCkg
d2l0aCBkcmF3TGluZUZvclRleHRDaGVja2luZygpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyk6IERpdHRvCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyk6IERp
dHRvCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0
T3BlblZHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0Q2hlY2tpbmcpOiBEaXR0bworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHRDaGVja2luZyk6IERpdHRvCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyk6IERpdHRvCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyk6
IERpdHRvCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRl
eHRXaW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dENoZWNraW5nKTogRGl0dG8KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4
L0dyYXBoaWNzQ29udGV4dFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0bworCisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENoZWNraW5nTGluZVN0
eWxlRm9yTWFya2VyVHlwZSk6IFJldHVybiBsaW5lIHN0eWxlIGZvciBhIGdpdmVuIGRvY3VtZW50
IG1hcmtlciB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRTcGVs
bGluZ09yR3JhbW1hck1hcmtlcik6ICBSZXBsYWNlZCBkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JC
YWRHcmFtbWFyKCkgd2l0aCBkcmF3TGluZUZvclRleHRDaGVja2luZygpLgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMpOiBIYW5kbGUgbmV3IG1h
cmtlciB2YWx1ZSwgUmVqZWN0ZWRDb3JyZWN0aW9uLgorCiAyMDEwLTA4LTMxICBEYW5pZWwgQ2hl
bmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hh
bmcuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgkod29ya2luZyBjb3B5KQpAQCAtNjIxLDYgKzYyMSw3IEBAIF9fWk43V2ViQ29yZTZFZGl0b3Iy
MWFwcGx5U3R5bGVUb1NlbGVjdGkKIF9fWk43V2ViQ29yZTZFZGl0b3IyMWlzU2VsZWN0aW9uTWlz
c3BlbGxlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjNzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbkVO
U18xNldyaXRpbmdEaXJlY3Rpb25FCiBfX1pON1dlYkNvcmU2RWRpdG9yMjRhZHZhbmNlVG9OZXh0
TWlzc3BlbGxpbmdFYgorX19aTjdXZWJDb3JlNkVkaXRvcjI0aGFuZGxlUmVqZWN0ZWRDb3JyZWN0
aW9uRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbEV2CiBf
X1pON1dlYkNvcmU2RWRpdG9yMjZkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dl
YkNvcmU2RWRpdG9yMjZpbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CkluZGV4OiBXZWJDb3Jl
L2RvbS9Eb2N1bWVudE1hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyLmgJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCBzdHJ1Y3QgRG9jdW1lbnRNYXJrZXIg
ewogICAgICAgICBTcGVsbGluZywKICAgICAgICAgR3JhbW1hciwKICAgICAgICAgVGV4dE1hdGNo
LAotICAgICAgICBSZXBsYWNlbWVudAorICAgICAgICBSZXBsYWNlbWVudCwKKyAgICAgICAgUmVq
ZWN0ZWRDb3JyZWN0aW9uCiAgICAgfTsKIAogICAgIE1hcmtlclR5cGUgdHlwZTsKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUzLDExICsxMDUzLDE2IEBAIEVkaXRvcjo6RWRpdG9yKEZy
YW1lKiBmcmFtZSkKICAgICAvLyBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LCBzaW5jZSBtb3N0IGVk
aXRvcnMgd2FudCB0aGlzIGJlaGF2aW9yICh0aGlzIG1hdGNoZXMgSUUgYnV0IG5vdCBGRikuCiAg
ICAgLCBtX3Nob3VsZFN0eWxlV2l0aENTUyhmYWxzZSkKICAgICAsIG1fa2lsbFJpbmcoYWRvcHRQ
dHIobmV3IEtpbGxSaW5nKSkKLXsgCisgICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyKHRoaXMs
ICZFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7CiB9CiAKIEVkaXRvcjo6fkVk
aXRvcigpCiB7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQorICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRp
c21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7CisjZW5kaWYKIH0KIAogdm9pZCBFZGl0b3I6OmNs
ZWFyKCkKQEAgLTIzNTEsMjIgKzIzNTYsMjkgQEAgYm9vbCBFZGl0b3I6OnNwZWxsaW5nUGFuZWxJ
c1Nob3dpbmcoKQogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwKQogewogI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpCi0gICAgYm9vbCBtYXJrU3BlbGxpbmcgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpOwotICAgIGJvb2wgbWFya0dyYW1tYXIgPSBtYXJrU3BlbGxpbmcgJiYgaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgYm9vbCBwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1l
bnRzID0gaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKSAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25F
bmFibGVkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0F1
dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtYXJrU3BlbGxpbmcg
JiYgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpOwotICAgIGlmICghbWFy
a1NwZWxsaW5nICYmICFwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKQorICAgIGludCB0
ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKKyAgICBpZiAoaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKSkKKyAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBNYXJrU3BlbGxpbmc7
CisKKyAgICBpZiAoaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAg
ICB8fCBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKKyAgICAgICAgfHwgaXNBdXRv
bWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgIHx8IGlzQXV0b21hdGljVGV4
dFJlcGxhY2VtZW50RW5hYmxlZCgpCisgICAgICAgIHx8ICgodGV4dENoZWNraW5nT3B0aW9ucyAm
IE1hcmtTcGVsbGluZykgJiYgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkp
KQorICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IFBlcmZvcm1SZXBsYWNlbWVudDsKKwor
ICAgIGlmICghdGV4dENoZWNraW5nT3B0aW9ucyAmIChNYXJrU3BlbGxpbmcgfCBQZXJmb3JtUmVw
bGFjZW1lbnQpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBpZiAoaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKCkpCisgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMgfD0gTWFya0dyYW1t
YXI7CisKICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0
aW9uKHN0YXJ0T2ZXb3JkKHAsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHAsIFJp
Z2h0V29yZElmT25Cb3VuZGFyeSkpOwotICAgIGlmIChtYXJrR3JhbW1hcikgeworICAgIGlmICh0
ZXh0Q2hlY2tpbmdPcHRpb25zICYgTWFya0dyYW1tYXIpIHsKICAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3RlZFNlbnRlbmNlID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2Uo
cCksIGVuZE9mU2VudGVuY2UocCkpOwotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKHRydWUsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSwgdHJ1ZSwgc2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBw
ZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBhZGphY2VudFdv
cmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHNlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhtYXJrU3BlbGxpbmcsIGFkamFjZW50V29yZHMudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgZmFsc2UsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwgcGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cyk7CisgICAgICAg
IG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0
aW9ucywgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBhZGphY2VudFdv
cmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogICAgIH0KICNlbHNlCiAgICAgaWYgKCFp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQpAQCAtMjUxMCwxMyArMjUyMiwxOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoCiAgICAgcmV0dXJuIGNo
YXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9PSByaWdodFNpbmdsZVF1b3RhdGlvbk1hcmsg
fHwgY2hhcmFjdGVyID09IGhlYnJld1B1bmN0dWF0aW9uR2Vyc2hheWltOwogfQogCi12b2lkIEVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhib29sIG1hcmtT
cGVsbGluZywgUmFuZ2UqIHNwZWxsaW5nUmFuZ2UsIGJvb2wgbWFya0dyYW1tYXIsIFJhbmdlKiBn
cmFtbWFyUmFuZ2UsIGJvb2wgcGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cykKK3ZvaWQg
RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKGludCB0ZXh0
Q2hlY2tpbmdPcHRpb25zLCBSYW5nZSogc3BlbGxpbmdSYW5nZSwgUmFuZ2UqIGdyYW1tYXJSYW5n
ZSkKIHsKKyAgICBib29sIHNob3VsZE1hcmtTcGVsbGluZyA9IHRleHRDaGVja2luZ09wdGlvbnMg
JiBNYXJrU3BlbGxpbmc7CisgICAgYm9vbCBzaG91bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2lu
Z09wdGlvbnMgJiBNYXJrR3JhbW1hcjsKKyAgICBib29sIHNob3VsZFBlcmZvcm1SZXBsYWNlbWVu
dCA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBQZXJmb3JtUmVwbGFjZW1lbnQ7CisgICAgYm9vbCBz
aG91bGRTaG93Q29ycmVjdGlvblBhbmVsID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIFNob3dDb3Jy
ZWN0aW9uUGFuZWw7CisKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHNlbGVj
dGlvbnMgYWxyZWFkeSBleHBhbmRlZCB0byB3b3JkIGJvdW5kYXJpZXMuCiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgaWYgKCFjbGllbnQoKSB8fCAhc3BlbGxpbmdSYW5nZSB8fCAobWFy
a0dyYW1tYXIgJiYgIWdyYW1tYXJSYW5nZSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhc3BlbGxp
bmdSYW5nZSB8fCAoc2hvdWxkTWFya0dyYW1tYXIgJiYgIWdyYW1tYXJSYW5nZSkpCiAgICAgICAg
IHJldHVybjsKLSAgICAKKwogICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhbiBlZGl0YWJsZSBub2Rl
LCBiYWlsLgogICAgIE5vZGUqIGVkaXRhYmxlTm9kZSA9IHNwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCk7CiAgICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+aXNDb250
ZW50RWRpdGFibGUoKSkKQEAgLTI1MzksOCArMjU1Niw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICBib29sIGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFw
aEJvdW5kYXJpZXMgPSBmYWxzZTsKICAgICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nOwogICAgIFJl
ZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2U7Ci0gICAgCi0gICAgaWYgKG1hcmtHcmFtbWFyKSB7
CisKKyAgICBpZiAoc2hvdWxkTWFya0dyYW1tYXIpIHsKICAgICAgICAgLy8gVGhlIHNwZWxsaW5n
IHJhbmdlIHNob3VsZCBiZSBjb250YWluZWQgaW4gdGhlIHBhcmFncmFwaC1hbGlnbmVkIGV4dGVu
c2lvbiBvZiB0aGUgZ3JhbW1hciByYW5nZS4KICAgICAgICAgcGFyYWdyYXBoUmFuZ2UgPSBwYXJh
Z3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShncmFtbWFyUmFuZ2UsIGdyYW1tYXJSYW5nZVN0YXJ0
T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFz
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYykt
PmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHNwZWxsaW5nUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSk7CkBAIC0yNTUxLDEwICsyNTY4LDEwIEBAIHZvaWQgRWRpdG9y
OjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICB9CiAgICAgc3BlbGxpbmdSYW5nZUVu
ZE9mZnNldCA9IHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgoc3BlbGxpbmdSYW5nZSk7CiAgICAgcGFyYWdyYXBoTGVuZ3RoID0gcGFyYWdyYXBoU3Ry
aW5nLmxlbmd0aCgpOwotICAgIGlmIChwYXJhZ3JhcGhMZW5ndGggPD0gMCB8fCAoc3BlbGxpbmdS
YW5nZVN0YXJ0T2Zmc2V0ID49IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgKCFtYXJrR3JhbW1h
ciB8fCBncmFtbWFyUmFuZ2VTdGFydE9mZnNldCA+PSBncmFtbWFyUmFuZ2VFbmRPZmZzZXQpKSkK
KyAgICBpZiAocGFyYWdyYXBoTGVuZ3RoIDw9IDAgfHwgKHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNl
dCA+PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmICghc2hvdWxkTWFya0dyYW1tYXIgfHwgZ3Jh
bW1hclJhbmdlU3RhcnRPZmZzZXQgPj0gZ3JhbW1hclJhbmdlRW5kT2Zmc2V0KSkpCiAgICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBpZiAocGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cykg
eworCisgICAgaWYgKHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCkgewogICAgICAgICBpZiAobV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpD
YXJldFNlbGVjdGlvbikgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJl
dCBwb3NpdGlvbiBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKICAgICAgICAg
ICAgIFJlZlB0cjxSYW5nZT4gb2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBo
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CkBAIC0yNTcw
LDE0ICsyNTg3LDE2IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgdWludDY0X3QgY2hlY2tpbmdUeXBlcyA9IDA7
Ci0gICAgaWYgKG1hcmtTcGVsbGluZykKKyAgICBpZiAoc2hvdWxkTWFya1NwZWxsaW5nKQogICAg
ICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICBpZiAo
bWFya0dyYW1tYXIpCisgICAgaWYgKHNob3VsZE1hcmtHcmFtbWFyKQogICAgICAgICBjaGVja2lu
Z1R5cGVzIHw9IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyOwotICAgIGlmIChwZXJmb3JtVGV4dENo
ZWNraW5nUmVwbGFjZW1lbnRzKSB7CisgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwp
CisgICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247Cisg
ICAgaWYgKHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCkgewogICAgICAgICBpZiAoaXNBdXRvbWF0
aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgY2hlY2tpbmdUeXBlcyB8PSBU
ZXh0Q2hlY2tpbmdUeXBlTGluazsKICAgICAgICAgaWYgKGlzQXV0b21hdGljUXVvdGVTdWJzdGl0
dXRpb25FbmFibGVkKCkpCkBAIC0yNTg2LDIwICsyNjA1LDI2IEBAIHZvaWQgRWRpdG9yOjptYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4
dENoZWNraW5nVHlwZURhc2g7CiAgICAgICAgIGlmIChpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVu
dEVuYWJsZWQoKSkKICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4dENoZWNraW5nVHlw
ZVJlcGxhY2VtZW50OwotICAgICAgICBpZiAobWFya1NwZWxsaW5nICYmIGlzQXV0b21hdGljU3Bl
bGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQorICAgICAgICBpZiAoc2hvdWxkTWFya1NwZWxsaW5n
ICYmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAg
Y2hlY2tpbmdUeXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjsKICAgICB9CiAgICAg
Y2xpZW50KCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJz
KCksIHBhcmFncmFwaExlbmd0aCwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7Ci0gICAgCisKKyNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCisgICAgLy8gSWYgdGhpcyBjaGVja2luZyBpcyBvbmx5IGZvciBzaG93aW5nIGNvcnJlY3Rp
b24gcGFuZWwsIHdlIHNob3VsZG4ndCBib3RoZXIgdG8gbWFyayBtaXNzcGVsbGluZ3MuCisgICAg
aWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCisgICAgICAgIHNob3VsZE1hcmtTcGVsbGlu
ZyA9IGZhbHNlOworI2VuZGlmCisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0
cy5zaXplKCk7IGkrKykgewogICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3Vs
dCA9ICZyZXN1bHRzW2ldOwogICAgICAgICBpbnQgcmVzdWx0TG9jYXRpb24gPSByZXN1bHQtPmxv
Y2F0aW9uICsgb2Zmc2V0RHVlVG9SZXBsYWNlbWVudDsKICAgICAgICAgaW50IHJlc3VsdExlbmd0
aCA9IHJlc3VsdC0+bGVuZ3RoOwotICAgICAgICBpZiAobWFya1NwZWxsaW5nICYmIHJlc3VsdC0+
dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0TG9jYXRpb24gPj0gc3Bl
bGxpbmdSYW5nZVN0YXJ0T2Zmc2V0ICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoIDw9
IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQpIHsKKyAgICAgICAgaWYgKHNob3VsZE1hcmtTcGVsbGlu
ZyAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdExv
Y2F0aW9uID49IHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCAmJiByZXN1bHRMb2NhdGlvbiArIHJl
c3VsdExlbmd0aCA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICBBU1NF
UlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAg
IFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2Uo
c3BlbGxpbmdSYW5nZSwgcmVzdWx0TG9jYXRpb24gLSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQs
IHJlc3VsdExlbmd0aCk7CiAgICAgICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRh
aW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
bWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYm
IHJlc3VsdExvY2F0aW9uIDwgZ3JhbW1hclJhbmdlRW5kT2Zmc2V0ICYmIHJlc3VsdExvY2F0aW9u
ICsgcmVzdWx0TGVuZ3RoID4gZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQpIHsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRNYXJrR3JhbW1hciAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5n
VHlwZUdyYW1tYXIgJiYgcmVzdWx0TG9jYXRpb24gPCBncmFtbWFyUmFuZ2VFbmRPZmZzZXQgJiYg
cmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPiBncmFtbWFyUmFuZ2VTdGFydE9mZnNldCkg
ewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24g
Pj0gMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVzdWx0LT5kZXRh
aWxzLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgR3JhbW1hckRldGFpbCog
ZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKQEAgLTI2MDksNyArMjYzNCw3IEBAIHZvaWQg
RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgICAgICAgICAg
Z3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
YWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIs
IGRldGFpbC0+dXNlckRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cyAm
JiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0
ICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoID49IHNwZWxsaW5nUmFuZ2VTdGFydE9m
ZnNldAorICAgICAgICB9IGVsc2UgaWYgKChzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgfHwgc2hv
dWxkU2hvd0NvcnJlY3Rpb25QYW5lbCkgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGgg
PD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0
aCA+PSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQKICAgICAgICAgICAgICAgICAgICAgJiYgKHJl
c3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlTGluawogICAgICAgICAgICAgICAgICAgICB8
fCByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVF1b3RlCiAgICAgICAgICAgICAgICAg
ICAgIHx8IHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlRGFzaApAQCAtMjY0MCw3ICsy
NjY1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAgICAg
ICAgICAgICAgIHNpemVfdCBtYXJrZXJDb3VudCA9IG1hcmtlcnMuc2l6ZSgpOwogICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyQ291bnQ7ICsraSkgewogICAgICAg
ICAgICAgICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyID0gbWFya2Vyc1tpXTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5zdGFydE9mZnNldCkgPCBlbmRP
ZmZzZXQgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0KSA+IHN0YXJ0T2Zmc2V0
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpSZWplY3Rl
ZENvcnJlY3Rpb24pICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLnN0YXJ0T2Zmc2V0KSA8IGVu
ZE9mZnNldCAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID4gc3RhcnRPZmZz
ZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRvUmVwbGFjZW1lbnQgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0y
NjQ4LDcgKzI2NzMsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZG9SZXBsYWNlbWVudCAmJiBzZWxlY3Rpb25Ub1Jl
cGxhY2UgIT0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKSB7CisgICAgICAgICAg
ICBpZiAoZG9SZXBsYWNlbWVudCAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCAmJiBzZWxl
Y3Rpb25Ub1JlcGxhY2UgIT0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rp
b25Ub1JlcGxhY2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAg
c2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CkBAIC0yNjU2LDMwICsyNjgxLDUyIEBAIHZvaWQgRWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgICAgICAgICAgZG9S
ZXBsYWNlbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nOwogICAgICAgICAgICAgaWYgKGRvUmVw
bGFjZW1lbnQpIHsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVj
a2luZ1R5cGVMaW5rKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRl
ckNoYW5nZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hseSgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKENyZWF0ZUxpbmtDb21tYW5k
OjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgcmVzdWx0LT5yZXBsYWNlbWVudCkpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3VsZEluc2VydFRleHQocmVz
dWx0LT5yZXBsYWNlbWVudCwgcmFuZ2VUb1JlcGxhY2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
blR5cGVkKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmc7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUNv
cnJlY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZFN0cmluZyA9IHBsYWlu
VGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dChyZXN1bHQtPnJlcGxhY2VtZW50LCBmYWxzZSwgZmFsc2UpOwotICAg
ICAgICAgICAgICAgICAgICBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICs9IHJlcGxhY2VtZW50TGVu
Z3RoIC0gcmVzdWx0TGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBvZmZzZXREdWVUb1JlcGxh
Y2VtZW50ICs9IHJlcGxhY2VtZW50TGVuZ3RoIC0gcmVzdWx0TGVuZ3RoOwotICAgICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24gPCBzZWxlY3Rpb25PZmZzZXQpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1
bHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENo
ZWNraW5nVHlwZUNvcnJlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBh
IG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25zIGNhbiBlYXNpbHkgYmUgdW5kb25lIGFuZCB3b24n
dCBiZSByZS1jb3JyZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IHJlcGxhY2VkUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlLmdl
dCgpLCByZXN1bHRMb2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5ndGgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50LCByZXBsYWNlZFN0cmluZyk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgICAgICAgICAgICAgICAgICBp
ZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExl
bmd0aCA9PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hl
Y2tpbmdUeXBlQ29ycmVjdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25s
eSBzaG93IHRoZSBjb3JyZWN0aW9uIHBhbmVsIG9uIHRoZSBsYXN0IHdvcmQuCisgICAgICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVhZHM7CisgICAgICAgICAgICAg
ICAgICAgICAgICByYW5nZVRvUmVwbGFjZS0+dGV4dFF1YWRzKHRleHRRdWFkcyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
dGV4dFF1YWRzLmVuZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHRvdGFs
Qm91bmRpbmdCb3g7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxGbG9hdFF1
YWQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRRdWFkcy5iZWdpbigpOyBpdCA8IGVuZDsgKytp
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEJvdW5kaW5nQm94LnVuaXRlKGl0
LT5ib3VuZGluZ0JveCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcmFuZ2VUb0JlUmVw
bGFjZWRCeUNvcnJlY3Rpb24gPSByYW5nZVRvUmVwbGFjZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uID0gcmVwbGFjZWRTdHJpbmc7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbCh0b3Rh
bEJvdW5kaW5nQm94LCBtX3N0cmluZ1RvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbiwgcmVzdWx0LT5y
ZXBsYWNlbWVudCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb1JlcGxhY2VtZW50
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAg
ICAgICBpZiAoZG9SZXBsYWNlbWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZVNlbGVjdGlvbldpdGhUZXh0KHJlc3VsdC0+cmVwbGFjZW1lbnQsIGZhbHNlLCBmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICs9IHJlcGxhY2Vt
ZW50TGVuZ3RoIC0gcmVzdWx0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
RHVlVG9SZXBsYWNlbWVudCArPSByZXBsYWNlbWVudExlbmd0aCAtIHJlc3VsdExlbmd0aDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiA8IHNlbGVjdGlvbk9mZnNl
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgKz0gcmVwbGFj
ZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKSB7CisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7Cisj
ZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYSBtYXJrZXIgc28gdGhh
dCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBhbmQgd29uJ3QgYmUgcmUtY29ycmVj
dGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZWRS
YW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHJlc3Vs
dExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
LT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50LCByZXBsYWNlZFN0cmluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCkgewogICAgICAgICAv
LyBSZXN0b3JlIHRoZSBjYXJldCBwb3NpdGlvbiBpZiB3ZSBoYXZlIG1hZGUgYW55IHJlcGxhY2Vt
ZW50cwogICAgICAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIGVuZE9mUGFyYWdyYXBo
KHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKSk7
CkBAIC0yNzIxLDcgKzI3NjgsMTAgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbQogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCiAgICAgaWYgKCFpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbWFya0FsbE1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0cnVlLCBzcGVsbGluZ1NlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKSwgZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBmYWxz
ZSk7CisgICAgaW50IHRleHRDaGVja2luZ09wdGlvbiA9IE1hcmtTcGVsbGluZzsKKyAgICBpZiAo
bWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgIHRleHRD
aGVja2luZ09wdGlvbiB8PSBNYXJrR3JhbW1hcjsKKyAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbiwgc3BlbGxpbmdTZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpKTsKICNlbHNlCiAgICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2U7CiAgICAgbWFya01pc3NwZWxsaW5ncyhzcGVsbGluZ1NlbGVjdGlvbiwgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKTsKQEAgLTI3MzAsNiArMjc4MCw0NSBAQCB2b2lkIEVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tCiAjZW5kaWYKIH0KIAordm9pZCBFZGl0b3I6OmNvcnJlY3Rp
b25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopCit7CisjaWYgUExBVEZPUk0oTUFDKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihmcmFtZSgpLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCkpOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24uc3Rh
cnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3Rh
cnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBWaXNpYmxlU2VsZWN0
aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0KTsKKyAgICBtYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE1hcmtTcGVsbGluZyB8IFNob3dD
b3JyZWN0aW9uUGFuZWwsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwg
MCk7CisjZW5kaWYKK30KKwordm9pZCBFZGl0b3I6OmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbigp
Cit7CisgICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3Jy
ZWN0aW9uLmdldCgpOworICAgIGlmICghcmVwbGFjZWRSYW5nZSB8fCBtX2ZyYW1lLT5kb2N1bWVu
dCgpICE9IHJlcGxhY2VkUmFuZ2UtPm93bmVyRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29y
cmVjdGlvbiwgbV9zdHJpbmdUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24pOworfQorCit2b2lkIEVk
aXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpCit7CisjaWYgUExBVEZPUk0oTUFDKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIHN0YXRpYyBj
b25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsKKyAgICBpZiAo
Y2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHRydWUp
OworICAgIGlmIChpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkKKyAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGlt
ZXJJbnRlcnZhbCk7CisjZW5kaWYKK30KKwordm9pZCBFZGl0b3I6OmhhbmRsZUNhbmNlbE9wZXJh
dGlvbigpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQorICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRp
c21pc3NDb3JyZWN0aW9uUGFuZWwoZmFsc2UpOworI2VuZGlmCit9CisKIFBhc3NSZWZQdHI8UmFu
Z2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCiB7
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnRBdFBvaW50KHdpbmRv
d1BvaW50KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDEzIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudCgpOwogICAgIGJvb2wgaXNB
dXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CiAgICAgdm9pZCB0b2dnbGVBdXRv
bWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKTsKLSAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFySW5SYW5nZXMoYm9vbCBtYXJrU3BlbGxpbmcsIFJhbmdlKiBzcGVsbGluZ1Jh
bmdlLCBib29sIG1hcmtHcmFtbWFyLCBSYW5nZSogZ3JhbW1hclJhbmdlLCBib29sIHBlcmZvcm1U
ZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpOworICAgIGVudW0gVGV4dENoZWNraW5nT3B0aW9ucyB7
CisgICAgICAgIE1hcmtTcGVsbGluZyA9IDEgPDwgMCwKKyAgICAgICAgTWFya0dyYW1tYXIgPSAx
IDw8IDEsCisgICAgICAgIFBlcmZvcm1SZXBsYWNlbWVudCA9IDEgPDwgMiwKKyAgICAgICAgU2hv
d0NvcnJlY3Rpb25QYW5lbCA9IDEgPDwgMywKKyAgICB9OworICAgIHZvaWQgbWFya0FsbE1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhpbnQgdGV4dENoZWNraW5nT3B0aW9ucywgUmFu
Z2UqIHNwZWxsaW5nUmFuZ2UsIFJhbmdlKiBncmFtbWFyUmFuZ2UpOwogICAgIHZvaWQgY2hhbmdl
QmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZyk7CiAjZW5k
aWYKICAgICB2b2lkIGFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uID0gZmFsc2UpOwpAQCAtMjk0LDkgKzMwMCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
bnNpZGVWaXNpYmxlQXJlYShjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogICAgIGJvb2wgaW5zaWRl
VmlzaWJsZUFyZWEoUmFuZ2UqKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBuZXh0Vmlz
aWJsZVJhbmdlKFJhbmdlKiwgY29uc3QgU3RyaW5nJiwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VG
bGFnLCBib29sIHdyYXBGbGFnKTsKLSAgICAKKwogICAgIHZvaWQgYWRkVG9LaWxsUmluZyhSYW5n
ZSosIGJvb2wgcHJlcGVuZCk7CiAKKyAgICB2b2lkIGhhbmRsZUNhbmNlbE9wZXJhdGlvbigpOwor
ICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgIHZvaWQgaGFuZGxlUmVq
ZWN0ZWRDb3JyZWN0aW9uKCk7CisKICAgICB2b2lkIHBhc3RlQXNGcmFnbWVudChQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlKTsK
ICAgICB2b2lkIHBhc3RlQXNQbGFpblRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBzbWFydFJlcGxh
Y2UpOwogCkBAIC0zMTgsNiArMzI4LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkU3Rh
cnROZXdLaWxsUmluZ1NlcXVlbmNlOwogICAgIGJvb2wgbV9zaG91bGRTdHlsZVdpdGhDU1M7CiAg
ICAgT3duUHRyPEtpbGxSaW5nPiBtX2tpbGxSaW5nOworICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5n
ZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbjsKKyAgICBTdHJpbmcgbV9zdHJpbmdUb0JlUmVwbGFj
ZWRCeUNvcnJlY3Rpb247CisgICAgVGltZXI8RWRpdG9yPiBtX2NvcnJlY3Rpb25QYW5lbFRpbWVy
OwogCiAgICAgYm9vbCBjYW5EZWxldGVSYW5nZShSYW5nZSopIGNvbnN0OwogICAgIGJvb2wgY2Fu
U21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCopOwpAQCAtMzM1LDggKzM0OCw5
IEBAIHByaXZhdGU6CiAKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBmaXJzdFZpc2libGVSYW5nZShj
b25zdCBTdHJpbmcmLCBib29sIGNhc2VGbGFnKTsKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBsYXN0
VmlzaWJsZVJhbmdlKGNvbnN0IFN0cmluZyYsIGJvb2wgY2FzZUZsYWcpOwotICAgIAorCiAgICAg
dm9pZCBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nLCBib29sIGNsZWFyVHlwaW5nU3R5bGUpOwor
ICAgIHZvaWQgY29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxFZGl0b3I+Kik7CiAgICAg
Tm9kZSogZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0OwogfTsKIApJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjksNiArMTA2OSwx
NCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlWWFua0FuZFNlbGVjdChGcmFtZSogCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpCitzdGF0aWMgYm9vbCBleGVjdXRlQ2FuY2VsT3BlcmF0aW9uKEZy
YW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQor
eworICAgIGZyYW1lLT5lZGl0b3IoKS0+aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisjZW5kaWYKKwogLy8gU3VwcG9ydGVkIGZ1bmN0aW9ucwogCiBzdGF0aWMg
Ym9vbCBzdXBwb3J0ZWQoRnJhbWUqLCBFZGl0b3JDb21tYW5kU291cmNlKQpAQCAtMTQ1NSw2ICsx
NDYzLDkgQEAgc3RhdGljIGNvbnN0IENvbW1hbmRNYXAmIGNyZWF0ZUNvbW1hbmRNYQogICAgICAg
ICB7ICJVbnNlbGVjdCIsIHsgZXhlY3V0ZVVuc2VsZWN0LCBzdXBwb3J0ZWQsIGVuYWJsZWRWaXNp
YmxlU2VsZWN0aW9uLCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90VGV4dEluc2VydGlvbiwgZG9O
b3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCiAgICAgICAgIHsgIllhbmsiLCB7IGV4
ZWN1dGVZYW5rLCBzdXBwb3J0ZWRGcm9tTWVudU9yS2V5QmluZGluZywgZW5hYmxlZEluRWRpdGFi
bGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90VGV4dEluc2VydGlvbiwgZG9Ob3RBbGxv
d0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCiAgICAgICAgIHsgIllhbmtBbmRTZWxlY3QiLCB7
IGV4ZWN1dGVZYW5rQW5kU2VsZWN0LCBzdXBwb3J0ZWRGcm9tTWVudU9yS2V5QmluZGluZywgZW5h
YmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90VGV4dEluc2VydGlv
biwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCisjaWYgUExBVEZPUk0oTUFD
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgICAgICB7
ICJDYW5jZWxPcGVyYXRpb24iLCB7IGV4ZWN1dGVDYW5jZWxPcGVyYXRpb24sIHN1cHBvcnRlZEZy
b21NZW51T3JLZXlCaW5kaW5nLCBlbmFibGVkSW5FZGl0YWJsZVRleHQsIHN0YXRlTm9uZSwgdmFs
dWVOdWxsLCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVk
IH0gfSwKKyNlbmRpZgogICAgIH07CiAKICAgICAvLyBUaGVzZSB1bnN1cHBvcnRlZCBjb21tYW5k
cyBhcmUgbGlzdGVkIGhlcmUgc2luY2UgdGhleSBhcHBlYXIgaW4gdGhlIE1pY3Jvc29mdApJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw2ICszMDcs
MTAgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZQogICAgICAgICBW
aXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRh
cnkpOwogICAgICAgICBpZiAocDEgIT0gcDIpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFt
ZSgpLT5lZGl0b3IoKS0+bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihwMSk7
CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5l
ZGl0b3IoKS0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworI2VuZGlmCiAgICAgfQogfQog
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL2xv
YWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDYgKzQ2MCwxMCBAQCBw
dWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoY29uc3QgVUNoYXIqLCBpbnQsIHVpbnQ2NF90LCBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiYpIHsgfTsKICNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICB2aXJ0dWFsIHZvaWQgc2hv
d0NvcnJlY3Rpb25QYW5lbChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBFZGl0b3IqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChib29sKSB7IH0KKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNv
bnN0IFN0cmluZyYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sKSB7
IH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9wYWdl
L0VkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5l
IEVkaXRvckNsaWVudF9oCiAKICNpbmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKKyNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IlRleHRBZmZpbml0eS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC01MSw2ICs1Miw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNs
YXNzIEVkaXRDb21tYW5kOworY2xhc3MgRWRpdG9yOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZy
YW1lOwogY2xhc3MgSFRNTEVsZW1lbnQ7CkBAIC0xNzcsNiArMTc5LDEyIEBAIHB1YmxpYzoKICNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQogICAgIHZpcnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFn
cmFwaChjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hlY2tpbmdUeXBl
cywgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpID0gMDsKICNlbmRpZgorCisj
aWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9Q
QVJEKQorICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IEZsb2F0UmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY21lbnRTdHJpbmcsIEVkaXRvciopID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChib29sIGNvcnJlY3Rpb25BY2NlcHRl
ZCkgPSAwOworI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGRldGFpbCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3Jk
KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9v
bCBzaG93KSA9IDA7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0OSw4ICsxNDQ5LDEwIEBAIHZvaWQgRnJh
bWU6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY28KIAogICAgICAgICAvLyBUaGlzIG9ubHkg
ZXJhc2VzIG1hcmtlcnMgdGhhdCBhcmUgaW4gdGhlIGZpcnN0IHVuaXQgKHdvcmQgb3Igc2VudGVu
Y2UpIG9mIHRoZSBzZWxlY3Rpb24uCiAgICAgICAgIC8vIFBlcmhhcHMgcGVjdWxpYXIsIGJ1dCBp
dCBtYXRjaGVzIEFwcEtpdC4KLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0g
bmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgICAgICBpZiAoUmVmUHRy
PFJhbmdlPiB3b3JkUmFuZ2UgPSBuZXdBZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkp
IHsKICAgICAgICAgICAgIGRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2Vycyh3b3Jk
UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgICAgICBkb2N1
bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgICAgICB9CiAgICAgICAgIGlmIChSZWZQdHI8UmFu
Z2U+IHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdl
KCkpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoc2Vu
dGVuY2VSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogICAgIH0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24g
NjY1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzEsNyArMjcxLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0Jik7CiAK
ICAgICAgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgSW50UG9pbnQmLCBpbnQgd2lkdGgs
IGJvb2wgcHJpbnRpbmcpOwotICAgICAgICB2b2lkIGRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJh
ZEdyYW1tYXIoY29uc3QgSW50UG9pbnQmLCBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcik7CisgICAg
ICAgIGVudW0gVGV4dENoZWNraW5nTGluZVN0eWxlIHsKKyAgICAgICAgICAgIFRleHRDaGVja2lu
Z1NwZWxsaW5nTGluZVN0eWxlLAorICAgICAgICAgICAgVGV4dENoZWNraW5nR3JhbW1hckxpbmVT
dHlsZSwKKyAgICAgICAgICAgIFRleHRDaGVja2luZ1JlcGxhY2VtZW50TGluZVN0eWxlCisgICAg
ICAgIH07CisgICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgSW50UG9p
bnQmLCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSk7CiAKICAgICAgICAgYm9vbCBw
YWludGluZ0Rpc2FibGVkKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0UGFpbnRpbmdEaXNhYmxl
ZChib29sKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NTksNyArNzU5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yVGV4dChjbwogI2luY2x1ZGUgIkRyYXdFcnJvclVuZGVybGluZS5oIgogI2VuZGlmCiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFy
KGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGludCB3aWR0aCwgYm9vbCBncmFtbWFyKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEludFBvaW50JiBv
cmlnaW4sIGludCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc2NywxMiArNzY3LDE3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWwKICAgICBjYWlyb190
KiBjciA9IG1fZGF0YS0+Y3I7CiAgICAgY2Fpcm9fc2F2ZShjcik7CiAKLSAgICAvLyBDb252ZW50
aW9uIGlzIGdyZWVuIGZvciBncmFtbWFyLCByZWQgZm9yIHNwZWxsaW5nCi0gICAgLy8gVGhlc2Ug
bmVlZCB0byBiZWNvbWUgY29uZmlndXJhYmxlCi0gICAgaWYgKGdyYW1tYXIpCi0gICAgICAgIGNh
aXJvX3NldF9zb3VyY2VfcmdiKGNyLCAwLCAxLCAwKTsKLSAgICBlbHNlCisgICAgc3dpdGNoIChz
dHlsZSkgeworICAgIGNhc2UgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU6CiAgICAgICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAxLCAwLCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlOgorICAgICAgICBjYWlyb19zZXRfc291
cmNlX3JnYihjciwgMCwgMSwgMCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAjaWYgUExB
VEZPUk0oR1RLKQogICAgIC8vIFdlIGlnbm9yZSBtb3N0IG9mIHRoZSBwcm92aWRlZCBjb25zdGFu
dHMgaW4gZmF2b3VyIG9mIHRoZSBwbGF0Zm9ybSBzdHlsZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAJ
KHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFw
aGljc0NvbnRleHRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw3ICsyNDgsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvCiAgICAgZHJhd0xpbmUob3Jp
Z2luLCBlbmRQb2ludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1p
c3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoLCBib29sIGdy
YW1tYXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29u
c3QgSW50UG9pbnQmLCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCShyZXZp
c2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHN0YXRpYyBOU0Nv
bG9yKiBjcmVhdGVQYXR0ZXJuQ29sb3IoTlNTdHIKIH0KIAogLy8gV2ViS2l0IG9uIE1hYyBpcyBh
IHN0YW5kYXJkIHBsYXRmb3JtIGNvbXBvbmVudCwgc28gaXQgbXVzdCB1c2UgdGhlIHN0YW5kYXJk
IHBsYXRmb3JtIGFydHdvcmsgZm9yIHVuZGVybGluZS4KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50JiBwb2ludCwg
aW50IHdpZHRoLCBib29sIGdyYW1tYXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0Q2hlY2tpbmcoY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgd2lkdGgsIFRleHRDaGVj
a2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xMjcsMjMgKzEyNyw0MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JNaXNzcGVsCiAgICAgLy8gVGhlc2UgYXJlIHRoZSBzYW1lIGZvciBtaXNzcGVs
bGluZyBvciBiYWQgZ3JhbW1hci4KICAgICBpbnQgcGF0dGVybkhlaWdodCA9IGNNaXNzcGVsbGlu
Z0xpbmVUaGlja25lc3M7CiAgICAgaW50IHBhdHRlcm5XaWR0aCA9IGNNaXNzcGVsbGluZ0xpbmVQ
YXR0ZXJuV2lkdGg7Ci0gCisKICAgICBib29sIHVzaW5nRG90OwogICAgIE5TQ29sb3IgKnBhdHRl
cm5Db2xvcjsKLSAgICBpZiAoZ3JhbW1hcikgewotICAgICAgICAvLyBDb25zdGFudHMgZm9yIGdy
YW1tYXIgcGF0dGVybiBjb2xvci4KLSAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JHcmFt
bWFyID0gZmFsc2U7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5TQ29s
b3I+LCBncmFtbWFyUGF0dGVybkNvbG9yLCAoY3JlYXRlUGF0dGVybkNvbG9yKEAiR3JhbW1hckRv
dCIsIFtOU0NvbG9yIGdyZWVuQ29sb3JdLCB1c2luZ0RvdEZvckdyYW1tYXIpKSk7Ci0gICAgICAg
IAotICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yR3JhbW1hcjsKLSAgICAgICAgcGF0dGVy
bkNvbG9yID0gZ3JhbW1hclBhdHRlcm5Db2xvci5nZXQoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBDb25zdGFudHMgZm9yIHNwZWxsaW5nIHBhdHRlcm4gY29sb3IuCi0gICAgICAgIHN0YXRp
YyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcgPSBmYWxzZTsKLSAgICAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChSZXRhaW5QdHI8TlNDb2xvcj4sIHNwZWxsaW5nUGF0dGVybkNvbG9yLCAoY3JlYXRl
UGF0dGVybkNvbG9yKEAiU3BlbGxpbmdEb3QiLCBbTlNDb2xvciByZWRDb2xvcl0sIHVzaW5nRG90
Rm9yU3BlbGxpbmcpKSk7Ci0gICAgICAgIAotICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9y
U3BlbGxpbmc7Ci0gICAgICAgIHBhdHRlcm5Db2xvciA9IHNwZWxsaW5nUGF0dGVybkNvbG9yLmdl
dCgpOworICAgIHN3aXRjaCAoc3R5bGUpIHsKKyAgICAgICAgY2FzZSBUZXh0Q2hlY2tpbmdTcGVs
bGluZ0xpbmVTdHlsZToKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBz
cGVsbGluZyBwYXR0ZXJuIGNvbG9yLgorICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RG
b3JTcGVsbGluZyA9IGZhbHNlOworICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRh
aW5QdHI8TlNDb2xvcj4sIHNwZWxsaW5nUGF0dGVybkNvbG9yLCAoY3JlYXRlUGF0dGVybkNvbG9y
KEAiU3BlbGxpbmdEb3QiLCBbTlNDb2xvciByZWRDb2xvcl0sIHVzaW5nRG90Rm9yU3BlbGxpbmcp
KSk7CisgICAgICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxpbmc7CisgICAgICAg
ICAgICBwYXR0ZXJuQ29sb3IgPSBzcGVsbGluZ1BhdHRlcm5Db2xvci5nZXQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVGV4dENoZWNraW5nR3JhbW1hckxp
bmVTdHlsZToKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBncmFtbWFy
IHBhdHRlcm4gY29sb3IuCisgICAgICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvckdyYW1t
YXIgPSBmYWxzZTsKKyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5T
Q29sb3I+LCBncmFtbWFyUGF0dGVybkNvbG9yLCAoY3JlYXRlUGF0dGVybkNvbG9yKEAiR3JhbW1h
ckRvdCIsIFtOU0NvbG9yIGdyZWVuQ29sb3JdLCB1c2luZ0RvdEZvckdyYW1tYXIpKSk7CisgICAg
ICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yR3JhbW1hcjsKKyAgICAgICAgICAgIHBhdHRl
cm5Db2xvciA9IGdyYW1tYXJQYXR0ZXJuQ29sb3IuZ2V0KCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKKyAgICAgICAgY2FzZSBUZXh0Q2hlY2tpbmdSZXBsYWNlbWVudExp
bmVTdHlsZToKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBzcGVsbGlu
ZyBwYXR0ZXJuIGNvbG9yLgorICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JTcGVs
bGluZyA9IGZhbHNlOworICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8
TlNDb2xvcj4sIHNwZWxsaW5nUGF0dGVybkNvbG9yLCAoY3JlYXRlUGF0dGVybkNvbG9yKEAiQ29y
cmVjdGlvbkRvdCIsIFtOU0NvbG9yIGJsdWVDb2xvcl0sIHVzaW5nRG90Rm9yU3BlbGxpbmcpKSk7
CisgICAgICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxpbmc7CisgICAgICAgICAg
ICBwYXR0ZXJuQ29sb3IgPSBzcGVsbGluZ1BhdHRlcm5Db2xvci5nZXQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUgdG8gZHJhdyBvbmx5IGNvbXBsZXRl
IGRvdHMuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0Nv
bnRleHRPcGVuVkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvclRleHQoY28KICAgICBVTlVTRURfUEFSQU0ocHJpbnRpbmcpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihjb25z
dCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBJbnRQb2ludCYgb3JpZ2lu
LCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yODEsNyArMjgxLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbAogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsK
LSAgICBVTlVTRURfUEFSQU0oZ3JhbW1hcik7CisgICAgVU5VU0VEX1BBUkFNKHN0eWxlKTsKIH0K
IAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODQ1LDcgKzg0NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQo
Y28KICAgICBkcmF3TGluZShvcmlnaW4sIGVuZFBvaW50KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQm
LCBpbnQsIGJvb2wpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tp
bmcoY29uc3QgSW50UG9pbnQmLCBpbnQsIFRleHRDaGVja2luZ0xpbmVTdHlsZSkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
CShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFw
aGljc0NvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE1LDkgKzYxNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnQKICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCktPmRyYXdQb2ludHMoU2tDYW52YXM6OmtMaW5lc19Qb2ludE1vZGUsIDIs
IHB0cywgcGFpbnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNz
cGVsbGluZ09yQmFkR3JhbW1hcihjb25zdCBJbnRQb2ludCYgcHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGdyYW1tYXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmco
Y29uc3QgSW50UG9pbnQmIHB0LCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHls
ZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0Q0dXaW4uY3BwCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDEx
ICsxNzYsMTQgQEAgc3RhdGljIGNvbnN0IENvbG9yJiBncmFtbWFyUGF0dGVybkNvbG9yKAogICAg
IHJldHVybiBncmFtbWFyQ29sb3I7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IHdp
ZHRoLCBib29sIGdyYW1tYXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0
Q2hlY2tpbmcoY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xp
bmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBpZiAoc3R5bGUgIT0gVGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGUg
JiYgc3R5bGUgIT0gVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgLy8gVGhlc2UgYXJlIHRoZSBzYW1lIGZvciBtaXNzcGVsbGluZyBvciBiYWQgZ3Jh
bW1hcgogICAgIGNvbnN0IGludCBwYXR0ZXJuSGVpZ2h0ID0gMzsgLy8gMyByb3dzCiAgICAgQVNT
RVJUKGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MgPT0gcGF0dGVybkhlaWdodCk7CkBAIC0yMDEs
NyArMjA0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbAogICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0
U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAotICAgIGNvbnN0IENvbG9yJiBwYXR0ZXJuQ29sb3IgPSBn
cmFtbWFyID8gZ3JhbW1hclBhdHRlcm5Db2xvcigpIDogc3BlbGxpbmdQYXR0ZXJuQ29sb3IoKTsK
KyAgICBjb25zdCBDb2xvciYgcGF0dGVybkNvbG9yID0gc3R5bGUgPT0gVGV4dENoZWNraW5nR3Jh
bW1hckxpbmVTdHlsZSA/IGdyYW1tYXJQYXR0ZXJuQ29sb3IoKSA6IHNwZWxsaW5nUGF0dGVybkNv
bG9yKCk7CiAgICAgc2V0Q0dTdHJva2VDb2xvcihjb250ZXh0LCBwYXR0ZXJuQ29sb3IpOwogCiAg
ICAgd2tTZXRQYXR0ZXJuUGhhc2VJblVzZXJTcGFjZShjb250ZXh0LCBwb2ludCk7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29u
dGV4dFdpbmNlLmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2
Miw3ICsxMDYyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjbwog
ICAgIHNldFN0cm9rZVN0eWxlKG9sZFN0eWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQmLCBpbnQg
d2lkdGgsIGJvb2wgZ3JhbW1hcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHRDaGVja2luZyhjb25zdCBJbnRQb2ludCYsIGludCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0
eWxlIHN0eWxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkocmV2aXNp
b24gNjY1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4
dFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU3LDE0ICszNTcsMTggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjbwogICAgIG1fZGF0YS0+Y29udGV4dC0+RHJhd0xp
bmUob3JpZ2luLngoKSwgb3JpZ2luLnkoKSwgZW5kUG9pbnQueCgpLCBlbmRQb2ludC55KCkpOwog
fQogCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRH
cmFtbWFyKGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGludCB3aWR0aCwgYm9vbCBncmFtbWFyKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEludFBv
aW50JiBvcmlnaW4sIGludCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQogewot
ICAgIGlmIChncmFtbWFyKQotICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBlbih3eFBlbigq
d3hHUkVFTiwgMiwgd3hMT05HX0RBU0gpKTsKLSAgICBlbHNlCisgICAgc3dpdGNoIChzdHlsZSkg
eworICAgIGNhc2UgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU6CiAgICAgICAgIG1fZGF0
YS0+Y29udGV4dC0+U2V0UGVuKHd4UGVuKCp3eFJFRCwgMiwgd3hMT05HX0RBU0gpKTsKLSAgICAK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlOgor
ICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBlbih3eFBlbigqd3hHUkVFTiwgMiwgd3hMT05H
X0RBU0gpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICBtX2RhdGEtPmNvbnRleHQtPkRyYXdMaW5lKG9yaWdpbi54KCksIG9yaWdpbi55
KCksIG9yaWdpbi54KCkgKyB3aWR0aCwgb3JpZ2luLnkoKSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjgsNiArNzY4LDIzIEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXAKICAgICAgICAgY29udGV4
dC0+Y2xlYXJTaGFkb3coKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3N0YXRpYyBHcmFwaGlj
c0NvbnRleHQ6OlRleHRDaGVja2luZ0xpbmVTdHlsZSB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JN
YXJrZXJUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCit7CisgICAg
c3dpdGNoIChtYXJrZXJUeXBlKSB7CisgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6
CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ1NwZWxsaW5nTGlu
ZVN0eWxlOworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI6CisgICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGU7CisgICAgY2Fz
ZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CisgICAgICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQ6OlRleHRDaGVja2luZ1JlcGxhY2VtZW50TGluZVN0eWxlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0OjpUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZTsKKyAgICB9Cit9CisjZW5kaWYKKwog
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdyYXBoaWNz
Q29udGV4dCogcHQsIGludCB0eCwgaW50IHR5LCBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2Vy
LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgZ3JhbW1hcikKIHsK
ICAgICAvLyBOZXZlciBwcmludCBzcGVsbGluZy9ncmFtbWFyIG1hcmtlcnMgKDUzMjc4ODcpCkBA
IC04MzEsNyArODQ4LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFt
bQogICAgICAgICAvLyBJbiBsYXJnZXIgZm9udHMsIHRob3VnaCwgcGxhY2UgdGhlIHVuZGVybGlu
ZSB1cCBuZWFyIHRoZSBiYXNlbGluZSB0byBwcmV2ZW50IGEgYmlnIGdhcC4KICAgICAgICAgdW5k
ZXJsaW5lT2Zmc2V0ID0gYmFzZWxpbmUgKyAyOwogICAgIH0KLSAgICBwdC0+ZHJhd0xpbmVGb3JN
aXNzcGVsbGluZ09yQmFkR3JhbW1hcihJbnRQb2ludCh0eCArIG1feCArIHN0YXJ0LCB0eSArIG1f
eSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCBncmFtbWFyKTsKKyAgICBwdC0+ZHJhd0xpbmVG
b3JUZXh0Q2hlY2tpbmcoSW50UG9pbnQodHggKyBtX3ggKyBzdGFydCwgdHkgKyBtX3kgKyB1bmRl
cmxpbmVPZmZzZXQpLCB3aWR0aCwgdGV4dENoZWNraW5nTGluZVN0eWxlRm9yTWFya2VyVHlwZSht
YXJrZXIudHlwZSkpOwogfQogCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFy
a2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGludCB0eCwgaW50IHR5LCBjb25zdCBEb2N1bWVudE1h
cmtlciYgbWFya2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCkBAIC04
OTgsMTAgKzkxNSwxMCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJz
CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpHcmFtbWFyOgogICAgICAgICAgICAg
Y2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50
TWFya2VyOjpSZXBsYWNlbWVudDoKKyAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlJl
amVjdGVkQ29ycmVjdGlvbjoKICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZCkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2g6CiAg
ICAgICAgICAgICAgICAgaWYgKCFiYWNrZ3JvdW5kKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTkzMyw2ICs5NTAsOSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1l
bnRNYXJrZXJzCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERvY3Vt
ZW50TWFya2VyOjpSZXBsYWNlbWVudDoKICAgICAgICAgICAgICAgICBjb21wdXRlUmVjdEZvclJl
cGxhY2VtZW50TWFya2VyKHR4LCB0eSwgbWFya2VyLCBzdHlsZSwgZm9udCk7CisgICAgICAgICAg
ICAgICAgcGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihwdCwgdHgsIHR5LCBtYXJrZXIsIHN0
eWxlLCBmb250LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb246CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0wOC0zMSAgSmlhIFB1ICA8anB1QGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgYXV0b2NvcnJlY3Rpb24gVUkgb24gTWFjIE9TIFguCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDk1OAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNzI5OTYyMT4KKworICAgICAgICBTZWUgZGV0YWlsZWQgaGlnaCBsZXZlbCBk
ZXNjcmlwdGlvbiBpbiBXZWJDb3JlL0NoYW5nZUxvZy4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKTogRHVtbXkgaW1wbGVtZW50YXRpb24u
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bCk6IERpdHRvCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oOiBBZGRlZCBuZXcgbWV0aG9kcyBkZWNsYXJlZCBpbiBiYXNlIGNsYXNzLgorCiAy
MDEwLTA4LTMxICBKb24gSG9uZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CiAKICAgICAg
ICAgRml4IHNvbWUgY29weS9wYXN0ZSBlcnJvcnMuCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24g
NjY1NjcpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDQgKzQ2OSwxNiBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6c2V0SW5wdXRNZXRob2RTdGF0CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAor
I2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCit2b2lkIFdlYkVk
aXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIFdlYkNvcmU6OkVk
aXRvciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJFZGl0b3JDbGll
bnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzks
MTIgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLXByaXZhdGU6ICAgIAorcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwotICAgIAorCiAgICAgdmlydHVhbCBib29s
IHNob3VsZERlbGV0ZVJhbmdlKFdlYkNvcmU6OlJhbmdlKik7CiAgICAgdmlydHVhbCBib29sIHNo
b3VsZFNob3dEZWxldGVJbnRlcmZhY2UoV2ViQ29yZTo6SFRNTEVsZW1lbnQqKTsKLSAgICB2aXJ0
dWFsIGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7IAorICAgIHZpcnR1YWwgYm9vbCBz
bWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3RUcmFp
bGluZ1doaXRlc3BhY2VFbmFibGVkKCk7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiAgICAgdmlydHVhbCB2b2lkIHRvZ2dsZUNvbnRpbnVvdXNT
cGVsbENoZWNraW5nKCk7CkBAIC0xMzEsNyArMTMxLDEwIEBAIHByaXZhdGU6ICAgIAogICAgIHZp
cnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYsIFZlY3RvcjxX
VEY6OlN0cmluZz4mIGd1ZXNzZXMpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRo
b2RTdGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5h
YmxlZCk7Ci0KKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQor
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgV2ViQ29y
ZTo6RWRpdG9yKik7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9v
bCBjb3JyZWN0aW9uQWNjZXB0ZWQpOworI2VuZGlmCiAgICAgV2ViUGFnZSogbV9wYWdlOwogfTsK
IApJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0wOC0zMSAgSmlhIFB1ICA8anB1QGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgYXV0b2NvcnJlY3Rpb24gVUkgb24gTWFjIE9TIFguCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDk1OAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNzI5OTYyMT4KKworICAgICAgICBTZWUgZGV0YWlsZWQgaGlnaCBsZXZlbCBk
ZXNjcmlwdGlvbiBpbiBXZWJDb3JlL0NoYW5nZUxvZy4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5oOiBBZGRlZCBuZXcgbWVtYmVyIG1ldGhvZHMgZGVjbGFyZWQg
aW4KKyAgICAgICAgICBFZGl0b3JDbGllbnQuIEFkZGVkIG1fY29ycmVjdGlvblBhbmVsVGFnIHRv
IHN0b3JlIHRoZSBJRCBvZiBjdXJyZW50IGF1dG9jb3JyZWN0aW9uIFVJIG9iamVjdC4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVk
aXRvckNsaWVudDo6V2ViRWRpdG9yQ2xpZW50KTogSW5pdGlhbGl6ZSBtX2NvcnJlY3Rpb25QYW5l
bFRhZy4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6fldlYkVkaXRvckNsaWVudCk6IE1ha2Ug
c3VyZSB0aGUgYXV0b2NvcnJlY3Rpb24gVUkgaXMKKyAgICAgICAgICBkaXNtaXNzZWQgYmVmb3Jl
IGRlc3Ryb3lpbmcgdGhlIG9iamVjdC4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbik6IERpc21pc3MgYXV0b2NvcnJlY3Rpb24gVUkgd2hlbmV2ZXIg
dGhlIHNlbGVjdGlvbiBjaGFuZ2VzLgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29y
cmVjdGlvblBhbmVsKTogU2hvdyBhdXRvY29ycmVjdGlvbiBVSS4KKyAgICAgICAgKFdlYkVkaXRv
ckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6IERpc21pc3MgYXV0b2NvcnJlY3Rpb24g
VUkuCisKIDIwMTAtMDgtMzEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0VkaXRvckNsaWVudC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgogI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KQEAgLTM4LDcgKzM5LDcgQEAKIGNsYXNzIFdlYkVk
aXRvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpFZGl0b3JDbGllbnQgewogcHVibGljOgogICAg
IFdlYkVkaXRvckNsaWVudChXZWJWaWV3ICopOwotICAgIAorICAgIHZpcnR1YWwgfldlYkVkaXRv
ckNsaWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlRGVzdHJveWVkKCk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CkBAIC0xMjksMTIgKzEzMCwxOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFdURjo6
U3RyaW5nJiwgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKTsKICAgICB2aXJ0dWFs
IHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5w
dXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpCisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxh
Y2VtZW50U3RyaW5nLCBXZWJDb3JlOjpFZGl0b3IqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbChib29sIGNvcnJlY3Rpb25BY2NlcHRlZCk7CisjZW5kaWYKIHByaXZh
dGU6CiAgICAgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvT3JSZWRvKFBhc3NSZWZQdHI8V2Vi
Q29yZTo6RWRpdENvbW1hbmQ+LCBib29sIGlzUmVkbyk7CiAgICAgV2ViRWRpdG9yQ2xpZW50KCk7
Ci0gICAgCisKICAgICBXZWJWaWV3ICptX3dlYlZpZXc7CiAgICAgUmV0YWluUHRyPFdlYkVkaXRv
clVuZG9UYXJnZXQ+IG1fdW5kb1RhcmdldDsKLSAgICAKICAgICBib29sIG1faGF2ZVVuZG9SZWRv
T3BlcmF0aW9uczsKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCisgICAgTlNJbnRlZ2VyIG1fY29ycmVjdGlvblBhbmVsVGFnOworI2VuZGlmCiB9OwpJbmRl
eDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlz
aW9uIDY2NTY3KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDkgQEAKICNpbXBvcnQgPHJ1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5oPgogI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbXBvcnQg
PHd0Zi9UaHJlYWRpbmcuaD4KKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQorI2ltcG9ydCA8QXBwS2l0L05TVGV4dENoZWNrZXIuaD4KKyNlbmRpZgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC0xNzEsNyArMTc0
LDE3IEBAIFdlYkVkaXRvckNsaWVudDo6V2ViRWRpdG9yQ2xpZW50KFdlYlZpZXcKICAgICA6IG1f
d2ViVmlldyh3ZWJWaWV3KQogICAgICwgbV91bmRvVGFyZ2V0KFtbW1dlYkVkaXRvclVuZG9UYXJn
ZXQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXSkKICAgICAsIG1faGF2ZVVuZG9SZWRvT3BlcmF0
aW9ucyhmYWxzZSkKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQorICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUYWcoLTEpCisjZW5kaWYKK3sKK30KKworV2ViRWRp
dG9yQ2xpZW50Ojp+V2ViRWRpdG9yQ2xpZW50KCkKIHsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7
CisjZW5kaWYKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKCkKQEAgLTI4Niw2ICsyOTksMTAgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OnJlc3BvbmRUb0NoYW5nZWRTZQogewogICAgIFttX3dlYlZpZXcgX3NlbGVjdGlvbkNoYW5nZWRd
OwogCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBk
aXNtaXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOworI2VuZGlmCisKICAgICAvLyBGSVhNRTogVGhp
cyBxdWlyayBpcyBuZWVkZWQgZHVlIHRvIDxyZGFyOi8vcHJvYmxlbS81MDA5NjI1PiAtIFdlIGNh
biBwaGFzZSBpdCBvdXQgb25jZSBBcGVydHVyZSBjYW4gYWRvcHQgdGhlIG5ldyBiZWhhdmlvciBv
biB0aGVpciBlbmQKICAgICBpZiAoIVdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1Rf
VkVSU0lPTl9XSVRIT1VUX0FQRVJUVVJFX1FVSVJLKSAmJiBbW1tOU0J1bmRsZSBtYWluQnVuZGxl
XSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuQXBlcnR1cmUi
XSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzkwLDYgKzgwNywzNSBAQCB2b2lkIFdlYkVkaXRvckNs
aWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpCiAjZW5kaWYKIH0KIAorI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0Nv
cnJlY3Rpb25QYW5lbChjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dFN0cmluZywgRWRpdG9yKiBlZGl0b3IpIHsKKyAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKHRy
dWUpOworCisgICAgTlNSZWN0IGJvdW5kaW5nQm94QXNOU1JlY3QgPSBib3VuZGluZ0JveE9mUmVw
bGFjZWRTdHJpbmc7CisgICAgTlNSZWN0IHdlYlZpZXdGcmFtZSA9IG1fd2ViVmlldy5mcmFtZTsK
KyAgICBib3VuZGluZ0JveEFzTlNSZWN0Lm9yaWdpbi55ID0gd2ViVmlld0ZyYW1lLnNpemUuaGVp
Z2h0LU5TTWF4WShib3VuZGluZ0JveEFzTlNSZWN0KTsKKworICAgIC8vIE5lZWQgdG8gZXhwbGlj
aXRseSB1c2UgdGhlc2UgbG9jYWwgTlNTdHJpbmcgb2JqZWN0cywgYmVjYXVzZSB0aGUgQysrIHJl
ZmVyZW5jZXMgbWF5IGJlIGludmFsaWRhdGVkIGJ5IHRoZSB0aW1lIHRoZSBibG9jayBiZWxvdyBp
cyBleGVjdXRlZC4KKyAgICBOU1N0cmluZyAqcmVwbGFjZWRTdHJpbmdBc05TU3RyaW5nID0gcmVw
bGFjZWRTdHJpbmc7CisgICAgTlNTdHJpbmcgKnJlcGxhY2VtZW50U3RyaW5nQXNOU1N0cmluZyA9
IHJlcGxhY2VtZW50U3RyaW5nOworCisgICAgbV9jb3JyZWN0aW9uUGFuZWxUYWcgPSBbW05TU3Bl
bGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gc2hvd0NvcnJlY3Rpb246cmVwbGFjZW1lbnRT
dHJpbmdBc05TU3RyaW5nIGZvclN0cmluZ0luUmVjdDpib3VuZGluZ0JveEFzTlNSZWN0IHZpZXc6
bV93ZWJWaWV3IGNvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCBhY2NlcHRlZCkgeworICAgICAgICBp
ZiAoIWFjY2VwdGVkKSB7CisgICAgICAgICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxs
Q2hlY2tlcl0gcmVjb3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9uUmVzcG9uc2VSZWplY3RlZCB0b0Nv
cnJlY3Rpb246cmVwbGFjZW1lbnRTdHJpbmdBc05TU3RyaW5nIGZvcldvcmQ6cmVwbGFjZWRTdHJp
bmdBc05TU3RyaW5nIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOlttX3dlYlZp
ZXcgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddXTsKKyAgICAgICAgICAgIGVkaXRvci0+aGFuZGxl
UmVqZWN0ZWRDb3JyZWN0aW9uKCk7CisgICAgICAgIH0KKyAgICB9XTsKK30KKwordm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0
ZWQpCit7CisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsVGFnID49IDApIHsKKyAgICAgICAgW1tO
U1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGRpc21pc3NDb3JyZWN0aW9uOm1fY29y
cmVjdGlvblBhbmVsVGFnIGFjY2VwdENvcnJlY3Rpb246Y29ycmVjdGlvbkFjY2VwdGVkXTsKKyAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxUYWcgPSAtMTsKKyAgICB9Cit9CisjZW5kaWYKKwogdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29u
c3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKIHsKICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJl
ZFNwZWxsQ2hlY2tlcl0gdXBkYXRlU3BlbGxpbmdQYW5lbFdpdGhNaXNzcGVsbGVkV29yZDptaXNz
cGVsbGVkV29yZF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66169</attachid>
            <date>2010-08-31 22:43:28 -0700</date>
            <delta_ts>2010-08-31 23:18:12 -0700</delta_ts>
            <desc>Proposed patch (v5)</desc>
            <filename>WebKitAutoCorrection.patch</filename>
            <type>text/plain</type>
            <size>56897</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAxIEBACisyMDEwLTA4LTMxICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBhdXRvY29ycmVjdGlvbiBVSSBvbiBNYWMgT1MgWC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTU4CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83Mjk5NjIxPgorCisgICAgICAgIFNldmVyYWwgbmV3IG1lbWJlciBtZXRob2RzIGFyZSBhZGRl
ZCB0byBFZGl0b3JDbGllbnQgZm9yIGNvbW11bmljYXRpb24KKyAgICAgICAgYmV0d2VlbiBXZWJD
b3JlIGFuZCBXZWJLaXQuIEEgbmV3IGhhbmRsZXIsIGV4ZWN1dGVDYW5jZWxPcGVyYXRpb24oKSwg
aXMKKyAgICAgICAgYWRkZWQgdG8gRWRpdG9yQ29tbWFuZC5jcHAgc28gdGhhdCBXZWJDb3JlIGNh
biBpbnRlcmNlcHQgdGhlIEVTQyBrZXkgZXZlbnQKKyAgICAgICAgdG8gZGlzbWlzcyBhdXRvY29y
cmVjdGlvbiBVSS4gQSBuZXcgRG9jdW1lbnRNYXJrZXIgdmFsdWUsIFJlamVjdGVkQ29ycmVjdGlv
biwKKyAgICAgICAgaXMgYWRkZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY29ycmVjdGlvbnMgdGhh
dCB1c2VyIGhhcyByZWplY3RlZCwgc28gdGhhdCBpdAorICAgICAgICB3aWxsIG5vdCBiZSBzdWdn
ZXN0ZWQgYWdhaW4gbGF0ZXIuIFRoZSBhdXRvY29ycmVjdGlvbiBpcyBkcml2ZW4gYnkgYSB0aW1l
ci4KKyAgICAgICAgRXZlcnkgdGltZSB0aGUgZWRpdG9yIGluc2VydHMgYSBuZXcgbGV0dGVyLCB0
aGUgdGltZXIgaXMgcmVzZXQuIElmIHRoZSB0aW1lcgorICAgICAgICBmaXJlcywgaXQgbWVhbnMg
bmVpdGhlciBoYXMgdXNlciBlbnRlcmVkIGFueSBuZXcgbGV0dGVyIGZvciBjdXJyZW50IHdvcmQs
IG5vcgorICAgICAgICBoYXMgaGUgZW50ZXJlZCB3aGl0ZXNwYWNlIG9yIHB1bmN0dWF0aW9uIHRv
IGNvbXBsZXRlIHRoZSB3b3JkLiBJbiB0aGlzIGNhc2UsCisgICAgICAgIHdlIHF1ZXJ5IGZvciBh
dXRvY29ycmVjdGlvbi4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBVcGRhdGVkCisKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXIuaDogQWRkZWQgUmVqZWN0ZWRDb3JyZWN0aW9uIHRv
IGluZGljYXRlIHdvcmQgb24gd2hpY2ggdXNlcgorICAgICAgICAgIGhhcyByZWplY3RlZCBhdXRv
Y29ycmVjdGlvbi4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6RWRpdG9yKTogSW5pdGlhbGl6ZSBhdXRvY29ycmVjdGlvbiB0aW1lci4K
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6fkVkaXRvcik6IE1ha2Ugc3VyZSBhdXRvY29ycmVj
dGlvbiBVSSBpcyBkaXNtaXNzZWQgYmVmb3JlCisgICAgICAgICAgZGVzdHJveWluZyBFZGl0b3Ig
b2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmdUb1Bvc2l0aW9uKTogQWRvcHRlZCBuZXcgc2lnbmF0dXJlCisgICAgICAgICAgb2YgbWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcygpLgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKTogQ29u
c29saWRhdGVkIGFsbAorICAgICAgICAgIGJvb2xlYW4gYXJndW1lbnRzIGludG8gb25lIGJpdGZp
ZWxkLiBUaGlzIGltcHJvdmVzIHJlYWRhYmlsaXR5IGFuZCBhbGxvd3MgdXMgdG8KKyAgICAgICAg
ICBwYXNzIGluIGEgYml0IHRvIGluZGljYXRlIHdoZXRoZXIgd2Ugd2FudCB0byBzaG93IGF1dG9j
b3JyZWN0aW9uIFVJLiBBbHNvIGFkZGVkCisgICAgICAgICAgY29kZSB0byBzaG93IGF1dG9jb3Jy
ZWN0aW9uIFVJIGlmIGl0IGlzIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIpOiBBZG9wdGVkIG5ldyBzaWduYXR1cmUgb2YK
KyAgICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKCkuCisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpOiBDaGVj
ayB0byBzZWUgaWYgd2Ugc2hvdWxkIHNob3cKKyAgICAgICAgICBhdXRvY29ycmVjdGlvbiBVSSB3
aGVuIHVzZXIgcGF1c2VzIGR1cmluZyB0eXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbik6IFVwZGF0ZSB1c2VyIGRpY3Rpb25hcnkgd2hlbiBh
biBhdXRvY29ycmVjdGlvbiBpcyByZWplY3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcik6IFN0YXJ0IGF1dG9jb3JyZWN0aW9uIHRpbWVyLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOiBEaXNtaXNz
IGF1dG9jb3JyZWN0aW9uIFVJIHdoZW4gRVNDIGtleSBpcyBwcmVzc2VkLgorCisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuaDogQWRkZWQgYXV0b2NvcnJlY3Rpb24gcmVsYXRlZCBtZW1iZXIgbWV0
aG9kcyBhbmQgdmFyaWFibGVzLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVDYW5jZWxPcGVyYXRpb24pOiBIYW5kbGUgRVND
IGtleSBldmVudC4gRGlzbWlzcyBhdXRvY29ycmVjdGlvbiBVSS4KKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUNvbW1hbmRNYXApOiBVcGRhdGVkIGZvciBleGVjdXRlQ2FuY2VsT3BlcmF0aW9uKCku
CisKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKTogUmVzZXQgYXV0
b2NvcnJlY3Rpb24gdGltZXIgYWZ0ZXIgaW5zZXJ0aW9uLgorCisgICAgICAgICogbG9hZGVyL0Vt
cHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNob3dD
b3JyZWN0aW9uUGFuZWwpOiBEdW1teSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkVtcHR5RWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKTogRGl0dG8KKworICAg
ICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6IEFkZGVkIG1ldGhvZHMgZm9yIGNvbW11bmljYXRp
b24gYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgcmVnYXJkaW5nIGF1dG9jb3JyZWN0aW9uLgor
CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6IFJlbW92ZSBSZXBsYWNlbWVudCBtYXJrZXIgd2hlcmUg
d2UgdXNlZCB0byBvbmx5IHJlbW92ZSBTcGVsbGluZworICAgICAgICAgIG1hcmssIGJlY2F1c2Ug
d2hlbmV2ZXIgd2UgbmVlZCB0byByZW1vdmUgc3BlbGxpbmcgdW5kZXJsaW5lIHdlIGFsc28gc2hv
dWxkIHJlbW92ZSBhdXRvY29ycmVjdGlvbiB1bmRlcmxpbmUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDogQWRkZWQgZW51bSBUZXh0Q2hlY2tpbmdMaW5l
U3R5bGUgdG8gc3BlY2lmeSB0aGUgdW5kZXJsaW5lCisgICAgICAgICAgZm9yIGRpZmZlcmVudCB0
eXBlIG9mIHRleHQgY2hlY2tpbmcgcmVzdWx0LiBSZXBsYWNlZCBkcmF3TGluZUZvck1pc3NwZWxs
aW5nT3JCYWRHcmFtbWFyKCkgd2l0aAorICAgICAgICAgIGRyYXdMaW5lRm9yVGV4dENoZWNraW5n
KCksIHdoaWNoIGFsbG93cyBhdXRvY29ycmVjdGlvbiB0byBoYXZlIGRpZmZlcmVudCBpbmRpY2F0
aW9uIGZyb20gbWlzc3BlbGxpbmcKKyAgICAgICAgICBhbmQgZ3JhbW1hdGljYWwgZXJyb3IuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENo
ZWNraW5nKTogUmVwbGFjZWQgZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcigpIHdp
dGggZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0bworCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0
bworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9w
ZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dENoZWNraW5nKTogRGl0dG8KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0bworCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0bworCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBE
aXR0bworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0
V2luY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHRDaGVja2luZyk6IERpdHRvCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9H
cmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKTogRGl0dG8KKworICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRleHRDaGVja2luZ0xpbmVTdHls
ZUZvck1hcmtlclR5cGUpOiBSZXR1cm4gbGluZSBzdHlsZSBmb3IgYSBnaXZlbiBkb2N1bWVudCBt
YXJrZXIgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U3BlbGxp
bmdPckdyYW1tYXJNYXJrZXIpOiAgUmVwbGFjZWQgZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFk
R3JhbW1hcigpIHdpdGggZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoKS4KKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKTogSGFuZGxlIG5ldyBtYXJr
ZXIgdmFsdWUsIFJlamVjdGVkQ29ycmVjdGlvbi4KKwogMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5n
LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTYyMSw2ICs2MjEsNyBAQCBfX1pON1dlYkNvcmU2RWRpdG9yMjFh
cHBseVN0eWxlVG9TZWxlY3RpCiBfX1pON1dlYkNvcmU2RWRpdG9yMjFpc1NlbGVjdGlvbk1pc3Nw
ZWxsZWRFdgogX19aTjdXZWJDb3JlNkVkaXRvcjIzc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb25FTlNf
MTZXcml0aW5nRGlyZWN0aW9uRQogX19aTjdXZWJDb3JlNkVkaXRvcjI0YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nRWIKK19fWk43V2ViQ29yZTZFZGl0b3IyNGhhbmRsZVJlamVjdGVkQ29ycmVjdGlv
bkV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjRpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWxFdgogX19a
TjdXZWJDb3JlNkVkaXRvcjI2ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJD
b3JlNkVkaXRvcjI2aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgpJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudE1h
cmtlci5oCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDggQEAgc3RydWN0IERvY3VtZW50TWFya2VyIHsK
ICAgICAgICAgU3BlbGxpbmcsCiAgICAgICAgIEdyYW1tYXIsCiAgICAgICAgIFRleHRNYXRjaCwK
LSAgICAgICAgUmVwbGFjZW1lbnQKKyAgICAgICAgUmVwbGFjZW1lbnQsCisgICAgICAgIFJlamVj
dGVkQ29ycmVjdGlvbgogICAgIH07CiAKICAgICBNYXJrZXJUeXBlIHR5cGU7CkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA1MywxMSArMTA1MywxNiBAQCBFZGl0b3I6OkVkaXRvcihGcmFt
ZSogZnJhbWUpCiAgICAgLy8gVGhpcyBpcyBvZmYgYnkgZGVmYXVsdCwgc2luY2UgbW9zdCBlZGl0
b3JzIHdhbnQgdGhpcyBiZWhhdmlvciAodGhpcyBtYXRjaGVzIElFIGJ1dCBub3QgRkYpLgogICAg
ICwgbV9zaG91bGRTdHlsZVdpdGhDU1MoZmFsc2UpCiAgICAgLCBtX2tpbGxSaW5nKGFkb3B0UHRy
KG5ldyBLaWxsUmluZykpCi17IAorICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAm
RWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKQorewogfQogCiBFZGl0b3I6On5FZGl0
b3IoKQogeworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOworI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yOjpjbGVh
cigpCkBAIC0yMzUxLDIyICsyMzU2LDI5IEBAIGJvb2wgRWRpdG9yOjpzcGVsbGluZ1BhbmVsSXNT
aG93aW5nKCkKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1Bvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCkKIHsKICNpZiBQTEFURk9STShNQUMpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KQotICAgIGJvb2wgbWFya1NwZWxsaW5nID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoKTsKLSAgICBib29sIG1hcmtHcmFtbWFyID0gbWFya1NwZWxsaW5nICYmIGlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCgpOwotICAgIGJvb2wgcGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50
cyA9IGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNBdXRv
bWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAobWFya1NwZWxsaW5nICYm
IGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKTsKLSAgICBpZiAoIW1hcmtT
cGVsbGluZyAmJiAhcGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cykKKyAgICBpbnQgdGV4
dENoZWNraW5nT3B0aW9ucyA9IDA7CisgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCkpCisgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMgfD0gTWFya1NwZWxsaW5nOwor
CisgICAgaWYgKGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAg
fHwgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCisgICAgICAgIHx8IGlzQXV0b21h
dGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICB8fCBpc0F1dG9tYXRpY1RleHRS
ZXBsYWNlbWVudEVuYWJsZWQoKQorICAgICAgICB8fCAoKHRleHRDaGVja2luZ09wdGlvbnMgJiBN
YXJrU3BlbGxpbmcpICYmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKSkK
KyAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBQZXJmb3JtUmVwbGFjZW1lbnQ7CisKKyAg
ICBpZiAoIXRleHRDaGVja2luZ09wdGlvbnMgJiAoTWFya1NwZWxsaW5nIHwgUGVyZm9ybVJlcGxh
Y2VtZW50KSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgaWYgKGlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpKQorICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IE1hcmtHcmFtbWFy
OworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlv
bihzdGFydE9mV29yZChwLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChwLCBSaWdo
dFdvcmRJZk9uQm91bmRhcnkpKTsKLSAgICBpZiAobWFya0dyYW1tYXIpIHsKKyAgICBpZiAodGV4
dENoZWNraW5nT3B0aW9ucyAmIE1hcmtHcmFtbWFyKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0ZWRTZW50ZW5jZSA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKHAp
LCBlbmRPZlNlbnRlbmNlKHApKTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXJJblJhbmdlcyh0cnVlLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIHRydWUsIHNlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgcGVy
Zm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cyk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBzZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXMobWFya1NwZWxsaW5nLCBhZGphY2VudFdvcmRzLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIGZhbHNlLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCksIHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpOworICAgICAgICBt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlv
bnMsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKICAgICB9CiAjZWxzZQogICAgIGlmICghaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKQEAgLTI1MTAsMTMgKzI1MjIsMTggQEAg
c3RhdGljIGlubGluZSBib29sIGlzQW1iaWd1b3VzQm91bmRhcnlDaAogICAgIHJldHVybiBjaGFy
YWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8
IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsKIH0KIAotdm9pZCBFZGl0
b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoYm9vbCBtYXJrU3Bl
bGxpbmcsIFJhbmdlKiBzcGVsbGluZ1JhbmdlLCBib29sIG1hcmtHcmFtbWFyLCBSYW5nZSogZ3Jh
bW1hclJhbmdlLCBib29sIHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpCit2b2lkIEVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhpbnQgdGV4dENo
ZWNraW5nT3B0aW9ucywgUmFuZ2UqIHNwZWxsaW5nUmFuZ2UsIFJhbmdlKiBncmFtbWFyUmFuZ2Up
CiB7CisgICAgYm9vbCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYg
TWFya1NwZWxsaW5nOworICAgIGJvb2wgc2hvdWxkTWFya0dyYW1tYXIgPSB0ZXh0Q2hlY2tpbmdP
cHRpb25zICYgTWFya0dyYW1tYXI7CisgICAgYm9vbCBzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQg
PSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYgUGVyZm9ybVJlcGxhY2VtZW50OworICAgIGJvb2wgc2hv
dWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBTaG93Q29ycmVj
dGlvblBhbmVsOworCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzZWxlY3Rp
b25zIGFscmVhZHkgZXhwYW5kZWQgdG8gd29yZCBib3VuZGFyaWVzLgogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGlmICghY2xpZW50KCkgfHwgIXNwZWxsaW5nUmFuZ2UgfHwgKG1hcmtH
cmFtbWFyICYmICFncmFtbWFyUmFuZ2UpKQorICAgIGlmICghY2xpZW50KCkgfHwgIXNwZWxsaW5n
UmFuZ2UgfHwgKHNob3VsZE1hcmtHcmFtbWFyICYmICFncmFtbWFyUmFuZ2UpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgCisKICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUgbm9kZSwg
YmFpbC4KICAgICBOb2RlKiBlZGl0YWJsZU5vZGUgPSBzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRh
aW5lcigpOwogICAgIGlmICghZWRpdGFibGVOb2RlIHx8ICFlZGl0YWJsZU5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCkpCkBAIC0yNTM5LDggKzI1NTYsOCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhC
b3VuZGFyaWVzID0gZmFsc2U7CiAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZzsKICAgICBSZWZQ
dHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlOwotICAgIAotICAgIGlmIChtYXJrR3JhbW1hcikgewor
CisgICAgaWYgKHNob3VsZE1hcmtHcmFtbWFyKSB7CiAgICAgICAgIC8vIFRoZSBzcGVsbGluZyBy
YW5nZSBzaG91bGQgYmUgY29udGFpbmVkIGluIHRoZSBwYXJhZ3JhcGgtYWxpZ25lZCBleHRlbnNp
b24gb2YgdGhlIGdyYW1tYXIgcmFuZ2UuCiAgICAgICAgIHBhcmFncmFwaFJhbmdlID0gcGFyYWdy
YXBoQWxpZ25lZFJhbmdlRm9yUmFuZ2UoZ3JhbW1hclJhbmdlLCBncmFtbWFyUmFuZ2VTdGFydE9m
ZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBvZmZzZXRBc1Jh
bmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5k
b2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBzcGVsbGluZ1Jhbmdl
LT5zdGFydFBvc2l0aW9uKCkpOwpAQCAtMjU1MSwxMCArMjU2OCwxMCBAQCB2b2lkIEVkaXRvcjo6
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgfQogICAgIHNwZWxsaW5nUmFuZ2VFbmRP
ZmZzZXQgPSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHNwZWxsaW5nUmFuZ2UpOwogICAgIHBhcmFncmFwaExlbmd0aCA9IHBhcmFncmFwaFN0cmlu
Zy5sZW5ndGgoKTsKLSAgICBpZiAocGFyYWdyYXBoTGVuZ3RoIDw9IDAgfHwgKHNwZWxsaW5nUmFu
Z2VTdGFydE9mZnNldCA+PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmICghbWFya0dyYW1tYXIg
fHwgZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQgPj0gZ3JhbW1hclJhbmdlRW5kT2Zmc2V0KSkpCisg
ICAgaWYgKHBhcmFncmFwaExlbmd0aCA8PSAwIHx8IChzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQg
Pj0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiAoIXNob3VsZE1hcmtHcmFtbWFyIHx8IGdyYW1t
YXJSYW5nZVN0YXJ0T2Zmc2V0ID49IGdyYW1tYXJSYW5nZUVuZE9mZnNldCkpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgaWYgKHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpIHsK
KworICAgIGlmIChzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQpIHsKICAgICAgICAgaWYgKG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Q2Fy
ZXRTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gc2F2ZSB0aGUgY2FyZXQg
cG9zaXRpb24gc28gd2UgY2FuIHJlc3RvcmUgaXQgbGF0ZXIgaWYgbmVlZGVkCiAgICAgICAgICAg
ICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJh
bmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwpAQCAtMjU3MCwx
NCArMjU4NywxNiBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMgPSAwOwot
ICAgIGlmIChtYXJrU3BlbGxpbmcpCisgICAgaWYgKHNob3VsZE1hcmtTcGVsbGluZykKICAgICAg
ICAgY2hlY2tpbmdUeXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgaWYgKG1h
cmtHcmFtbWFyKQorICAgIGlmIChzaG91bGRNYXJrR3JhbW1hcikKICAgICAgICAgY2hlY2tpbmdU
eXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKLSAgICBpZiAocGVyZm9ybVRleHRDaGVj
a2luZ1JlcGxhY2VtZW50cykgeworICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKQor
ICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uOworICAg
IGlmIChzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQpIHsKICAgICAgICAgaWYgKGlzQXV0b21hdGlj
TGlua0RldGVjdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4
dENoZWNraW5nVHlwZUxpbms7CiAgICAgICAgIGlmIChpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0
aW9uRW5hYmxlZCgpKQpAQCAtMjU4NiwyMCArMjYwNSwyNiBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRD
aGVja2luZ1R5cGVEYXNoOwogICAgICAgICBpZiAoaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRF
bmFibGVkKCkpCiAgICAgICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRDaGVja2luZ1R5cGVS
ZXBsYWNlbWVudDsKLSAgICAgICAgaWYgKG1hcmtTcGVsbGluZyAmJiBpc0F1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgaWYgKHNob3VsZE1hcmtTcGVsbGluZyAm
JiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIGNo
ZWNraW5nVHlwZXMgfD0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247CiAgICAgfQogICAgIGNs
aWVudCgpLT5jaGVja1RleHRPZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygp
LCBwYXJhZ3JhcGhMZW5ndGgsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwotICAgIAorCisjaWYg
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQorICAgIC8vIElmIHRoaXMgY2hlY2tpbmcgaXMgb25seSBmb3Igc2hvd2luZyBjb3JyZWN0aW9u
IHBhbmVsLCB3ZSBzaG91bGRuJ3QgYm90aGVyIHRvIG1hcmsgbWlzc3BlbGxpbmdzLgorICAgIGlm
IChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKQorICAgICAgICBzaG91bGRNYXJrU3BlbGxpbmcg
PSBmYWxzZTsKKyNlbmRpZgorCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMu
c2l6ZSgpOyBpKyspIHsKICAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQg
PSAmcmVzdWx0c1tpXTsKICAgICAgICAgaW50IHJlc3VsdExvY2F0aW9uID0gcmVzdWx0LT5sb2Nh
dGlvbiArIG9mZnNldER1ZVRvUmVwbGFjZW1lbnQ7CiAgICAgICAgIGludCByZXN1bHRMZW5ndGgg
PSByZXN1bHQtPmxlbmd0aDsKLSAgICAgICAgaWYgKG1hcmtTcGVsbGluZyAmJiByZXN1bHQtPnR5
cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdExvY2F0aW9uID49IHNwZWxs
aW5nUmFuZ2VTdGFydE9mZnNldCAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA8PSBz
cGVsbGluZ1JhbmdlRW5kT2Zmc2V0KSB7CisgICAgICAgIGlmIChzaG91bGRNYXJrU3BlbGxpbmcg
JiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiByZXN1bHRMb2Nh
dGlvbiA+PSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1
bHRMZW5ndGggPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCkgewogICAgICAgICAgICAgQVNTRVJU
KHJlc3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICBS
ZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHNw
ZWxsaW5nUmFuZ2UsIHJlc3VsdExvY2F0aW9uIC0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0LCBy
ZXN1bHRMZW5ndGgpOwogICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWlu
ZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNzcGVsbGluZ1Jhbmdl
LmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICB9IGVsc2UgaWYgKG1h
cmtHcmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBy
ZXN1bHRMb2NhdGlvbiA8IGdyYW1tYXJSYW5nZUVuZE9mZnNldCAmJiByZXN1bHRMb2NhdGlvbiAr
IHJlc3VsdExlbmd0aCA+IGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0KSB7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkTWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5
cGVHcmFtbWFyICYmIHJlc3VsdExvY2F0aW9uIDwgZ3JhbW1hclJhbmdlRW5kT2Zmc2V0ICYmIHJl
c3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoID4gZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQpIHsK
ICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49
IDApOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlc3VsdC0+ZGV0YWls
cy5zaXplKCk7IGorKykgewogICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRl
dGFpbCA9ICZyZXN1bHQtPmRldGFpbHNbal07CkBAIC0yNjA5LDcgKzI2MzQsNyBAQCB2b2lkIEVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAgICAgICAgICAgICAgIGdy
YW1tYXJSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFk
ZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBk
ZXRhaWwtPnVzZXJEZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMgJiYg
cmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAm
JiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA+PSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZz
ZXQKKyAgICAgICAgfSBlbHNlIGlmICgoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3Vs
ZFNob3dDb3JyZWN0aW9uUGFuZWwpICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoIDw9
IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGgg
Pj0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICYmIChyZXN1
bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUxpbmsKICAgICAgICAgICAgICAgICAgICAgfHwg
cmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVRdW90ZQogICAgICAgICAgICAgICAgICAg
ICB8fCByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZURhc2gKQEAgLTI2NDAsNyArMjY2
NSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAg
ICAgICAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuc3RhcnRPZmZzZXQpIDwgZW5kT2Zm
c2V0ICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVuZE9mZnNldCkgPiBzdGFydE9mZnNldCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCB8fCBtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRD
b3JyZWN0aW9uKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5zdGFydE9mZnNldCkgPCBlbmRP
ZmZzZXQgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0KSA+IHN0YXJ0T2Zmc2V0
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb1JlcGxhY2VtZW50ID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjY0
OCw3ICsyNjczLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGRvUmVwbGFjZW1lbnQgJiYgc2VsZWN0aW9uVG9SZXBs
YWNlICE9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSkgeworICAgICAgICAgICAg
aWYgKGRvUmVwbGFjZW1lbnQgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgJiYgc2VsZWN0
aW9uVG9SZXBsYWNlICE9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSkgewogICAg
ICAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9u
VG9SZXBsYWNlKSkgewogICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGlvbkNoYW5nZWQgPSB0cnVlOwpAQCAtMjY1NiwzMCArMjY4MSw1MiBAQCB2b2lkIEVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAgICAgICAgICAgICAgIGRvUmVw
bGFjZW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsKICAgICAgICAgICAgIGlmIChkb1JlcGxh
Y2VtZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tp
bmdUeXBlTGluaykgewogICAgICAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJD
aGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbkVkaXRSaWNobHkoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChDcmVhdGVMaW5rQ29tbWFuZDo6
Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHJlc3VsdC0+cmVwbGFjZW1lbnQpKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0KHJlc3Vs
dC0+cmVwbGFjZW1lbnQsIHJhbmdlVG9SZXBsYWNlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25U
eXBlZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nOwogICAg
ICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3Jy
ZWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWRTdHJpbmcgPSBwbGFpblRl
eHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICByZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQocmVzdWx0LT5yZXBsYWNlbWVudCwgZmFsc2UsIGZhbHNlKTsKLSAgICAg
ICAgICAgICAgICAgICAgc3BlbGxpbmdSYW5nZUVuZE9mZnNldCArPSByZXBsYWNlbWVudExlbmd0
aCAtIHJlc3VsdExlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0RHVlVG9SZXBsYWNl
bWVudCArPSByZXBsYWNlbWVudExlbmd0aCAtIHJlc3VsdExlbmd0aDsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdExvY2F0aW9uIDwgc2VsZWN0aW9uT2Zmc2V0KQotICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uT2Zmc2V0ICs9IHJlcGxhY2VtZW50TGVuZ3RoIC0gcmVzdWx0
TGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVj
a2luZ1R5cGVDb3JyZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYSBt
YXJrZXIgc28gdGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBhbmQgd29uJ3Qg
YmUgcmUtY29ycmVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBy
ZXBsYWNlZFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZS5nZXQo
KSwgcmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCwgcmVwbGFjZWRTdHJpbmcpOworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5n
dGggPT0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNr
aW5nVHlwZUNvcnJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkg
c2hvdyB0aGUgY29ycmVjdGlvbiBwYW5lbCBvbiB0aGUgbGFzdCB3b3JkLgorICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmFuZ2VUb1JlcGxhY2UtPnRleHRRdWFkcyh0ZXh0UXVhZHMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRl
eHRRdWFkcy5lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVjdCB0b3RhbEJv
dW5kaW5nQm94OworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChWZWN0b3I8RmxvYXRRdWFk
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0UXVhZHMuYmVnaW4oKTsgaXQgPCBlbmQ7ICsraXQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxCb3VuZGluZ0JveC51bml0ZShpdC0+
Ym91bmRpbmdCb3goKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3JhbmdlVG9CZVJlcGxh
Y2VkQnlDb3JyZWN0aW9uID0gcmFuZ2VUb1JlcGxhY2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0cmluZ1RvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbiA9IHJlcGxhY2VkU3RyaW5nOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwodG90YWxC
b3VuZGluZ0JveCwgbV9zdHJpbmdUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24sIHJlc3VsdC0+cmVw
bGFjZW1lbnQsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgZG9SZXBsYWNlbWVudCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGRvUmVwbGFjZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dChyZXN1bHQtPnJlcGxhY2VtZW50LCBmYWxzZSwgZmFsc2UpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdSYW5nZUVuZE9mZnNldCArPSByZXBsYWNlbWVu
dExlbmd0aCAtIHJlc3VsdExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldER1
ZVRvUmVwbGFjZW1lbnQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24gPCBzZWxlY3Rpb25PZmZzZXQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uT2Zmc2V0ICs9IHJlcGxhY2Vt
ZW50TGVuZ3RoIC0gcmVzdWx0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikgeworI2lmIFBMQVRGT1JN
KE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOworI2Vu
ZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQg
Y29ycmVjdGlvbnMgY2FuIGVhc2lseSBiZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3Rl
ZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFu
Z2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlLmdldCgpLCByZXN1bHRM
b2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQotICAgIAorCiAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHsKICAgICAgICAgLy8g
UmVzdG9yZSB0aGUgY2FyZXQgcG9zaXRpb24gaWYgd2UgaGF2ZSBtYWRlIGFueSByZXBsYWNlbWVu
dHMKICAgICAgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBlbmRPZlBhcmFncmFwaChz
dGFydE9mTmV4dFBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSkpOwpA
QCAtMjcyMSw3ICsyNzY4LDEwIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW0KICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQogICAgIGlmICghaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModHJ1ZSwgc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgbWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCksIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgZmFsc2Up
OworICAgIGludCB0ZXh0Q2hlY2tpbmdPcHRpb24gPSBNYXJrU3BlbGxpbmc7CisgICAgaWYgKG1h
cmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICB0ZXh0Q2hl
Y2tpbmdPcHRpb24gfD0gTWFya0dyYW1tYXI7CisgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJh
ZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb24sIHNwZWxsaW5nU2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSk7CiAjZWxzZQogICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1Jh
bmdlOwogICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7CkBAIC0yNzMwLDYgKzI3ODAsNDUgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbQogI2VuZGlmCiB9CiAKK3ZvaWQgRWRpdG9yOjpjb3JyZWN0aW9u
UGFuZWxUaW1lckZpcmVkKFRpbWVyPEVkaXRvcj4qKQoreworI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpCisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uLnN0YXJ0
KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0
T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgVmlzaWJsZVNlbGVjdGlv
biBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CisgICAgbWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhNYXJrU3BlbGxpbmcgfCBTaG93Q29y
cmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDAp
OworI2VuZGlmCit9CisKK3ZvaWQgRWRpdG9yOjpoYW5kbGVSZWplY3RlZENvcnJlY3Rpb24oKQor
eworICAgIFJhbmdlKiByZXBsYWNlZFJhbmdlID0gbV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVj
dGlvbi5nZXQoKTsKKyAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9mcmFtZS0+ZG9jdW1lbnQo
KSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMo
KS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJl
Y3Rpb24sIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uKTsKK30KKwordm9pZCBFZGl0
b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKQoreworI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBzdGF0aWMgY29u
c3QgZG91YmxlIGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwgPSAwLjM7CisgICAgaWYgKGNs
aWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsK
KyAgICBpZiAoaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCisgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVy
SW50ZXJ2YWwpOworI2VuZGlmCit9CisKK3ZvaWQgRWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRp
b24oKQoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsKGZhbHNlKTsKKyNlbmRpZgorfQorCiBQYXNzUmVmUHRyPFJhbmdl
PiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogewog
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50QXRQb2ludCh3aW5kb3dQ
b2ludCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCwxMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQoKTsKICAgICBib29sIGlzQXV0
b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOwogICAgIHZvaWQgdG9nZ2xlQXV0b21h
dGljU3BlbGxpbmdDb3JyZWN0aW9uKCk7Ci0gICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKGJvb2wgbWFya1NwZWxsaW5nLCBSYW5nZSogc3BlbGxpbmdSYW5n
ZSwgYm9vbCBtYXJrR3JhbW1hciwgUmFuZ2UqIGdyYW1tYXJSYW5nZSwgYm9vbCBwZXJmb3JtVGV4
dENoZWNraW5nUmVwbGFjZW1lbnRzKTsKKyAgICBlbnVtIFRleHRDaGVja2luZ09wdGlvbnMgewor
ICAgICAgICBNYXJrU3BlbGxpbmcgPSAxIDw8IDAsCisgICAgICAgIE1hcmtHcmFtbWFyID0gMSA8
PCAxLAorICAgICAgICBQZXJmb3JtUmVwbGFjZW1lbnQgPSAxIDw8IDIsCisgICAgICAgIFNob3dD
b3JyZWN0aW9uUGFuZWwgPSAxIDw8IDMsCisgICAgfTsKKyAgICB2b2lkIG1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoaW50IHRleHRDaGVja2luZ09wdGlvbnMsIFJhbmdl
KiBzcGVsbGluZ1JhbmdlLCBSYW5nZSogZ3JhbW1hclJhbmdlKTsKICAgICB2b2lkIGNoYW5nZUJh
Y2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpOwogI2VuZGlm
CiAgICAgdm9pZCBhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVj
dGlvbiA9IGZhbHNlKTsKQEAgLTI5NCw5ICszMDAsMTMgQEAgcHVibGljOgogICAgIGJvb2wgaW5z
aWRlVmlzaWJsZUFyZWEoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICBib29sIGluc2lkZVZp
c2libGVBcmVhKFJhbmdlKikgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4dFZpc2li
bGVSYW5nZShSYW5nZSosIGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxh
ZywgYm9vbCB3cmFwRmxhZyk7Ci0gICAgCisKICAgICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFuZ2Uq
LCBib29sIHByZXBlbmQpOwogCisgICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKTsKKyAg
ICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyAgICB2b2lkIGhhbmRsZVJlamVj
dGVkQ29ycmVjdGlvbigpOworCiAgICAgdm9pZCBwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CiAg
ICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc21hcnRSZXBsYWNl
KTsKIApAQCAtMzE4LDYgKzMyOCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN0YXJ0
TmV3S2lsbFJpbmdTZXF1ZW5jZTsKICAgICBib29sIG1fc2hvdWxkU3R5bGVXaXRoQ1NTOwogICAg
IE93blB0cjxLaWxsUmluZz4gbV9raWxsUmluZzsKKyAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2VU
b0JlUmVwbGFjZWRCeUNvcnJlY3Rpb247CisgICAgU3RyaW5nIG1fc3RyaW5nVG9CZVJlcGxhY2Vk
QnlDb3JyZWN0aW9uOworICAgIFRpbWVyPEVkaXRvcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsK
IAogICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIGNhblNt
YXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqKTsKQEAgLTMzNSw4ICszNDgsOSBA
QCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gZmlyc3RWaXNpYmxlUmFuZ2UoY29u
c3QgU3RyaW5nJiwgYm9vbCBjYXNlRmxhZyk7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbGFzdFZp
c2libGVSYW5nZShjb25zdCBTdHJpbmcmLCBib29sIGNhc2VGbGFnKTsKLSAgICAKKwogICAgIHZv
aWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5l
d1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKTsKKyAg
ICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopOwogICAgIE5v
ZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKIH07CiAKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9lZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY5LDYgKzEwNjksMTQg
QEAgc3RhdGljIGJvb2wgZXhlY3V0ZVlhbmtBbmRTZWxlY3QoRnJhbWUqIAogICAgIHJldHVybiB0
cnVlOwogfQogCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQorc3RhdGljIGJvb2wgZXhlY3V0ZUNhbmNlbE9wZXJhdGlvbihGcmFt
ZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3sK
KyAgICBmcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpOworICAgIHJldHVy
biB0cnVlOworfQorI2VuZGlmCisKIC8vIFN1cHBvcnRlZCBmdW5jdGlvbnMKIAogc3RhdGljIGJv
b2wgc3VwcG9ydGVkKEZyYW1lKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKQEAgLTE0NTUsNiArMTQ2
Myw5IEBAIHN0YXRpYyBjb25zdCBDb21tYW5kTWFwJiBjcmVhdGVDb21tYW5kTWEKICAgICAgICAg
eyAiVW5zZWxlY3QiLCB7IGV4ZWN1dGVVbnNlbGVjdCwgc3VwcG9ydGVkLCBlbmFibGVkVmlzaWJs
ZVNlbGVjdGlvbiwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24sIGRvTm90
QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAogICAgICAgICB7ICJZYW5rIiwgeyBleGVj
dXRlWWFuaywgc3VwcG9ydGVkRnJvbU1lbnVPcktleUJpbmRpbmcsIGVuYWJsZWRJbkVkaXRhYmxl
VGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24sIGRvTm90QWxsb3dF
eGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAogICAgICAgICB7ICJZYW5rQW5kU2VsZWN0IiwgeyBl
eGVjdXRlWWFua0FuZFNlbGVjdCwgc3VwcG9ydGVkRnJvbU1lbnVPcktleUJpbmRpbmcsIGVuYWJs
ZWRJbkVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24s
IGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAorI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAgICAgeyAi
Q2FuY2VsT3BlcmF0aW9uIiwgeyBleGVjdXRlQ2FuY2VsT3BlcmF0aW9uLCBzdXBwb3J0ZWRGcm9t
TWVudU9yS2V5QmluZGluZywgZW5hYmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVl
TnVsbCwgbm90VGV4dEluc2VydGlvbiwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9
IH0sCisjZW5kaWYKICAgICB9OwogCiAgICAgLy8gVGhlc2UgdW5zdXBwb3J0ZWQgY29tbWFuZHMg
YXJlIGxpc3RlZCBoZXJlIHNpbmNlIHRoZXkgYXBwZWFyIGluIHRoZSBNaWNyb3NvZnQKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNiArMzA3LDEw
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGUKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KTsKICAgICAgICAgaWYgKHAxICE9IHAyKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24ocDEpOwor
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRp
dG9yKCktPnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyNlbmRpZgogICAgIH0KIH0KIApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2MCw2ICs0NjAsMTAgQEAgcHVi
bGljOgogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCiAgICAgdmlydHVhbCB2b2lkIGNoZWNrVGV4
dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiwgaW50LCB1aW50NjRfdCwgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4mKSB7IH07CiAjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgdmlydHVhbCB2b2lkIHNob3dD
b3JyZWN0aW9uUGFuZWwoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiwgRWRpdG9yKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoYm9vbCkgeyB9CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdp
dGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25z
dCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCkgeyB9
CkluZGV4OiBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0VkaXRvckNsaWVudC5oCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGFnZS9F
ZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBF
ZGl0b3JDbGllbnRfaAogCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgiCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJU
ZXh0QWZmaW5pdHkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTEsNiArNTIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFz
cyBFZGl0Q29tbWFuZDsKK2NsYXNzIEVkaXRvcjsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFt
ZTsKIGNsYXNzIEhUTUxFbGVtZW50OwpAQCAtMTc3LDYgKzE3OSwxMiBAQCBwdWJsaWM6CiAjaWYg
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMs
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKSA9IDA7CiAjZW5kaWYKKworI2lm
IFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBGbG9hdFJlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBFZGl0b3IqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQp
ID0gMDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBkZXRhaWwpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wg
c2hvdykgPSAwOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGFnZS9G
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDksOCArMTQ0OSwxMCBAQCB2b2lkIEZyYW1l
OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvCiAKICAgICAgICAgLy8gVGhpcyBvbmx5IGVy
YXNlcyBtYXJrZXJzIHRoYXQgYXJlIGluIHRoZSBmaXJzdCB1bml0ICh3b3JkIG9yIHNlbnRlbmNl
KSBvZiB0aGUgc2VsZWN0aW9uLgogICAgICAgICAvLyBQZXJoYXBzIHBlY3VsaWFyLCBidXQgaXQg
bWF0Y2hlcyBBcHBLaXQuCi0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5l
d0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICAgICAgaWYgKFJlZlB0cjxS
YW5nZT4gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpKSB7
CiAgICAgICAgICAgICBkb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMod29yZFJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICAgICAgZG9jdW1l
bnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoUmVmUHRyPFJhbmdl
PiBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgp
KQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKHNlbnRl
bmNlUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDY2
NTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcxLDcgKzI3MSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYpOwogCiAg
ICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoLCBi
b29sIHByaW50aW5nKTsKLSAgICAgICAgdm9pZCBkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRH
cmFtbWFyKGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoLCBib29sIGdyYW1tYXIpOworICAgICAg
ICBlbnVtIFRleHRDaGVja2luZ0xpbmVTdHlsZSB7CisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdT
cGVsbGluZ0xpbmVTdHlsZSwKKyAgICAgICAgICAgIFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5
bGUsCisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZQorICAgICAg
ICB9OworICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEludFBvaW50
JiwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpOwogCiAgICAgICAgIGJvb2wgcGFp
bnRpbmdEaXNhYmxlZCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFBhaW50aW5nRGlzYWJsZWQo
Ym9vbCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzU5LDcgKzc1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvclRleHQoY28KICNpbmNsdWRlICJEcmF3RXJyb3JVbmRlcmxpbmUuaCIKICNlbmRpZgogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihj
b25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBJbnRQb2ludCYgb3Jp
Z2luLCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC03NjcsMTIgKzc2NywxNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsCiAgICAgY2Fpcm9fdCog
Y3IgPSBtX2RhdGEtPmNyOwogICAgIGNhaXJvX3NhdmUoY3IpOwogCi0gICAgLy8gQ29udmVudGlv
biBpcyBncmVlbiBmb3IgZ3JhbW1hciwgcmVkIGZvciBzcGVsbGluZwotICAgIC8vIFRoZXNlIG5l
ZWQgdG8gYmVjb21lIGNvbmZpZ3VyYWJsZQotICAgIGlmIChncmFtbWFyKQotICAgICAgICBjYWly
b19zZXRfc291cmNlX3JnYihjciwgMCwgMSwgMCk7Ci0gICAgZWxzZQorICAgIHN3aXRjaCAoc3R5
bGUpIHsKKyAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgogICAgICAgICBj
YWlyb19zZXRfc291cmNlX3JnYihjciwgMSwgMCwgMCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9yZ2IoY3IsIDAsIDEsIDApOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBjYWlyb19yZXN0b3JlKGNyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogI2lmIFBMQVRG
T1JNKEdUSykKICAgICAvLyBXZSBpZ25vcmUgbW9zdCBvZiB0aGUgcHJvdmlkZWQgY29uc3RhbnRz
IGluIGZhdm91ciBvZiB0aGUgcGxhdGZvcm0gc3R5bGUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCShy
ZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhp
Y3NDb250ZXh0SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjbwogICAgIGRyYXdMaW5lKG9yaWdp
biwgZW5kUG9pbnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNz
cGVsbGluZ09yQmFkR3JhbW1hcihjb25zdCBJbnRQb2ludCYsIGludCB3aWR0aCwgYm9vbCBncmFt
bWFyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0
IEludFBvaW50JiwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNp
b24gNjY1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBzdGF0aWMgTlNDb2xv
ciogY3JlYXRlUGF0dGVybkNvbG9yKE5TU3RyCiB9CiAKIC8vIFdlYktpdCBvbiBNYWMgaXMgYSBz
dGFuZGFyZCBwbGF0Zm9ybSBjb21wb25lbnQsIHNvIGl0IG11c3QgdXNlIHRoZSBzdGFuZGFyZCBw
bGF0Zm9ybSBhcnR3b3JrIGZvciB1bmRlcmxpbmUuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihjb25zdCBJbnRQb2ludCYgcG9pbnQsIGlu
dCB3aWR0aCwgYm9vbCBncmFtbWFyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dENoZWNraW5nKGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IHdpZHRoLCBUZXh0Q2hlY2tp
bmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTI3LDIzICsxMjcsNDEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yTWlzc3BlbAogICAgIC8vIFRoZXNlIGFyZSB0aGUgc2FtZSBmb3IgbWlzc3BlbGxp
bmcgb3IgYmFkIGdyYW1tYXIuCiAgICAgaW50IHBhdHRlcm5IZWlnaHQgPSBjTWlzc3BlbGxpbmdM
aW5lVGhpY2tuZXNzOwogICAgIGludCBwYXR0ZXJuV2lkdGggPSBjTWlzc3BlbGxpbmdMaW5lUGF0
dGVybldpZHRoOwotIAorCiAgICAgYm9vbCB1c2luZ0RvdDsKICAgICBOU0NvbG9yICpwYXR0ZXJu
Q29sb3I7Ci0gICAgaWYgKGdyYW1tYXIpIHsKLSAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBncmFt
bWFyIHBhdHRlcm4gY29sb3IuCi0gICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yR3JhbW1h
ciA9IGZhbHNlOwotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxOU0NvbG9y
PiwgZ3JhbW1hclBhdHRlcm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihAIkdyYW1tYXJEb3Qi
LCBbTlNDb2xvciBncmVlbkNvbG9yXSwgdXNpbmdEb3RGb3JHcmFtbWFyKSkpOwotICAgICAgICAK
LSAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvckdyYW1tYXI7Ci0gICAgICAgIHBhdHRlcm5D
b2xvciA9IGdyYW1tYXJQYXR0ZXJuQ29sb3IuZ2V0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gQ29uc3RhbnRzIGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgotICAgICAgICBzdGF0aWMg
Ym9vbCB1c2luZ0RvdEZvclNwZWxsaW5nID0gZmFsc2U7Ci0gICAgICAgIERFRklORV9TVEFUSUNf
TE9DQUwoUmV0YWluUHRyPE5TQ29sb3I+LCBzcGVsbGluZ1BhdHRlcm5Db2xvciwgKGNyZWF0ZVBh
dHRlcm5Db2xvcihAIlNwZWxsaW5nRG90IiwgW05TQ29sb3IgcmVkQ29sb3JdLCB1c2luZ0RvdEZv
clNwZWxsaW5nKSkpOwotICAgICAgICAKLSAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvclNw
ZWxsaW5nOwotICAgICAgICBwYXR0ZXJuQ29sb3IgPSBzcGVsbGluZ1BhdHRlcm5Db2xvci5nZXQo
KTsKKyAgICBzd2l0Y2ggKHN0eWxlKSB7CisgICAgICAgIGNhc2UgVGV4dENoZWNraW5nU3BlbGxp
bmdMaW5lU3R5bGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3Bl
bGxpbmcgcGF0dGVybiBjb2xvci4KKyAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9y
U3BlbGxpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWlu
UHRyPE5TQ29sb3I+LCBzcGVsbGluZ1BhdHRlcm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihA
IlNwZWxsaW5nRG90IiwgW05TQ29sb3IgcmVkQ29sb3JdLCB1c2luZ0RvdEZvclNwZWxsaW5nKSkp
OworICAgICAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvclNwZWxsaW5nOworICAgICAgICAg
ICAgcGF0dGVybkNvbG9yID0gc3BlbGxpbmdQYXR0ZXJuQ29sb3IuZ2V0KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRleHRDaGVja2luZ0dyYW1tYXJMaW5l
U3R5bGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3IgZ3JhbW1hciBw
YXR0ZXJuIGNvbG9yLgorICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JHcmFtbWFy
ID0gZmFsc2U7CisgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxOU0Nv
bG9yPiwgZ3JhbW1hclBhdHRlcm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihAIkdyYW1tYXJE
b3QiLCBbTlNDb2xvciBncmVlbkNvbG9yXSwgdXNpbmdEb3RGb3JHcmFtbWFyKSkpOworICAgICAg
ICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvckdyYW1tYXI7CisgICAgICAgICAgICBwYXR0ZXJu
Q29sb3IgPSBncmFtbWFyUGF0dGVybkNvbG9yLmdldCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCisgICAgICAgIGNhc2UgVGV4dENoZWNraW5nUmVwbGFjZW1lbnRMaW5l
U3R5bGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcg
cGF0dGVybiBjb2xvci4KKyAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxp
bmcgPSBmYWxzZTsKKyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5T
Q29sb3I+LCBzcGVsbGluZ1BhdHRlcm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihAIkNvcnJl
Y3Rpb25Eb3QiLCBbTlNDb2xvciBibHVlQ29sb3JdLCB1c2luZ0RvdEZvclNwZWxsaW5nKSkpOwor
ICAgICAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvclNwZWxsaW5nOworICAgICAgICAgICAg
cGF0dGVybkNvbG9yID0gc3BlbGxpbmdQYXR0ZXJuQ29sb3IuZ2V0KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gTWFrZSBzdXJlIHRvIGRyYXcgb25seSBjb21wbGV0ZSBk
b3RzLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250
ZXh0T3BlblZHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0KGNvCiAgICAgVU5VU0VEX1BBUkFNKHByaW50aW5nKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3Qg
SW50UG9pbnQmIG9yaWdpbiwgaW50IHdpZHRoLCBib29sIGdyYW1tYXIpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgSW50UG9pbnQmIG9yaWdpbiwg
aW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWwKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGdyYW1tYXIpOworICAgIFVOVVNFRF9QQVJBTShzdHlsZSk7CiB9CiAK
IEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg0NSw3ICs4NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNv
CiAgICAgZHJhd0xpbmUob3JpZ2luLCBlbmRQb2ludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50Jiwg
aW50LCBib29sKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5n
KGNvbnN0IEludFBvaW50JiwgaW50LCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAko
cmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxNSw5ICs2MTUsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50CiAgICAgcGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5kcmF3UG9pbnRzKFNrQ2FudmFzOjprTGluZXNfUG9pbnRNb2RlLCAyLCBw
dHMsIHBhaW50KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3Bl
bGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQmIHB0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBn
cmFtbWFyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNv
bnN0IEludFBvaW50JiBwdCwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUp
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dENHV2luLmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMSAr
MTc2LDE0IEBAIHN0YXRpYyBjb25zdCBDb2xvciYgZ3JhbW1hclBhdHRlcm5Db2xvcigKICAgICBy
ZXR1cm4gZ3JhbW1hckNvbG9yOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCB3aWR0
aCwgYm9vbCBncmFtbWFyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENo
ZWNraW5nKGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5l
U3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgaWYgKHN0eWxlICE9IFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlICYm
IHN0eWxlICE9IFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGUpCisgICAgICAgIHJldHVybjsK
KwogICAgIC8vIFRoZXNlIGFyZSB0aGUgc2FtZSBmb3IgbWlzc3BlbGxpbmcgb3IgYmFkIGdyYW1t
YXIKICAgICBjb25zdCBpbnQgcGF0dGVybkhlaWdodCA9IDM7IC8vIDMgcm93cwogICAgIEFTU0VS
VChjTWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzID09IHBhdHRlcm5IZWlnaHQpOwpAQCAtMjAxLDcg
KzIwNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWwKICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFNh
dmVHU3RhdGUoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciYgcGF0dGVybkNvbG9yID0gZ3Jh
bW1hciA/IGdyYW1tYXJQYXR0ZXJuQ29sb3IoKSA6IHNwZWxsaW5nUGF0dGVybkNvbG9yKCk7Cisg
ICAgY29uc3QgQ29sb3ImIHBhdHRlcm5Db2xvciA9IHN0eWxlID09IFRleHRDaGVja2luZ0dyYW1t
YXJMaW5lU3R5bGUgPyBncmFtbWFyUGF0dGVybkNvbG9yKCkgOiBzcGVsbGluZ1BhdHRlcm5Db2xv
cigpOwogICAgIHNldENHU3Ryb2tlQ29sb3IoY29udGV4dCwgcGF0dGVybkNvbG9yKTsKIAogICAg
IHdrU2V0UGF0dGVyblBoYXNlSW5Vc2VyU3BhY2UoY29udGV4dCwgcG9pbnQpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRl
eHRXaW5jZS5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjIs
NyArMTA2Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY28KICAg
ICBzZXRTdHJva2VTdHlsZShvbGRTdHlsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50JiwgaW50IHdp
ZHRoLCBib29sIGdyYW1tYXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0
Q2hlY2tpbmcoY29uc3QgSW50UG9pbnQmLCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHls
ZSBzdHlsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9u
IDY2NTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRX
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NywxNCArMzU3LDE4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvclRleHQoY28KICAgICBtX2RhdGEtPmNvbnRleHQtPkRyYXdMaW5l
KG9yaWdpbi54KCksIG9yaWdpbi55KCksIGVuZFBvaW50LngoKSwgZW5kUG9pbnQueSgpKTsKIH0K
IAotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3Jh
bW1hcihjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBJbnRQb2lu
dCYgb3JpZ2luLCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKLSAg
ICBpZiAoZ3JhbW1hcikKLSAgICAgICAgbV9kYXRhLT5jb250ZXh0LT5TZXRQZW4od3hQZW4oKnd4
R1JFRU4sIDIsIHd4TE9OR19EQVNIKSk7Ci0gICAgZWxzZQorICAgIHN3aXRjaCAoc3R5bGUpIHsK
KyAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgogICAgICAgICBtX2RhdGEt
PmNvbnRleHQtPlNldFBlbih3eFBlbigqd3hSRUQsIDIsIHd4TE9OR19EQVNIKSk7Ci0gICAgCisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAg
ICAgICAgbV9kYXRhLT5jb250ZXh0LT5TZXRQZW4od3hQZW4oKnd4R1JFRU4sIDIsIHd4TE9OR19E
QVNIKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgbV9kYXRhLT5jb250ZXh0LT5EcmF3TGluZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgp
LCBvcmlnaW4ueCgpICsgd2lkdGgsIG9yaWdpbi55KCkpOwogfQogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDYgKzc2OCwyMyBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwCiAgICAgICAgIGNvbnRleHQt
PmNsZWFyU2hhZG93KCk7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCitzdGF0aWMgR3JhcGhpY3ND
b250ZXh0OjpUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgdGV4dENoZWNraW5nTGluZVN0eWxlRm9yTWFy
a2VyVHlwZShEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQoreworICAgIHN3
aXRjaCAobWFya2VyVHlwZSkgeworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVT
dHlsZTsKKyAgICBjYXNlIERvY3VtZW50TWFya2VyOjpHcmFtbWFyOgorICAgICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0OjpUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlOworICAgIGNhc2Ug
RG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50OgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0OjpUZXh0Q2hlY2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDo6VGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU7CisgICAgfQorfQorI2VuZGlmCisKIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0Nv
bnRleHQqIHB0LCBpbnQgdHgsIGludCB0eSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1tYXIpCiB7CiAg
ICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQpAQCAt
ODMxLDcgKzg0OCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW0K
ICAgICAgICAgLy8gSW4gbGFyZ2VyIGZvbnRzLCB0aG91Z2gsIHBsYWNlIHRoZSB1bmRlcmxpbmUg
dXAgbmVhciB0aGUgYmFzZWxpbmUgdG8gcHJldmVudCBhIGJpZyBnYXAuCiAgICAgICAgIHVuZGVy
bGluZU9mZnNldCA9IGJhc2VsaW5lICsgMjsKICAgICB9Ci0gICAgcHQtPmRyYXdMaW5lRm9yTWlz
c3BlbGxpbmdPckJhZEdyYW1tYXIoSW50UG9pbnQodHggKyBtX3ggKyBzdGFydCwgdHkgKyBtX3kg
KyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgZ3JhbW1hcik7CisgICAgcHQtPmRyYXdMaW5lRm9y
VGV4dENoZWNraW5nKEludFBvaW50KHR4ICsgbV94ICsgc3RhcnQsIHR5ICsgbV95ICsgdW5kZXJs
aW5lT2Zmc2V0KSwgd2lkdGgsIHRleHRDaGVja2luZ0xpbmVTdHlsZUZvck1hcmtlclR5cGUobWFy
a2VyLnR5cGUpKTsKIH0KIAogdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtl
cihHcmFwaGljc0NvbnRleHQqIHB0LCBpbnQgdHgsIGludCB0eSwgY29uc3QgRG9jdW1lbnRNYXJr
ZXImIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250KQpAQCAtODk4
LDEwICs5MTUsMTAgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2Vycwog
ICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjoKICAgICAgICAgICAgIGNh
c2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQ6CisgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpSZWpl
Y3RlZENvcnJlY3Rpb246CiAgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmQpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoOgogICAg
ICAgICAgICAgICAgIGlmICghYmFja2dyb3VuZCkKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CkBAIC05MzMsNiArOTUwLDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50
TWFya2VycwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQ6CiAgICAgICAgICAgICAgICAgY29tcHV0ZVJlY3RGb3JSZXBs
YWNlbWVudE1hcmtlcih0eCwgdHksIG1hcmtlciwgc3R5bGUsIGZvbnQpOworICAgICAgICAgICAg
ICAgIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIocHQsIHR4LCB0eSwgbWFya2VyLCBzdHls
ZSwgZm9udCwgZmFsc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uOgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDgtMzEgIEppYSBQdSAgPGpwdUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IHN1cHBvcnQgZm9yIGF1dG9jb3JyZWN0aW9uIFVJIG9uIE1hYyBPUyBYLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5NTgKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzcyOTk2MjE+CisKKyAgICAgICAgU2VlIGRldGFpbGVkIGhpZ2ggbGV2ZWwgZGVz
Y3JpcHRpb24gaW4gV2ViQ29yZS9DaGFuZ2VMb2cuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVk
aXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6IER1bW15IGltcGxlbWVudGF0aW9uLgor
ICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwp
OiBEaXR0bworCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaDogQWRkZWQgbmV3IG1ldGhvZHMgZGVjbGFyZWQgaW4gYmFzZSBjbGFzcy4KKwogMjAx
MC0wOC0zMSAgSm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRAYXBwbGUuY29tPgogCiAgICAgICAg
IEZpeCBzb21lIGNvcHkvcGFzdGUgZXJyb3JzLgpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDY2
NTY3KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2OSw0ICs0NjksMTYgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnNldElucHV0TWV0aG9kU3RhdAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKKyNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQordm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBXZWJDb3JlOjpFZGl0
b3IqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEy
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi1wcml2YXRlOiAgICAKK3ByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBz
aG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpSYW5nZSopOwogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRTaG93RGVsZXRlSW50ZXJmYWNlKFdlYkNvcmU6OkhUTUxFbGVtZW50Kik7Ci0gICAgdmlydHVh
bCBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOyAKKyAgICB2aXJ0dWFsIGJvb2wgc21h
cnRJbnNlcnREZWxldGVFbmFibGVkKCk7CiAgICAgdmlydHVhbCBib29sIGlzU2VsZWN0VHJhaWxp
bmdXaGl0ZXNwYWNlRW5hYmxlZCgpOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpOwogICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVDb250aW51b3VzU3Bl
bGxDaGVja2luZygpOwpAQCAtMTMxLDcgKzEzMSwxMCBAQCBwcml2YXRlOiAgICAKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgV1RGOjpTdHJpbmcmLCBWZWN0b3I8V1RG
OjpTdHJpbmc+JiBndWVzc2VzKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNldElucHV0TWV0aG9k
U3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJs
ZWQpOwotCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAg
ICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIFdlYkNvcmU6
OkVkaXRvciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wg
Y29ycmVjdGlvbkFjY2VwdGVkKTsKKyNlbmRpZgogICAgIFdlYlBhZ2UqIG1fcGFnZTsKIH07CiAK
SW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDgtMzEgIEppYSBQdSAgPGpwdUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IHN1cHBvcnQgZm9yIGF1dG9jb3JyZWN0aW9uIFVJIG9uIE1hYyBPUyBYLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5NTgKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzcyOTk2MjE+CisKKyAgICAgICAgU2VlIGRldGFpbGVkIGhpZ2ggbGV2ZWwgZGVz
Y3JpcHRpb24gaW4gV2ViQ29yZS9DaGFuZ2VMb2cuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaDogQWRkZWQgbmV3IG1lbWJlciBtZXRob2RzIGRlY2xhcmVkIGlu
CisgICAgICAgICAgRWRpdG9yQ2xpZW50LiBBZGRlZCBtX2NvcnJlY3Rpb25QYW5lbFRhZyB0byBz
dG9yZSB0aGUgSUQgb2YgY3VycmVudCBhdXRvY29ycmVjdGlvbiBVSSBvYmplY3QuCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0
b3JDbGllbnQ6OldlYkVkaXRvckNsaWVudCk6IEluaXRpYWxpemUgbV9jb3JyZWN0aW9uUGFuZWxU
YWcuCisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6On5XZWJFZGl0b3JDbGllbnQpOiBNYWtlIHN1
cmUgdGhlIGF1dG9jb3JyZWN0aW9uIFVJIGlzCisgICAgICAgICAgZGlzbWlzc2VkIGJlZm9yZSBk
ZXN0cm95aW5nIHRoZSBvYmplY3QuCisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24pOiBEaXNtaXNzIGF1dG9jb3JyZWN0aW9uIFVJIHdoZW5ldmVyIHRo
ZSBzZWxlY3Rpb24gY2hhbmdlcy4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJl
Y3Rpb25QYW5lbCk6IFNob3cgYXV0b2NvcnJlY3Rpb24gVUkuCisgICAgICAgIChXZWJFZGl0b3JD
bGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOiBEaXNtaXNzIGF1dG9jb3JyZWN0aW9uIFVJ
LgorCiAyMDEwLTA4LTMxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9FZGl0b3JDbGllbnQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
ICNpbXBvcnQgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0zOCw3ICszOSw3IEBACiBjbGFzcyBXZWJFZGl0
b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6RWRpdG9yQ2xpZW50IHsKIHB1YmxpYzoKICAgICBX
ZWJFZGl0b3JDbGllbnQoV2ViVmlldyAqKTsKLSAgICAKKyAgICB2aXJ0dWFsIH5XZWJFZGl0b3JD
bGllbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwogCiAgICAgdmlydHVh
bCBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwpAQCAtMTI5LDEyICsxMzAsMTkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0
cmluZyYsIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3Nlcyk7CiAgICAgdmlydHVhbCB2
b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0
TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQorICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25z
dCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZywgV2ViQ29yZTo6RWRpdG9yKik7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQpOworI2VuZGlmCiBwcml2YXRl
OgogICAgIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yVW5kb09yUmVkbyhQYXNzUmVmUHRyPFdlYkNv
cmU6OkVkaXRDb21tYW5kPiwgYm9vbCBpc1JlZG8pOwogICAgIFdlYkVkaXRvckNsaWVudCgpOwot
ICAgIAorCiAgICAgV2ViVmlldyAqbV93ZWJWaWV3OwogICAgIFJldGFpblB0cjxXZWJFZGl0b3JV
bmRvVGFyZ2V0PiBtX3VuZG9UYXJnZXQ7Ci0gICAgCiAgICAgYm9vbCBtX2hhdmVVbmRvUmVkb09w
ZXJhdGlvbnM7CisKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQorICAgIE5TSW50ZWdlciBtX2NvcnJlY3Rpb25QYW5lbFRhZzsKKyNlbmRpZgogfTsKSW5kZXg6
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lv
biA2NjU2NykKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw5IEBACiAjaW1wb3J0IDxydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuaD4KICNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW1wb3J0IDx3
dGYvVGhyZWFkaW5nLmg+CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRDaGVja2VyLmg+CisjZW5kaWYKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtMTcxLDcgKzE3NCwx
NyBAQCBXZWJFZGl0b3JDbGllbnQ6OldlYkVkaXRvckNsaWVudChXZWJWaWV3CiAgICAgOiBtX3dl
YlZpZXcod2ViVmlldykKICAgICAsIG1fdW5kb1RhcmdldChbW1tXZWJFZGl0b3JVbmRvVGFyZ2V0
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV0pCiAgICAgLCBtX2hhdmVVbmRvUmVkb09wZXJhdGlv
bnMoZmFsc2UpCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
KyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGFnKC0xKQorI2VuZGlmCit7Cit9CisKK1dlYkVkaXRv
ckNsaWVudDo6fldlYkVkaXRvckNsaWVudCgpCiB7CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05f
VElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOwor
I2VuZGlmCiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpCkBAIC0yODYsNiArMjk5LDEwIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpy
ZXNwb25kVG9DaGFuZ2VkU2UKIHsKICAgICBbbV93ZWJWaWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsK
IAorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKKyNlbmRpZgorCiAgICAgLy8gRklYTUU6IFRoaXMg
cXVpcmsgaXMgbmVlZGVkIGR1ZSB0byA8cmRhcjovL3Byb2JsZW0vNTAwOTYyNT4gLSBXZSBjYW4g
cGhhc2UgaXQgb3V0IG9uY2UgQXBlcnR1cmUgY2FuIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igb24g
dGhlaXIgZW5kCiAgICAgaWYgKCFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZF
UlNJT05fV0lUSE9VVF9BUEVSVFVSRV9RVUlSSykgJiYgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
YnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLkFwZXJ0dXJlIl0p
CiAgICAgICAgIHJldHVybjsKQEAgLTc5MCw2ICs4MDcsMzUgQEAgdm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaQogI2VuZGlmCiB9CiAKKyNpZiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3Jy
ZWN0aW9uUGFuZWwoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRT
dHJpbmcsIEVkaXRvciogZWRpdG9yKSB7CisgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVl
KTsKKworICAgIE5TUmVjdCBib3VuZGluZ0JveEFzTlNSZWN0ID0gYm91bmRpbmdCb3hPZlJlcGxh
Y2VkU3RyaW5nOworICAgIE5TUmVjdCB3ZWJWaWV3RnJhbWUgPSBtX3dlYlZpZXcuZnJhbWU7Cisg
ICAgYm91bmRpbmdCb3hBc05TUmVjdC5vcmlnaW4ueSA9IHdlYlZpZXdGcmFtZS5zaXplLmhlaWdo
dC1OU01heFkoYm91bmRpbmdCb3hBc05TUmVjdCk7CisKKyAgICAvLyBOZWVkIHRvIGV4cGxpY2l0
bHkgdXNlIHRoZXNlIGxvY2FsIE5TU3RyaW5nIG9iamVjdHMsIGJlY2F1c2UgdGhlIEMrKyByZWZl
cmVuY2VzIG1heSBiZSBpbnZhbGlkYXRlZCBieSB0aGUgdGltZSB0aGUgYmxvY2sgYmVsb3cgaXMg
ZXhlY3V0ZWQuCisgICAgTlNTdHJpbmcgKnJlcGxhY2VkU3RyaW5nQXNOU1N0cmluZyA9IHJlcGxh
Y2VkU3RyaW5nOworICAgIE5TU3RyaW5nICpyZXBsYWNlbWVudFN0cmluZ0FzTlNTdHJpbmcgPSBy
ZXBsYWNlbWVudFN0cmluZzsKKworICAgIG1fY29ycmVjdGlvblBhbmVsVGFnID0gW1tOU1NwZWxs
Q2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHNob3dDb3JyZWN0aW9uOnJlcGxhY2VtZW50U3Ry
aW5nQXNOU1N0cmluZyBmb3JTdHJpbmdJblJlY3Q6Ym91bmRpbmdCb3hBc05TUmVjdCB2aWV3Om1f
d2ViVmlldyBjb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wgYWNjZXB0ZWQpIHsKKyAgICAgICAgaWYg
KCFhY2NlcHRlZCkgeworICAgICAgICAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmVqZWN0ZWQgdG9Db3Jy
ZWN0aW9uOnJlcGxhY2VtZW50U3RyaW5nQXNOU1N0cmluZyBmb3JXb3JkOnJlcGxhY2VkU3RyaW5n
QXNOU1N0cmluZyBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpbbV93ZWJWaWV3
IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnXV07CisgICAgICAgICAgICBlZGl0b3ItPmhhbmRsZVJl
amVjdGVkQ29ycmVjdGlvbigpOworICAgICAgICB9CisgICAgfV07Cit9CisKK3ZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVk
KQoreworICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbFRhZyA+PSAwKSB7CisgICAgICAgIFtbTlNT
cGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBkaXNtaXNzQ29ycmVjdGlvbjptX2NvcnJl
Y3Rpb25QYW5lbFRhZyBhY2NlcHRDb3JyZWN0aW9uOmNvcnJlY3Rpb25BY2NlcHRlZF07CisgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsVGFnID0gLTE7CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0
IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7CiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRT
cGVsbENoZWNrZXJdIHVwZGF0ZVNwZWxsaW5nUGFuZWxXaXRoTWlzc3BlbGxlZFdvcmQ6bWlzc3Bl
bGxlZFdvcmRdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66171</attachid>
            <date>2010-08-31 23:18:12 -0700</date>
            <delta_ts>2010-09-01 11:56:05 -0700</delta_ts>
            <desc>Proposed patch (v6)</desc>
            <filename>WebKitAutoCorrection.patch</filename>
            <type>text/plain</type>
            <size>56870</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAxIEBACisyMDEwLTA4LTMxICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBhdXRvY29ycmVjdGlvbiBVSSBvbiBNYWMgT1MgWC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTU4CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83Mjk5NjIxPgorCisgICAgICAgIFNldmVyYWwgbmV3IG1lbWJlciBtZXRob2RzIGFyZSBhZGRl
ZCB0byBFZGl0b3JDbGllbnQgZm9yIGNvbW11bmljYXRpb24KKyAgICAgICAgYmV0d2VlbiBXZWJD
b3JlIGFuZCBXZWJLaXQuIEEgbmV3IGhhbmRsZXIsIGV4ZWN1dGVDYW5jZWxPcGVyYXRpb24oKSwg
aXMKKyAgICAgICAgYWRkZWQgdG8gRWRpdG9yQ29tbWFuZC5jcHAgc28gdGhhdCBXZWJDb3JlIGNh
biBpbnRlcmNlcHQgdGhlIEVTQyBrZXkgZXZlbnQKKyAgICAgICAgdG8gZGlzbWlzcyBhdXRvY29y
cmVjdGlvbiBVSS4gQSBuZXcgRG9jdW1lbnRNYXJrZXIgdmFsdWUsIFJlamVjdGVkQ29ycmVjdGlv
biwKKyAgICAgICAgaXMgYWRkZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY29ycmVjdGlvbnMgdGhh
dCB1c2VyIGhhcyByZWplY3RlZCwgc28gdGhhdCBpdAorICAgICAgICB3aWxsIG5vdCBiZSBzdWdn
ZXN0ZWQgYWdhaW4gbGF0ZXIuIFRoZSBhdXRvY29ycmVjdGlvbiBpcyBkcml2ZW4gYnkgYSB0aW1l
ci4KKyAgICAgICAgRXZlcnkgdGltZSB0aGUgZWRpdG9yIGluc2VydHMgYSBuZXcgbGV0dGVyLCB0
aGUgdGltZXIgaXMgcmVzZXQuIElmIHRoZSB0aW1lcgorICAgICAgICBmaXJlcywgaXQgbWVhbnMg
bmVpdGhlciBoYXMgdXNlciBlbnRlcmVkIGFueSBuZXcgbGV0dGVyIGZvciBjdXJyZW50IHdvcmQs
IG5vcgorICAgICAgICBoYXMgaGUgZW50ZXJlZCB3aGl0ZXNwYWNlIG9yIHB1bmN0dWF0aW9uIHRv
IGNvbXBsZXRlIHRoZSB3b3JkLiBJbiB0aGlzIGNhc2UsCisgICAgICAgIHdlIHF1ZXJ5IGZvciBh
dXRvY29ycmVjdGlvbi4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBVcGRhdGVkCisKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXIuaDogQWRkZWQgUmVqZWN0ZWRDb3JyZWN0aW9uIHRv
IGluZGljYXRlIHdvcmQgb24gd2hpY2ggdXNlcgorICAgICAgICAgIGhhcyByZWplY3RlZCBhdXRv
Y29ycmVjdGlvbi4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6RWRpdG9yKTogSW5pdGlhbGl6ZSBhdXRvY29ycmVjdGlvbiB0aW1lci4K
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6fkVkaXRvcik6IE1ha2Ugc3VyZSBhdXRvY29ycmVj
dGlvbiBVSSBpcyBkaXNtaXNzZWQgYmVmb3JlCisgICAgICAgICAgZGVzdHJveWluZyBFZGl0b3Ig
b2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmdUb1Bvc2l0aW9uKTogQWRvcHRlZCBuZXcgc2lnbmF0dXJlCisgICAgICAgICAgb2YgbWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcygpLgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKTogQ29u
c29saWRhdGVkIGFsbAorICAgICAgICAgIGJvb2xlYW4gYXJndW1lbnRzIGludG8gb25lIGJpdGZp
ZWxkLiBUaGlzIGltcHJvdmVzIHJlYWRhYmlsaXR5IGFuZCBhbGxvd3MgdXMgdG8KKyAgICAgICAg
ICBwYXNzIGluIGEgYml0IHRvIGluZGljYXRlIHdoZXRoZXIgd2Ugd2FudCB0byBzaG93IGF1dG9j
b3JyZWN0aW9uIFVJLiBBbHNvIGFkZGVkCisgICAgICAgICAgY29kZSB0byBzaG93IGF1dG9jb3Jy
ZWN0aW9uIFVJIGlmIGl0IGlzIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIpOiBBZG9wdGVkIG5ldyBzaWduYXR1cmUgb2YK
KyAgICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKCkuCisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpOiBDaGVj
ayB0byBzZWUgaWYgd2Ugc2hvdWxkIHNob3cKKyAgICAgICAgICBhdXRvY29ycmVjdGlvbiBVSSB3
aGVuIHVzZXIgcGF1c2VzIGR1cmluZyB0eXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbik6IFVwZGF0ZSB1c2VyIGRpY3Rpb25hcnkgd2hlbiBh
biBhdXRvY29ycmVjdGlvbiBpcyByZWplY3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcik6IFN0YXJ0IGF1dG9jb3JyZWN0aW9uIHRpbWVyLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOiBEaXNtaXNz
IGF1dG9jb3JyZWN0aW9uIFVJIHdoZW4gRVNDIGtleSBpcyBwcmVzc2VkLgorCisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuaDogQWRkZWQgYXV0b2NvcnJlY3Rpb24gcmVsYXRlZCBtZW1iZXIgbWV0
aG9kcyBhbmQgdmFyaWFibGVzLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVDYW5jZWxPcGVyYXRpb24pOiBIYW5kbGUgRVND
IGtleSBldmVudC4gRGlzbWlzcyBhdXRvY29ycmVjdGlvbiBVSS4KKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUNvbW1hbmRNYXApOiBVcGRhdGVkIGZvciBleGVjdXRlQ2FuY2VsT3BlcmF0aW9uKCku
CisKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKTogUmVzZXQgYXV0
b2NvcnJlY3Rpb24gdGltZXIgYWZ0ZXIgaW5zZXJ0aW9uLgorCisgICAgICAgICogbG9hZGVyL0Vt
cHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNob3dD
b3JyZWN0aW9uUGFuZWwpOiBEdW1teSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkVtcHR5RWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKTogRGl0dG8KKworICAg
ICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6IEFkZGVkIG1ldGhvZHMgZm9yIGNvbW11bmljYXRp
b24gYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgcmVnYXJkaW5nIGF1dG9jb3JyZWN0aW9uLgor
CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6IFJlbW92ZSBSZXBsYWNlbWVudCBtYXJrZXIgd2hlcmUg
d2UgdXNlZCB0byBvbmx5IHJlbW92ZSBTcGVsbGluZworICAgICAgICAgIG1hcmssIGJlY2F1c2Ug
d2hlbmV2ZXIgd2UgbmVlZCB0byByZW1vdmUgc3BlbGxpbmcgdW5kZXJsaW5lIHdlIGFsc28gc2hv
dWxkIHJlbW92ZSBhdXRvY29ycmVjdGlvbiB1bmRlcmxpbmUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDogQWRkZWQgZW51bSBUZXh0Q2hlY2tpbmdMaW5l
U3R5bGUgdG8gc3BlY2lmeSB0aGUgdW5kZXJsaW5lCisgICAgICAgICAgZm9yIGRpZmZlcmVudCB0
eXBlIG9mIHRleHQgY2hlY2tpbmcgcmVzdWx0LiBSZXBsYWNlZCBkcmF3TGluZUZvck1pc3NwZWxs
aW5nT3JCYWRHcmFtbWFyKCkgd2l0aAorICAgICAgICAgIGRyYXdMaW5lRm9yVGV4dENoZWNraW5n
KCksIHdoaWNoIGFsbG93cyBhdXRvY29ycmVjdGlvbiB0byBoYXZlIGRpZmZlcmVudCBpbmRpY2F0
aW9uIGZyb20gbWlzc3BlbGxpbmcKKyAgICAgICAgICBhbmQgZ3JhbW1hdGljYWwgZXJyb3IuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENo
ZWNraW5nKTogUmVwbGFjZWQgZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcigpIHdp
dGggZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0bworCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0
bworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9w
ZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dENoZWNraW5nKTogRGl0dG8KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0bworCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0bworCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBE
aXR0bworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0
V2luY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHRDaGVja2luZyk6IERpdHRvCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9H
cmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKTogRGl0dG8KKworICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRleHRDaGVja2luZ0xpbmVTdHls
ZUZvck1hcmtlclR5cGUpOiBSZXR1cm4gbGluZSBzdHlsZSBmb3IgYSBnaXZlbiBkb2N1bWVudCBt
YXJrZXIgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U3BlbGxp
bmdPckdyYW1tYXJNYXJrZXIpOiAgUmVwbGFjZWQgZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFk
R3JhbW1hcigpIHdpdGggZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoKS4KKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKTogSGFuZGxlIG5ldyBtYXJr
ZXIgdmFsdWUsIFJlamVjdGVkQ29ycmVjdGlvbi4KKwogMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5n
LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTYyMSw2ICs2MjEsNyBAQCBfX1pON1dlYkNvcmU2RWRpdG9yMjFh
cHBseVN0eWxlVG9TZWxlY3RpCiBfX1pON1dlYkNvcmU2RWRpdG9yMjFpc1NlbGVjdGlvbk1pc3Nw
ZWxsZWRFdgogX19aTjdXZWJDb3JlNkVkaXRvcjIzc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb25FTlNf
MTZXcml0aW5nRGlyZWN0aW9uRQogX19aTjdXZWJDb3JlNkVkaXRvcjI0YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nRWIKK19fWk43V2ViQ29yZTZFZGl0b3IyNGhhbmRsZVJlamVjdGVkQ29ycmVjdGlv
bkV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjRpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWxFdgogX19a
TjdXZWJDb3JlNkVkaXRvcjI2ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJD
b3JlNkVkaXRvcjI2aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgpJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudE1h
cmtlci5oCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDggQEAgc3RydWN0IERvY3VtZW50TWFya2VyIHsK
ICAgICAgICAgU3BlbGxpbmcsCiAgICAgICAgIEdyYW1tYXIsCiAgICAgICAgIFRleHRNYXRjaCwK
LSAgICAgICAgUmVwbGFjZW1lbnQKKyAgICAgICAgUmVwbGFjZW1lbnQsCisgICAgICAgIFJlamVj
dGVkQ29ycmVjdGlvbgogICAgIH07CiAKICAgICBNYXJrZXJUeXBlIHR5cGU7CkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA1MywxMSArMTA1MywxNiBAQCBFZGl0b3I6OkVkaXRvcihGcmFt
ZSogZnJhbWUpCiAgICAgLy8gVGhpcyBpcyBvZmYgYnkgZGVmYXVsdCwgc2luY2UgbW9zdCBlZGl0
b3JzIHdhbnQgdGhpcyBiZWhhdmlvciAodGhpcyBtYXRjaGVzIElFIGJ1dCBub3QgRkYpLgogICAg
ICwgbV9zaG91bGRTdHlsZVdpdGhDU1MoZmFsc2UpCiAgICAgLCBtX2tpbGxSaW5nKGFkb3B0UHRy
KG5ldyBLaWxsUmluZykpCi17IAorICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAm
RWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKQorewogfQogCiBFZGl0b3I6On5FZGl0
b3IoKQogeworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOworI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yOjpjbGVh
cigpCkBAIC0yMzUxLDIyICsyMzU2LDI5IEBAIGJvb2wgRWRpdG9yOjpzcGVsbGluZ1BhbmVsSXNT
aG93aW5nKCkKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1Bvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCkKIHsKICNpZiBQTEFURk9STShNQUMpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KQotICAgIGJvb2wgbWFya1NwZWxsaW5nID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoKTsKLSAgICBib29sIG1hcmtHcmFtbWFyID0gbWFya1NwZWxsaW5nICYmIGlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCgpOwotICAgIGJvb2wgcGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50
cyA9IGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNBdXRv
bWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAobWFya1NwZWxsaW5nICYm
IGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKTsKLSAgICBpZiAoIW1hcmtT
cGVsbGluZyAmJiAhcGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cykKKyAgICBpbnQgdGV4
dENoZWNraW5nT3B0aW9ucyA9IDA7CisgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCkpCisgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMgfD0gTWFya1NwZWxsaW5nOwor
CisgICAgaWYgKGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAg
fHwgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCisgICAgICAgIHx8IGlzQXV0b21h
dGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICB8fCBpc0F1dG9tYXRpY1RleHRS
ZXBsYWNlbWVudEVuYWJsZWQoKQorICAgICAgICB8fCAoKHRleHRDaGVja2luZ09wdGlvbnMgJiBN
YXJrU3BlbGxpbmcpICYmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKSkK
KyAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBQZXJmb3JtUmVwbGFjZW1lbnQ7CisKKyAg
ICBpZiAoIXRleHRDaGVja2luZ09wdGlvbnMgJiAoTWFya1NwZWxsaW5nIHwgUGVyZm9ybVJlcGxh
Y2VtZW50KSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgaWYgKGlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpKQorICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IE1hcmtHcmFtbWFy
OworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlv
bihzdGFydE9mV29yZChwLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChwLCBSaWdo
dFdvcmRJZk9uQm91bmRhcnkpKTsKLSAgICBpZiAobWFya0dyYW1tYXIpIHsKKyAgICBpZiAodGV4
dENoZWNraW5nT3B0aW9ucyAmIE1hcmtHcmFtbWFyKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0ZWRTZW50ZW5jZSA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKHAp
LCBlbmRPZlNlbnRlbmNlKHApKTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXJJblJhbmdlcyh0cnVlLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIHRydWUsIHNlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgcGVy
Zm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cyk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBzZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXMobWFya1NwZWxsaW5nLCBhZGphY2VudFdvcmRzLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIGZhbHNlLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCksIHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpOworICAgICAgICBt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlv
bnMsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKICAgICB9CiAjZWxzZQogICAgIGlmICghaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKQEAgLTI1MTAsMTMgKzI1MjIsMTggQEAg
c3RhdGljIGlubGluZSBib29sIGlzQW1iaWd1b3VzQm91bmRhcnlDaAogICAgIHJldHVybiBjaGFy
YWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8
IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsKIH0KIAotdm9pZCBFZGl0
b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoYm9vbCBtYXJrU3Bl
bGxpbmcsIFJhbmdlKiBzcGVsbGluZ1JhbmdlLCBib29sIG1hcmtHcmFtbWFyLCBSYW5nZSogZ3Jh
bW1hclJhbmdlLCBib29sIHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpCit2b2lkIEVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhpbnQgdGV4dENo
ZWNraW5nT3B0aW9ucywgUmFuZ2UqIHNwZWxsaW5nUmFuZ2UsIFJhbmdlKiBncmFtbWFyUmFuZ2Up
CiB7CisgICAgYm9vbCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYg
TWFya1NwZWxsaW5nOworICAgIGJvb2wgc2hvdWxkTWFya0dyYW1tYXIgPSB0ZXh0Q2hlY2tpbmdP
cHRpb25zICYgTWFya0dyYW1tYXI7CisgICAgYm9vbCBzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQg
PSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYgUGVyZm9ybVJlcGxhY2VtZW50OworICAgIGJvb2wgc2hv
dWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBTaG93Q29ycmVj
dGlvblBhbmVsOworCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzZWxlY3Rp
b25zIGFscmVhZHkgZXhwYW5kZWQgdG8gd29yZCBib3VuZGFyaWVzLgogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGlmICghY2xpZW50KCkgfHwgIXNwZWxsaW5nUmFuZ2UgfHwgKG1hcmtH
cmFtbWFyICYmICFncmFtbWFyUmFuZ2UpKQorICAgIGlmICghY2xpZW50KCkgfHwgIXNwZWxsaW5n
UmFuZ2UgfHwgKHNob3VsZE1hcmtHcmFtbWFyICYmICFncmFtbWFyUmFuZ2UpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgCisKICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUgbm9kZSwg
YmFpbC4KICAgICBOb2RlKiBlZGl0YWJsZU5vZGUgPSBzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRh
aW5lcigpOwogICAgIGlmICghZWRpdGFibGVOb2RlIHx8ICFlZGl0YWJsZU5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCkpCkBAIC0yNTM5LDggKzI1NTYsOCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhC
b3VuZGFyaWVzID0gZmFsc2U7CiAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZzsKICAgICBSZWZQ
dHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlOwotICAgIAotICAgIGlmIChtYXJrR3JhbW1hcikgewor
CisgICAgaWYgKHNob3VsZE1hcmtHcmFtbWFyKSB7CiAgICAgICAgIC8vIFRoZSBzcGVsbGluZyBy
YW5nZSBzaG91bGQgYmUgY29udGFpbmVkIGluIHRoZSBwYXJhZ3JhcGgtYWxpZ25lZCBleHRlbnNp
b24gb2YgdGhlIGdyYW1tYXIgcmFuZ2UuCiAgICAgICAgIHBhcmFncmFwaFJhbmdlID0gcGFyYWdy
YXBoQWxpZ25lZFJhbmdlRm9yUmFuZ2UoZ3JhbW1hclJhbmdlLCBncmFtbWFyUmFuZ2VTdGFydE9m
ZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBvZmZzZXRBc1Jh
bmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5k
b2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBzcGVsbGluZ1Jhbmdl
LT5zdGFydFBvc2l0aW9uKCkpOwpAQCAtMjU1MSwxMCArMjU2OCwxMCBAQCB2b2lkIEVkaXRvcjo6
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgfQogICAgIHNwZWxsaW5nUmFuZ2VFbmRP
ZmZzZXQgPSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHNwZWxsaW5nUmFuZ2UpOwogICAgIHBhcmFncmFwaExlbmd0aCA9IHBhcmFncmFwaFN0cmlu
Zy5sZW5ndGgoKTsKLSAgICBpZiAocGFyYWdyYXBoTGVuZ3RoIDw9IDAgfHwgKHNwZWxsaW5nUmFu
Z2VTdGFydE9mZnNldCA+PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmICghbWFya0dyYW1tYXIg
fHwgZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQgPj0gZ3JhbW1hclJhbmdlRW5kT2Zmc2V0KSkpCisg
ICAgaWYgKHBhcmFncmFwaExlbmd0aCA8PSAwIHx8IChzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQg
Pj0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiAoIXNob3VsZE1hcmtHcmFtbWFyIHx8IGdyYW1t
YXJSYW5nZVN0YXJ0T2Zmc2V0ID49IGdyYW1tYXJSYW5nZUVuZE9mZnNldCkpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgaWYgKHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpIHsK
KworICAgIGlmIChzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQpIHsKICAgICAgICAgaWYgKG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Q2Fy
ZXRTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gc2F2ZSB0aGUgY2FyZXQg
cG9zaXRpb24gc28gd2UgY2FuIHJlc3RvcmUgaXQgbGF0ZXIgaWYgbmVlZGVkCiAgICAgICAgICAg
ICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJh
bmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwpAQCAtMjU3MCwx
NCArMjU4NywxNiBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMgPSAwOwot
ICAgIGlmIChtYXJrU3BlbGxpbmcpCisgICAgaWYgKHNob3VsZE1hcmtTcGVsbGluZykKICAgICAg
ICAgY2hlY2tpbmdUeXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgaWYgKG1h
cmtHcmFtbWFyKQorICAgIGlmIChzaG91bGRNYXJrR3JhbW1hcikKICAgICAgICAgY2hlY2tpbmdU
eXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKLSAgICBpZiAocGVyZm9ybVRleHRDaGVj
a2luZ1JlcGxhY2VtZW50cykgeworICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKQor
ICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uOworICAg
IGlmIChzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQpIHsKICAgICAgICAgaWYgKGlzQXV0b21hdGlj
TGlua0RldGVjdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4
dENoZWNraW5nVHlwZUxpbms7CiAgICAgICAgIGlmIChpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0
aW9uRW5hYmxlZCgpKQpAQCAtMjU4NiwyMCArMjYwNSwyNiBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRD
aGVja2luZ1R5cGVEYXNoOwogICAgICAgICBpZiAoaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRF
bmFibGVkKCkpCiAgICAgICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRDaGVja2luZ1R5cGVS
ZXBsYWNlbWVudDsKLSAgICAgICAgaWYgKG1hcmtTcGVsbGluZyAmJiBpc0F1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgaWYgKHNob3VsZE1hcmtTcGVsbGluZyAm
JiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIGNo
ZWNraW5nVHlwZXMgfD0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247CiAgICAgfQogICAgIGNs
aWVudCgpLT5jaGVja1RleHRPZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygp
LCBwYXJhZ3JhcGhMZW5ndGgsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwotICAgIAorCisjaWYg
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQorICAgIC8vIElmIHRoaXMgY2hlY2tpbmcgaXMgb25seSBmb3Igc2hvd2luZyBjb3JyZWN0aW9u
IHBhbmVsLCB3ZSBzaG91bGRuJ3QgYm90aGVyIHRvIG1hcmsgbWlzc3BlbGxpbmdzLgorICAgIGlm
IChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKQorICAgICAgICBzaG91bGRNYXJrU3BlbGxpbmcg
PSBmYWxzZTsKKyNlbmRpZgorCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMu
c2l6ZSgpOyBpKyspIHsKICAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQg
PSAmcmVzdWx0c1tpXTsKICAgICAgICAgaW50IHJlc3VsdExvY2F0aW9uID0gcmVzdWx0LT5sb2Nh
dGlvbiArIG9mZnNldER1ZVRvUmVwbGFjZW1lbnQ7CiAgICAgICAgIGludCByZXN1bHRMZW5ndGgg
PSByZXN1bHQtPmxlbmd0aDsKLSAgICAgICAgaWYgKG1hcmtTcGVsbGluZyAmJiByZXN1bHQtPnR5
cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdExvY2F0aW9uID49IHNwZWxs
aW5nUmFuZ2VTdGFydE9mZnNldCAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA8PSBz
cGVsbGluZ1JhbmdlRW5kT2Zmc2V0KSB7CisgICAgICAgIGlmIChzaG91bGRNYXJrU3BlbGxpbmcg
JiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiByZXN1bHRMb2Nh
dGlvbiA+PSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1
bHRMZW5ndGggPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCkgewogICAgICAgICAgICAgQVNTRVJU
KHJlc3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICBS
ZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHNw
ZWxsaW5nUmFuZ2UsIHJlc3VsdExvY2F0aW9uIC0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0LCBy
ZXN1bHRMZW5ndGgpOwogICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWlu
ZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNzcGVsbGluZ1Jhbmdl
LmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICB9IGVsc2UgaWYgKG1h
cmtHcmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBy
ZXN1bHRMb2NhdGlvbiA8IGdyYW1tYXJSYW5nZUVuZE9mZnNldCAmJiByZXN1bHRMb2NhdGlvbiAr
IHJlc3VsdExlbmd0aCA+IGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0KSB7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkTWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5
cGVHcmFtbWFyICYmIHJlc3VsdExvY2F0aW9uIDwgZ3JhbW1hclJhbmdlRW5kT2Zmc2V0ICYmIHJl
c3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoID4gZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQpIHsK
ICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49
IDApOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlc3VsdC0+ZGV0YWls
cy5zaXplKCk7IGorKykgewogICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRl
dGFpbCA9ICZyZXN1bHQtPmRldGFpbHNbal07CkBAIC0yNjA5LDcgKzI2MzQsNyBAQCB2b2lkIEVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAgICAgICAgICAgICAgIGdy
YW1tYXJSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFk
ZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBk
ZXRhaWwtPnVzZXJEZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMgJiYg
cmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAm
JiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA+PSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZz
ZXQKKyAgICAgICAgfSBlbHNlIGlmICgoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3Vs
ZFNob3dDb3JyZWN0aW9uUGFuZWwpICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoIDw9
IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGgg
Pj0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICYmIChyZXN1
bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUxpbmsKICAgICAgICAgICAgICAgICAgICAgfHwg
cmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVRdW90ZQogICAgICAgICAgICAgICAgICAg
ICB8fCByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZURhc2gKQEAgLTI2NDAsNyArMjY2
NSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAg
ICAgICAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuc3RhcnRPZmZzZXQpIDwgZW5kT2Zm
c2V0ICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVuZE9mZnNldCkgPiBzdGFydE9mZnNldCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCB8fCBtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRD
b3JyZWN0aW9uKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5zdGFydE9mZnNldCkgPCBlbmRP
ZmZzZXQgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0KSA+IHN0YXJ0T2Zmc2V0
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb1JlcGxhY2VtZW50ID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjY0
OCw3ICsyNjczLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGRvUmVwbGFjZW1lbnQgJiYgc2VsZWN0aW9uVG9SZXBs
YWNlICE9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSkgeworICAgICAgICAgICAg
aWYgKGRvUmVwbGFjZW1lbnQgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgJiYgc2VsZWN0
aW9uVG9SZXBsYWNlICE9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSkgewogICAg
ICAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9u
VG9SZXBsYWNlKSkgewogICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGlvbkNoYW5nZWQgPSB0cnVlOwpAQCAtMjY1NiwzMCArMjY4MSw1MiBAQCB2b2lkIEVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAgICAgICAgICAgICAgIGRvUmVw
bGFjZW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsKICAgICAgICAgICAgIGlmIChkb1JlcGxh
Y2VtZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tp
bmdUeXBlTGluaykgewogICAgICAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJD
aGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbkVkaXRSaWNobHkoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChDcmVhdGVMaW5rQ29tbWFuZDo6
Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHJlc3VsdC0+cmVwbGFjZW1lbnQpKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0KHJlc3Vs
dC0+cmVwbGFjZW1lbnQsIHJhbmdlVG9SZXBsYWNlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25U
eXBlZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nOwogICAg
ICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3Jy
ZWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWRTdHJpbmcgPSBwbGFpblRl
eHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICByZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQocmVzdWx0LT5yZXBsYWNlbWVudCwgZmFsc2UsIGZhbHNlKTsKLSAgICAg
ICAgICAgICAgICAgICAgc3BlbGxpbmdSYW5nZUVuZE9mZnNldCArPSByZXBsYWNlbWVudExlbmd0
aCAtIHJlc3VsdExlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0RHVlVG9SZXBsYWNl
bWVudCArPSByZXBsYWNlbWVudExlbmd0aCAtIHJlc3VsdExlbmd0aDsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdExvY2F0aW9uIDwgc2VsZWN0aW9uT2Zmc2V0KQotICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uT2Zmc2V0ICs9IHJlcGxhY2VtZW50TGVuZ3RoIC0gcmVzdWx0
TGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVj
a2luZ1R5cGVDb3JyZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYSBt
YXJrZXIgc28gdGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBhbmQgd29uJ3Qg
YmUgcmUtY29ycmVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBy
ZXBsYWNlZFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZS5nZXQo
KSwgcmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCwgcmVwbGFjZWRTdHJpbmcpOworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5n
dGggPT0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNr
aW5nVHlwZUNvcnJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkg
c2hvdyB0aGUgY29ycmVjdGlvbiBwYW5lbCBvbiB0aGUgbGFzdCB3b3JkLgorICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmFuZ2VUb1JlcGxhY2UtPnRleHRRdWFkcyh0ZXh0UXVhZHMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRl
eHRRdWFkcy5lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVjdCB0b3RhbEJv
dW5kaW5nQm94OworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChWZWN0b3I8RmxvYXRRdWFk
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0UXVhZHMuYmVnaW4oKTsgaXQgPCBlbmQ7ICsraXQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxCb3VuZGluZ0JveC51bml0ZShpdC0+
Ym91bmRpbmdCb3goKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3JhbmdlVG9CZVJlcGxh
Y2VkQnlDb3JyZWN0aW9uID0gcmFuZ2VUb1JlcGxhY2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0cmluZ1RvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbiA9IHJlcGxhY2VkU3RyaW5nOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwodG90YWxC
b3VuZGluZ0JveCwgbV9zdHJpbmdUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24sIHJlc3VsdC0+cmVw
bGFjZW1lbnQsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgZG9SZXBsYWNlbWVudCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGRvUmVwbGFjZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dChyZXN1bHQtPnJlcGxhY2VtZW50LCBmYWxzZSwgZmFsc2UpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdSYW5nZUVuZE9mZnNldCArPSByZXBsYWNlbWVu
dExlbmd0aCAtIHJlc3VsdExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldER1
ZVRvUmVwbGFjZW1lbnQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24gPCBzZWxlY3Rpb25PZmZzZXQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uT2Zmc2V0ICs9IHJlcGxhY2Vt
ZW50TGVuZ3RoIC0gcmVzdWx0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikgeworI2lmIFBMQVRGT1JN
KE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOworI2Vu
ZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQg
Y29ycmVjdGlvbnMgY2FuIGVhc2lseSBiZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3Rl
ZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFu
Z2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlLmdldCgpLCByZXN1bHRM
b2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQotICAgIAorCiAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHsKICAgICAgICAgLy8g
UmVzdG9yZSB0aGUgY2FyZXQgcG9zaXRpb24gaWYgd2UgaGF2ZSBtYWRlIGFueSByZXBsYWNlbWVu
dHMKICAgICAgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBlbmRPZlBhcmFncmFwaChz
dGFydE9mTmV4dFBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSkpOwpA
QCAtMjcyMSw3ICsyNzY4LDEwIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW0KICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQogICAgIGlmICghaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModHJ1ZSwgc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgbWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCksIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgZmFsc2Up
OworICAgIGludCB0ZXh0Q2hlY2tpbmdPcHRpb24gPSBNYXJrU3BlbGxpbmc7CisgICAgaWYgKG1h
cmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICB0ZXh0Q2hl
Y2tpbmdPcHRpb24gfD0gTWFya0dyYW1tYXI7CisgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJh
ZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb24sIHNwZWxsaW5nU2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSk7CiAjZWxzZQogICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1Jh
bmdlOwogICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7CkBAIC0yNzMwLDYgKzI3ODAsNDUgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbQogI2VuZGlmCiB9CiAKK3ZvaWQgRWRpdG9yOjpjb3JyZWN0aW9u
UGFuZWxUaW1lckZpcmVkKFRpbWVyPEVkaXRvcj4qKQoreworI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpCisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uLnN0YXJ0
KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0
T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgVmlzaWJsZVNlbGVjdGlv
biBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CisgICAgbWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhNYXJrU3BlbGxpbmcgfCBTaG93Q29y
cmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDAp
OworI2VuZGlmCit9CisKK3ZvaWQgRWRpdG9yOjpoYW5kbGVSZWplY3RlZENvcnJlY3Rpb24oKQor
eworICAgIFJhbmdlKiByZXBsYWNlZFJhbmdlID0gbV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVj
dGlvbi5nZXQoKTsKKyAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9mcmFtZS0+ZG9jdW1lbnQo
KSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMo
KS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJl
Y3Rpb24sIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uKTsKK30KKwordm9pZCBFZGl0
b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKQoreworI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBzdGF0aWMgY29u
c3QgZG91YmxlIGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwgPSAwLjM7CisgICAgaWYgKGNs
aWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsK
KyAgICBpZiAoaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCisgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVy
SW50ZXJ2YWwpOworI2VuZGlmCit9CisKK3ZvaWQgRWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRp
b24oKQoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsKGZhbHNlKTsKKyNlbmRpZgorfQorCiBQYXNzUmVmUHRyPFJhbmdl
PiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogewog
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50QXRQb2ludCh3aW5kb3dQ
b2ludCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCwxMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQoKTsKICAgICBib29sIGlzQXV0
b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOwogICAgIHZvaWQgdG9nZ2xlQXV0b21h
dGljU3BlbGxpbmdDb3JyZWN0aW9uKCk7Ci0gICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKGJvb2wgbWFya1NwZWxsaW5nLCBSYW5nZSogc3BlbGxpbmdSYW5n
ZSwgYm9vbCBtYXJrR3JhbW1hciwgUmFuZ2UqIGdyYW1tYXJSYW5nZSwgYm9vbCBwZXJmb3JtVGV4
dENoZWNraW5nUmVwbGFjZW1lbnRzKTsKKyAgICBlbnVtIFRleHRDaGVja2luZ09wdGlvbnMgewor
ICAgICAgICBNYXJrU3BlbGxpbmcgPSAxIDw8IDAsCisgICAgICAgIE1hcmtHcmFtbWFyID0gMSA8
PCAxLAorICAgICAgICBQZXJmb3JtUmVwbGFjZW1lbnQgPSAxIDw8IDIsCisgICAgICAgIFNob3dD
b3JyZWN0aW9uUGFuZWwgPSAxIDw8IDMsCisgICAgfTsKKyAgICB2b2lkIG1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoaW50IHRleHRDaGVja2luZ09wdGlvbnMsIFJhbmdl
KiBzcGVsbGluZ1JhbmdlLCBSYW5nZSogZ3JhbW1hclJhbmdlKTsKICAgICB2b2lkIGNoYW5nZUJh
Y2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpOwogI2VuZGlm
CiAgICAgdm9pZCBhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVj
dGlvbiA9IGZhbHNlKTsKQEAgLTI5NCw5ICszMDAsMTMgQEAgcHVibGljOgogICAgIGJvb2wgaW5z
aWRlVmlzaWJsZUFyZWEoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICBib29sIGluc2lkZVZp
c2libGVBcmVhKFJhbmdlKikgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4dFZpc2li
bGVSYW5nZShSYW5nZSosIGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxh
ZywgYm9vbCB3cmFwRmxhZyk7Ci0gICAgCisKICAgICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFuZ2Uq
LCBib29sIHByZXBlbmQpOwogCisgICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKTsKKyAg
ICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyAgICB2b2lkIGhhbmRsZVJlamVj
dGVkQ29ycmVjdGlvbigpOworCiAgICAgdm9pZCBwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CiAg
ICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc21hcnRSZXBsYWNl
KTsKIApAQCAtMzE4LDYgKzMyOCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN0YXJ0
TmV3S2lsbFJpbmdTZXF1ZW5jZTsKICAgICBib29sIG1fc2hvdWxkU3R5bGVXaXRoQ1NTOwogICAg
IE93blB0cjxLaWxsUmluZz4gbV9raWxsUmluZzsKKyAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2VU
b0JlUmVwbGFjZWRCeUNvcnJlY3Rpb247CisgICAgU3RyaW5nIG1fc3RyaW5nVG9CZVJlcGxhY2Vk
QnlDb3JyZWN0aW9uOworICAgIFRpbWVyPEVkaXRvcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsK
IAogICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIGNhblNt
YXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqKTsKQEAgLTMzNSw4ICszNDgsOSBA
QCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gZmlyc3RWaXNpYmxlUmFuZ2UoY29u
c3QgU3RyaW5nJiwgYm9vbCBjYXNlRmxhZyk7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbGFzdFZp
c2libGVSYW5nZShjb25zdCBTdHJpbmcmLCBib29sIGNhc2VGbGFnKTsKLSAgICAKKwogICAgIHZv
aWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5l
d1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKTsKKyAg
ICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopOwogICAgIE5v
ZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKIH07CiAKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9lZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY5LDYgKzEwNjksMTQg
QEAgc3RhdGljIGJvb2wgZXhlY3V0ZVlhbmtBbmRTZWxlY3QoRnJhbWUqIAogICAgIHJldHVybiB0
cnVlOwogfQogCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQorc3RhdGljIGJvb2wgZXhlY3V0ZUNhbmNlbE9wZXJhdGlvbihGcmFt
ZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3sK
KyAgICBmcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpOworICAgIHJldHVy
biB0cnVlOworfQorI2VuZGlmCisKIC8vIFN1cHBvcnRlZCBmdW5jdGlvbnMKIAogc3RhdGljIGJv
b2wgc3VwcG9ydGVkKEZyYW1lKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKQEAgLTE0NTUsNiArMTQ2
Myw5IEBAIHN0YXRpYyBjb25zdCBDb21tYW5kTWFwJiBjcmVhdGVDb21tYW5kTWEKICAgICAgICAg
eyAiVW5zZWxlY3QiLCB7IGV4ZWN1dGVVbnNlbGVjdCwgc3VwcG9ydGVkLCBlbmFibGVkVmlzaWJs
ZVNlbGVjdGlvbiwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24sIGRvTm90
QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAogICAgICAgICB7ICJZYW5rIiwgeyBleGVj
dXRlWWFuaywgc3VwcG9ydGVkRnJvbU1lbnVPcktleUJpbmRpbmcsIGVuYWJsZWRJbkVkaXRhYmxl
VGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24sIGRvTm90QWxsb3dF
eGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAogICAgICAgICB7ICJZYW5rQW5kU2VsZWN0IiwgeyBl
eGVjdXRlWWFua0FuZFNlbGVjdCwgc3VwcG9ydGVkRnJvbU1lbnVPcktleUJpbmRpbmcsIGVuYWJs
ZWRJbkVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24s
IGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAorI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAgICAgeyAi
Q2FuY2VsT3BlcmF0aW9uIiwgeyBleGVjdXRlQ2FuY2VsT3BlcmF0aW9uLCBzdXBwb3J0ZWRGcm9t
TWVudU9yS2V5QmluZGluZywgZW5hYmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVl
TnVsbCwgbm90VGV4dEluc2VydGlvbiwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9
IH0sCisjZW5kaWYKICAgICB9OwogCiAgICAgLy8gVGhlc2UgdW5zdXBwb3J0ZWQgY29tbWFuZHMg
YXJlIGxpc3RlZCBoZXJlIHNpbmNlIHRoZXkgYXBwZWFyIGluIHRoZSBNaWNyb3NvZnQKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNiArMzA3LDEw
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGUKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KTsKICAgICAgICAgaWYgKHAxICE9IHAyKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24ocDEpOwor
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRp
dG9yKCktPnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyNlbmRpZgogICAgIH0KIH0KIApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2MCw2ICs0NjAsMTAgQEAgcHVi
bGljOgogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCiAgICAgdmlydHVhbCB2b2lkIGNoZWNrVGV4
dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiwgaW50LCB1aW50NjRfdCwgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4mKSB7IH07CiAjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgdmlydHVhbCB2b2lkIHNob3dD
b3JyZWN0aW9uUGFuZWwoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiwgRWRpdG9yKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoYm9vbCkgeyB9CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdp
dGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25z
dCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCkgeyB9
CkluZGV4OiBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0VkaXRvckNsaWVudC5oCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGFnZS9F
ZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBF
ZGl0b3JDbGllbnRfaAogCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgiCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJU
ZXh0QWZmaW5pdHkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTEsNiArNTIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFz
cyBFZGl0Q29tbWFuZDsKK2NsYXNzIEVkaXRvcjsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFt
ZTsKIGNsYXNzIEhUTUxFbGVtZW50OwpAQCAtMTc3LDYgKzE3OSwxMiBAQCBwdWJsaWM6CiAjaWYg
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMs
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKSA9IDA7CiAjZW5kaWYKKworI2lm
IFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBGbG9hdFJlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBFZGl0b3IqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQp
ID0gMDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBkZXRhaWwpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wg
c2hvdykgPSAwOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGFnZS9G
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDksOCArMTQ0OSwxMCBAQCB2b2lkIEZyYW1l
OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvCiAKICAgICAgICAgLy8gVGhpcyBvbmx5IGVy
YXNlcyBtYXJrZXJzIHRoYXQgYXJlIGluIHRoZSBmaXJzdCB1bml0ICh3b3JkIG9yIHNlbnRlbmNl
KSBvZiB0aGUgc2VsZWN0aW9uLgogICAgICAgICAvLyBQZXJoYXBzIHBlY3VsaWFyLCBidXQgaXQg
bWF0Y2hlcyBBcHBLaXQuCi0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5l
d0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICAgICAgaWYgKFJlZlB0cjxS
YW5nZT4gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpKSB7
CiAgICAgICAgICAgICBkb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMod29yZFJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICAgICAgZG9jdW1l
bnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoUmVmUHRyPFJhbmdl
PiBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgp
KQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKHNlbnRl
bmNlUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDY2
NTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcxLDcgKzI3MSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYpOwogCiAg
ICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoLCBi
b29sIHByaW50aW5nKTsKLSAgICAgICAgdm9pZCBkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRH
cmFtbWFyKGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoLCBib29sIGdyYW1tYXIpOworICAgICAg
ICBlbnVtIFRleHRDaGVja2luZ0xpbmVTdHlsZSB7CisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdT
cGVsbGluZ0xpbmVTdHlsZSwKKyAgICAgICAgICAgIFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5
bGUsCisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZQorICAgICAg
ICB9OworICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEludFBvaW50
JiwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpOwogCiAgICAgICAgIGJvb2wgcGFp
bnRpbmdEaXNhYmxlZCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFBhaW50aW5nRGlzYWJsZWQo
Ym9vbCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzU5LDcgKzc1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvclRleHQoY28KICNpbmNsdWRlICJEcmF3RXJyb3JVbmRlcmxpbmUuaCIKICNlbmRpZgogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihj
b25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBJbnRQb2ludCYgb3Jp
Z2luLCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC03NjcsMTIgKzc2NywxNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsCiAgICAgY2Fpcm9fdCog
Y3IgPSBtX2RhdGEtPmNyOwogICAgIGNhaXJvX3NhdmUoY3IpOwogCi0gICAgLy8gQ29udmVudGlv
biBpcyBncmVlbiBmb3IgZ3JhbW1hciwgcmVkIGZvciBzcGVsbGluZwotICAgIC8vIFRoZXNlIG5l
ZWQgdG8gYmVjb21lIGNvbmZpZ3VyYWJsZQotICAgIGlmIChncmFtbWFyKQotICAgICAgICBjYWly
b19zZXRfc291cmNlX3JnYihjciwgMCwgMSwgMCk7Ci0gICAgZWxzZQorICAgIHN3aXRjaCAoc3R5
bGUpIHsKKyAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgogICAgICAgICBj
YWlyb19zZXRfc291cmNlX3JnYihjciwgMSwgMCwgMCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9yZ2IoY3IsIDAsIDEsIDApOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBjYWlyb19yZXN0b3JlKGNyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogI2lmIFBMQVRG
T1JNKEdUSykKICAgICAvLyBXZSBpZ25vcmUgbW9zdCBvZiB0aGUgcHJvdmlkZWQgY29uc3RhbnRz
IGluIGZhdm91ciBvZiB0aGUgcGxhdGZvcm0gc3R5bGUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCShy
ZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhp
Y3NDb250ZXh0SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjbwogICAgIGRyYXdMaW5lKG9yaWdp
biwgZW5kUG9pbnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNz
cGVsbGluZ09yQmFkR3JhbW1hcihjb25zdCBJbnRQb2ludCYsIGludCB3aWR0aCwgYm9vbCBncmFt
bWFyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0
IEludFBvaW50JiwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNp
b24gNjY1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBzdGF0aWMgTlNDb2xv
ciogY3JlYXRlUGF0dGVybkNvbG9yKE5TU3RyCiB9CiAKIC8vIFdlYktpdCBvbiBNYWMgaXMgYSBz
dGFuZGFyZCBwbGF0Zm9ybSBjb21wb25lbnQsIHNvIGl0IG11c3QgdXNlIHRoZSBzdGFuZGFyZCBw
bGF0Zm9ybSBhcnR3b3JrIGZvciB1bmRlcmxpbmUuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihjb25zdCBJbnRQb2ludCYgcG9pbnQsIGlu
dCB3aWR0aCwgYm9vbCBncmFtbWFyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dENoZWNraW5nKGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IHdpZHRoLCBUZXh0Q2hlY2tp
bmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTI3LDIzICsxMjcsNDEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yTWlzc3BlbAogICAgIC8vIFRoZXNlIGFyZSB0aGUgc2FtZSBmb3IgbWlzc3BlbGxp
bmcgb3IgYmFkIGdyYW1tYXIuCiAgICAgaW50IHBhdHRlcm5IZWlnaHQgPSBjTWlzc3BlbGxpbmdM
aW5lVGhpY2tuZXNzOwogICAgIGludCBwYXR0ZXJuV2lkdGggPSBjTWlzc3BlbGxpbmdMaW5lUGF0
dGVybldpZHRoOwotIAorCiAgICAgYm9vbCB1c2luZ0RvdDsKICAgICBOU0NvbG9yICpwYXR0ZXJu
Q29sb3I7Ci0gICAgaWYgKGdyYW1tYXIpIHsKLSAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBncmFt
bWFyIHBhdHRlcm4gY29sb3IuCi0gICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yR3JhbW1h
ciA9IGZhbHNlOwotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxOU0NvbG9y
PiwgZ3JhbW1hclBhdHRlcm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihAIkdyYW1tYXJEb3Qi
LCBbTlNDb2xvciBncmVlbkNvbG9yXSwgdXNpbmdEb3RGb3JHcmFtbWFyKSkpOwotICAgICAgICAK
LSAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvckdyYW1tYXI7Ci0gICAgICAgIHBhdHRlcm5D
b2xvciA9IGdyYW1tYXJQYXR0ZXJuQ29sb3IuZ2V0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gQ29uc3RhbnRzIGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgotICAgICAgICBzdGF0aWMg
Ym9vbCB1c2luZ0RvdEZvclNwZWxsaW5nID0gZmFsc2U7Ci0gICAgICAgIERFRklORV9TVEFUSUNf
TE9DQUwoUmV0YWluUHRyPE5TQ29sb3I+LCBzcGVsbGluZ1BhdHRlcm5Db2xvciwgKGNyZWF0ZVBh
dHRlcm5Db2xvcihAIlNwZWxsaW5nRG90IiwgW05TQ29sb3IgcmVkQ29sb3JdLCB1c2luZ0RvdEZv
clNwZWxsaW5nKSkpOwotICAgICAgICAKLSAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvclNw
ZWxsaW5nOwotICAgICAgICBwYXR0ZXJuQ29sb3IgPSBzcGVsbGluZ1BhdHRlcm5Db2xvci5nZXQo
KTsKKyAgICBzd2l0Y2ggKHN0eWxlKSB7CisgICAgICAgIGNhc2UgVGV4dENoZWNraW5nU3BlbGxp
bmdMaW5lU3R5bGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3Bl
bGxpbmcgcGF0dGVybiBjb2xvci4KKyAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9y
U3BlbGxpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWlu
UHRyPE5TQ29sb3I+LCBzcGVsbGluZ1BhdHRlcm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihA
IlNwZWxsaW5nRG90IiwgW05TQ29sb3IgcmVkQ29sb3JdLCB1c2luZ0RvdEZvclNwZWxsaW5nKSkp
OworICAgICAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvclNwZWxsaW5nOworICAgICAgICAg
ICAgcGF0dGVybkNvbG9yID0gc3BlbGxpbmdQYXR0ZXJuQ29sb3IuZ2V0KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRleHRDaGVja2luZ0dyYW1tYXJMaW5l
U3R5bGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3IgZ3JhbW1hciBw
YXR0ZXJuIGNvbG9yLgorICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JHcmFtbWFy
ID0gZmFsc2U7CisgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxOU0Nv
bG9yPiwgZ3JhbW1hclBhdHRlcm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihAIkdyYW1tYXJE
b3QiLCBbTlNDb2xvciBncmVlbkNvbG9yXSwgdXNpbmdEb3RGb3JHcmFtbWFyKSkpOworICAgICAg
ICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvckdyYW1tYXI7CisgICAgICAgICAgICBwYXR0ZXJu
Q29sb3IgPSBncmFtbWFyUGF0dGVybkNvbG9yLmdldCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCisgICAgICAgIGNhc2UgVGV4dENoZWNraW5nUmVwbGFjZW1lbnRMaW5l
U3R5bGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcg
cGF0dGVybiBjb2xvci4KKyAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxp
bmcgPSBmYWxzZTsKKyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5T
Q29sb3I+LCBzcGVsbGluZ1BhdHRlcm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihAIkNvcnJl
Y3Rpb25Eb3QiLCBbTlNDb2xvciBibHVlQ29sb3JdLCB1c2luZ0RvdEZvclNwZWxsaW5nKSkpOwor
ICAgICAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvclNwZWxsaW5nOworICAgICAgICAgICAg
cGF0dGVybkNvbG9yID0gc3BlbGxpbmdQYXR0ZXJuQ29sb3IuZ2V0KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gTWFrZSBzdXJlIHRvIGRyYXcgb25seSBjb21wbGV0ZSBk
b3RzLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250
ZXh0T3BlblZHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0KGNvCiAgICAgVU5VU0VEX1BBUkFNKHByaW50aW5nKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3Qg
SW50UG9pbnQmIG9yaWdpbiwgaW50IHdpZHRoLCBib29sIGdyYW1tYXIpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgSW50UG9pbnQmIG9yaWdpbiwg
aW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWwKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGdyYW1tYXIpOworICAgIFVOVVNFRF9QQVJBTShzdHlsZSk7CiB9CiAK
IEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg0NSw3ICs4NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNv
CiAgICAgZHJhd0xpbmUob3JpZ2luLCBlbmRQb2ludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50Jiwg
aW50LCBib29sKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5n
KGNvbnN0IEludFBvaW50JiwgaW50LCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAko
cmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxNSw5ICs2MTUsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50CiAgICAgcGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5kcmF3UG9pbnRzKFNrQ2FudmFzOjprTGluZXNfUG9pbnRNb2RlLCAyLCBw
dHMsIHBhaW50KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3Bl
bGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQmIHB0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBn
cmFtbWFyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNv
bnN0IEludFBvaW50JiBwdCwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUp
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dENHV2luLmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMSAr
MTc2LDE0IEBAIHN0YXRpYyBjb25zdCBDb2xvciYgZ3JhbW1hclBhdHRlcm5Db2xvcigKICAgICBy
ZXR1cm4gZ3JhbW1hckNvbG9yOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCB3aWR0
aCwgYm9vbCBncmFtbWFyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENo
ZWNraW5nKGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5l
U3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgaWYgKHN0eWxlICE9IFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlICYm
IHN0eWxlICE9IFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGUpCisgICAgICAgIHJldHVybjsK
KwogICAgIC8vIFRoZXNlIGFyZSB0aGUgc2FtZSBmb3IgbWlzc3BlbGxpbmcgb3IgYmFkIGdyYW1t
YXIKICAgICBjb25zdCBpbnQgcGF0dGVybkhlaWdodCA9IDM7IC8vIDMgcm93cwogICAgIEFTU0VS
VChjTWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzID09IHBhdHRlcm5IZWlnaHQpOwpAQCAtMjAxLDcg
KzIwNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWwKICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFNh
dmVHU3RhdGUoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciYgcGF0dGVybkNvbG9yID0gZ3Jh
bW1hciA/IGdyYW1tYXJQYXR0ZXJuQ29sb3IoKSA6IHNwZWxsaW5nUGF0dGVybkNvbG9yKCk7Cisg
ICAgY29uc3QgQ29sb3ImIHBhdHRlcm5Db2xvciA9IHN0eWxlID09IFRleHRDaGVja2luZ0dyYW1t
YXJMaW5lU3R5bGUgPyBncmFtbWFyUGF0dGVybkNvbG9yKCkgOiBzcGVsbGluZ1BhdHRlcm5Db2xv
cigpOwogICAgIHNldENHU3Ryb2tlQ29sb3IoY29udGV4dCwgcGF0dGVybkNvbG9yKTsKIAogICAg
IHdrU2V0UGF0dGVyblBoYXNlSW5Vc2VyU3BhY2UoY29udGV4dCwgcG9pbnQpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRl
eHRXaW5jZS5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjIs
NyArMTA2Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY28KICAg
ICBzZXRTdHJva2VTdHlsZShvbGRTdHlsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50JiwgaW50IHdp
ZHRoLCBib29sIGdyYW1tYXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0
Q2hlY2tpbmcoY29uc3QgSW50UG9pbnQmLCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHls
ZSBzdHlsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9u
IDY2NTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRX
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NywxNCArMzU3LDE4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvclRleHQoY28KICAgICBtX2RhdGEtPmNvbnRleHQtPkRyYXdMaW5l
KG9yaWdpbi54KCksIG9yaWdpbi55KCksIGVuZFBvaW50LngoKSwgZW5kUG9pbnQueSgpKTsKIH0K
IAotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3Jh
bW1hcihjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBJbnRQb2lu
dCYgb3JpZ2luLCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKLSAg
ICBpZiAoZ3JhbW1hcikKLSAgICAgICAgbV9kYXRhLT5jb250ZXh0LT5TZXRQZW4od3hQZW4oKnd4
R1JFRU4sIDIsIHd4TE9OR19EQVNIKSk7Ci0gICAgZWxzZQorICAgIHN3aXRjaCAoc3R5bGUpIHsK
KyAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgogICAgICAgICBtX2RhdGEt
PmNvbnRleHQtPlNldFBlbih3eFBlbigqd3hSRUQsIDIsIHd4TE9OR19EQVNIKSk7Ci0gICAgCisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAg
ICAgICAgbV9kYXRhLT5jb250ZXh0LT5TZXRQZW4od3hQZW4oKnd4R1JFRU4sIDIsIHd4TE9OR19E
QVNIKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgbV9kYXRhLT5jb250ZXh0LT5EcmF3TGluZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgp
LCBvcmlnaW4ueCgpICsgd2lkdGgsIG9yaWdpbi55KCkpOwogfQogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDYgKzc2OCwyMSBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwCiAgICAgICAgIGNvbnRleHQt
PmNsZWFyU2hhZG93KCk7CiB9CiAKK3N0YXRpYyBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2lu
Z0xpbmVTdHlsZSB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JNYXJrZXJUeXBlKERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCit7CisgICAgc3dpdGNoIChtYXJrZXJUeXBlKSB7
CisgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6CisgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQ6OlRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOworICAgIGNhc2UgRG9j
dW1lbnRNYXJrZXI6OkdyYW1tYXI6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRl
eHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGU7CisgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQ6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ1Jl
cGxhY2VtZW50TGluZVN0eWxlOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0Q2hlY2tpbmdTcGVs
bGluZ0xpbmVTdHlsZTsKKyAgICB9Cit9CisKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVs
bGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBpbnQgdHgsIGludCB0eSwg
Y29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBG
b250JiBmb250LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcv
Z3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQpAQCAtODMxLDcgKzg0Niw3IEBAIHZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW0KICAgICAgICAgLy8gSW4gbGFyZ2VyIGZvbnRz
LCB0aG91Z2gsIHBsYWNlIHRoZSB1bmRlcmxpbmUgdXAgbmVhciB0aGUgYmFzZWxpbmUgdG8gcHJl
dmVudCBhIGJpZyBnYXAuCiAgICAgICAgIHVuZGVybGluZU9mZnNldCA9IGJhc2VsaW5lICsgMjsK
ICAgICB9Ci0gICAgcHQtPmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoSW50UG9p
bnQodHggKyBtX3ggKyBzdGFydCwgdHkgKyBtX3kgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwg
Z3JhbW1hcik7CisgICAgcHQtPmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKEludFBvaW50KHR4ICsg
bV94ICsgc3RhcnQsIHR5ICsgbV95ICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIHRleHRDaGVj
a2luZ0xpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLnR5cGUpKTsKIH0KIAogdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBpbnQg
dHgsIGludCB0eSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBGb250JiBmb250KQpAQCAtODk4LDEwICs5MTMsMTAgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycwogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hcjoKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
OgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CisgICAgICAg
ICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb246CiAgICAgICAgICAg
ICAgICAgaWYgKGJhY2tncm91bmQpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBE
b2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoOgogICAgICAgICAgICAgICAgIGlmICghYmFja2dyb3Vu
ZCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC05MzMsNiArOTQ4LDkgQEAgdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CiAgICAg
ICAgICAgICAgICAgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcih0eCwgdHksIG1hcmtl
ciwgc3R5bGUsIGZvbnQpOworICAgICAgICAgICAgICAgIHBhaW50U3BlbGxpbmdPckdyYW1tYXJN
YXJrZXIocHQsIHR4LCB0eSwgbWFya2VyLCBzdHlsZSwgZm9udCwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRD
b3JyZWN0aW9uOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFdlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjU2NykK
KysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTAtMDgtMzEgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9jb3JyZWN0aW9u
IFVJIG9uIE1hYyBPUyBYLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDQ5NTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyOTk2MjE+CisKKyAgICAg
ICAgU2VlIGRldGFpbGVkIGhpZ2ggbGV2ZWwgZGVzY3JpcHRpb24gaW4gV2ViQ29yZS9DaGFuZ2VM
b2cuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25Q
YW5lbCk6IER1bW15IGltcGxlbWVudGF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JD
bGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOiBEaXR0bworCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDogQWRkZWQgbmV3IG1ldGhvZHMg
ZGVjbGFyZWQgaW4gYmFzZSBjbGFzcy4KKwogMjAxMC0wOC0zMSAgSm9uIEhvbmV5Y3V0dCAgPGpo
b25leWN1dHRAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBzb21lIGNvcHkvcGFzdGUgZXJyb3Jz
LgpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
OSw0ICs0NjksMTYgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNldElucHV0TWV0aG9kU3RhdAog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFu
ZWwoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJl
cGxhY2VtZW50U3RyaW5nLCBXZWJDb3JlOjpFZGl0b3IqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJv
b2wgY29ycmVjdGlvbkFjY2VwdGVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5k
aWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA2NjU2NykK
KysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
Ci1wcml2YXRlOiAgICAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQo
KTsKLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpS
YW5nZSopOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93RGVsZXRlSW50ZXJmYWNlKFdlYkNv
cmU6OkhUTUxFbGVtZW50Kik7Ci0gICAgdmlydHVhbCBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5h
YmxlZCgpOyAKKyAgICB2aXJ0dWFsIGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7CiAg
ICAgdmlydHVhbCBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpOwogICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwogICAgIHZp
cnR1YWwgdm9pZCB0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZygpOwpAQCAtMTMxLDcgKzEz
MSwxMCBAQCBwcml2YXRlOiAgICAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQo
Y29uc3QgV1RGOjpTdHJpbmcmLCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKTsKICAgICB2
aXJ0dWFsIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwotCisjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rp
b25QYW5lbChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0
cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIFdlYkNvcmU6OkVkaXRvciopOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKTsKKyNlbmRp
ZgogICAgIFdlYlBhZ2UqIG1fcGFnZTsKIH07CiAKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjU2NykKKysr
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIw
MTAtMDgtMzEgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9jb3JyZWN0aW9u
IFVJIG9uIE1hYyBPUyBYLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDQ5NTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyOTk2MjE+CisKKyAgICAg
ICAgU2VlIGRldGFpbGVkIGhpZ2ggbGV2ZWwgZGVzY3JpcHRpb24gaW4gV2ViQ29yZS9DaGFuZ2VM
b2cuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDogQWRkZWQg
bmV3IG1lbWJlciBtZXRob2RzIGRlY2xhcmVkIGluCisgICAgICAgICAgRWRpdG9yQ2xpZW50LiBB
ZGRlZCBtX2NvcnJlY3Rpb25QYW5lbFRhZyB0byBzdG9yZSB0aGUgSUQgb2YgY3VycmVudCBhdXRv
Y29ycmVjdGlvbiBVSSBvYmplY3QuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OldlYkVkaXRvckNsaWVudCk6
IEluaXRpYWxpemUgbV9jb3JyZWN0aW9uUGFuZWxUYWcuCisgICAgICAgIChXZWJFZGl0b3JDbGll
bnQ6On5XZWJFZGl0b3JDbGllbnQpOiBNYWtlIHN1cmUgdGhlIGF1dG9jb3JyZWN0aW9uIFVJIGlz
CisgICAgICAgICAgZGlzbWlzc2VkIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBvYmplY3QuCisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOiBEaXNtaXNz
IGF1dG9jb3JyZWN0aW9uIFVJIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4KKyAgICAg
ICAgKFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6IFNob3cgYXV0b2NvcnJl
Y3Rpb24gVUkuCisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwpOiBEaXNtaXNzIGF1dG9jb3JyZWN0aW9uIFVJLgorCiAyMDEwLTA4LTMxICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCklu
ZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlz
aW9uIDY2NTY3KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisj
aW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3JDbGllbnQu
aD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC0zOCw3ICszOSw3IEBACiBjbGFzcyBXZWJFZGl0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6
RWRpdG9yQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXZWJFZGl0b3JDbGllbnQoV2ViVmlldyAqKTsK
LSAgICAKKyAgICB2aXJ0dWFsIH5XZWJFZGl0b3JDbGllbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
cGFnZURlc3Ryb3llZCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCgpOwpAQCAtMTI5LDEyICsxMzAsMTkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBn
ZXRHdWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYsIFdURjo6VmVjdG9yPFdURjo6U3Ry
aW5nPiYgZ3Vlc3Nlcyk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRl
KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsK
KyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIHZpcnR1
YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91
bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgV2ViQ29yZTo6RWRpdG9y
Kik7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0
aW9uQWNjZXB0ZWQpOworI2VuZGlmCiBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJDb21tYW5k
Rm9yVW5kb09yUmVkbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPiwgYm9vbCBpc1Jl
ZG8pOwogICAgIFdlYkVkaXRvckNsaWVudCgpOwotICAgIAorCiAgICAgV2ViVmlldyAqbV93ZWJW
aWV3OwogICAgIFJldGFpblB0cjxXZWJFZGl0b3JVbmRvVGFyZ2V0PiBtX3VuZG9UYXJnZXQ7Ci0g
ICAgCiAgICAgYm9vbCBtX2hhdmVVbmRvUmVkb09wZXJhdGlvbnM7CisKKyNpZiAhZGVmaW5lZChC
VUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIE5TSW50ZWdlciBtX2NvcnJlY3Rp
b25QYW5lbFRhZzsKKyNlbmRpZgogfTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2
NCw5IEBACiAjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbXBvcnQg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CisjaWYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpbXBvcnQgPEFwcEtpdC9OU1Rl
eHRDaGVja2VyLmg+CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBu
YW1lc3BhY2UgV1RGOwpAQCAtMTcxLDcgKzE3NCwxNyBAQCBXZWJFZGl0b3JDbGllbnQ6OldlYkVk
aXRvckNsaWVudChXZWJWaWV3CiAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKICAgICAsIG1fdW5k
b1RhcmdldChbW1tXZWJFZGl0b3JVbmRvVGFyZ2V0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV0p
CiAgICAgLCBtX2hhdmVVbmRvUmVkb09wZXJhdGlvbnMoZmFsc2UpCisjaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGFn
KC0xKQorI2VuZGlmCit7Cit9CisKK1dlYkVkaXRvckNsaWVudDo6fldlYkVkaXRvckNsaWVudCgp
CiB7CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBk
aXNtaXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOworI2VuZGlmCiB9CiAKIGJvb2wgV2ViRWRpdG9y
Q2xpZW50Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCkBAIC0yODYsNiArMjk5
LDEwIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2UKIHsKICAgICBb
bV93ZWJWaWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsKIAorI2lmICFkZWZpbmVkKEJVSUxESU5HX09O
X1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsK
KyNlbmRpZgorCiAgICAgLy8gRklYTUU6IFRoaXMgcXVpcmsgaXMgbmVlZGVkIGR1ZSB0byA8cmRh
cjovL3Byb2JsZW0vNTAwOTYyNT4gLSBXZSBjYW4gcGhhc2UgaXQgb3V0IG9uY2UgQXBlcnR1cmUg
Y2FuIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igb24gdGhlaXIgZW5kCiAgICAgaWYgKCFXZWJLaXRM
aW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9BUEVSVFVSRV9RVUlS
SykgJiYgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRv
U3RyaW5nOkAiY29tLmFwcGxlLkFwZXJ0dXJlIl0pCiAgICAgICAgIHJldHVybjsKQEAgLTc5MCw2
ICs4MDcsMzUgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaQogI2Vu
ZGlmCiB9CiAKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQor
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoY29uc3QgRmxvYXRSZWN0
JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIEVkaXRvciogZWRpdG9yKSB7Cisg
ICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKKworICAgIE5TUmVjdCBib3VuZGluZ0Jv
eEFzTlNSZWN0ID0gYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nOworICAgIE5TUmVjdCB3ZWJW
aWV3RnJhbWUgPSBtX3dlYlZpZXcuZnJhbWU7CisgICAgYm91bmRpbmdCb3hBc05TUmVjdC5vcmln
aW4ueSA9IHdlYlZpZXdGcmFtZS5zaXplLmhlaWdodC1OU01heFkoYm91bmRpbmdCb3hBc05TUmVj
dCk7CisKKyAgICAvLyBOZWVkIHRvIGV4cGxpY2l0bHkgdXNlIHRoZXNlIGxvY2FsIE5TU3RyaW5n
IG9iamVjdHMsIGJlY2F1c2UgdGhlIEMrKyByZWZlcmVuY2VzIG1heSBiZSBpbnZhbGlkYXRlZCBi
eSB0aGUgdGltZSB0aGUgYmxvY2sgYmVsb3cgaXMgZXhlY3V0ZWQuCisgICAgTlNTdHJpbmcgKnJl
cGxhY2VkU3RyaW5nQXNOU1N0cmluZyA9IHJlcGxhY2VkU3RyaW5nOworICAgIE5TU3RyaW5nICpy
ZXBsYWNlbWVudFN0cmluZ0FzTlNTdHJpbmcgPSByZXBsYWNlbWVudFN0cmluZzsKKworICAgIG1f
Y29ycmVjdGlvblBhbmVsVGFnID0gW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJd
IHNob3dDb3JyZWN0aW9uOnJlcGxhY2VtZW50U3RyaW5nQXNOU1N0cmluZyBmb3JTdHJpbmdJblJl
Y3Q6Ym91bmRpbmdCb3hBc05TUmVjdCB2aWV3Om1fd2ViVmlldyBjb21wbGV0aW9uSGFuZGxlcjpe
KEJPT0wgYWNjZXB0ZWQpIHsKKyAgICAgICAgaWYgKCFhY2NlcHRlZCkgeworICAgICAgICAgICAg
W1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHJlY29yZFJlc3BvbnNlOk5TQ29y
cmVjdGlvblJlc3BvbnNlUmVqZWN0ZWQgdG9Db3JyZWN0aW9uOnJlcGxhY2VtZW50U3RyaW5nQXNO
U1N0cmluZyBmb3JXb3JkOnJlcGxhY2VkU3RyaW5nQXNOU1N0cmluZyBsYW5ndWFnZTpuaWwgaW5T
cGVsbERvY3VtZW50V2l0aFRhZzpbbV93ZWJWaWV3IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnXV07
CisgICAgICAgICAgICBlZGl0b3ItPmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbigpOworICAgICAg
ICB9CisgICAgfV07Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlv
blBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKQoreworICAgIGlmIChtX2NvcnJlY3Rpb25Q
YW5lbFRhZyA+PSAwKSB7CisgICAgICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVj
a2VyXSBkaXNtaXNzQ29ycmVjdGlvbjptX2NvcnJlY3Rpb25QYW5lbFRhZyBhY2NlcHRDb3JyZWN0
aW9uOmNvcnJlY3Rpb25BY2NlcHRlZF07CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsVGFnID0g
LTE7CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVs
bGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7
CiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHVwZGF0ZVNwZWxsaW5n
UGFuZWxXaXRoTWlzc3BlbGxlZFdvcmQ6bWlzc3BlbGxlZFdvcmRdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66241</attachid>
            <date>2010-09-01 11:56:05 -0700</date>
            <delta_ts>2010-10-14 11:37:29 -0700</delta_ts>
            <desc>Proposed patch (v7)</desc>
            <filename>WebKitAutoCorrection.patch</filename>
            <type>text/plain</type>
            <size>56966</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAxIEBACisyMDEwLTA4LTMxICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBhdXRvY29ycmVjdGlvbiBVSSBvbiBNYWMgT1MgWC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTU4CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83Mjk5NjIxPgorCisgICAgICAgIFNldmVyYWwgbmV3IG1lbWJlciBtZXRob2RzIGFyZSBhZGRl
ZCB0byBFZGl0b3JDbGllbnQgZm9yIGNvbW11bmljYXRpb24KKyAgICAgICAgYmV0d2VlbiBXZWJD
b3JlIGFuZCBXZWJLaXQuIEEgbmV3IGhhbmRsZXIsIGV4ZWN1dGVDYW5jZWxPcGVyYXRpb24oKSwg
aXMKKyAgICAgICAgYWRkZWQgdG8gRWRpdG9yQ29tbWFuZC5jcHAgc28gdGhhdCBXZWJDb3JlIGNh
biBpbnRlcmNlcHQgdGhlIEVTQyBrZXkgZXZlbnQKKyAgICAgICAgdG8gZGlzbWlzcyBhdXRvY29y
cmVjdGlvbiBVSS4gQSBuZXcgRG9jdW1lbnRNYXJrZXIgdmFsdWUsIFJlamVjdGVkQ29ycmVjdGlv
biwKKyAgICAgICAgaXMgYWRkZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY29ycmVjdGlvbnMgdGhh
dCB1c2VyIGhhcyByZWplY3RlZCwgc28gdGhhdCBpdAorICAgICAgICB3aWxsIG5vdCBiZSBzdWdn
ZXN0ZWQgYWdhaW4gbGF0ZXIuIFRoZSBhdXRvY29ycmVjdGlvbiBpcyBkcml2ZW4gYnkgYSB0aW1l
ci4KKyAgICAgICAgRXZlcnkgdGltZSB0aGUgZWRpdG9yIGluc2VydHMgYSBuZXcgbGV0dGVyLCB0
aGUgdGltZXIgaXMgcmVzZXQuIElmIHRoZSB0aW1lcgorICAgICAgICBmaXJlcywgaXQgbWVhbnMg
bmVpdGhlciBoYXMgdXNlciBlbnRlcmVkIGFueSBuZXcgbGV0dGVyIGZvciBjdXJyZW50IHdvcmQs
IG5vcgorICAgICAgICBoYXMgaGUgZW50ZXJlZCB3aGl0ZXNwYWNlIG9yIHB1bmN0dWF0aW9uIHRv
IGNvbXBsZXRlIHRoZSB3b3JkLiBJbiB0aGlzIGNhc2UsCisgICAgICAgIHdlIHF1ZXJ5IGZvciBh
dXRvY29ycmVjdGlvbi4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBVcGRhdGVkCisKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXIuaDogQWRkZWQgUmVqZWN0ZWRDb3JyZWN0aW9uIHRv
IGluZGljYXRlIHdvcmQgb24gd2hpY2ggdXNlcgorICAgICAgICAgIGhhcyByZWplY3RlZCBhdXRv
Y29ycmVjdGlvbi4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6RWRpdG9yKTogSW5pdGlhbGl6ZSBhdXRvY29ycmVjdGlvbiB0aW1lci4K
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6fkVkaXRvcik6IE1ha2Ugc3VyZSBhdXRvY29ycmVj
dGlvbiBVSSBpcyBkaXNtaXNzZWQgYmVmb3JlCisgICAgICAgICAgZGVzdHJveWluZyBFZGl0b3Ig
b2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmdUb1Bvc2l0aW9uKTogQWRvcHRlZCBuZXcgc2lnbmF0dXJlCisgICAgICAgICAgb2YgbWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcygpLgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKTogQ29u
c29saWRhdGVkIGFsbAorICAgICAgICAgIGJvb2xlYW4gYXJndW1lbnRzIGludG8gb25lIGJpdGZp
ZWxkLiBUaGlzIGltcHJvdmVzIHJlYWRhYmlsaXR5IGFuZCBhbGxvd3MgdXMgdG8KKyAgICAgICAg
ICBwYXNzIGluIGEgYml0IHRvIGluZGljYXRlIHdoZXRoZXIgd2Ugd2FudCB0byBzaG93IGF1dG9j
b3JyZWN0aW9uIFVJLiBBbHNvIGFkZGVkCisgICAgICAgICAgY29kZSB0byBzaG93IGF1dG9jb3Jy
ZWN0aW9uIFVJIGlmIGl0IGlzIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIpOiBBZG9wdGVkIG5ldyBzaWduYXR1cmUgb2YK
KyAgICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKCkuCisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpOiBDaGVj
ayB0byBzZWUgaWYgd2Ugc2hvdWxkIHNob3cKKyAgICAgICAgICBhdXRvY29ycmVjdGlvbiBVSSB3
aGVuIHVzZXIgcGF1c2VzIGR1cmluZyB0eXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbik6IFVwZGF0ZSB1c2VyIGRpY3Rpb25hcnkgd2hlbiBh
biBhdXRvY29ycmVjdGlvbiBpcyByZWplY3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcik6IFN0YXJ0IGF1dG9jb3JyZWN0aW9uIHRpbWVyLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOiBEaXNtaXNz
IGF1dG9jb3JyZWN0aW9uIFVJIHdoZW4gRVNDIGtleSBpcyBwcmVzc2VkLgorCisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuaDogQWRkZWQgYXV0b2NvcnJlY3Rpb24gcmVsYXRlZCBtZW1iZXIgbWV0
aG9kcyBhbmQgdmFyaWFibGVzLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVDYW5jZWxPcGVyYXRpb24pOiBIYW5kbGUgRVND
IGtleSBldmVudC4gRGlzbWlzcyBhdXRvY29ycmVjdGlvbiBVSS4KKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUNvbW1hbmRNYXApOiBVcGRhdGVkIGZvciBleGVjdXRlQ2FuY2VsT3BlcmF0aW9uKCku
CisKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKTogUmVzZXQgYXV0
b2NvcnJlY3Rpb24gdGltZXIgYWZ0ZXIgaW5zZXJ0aW9uLgorCisgICAgICAgICogbG9hZGVyL0Vt
cHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNob3dD
b3JyZWN0aW9uUGFuZWwpOiBEdW1teSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkVtcHR5RWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKTogRGl0dG8KKworICAg
ICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6IEFkZGVkIG1ldGhvZHMgZm9yIGNvbW11bmljYXRp
b24gYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgcmVnYXJkaW5nIGF1dG9jb3JyZWN0aW9uLgor
CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6IFJlbW92ZSBSZXBsYWNlbWVudCBtYXJrZXIgd2hlcmUg
d2UgdXNlZCB0byBvbmx5IHJlbW92ZSBTcGVsbGluZworICAgICAgICAgIG1hcmssIGJlY2F1c2Ug
d2hlbmV2ZXIgd2UgbmVlZCB0byByZW1vdmUgc3BlbGxpbmcgdW5kZXJsaW5lIHdlIGFsc28gc2hv
dWxkIHJlbW92ZSBhdXRvY29ycmVjdGlvbiB1bmRlcmxpbmUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDogQWRkZWQgZW51bSBUZXh0Q2hlY2tpbmdMaW5l
U3R5bGUgdG8gc3BlY2lmeSB0aGUgdW5kZXJsaW5lCisgICAgICAgICAgZm9yIGRpZmZlcmVudCB0
eXBlIG9mIHRleHQgY2hlY2tpbmcgcmVzdWx0LiBSZXBsYWNlZCBkcmF3TGluZUZvck1pc3NwZWxs
aW5nT3JCYWRHcmFtbWFyKCkgd2l0aAorICAgICAgICAgIGRyYXdMaW5lRm9yVGV4dENoZWNraW5n
KCksIHdoaWNoIGFsbG93cyBhdXRvY29ycmVjdGlvbiB0byBoYXZlIGRpZmZlcmVudCBpbmRpY2F0
aW9uIGZyb20gbWlzc3BlbGxpbmcKKyAgICAgICAgICBhbmQgZ3JhbW1hdGljYWwgZXJyb3IuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENo
ZWNraW5nKTogUmVwbGFjZWQgZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcigpIHdp
dGggZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0bworCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0
bworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9w
ZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dENoZWNraW5nKTogRGl0dG8KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0bworCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBEaXR0bworCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOiBE
aXR0bworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0
V2luY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHRDaGVja2luZyk6IERpdHRvCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9H
cmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKTogRGl0dG8KKworICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRleHRDaGVja2luZ0xpbmVTdHls
ZUZvck1hcmtlclR5cGUpOiBSZXR1cm4gbGluZSBzdHlsZSBmb3IgYSBnaXZlbiBkb2N1bWVudCBt
YXJrZXIgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U3BlbGxp
bmdPckdyYW1tYXJNYXJrZXIpOiAgUmVwbGFjZWQgZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFk
R3JhbW1hcigpIHdpdGggZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoKS4KKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKTogSGFuZGxlIG5ldyBtYXJr
ZXIgdmFsdWUsIFJlamVjdGVkQ29ycmVjdGlvbi4KKwogMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5n
LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTYyMSw2ICs2MjEsNyBAQCBfX1pON1dlYkNvcmU2RWRpdG9yMjFh
cHBseVN0eWxlVG9TZWxlY3RpCiBfX1pON1dlYkNvcmU2RWRpdG9yMjFpc1NlbGVjdGlvbk1pc3Nw
ZWxsZWRFdgogX19aTjdXZWJDb3JlNkVkaXRvcjIzc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb25FTlNf
MTZXcml0aW5nRGlyZWN0aW9uRQogX19aTjdXZWJDb3JlNkVkaXRvcjI0YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nRWIKK19fWk43V2ViQ29yZTZFZGl0b3IyNGhhbmRsZVJlamVjdGVkQ29ycmVjdGlv
bkV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjRpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWxFdgogX19a
TjdXZWJDb3JlNkVkaXRvcjI2ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJD
b3JlNkVkaXRvcjI2aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgpJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudE1h
cmtlci5oCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDggQEAgc3RydWN0IERvY3VtZW50TWFya2VyIHsK
ICAgICAgICAgU3BlbGxpbmcsCiAgICAgICAgIEdyYW1tYXIsCiAgICAgICAgIFRleHRNYXRjaCwK
LSAgICAgICAgUmVwbGFjZW1lbnQKKyAgICAgICAgUmVwbGFjZW1lbnQsCisgICAgICAgIFJlamVj
dGVkQ29ycmVjdGlvbgogICAgIH07CiAKICAgICBNYXJrZXJUeXBlIHR5cGU7CkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA1MywxMSArMTA1MywxNiBAQCBFZGl0b3I6OkVkaXRvcihGcmFt
ZSogZnJhbWUpCiAgICAgLy8gVGhpcyBpcyBvZmYgYnkgZGVmYXVsdCwgc2luY2UgbW9zdCBlZGl0
b3JzIHdhbnQgdGhpcyBiZWhhdmlvciAodGhpcyBtYXRjaGVzIElFIGJ1dCBub3QgRkYpLgogICAg
ICwgbV9zaG91bGRTdHlsZVdpdGhDU1MoZmFsc2UpCiAgICAgLCBtX2tpbGxSaW5nKGFkb3B0UHRy
KG5ldyBLaWxsUmluZykpCi17IAorICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAm
RWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKQorewogfQogCiBFZGl0b3I6On5FZGl0
b3IoKQogeworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOworI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yOjpjbGVh
cigpCkBAIC0yMzUxLDIyICsyMzU2LDI5IEBAIGJvb2wgRWRpdG9yOjpzcGVsbGluZ1BhbmVsSXNT
aG93aW5nKCkKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1Bvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCkKIHsKICNpZiBQTEFURk9STShNQUMpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KQotICAgIGJvb2wgbWFya1NwZWxsaW5nID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoKTsKLSAgICBib29sIG1hcmtHcmFtbWFyID0gbWFya1NwZWxsaW5nICYmIGlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCgpOwotICAgIGJvb2wgcGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50
cyA9IGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNBdXRv
bWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAobWFya1NwZWxsaW5nICYm
IGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKTsKLSAgICBpZiAoIW1hcmtT
cGVsbGluZyAmJiAhcGVyZm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cykKKyAgICBUZXh0Q2hl
Y2tpbmdPcHRpb25zIHRleHRDaGVja2luZ09wdGlvbnMgPSAwOworICAgIGlmIChpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9
IE1hcmtTcGVsbGluZzsKKworICAgIGlmIChpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5h
YmxlZCgpCisgICAgICAgIHx8IGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQorICAg
ICAgICB8fCBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgfHwg
aXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkKKyAgICAgICAgfHwgKCh0ZXh0Q2hl
Y2tpbmdPcHRpb25zICYgTWFya1NwZWxsaW5nKSAmJiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVj
dGlvbkVuYWJsZWQoKSkpCisgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMgfD0gUGVyZm9ybVJl
cGxhY2VtZW50OworCisgICAgaWYgKCF0ZXh0Q2hlY2tpbmdPcHRpb25zICYgKE1hcmtTcGVsbGlu
ZyB8IFBlcmZvcm1SZXBsYWNlbWVudCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKworICAgIGlm
IChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKKyAgICAgICAgdGV4dENoZWNraW5nT3B0aW9u
cyB8PSBNYXJrR3JhbW1hcjsKKwogICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9
IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQocCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBl
bmRPZldvcmQocCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7Ci0gICAgaWYgKG1hcmtHcmFtbWFy
KSB7CisgICAgaWYgKHRleHRDaGVja2luZ09wdGlvbnMgJiBNYXJrR3JhbW1hcikgewogICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGVkU2VudGVuY2UgPSBWaXNpYmxlU2VsZWN0aW9uKHN0
YXJ0T2ZTZW50ZW5jZShwKSwgZW5kT2ZTZW50ZW5jZShwKSk7Ci0gICAgICAgIG1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModHJ1ZSwgYWRqYWNlbnRXb3Jkcy50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpLCB0cnVlLCBzZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCksIHBlcmZvcm1UZXh0Q2hlY2tpbmdSZXBsYWNlbWVudHMpOworICAgICAgICBt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlv
bnMsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgc2VsZWN0ZWRTZW50
ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKG1hcmtTcGVsbGluZywgYWRq
YWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBmYWxzZSwgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1l
bnRzKTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0
ZXh0Q2hlY2tpbmdPcHRpb25zLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiAgICAgfQogI2Vs
c2UKICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNTEw
LDEzICsyNTIyLDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2gK
ICAgICByZXR1cm4gY2hhcmFjdGVyID09ICdcJycgfHwgY2hhcmFjdGVyID09IHJpZ2h0U2luZ2xl
UXVvdGF0aW9uTWFyayB8fCBjaGFyYWN0ZXIgPT0gaGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW07
CiB9CiAKLXZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKGJvb2wgbWFya1NwZWxsaW5nLCBSYW5nZSogc3BlbGxpbmdSYW5nZSwgYm9vbCBtYXJrR3Jh
bW1hciwgUmFuZ2UqIGdyYW1tYXJSYW5nZSwgYm9vbCBwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFj
ZW1lbnRzKQordm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBSYW5nZSogc3Bl
bGxpbmdSYW5nZSwgUmFuZ2UqIGdyYW1tYXJSYW5nZSkKIHsKKyAgICBib29sIHNob3VsZE1hcmtT
cGVsbGluZyA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBNYXJrU3BlbGxpbmc7CisgICAgYm9vbCBz
aG91bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBNYXJrR3JhbW1hcjsKKyAg
ICBib29sIHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBQ
ZXJmb3JtUmVwbGFjZW1lbnQ7CisgICAgYm9vbCBzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsID0g
dGV4dENoZWNraW5nT3B0aW9ucyAmIFNob3dDb3JyZWN0aW9uUGFuZWw7CisKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHNlbGVjdGlvbnMgYWxyZWFkeSBleHBhbmRlZCB0byB3
b3JkIGJvdW5kYXJpZXMuCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKCFjbGll
bnQoKSB8fCAhc3BlbGxpbmdSYW5nZSB8fCAobWFya0dyYW1tYXIgJiYgIWdyYW1tYXJSYW5nZSkp
CisgICAgaWYgKCFjbGllbnQoKSB8fCAhc3BlbGxpbmdSYW5nZSB8fCAoc2hvdWxkTWFya0dyYW1t
YXIgJiYgIWdyYW1tYXJSYW5nZSkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIC8vIElm
IHdlJ3JlIG5vdCBpbiBhbiBlZGl0YWJsZSBub2RlLCBiYWlsLgogICAgIE5vZGUqIGVkaXRhYmxl
Tm9kZSA9IHNwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgaWYgKCFlZGl0YWJs
ZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKQEAgLTI1MzksOCAr
MjU1Niw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICBi
b29sIGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMgPSBmYWxzZTsKICAgICBT
dHJpbmcgcGFyYWdyYXBoU3RyaW5nOwogICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2U7
Ci0gICAgCi0gICAgaWYgKG1hcmtHcmFtbWFyKSB7CisKKyAgICBpZiAoc2hvdWxkTWFya0dyYW1t
YXIpIHsKICAgICAgICAgLy8gVGhlIHNwZWxsaW5nIHJhbmdlIHNob3VsZCBiZSBjb250YWluZWQg
aW4gdGhlIHBhcmFncmFwaC1hbGlnbmVkIGV4dGVuc2lvbiBvZiB0aGUgZ3JhbW1hciByYW5nZS4K
ICAgICAgICAgcGFyYWdyYXBoUmFuZ2UgPSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShn
cmFtbWFyUmFuZ2UsIGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOwog
ICAgICAgICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFn
cmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdl
LT5zdGFydFBvc2l0aW9uKCksIHNwZWxsaW5nUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CkBAIC0y
NTUxLDEwICsyNTY4LDEwIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3IKICAgICB9CiAgICAgc3BlbGxpbmdSYW5nZUVuZE9mZnNldCA9IHNwZWxsaW5nUmFuZ2VTdGFy
dE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3BlbGxpbmdSYW5nZSk7CiAgICAg
cGFyYWdyYXBoTGVuZ3RoID0gcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpOwotICAgIGlmIChwYXJh
Z3JhcGhMZW5ndGggPD0gMCB8fCAoc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0ID49IHNwZWxsaW5n
UmFuZ2VFbmRPZmZzZXQgJiYgKCFtYXJrR3JhbW1hciB8fCBncmFtbWFyUmFuZ2VTdGFydE9mZnNl
dCA+PSBncmFtbWFyUmFuZ2VFbmRPZmZzZXQpKSkKKyAgICBpZiAocGFyYWdyYXBoTGVuZ3RoIDw9
IDAgfHwgKHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCA+PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0
ICYmICghc2hvdWxkTWFya0dyYW1tYXIgfHwgZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQgPj0gZ3Jh
bW1hclJhbmdlRW5kT2Zmc2V0KSkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAocGVy
Zm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cykgeworCisgICAgaWYgKHNob3VsZFBlcmZvcm1S
ZXBsYWNlbWVudCkgewogICAgICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
blR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgewogICAgICAgICAg
ICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBzbyB3ZSBjYW4gcmVzdG9y
ZSBpdCBsYXRlciBpZiBuZWVkZWQKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gb2Zmc2V0QXNS
YW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+
ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSk7CkBAIC0yNTcwLDE0ICsyNTg3LDE2IEBAIHZvaWQgRWRpdG9y
OjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KLSAgICAKKwogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAg
ICAgdWludDY0X3QgY2hlY2tpbmdUeXBlcyA9IDA7Ci0gICAgaWYgKG1hcmtTcGVsbGluZykKKyAg
ICBpZiAoc2hvdWxkTWFya1NwZWxsaW5nKQogICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRD
aGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICBpZiAobWFya0dyYW1tYXIpCisgICAgaWYgKHNob3Vs
ZE1hcmtHcmFtbWFyKQogICAgICAgICBjaGVja2luZ1R5cGVzIHw9IFRleHRDaGVja2luZ1R5cGVH
cmFtbWFyOwotICAgIGlmIChwZXJmb3JtVGV4dENoZWNraW5nUmVwbGFjZW1lbnRzKSB7CisgICAg
aWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCisgICAgICAgIGNoZWNraW5nVHlwZXMgfD0g
VGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247CisgICAgaWYgKHNob3VsZFBlcmZvcm1SZXBsYWNl
bWVudCkgewogICAgICAgICBpZiAoaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpKQog
ICAgICAgICAgICAgY2hlY2tpbmdUeXBlcyB8PSBUZXh0Q2hlY2tpbmdUeXBlTGluazsKICAgICAg
ICAgaWYgKGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkpCkBAIC0yNTg2LDIw
ICsyNjA1LDI2IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAg
ICAgICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4dENoZWNraW5nVHlwZURhc2g7CiAgICAgICAg
IGlmIChpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKSkKICAgICAgICAgICAgIGNo
ZWNraW5nVHlwZXMgfD0gVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50OwotICAgICAgICBpZiAo
bWFya1NwZWxsaW5nICYmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQor
ICAgICAgICBpZiAoc2hvdWxkTWFya1NwZWxsaW5nICYmIGlzQXV0b21hdGljU3BlbGxpbmdDb3Jy
ZWN0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgY2hlY2tpbmdUeXBlcyB8PSBUZXh0Q2hlY2tp
bmdUeXBlQ29ycmVjdGlvbjsKICAgICB9CiAgICAgY2xpZW50KCktPmNoZWNrVGV4dE9mUGFyYWdy
YXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaExlbmd0aCwgY2hlY2tp
bmdUeXBlcywgcmVzdWx0cyk7Ci0gICAgCisKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgLy8gSWYgdGhpcyBjaGVja2lu
ZyBpcyBvbmx5IGZvciBzaG93aW5nIGNvcnJlY3Rpb24gcGFuZWwsIHdlIHNob3VsZG4ndCBib3Ro
ZXIgdG8gbWFyayBtaXNzcGVsbGluZ3MuCisgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFu
ZWwpCisgICAgICAgIHNob3VsZE1hcmtTcGVsbGluZyA9IGZhbHNlOworI2VuZGlmCisKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAgICBj
b25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwogICAgICAgICBp
bnQgcmVzdWx0TG9jYXRpb24gPSByZXN1bHQtPmxvY2F0aW9uICsgb2Zmc2V0RHVlVG9SZXBsYWNl
bWVudDsKICAgICAgICAgaW50IHJlc3VsdExlbmd0aCA9IHJlc3VsdC0+bGVuZ3RoOwotICAgICAg
ICBpZiAobWFya1NwZWxsaW5nICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmcgJiYgcmVzdWx0TG9jYXRpb24gPj0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0ICYmIHJl
c3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoIDw9IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQpIHsK
KyAgICAgICAgaWYgKHNob3VsZE1hcmtTcGVsbGluZyAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENo
ZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdExvY2F0aW9uID49IHNwZWxsaW5nUmFuZ2VTdGFy
dE9mZnNldCAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA8PSBzcGVsbGluZ1Jhbmdl
RW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1
bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdS
YW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2Uoc3BlbGxpbmdSYW5nZSwgcmVzdWx0TG9jYXRp
b24gLSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQsIHJlc3VsdExlbmd0aCk7CiAgICAgICAgICAg
ICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpT
cGVsbGluZyk7Ci0gICAgICAgIH0gZWxzZSBpZiAobWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBl
ID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHJlc3VsdExvY2F0aW9uIDwgZ3JhbW1hclJh
bmdlRW5kT2Zmc2V0ICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoID4gZ3JhbW1hclJh
bmdlU3RhcnRPZmZzZXQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRNYXJrR3JhbW1hciAm
JiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcmVzdWx0TG9jYXRp
b24gPCBncmFtbWFyUmFuZ2VFbmRPZmZzZXQgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5n
dGggPiBncmFtbWFyUmFuZ2VTdGFydE9mZnNldCkgewogICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgcmVzdWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgR3JhbW1hckRldGFpbCogZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tq
XTsKQEAgLTI2MDksNyArMjYzNCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3IKICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5l
cihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC0+dXNlckRlc2NyaXB0aW9uKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocGVy
Zm9ybVRleHRDaGVja2luZ1JlcGxhY2VtZW50cyAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExl
bmd0aCA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0
TGVuZ3RoID49IHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldAorICAgICAgICB9IGVsc2UgaWYgKChz
aG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgfHwgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCkgJiYg
cmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAm
JiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA+PSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZz
ZXQKICAgICAgICAgICAgICAgICAgICAgJiYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdU
eXBlTGluawogICAgICAgICAgICAgICAgICAgICB8fCByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNr
aW5nVHlwZVF1b3RlCiAgICAgICAgICAgICAgICAgICAgIHx8IHJlc3VsdC0+dHlwZSA9PSBUZXh0
Q2hlY2tpbmdUeXBlRGFzaApAQCAtMjY0MCw3ICsyNjY1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAgICAgICAgICAgICAgIHNpemVfdCBtYXJrZXJDb3Vu
dCA9IG1hcmtlcnMuc2l6ZSgpOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbWFya2VyQ291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBEb2N1bWVu
dE1hcmtlciYgbWFya2VyID0gbWFya2Vyc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1h
cmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCAmJiBzdGF0aWNfY2FzdDxp
bnQ+KG1hcmtlci5zdGFydE9mZnNldCkgPCBlbmRPZmZzZXQgJiYgc3RhdGljX2Nhc3Q8aW50Piht
YXJrZXIuZW5kT2Zmc2V0KSA+IHN0YXJ0T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICgobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlci50
eXBlID09IERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24pICYmIHN0YXRpY19jYXN0
PGludD4obWFya2VyLnN0YXJ0T2Zmc2V0KSA8IGVuZE9mZnNldCAmJiBzdGF0aWNfY2FzdDxpbnQ+
KG1hcmtlci5lbmRPZmZzZXQpID4gc3RhcnRPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvUmVwbGFjZW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNjQ4LDcgKzI2NzMsNyBAQCB2b2lkIEVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
ZG9SZXBsYWNlbWVudCAmJiBzZWxlY3Rpb25Ub1JlcGxhY2UgIT0gbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpKSB7CisgICAgICAgICAgICBpZiAoZG9SZXBsYWNlbWVudCAmJiAhc2hv
dWxkU2hvd0NvcnJlY3Rpb25QYW5lbCAmJiBzZWxlY3Rpb25Ub1JlcGxhY2UgIT0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUt
PnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9S
ZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CkBA
IC0yNjU2LDMwICsyNjgxLDUyIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3IKICAgICAgICAgICAgICAgICAgICAgZG9SZXBsYWNlbWVudCA9IGZhbHNlOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2Vk
U3RyaW5nOwogICAgICAgICAgICAgaWYgKGRvUmVwbGFjZW1lbnQpIHsKICAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVMaW5rKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hseSgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YXBwbHlDb21tYW5kKENyZWF0ZUxpbmtDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQo
KSwgcmVzdWx0LT5yZXBsYWNlbWVudCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2Fu
RWRpdCgpICYmIHNob3VsZEluc2VydFRleHQocmVzdWx0LT5yZXBsYWNlbWVudCwgcmFuZ2VUb1Jl
cGxhY2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkgewotICAgICAgICAgICAgICAg
ICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXN1bHQtPnJl
cGxhY2VtZW50LCBmYWxzZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ1Jh
bmdlRW5kT2Zmc2V0ICs9IHJlcGxhY2VtZW50TGVuZ3RoIC0gcmVzdWx0TGVuZ3RoOwotICAgICAg
ICAgICAgICAgICAgICBvZmZzZXREdWVUb1JlcGxhY2VtZW50ICs9IHJlcGxhY2VtZW50TGVuZ3Ro
IC0gcmVzdWx0TGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24g
PCBzZWxlY3Rpb25PZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25PZmZz
ZXQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhIG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25z
IGNhbiBlYXNpbHkgYmUgdW5kb25lIGFuZCB3b24ndCBiZSByZS1jb3JyZWN0ZWQuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UgPSBUZXh0SXRlcmF0
b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlLmdldCgpLCByZXN1bHRMb2NhdGlvbiwgcmVwbGFj
ZW1lbnRMZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRS
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCByZXBsYWNlZFN0cmluZyk7
CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQorICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5l
bCAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA9PSBzcGVsbGluZ1JhbmdlRW5kT2Zm
c2V0ICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBzaG93IHRoZSBjb3JyZWN0aW9uIHBhbmVs
IG9uIHRoZSBsYXN0IHdvcmQuCisgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRR
dWFkPiB0ZXh0UXVhZHM7CisgICAgICAgICAgICAgICAgICAgICAgICByYW5nZVRvUmVwbGFjZS0+
dGV4dFF1YWRzKHRleHRRdWFkcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Rmxv
YXRRdWFkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4dFF1YWRzLmVuZCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgRmxvYXRSZWN0IHRvdGFsQm91bmRpbmdCb3g7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKFZlY3RvcjxGbG9hdFF1YWQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRl
eHRRdWFkcy5iZWdpbigpOyBpdCA8IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b3RhbEJvdW5kaW5nQm94LnVuaXRlKGl0LT5ib3VuZGluZ0JveCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24gPSByYW5nZVRv
UmVwbGFjZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlD
b3JyZWN0aW9uID0gcmVwbGFjZWRTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICBjbGll
bnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbCh0b3RhbEJvdW5kaW5nQm94LCBtX3N0cmluZ1RvQmVS
ZXBsYWNlZEJ5Q29ycmVjdGlvbiwgcmVzdWx0LT5yZXBsYWNlbWVudCwgdGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkb1JlcGxhY2VtZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBpZiAoZG9SZXBsYWNlbWVudCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlc3VsdC0+
cmVwbGFjZW1lbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVs
bGluZ1JhbmdlRW5kT2Zmc2V0ICs9IHJlcGxhY2VtZW50TGVuZ3RoIC0gcmVzdWx0TGVuZ3RoOwor
ICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0RHVlVG9SZXBsYWNlbWVudCArPSByZXBsYWNl
bWVudExlbmd0aCAtIHJlc3VsdExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHRMb2NhdGlvbiA8IHNlbGVjdGlvbk9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxlY3Rpb25PZmZzZXQgKz0gcmVwbGFjZW1lbnRMZW5ndGggLSByZXN1bHRMZW5ndGg7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2lu
Z1R5cGVDb3JyZWN0aW9uKSB7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjbGllbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50KCktPmRp
c21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBZGQgYSBtYXJrZXIgc28gdGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5IGJl
IHVuZG9uZSBhbmQgd29uJ3QgYmUgcmUtY29ycmVjdGVkLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFu
Z2UocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0
aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250
YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCByZXBsYWNlZFN0cmluZyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAo
c2VsZWN0aW9uQ2hhbmdlZCkgewogICAgICAgICAvLyBSZXN0b3JlIHRoZSBjYXJldCBwb3NpdGlv
biBpZiB3ZSBoYXZlIG1hZGUgYW55IHJlcGxhY2VtZW50cwogICAgICAgICBzZXRFbmQocGFyYWdy
YXBoUmFuZ2UuZ2V0KCksIGVuZE9mUGFyYWdyYXBoKHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKSk7CkBAIC0yNzIxLDcgKzI3NjgsMTAgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbQogI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh0cnVlLCBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBtYXJr
R3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgZ3JhbW1hclNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBmYWxzZSk7CisgICAgVGV4dENoZWNraW5nT3B0aW9u
cyB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gTWFya1NwZWxsaW5nOworICAgIGlmIChtYXJrR3JhbW1h
ciAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKKyAgICAgICAgdGV4dENoZWNraW5nT3B0
aW9ucyB8PSBNYXJrR3JhbW1hcjsKKyAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSk7CiAjZWxzZQogICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwog
ICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3BlbGxpbmdS
YW5nZSk7CkBAIC0yNzMwLDYgKzI3ODAsNDUgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbQogI2VuZGlmCiB9CiAKK3ZvaWQgRWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxU
aW1lckZpcmVkKFRpbWVyPEVkaXRvcj4qKQoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNl
bGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3Jk
KHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGph
Y2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CisgICAgbWFya0FsbE1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhNYXJrU3BlbGxpbmcgfCBTaG93Q29ycmVjdGlv
blBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOworI2Vu
ZGlmCit9CisKK3ZvaWQgRWRpdG9yOjpoYW5kbGVSZWplY3RlZENvcnJlY3Rpb24oKQoreworICAg
IFJhbmdlKiByZXBsYWNlZFJhbmdlID0gbV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbi5n
ZXQoKTsKKyAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSBy
ZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJl
cGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRk
TWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24s
IG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uKTsKK30KKwordm9pZCBFZGl0b3I6OnN0
YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKQoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBzdGF0aWMgY29uc3QgZG91
YmxlIGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwgPSAwLjM7CisgICAgaWYgKGNsaWVudCgp
KQorICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKKyAgICBp
ZiAoaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCisgICAgICAgIG1fY29y
cmVjdGlvblBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2
YWwpOworI2VuZGlmCit9CisKK3ZvaWQgRWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24oKQor
eworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1df
TEVPUEFSRCkKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29y
cmVjdGlvblBhbmVsKGZhbHNlKTsKKyNlbmRpZgorfQorCiBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogewogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCwxNSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQoKTsKICAgICBib29sIGlzQXV0b21hdGlj
U3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOwogICAgIHZvaWQgdG9nZ2xlQXV0b21hdGljU3Bl
bGxpbmdDb3JyZWN0aW9uKCk7Ci0gICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKGJvb2wgbWFya1NwZWxsaW5nLCBSYW5nZSogc3BlbGxpbmdSYW5nZSwgYm9v
bCBtYXJrR3JhbW1hciwgUmFuZ2UqIGdyYW1tYXJSYW5nZSwgYm9vbCBwZXJmb3JtVGV4dENoZWNr
aW5nUmVwbGFjZW1lbnRzKTsKKyAgICBlbnVtIFRleHRDaGVja2luZ09wdGlvbkZsYWdzIHsKKyAg
ICAgICAgTWFya1NwZWxsaW5nID0gMSA8PCAwLAorICAgICAgICBNYXJrR3JhbW1hciA9IDEgPDwg
MSwKKyAgICAgICAgUGVyZm9ybVJlcGxhY2VtZW50ID0gMSA8PCAyLAorICAgICAgICBTaG93Q29y
cmVjdGlvblBhbmVsID0gMSA8PCAzLAorICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25lZCBUZXh0
Q2hlY2tpbmdPcHRpb25zOworCisgICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMsIFJhbmdlKiBzcGVsbGluZ1JhbmdlLCBS
YW5nZSogZ3JhbW1hclJhbmdlKTsKICAgICB2b2lkIGNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5n
KGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpOwogI2VuZGlmCiAgICAgdm9pZCBhZHZhbmNl
VG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbiA9IGZhbHNlKTsKQEAg
LTI5NCw5ICszMDIsMTMgQEAgcHVibGljOgogICAgIGJvb2wgaW5zaWRlVmlzaWJsZUFyZWEoY29u
c3QgSW50UG9pbnQmKSBjb25zdDsKICAgICBib29sIGluc2lkZVZpc2libGVBcmVhKFJhbmdlKikg
Y29uc3Q7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4dFZpc2libGVSYW5nZShSYW5nZSosIGNv
bnN0IFN0cmluZyYsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3cmFwRmxhZyk7
Ci0gICAgCisKICAgICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFuZ2UqLCBib29sIHByZXBlbmQpOwog
CisgICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKTsKKyAgICB2b2lkIHN0YXJ0Q29ycmVj
dGlvblBhbmVsVGltZXIoKTsKKyAgICB2b2lkIGhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbigpOwor
CiAgICAgdm9pZCBwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50Piwg
Ym9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CiAgICAgdm9pZCBwYXN0ZUFzUGxh
aW5UZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc21hcnRSZXBsYWNlKTsKIApAQCAtMzE4LDYgKzMz
MCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5j
ZTsKICAgICBib29sIG1fc2hvdWxkU3R5bGVXaXRoQ1NTOwogICAgIE93blB0cjxLaWxsUmluZz4g
bV9raWxsUmluZzsKKyAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJl
Y3Rpb247CisgICAgU3RyaW5nIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uOworICAg
IFRpbWVyPEVkaXRvcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKIAogICAgIGJvb2wgY2FuRGVs
ZXRlUmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0
ZWJvYXJkKFBhc3RlYm9hcmQqKTsKQEAgLTMzNSw4ICszNTAsOSBAQCBwcml2YXRlOgogCiAgICAg
UGFzc1JlZlB0cjxSYW5nZT4gZmlyc3RWaXNpYmxlUmFuZ2UoY29uc3QgU3RyaW5nJiwgYm9vbCBj
YXNlRmxhZyk7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbGFzdFZpc2libGVSYW5nZShjb25zdCBT
dHJpbmcmLCBib29sIGNhc2VGbGFnKTsKLSAgICAKKwogICAgIHZvaWQgY2hhbmdlU2VsZWN0aW9u
QWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgYm9vbCBj
bG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKTsKKyAgICB2b2lkIGNvcnJlY3Rpb25Q
YW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopOwogICAgIE5vZGUqIGZpbmRFdmVudFRhcmdl
dEZyb21TZWxlY3Rpb24oKSBjb25zdDsKIH07CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY5LDYgKzEwNjksMTQgQEAgc3RhdGljIGJvb2wgZXhl
Y3V0ZVlhbmtBbmRTZWxlY3QoRnJhbWUqIAogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQor
c3RhdGljIGJvb2wgZXhlY3V0ZUNhbmNlbE9wZXJhdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBmcmFtZS0+ZWRpdG9y
KCktPmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlm
CisKIC8vIFN1cHBvcnRlZCBmdW5jdGlvbnMKIAogc3RhdGljIGJvb2wgc3VwcG9ydGVkKEZyYW1l
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKQEAgLTE0NTUsNiArMTQ2Myw5IEBAIHN0YXRpYyBjb25z
dCBDb21tYW5kTWFwJiBjcmVhdGVDb21tYW5kTWEKICAgICAgICAgeyAiVW5zZWxlY3QiLCB7IGV4
ZWN1dGVVbnNlbGVjdCwgc3VwcG9ydGVkLCBlbmFibGVkVmlzaWJsZVNlbGVjdGlvbiwgc3RhdGVO
b25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVu
RGlzYWJsZWQgfSB9LAogICAgICAgICB7ICJZYW5rIiwgeyBleGVjdXRlWWFuaywgc3VwcG9ydGVk
RnJvbU1lbnVPcktleUJpbmRpbmcsIGVuYWJsZWRJbkVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2
YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJs
ZWQgfSB9LAogICAgICAgICB7ICJZYW5rQW5kU2VsZWN0IiwgeyBleGVjdXRlWWFua0FuZFNlbGVj
dCwgc3VwcG9ydGVkRnJvbU1lbnVPcktleUJpbmRpbmcsIGVuYWJsZWRJbkVkaXRhYmxlVGV4dCwg
c3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24sIGRvTm90QWxsb3dFeGVjdXRp
b25XaGVuRGlzYWJsZWQgfSB9LAorI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAgICAgeyAiQ2FuY2VsT3BlcmF0aW9uIiwg
eyBleGVjdXRlQ2FuY2VsT3BlcmF0aW9uLCBzdXBwb3J0ZWRGcm9tTWVudU9yS2V5QmluZGluZywg
ZW5hYmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90VGV4dEluc2Vy
dGlvbiwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCisjZW5kaWYKICAgICB9
OwogCiAgICAgLy8gVGhlc2UgdW5zdXBwb3J0ZWQgY29tbWFuZHMgYXJlIGxpc3RlZCBoZXJlIHNp
bmNlIHRoZXkgYXBwZWFyIGluIHRoZSBNaWNyb3NvZnQKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNiArMzA3LDEwIEBAIHZvaWQgVHlwaW5nQ29t
bWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGUKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0g
c3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAgICAgaWYgKHAx
ICE9IHAyKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPm1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24ocDEpOworI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVj
dGlvblBhbmVsVGltZXIoKTsKKyNlbmRpZgogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2MCw2ICs0NjAsMTAgQEAgcHVibGljOgogI2lmIFBMQVRGT1JN
KE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpCiAgICAgdmlydHVhbCB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0
IFVDaGFyKiwgaW50LCB1aW50NjRfdCwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKSB7IH07
CiAjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgRWRpdG9yKikgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCkgeyB9CisjZW5k
aWYKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNv
bnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCkgeyB9CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVu
dC5oCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBFZGl0b3JDbGllbnRfaAogCiAj
aW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTEsNiArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBFZGl0Q29tbWFuZDsKK2Ns
YXNzIEVkaXRvcjsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxFbGVt
ZW50OwpAQCAtMTc3LDYgKzE3OSwxMiBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgVUNoYXIqIHRl
eHQsIGludCBsZW5ndGgsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+JiByZXN1bHRzKSA9IDA7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICB2aXJ0dWFsIHZv
aWQgc2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNtZW50U3RyaW5nLCBFZGl0b3IqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQpID0gMDsKKyNlbmRpZgorCiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBT
dHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBkZXRhaWwpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdykgPSAwOwpJbmRleDog
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NDksOCArMTQ0OSwxMCBAQCB2b2lkIEZyYW1lOjpyZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKGNvCiAKICAgICAgICAgLy8gVGhpcyBvbmx5IGVyYXNlcyBtYXJrZXJzIHRoYXQg
YXJlIGluIHRoZSBmaXJzdCB1bml0ICh3b3JkIG9yIHNlbnRlbmNlKSBvZiB0aGUgc2VsZWN0aW9u
LgogICAgICAgICAvLyBQZXJoYXBzIHBlY3VsaWFyLCBidXQgaXQgbWF0Y2hlcyBBcHBLaXQuCi0g
ICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9O
b3JtYWxpemVkUmFuZ2UoKSkKKyAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0g
bmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CiAgICAgICAgICAgICBkb2N1
bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+bWFya2VycygpLT5y
ZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiBzZW50ZW5jZVJhbmdlID0g
bmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICAgICAgZG9j
dW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKHNlbnRlbmNlUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcx
LDcgKzI3MSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZsb2F0UmVjdCByb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYpOwogCiAgICAgICAgIHZvaWQgZHJhd0xp
bmVGb3JUZXh0KGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoLCBib29sIHByaW50aW5nKTsKLSAg
ICAgICAgdm9pZCBkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBv
aW50JiwgaW50IHdpZHRoLCBib29sIGdyYW1tYXIpOworICAgICAgICBlbnVtIFRleHRDaGVja2lu
Z0xpbmVTdHlsZSB7CisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZSwK
KyAgICAgICAgICAgIFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGUsCisgICAgICAgICAgICBU
ZXh0Q2hlY2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZQorICAgICAgICB9OworICAgICAgICB2b2lk
IGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoLCBUZXh0
Q2hlY2tpbmdMaW5lU3R5bGUpOwogCiAgICAgICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNv
bnN0OwogICAgICAgICB2b2lkIHNldFBhaW50aW5nRGlzYWJsZWQoYm9vbCk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU5LDcg
Kzc1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY28KICNpbmNs
dWRlICJEcmF3RXJyb3JVbmRlcmxpbmUuaCIKICNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihjb25zdCBJbnRQb2ludCYgb3Jp
Z2luLCBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHRDaGVja2luZyhjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIFRl
eHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CkBAIC03NjcsMTIgKzc2NywxNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwog
ICAgIGNhaXJvX3NhdmUoY3IpOwogCi0gICAgLy8gQ29udmVudGlvbiBpcyBncmVlbiBmb3IgZ3Jh
bW1hciwgcmVkIGZvciBzcGVsbGluZwotICAgIC8vIFRoZXNlIG5lZWQgdG8gYmVjb21lIGNvbmZp
Z3VyYWJsZQotICAgIGlmIChncmFtbWFyKQotICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihj
ciwgMCwgMSwgMCk7Ci0gICAgZWxzZQorICAgIHN3aXRjaCAoc3R5bGUpIHsKKyAgICBjYXNlIFRl
eHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgogICAgICAgICBjYWlyb19zZXRfc291cmNlX3Jn
YihjciwgMSwgMCwgMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dENoZWNraW5nR3Jh
bW1hckxpbmVTdHlsZToKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDAsIDEsIDAp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBjYWlyb19yZXN0b3JlKGNy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICAvLyBX
ZSBpZ25vcmUgbW9zdCBvZiB0aGUgcHJvdmlkZWQgY29uc3RhbnRzIGluIGZhdm91ciBvZiB0aGUg
cGxhdGZvcm0gc3R5bGUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
cGhpY3NDb250ZXh0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCShyZXZpc2lvbiA2NjU2NykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dChjbwogICAgIGRyYXdMaW5lKG9yaWdpbiwgZW5kUG9pbnQpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1h
cihjb25zdCBJbnRQb2ludCYsIGludCB3aWR0aCwgYm9vbCBncmFtbWFyKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEludFBvaW50JiwgaW50IHdp
ZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NDb250ZXh0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBzdGF0aWMgTlNDb2xvciogY3JlYXRlUGF0dGVybkNv
bG9yKE5TU3RyCiB9CiAKIC8vIFdlYktpdCBvbiBNYWMgaXMgYSBzdGFuZGFyZCBwbGF0Zm9ybSBj
b21wb25lbnQsIHNvIGl0IG11c3QgdXNlIHRoZSBzdGFuZGFyZCBwbGF0Zm9ybSBhcnR3b3JrIGZv
ciB1bmRlcmxpbmUuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGlu
Z09yQmFkR3JhbW1hcihjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCB3aWR0aCwgYm9vbCBncmFt
bWFyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0
IEludFBvaW50JiBwb2ludCwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUp
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTI3
LDIzICsxMjcsNDEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbAog
ICAgIC8vIFRoZXNlIGFyZSB0aGUgc2FtZSBmb3IgbWlzc3BlbGxpbmcgb3IgYmFkIGdyYW1tYXIu
CiAgICAgaW50IHBhdHRlcm5IZWlnaHQgPSBjTWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzOwogICAg
IGludCBwYXR0ZXJuV2lkdGggPSBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybldpZHRoOwotIAorCiAg
ICAgYm9vbCB1c2luZ0RvdDsKICAgICBOU0NvbG9yICpwYXR0ZXJuQ29sb3I7Ci0gICAgaWYgKGdy
YW1tYXIpIHsKLSAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBncmFtbWFyIHBhdHRlcm4gY29sb3Iu
Ci0gICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yR3JhbW1hciA9IGZhbHNlOwotICAgICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxOU0NvbG9yPiwgZ3JhbW1hclBhdHRlcm5D
b2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihAIkdyYW1tYXJEb3QiLCBbTlNDb2xvciBncmVlbkNv
bG9yXSwgdXNpbmdEb3RGb3JHcmFtbWFyKSkpOwotICAgICAgICAKLSAgICAgICAgdXNpbmdEb3Qg
PSB1c2luZ0RvdEZvckdyYW1tYXI7Ci0gICAgICAgIHBhdHRlcm5Db2xvciA9IGdyYW1tYXJQYXR0
ZXJuQ29sb3IuZ2V0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBz
cGVsbGluZyBwYXR0ZXJuIGNvbG9yLgotICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvclNw
ZWxsaW5nID0gZmFsc2U7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5T
Q29sb3I+LCBzcGVsbGluZ1BhdHRlcm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihAIlNwZWxs
aW5nRG90IiwgW05TQ29sb3IgcmVkQ29sb3JdLCB1c2luZ0RvdEZvclNwZWxsaW5nKSkpOwotICAg
ICAgICAKLSAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvclNwZWxsaW5nOwotICAgICAgICBw
YXR0ZXJuQ29sb3IgPSBzcGVsbGluZ1BhdHRlcm5Db2xvci5nZXQoKTsKKyAgICBzd2l0Y2ggKHN0
eWxlKSB7CisgICAgICAgIGNhc2UgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU6CisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcgcGF0dGVybiBjb2xv
ci4KKyAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcgPSBmYWxzZTsK
KyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5TQ29sb3I+LCBzcGVs
bGluZ1BhdHRlcm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihAIlNwZWxsaW5nRG90IiwgW05T
Q29sb3IgcmVkQ29sb3JdLCB1c2luZ0RvdEZvclNwZWxsaW5nKSkpOworICAgICAgICAgICAgdXNp
bmdEb3QgPSB1c2luZ0RvdEZvclNwZWxsaW5nOworICAgICAgICAgICAgcGF0dGVybkNvbG9yID0g
c3BlbGxpbmdQYXR0ZXJuQ29sb3IuZ2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGU6CisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3IgZ3JhbW1hciBwYXR0ZXJuIGNvbG9yLgorICAg
ICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JHcmFtbWFyID0gZmFsc2U7CisgICAgICAg
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxOU0NvbG9yPiwgZ3JhbW1hclBhdHRl
cm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihAIkdyYW1tYXJEb3QiLCBbTlNDb2xvciBncmVl
bkNvbG9yXSwgdXNpbmdEb3RGb3JHcmFtbWFyKSkpOworICAgICAgICAgICAgdXNpbmdEb3QgPSB1
c2luZ0RvdEZvckdyYW1tYXI7CisgICAgICAgICAgICBwYXR0ZXJuQ29sb3IgPSBncmFtbWFyUGF0
dGVybkNvbG9yLmdldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisg
ICAgICAgIGNhc2UgVGV4dENoZWNraW5nUmVwbGFjZW1lbnRMaW5lU3R5bGU6CisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcgcGF0dGVybiBjb2xvci4KKyAg
ICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcgPSBmYWxzZTsKKyAgICAg
ICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5TQ29sb3I+LCBzcGVsbGluZ1Bh
dHRlcm5Db2xvciwgKGNyZWF0ZVBhdHRlcm5Db2xvcihAIkNvcnJlY3Rpb25Eb3QiLCBbTlNDb2xv
ciBibHVlQ29sb3JdLCB1c2luZ0RvdEZvclNwZWxsaW5nKSkpOworICAgICAgICAgICAgdXNpbmdE
b3QgPSB1c2luZ0RvdEZvclNwZWxsaW5nOworICAgICAgICAgICAgcGF0dGVybkNvbG9yID0gc3Bl
bGxpbmdQYXR0ZXJuQ29sb3IuZ2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgLy8gTWFrZSBzdXJlIHRvIGRyYXcgb25seSBjb21wbGV0ZSBkb3RzLgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRl
eHRPcGVuVkcuY3BwCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
Myw3ICsyNzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvCiAg
ICAgVU5VU0VEX1BBUkFNKHByaW50aW5nKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQmIG9yaWdpbiwg
aW50IHdpZHRoLCBib29sIGdyYW1tYXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0Q2hlY2tpbmcoY29uc3QgSW50UG9pbnQmIG9yaWdpbiwgaW50IHdpZHRoLCBUZXh0Q2hl
Y2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvck1pc3NwZWwKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIFVOVVNFRF9QQVJB
TShvcmlnaW4pOwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdy
YW1tYXIpOworICAgIFVOVVNFRF9QQVJBTShzdHlsZSk7CiB9CiAKIEZsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NSw3ICs4NDUsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvCiAgICAgZHJhd0xpbmUob3Jp
Z2luLCBlbmRQb2ludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1p
c3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50JiwgaW50LCBib29sKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEludFBvaW50Jiwg
aW50LCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gNjY1NjcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxNSw5ICs2MTUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmUoY29uc3QgSW50CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3
UG9pbnRzKFNrQ2FudmFzOjprTGluZXNfUG9pbnRNb2RlLCAyLCBwdHMsIHBhaW50KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIo
Y29uc3QgSW50UG9pbnQmIHB0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBncmFtbWFyKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEludFBvaW50JiBwdCwg
aW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkocmV2aXNp
b24gNjY1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMSArMTc2LDE0IEBAIHN0YXRpYyBj
b25zdCBDb2xvciYgZ3JhbW1hclBhdHRlcm5Db2xvcigKICAgICByZXR1cm4gZ3JhbW1hckNvbG9y
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFk
R3JhbW1hcihjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCB3aWR0aCwgYm9vbCBncmFtbWFyKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEludFBv
aW50JiBwb2ludCwgaW50IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKHN0
eWxlICE9IFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlICYmIHN0eWxlICE9IFRleHRDaGVj
a2luZ0dyYW1tYXJMaW5lU3R5bGUpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIFRoZXNlIGFy
ZSB0aGUgc2FtZSBmb3IgbWlzc3BlbGxpbmcgb3IgYmFkIGdyYW1tYXIKICAgICBjb25zdCBpbnQg
cGF0dGVybkhlaWdodCA9IDM7IC8vIDMgcm93cwogICAgIEFTU0VSVChjTWlzc3BlbGxpbmdMaW5l
VGhpY2tuZXNzID09IHBhdHRlcm5IZWlnaHQpOwpAQCAtMjAxLDcgKzIwNCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWwKICAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7
CiAKLSAgICBjb25zdCBDb2xvciYgcGF0dGVybkNvbG9yID0gZ3JhbW1hciA/IGdyYW1tYXJQYXR0
ZXJuQ29sb3IoKSA6IHNwZWxsaW5nUGF0dGVybkNvbG9yKCk7CisgICAgY29uc3QgQ29sb3ImIHBh
dHRlcm5Db2xvciA9IHN0eWxlID09IFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGUgPyBncmFt
bWFyUGF0dGVybkNvbG9yKCkgOiBzcGVsbGluZ1BhdHRlcm5Db2xvcigpOwogICAgIHNldENHU3Ry
b2tlQ29sb3IoY29udGV4dCwgcGF0dGVybkNvbG9yKTsKIAogICAgIHdrU2V0UGF0dGVyblBoYXNl
SW5Vc2VyU3BhY2UoY29udGV4dCwgcG9pbnQpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAJKHJldmlz
aW9uIDY2NTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0Nv
bnRleHRXaW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjIsNyArMTA2Miw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY28KICAgICBzZXRTdHJva2VTdHlsZShv
bGRTdHlsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxs
aW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoLCBib29sIGdyYW1tYXIp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgSW50
UG9pbnQmLCBpbnQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9H
cmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9uIDY2NTY3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1NywxNCArMzU3LDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHQoY28KICAgICBtX2RhdGEtPmNvbnRleHQtPkRyYXdMaW5lKG9yaWdpbi54KCksIG9yaWdp
bi55KCksIGVuZFBvaW50LngoKSwgZW5kUG9pbnQueSgpKTsKIH0KIAotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihjb25zdCBJbnRQb2lu
dCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lk
dGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAoZ3JhbW1hcikKLSAg
ICAgICAgbV9kYXRhLT5jb250ZXh0LT5TZXRQZW4od3hQZW4oKnd4R1JFRU4sIDIsIHd4TE9OR19E
QVNIKSk7Ci0gICAgZWxzZQorICAgIHN3aXRjaCAoc3R5bGUpIHsKKyAgICBjYXNlIFRleHRDaGVj
a2luZ1NwZWxsaW5nTGluZVN0eWxlOgogICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBlbih3
eFBlbigqd3hSRUQsIDIsIHd4TE9OR19EQVNIKSk7Ci0gICAgCisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICAgICAgbV9kYXRhLT5jb250
ZXh0LT5TZXRQZW4od3hQZW4oKnd4R1JFRU4sIDIsIHd4TE9OR19EQVNIKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9kYXRhLT5j
b250ZXh0LT5EcmF3TGluZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgpLCBvcmlnaW4ueCgpICsgd2lk
dGgsIG9yaWdpbi55KCkpOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAkocmV2aXNpb24gNjY1NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDYgKzc2OCwyMSBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50RGVjb3JhdGlvbihHcmFwCiAgICAgICAgIGNvbnRleHQtPmNsZWFyU2hhZG93KCk7CiB9
CiAKK3N0YXRpYyBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ0xpbmVTdHlsZSB0ZXh0Q2hl
Y2tpbmdMaW5lU3R5bGVGb3JNYXJrZXJUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1h
cmtlclR5cGUpCit7CisgICAgc3dpdGNoIChtYXJrZXJUeXBlKSB7CisgICAgY2FzZSBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmc6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRD
aGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXI6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ0dyYW1tYXJM
aW5lU3R5bGU7CisgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CisgICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ1JlcGxhY2VtZW50TGluZVN0eWxl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZTsKKyAg
ICB9Cit9CisKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtl
cihHcmFwaGljc0NvbnRleHQqIHB0LCBpbnQgdHgsIGludCB0eSwgY29uc3QgRG9jdW1lbnRNYXJr
ZXImIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdy
YW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBtYXJrZXJzICg1
MzI3ODg3KQpAQCAtODMxLDcgKzg0Niw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVs
bGluZ09yR3JhbW0KICAgICAgICAgLy8gSW4gbGFyZ2VyIGZvbnRzLCB0aG91Z2gsIHBsYWNlIHRo
ZSB1bmRlcmxpbmUgdXAgbmVhciB0aGUgYmFzZWxpbmUgdG8gcHJldmVudCBhIGJpZyBnYXAuCiAg
ICAgICAgIHVuZGVybGluZU9mZnNldCA9IGJhc2VsaW5lICsgMjsKICAgICB9Ci0gICAgcHQtPmRy
YXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoSW50UG9pbnQodHggKyBtX3ggKyBzdGFy
dCwgdHkgKyBtX3kgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgZ3JhbW1hcik7CisgICAgcHQt
PmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKEludFBvaW50KHR4ICsgbV94ICsgc3RhcnQsIHR5ICsg
bV95ICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIHRleHRDaGVja2luZ0xpbmVTdHlsZUZvck1h
cmtlclR5cGUobWFya2VyLnR5cGUpKTsKIH0KIAogdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRl
eHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBpbnQgdHgsIGludCB0eSwgY29uc3Qg
RG9jdW1lbnRNYXJrZXImIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBm
b250KQpAQCAtODk4LDEwICs5MTMsMTAgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3Vt
ZW50TWFya2VycwogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjoKICAg
ICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgogICAgICAgICAgICAgY2Fz
ZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CisgICAgICAgICAgICBjYXNlIERvY3VtZW50
TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb246CiAgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91
bmQpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4
dE1hdGNoOgogICAgICAgICAgICAgICAgIGlmICghYmFja2dyb3VuZCkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC05MzMsNiArOTQ4LDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludERvY3VtZW50TWFya2VycwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CiAgICAgICAgICAgICAgICAgY29tcHV0
ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcih0eCwgdHksIG1hcmtlciwgc3R5bGUsIGZvbnQpOwor
ICAgICAgICAgICAgICAgIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIocHQsIHR4LCB0eSwg
bWFya2VyLCBzdHlsZSwgZm9udCwgZmFsc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uOgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDgtMzEgIEppYSBQdSAg
PGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9jb3JyZWN0aW9uIFVJIG9uIE1hYyBPUyBYLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5NTgKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyOTk2MjE+CisKKyAgICAgICAgU2VlIGRldGFpbGVkIGhp
Z2ggbGV2ZWwgZGVzY3JpcHRpb24gaW4gV2ViQ29yZS9DaGFuZ2VMb2cuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6IER1bW15IGltcGxl
bWVudGF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwpOiBEaXR0bworCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaDogQWRkZWQgbmV3IG1ldGhvZHMgZGVjbGFyZWQgaW4gYmFzZSBj
bGFzcy4KKwogMjAxMC0wOC0zMSAgSm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRAYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBzb21lIGNvcHkvcGFzdGUgZXJyb3JzLgpJbmRleDogV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJ
KHJldmlzaW9uIDY2NTY3KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2OSw0ICs0NjksMTYgQEAgdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnNldElucHV0TWV0aG9kU3RhdAogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQor
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBX
ZWJDb3JlOjpFZGl0b3IqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2Vw
dGVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksMTIgKzM5LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi1wcml2YXRlOiAgICAKK3By
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKLSAgICAKKwogICAgIHZp
cnR1YWwgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpSYW5nZSopOwogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRTaG93RGVsZXRlSW50ZXJmYWNlKFdlYkNvcmU6OkhUTUxFbGVtZW50Kik7
Ci0gICAgdmlydHVhbCBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOyAKKyAgICB2aXJ0
dWFsIGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7CiAgICAgdmlydHVhbCBib29sIGlz
U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpOwogICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwogICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVD
b250aW51b3VzU3BlbGxDaGVja2luZygpOwpAQCAtMTMxLDcgKzEzMSwxMCBAQCBwcml2YXRlOiAg
ICAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgV1RGOjpTdHJpbmcm
LCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNl
dElucHV0TWV0aG9kU3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0
ZShib29sIGVuYWJsZWQpOwotCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1df
TEVPUEFSRCkKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJp
bmcsIFdlYkNvcmU6OkVkaXRvciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlv
blBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKTsKKyNlbmRpZgogICAgIFdlYlBhZ2UqIG1f
cGFnZTsKIH07CiAKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDgtMzEgIEppYSBQdSAg
PGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9jb3JyZWN0aW9uIFVJIG9uIE1hYyBPUyBYLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5NTgKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyOTk2MjE+CisKKyAgICAgICAgU2VlIGRldGFpbGVkIGhp
Z2ggbGV2ZWwgZGVzY3JpcHRpb24gaW4gV2ViQ29yZS9DaGFuZ2VMb2cuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDogQWRkZWQgbmV3IG1lbWJlciBtZXRob2Rz
IGRlY2xhcmVkIGluCisgICAgICAgICAgRWRpdG9yQ2xpZW50LiBBZGRlZCBtX2NvcnJlY3Rpb25Q
YW5lbFRhZyB0byBzdG9yZSB0aGUgSUQgb2YgY3VycmVudCBhdXRvY29ycmVjdGlvbiBVSSBvYmpl
Y3QuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OldlYkVkaXRvckNsaWVudCk6IEluaXRpYWxpemUgbV9jb3Jy
ZWN0aW9uUGFuZWxUYWcuCisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6On5XZWJFZGl0b3JDbGll
bnQpOiBNYWtlIHN1cmUgdGhlIGF1dG9jb3JyZWN0aW9uIFVJIGlzCisgICAgICAgICAgZGlzbWlz
c2VkIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBvYmplY3QuCisgICAgICAgIChXZWJFZGl0b3JDbGll
bnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOiBEaXNtaXNzIGF1dG9jb3JyZWN0aW9uIFVJ
IHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVu
dDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6IFNob3cgYXV0b2NvcnJlY3Rpb24gVUkuCisgICAgICAg
IChXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOiBEaXNtaXNzIGF1dG9j
b3JyZWN0aW9uIFVJLgorCiAyMDEwLTA4LTMxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDY2NTY3KQorKysgV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW1wb3J0IDxXZWJDb3JlL0Vk
aXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3JDbGllbnQuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0zOCw3ICszOSw3IEBACiBj
bGFzcyBXZWJFZGl0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6RWRpdG9yQ2xpZW50IHsKIHB1
YmxpYzoKICAgICBXZWJFZGl0b3JDbGllbnQoV2ViVmlldyAqKTsKLSAgICAKKyAgICB2aXJ0dWFs
IH5XZWJFZGl0b3JDbGllbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwog
CiAgICAgdmlydHVhbCBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwpAQCAtMTI5LDEy
ICsxMzAsMTkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChj
b25zdCBXVEY6OlN0cmluZyYsIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3Nlcyk7CiAg
ICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKKyNpZiAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVj
dGlvblBhbmVsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgV2ViQ29yZTo6RWRpdG9yKik7CisgICAgdmlydHVhbCB2
b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQpOworI2Vu
ZGlmCiBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yVW5kb09yUmVkbyhQYXNz
UmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPiwgYm9vbCBpc1JlZG8pOwogICAgIFdlYkVkaXRv
ckNsaWVudCgpOwotICAgIAorCiAgICAgV2ViVmlldyAqbV93ZWJWaWV3OwogICAgIFJldGFpblB0
cjxXZWJFZGl0b3JVbmRvVGFyZ2V0PiBtX3VuZG9UYXJnZXQ7Ci0gICAgCiAgICAgYm9vbCBtX2hh
dmVVbmRvUmVkb09wZXJhdGlvbnM7CisKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQorICAgIE5TSW50ZWdlciBtX2NvcnJlY3Rpb25QYW5lbFRhZzsKKyNlbmRp
ZgogfTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lm1tCShyZXZpc2lvbiA2NjU2NykKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw5IEBACiAjaW1wb3J0IDxy
dW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRDaGVja2VyLmg+CisjZW5k
aWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAt
MTcxLDcgKzE3NCwxNyBAQCBXZWJFZGl0b3JDbGllbnQ6OldlYkVkaXRvckNsaWVudChXZWJWaWV3
CiAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKICAgICAsIG1fdW5kb1RhcmdldChbW1tXZWJFZGl0
b3JVbmRvVGFyZ2V0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV0pCiAgICAgLCBtX2hhdmVVbmRv
UmVkb09wZXJhdGlvbnMoZmFsc2UpCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NO
T1dfTEVPUEFSRCkKKyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGFnKC0xKQorI2VuZGlmCit7Cit9
CisKK1dlYkVkaXRvckNsaWVudDo6fldlYkVkaXRvckNsaWVudCgpCiB7CisjaWYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBkaXNtaXNzQ29ycmVjdGlvblBh
bmVsKHRydWUpOworI2VuZGlmCiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCkBAIC0yODYsNiArMjk5LDEwIEBAIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2UKIHsKICAgICBbbV93ZWJWaWV3IF9zZWxlY3Rp
b25DaGFuZ2VkXTsKIAorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCisgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKKyNlbmRpZgorCiAgICAgLy8g
RklYTUU6IFRoaXMgcXVpcmsgaXMgbmVlZGVkIGR1ZSB0byA8cmRhcjovL3Byb2JsZW0vNTAwOTYy
NT4gLSBXZSBjYW4gcGhhc2UgaXQgb3V0IG9uY2UgQXBlcnR1cmUgY2FuIGFkb3B0IHRoZSBuZXcg
YmVoYXZpb3Igb24gdGhlaXIgZW5kCiAgICAgaWYgKCFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VC
S0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9BUEVSVFVSRV9RVUlSSykgJiYgW1tbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxl
LkFwZXJ0dXJlIl0pCiAgICAgICAgIHJldHVybjsKQEAgLTc5MCw2ICs4MDcsMzUgQEAgdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaQogI2VuZGlmCiB9CiAKKyNpZiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQordm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcsIEVkaXRvciogZWRpdG9yKSB7CisgICAgZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbCh0cnVlKTsKKworICAgIE5TUmVjdCBib3VuZGluZ0JveEFzTlNSZWN0ID0gYm91bmRp
bmdCb3hPZlJlcGxhY2VkU3RyaW5nOworICAgIE5TUmVjdCB3ZWJWaWV3RnJhbWUgPSBtX3dlYlZp
ZXcuZnJhbWU7CisgICAgYm91bmRpbmdCb3hBc05TUmVjdC5vcmlnaW4ueSA9IHdlYlZpZXdGcmFt
ZS5zaXplLmhlaWdodC1OU01heFkoYm91bmRpbmdCb3hBc05TUmVjdCk7CisKKyAgICAvLyBOZWVk
IHRvIGV4cGxpY2l0bHkgdXNlIHRoZXNlIGxvY2FsIE5TU3RyaW5nIG9iamVjdHMsIGJlY2F1c2Ug
dGhlIEMrKyByZWZlcmVuY2VzIG1heSBiZSBpbnZhbGlkYXRlZCBieSB0aGUgdGltZSB0aGUgYmxv
Y2sgYmVsb3cgaXMgZXhlY3V0ZWQuCisgICAgTlNTdHJpbmcgKnJlcGxhY2VkU3RyaW5nQXNOU1N0
cmluZyA9IHJlcGxhY2VkU3RyaW5nOworICAgIE5TU3RyaW5nICpyZXBsYWNlbWVudFN0cmluZ0Fz
TlNTdHJpbmcgPSByZXBsYWNlbWVudFN0cmluZzsKKworICAgIG1fY29ycmVjdGlvblBhbmVsVGFn
ID0gW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHNob3dDb3JyZWN0aW9uOnJl
cGxhY2VtZW50U3RyaW5nQXNOU1N0cmluZyBmb3JTdHJpbmdJblJlY3Q6Ym91bmRpbmdCb3hBc05T
UmVjdCB2aWV3Om1fd2ViVmlldyBjb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wgYWNjZXB0ZWQpIHsK
KyAgICAgICAgaWYgKCFhY2NlcHRlZCkgeworICAgICAgICAgICAgW1tOU1NwZWxsQ2hlY2tlciBz
aGFyZWRTcGVsbENoZWNrZXJdIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmVq
ZWN0ZWQgdG9Db3JyZWN0aW9uOnJlcGxhY2VtZW50U3RyaW5nQXNOU1N0cmluZyBmb3JXb3JkOnJl
cGxhY2VkU3RyaW5nQXNOU1N0cmluZyBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRh
ZzpbbV93ZWJWaWV3IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnXV07CisgICAgICAgICAgICBlZGl0
b3ItPmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbigpOworICAgICAgICB9CisgICAgfV07Cit9CisK
K3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVj
dGlvbkFjY2VwdGVkKQoreworICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbFRhZyA+PSAwKSB7Cisg
ICAgICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBkaXNtaXNzQ29ycmVj
dGlvbjptX2NvcnJlY3Rpb25QYW5lbFRhZyBhY2NlcHRDb3JyZWN0aW9uOmNvcnJlY3Rpb25BY2Nl
cHRlZF07CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsVGFnID0gLTE7CisgICAgfQorfQorI2Vu
ZGlmCisKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxs
ZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7CiAgICAgW1tOU1NwZWxsQ2hl
Y2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHVwZGF0ZVNwZWxsaW5nUGFuZWxXaXRoTWlzc3BlbGxl
ZFdvcmQ6bWlzc3BlbGxlZFdvcmRdOwo=
</data>
<flag name="review"
          id="55196"
          type_id="1"
          status="+"
          setter="mitz"
    />
    <flag name="commit-queue"
          id="60656"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>