<?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>107777</bug_id>
          
          <creation_ts>2013-01-23 20:06:52 -0800</creation_ts>
          <short_desc>Split each RuleSet and feature out from StyleResolver into its own class.</short_desc>
          <delta_ts>2013-02-11 20:33:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>107779</dependson>
    
    <dependson>107780</dependson>
    
    <dependson>108797</dependson>
    
    <dependson>109014</dependson>
          <blocked>89879</blocked>
    
    <blocked>108890</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Hayato Ito">hayato</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>webcomponents-bugzilla</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>814989</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-01-23 20:06:52 -0800</bug_when>
    <thetext>To address bug 89879, &apos;META: StyleResolver does too much and needs refactoring&apos;, I would like to factor out each RuleSet and feature from StyleResolver into  its own class to manage them separately.

We cannot do that soon since it requires other refactoring. Let me file them separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814996</commentid>
    <comment_count>1</comment_count>
      <attachid>184387</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-01-23 20:13:59 -0800</bug_when>
    <thetext>Created attachment 184387
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815570</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-24 09:58:06 -0800</bug_when>
    <thetext>Please measure how this affects WebCore binary size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817569</commentid>
    <comment_count>3</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-01-28 00:26:27 -0800</bug_when>
    <thetext>Thank you for the comment.

(In reply to comment #2)
&gt; Please measure how this affects WebCore binary size.

Okay. Let me measure the binary size. I am going to measure the binary size in chromium linux port release build. I am wondering whethe this is enough or not.

If it might be better to measure the binary size in Mac port, please let me know that. I&apos;d like to know the convention for measuring binary size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817712</commentid>
    <comment_count>4</comment_count>
      <attachid>184387</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2013-01-28 05:59:55 -0800</bug_when>
    <thetext>Comment on attachment 184387
WIP

I’m not a reviewer, but this looks like a clean way for StyleResolver to lose some weight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817842</commentid>
    <comment_count>5</comment_count>
      <attachid>184387</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-01-28 10:10:18 -0800</bug_when>
    <thetext>Comment on attachment 184387
WIP

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

This looks nice.

&gt; Source/WebCore/css/DocumentRuleSets.h:47
&gt; +class DefaultStyleSheets {

Should this be a singleton class instead?

&gt; Source/WebCore/css/DocumentRuleSets.h:70
&gt; +class DocumentCSSOMWrapper {

Same naming problem as the patch on bug 107779. Is this class significantly different from the one you have there?

&gt; Source/WebCore/css/MediaQueryEvaluator.h:59
&gt; +    explicit MediaQueryEvaluator(bool mediaFeatureResult = false);

That&apos;s a nice easy patch in itself.

&gt; Source/WebCore/css/StyleResolver.h:181
&gt; +    // FIXME: It could be better to call ruleSets().appendAuthorStyleSheets() directly when we factor StyleRsolver further.

Add a bug number here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818644</commentid>
    <comment_count>6</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-01-29 00:11:48 -0800</bug_when>
    <thetext>Thank you for the review. Note that some parts of this WIP patch are being under review in bug 107779.

(In reply to comment #5)
&gt; (From update of attachment 184387 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184387&amp;action=review
&gt; 
&gt; This looks nice.
&gt; 
&gt; &gt; Source/WebCore/css/DocumentRuleSets.h:47
&gt; &gt; +class DefaultStyleSheets {
&gt; 
&gt; Should this be a singleton class instead?

I am okay to use a singleton pattern here, but I am not sure which is preferred in WebKit.
Let me walk around code base and find which is a widely used convention.

I appreciated a comment about which is preferred.

&gt; 
&gt; &gt; Source/WebCore/css/DocumentRuleSets.h:70
&gt; &gt; +class DocumentCSSOMWrapper {
&gt; 
&gt; Same naming problem as the patch on bug 107779. Is this class significantly different from the one you have there?

This WIP patch is a bit old. The patch is bug 107779 is latest and that was already reviewed in bug 107779. 
Let me rebase this WIP patch after a patch in 107779 is landed.

&gt; 
&gt; &gt; Source/WebCore/css/MediaQueryEvaluator.h:59
&gt; &gt; +    explicit MediaQueryEvaluator(bool mediaFeatureResult = false);
&gt; 
&gt; That&apos;s a nice easy patch in itself.

That was already landed in http://trac.webkit.org/changeset/140503.

&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.h:181
&gt; &gt; +    // FIXME: It could be better to call ruleSets().appendAuthorStyleSheets() directly when we factor StyleRsolver further.
&gt; 
&gt; Add a bug number here?

Let me add a bug number later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825094</commentid>
    <comment_count>7</comment_count>
      <attachid>186537</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-04 21:06:48 -0800</bug_when>
    <thetext>Created attachment 186537
factor RuleSets and features</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825095</commentid>
    <comment_count>8</comment_count>
      <attachid>186537</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-04 21:12:23 -0800</bug_when>
    <thetext>Comment on attachment 186537
factor RuleSets and features

Attachment 186537 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16372554</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825096</commentid>
    <comment_count>9</comment_count>
      <attachid>186537</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-04 21:13:04 -0800</bug_when>
    <thetext>Comment on attachment 186537
factor RuleSets and features

Attachment 186537 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16368516</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825097</commentid>
    <comment_count>10</comment_count>
      <attachid>186537</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-04 21:13:25 -0800</bug_when>
    <thetext>Comment on attachment 186537
factor RuleSets and features

Attachment 186537 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16378436</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825103</commentid>
    <comment_count>11</comment_count>
      <attachid>186537</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-02-04 21:14:31 -0800</bug_when>
    <thetext>Comment on attachment 186537
factor RuleSets and features

Attachment 186537 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/16365646</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825104</commentid>
    <comment_count>12</comment_count>
      <attachid>186537</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-02-04 21:15:32 -0800</bug_when>
    <thetext>Comment on attachment 186537
factor RuleSets and features

Attachment 186537 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/16371571</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825105</commentid>
    <comment_count>13</comment_count>
      <attachid>186537</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 21:16:31 -0800</bug_when>
    <thetext>Comment on attachment 186537
factor RuleSets and features

Attachment 186537 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16366602</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825109</commentid>
    <comment_count>14</comment_count>
      <attachid>186537</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-02-04 21:25:12 -0800</bug_when>
    <thetext>Comment on attachment 186537
factor RuleSets and features

Attachment 186537 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16370513</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825110</commentid>
    <comment_count>15</comment_count>
      <attachid>186540</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-04 21:25:16 -0800</bug_when>
    <thetext>Created attachment 186540
Fix build errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825623</commentid>
    <comment_count>16</comment_count>
      <attachid>186540</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-02-05 10:41:03 -0800</bug_when>
    <thetext>Comment on attachment 186540
Fix build errors.

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

&gt; Source/WebCore/css/DocumentRuleSets.cpp:11
&gt; + * Copyright (C) 2012 Google Inc. All rights reserved.

2013? :)

&gt; Source/WebCore/css/DocumentRuleSets.h:54
&gt; +    void initUserStyle(DocumentStyleSheetCollection*, const MediaQueryEvaluator&amp;, StyleResolver&amp;);

Should this just be a constructor with resetAuthorStyle in it?

&gt; Source/WebCore/css/DocumentRuleSets.h:55
&gt; +    void resetAuthorStyle();

This makes me wonder if author styles should sit by themselves, since they are the only ones that are mutable in this bunch.

&gt; Source/WebCore/css/DocumentRuleSets.h:59
&gt; +    void collectRulesFromUserStyleSheets(const Vector&lt;RefPtr&lt;CSSStyleSheet&gt; &gt;&amp;, RuleSet&amp; userStyle, const MediaQueryEvaluator&amp;, StyleResolver&amp;);

This can be private, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826032</commentid>
    <comment_count>17</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-05 19:52:31 -0800</bug_when>
    <thetext>Thank you for the review. Let me land this patch after addressing some of the comments since i got r+.
I am happy to address the others in a following patch. See inline comments.

(In reply to comment #16)
&gt; (From update of attachment 186540 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186540&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/DocumentRuleSets.cpp:11
&gt; &gt; + * Copyright (C) 2012 Google Inc. All rights reserved.
&gt; 
&gt; 2013? :)

Done.

&gt; 
&gt; &gt; Source/WebCore/css/DocumentRuleSets.h:54
&gt; &gt; +    void initUserStyle(DocumentStyleSheetCollection*, const MediaQueryEvaluator&amp;, StyleResolver&amp;);
&gt; 
&gt; Should this just be a constructor with resetAuthorStyle in it?


That&apos;s difficult since initUserStyle requires some parameters which should be calculated in StyleResolver&apos;s constructor. If we change m_ruleSets to OwnPtr, like OwnPtr&lt;DocumentRuleSets&gt; m_ruleSets&apos;, we can do it. I can address it in a following patch if required.

&gt; 
&gt; &gt; Source/WebCore/css/DocumentRuleSets.h:55
&gt; &gt; +    void resetAuthorStyle();
&gt; 
&gt; This makes me wonder if author styles should sit by themselves, since they are the only ones that are mutable in this bunch.

Hmm. Could you clarify what that mean?

&gt; 
&gt; &gt; Source/WebCore/css/DocumentRuleSets.h:59
&gt; &gt; +    void collectRulesFromUserStyleSheets(const Vector&lt;RefPtr&lt;CSSStyleSheet&gt; &gt;&amp;, RuleSet&amp; userStyle, const MediaQueryEvaluator&amp;, StyleResolver&amp;);
&gt; 
&gt; This can be private, right?

Yes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826035</commentid>
    <comment_count>18</comment_count>
      <attachid>186747</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-05 19:56:30 -0800</bug_when>
    <thetext>Created attachment 186747
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826050</commentid>
    <comment_count>19</comment_count>
      <attachid>186747</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 20:30:33 -0800</bug_when>
    <thetext>Comment on attachment 186747
Patch for landing

Clearing flags on attachment: 186747

Committed r141964: &lt;http://trac.webkit.org/changeset/141964&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826051</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 20:30:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826057</commentid>
    <comment_count>21</comment_count>
      <attachid>186540</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-02-05 20:53:59 -0800</bug_when>
    <thetext>Comment on attachment 186540
Fix build errors.

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

&gt;&gt;&gt; Source/WebCore/css/DocumentRuleSets.h:54
&gt;&gt;&gt; +    void initUserStyle(DocumentStyleSheetCollection*, const MediaQueryEvaluator&amp;, StyleResolver&amp;);
&gt;&gt; 
&gt;&gt; Should this just be a constructor with resetAuthorStyle in it?
&gt; 
&gt; That&apos;s difficult since initUserStyle requires some parameters which should be calculated in StyleResolver&apos;s constructor. If we change m_ruleSets to OwnPtr, like OwnPtr&lt;DocumentRuleSets&gt; m_ruleSets&apos;, we can do it. I can address it in a following patch if required.

No worries, just a suggestion.

&gt;&gt;&gt; Source/WebCore/css/DocumentRuleSets.h:55
&gt;&gt;&gt; +    void resetAuthorStyle();
&gt;&gt; 
&gt;&gt; This makes me wonder if author styles should sit by themselves, since they are the only ones that are mutable in this bunch.
&gt; 
&gt; Hmm. Could you clarify what that mean?

I disagree with myself. The author styles are used to populate features, which means that they can&apos;t live outside of this class :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826109</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-05 23:36:32 -0800</bug_when>
    <thetext>This appears to have caused a 2.8% performance regression on Apple&apos;s internal test suite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826118</commentid>
    <comment_count>23</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-05 23:45:28 -0800</bug_when>
    <thetext>Thank you for reporting. That patch itself should be just a factoring and should not cause any regression.
Let me investigate. If you have any further info, let me know that.

(In reply to comment #22)
&gt; This appears to have caused a 2.8% performance regression on Apple&apos;s internal test suite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826126</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-05 23:55:43 -0800</bug_when>
    <thetext>It appears to have caused a slight dent in Chromium Win Perf test:
http://build.chromium.org/f/chromium/perf/chromium-rel-win7-webkit/intl2/report.html?history=150&amp;rev=-1

as well as some of Parser/query-selector-* tests:
http://webkit-perf.appspot.com/graph.html#tests=[[3630247,2001,3001]]&amp;sel=1360097136438.8433,1360136808728,328.6474501108647,364.56762749445676&amp;displayrange=7&amp;datatype=running</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826130</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 23:57:56 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 109014</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826209</commentid>
    <comment_count>26</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-06 01:31:36 -0800</bug_when>
    <thetext>I can not reproduce on my machines using Parser/query-selector-* tests.
Hmm.

Let me watch the intl2 results.
It seems that result of intl2 was getting worse at the next cycle (@r141649) after this patch

(In reply to comment #24)
&gt; It appears to have caused a slight dent in Chromium Win Perf test:
&gt; http://build.chromium.org/f/chromium/perf/chromium-rel-win7-webkit/intl2/report.html?history=150&amp;rev=-1
&gt; 
&gt; as well as some of Parser/query-selector-* tests:
&gt; http://webkit-perf.appspot.com/graph.html#tests=[[3630247,2001,3001]]&amp;sel=1360097136438.8433,1360136808728,328.6474501108647,364.56762749445676&amp;displayrange=7&amp;datatype=running</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826225</commentid>
    <comment_count>27</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-06 01:41:10 -0800</bug_when>
    <thetext>It seems the result of intl2 came back to the normal score at r141972, which is before reverting this patch at r141973. So this patch seems innocent.

Let me watch the result of intl2 after r141973. If nothing changes, let me re-land this patch.

If there is any concerns, please let me know it.

&gt; http://build.chromium.org/f/chromium/perf/chromium-rel-win7-webkit/intl2/report.html?history=150&amp;rev=-1

(In reply to comment #26)
&gt; I can not reproduce on my machines using Parser/query-selector-* tests.
&gt; Hmm.
&gt; 
&gt; Let me watch the intl2 results.
&gt; It seems that result of intl2 was getting worse at the next cycle (@r141649) after this patch
&gt; 
&gt; (In reply to comment #24)
&gt; &gt; It appears to have caused a slight dent in Chromium Win Perf test:
&gt; &gt; http://build.chromium.org/f/chromium/perf/chromium-rel-win7-webkit/intl2/report.html?history=150&amp;rev=-1
&gt; &gt; 
&gt; &gt; as well as some of Parser/query-selector-* tests:
&gt; &gt; http://webkit-perf.appspot.com/graph.html#tests=[[3630247,2001,3001]]&amp;sel=1360097136438.8433,1360136808728,328.6474501108647,364.56762749445676&amp;displayrange=7&amp;datatype=running</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826279</commentid>
    <comment_count>28</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-06 02:59:30 -0800</bug_when>
    <thetext>The next page cycle test (inlcuding r141973) was done and I cannot find any difference in intl2 result as originally pointed out.

So let me re-land this patch. If this patch still causes performance regression, please feel free to revert this. I&apos;ll investigate it tomorrow in that case.

(In reply to comment #27)
&gt; It seems the result of intl2 came back to the normal score at r141972, which is before reverting this patch at r141973. So this patch seems innocent.
&gt; 
&gt; Let me watch the result of intl2 after r141973. If nothing changes, let me re-land this patch.
&gt; 
&gt; If there is any concerns, please let me know it.
&gt; 
&gt; &gt; http://build.chromium.org/f/chromium/perf/chromium-rel-win7-webkit/intl2/report.html?history=150&amp;rev=-1
&gt; 
&gt; (In reply to comment #26)
&gt; &gt; I can not reproduce on my machines using Parser/query-selector-* tests.
&gt; &gt; Hmm.
&gt; &gt; 
&gt; &gt; Let me watch the intl2 results.
&gt; &gt; It seems that result of intl2 was getting worse at the next cycle (@r141649) after this patch
&gt; &gt; 
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; It appears to have caused a slight dent in Chromium Win Perf test:
&gt; &gt; &gt; http://build.chromium.org/f/chromium/perf/chromium-rel-win7-webkit/intl2/report.html?history=150&amp;rev=-1
&gt; &gt; &gt; 
&gt; &gt; &gt; as well as some of Parser/query-selector-* tests:
&gt; &gt; &gt; http://webkit-perf.appspot.com/graph.html#tests=[[3630247,2001,3001]]&amp;sel=1360097136438.8433,1360136808728,328.6474501108647,364.56762749445676&amp;displayrange=7&amp;datatype=running</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826283</commentid>
    <comment_count>29</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-06 03:08:57 -0800</bug_when>
    <thetext>RuleSets and RuleDatas are implementation details of StyleResolver. The overly generic names weren&apos;t a huge problem when they were living in StyleResolver.cpp. As top level files and concepts they are confusing and this patch heads further to that direction. An important part of the refactoring should be understanding what these things are, giving them proper names and ensure they do things their name implies (RuleData is something like &quot;StyleResolverRuleAnalysis&quot; and so on).

I feel the whole &quot;move Foo out of Bar&quot; approach is overly mechanical except as a temporary intermediate step towards the end goal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826284</commentid>
    <comment_count>30</comment_count>
      <attachid>186810</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-06 03:09:25 -0800</bug_when>
    <thetext>Created attachment 186810
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826286</commentid>
    <comment_count>31</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-06 03:15:46 -0800</bug_when>
    <thetext>Ops. I&apos;ve just noticed the comment. Thank you for the comment.

(In reply to comment #29)
&gt; RuleSets and RuleDatas are implementation details of StyleResolver. The overly generic names weren&apos;t a huge problem when they were living in StyleResolver.cpp. As top level files and concepts they are confusing and this patch heads further to that direction. An important part of the refactoring should be understanding what these things are, giving them proper names and ensure they do things their name implies (RuleData is something like &quot;StyleResolverRuleAnalysis&quot; and so on).
&gt; 
&gt; I feel the whole &quot;move Foo out of Bar&quot; approach is overly mechanical except as a temporary intermediate step towards the end goal.

Agreed. it&apos;s important to have a good name. I&apos;ve named it StyleResolverRuleSets once. But I&apos;ve abandoned the idea..

Since DocumentRuleSets is only used from StyleResolver, prefixing it with StyleResolverXXX sounds reasonable. Let me address that later in another patch. Is that okay? I am now going to home.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826300</commentid>
    <comment_count>32</comment_count>
      <attachid>186810</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-06 03:40:06 -0800</bug_when>
    <thetext>Comment on attachment 186810
Patch for landing

Lets wait if Ryosuke sees the regression going away as a result of revert before re-landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826301</commentid>
    <comment_count>33</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-06 03:42:36 -0800</bug_when>
    <thetext>Also I would prefer to fixing the existing types first. I see no point in propagating bad names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826739</commentid>
    <comment_count>34</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-06 13:58:21 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 186810 [details])
&gt; Lets wait if Ryosuke sees the regression going away as a result of revert before re-landing.

I didn&apos;t see any improvement when this patch was rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826930</commentid>
    <comment_count>35</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-06 17:53:48 -0800</bug_when>
    <thetext>Thank you for the comments.

(In reply to comment #34)
&gt; (In reply to comment #32)
&gt; &gt; (From update of attachment 186810 [details] [details])
&gt; &gt; Lets wait if Ryosuke sees the regression going away as a result of revert before re-landing.
&gt; 
&gt; I didn&apos;t see any improvement when this patch was rolled out.

Thank you for letting me know that. I think we can assume this is a false positive.

To move forward, we should have a good name to the factored class. I&apos;d like to hear opinions. Which do you prefer? Any recommendation?

1 .DocumentRuleSets
2. StyleResolverRuleSets
3. (Insert other good names here.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828312</commentid>
    <comment_count>36</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-08 01:06:13 -0800</bug_when>
    <thetext>If there is no objection to the current naming in a few days, let me land this patch.

(In reply to comment #35)
&gt; Thank you for the comments.
&gt; 
&gt; (In reply to comment #34)
&gt; &gt; (In reply to comment #32)
&gt; &gt; &gt; (From update of attachment 186810 [details] [details] [details])
&gt; &gt; &gt; Lets wait if Ryosuke sees the regression going away as a result of revert before re-landing.
&gt; &gt; 
&gt; &gt; I didn&apos;t see any improvement when this patch was rolled out.
&gt; 
&gt; Thank you for letting me know that. I think we can assume this is a false positive.
&gt; 
&gt; To move forward, we should have a good name to the factored class. I&apos;d like to hear opinions. Which do you prefer? Any recommendation?
&gt; 
&gt; 1 .DocumentRuleSets
&gt; 2. StyleResolverRuleSets
&gt; 3. (Insert other good names here.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830509</commentid>
    <comment_count>37</comment_count>
      <attachid>186810</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-11 20:33:43 -0800</bug_when>
    <thetext>Comment on attachment 186810
Patch for landing

Clearing flags on attachment: 186810

Committed r142573: &lt;http://trac.webkit.org/changeset/142573&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830510</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-11 20:33:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184387</attachid>
            <date>2013-01-23 20:13:59 -0800</date>
            <delta_ts>2013-02-04 21:06:43 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-107777-20130124131051.patch</filename>
            <type>text/plain</type>
            <size>70654</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMzk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM2YWQ4YmViYjliMGZj
NTViZTY3M2U4YjU0ZDg2ODVhMGY2NzkzNy4uZmVjZDZlYWQyYjZmNGFlZDJmYjRmOTZjYWEwMzMx
MzRmM2I0MzVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEzLTAxLTIzICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBTcGxpdCBlYWNoIFJ1bGVT
ZXQgYW5kIGZlYXR1cmUgb3V0IGZyb20gU3R5bGVSZXNvbHZlciBpbnRvIGl0cyBvd24gY2xhc3Mu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc3NzcK
KworICAgICAgICBXSVAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NBbGxJbk9uZS5jcHA6
CisgICAgICAgICogY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5FdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnBy
aW50RXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVVBU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVmYXVsdFN0eWxlU2hlZXRzOjppbml0RGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlZmF1bHRTdHlsZVNoZWV0czo6bG9hZEZ1bGxEZWZhdWx0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVmYXVsdFN0eWxlU2hlZXRzOjpsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTdHlsZVNoZWV0czo6dmlld1NvdXJjZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTdHlsZVNoZWV0czo6ZW5zdXJlRGVmYXVsdFN0eWxl
U2hlZXRzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudENTU09NV3JhcHBl
cjo6Y29sbGVjdEZyb21TaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudENTU09NV3Jh
cHBlcjo6Y29sbGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudENTU09NV3JhcHBlcjo6
ZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudENTU09NV3JhcHBlcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRSdWxlU2V0czo6RG9jdW1lbnRSdWxlU2V0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFJ1bGVTZXRzOjp+RG9jdW1lbnRSdWxlU2V0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFJ1bGVTZXRzOjppbml0VXNlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50UnVsZVNldHM6OmNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMpOgorICAgICAg
ICAoV2ViQ29yZTo6bWFrZVJ1bGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxl
U2V0czo6cmVzZXRBdXRob3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVT
ZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dFJ1bGVTZXRzOjpjb2xsZWN0RmVhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRS
dWxlU2V0czo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGNzcy9Eb2N1bWVudFJ1bGVT
ZXRzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWZhdWx0U3R5bGVT
aGVldHMpOgorICAgICAgICAoRG9jdW1lbnRDU1NPTVdyYXBwZXIpOgorICAgICAgICAoRG9jdW1l
bnRSdWxlU2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjphdXRob3JT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjp1c2VyU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6ZmVhdHVyZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6c2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudFJ1bGVTZXRzOjp1bmNvbW1vbkF0dHJpYnV0ZSk6CisgICAgICAgICogY3NzL01lZGlh
UXVlcnlFdmFsdWF0b3IuaDoKKyAgICAgICAgKE1lZGlhUXVlcnlFdmFsdWF0b3IpOgorICAgICAg
ICAqIGNzcy9SdWxlU2V0Lmg6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdHlsZVJl
c29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0
eWxlU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9y
UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2xhc3NOYW1lc0FmZmVjdGVkQnlS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzY29wZVJlc29sdmVyKToKKyAgICAg
ICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cnVs
ZVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlc1NpYmxpbmdSdWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1c2VzRmlyc3RMaW5lUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlc0JlZm9yZUFmdGVyUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3Nzb21XcmFwZXByKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9yQ2xhc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JGb3JJZCk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbE1hdGNoUnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbFByb2Nlc3NSdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUpOgorCiAyMDEzLTAxLTE2
ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBHcm91cCBwYXJh
bWV0ZXJzIChmaXJzdFJ1bGVJbmRleCBhbmQgbGFzdFJ1bGVJbmRleCkgaW50byBhIHBhcmFtZXRl
ciBvYmplY3QsIFJ1bGVSYW5nZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYTljMGRiYzJiNDcz
ZjhmYzU5YTljYzBjOGFiNDhmZmY5NWVlNzU1ZC4uMTU0ODkzOWRkODg4NTAyMTQ2MzhmOWJmZWEz
NmI1MmJmZDhlODgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEwNjgsNiArMTA2OCw3IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3MvQ1NTVmFsdWUuY3BwCiAgICAgY3NzL0NTU1Zh
bHVlTGlzdC5jcHAKICAgICBjc3MvQ1NTVmFsdWVQb29sLmNwcAorICAgIGNzcy9Eb2N1bWVudFJ1
bGVTZXRzLmNwcAogICAgIGNzcy9Gb250RmVhdHVyZVZhbHVlLmNwcAogICAgIGNzcy9Gb250VmFs
dWUuY3BwCiAgICAgY3NzL0xlbmd0aEZ1bmN0aW9ucy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCmluZGV4IGE0Y2ExYjBiYzhhNjU5Yzc4ZTcxYzhkMDVmOWI4MzVlNDUwOTRhYjkuLjNh
YTAwNmVmNjViMmQyY2EwMWNmODM0NDMxMWU5YmIzZDljN2E3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQpAQCAtMjYxOSw2ICsyNjE5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NWYXJpYWJsZVZhbHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9EYXNoYm9hcmRSZWdp
b24uaCBcCisJU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3Mv
Rm9udEZlYXR1cmVWYWx1ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmVhdHVyZVZh
bHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250VmFsdWUuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmlu
ZGV4IDNhOWQ4Zjk4ZjNjYjZhNGU0ZjQyMTg2YjA1MWE0NjZlNDFiNDMxOGYuLjVjODIzZjM3MTgw
OTE3NjljMDMyODliNWJlMjcwMTZlZjEzMjI2OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMjk1LDYgKzI5
NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGNzcy9DU1NWYWx1ZS5jcHAgXAogICAgIGNzcy9DU1NW
YWx1ZUxpc3QuY3BwIFwKICAgICBjc3MvQ1NTVmFsdWVQb29sLmNwcCBcCisgICAgY3NzL0RvY3Vt
ZW50UnVsZVNldHMuY3BwIFwKICAgICBjc3MvRm9udEZlYXR1cmVWYWx1ZS5jcHAgXAogICAgIGNz
cy9Gb250VmFsdWUuY3BwIFwKICAgICBjc3MvTGVuZ3RoRnVuY3Rpb25zLmNwcCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggOWY5NmQxZTg1YzQ5NjllMDFkNDliNmNhY2E3YTU5NzVlYTJlZjk4Yy4uMGU0
ZmQ5MzBkNDFlNWYwZjYyZDM3MDQ5OGI4ODIxNWI2ZmVkNDI5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMTUzOSw2ICsxNTM5LDggQEAKICAgICAgICAgICAgICdjc3MvQ1NTVmFyaWFibGVWYWx1ZS5o
JywKICAgICAgICAgICAgICdjc3MvQ291bnRlci5oJywKICAgICAgICAgICAgICdjc3MvRGFzaGJv
YXJkUmVnaW9uLmgnLAorICAgICAgICAgICAgJ2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcCcsCisg
ICAgICAgICAgICAnY3NzL0RvY3VtZW50UnVsZVNldHMuaCcsCiAgICAgICAgICAgICAnY3NzL0Zv
bnRGZWF0dXJlVmFsdWUuY3BwJywKICAgICAgICAgICAgICdjc3MvRm9udEZlYXR1cmVWYWx1ZS5o
JywKICAgICAgICAgICAgICdjc3MvRm9udFZhbHVlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODk4YzIzNDZkZDcyMDU0
OTJjMTczODhmZDNkNzU0OTE5OGQ2NGEyMy4uNDgzMmIyOWRkNDQ4NjdkY2Q1ZDJjNzVkMDQyNDJh
ZDBiNjRmN2I2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTQzMyw2ICsxNDMzLDggQEAKIAkJNEExRTcxQTYxNEUxMDZBQzAw
NjI2RjlEIC8qIEpTU2hhZG93Um9vdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEExRTcxQTQxNEUxMDZBQzAwNjI2RjlEIC8qIEpTU2hhZG93Um9vdC5o
ICovOyB9OwogCQk0QTM4QkY1MDE0RkUxQzA5MDA2MTI1MTIgLyogV2ViU29ja2V0RGVmbGF0ZUZy
YW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
QTM4QkY0RTE0RkUxQzA5MDA2MTI1MTIgLyogV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAgKi87
IH07CiAJCTRBMzhCRjUxMTRGRTFDMDkwMDYxMjUxMiAvKiBXZWJTb2NrZXREZWZsYXRlRnJhbWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTM4QkY0
RjE0RkUxQzA5MDA2MTI1MTIgLyogV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5oICovOyB9OworCQk0
QTRGNDhBOTE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTRGNDhBNzE2QjBERkMwMDBF
REJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5jcHAgKi87IH07CisJCTRBNEY0OEFBMTZCMERGQzAw
MEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QTRGNDhBODE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRS
dWxlU2V0cy5oICovOyB9OwogCQk0QTVBMkFEQjE2MUU3RTAwMDA1ODg5REQgLyogV2ViU29ja2V0
RXh0ZW5zaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRBNUEyQUQ5MTYxRTdFMDAwMDU4ODlERCAvKiBXZWJTb2NrZXRFeHRlbnNpb25Q
YXJzZXIuY3BwICovOyB9OwogCQk0QTVBMkFEQzE2MUU3RTAwMDA1ODg5REQgLyogV2ViU29ja2V0
RXh0ZW5zaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0QTVBMkFEQTE2MUU3RTAwMDA1ODg5REQgLyogV2ViU29ja2V0RXh0ZW5zaW9uUGFy
c2VyLmggKi87IH07CiAJCTRBNkEwQzVCMTUyMzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRv
d1RyZWVXYWxrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEE2QTBDNTkxNTIzMkYyNDAwQjA5QzZFIC8qIENvbXBvc2VkU2hhZG93VHJlZVdhbGtl
ci5jcHAgKi87IH07CkBAIC04Nzc3LDYgKzg3NzksOCBAQAogCQk0QTFFNzFBNDE0RTEwNkFDMDA2
MjZGOUQgLyogSlNTaGFkb3dSb290LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTU2hhZG93Um9vdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTM4QkY0RTE0
RkUxQzA5MDA2MTI1MTIgLyogV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcDsgcGF0
aCA9IE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEEzOEJGNEYxNEZFMUMwOTAwNjEyNTEyIC8qIFdlYlNv
Y2tldERlZmxhdGVGcmFtZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
U29ja2V0RGVmbGF0ZUZyYW1lci5oOyBwYXRoID0gTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dERlZmxhdGVGcmFtZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEE0RjQ4QTcx
NkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRSdWxlU2V0cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTRBNEY0OEE4MTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVT
ZXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvY3VtZW50UnVsZVNldHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEE1QTJBRDkxNjFFN0UwMDAwNTg4OURE
IC8qIFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBXZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuY3BwOyBwYXRoID0gTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTRBNUEyQURBMTYxRTdFMDAwMDU4ODlERCAvKiBXZWJTb2NrZXRFeHRl
bnNpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViU29ja2V0
RXh0ZW5zaW9uUGFyc2VyLmg7IHBhdGggPSBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0
ZW5zaW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBNkEwQzU5MTUy
MzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNzQ4LDYgKzIxNzUyLDggQEAKIAkJCQlF
NDlCRDlGOTEzMUZEMkVEMDAzQzU2RjAgLyogQ1NTVmFsdWVQb29sLmggKi8sCiAJCQkJQ0FFOUY5
MEUxNDY0NDFGMDAwQzI0NUIxIC8qIENTU1ZhcmlhYmxlVmFsdWUuaCAqLywKIAkJCQlBODBFNkNF
MTBBMTk4OUNBMDA3RkI4QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggKi8sCisJCQkJNEE0RjQ4QTcx
NkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuY3BwICovLAorCQkJCTRBNEY0OEE4
MTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmggKi8sCiAJCQkJNEE2RTlGQzEx
M0MxN0QxRDAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlVmFsdWUuY3BwICovLAogCQkJCTRBNkU5RkMy
MTNDMTdEMUQwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVZhbHVlLmggKi8sCiAJCQkJQTgwRTZDQzcw
QTE5ODlDQTAwN0ZCOEM1IC8qIEZvbnRWYWx1ZS5jcHAgKi8sCkBAIC0yMzMwNiw2ICsyMzMxMiw3
IEBACiAJCQkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ5NDdGRkUxMkY4MENEMjAwQTBGNjMxIC8qIERv
Y3VtZW50T3JkZXJlZE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRkJBRTgwQjUxNTJFRDAw
MDFGMUQ3IC8qIERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0QTRGNDhBQTE2
QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QUQ2RTcxQUQxNjY4ODk5RDAwMzIwQzEzIC8qIERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZCIC8qIERvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBCOTA1NjFBMEYyNTc4QkYw
MDk1RkY2QSAvKiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MjkzOTMsNiArMjk0MDAsNyBAQAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xU
VW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3RTJFMEUxMkYwRkM5QzAwQzEz
Mzc5IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1MzczNTIxMzdCNjUx
ODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRBNEY0OEE5MTZC
MERGQzAwMEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKaW5kZXggODY0NmRmNjY4MTMwMDI3ZDVlMTUzZTg3N2My
ZDUxOWUzNzBlZGVmYi4uNDczN2Q3MDEyNDA5N2I2NDBjYjQ4ZTg5MGI0Nzk3MjY5NDI1YWEyNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVk
ZSAiQ1NTVmFsdWUuY3BwIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5jcHAiCiAjaW5jbHVkZSAi
Q1NTVmFsdWVQb29sLmNwcCIKKyNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRzLmNwcCIKICNpbmNs
dWRlICJSdWxlRmVhdHVyZS5jcHAiCiAjaW5jbHVkZSAiUnVsZVNldC5jcHAiCiAjaW5jbHVkZSAi
U2VsZWN0b3JGaWx0ZXIuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RvY3Vt
ZW50UnVsZVNldHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjExODBiOTE4NmVhYmYzZWNkMjRjMWYyYTA3YWZmNDM3MjdmZWIzMjUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAK
QEAgLTAsMCArMSwzOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxk
IEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBO
aWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3Nr
dXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRv
cmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJEb2N1bWVudFJ1bGVTZXRzLmgiCisKKyNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCisj
aW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5j
bHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb24uaCIKKyNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJSdWxlU2V0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgorI2luY2x1ZGUgIlVzZXJBZ2Vu
dFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTUmVnaW9uUnVsZS5oIgorI2luY2x1
ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01l
bW9yeUluc3RydW1lbnRhdGlvbkhhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitSdWxlU2V0KiBEZWZhdWx0U3R5bGVTaGVldHM6
OmRlZmF1bHRTdHlsZTsKK1J1bGVTZXQqIERlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFF1aXJr
c1N0eWxlOworUnVsZVNldCogRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0UHJpbnRTdHlsZTsK
K1J1bGVTZXQqIERlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFZpZXdTb3VyY2VTdHlsZTsKKwor
U3R5bGVTaGVldENvbnRlbnRzKiBEZWZhdWx0U3R5bGVTaGVldHM6OnNpbXBsZURlZmF1bHRTdHls
ZVNoZWV0OworU3R5bGVTaGVldENvbnRlbnRzKiBEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRT
dHlsZVNoZWV0OworU3R5bGVTaGVldENvbnRlbnRzKiBEZWZhdWx0U3R5bGVTaGVldHM6OnF1aXJr
c1N0eWxlU2hlZXQ7CitTdHlsZVNoZWV0Q29udGVudHMqIERlZmF1bHRTdHlsZVNoZWV0czo6c3Zn
U3R5bGVTaGVldDsKK1N0eWxlU2hlZXRDb250ZW50cyogRGVmYXVsdFN0eWxlU2hlZXRzOjptYXRo
TUxTdHlsZVNoZWV0OworU3R5bGVTaGVldENvbnRlbnRzKiBEZWZhdWx0U3R5bGVTaGVldHM6Om1l
ZGlhQ29udHJvbHNTdHlsZVNoZWV0OworU3R5bGVTaGVldENvbnRlbnRzKiBEZWZhdWx0U3R5bGVT
aGVldHM6OmZ1bGxzY3JlZW5TdHlsZVNoZWV0OworCisvLyBGSVhNRTogSXQgd291bGQgYmUgbmlj
ZSB0byB1c2Ugc29tZSBtZWNoYW5pc20gdGhhdCBndWFyYW50ZWVzIHRoaXMgaXMgaW4gc3luYyB3
aXRoIHRoZSByZWFsIFVBIHN0eWxlc2hlZXQuCitzdGF0aWMgY29uc3QgY2hhciogc2ltcGxlVXNl
ckFnZW50U3R5bGVTaGVldCA9ICJodG1sLGJvZHksZGl2e2Rpc3BsYXk6YmxvY2t9aGVhZHtkaXNw
bGF5Om5vbmV9Ym9keXttYXJnaW46OHB4fWRpdjpmb2N1cyxzcGFuOmZvY3Vze291dGxpbmU6YXV0
byA1cHggLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yfWE6LXdlYmtpdC1hbnktbGlua3tjb2xvcjot
d2Via2l0LWxpbms7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1hOi13ZWJraXQtYW55LWxpbms6
YWN0aXZle2NvbG9yOi13ZWJraXQtYWN0aXZlbGlua30iOworCitzdGF0aWMgaW5saW5lIGJvb2wg
ZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShFbGVtZW50KiBlKQoreworICAgIHJldHVy
biBlLT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGUtPmhhc1RhZ05hbWUoaGVhZFRhZykgfHwgZS0+
aGFzVGFnTmFtZShib2R5VGFnKSB8fCBlLT5oYXNUYWdOYW1lKGRpdlRhZykgfHwgZS0+aGFzVGFn
TmFtZShzcGFuVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGJyVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGFU
YWcpOworfQorCitzdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgc2NyZWVuRXZhbCgp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yLCBz
dGF0aWNTY3JlZW5FdmFsLCAoInNjcmVlbiIpKTsKKyAgICByZXR1cm4gc3RhdGljU2NyZWVuRXZh
bDsKK30KKworc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHByaW50RXZhbCgpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yLCBzdGF0
aWNQcmludEV2YWwsICgicHJpbnQiKSk7CisgICAgcmV0dXJuIHN0YXRpY1ByaW50RXZhbDsKK30K
Kworc3RhdGljIFN0eWxlU2hlZXRDb250ZW50cyogcGFyc2VVQVNoZWV0KGNvbnN0IFN0cmluZyYg
c3RyKQoreworICAgIFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQgPSBTdHlsZVNoZWV0Q29udGVu
dHM6OmNyZWF0ZSgpLmxlYWtSZWYoKTsgLy8gbGVhayB0aGUgc2hlZXQgb24gcHVycG9zZQorICAg
IHNoZWV0LT5wYXJzZVN0cmluZyhzdHIpOworICAgIHJldHVybiBzaGVldDsKK30KKworc3RhdGlj
IFN0eWxlU2hlZXRDb250ZW50cyogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIHNpemUpCit7CisgICAgcmV0dXJuIHBhcnNlVUFTaGVldChTdHJpbmcoY2hhcmFj
dGVycywgc2l6ZSkpOworfQorCit2b2lkIERlZmF1bHRTdHlsZVNoZWV0czo6aW5pdERlZmF1bHRT
dHlsZShFbGVtZW50KiByb290KQoreworICAgIGlmICghZGVmYXVsdFN0eWxlKSB7CisgICAgICAg
IGlmICghcm9vdCB8fCBlbGVtZW50Q2FuVXNlU2ltcGxlRGVmYXVsdFN0eWxlKHJvb3QpKQorICAg
ICAgICAgICAgbG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOworICAgIH0KK30KKwordm9pZCBEZWZhdWx0U3R5
bGVTaGVldHM6OmxvYWRGdWxsRGVmYXVsdFN0eWxlKCkKK3sKKyAgICBpZiAoc2ltcGxlRGVmYXVs
dFN0eWxlU2hlZXQpIHsKKyAgICAgICAgQVNTRVJUKGRlZmF1bHRTdHlsZSk7CisgICAgICAgIEFT
U0VSVChkZWZhdWx0UHJpbnRTdHlsZSA9PSBkZWZhdWx0U3R5bGUpOworICAgICAgICBkZWxldGUg
ZGVmYXVsdFN0eWxlOworICAgICAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldC0+ZGVyZWYoKTsK
KyAgICAgICAgZGVmYXVsdFN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCkubGVha1B0cigpOworICAg
ICAgICBkZWZhdWx0UHJpbnRTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKyAg
ICAgICAgc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAg
IEFTU0VSVCghZGVmYXVsdFN0eWxlKTsKKyAgICAgICAgZGVmYXVsdFN0eWxlID0gUnVsZVNldDo6
Y3JlYXRlKCkubGVha1B0cigpOworICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZSA9IFJ1bGVTZXQ6
OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKyAgICAgICAgZGVmYXVsdFF1aXJrc1N0eWxlID0gUnVsZVNl
dDo6Y3JlYXRlKCkubGVha1B0cigpOworICAgIH0KKworICAgIC8vIFN0cmljdC1tb2RlIHJ1bGVz
LgorICAgIFN0cmluZyBkZWZhdWx0UnVsZXMgPSBTdHJpbmcoaHRtbFVzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZihodG1sVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1
bHRUaGVtZSgpLT5leHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7CisgICAgZGVmYXVsdFN0eWxlU2hl
ZXQgPSBwYXJzZVVBU2hlZXQoZGVmYXVsdFJ1bGVzKTsKKyAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KGRlZmF1bHRTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgIGRlZmF1
bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChkZWZhdWx0U3R5bGVTaGVldCwgcHJpbnRF
dmFsKCkpOworCisgICAgLy8gUXVpcmtzLW1vZGUgcnVsZXMuCisgICAgU3RyaW5nIHF1aXJrc1J1
bGVzID0gU3RyaW5nKHF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihxdWlya3NVc2Vy
QWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJhUXVp
cmtzU3R5bGVTaGVldCgpOworICAgIHF1aXJrc1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQocXVp
cmtzUnVsZXMpOworICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocXVp
cmtzU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKK30KKwordm9pZCBEZWZhdWx0U3R5bGVTaGVl
dHM6OmxvYWRTaW1wbGVEZWZhdWx0U3R5bGUoKQoreworICAgIEFTU0VSVCghZGVmYXVsdFN0eWxl
KTsKKyAgICBBU1NFUlQoIXNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KTsKKworICAgIGRlZmF1bHRT
dHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKyAgICAvLyBUaGVyZSBhcmUgbm8g
bWVkaWEtc3BlY2lmaWMgcnVsZXMgaW4gdGhlIHNpbXBsZSBkZWZhdWx0IHN0eWxlLgorICAgIGRl
ZmF1bHRQcmludFN0eWxlID0gZGVmYXVsdFN0eWxlOworICAgIGRlZmF1bHRRdWlya3NTdHlsZSA9
IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKworICAgIHNpbXBsZURlZmF1bHRTdHlsZVNo
ZWV0ID0gcGFyc2VVQVNoZWV0KHNpbXBsZVVzZXJBZ2VudFN0eWxlU2hlZXQsIHN0cmxlbihzaW1w
bGVVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CisgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKKworICAgIC8vIE5v
IG5lZWQgdG8gaW5pdGlhbGl6ZSBxdWlya3Mgc2hlZXQgeWV0IGFzIHRoZXJlIGFyZSBubyBxdWly
ayBydWxlcyBmb3IgZWxlbWVudHMgYWxsb3dlZCBpbiBzaW1wbGUgZGVmYXVsdCBzdHlsZS4KK30K
KworUnVsZVNldCogRGVmYXVsdFN0eWxlU2hlZXRzOjp2aWV3U291cmNlU3R5bGUoKQoreworICAg
IGlmICghZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSkgeworICAgICAgICBkZWZhdWx0Vmlld1NvdXJj
ZVN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCkubGVha1B0cigpOworICAgICAgICBkZWZhdWx0Vmll
d1NvdXJjZVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYXJzZVVBU2hlZXQoc291cmNlVXNlckFn
ZW50U3R5bGVTaGVldCwgc2l6ZW9mKHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVu
RXZhbCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7Cit9CisK
Kwordm9pZCBEZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAoc2ltcGxlRGVmYXVsdFN0eWxlU2hl
ZXQgJiYgIWVsZW1lbnRDYW5Vc2VTaW1wbGVEZWZhdWx0U3R5bGUoZWxlbWVudCkpCisgICAgICAg
IGxvYWRGdWxsRGVmYXVsdFN0eWxlKCk7CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGlmIChlbGVt
ZW50LT5pc1NWR0VsZW1lbnQoKSAmJiAhc3ZnU3R5bGVTaGVldCkgeworICAgICAgICAvLyBTVkcg
cnVsZXMuCisgICAgICAgIHN2Z1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQoc3ZnVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKHN2Z1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKyAgICAgICAgZGVm
YXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdmdTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkp
OworICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3ZnU3R5bGVT
aGVldCwgcHJpbnRFdmFsKCkpOworICAgIH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKE1BVEhNTCkK
KyAgICBpZiAoZWxlbWVudC0+aXNNYXRoTUxFbGVtZW50KCkgJiYgIW1hdGhNTFN0eWxlU2hlZXQp
IHsKKyAgICAgICAgLy8gTWF0aE1MIHJ1bGVzLgorICAgICAgICBtYXRoTUxTdHlsZVNoZWV0ID0g
cGFyc2VVQVNoZWV0KG1hdGhtbFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtYXRobWxVc2Vy
QWdlbnRTdHlsZVNoZWV0KSk7CisgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQobWF0aE1MU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKKyAgICAgICAgZGVmYXVsdFByaW50
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1hdGhNTFN0eWxlU2hlZXQsIHByaW50RXZhbCgpKTsK
KyAgICB9CisjZW5kaWYKKworI2lmIEVOQUJMRShWSURFTykKKyAgICBpZiAoIW1lZGlhQ29udHJv
bHNTdHlsZVNoZWV0ICYmIChlbGVtZW50LT5oYXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkpIHsKKyAgICAgICAgU3RyaW5nIG1lZGlhUnVsZXMgPSBT
dHJpbmcobWVkaWFDb250cm9sc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRy
b2xzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShlbGVt
ZW50LT5kb2N1bWVudCgpLT5wYWdlKCkpLT5leHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7
CisgICAgICAgIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KG1lZGlhUnVs
ZXMpOworICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1lZGlhQ29udHJv
bHNTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQobWVkaWFDb250cm9sc1N0eWxlU2hlZXQsIHByaW50RXZhbCgpKTsK
KyAgICB9CisjZW5kaWYKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAoIWZ1
bGxzY3JlZW5TdHlsZVNoZWV0ICYmIGVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdElzRnVsbFNj
cmVlbigpKSB7CisgICAgICAgIFN0cmluZyBmdWxsc2NyZWVuUnVsZXMgPSBTdHJpbmcoZnVsbHNj
cmVlblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihmdWxsc2NyZWVuVXNlckFnZW50U3R5bGVT
aGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5leHRyYUZ1bGxTY3JlZW5TdHls
ZVNoZWV0KCk7CisgICAgICAgIGZ1bGxzY3JlZW5TdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KGZ1
bGxzY3JlZW5SdWxlcyk7CisgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQo
ZnVsbHNjcmVlblN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgICAgIGRlZmF1bHRRdWly
a3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZnVsbHNjcmVlblN0eWxlU2hlZXQsIHNjcmVlbkV2
YWwoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBBU1NFUlQoZGVmYXVsdFN0eWxlLT5mZWF0dXJl
cygpLmlkc0luUnVsZXMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobWF0aE1MU3R5bGVTaGVldCB8
fCBkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkuc2libGluZ1J1bGVzLmlzRW1wdHkoKSk7Cit9CisK
K3ZvaWQgRG9jdW1lbnRDU1NPTVdyYXBwZXI6OmNvbGxlY3RGcm9tU2hlZXQoQ1NTU3R5bGVTaGVl
dCogc3R5bGVTaGVldCkKK3sKKyAgICBpZiAoIW1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAu
aXNFbXB0eSgpKQorICAgICAgICBjb2xsZWN0KHN0eWxlU2hlZXQpOworfQorCit0ZW1wbGF0ZSA8
Y2xhc3MgTGlzdFR5cGU+Cit2b2lkIERvY3VtZW50Q1NTT01XcmFwcGVyOjpjb2xsZWN0KExpc3RU
eXBlKiBsaXN0VHlwZSkKK3sKKyAgICBpZiAoIWxpc3RUeXBlKQorICAgICAgICByZXR1cm47Cisg
ICAgdW5zaWduZWQgc2l6ZSA9IGxpc3RUeXBlLT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1J1bGUqIGNzc1J1bGUgPSBsaXN0
VHlwZS0+aXRlbShpKTsKKyAgICAgICAgc3dpdGNoIChjc3NSdWxlLT50eXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBDU1NSdWxlOjpJTVBPUlRfUlVMRToKKyAgICAgICAgICAgIGNvbGxlY3Qoc3RhdGlj
X2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KGNzc1J1bGUpLT5zdHlsZVNoZWV0KCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUnVsZTo6TUVESUFfUlVMRToKKyAgICAgICAgICAg
IGNvbGxlY3Qoc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4oY3NzUnVsZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisjaWYgRU5BQkxFKENTUzNfQ09ORElUSU9OQUxfUlVMRVMpCisgICAgICAgIGNh
c2UgQ1NTUnVsZTo6U1VQUE9SVFNfUlVMRToKKyAgICAgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBw
ZXJzKHN0YXRpY19jYXN0PENTU1N1cHBvcnRzUnVsZSo+KGNzc1J1bGUpKTsKKyAgICAgICAgICAg
IGJyZWFrOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19SRUdJT05TKQorICAgICAgICBjYXNlIENT
U1J1bGU6OldFQktJVF9SRUdJT05fUlVMRToKKyAgICAgICAgICAgIGNvbGxlY3Qoc3RhdGljX2Nh
c3Q8V2ViS2l0Q1NTUmVnaW9uUnVsZSo+KGNzc1J1bGUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
I2VuZGlmCisgICAgICAgIGNhc2UgQ1NTUnVsZTo6U1RZTEVfUlVMRToKKyAgICAgICAgICAgIG1f
c3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuYWRkKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+
KGNzc1J1bGUpLT5zdHlsZVJ1bGUoKSwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY3NzUnVs
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEb2N1bWVudENTU09NV3JhcHBlcjo6
Y29sbGVjdChIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBzaGVldFdyYXBwZXJTZXQs
IFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVTaGVldCkKK3sKKyAgICBpZiAoIXN0eWxlU2hlZXQp
CisgICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc3R5bGVTaGVldFdy
YXBwZXIgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldCk7CisgICAgc2hlZXRXcmFw
cGVyU2V0LmFkZChzdHlsZVNoZWV0V3JhcHBlcik7CisgICAgY29sbGVjdChzdHlsZVNoZWV0V3Jh
cHBlci5nZXQoKSk7Cit9CisKK3ZvaWQgRG9jdW1lbnRDU1NPTVdyYXBwZXI6OmNvbGxlY3QoY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBzaGVldHMpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNoZWV0cy5zaXplKCk7ICsraSkKKyAgICAgICAgY29sbGVjdChz
aGVldHNbaV0uZ2V0KCkpOworfQorCit2b2lkIERvY3VtZW50Q1NTT01XcmFwcGVyOjpjb2xsZWN0
KERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24qIHN0eWxlU2hlZXRDb2xsZWN0aW9uKQorewor
ICAgIGNvbGxlY3Qoc3R5bGVTaGVldENvbGxlY3Rpb24tPmFjdGl2ZUF1dGhvclN0eWxlU2hlZXRz
KCkpOworICAgIGNvbGxlY3Qoc3R5bGVTaGVldENvbGxlY3Rpb24tPnBhZ2VVc2VyU2hlZXQoKSk7
CisgICAgY29sbGVjdChzdHlsZVNoZWV0Q29sbGVjdGlvbi0+aW5qZWN0ZWRVc2VyU3R5bGVTaGVl
dHMoKSk7CisgICAgY29sbGVjdChzdHlsZVNoZWV0Q29sbGVjdGlvbi0+ZG9jdW1lbnRVc2VyU3R5
bGVTaGVldHMoKSk7Cit9CisKK0NTU1N0eWxlUnVsZSogRG9jdW1lbnRDU1NPTVdyYXBwZXI6OmVu
c3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVSdWxlKiBydWxlLCBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uKiBzdHlsZVNoZWV0Q29sbGVjdGlvbikKK3sKKyAgICBpZiAo
bV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29sbGVj
dChtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIERlZmF1bHRTdHlsZVNoZWV0czo6c2ltcGxl
RGVmYXVsdFN0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0KG1fc3R5bGVTaGVldENTU09NV3Jh
cHBlclNldCwgRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0U3R5bGVTaGVldCk7CisgICAgICAg
IGNvbGxlY3QobV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBEZWZhdWx0U3R5bGVTaGVldHM6
OnF1aXJrc1N0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0KG1fc3R5bGVTaGVldENTU09NV3Jh
cHBlclNldCwgRGVmYXVsdFN0eWxlU2hlZXRzOjpzdmdTdHlsZVNoZWV0KTsKKyAgICAgICAgY29s
bGVjdChtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIERlZmF1bHRTdHlsZVNoZWV0czo6bWF0
aE1MU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3QobV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVy
U2V0LCBEZWZhdWx0U3R5bGVTaGVldHM6Om1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KTsKKyAgICAg
ICAgY29sbGVjdChtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIERlZmF1bHRTdHlsZVNoZWV0
czo6ZnVsbHNjcmVlblN0eWxlU2hlZXQpOworCisgICAgICAgIGNvbGxlY3Qoc3R5bGVTaGVldENv
bGxlY3Rpb24pOworICAgIH0KKyAgICByZXR1cm4gbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1h
cC5nZXQocnVsZSkuZ2V0KCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRDU1NPTVdyYXBwZXI6OnJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7
CisgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29y
ZU1lbW9yeVR5cGVzOjpDU1MpOworICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGVSdWxlVG9DU1NP
TVdyYXBwZXJNYXApOworICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGVTaGVldENTU09NV3JhcHBl
clNldCk7Cit9CisKK0RvY3VtZW50UnVsZVNldHM6OkRvY3VtZW50UnVsZVNldHMoKQoreworfQor
CitEb2N1bWVudFJ1bGVTZXRzOjp+RG9jdW1lbnRSdWxlU2V0cygpCit7Cit9CisKK3ZvaWQgRG9j
dW1lbnRSdWxlU2V0czo6aW5pdFVzZXJTdHlsZShEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
KiBzdHlsZVNoZWV0Q29sbGVjdGlvbiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVt
LCBTdHlsZVJlc29sdmVyJiByZXNvbHZlcikKK3sKKyAgICBPd25QdHI8UnVsZVNldD4gdGVtcFVz
ZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIGlmIChDU1NTdHlsZVNoZWV0KiBwYWdl
VXNlclNoZWV0ID0gc3R5bGVTaGVldENvbGxlY3Rpb24tPnBhZ2VVc2VyU2hlZXQoKSkKKyAgICAg
ICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZVVzZXJTaGVldC0+Y29udGVu
dHMoKSwgbWVkaXVtLCAmcmVzb2x2ZXIpOworICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVT
aGVldHMoc3R5bGVTaGVldENvbGxlY3Rpb24tPmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCksICp0
ZW1wVXNlclN0eWxlLCBtZWRpdW0sIHJlc29sdmVyKTsKKyAgICBjb2xsZWN0UnVsZXNGcm9tVXNl
clN0eWxlU2hlZXRzKHN0eWxlU2hlZXRDb2xsZWN0aW9uLT5kb2N1bWVudFVzZXJTdHlsZVNoZWV0
cygpLCAqdGVtcFVzZXJTdHlsZSwgbWVkaXVtLCByZXNvbHZlcik7CisgICAgaWYgKHRlbXBVc2Vy
U3R5bGUtPm1fcnVsZUNvdW50ID4gMCB8fCB0ZW1wVXNlclN0eWxlLT5tX3BhZ2VSdWxlcy5zaXpl
KCkgPiAwKQorICAgICAgICBtX3VzZXJTdHlsZSA9IHRlbXBVc2VyU3R5bGUucmVsZWFzZSgpOwor
fQorCit2b2lkIERvY3VtZW50UnVsZVNldHM6OmNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVl
dHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiB1c2VyU2hlZXRzLCBSdWxl
U2V0JiB1c2VyU3R5bGUsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVS
ZXNvbHZlciYgcmVzb2x2ZXIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZXJT
aGVldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKHVzZXJTaGVldHNbaV0tPmNvbnRl
bnRzKCktPmlzVXNlclN0eWxlU2hlZXQoKSk7CisgICAgICAgIHVzZXJTdHlsZS5hZGRSdWxlc0Zy
b21TaGVldCh1c2VyU2hlZXRzW2ldLT5jb250ZW50cygpLCBtZWRpdW0sICZyZXNvbHZlcik7Cisg
ICAgfQorfQorCitzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChjb25zdCBW
ZWN0b3I8UnVsZUZlYXR1cmU+JiBydWxlcykKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IHJ1bGVzLnNp
emUoKTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIE93blB0
cjxSdWxlU2V0PiBydWxlU2V0ID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZXNbaV0u
cnVsZSwgcnVsZXNbaV0uc2VsZWN0b3JJbmRleCwgcnVsZXNbaV0uaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogUnVsZUhhc05vU3BlY2lh
bFN0YXRlKTsKKyAgICBydWxlU2V0LT5zaHJpbmtUb0ZpdCgpOworICAgIHJldHVybiBydWxlU2V0
LnJlbGVhc2UoKTsKK30KKwordm9pZCBEb2N1bWVudFJ1bGVTZXRzOjpyZXNldEF1dGhvclN0eWxl
KCkKK3sKKyAgICBtX2F1dGhvclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgbV9hdXRo
b3JTdHlsZS0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOworfQorCit2b2lkIERvY3VtZW50UnVs
ZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBW
ZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHN0eWxlU2hlZXRzLCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yKiBtZWRpdW0sIERvY3VtZW50Q1NTT01XcmFwcGVyJiBjc3NvbVdyYXBwZXIsIGJvb2wg
aXNWaWV3U291cmNlLCBTdHlsZVJlc29sdmVyKiByZXNvbHZlcikKK3sKKyAgICAvLyBUaGlzIGhh
bmRsZXMgc2hlZXRzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHN0eWxlc2hlZXQgbGlzdCBvbmx5
LiBJbiBvdGhlciBjYXNlcyB0aGUgc3R5bGUgcmVzb2x2ZXIKKyAgICAvLyBuZWVkcyB0byBiZSBy
ZWNvbnN0cnVjdGVkLiBUbyBoYW5kbGUgaW5zZXJ0aW9ucyB0b28gdGhlIHJ1bGUgb3JkZXIgbnVt
YmVycyB3b3VsZCBuZWVkIHRvIGJlIHVwZGF0ZWQuCisgICAgdW5zaWduZWQgc2l6ZSA9IHN0eWxl
U2hlZXRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdE5ldzsgaSA8IHNpemU7
ICsraSkgeworICAgICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9IHN0eWxlU2hlZXRzW2ld
LmdldCgpOworICAgICAgICBBU1NFUlQoIWNzc1NoZWV0LT5kaXNhYmxlZCgpKTsKKyAgICAgICAg
aWYgKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaXVtLT5ldmFsKGNzc1NoZWV0LT5t
ZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQgPSBjc3NTaGVldC0+Y29udGVudHMoKTsKKyNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICAgICAgaWYgKGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gU3R5bGVTY29wZVJlc29sdmVyOjpzY29wZUZvcihj
c3NTaGVldCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgYSBkZXBlbmRlbmN5IHRv
IGNhbGxpbmcgYSBTdHlsZVJlc29sdmVyJ3MgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAgICAg
Ly8gSWYgd2UgY2FuIGF2b2lkIGNhbGxpbmcgcmVzb2x2ZXItPmVuc3VyZVNjb3BlUmVzb2x2ZXIo
KSBoZXJlLCB3ZSBkb24ndCBoYXZlIHRvIGluY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIuCisgICAg
ICAgICAgICByZXNvbHZlci0+ZW5zdXJlU2NvcGVSZXNvbHZlcigpLT5lbnN1cmVSdWxlU2V0Rm9y
KHNjb3BlKS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICptZWRpdW0sIHJlc29sdmVyLCBzY29w
ZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIG1f
YXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbWVkaXVtLCByZXNvbHZlcik7
CisgICAgICAgIGNzc29tV3JhcHBlci5jb2xsZWN0RnJvbVNoZWV0KGNzc1NoZWV0KTsKKyAgICB9
CisgICAgbV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsKKyAgICBjb2xsZWN0RmVhdHVyZXMo
aXNWaWV3U291cmNlLCByZXNvbHZlci0+c2NvcGVSZXNvbHZlcigpKTsKK30KKwordm9pZCBEb2N1
bWVudFJ1bGVTZXRzOjpjb2xsZWN0RmVhdHVyZXMoYm9vbCBpc1ZpZXdTb3VyY2UsIFN0eWxlU2Nv
cGVSZXNvbHZlciogc2NvcGVSZXNvbHZlcikKK3sKKyAgICBtX2ZlYXR1cmVzLmNsZWFyKCk7Cisg
ICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2luZyBzaWJsaW5nIHNlbGVjdG9ycyAo
OmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQorICAgIC8vIGluIHRoZSBjdXJyZW50IHNldCBvZiBz
dHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byBy
ZWplY3QKKyAgICAvLyBzaGFyaW5nIGNhbmRpZGF0ZXMuCisgICAgbV9mZWF0dXJlcy5hZGQoRGVm
YXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkpOworICAgIG1fZmVhdHVy
ZXMuYWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOworICAgIGlmIChpc1ZpZXdTb3VyY2Up
CisgICAgICAgIG1fZmVhdHVyZXMuYWRkKERlZmF1bHRTdHlsZVNoZWV0czo6dmlld1NvdXJjZVN0
eWxlKCktPmZlYXR1cmVzKCkpOworCisgICAgaWYgKHNjb3BlUmVzb2x2ZXIpCisgICAgICAgIHNj
b3BlUmVzb2x2ZXItPmNvbGxlY3RGZWF0dXJlc1RvKG1fZmVhdHVyZXMpOworICAgIGlmIChtX3Vz
ZXJTdHlsZSkKKyAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkp
OworCisgICAgbV9zaWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMuc2libGlu
Z1J1bGVzKTsKKyAgICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1f
ZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7Cit9CisKK3ZvaWQgRG9jdW1lbnRSdWxl
U2V0czo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5m
bykgY29uc3QKK3sKKyAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0
aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7CisgICAgaW5mby5hZGRNZW1iZXIobV9hdXRo
b3JTdHlsZSk7CisgICAgaW5mby5hZGRNZW1iZXIobV91c2VyU3R5bGUpOworICAgIGluZm8uYWRk
TWVtYmVyKG1fZmVhdHVyZXMpOworICAgIGluZm8uYWRkTWVtYmVyKG1fc2libGluZ1J1bGVTZXQp
OworICAgIGluZm8uYWRkTWVtYmVyKG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0KTsKKyAgICAv
LyBGSVhNRTogbW92ZSB0aGlzIHRvIGEgcGxhY2Ugd2hlcmUgaXQgd291bGQgYmUgY2FsbGVkIG9u
bHkgb25jZT8KKyAgICBpbmZvLmFkZE1lbWJlcihEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRT
dHlsZSk7CisgICAgaW5mby5hZGRNZW1iZXIoRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0UXVp
cmtzU3R5bGUpOworICAgIGluZm8uYWRkTWVtYmVyKERlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVs
dFByaW50U3R5bGUpOworICAgIGluZm8uYWRkTWVtYmVyKERlZmF1bHRTdHlsZVNoZWV0czo6ZGVm
YXVsdFZpZXdTb3VyY2VTdHlsZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmMzgwMzEyODgxMzJmNTQ1
YjMyMTk2MThjYzJkMmU2NWViOTBiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIERvY3VtZW50UnVsZVNldHNf
aAorI2RlZmluZSBEb2N1bWVudFJ1bGVTZXRzX2gKKworI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmgi
CisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENvbnRhaW5lck5vZGU7CitjbGFzcyBDU1NTdHlsZVJ1bGU7CitjbGFzcyBDU1NTdHlsZVNoZWV0
OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb247Citj
bGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOworY2xhc3MgUnVsZVNldDsKK2NsYXNzIFN0eWxlUmVz
b2x2ZXI7CitjbGFzcyBTdHlsZVJ1bGVIb3N0OworY2xhc3MgU3R5bGVTY29wZVJlc29sdmVyOwor
Y2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOworCitjbGFzcyBEZWZhdWx0U3R5bGVTaGVldHMgewor
cHVibGljOgorICAgIC8vIEZJWE1FOiBFbmNhcHN1bGF0ZSBtZW1iZXIgdmFyaWFibGVzLgorICAg
IHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CisgICAgc3RhdGljIFJ1bGVTZXQqIGRlZmF1
bHRRdWlya3NTdHlsZTsKKyAgICBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFByaW50U3R5bGU7Cisg
ICAgc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7CisKKyAgICBzdGF0aWMg
U3R5bGVTaGVldENvbnRlbnRzKiBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldDsKKyAgICBzdGF0aWMg
U3R5bGVTaGVldENvbnRlbnRzKiBkZWZhdWx0U3R5bGVTaGVldDsKKyAgICBzdGF0aWMgU3R5bGVT
aGVldENvbnRlbnRzKiBxdWlya3NTdHlsZVNoZWV0OworICAgIHN0YXRpYyBTdHlsZVNoZWV0Q29u
dGVudHMqIHN2Z1N0eWxlU2hlZXQ7CisgICAgc3RhdGljIFN0eWxlU2hlZXRDb250ZW50cyogbWF0
aE1MU3R5bGVTaGVldDsKKyAgICBzdGF0aWMgU3R5bGVTaGVldENvbnRlbnRzKiBtZWRpYUNvbnRy
b2xzU3R5bGVTaGVldDsKKyAgICBzdGF0aWMgU3R5bGVTaGVldENvbnRlbnRzKiBmdWxsc2NyZWVu
U3R5bGVTaGVldDsKKworICAgIHN0YXRpYyB2b2lkIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0Zv
ckVsZW1lbnQoRWxlbWVudCopOworICAgIHN0YXRpYyB2b2lkIGxvYWRGdWxsRGVmYXVsdFN0eWxl
KCk7CisgICAgc3RhdGljIHZvaWQgbG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpOworICAgIHN0YXRp
YyB2b2lkIGluaXREZWZhdWx0U3R5bGUoRWxlbWVudCopOworICAgIHN0YXRpYyBSdWxlU2V0KiB2
aWV3U291cmNlU3R5bGUoKTsKK307CisKK2NsYXNzIERvY3VtZW50Q1NTT01XcmFwcGVyIHsKK3B1
YmxpYzoKKyAgICAvLyBXQVJOSU5HLiBUaGlzIHdpbGwgY29uc3RydWN0IENTU09NIHdyYXBwZXJz
IGZvciBhbGwgc3R5bGUgcnVsZXMgYW5kIGNhY2hlIHRoZW4gaW4gYSBtYXAgZm9yIHNpZ25pZmlj
YW50IG1lbW9yeSBjb3N0LgorICAgIC8vIEl0IGlzIGhlcmUgdG8gc3VwcG9ydCBpbnNwZWN0b3Iu
IERvbid0IHVzZSBmb3IgYW55IHJlZ3VsYXIgZW5naW5lIGZ1bmN0aW9ucy4KKyAgICBDU1NTdHls
ZVJ1bGUqIGVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVSdWxlKiwgRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiopOworICAgIHZvaWQgY29sbGVjdEZyb21TaGVldChD
U1NTdHlsZVNoZWV0Kik7CisKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgTGlzdFR5cGU+
CisgICAgdm9pZCBjb2xsZWN0KExpc3RUeXBlKik7CisKKyAgICB2b2lkIGNvbGxlY3QoRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbiopOworICAgIHZvaWQgY29sbGVjdChjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mKTsKKyAgICB2b2lkIGNvbGxlY3QoSGFzaFNldDxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4gPiYgc2hlZXRXcmFwcGVyU2V0LCBTdHlsZVNoZWV0Q29udGVudHMq
KTsKKworICAgIEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBtX3N0
eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwOworICAgIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+ID4gbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0OworfTsKKworY2xhc3MgRG9jdW1lbnRS
dWxlU2V0cyB7CitwdWJsaWM6CisgICAgRG9jdW1lbnRSdWxlU2V0cygpOworICAgIH5Eb2N1bWVu
dFJ1bGVTZXRzKCk7CisgICAgUnVsZVNldCogYXV0aG9yU3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X2F1dGhvclN0eWxlLmdldCgpOyB9CisgICAgUnVsZVNldCogdXNlclN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VyU3R5bGUuZ2V0KCk7IH0KKyAgICBSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMo
KSB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CisgICAgY29uc3QgUnVsZUZlYXR1cmVTZXQmIGZlYXR1
cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAgIFJ1bGVTZXQqIHNpYmxpbmco
KSBjb25zdCB7IHJldHVybiBtX3NpYmxpbmdSdWxlU2V0LmdldCgpOyB9CisgICAgUnVsZVNldCog
dW5jb21tb25BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbW9uQXR0cmlidXRlUnVs
ZVNldC5nZXQoKTsgfQorCisgICAgdm9pZCBpbml0VXNlclN0eWxlKERvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb24qLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciYp
OworICAgIHZvaWQgcmVzZXRBdXRob3JTdHlsZSgpOworICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5
bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gPiYsIE1lZGlhUXVlcnlFdmFsdWF0b3IqLCBEb2N1bWVudENTU09NV3JhcHBlciYsIGJv
b2wgaXNWaWV3U291cmNlLCBTdHlsZVJlc29sdmVyKik7CisKKyAgICB2b2lkIGNvbGxlY3RGZWF0
dXJlcyhib29sIGlzVmlld1NvdXJjZSwgU3R5bGVTY29wZVJlc29sdmVyKik7CisgICAgdm9pZCBj
b2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gPiYsIFJ1bGVTZXQmIHVzZXJTdHlsZSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYsIFN0eWxlUmVzb2x2ZXImKTsKKworICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyopIGNvbnN0OworCitwcml2YXRlOgorICAgIE93blB0cjxSdWxlU2V0PiBtX2F1
dGhvclN0eWxlOworICAgIE93blB0cjxSdWxlU2V0PiBtX3VzZXJTdHlsZTsKKyAgICBSdWxlRmVh
dHVyZVNldCBtX2ZlYXR1cmVzOworICAgIE93blB0cjxSdWxlU2V0PiBtX3NpYmxpbmdSdWxlU2V0
OworICAgIE93blB0cjxSdWxlU2V0PiBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERvY3VtZW50UnVsZVNldHNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgKaW5kZXggNzFkZTZlZGExMGZj
OGM2ODRjMmRlOWE0N2NkZmNlNWQ2ZDI4NzIyMC4uMTY2MTljYWVlOTkzNWU2YjkzYWNiYzk0MTk1
MjA0NzU2NTRkYThjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlF
dmFsdWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5o
CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgKiAgRXZhbHVhdG9yIHJldHVybnMgdHJ1
ZSBmb3IgImFsbCIsIGFuZCByZXR1cm5zIHZhbHVlIG9mIFxtZWRpYUZlYXR1cmVSZXN1bHQKICAg
ICAgKiAgZm9yIGFueSBtZWRpYSBmZWF0dXJlcwogICAgICAqLwotICAgIE1lZGlhUXVlcnlFdmFs
dWF0b3IoYm9vbCBtZWRpYUZlYXR1cmVSZXN1bHQgPSBmYWxzZSk7CisgICAgZXhwbGljaXQgTWVk
aWFRdWVyeUV2YWx1YXRvcihib29sIG1lZGlhRmVhdHVyZVJlc3VsdCA9IGZhbHNlKTsKIAogICAg
IC8qKiBDcmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0ZXMgb25seSBzaW1wbGUgbWVkaWEg
cXVlcmllcwogICAgICAqICBFdmFsdWF0b3IgIHJldHVybnMgdHJ1ZSBmb3IgYWNjZXB0ZWRNZWRp
YVR5cGUgYW5kIHJldHVybnMgdmFsdWUgb2YgXG1lZGlhZmVhdHVyZVJlc3VsdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxl
U2V0LmgKaW5kZXggZDI4NmVlMzk4YjY2YTcxMjYxZDk0ZmRjYmQ5YWI4MTY1NDBiMzU0Ni4uYjQx
YzQyYTdmNTY0ZWJjZjE0MzBiMTU1YjQwNjA4OGYxNWRhYWU3MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1J1bGVTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5o
CkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIENTU1NlbGVjdG9yOwogY2xhc3MgQ29udGFpbmVyTm9k
ZTsKIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7CiBjbGFzcyBTdHlsZVJlc29sdmVyOworY2xh
c3MgU3R5bGVSZXNvbHZlclJ1bGVTZXRzOwogY2xhc3MgU3R5bGVSdWxlUmVnaW9uOwogY2xhc3Mg
U3R5bGVTaGVldENvbnRlbnRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5k
ZXggMGMxM2RiMDdkMDljNWM0ZGQxODdkOTgzYzRjZjQ5NmEzNjE4YWNhYS4uMmNjZjJhZjA5OTkw
NTNkYWZlNzcxZGViYTZiMDIzNjkwMzFkMGVjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcApAQCAtMjA5LDQ1ICsyMDksOCBAQCBpZiAoaXNJbml0aWFsKSB7IFwKICAgICByZXR1
cm47IFwKIH0KIAotc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRTdHlsZTsKLXN0YXRpYyBSdWxlU2V0
KiBkZWZhdWx0UXVpcmtzU3R5bGU7Ci1zdGF0aWMgUnVsZVNldCogZGVmYXVsdFByaW50U3R5bGU7
Ci1zdGF0aWMgUnVsZVNldCogZGVmYXVsdFZpZXdTb3VyY2VTdHlsZTsKLXN0YXRpYyBTdHlsZVNo
ZWV0Q29udGVudHMqIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0Owotc3RhdGljIFN0eWxlU2hlZXRD
b250ZW50cyogZGVmYXVsdFN0eWxlU2hlZXQ7Ci1zdGF0aWMgU3R5bGVTaGVldENvbnRlbnRzKiBx
dWlya3NTdHlsZVNoZWV0Owotc3RhdGljIFN0eWxlU2hlZXRDb250ZW50cyogc3ZnU3R5bGVTaGVl
dDsKLXN0YXRpYyBTdHlsZVNoZWV0Q29udGVudHMqIG1hdGhNTFN0eWxlU2hlZXQ7Ci1zdGF0aWMg
U3R5bGVTaGVldENvbnRlbnRzKiBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsKLXN0YXRpYyBTdHls
ZVNoZWV0Q29udGVudHMqIGZ1bGxzY3JlZW5TdHlsZVNoZWV0OwotCiBSZW5kZXJTdHlsZSogU3R5
bGVSZXNvbHZlcjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKIAotc3RhdGljIHZvaWQgbG9hZEZ1
bGxEZWZhdWx0U3R5bGUoKTsKLXN0YXRpYyB2b2lkIGxvYWRTaW1wbGVEZWZhdWx0U3R5bGUoKTsK
LXRlbXBsYXRlIDxjbGFzcyBMaXN0VHlwZT4KLXN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBw
ZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYsIExpc3RUeXBl
Kik7Ci0KLS8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSBzb21lIG1lY2hhbmlzbSB0
aGF0IGd1YXJhbnRlZXMgdGhpcyBpcyBpbiBzeW5jIHdpdGggdGhlIHJlYWwgVUEgc3R5bGVzaGVl
dC4KLXN0YXRpYyBjb25zdCBjaGFyKiBzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0ID0gImh0bWws
Ym9keSxkaXZ7ZGlzcGxheTpibG9ja31oZWFke2Rpc3BsYXk6bm9uZX1ib2R5e21hcmdpbjo4cHh9
ZGl2OmZvY3VzLHNwYW46Zm9jdXN7b3V0bGluZTphdXRvIDVweCAtd2Via2l0LWZvY3VzLXJpbmct
Y29sb3J9YTotd2Via2l0LWFueS1saW5re2NvbG9yOi13ZWJraXQtbGluazt0ZXh0LWRlY29yYXRp
b246dW5kZXJsaW5lfWE6LXdlYmtpdC1hbnktbGluazphY3RpdmV7Y29sb3I6LXdlYmtpdC1hY3Rp
dmVsaW5rfSI7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50Q2FuVXNlU2ltcGxlRGVmYXVs
dFN0eWxlKEVsZW1lbnQqIGUpCi17Ci0gICAgcmV0dXJuIGUtPmhhc1RhZ05hbWUoaHRtbFRhZykg
fHwgZS0+aGFzVGFnTmFtZShoZWFkVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8IGUt
Pmhhc1RhZ05hbWUoZGl2VGFnKSB8fCBlLT5oYXNUYWdOYW1lKHNwYW5UYWcpIHx8IGUtPmhhc1Rh
Z05hbWUoYnJUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYVRhZyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiBzY3JlZW5FdmFsKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3IsIHN0YXRpY1NjcmVlbkV2YWwsICgic2NyZWVu
IikpOwotICAgIHJldHVybiBzdGF0aWNTY3JlZW5FdmFsOwotfQotCi1zdGF0aWMgY29uc3QgTWVk
aWFRdWVyeUV2YWx1YXRvciYgcHJpbnRFdmFsKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3IsIHN0YXRpY1ByaW50RXZhbCwgKCJwcmludCIpKTsK
LSAgICByZXR1cm4gc3RhdGljUHJpbnRFdmFsOwotfQotCiBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNl
dCogbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4sIGxlZnRUb1JpZ2h0RGVjbCwgKFN0eWxlUHJvcGVydHlT
ZXQ6OmNyZWF0ZSgpKSk7CkBAIC0yOTUsMTUgKzI1OCwxMSBAQCBTdHlsZVJlc29sdmVyOjpTdHls
ZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMpCiAgICAgLCBtX2hhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX3N0
eWxlTWFwKHRoaXMpCisgICAgLCBtX2Nzc29tV3JhcHBlcigpCiB7CiAgICAgRWxlbWVudCogcm9v
dCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKIAotICAgIGlmICghZGVmYXVsdFN0eWxl
KSB7Ci0gICAgICAgIGlmICghcm9vdCB8fCBlbGVtZW50Q2FuVXNlU2ltcGxlRGVmYXVsdFN0eWxl
KHJvb3QpKQotICAgICAgICAgICAgbG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOwotICAgIH0KKyAgICBEZWZh
dWx0U3R5bGVTaGVldHM6OmluaXREZWZhdWx0U3R5bGUocm9vdCk7CiAKICAgICAvLyBjb25zdHJ1
Y3QgZG9jdW1lbnQgcm9vdCBlbGVtZW50IGRlZmF1bHQgc3R5bGUuIHRoaXMgaXMgbmVlZGVkCiAg
ICAgLy8gdG8gZXZhbHVhdGUgbWVkaWEgcXVlcmllcyB0aGF0IGNvbnRhaW4gcmVsYXRpdmUgY29u
c3RyYWludHMsIGxpa2UgInNjcmVlbiBhbmQgKG1heC13aWR0aDogMTBlbSkiCkBAIC0zMjMsMTYg
KzI4MiwxMiBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVu
dCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCiAgICAgaWYgKG1fcm9vdERlZmF1bHRT
dHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5
RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0
U3R5bGUuZ2V0KCkpKTsKIAotICAgIHJlc2V0QXV0aG9yU3R5bGUoKTsKKyAgICBBU1NFUlQobV9t
ZWRpdW0pOworCisgICAgbV9ydWxlU2V0cy5yZXNldEF1dGhvclN0eWxlKCk7CiAKICAgICBEb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKiBzdHlsZVNoZWV0Q29sbGVjdGlvbiA9IGRvY3VtZW50
LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpOwotICAgIE93blB0cjxSdWxlU2V0PiB0ZW1wVXNlclN0
eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgaWYgKENTU1N0eWxlU2hlZXQqIHBhZ2VVc2Vy
U2hlZXQgPSBzdHlsZVNoZWV0Q29sbGVjdGlvbi0+cGFnZVVzZXJTaGVldCgpKQotICAgICAgICB0
ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlVXNlclNoZWV0LT5jb250ZW50cygp
LCAqbV9tZWRpdW0sIHRoaXMpOwotICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMo
c3R5bGVTaGVldENvbGxlY3Rpb24tPmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCksICp0ZW1wVXNl
clN0eWxlKTsKLSAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRD
b2xsZWN0aW9uLT5kb2N1bWVudFVzZXJTdHlsZVNoZWV0cygpLCAqdGVtcFVzZXJTdHlsZSk7Ci0g
ICAgaWYgKHRlbXBVc2VyU3R5bGUtPm1fcnVsZUNvdW50ID4gMCB8fCB0ZW1wVXNlclN0eWxlLT5t
X3BhZ2VSdWxlcy5zaXplKCkgPiAwKQotICAgICAgICBtX3VzZXJTdHlsZSA9IHRlbXBVc2VyU3R5
bGUucmVsZWFzZSgpOworICAgIG1fcnVsZVNldHMuaW5pdFVzZXJTdHlsZShzdHlsZVNoZWV0Q29s
bGVjdGlvbiwgKm1fbWVkaXVtLCAqdGhpcyk7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAg
IGlmIChkb2N1bWVudC0+c3ZnRXh0ZW5zaW9ucygpKSB7CkBAIC0zNDYsNTcgKzMwMSw5IEBAIFN0
eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcykKICAgICBhcHBlbmRBdXRob3JTdHlsZVNoZWV0cygwLCBzdHls
ZVNoZWV0Q29sbGVjdGlvbi0+YWN0aXZlQXV0aG9yU3R5bGVTaGVldHMoKSk7CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6Y29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0
b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHls
ZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlclNoZWV0cy5zaXplKCk7ICsr
aSkgewotICAgICAgICBBU1NFUlQodXNlclNoZWV0c1tpXS0+Y29udGVudHMoKS0+aXNVc2VyU3R5
bGVTaGVldCgpKTsKLSAgICAgICAgdXNlclN0eWxlLmFkZFJ1bGVzRnJvbVNoZWV0KHVzZXJTaGVl
dHNbaV0tPmNvbnRlbnRzKCksICptX21lZGl1bSwgdGhpcyk7Ci0gICAgfQotfQotCi1zdGF0aWMg
UGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8UnVsZUZlYXR1cmU+
JiBydWxlcykKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IHJ1bGVzLnNpemUoKTsKLSAgICBpZiAoIXNp
emUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIE93blB0cjxSdWxlU2V0PiBydWxlU2V0
ID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZXNbaV0ucnVsZSwgcnVsZXNbaV0uc2Vs
ZWN0b3JJbmRleCwgcnVsZXNbaV0uaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luIDogUnVsZUhhc05vU3BlY2lhbFN0YXRlKTsKLSAgICBydWxl
U2V0LT5zaHJpbmtUb0ZpdCgpOwotICAgIHJldHVybiBydWxlU2V0LnJlbGVhc2UoKTsKLX0KLQot
dm9pZCBTdHlsZVJlc29sdmVyOjpyZXNldEF1dGhvclN0eWxlKCkKLXsKLSAgICBtX2F1dGhvclN0
eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgbV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1dG9T
aHJpbmtUb0ZpdCgpOwotfQotCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxl
U2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+ID4mIHN0eWxlU2hlZXRzKQogewotICAgIC8vIFRoaXMgaGFuZGxlcyBzaGVldHMgYWRkZWQg
dG8gdGhlIGVuZCBvZiB0aGUgc3R5bGVzaGVldCBsaXN0IG9ubHkuIEluIG90aGVyIGNhc2VzIHRo
ZSBzdHlsZSByZXNvbHZlcgotICAgIC8vIG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhh
bmRsZSBpbnNlcnRpb25zIHRvbyB0aGUgcnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8g
YmUgdXBkYXRlZC4KLSAgICB1bnNpZ25lZCBzaXplID0gc3R5bGVTaGVldHMuc2l6ZSgpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IGZpcnN0TmV3OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIENT
U1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0gc3R5bGVTaGVldHNbaV0uZ2V0KCk7Ci0gICAgICAgIEFT
U0VSVCghY3NzU2hlZXQtPmRpc2FibGVkKCkpOwotICAgICAgICBpZiAoY3NzU2hlZXQtPm1lZGlh
UXVlcmllcygpICYmICFtX21lZGl1bS0+ZXZhbChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCksIHRo
aXMpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFN0eWxlU2hlZXRDb250ZW50cyog
c2hlZXQgPSBjc3NTaGVldC0+Y29udGVudHMoKTsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8
fCBFTkFCTEUoU0hBRE9XX0RPTSkKLSAgICAgICAgaWYgKGNvbnN0IENvbnRhaW5lck5vZGUqIHNj
b3BlID0gU3R5bGVTY29wZVJlc29sdmVyOjpzY29wZUZvcihjc3NTaGVldCkpIHsKLSAgICAgICAg
ICAgIGVuc3VyZVNjb3BlUmVzb2x2ZXIoKS0+ZW5zdXJlUnVsZVNldEZvcihzY29wZSktPmFkZFJ1
bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBtX2F1dGhvclN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKLSAgICAgICAgaWYgKCFt
X3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbGxl
Y3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIGNzc1NoZWV0KTsK
LSAgICB9Ci0gICAgbV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsKLSAgICBjb2xsZWN0RmVh
dHVyZXMoKTsKLSAgICAKKyAgICBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGZp
cnN0TmV3LCBzdHlsZVNoZWV0cywgbV9tZWRpdW0uZ2V0KCksIG1fY3Nzb21XcmFwcGVyLCBkb2N1
bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSwgdGhpcyk7CiAgICAgaWYgKGRvY3VtZW50KCktPnJlbmRl
cmVyKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKICAgICAgICAgZG9jdW1l
bnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7
CiAKQEAgLTQ4NiwxMTcgKzM5Myw2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVk
UHJvcGVydGllc0NhY2hlKFRpbWVyPFN0eWxlUmVzb2x2ZXI+KikKICAgICBtX21hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA9IDA7CiB9CiAKLXN0YXRpYyBTdHls
ZVNoZWV0Q29udGVudHMqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKLXsKLSAgICBT
dHlsZVNoZWV0Q29udGVudHMqIHNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoKS5s
ZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBvc2UKLSAgICBzaGVldC0+cGFyc2VT
dHJpbmcoc3RyKTsKLSAgICByZXR1cm4gc2hlZXQ7Ci19Ci0KLXN0YXRpYyBTdHlsZVNoZWV0Q29u
dGVudHMqIHBhcnNlVUFTaGVldChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzaXpl
KQotewotICAgIHJldHVybiBwYXJzZVVBU2hlZXQoU3RyaW5nKGNoYXJhY3RlcnMsIHNpemUpKTsK
LX0KLQotc3RhdGljIHZvaWQgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKQotewotICAgIGlmIChzaW1w
bGVEZWZhdWx0U3R5bGVTaGVldCkgewotICAgICAgICBBU1NFUlQoZGVmYXVsdFN0eWxlKTsKLSAg
ICAgICAgQVNTRVJUKGRlZmF1bHRQcmludFN0eWxlID09IGRlZmF1bHRTdHlsZSk7Ci0gICAgICAg
IGRlbGV0ZSBkZWZhdWx0U3R5bGU7Ci0gICAgICAgIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0LT5k
ZXJlZigpOwotICAgICAgICBkZWZhdWx0U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRy
KCk7Ci0gICAgICAgIGRlZmF1bHRQcmludFN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCkubGVha1B0
cigpOwotICAgICAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCA9IDA7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKCFkZWZhdWx0U3R5bGUpOwotICAgICAgICBkZWZhdWx0U3R5bGUgPSBS
dWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7Ci0gICAgICAgIGRlZmF1bHRQcmludFN0eWxlID0g
UnVsZVNldDo6Y3JlYXRlKCkubGVha1B0cigpOwotICAgICAgICBkZWZhdWx0UXVpcmtzU3R5bGUg
PSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7Ci0gICAgfQotCi0gICAgLy8gU3RyaWN0LW1v
ZGUgcnVsZXMuCi0gICAgU3RyaW5nIGRlZmF1bHRSdWxlcyA9IFN0cmluZyhodG1sVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKGh0bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVt
ZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKLSAgICBkZWZhdWx0
U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChkZWZhdWx0UnVsZXMpOwotICAgIGRlZmF1bHRTdHls
ZS0+YWRkUnVsZXNGcm9tU2hlZXQoZGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0g
ICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGRlZmF1bHRTdHlsZVNoZWV0
LCBwcmludEV2YWwoKSk7Ci0KLSAgICAvLyBRdWlya3MtbW9kZSBydWxlcy4KLSAgICBTdHJpbmcg
cXVpcmtzUnVsZXMgPSBTdHJpbmcocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHF1
aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+
ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7Ci0gICAgcXVpcmtzU3R5bGVTaGVldCA9IHBhcnNlVUFT
aGVldChxdWlya3NSdWxlcyk7Ci0gICAgZGVmYXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChxdWlya3NTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotfQotCi1zdGF0aWMgdm9pZCBs
b2FkU2ltcGxlRGVmYXVsdFN0eWxlKCkKLXsKLSAgICBBU1NFUlQoIWRlZmF1bHRTdHlsZSk7Ci0g
ICAgQVNTRVJUKCFzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCk7Ci0KLSAgICBkZWZhdWx0U3R5bGUg
PSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7Ci0gICAgLy8gVGhlcmUgYXJlIG5vIG1lZGlh
LXNwZWNpZmljIHJ1bGVzIGluIHRoZSBzaW1wbGUgZGVmYXVsdCBzdHlsZS4KLSAgICBkZWZhdWx0
UHJpbnRTdHlsZSA9IGRlZmF1bHRTdHlsZTsKLSAgICBkZWZhdWx0UXVpcmtzU3R5bGUgPSBSdWxl
U2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7Ci0KLSAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCA9
IHBhcnNlVUFTaGVldChzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0LCBzdHJsZW4oc2ltcGxlVXNl
ckFnZW50U3R5bGVTaGVldCkpOwotICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQo
c2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0KLSAgICAvLyBObyBuZWVk
IHRvIGluaXRpYWxpemUgcXVpcmtzIHNoZWV0IHlldCBhcyB0aGVyZSBhcmUgbm8gcXVpcmsgcnVs
ZXMgZm9yIGVsZW1lbnRzIGFsbG93ZWQgaW4gc2ltcGxlIGRlZmF1bHQgc3R5bGUuCi19Ci0KLXN0
YXRpYyBSdWxlU2V0KiB2aWV3U291cmNlU3R5bGUoKQotewotICAgIGlmICghZGVmYXVsdFZpZXdT
b3VyY2VTdHlsZSkgewotICAgICAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlID0gUnVsZVNldDo6
Y3JlYXRlKCkubGVha1B0cigpOwotICAgICAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLT5hZGRS
dWxlc0Zyb21TaGVldChwYXJzZVVBU2hlZXQoc291cmNlVXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuc3Vy
ZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBp
ZiAoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQgJiYgIWVsZW1lbnRDYW5Vc2VTaW1wbGVEZWZhdWx0
U3R5bGUoZWxlbWVudCkpCi0gICAgICAgIGxvYWRGdWxsRGVmYXVsdFN0eWxlKCk7Ci0KLSNpZiBF
TkFCTEUoU1ZHKQotICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiAhc3ZnU3R5bGVT
aGVldCkgewotICAgICAgICAvLyBTVkcgcnVsZXMuCi0gICAgICAgIHN2Z1N0eWxlU2hlZXQgPSBw
YXJzZVVBU2hlZXQoc3ZnVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHN2Z1VzZXJBZ2VudFN0
eWxlU2hlZXQpKTsKLSAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdmdT
dHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRk
UnVsZXNGcm9tU2hlZXQoc3ZnU3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOwotICAgIH0KLSNlbmRp
ZgotCi0jaWYgRU5BQkxFKE1BVEhNTCkKLSAgICBpZiAoZWxlbWVudC0+aXNNYXRoTUxFbGVtZW50
KCkgJiYgIW1hdGhNTFN0eWxlU2hlZXQpIHsKLSAgICAgICAgLy8gTWF0aE1MIHJ1bGVzLgotICAg
ICAgICBtYXRoTUxTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KG1hdGhtbFVzZXJBZ2VudFN0eWxl
U2hlZXQsIHNpemVvZihtYXRobWxVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci0gICAgICAgIGRlZmF1
bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWF0aE1MU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgp
KTsKLSAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1hdGhNTFN0
eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShWSURF
TykKLSAgICBpZiAoIW1lZGlhQ29udHJvbHNTdHlsZVNoZWV0ICYmIChlbGVtZW50LT5oYXNUYWdO
YW1lKHZpZGVvVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkpIHsKLSAgICAg
ICAgU3RyaW5nIG1lZGlhUnVsZXMgPSBTdHJpbmcobWVkaWFDb250cm9sc1VzZXJBZ2VudFN0eWxl
U2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVy
VGhlbWU6OnRoZW1lRm9yUGFnZShlbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCkpLT5leHRyYU1l
ZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7Ci0gICAgICAgIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0
ID0gcGFyc2VVQVNoZWV0KG1lZGlhUnVsZXMpOwotICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAg
ICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWVkaWFDb250cm9sc1N0
eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKLSAgICBpZiAoIWZ1bGxzY3JlZW5TdHlsZVNoZWV0ICYmIGVsZW1lbnQtPmRv
Y3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpKSB7Ci0gICAgICAgIFN0cmluZyBmdWxsc2Ny
ZWVuUnVsZXMgPSBTdHJpbmcoZnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihm
dWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5leHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCk7Ci0gICAgICAgIGZ1bGxzY3JlZW5TdHls
ZVNoZWV0ID0gcGFyc2VVQVNoZWV0KGZ1bGxzY3JlZW5SdWxlcyk7Ci0gICAgICAgIGRlZmF1bHRT
dHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZnVsbHNjcmVlblN0eWxlU2hlZXQsIHNjcmVlbkV2YWwo
KSk7Ci0gICAgICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZnVsbHNj
cmVlblN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBBU1NF
UlQoZGVmYXVsdFN0eWxlLT5mZWF0dXJlcygpLmlkc0luUnVsZXMuaXNFbXB0eSgpKTsKLSAgICBB
U1NFUlQobWF0aE1MU3R5bGVTaGVldCB8fCBkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkuc2libGlu
Z1J1bGVzLmlzRW1wdHkoKSk7Ci19Ci0KIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkTWF0Y2hlZFBy
b3BlcnRpZXMoTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBTdHlsZVByb3BlcnR5U2V0
KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIFBy
b3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCiB7CiAgICAgbWF0Y2hS
ZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuZ3JvdyhtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgKyAxKTsKQEAgLTgxMSw3ICs2MDcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cwogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgot
ICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9hdXRob3JTdHlsZS5nZXQoKSwgaW5jbHVk
ZUVtcHR5UnVsZXMpOworICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9ydWxlU2V0cy5h
dXRob3JTdHlsZSgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5n
ZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7CiAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKQEAgLTgyMiwxMyArNjE4LDEzIEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2Vy
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKLSAg
ICBpZiAoIW1fdXNlclN0eWxlKQorICAgIGlmICghbV9ydWxlU2V0cy51c2VyU3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKICAgICBy
ZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxOwotICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV91c2VyU3R5bGUuZ2V0KCks
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fcnVs
ZVNldHMudXNlclN0eWxlKCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBSdWxlUmFuZ2UgcnVs
ZVJhbmdlID0gcmVzdWx0LnJhbmdlcy51c2VyUnVsZVJhbmdlKCk7CiAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKQEAgLTk2Myw3ICs3NTksNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwg
Ym9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogYm9vbCBTdHlsZVJlc29sdmVyOjpjbGFzc05hbWVz
QWZmZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMpIGNvbnN0
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFtZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKG1fZmVhdHVyZXMuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2xhc3NO
YW1lc1tpXS5pbXBsKCkpKQorICAgICAgICBpZiAobV9ydWxlU2V0cy5mZWF0dXJlcygpLmNsYXNz
ZXNJblJ1bGVzLmNvbnRhaW5zKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDMwLDcgKzgyNiw3IEBA
IE5vZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1
bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VuCiAgICAgaWYgKHAtPmlzU1ZHRWxlbWVudCgpICYmIHN0
YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkp
CiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCi0gICAgaWYgKHAtPmhhc0lEKCkgJiYgbV9mZWF0
dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgp
KSkKKyAgICBpZiAocC0+aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxl
cy5jb250YWlucyhwLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gcC0+cmVuZGVyU3R5bGUo
KTsKQEAgLTEyMDgsNyArMTAwNCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHls
ZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKGVsZW1l
bnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IG1fc3R5bGVkRWxl
bWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRz
SW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkp
CisgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0lu
UnVsZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHls
ZUNoaWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOTksNyArMTA5NSw3IEBAIFJl
bmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJl
dHVybiAwOwogI2VuZGlmCiAgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5IHNo
b3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRzLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc0lE
KCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKG1fc3R5bGVkRWxlbWVudC0+aWRG
b3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhh
c0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMobV9zdHls
ZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKG1fZWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzMxLDEwICsxMTI3LDEwIEBA
IFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgc2libGluZyBydWxlcyBhcHBseS4g
VGhpcyBpcyBjaGVja2VkIGF0IHRoZSBlbmQgYXMgaXQgc2hvdWxkIHJhcmVseSBmYWlsLgotICAg
IGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3NpYmxpbmdSdWxlU2V0
LmdldCgpKSkKKyAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQobV9y
dWxlU2V0cy5zaWJsaW5nKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBDYW4ndCBzaGFy
ZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNSdWxlU2V0KG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKKyAgICBp
ZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQobV9ydWxlU2V0cy51bmNvbW1v
bkF0dHJpYnV0ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYg
QGhvc3QgQC1ydWxlcyBhcHBseS4KICAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hl
c0hvc3RSdWxlcygpKQpAQCAtMTM1MCwxOSArMTE0NiwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAgIE1hdGNoaW5nVUFSdWxlc1Nj
b3BlIHNjb3BlOwogCiAgICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBh
Z2VudCBzaGVldC4KLSAgICBpZiAoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpCisgICAgaWYgKERl
ZmF1bHRTdHlsZVNoZWV0czo6c2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpCiAgICAgICAgIHJlc3Vs
dC5pc0NhY2hlYWJsZSA9IGZhbHNlOwogICAgIFJ1bGVTZXQqIHVzZXJBZ2VudFN0eWxlU2hlZXQg
PSBtX21lZGl1bS0+bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQiKQotICAgICAgICA/IGRl
ZmF1bHRQcmludFN0eWxlIDogZGVmYXVsdFN0eWxlOworICAgICAgICA/IERlZmF1bHRTdHlsZVNo
ZWV0czo6ZGVmYXVsdFByaW50U3R5bGUgOiBEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRTdHls
ZTsKICAgICBtYXRjaFVBUnVsZXMocmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKIAogICAg
IC8vIEluIHF1aXJrcyBtb2RlLCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSBxdWlya3MgdXNlciBh
Z2VudCBzaGVldC4KICAgICBpZiAoIW1fc2VsZWN0b3JDaGVja2VyLnN0cmljdFBhcnNpbmcoKSkK
LSAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgZGVmYXVsdFF1aXJrc1N0eWxlKTsKKyAgICAg
ICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0UXVpcmtz
U3R5bGUpOwogCiAgICAgLy8gSWYgZG9jdW1lbnQgdXNlcyB2aWV3IHNvdXJjZSBzdHlsZXMgKGlu
IHZpZXcgc291cmNlIG1vZGUgb3IgaW4geG1sIHZpZXdlciBtb2RlKSwgdGhlbiB3ZSBtYXRjaCBy
dWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJjZSBzdHlsZSBzaGVldC4KICAgICBpZiAoZG9jdW1lbnQo
KS0+aXNWaWV3U291cmNlKCkpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIHZpZXdTb3Vy
Y2VTdHlsZSgpKTsKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgRGVmYXVsdFN0eWxlU2hl
ZXRzOjp2aWV3U291cmNlU3R5bGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFN0eWxlc0ZvclBh
Z2luYXRpb25Nb2RlKFBhZ2luYXRpb246Ok1vZGUgcGFnaW5hdGlvbk1vZGUsIFJlbmRlclN0eWxl
KiBzdHlsZSkKQEAgLTE2MDAsNyArMTM5Niw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAg
ICAgICAgIG1fc3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAKLSAgICBl
bnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KGVsZW1lbnQpOworICAgIERlZmF1bHRT
dHlsZVNoZWV0czo6ZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVudChlbGVtZW50KTsK
IAogICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwogICAgIGlmIChtYXRjaGluZ0JlaGF2aW9y
ID09IE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzKQpAQCAtMTc5NiwxMCArMTU5MiwxMCBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJ
bmRleCkKICAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7CiAgICAg
CiAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OwotICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgZGVm
YXVsdFByaW50U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbWF0Y2hQYWdlUnVs
ZXMocmVzdWx0LCBtX3VzZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKKyAg
ICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQsIERlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFByaW50
U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0
LCBtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwogICAgIC8v
IE9ubHkgY29uc2lkZXIgdGhlIGdsb2JhbCBhdXRob3IgUnVsZVNldCBmb3IgQHBhZ2UgcnVsZXMs
IGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KLSAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fYXV0
aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAgbWF0Y2hQYWdlUnVs
ZXMocmVzdWx0LCBtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCksIGlzTGVmdCwgaXNGaXJzdCwgcGFn
ZSk7CiAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9
IGZhbHNlOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQpAQCAtMjE2OSwxOCArMTk2NSwxOCBA
QCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogcmVnaW9uRWxl
bWVudCkKICAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0LXJl
Z2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LAogICAgIC8v
IHNvIGFsbCByZWdpb24gcnVsZXMgYXJlIGdsb2JhbCBieSBkZWZhdWx0LiBWZXJpZnkgd2hldGhl
ciB0aGF0IGNhbiBzdGFuZCBvciBuZWVkcyBjaGFuZ2luZy4KIAotICAgIHVuc2lnbmVkIHJ1bGVz
U2l6ZSA9IG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgp
OworICAgIHVuc2lnbmVkIHJ1bGVzU2l6ZSA9IG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKS0+bV9y
ZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7Ci0gICAgICAgIEFTU0VSVChtX2F1dGhvclN0eWxlLT5t
X3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOwotICAgICAg
ICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX2F1dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9y
c0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50KSkKKyAgICAgICAgQVNT
RVJUKG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0
cy5hdChpKS5ydWxlU2V0LmdldCgpKTsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3Io
bV9ydWxlU2V0cy5hdXRob3JTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0
KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIGlmIChtX3VzZXJTdHlsZSkgewotICAgICAgICBydWxlc1NpemUgPSBtX3Vz
ZXJTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CisgICAgaWYgKG1f
cnVsZVNldHMudXNlclN0eWxlKCkpIHsKKyAgICAgICAgcnVsZXNTaXplID0gbV9ydWxlU2V0cy51
c2VyU3R5bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlc1NpemU7ICsraSkgewotICAgICAgICAgICAg
QVNTRVJUKG1fdXNlclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1
bGVTZXQuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IobV91c2Vy
U3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lv
bkVsZW1lbnQpKQorICAgICAgICAgICAgQVNTRVJUKG1fcnVsZVNldHMudXNlclN0eWxlKCktPm1f
cmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKSk7CisgICAgICAg
ICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLT5tX3Jl
Z2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50KSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTI2Njgs
ODQgKzI0NjQsNiBAQCBTdHJpbmcgU3R5bGVSZXNvbHZlcjo6cGFnZU5hbWUoaW50IC8qIHBhZ2VJ
bmRleCAqLykgY29uc3QKICAgICByZXR1cm4gIiI7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBMaXN0
VHlwZT4KLXN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxl
KiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYgd3JhcHBlck1hcCwgTGlzdFR5cGUqIGxpc3RUeXBl
KQotewotICAgIGlmICghbGlzdFR5cGUpCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBz
aXplID0gbGlzdFR5cGUtPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgQ1NTUnVsZSogY3NzUnVsZSA9IGxpc3RUeXBlLT5pdGVtKGkp
OwotICAgICAgICBzd2l0Y2ggKGNzc1J1bGUtPnR5cGUoKSkgewotICAgICAgICBjYXNlIENTU1J1
bGU6OklNUE9SVF9SVUxFOgotICAgICAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBl
ck1hcCwgc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KGNzc1J1bGUpLT5zdHlsZVNoZWV0KCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUnVsZTo6TUVESUFfUlVMRToK
LSAgICAgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0
PENTU01lZGlhUnVsZSo+KGNzc1J1bGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmIEVOQUJM
RShDU1MzX0NPTkRJVElPTkFMX1JVTEVTKQotICAgICAgICBjYXNlIENTU1J1bGU6OlNVUFBPUlRT
X1JVTEU6Ci0gICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzdGF0
aWNfY2FzdDxDU1NTdXBwb3J0c1J1bGUqPihjc3NSdWxlKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSNlbmRpZgotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAgICAgICAgY2FzZSBDU1NSdWxlOjpX
RUJLSVRfUkVHSU9OX1JVTEU6Ci0gICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFw
cGVyTWFwLCBzdGF0aWNfY2FzdDxXZWJLaXRDU1NSZWdpb25SdWxlKj4oY3NzUnVsZSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKLSAgICAgICAg
Y2FzZSBDU1NSdWxlOjpIT1NUX1JVTEU6Ci0gICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVy
cyh3cmFwcGVyTWFwLCBzdGF0aWNfY2FzdDxDU1NIb3N0UnVsZSo+KGNzc1J1bGUpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICAgIGNhc2UgQ1NTUnVsZTo6U1RZTEVfUlVMRToK
LSAgICAgICAgICAgIHdyYXBwZXJNYXAuYWRkKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGNz
c1J1bGUpLT5zdHlsZVJ1bGUoKSwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY3NzUnVsZSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29sbGVjdENTU09NV3JhcHBl
cnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+JiB3cmFwcGVyTWFw
LCBIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBzaGVldFdyYXBwZXJTZXQsIFN0eWxl
U2hlZXRDb250ZW50cyogc3R5bGVTaGVldCkKLXsKLSAgICBpZiAoIXN0eWxlU2hlZXQpCi0gICAg
ICAgIHJldHVybjsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc3R5bGVTaGVldFdyYXBwZXIg
PSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldCk7Ci0gICAgc2hlZXRXcmFwcGVyU2V0
LmFkZChzdHlsZVNoZWV0V3JhcHBlcik7Ci0gICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBl
ck1hcCwgc3R5bGVTaGVldFdyYXBwZXIuZ2V0KCkpOwotfQotCi1zdGF0aWMgdm9pZCBjb2xsZWN0
Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4m
IHdyYXBwZXJNYXAsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYgc2hlZXRz
KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaGVldHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHNoZWV0c1tpXS5nZXQoKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxl
KiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYgd3JhcHBlck1hcCwgRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbiogc3R5bGVTaGVldENvbGxlY3Rpb24pCi17Ci0gICAgY29sbGVjdENTU09NV3Jh
cHBlcnMod3JhcHBlck1hcCwgc3R5bGVTaGVldENvbGxlY3Rpb24tPmFjdGl2ZUF1dGhvclN0eWxl
U2hlZXRzKCkpOwotICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0eWxlU2hl
ZXRDb2xsZWN0aW9uLT5wYWdlVXNlclNoZWV0KCkpOwotICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJz
KHdyYXBwZXJNYXAsIHN0eWxlU2hlZXRDb2xsZWN0aW9uLT5pbmplY3RlZFVzZXJTdHlsZVNoZWV0
cygpKTsKLSAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzdHlsZVNoZWV0Q29s
bGVjdGlvbi0+ZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSk7Ci19Ci0KLUNTU1N0eWxlUnVsZSog
U3R5bGVSZXNvbHZlcjo6ZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1
bGUqIHJ1bGUpCi17Ci0gICAgaWYgKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdy
YXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgc2ltcGxlRGVmYXVsdFN0eWxl
U2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01X
cmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIGRlZmF1bHRTdHlsZVNoZWV0
KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBl
ck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBxdWlya3NTdHlsZVNoZWV0KTsKLSAg
ICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwg
bV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBzdmdTdHlsZVNoZWV0KTsKLSAgICAgICAgY29s
bGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNo
ZWV0Q1NTT01XcmFwcGVyU2V0LCBtYXRoTUxTdHlsZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENT
U09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NT
T01XcmFwcGVyU2V0LCBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk7Ci0gICAgICAgIGNvbGxlY3RD
U1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENT
U09NV3JhcHBlclNldCwgZnVsbHNjcmVlblN0eWxlU2hlZXQpOwotCi0gICAgICAgIGNvbGxlY3RD
U1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIGRvY3VtZW50KCktPnN0
eWxlU2hlZXRDb2xsZWN0aW9uKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9zdHlsZVJ1bGVUb0NT
U09NV3JhcHBlck1hcC5nZXQocnVsZSkuZ2V0KCk7Ci19Ci0KIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBS
ZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaW5pdEVsZW1lbnQoMCk7CkBAIC0zMTA4LDcgKzI4
MjYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250
ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwog
ICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAv
LyByZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUg
c3R5bGUKLSAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKGF0
dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ydWxlU2V0cy5m
ZWF0dXJlcygpLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLT5pc0NvdW50ZXIoKSkgewogICAg
ICAgICAgICAgICAgICAgICBDb3VudGVyKiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFsdWUtPmdl
dENvdW50ZXJWYWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBFTGlzdFN0eWxlVHlwZSBsaXN0
U3R5bGVUeXBlID0gTm9uZUxpc3RTdHlsZTsKQEAgLTUzNzQsMjYgKzUwOTIsNiBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3VyY2VzKCkKICNlbmRpZgogfQogCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygpCi17Ci0gICAgbV9mZWF0dXJlcy5jbGVhcigp
OwotICAgIC8vIENvbGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2libGluZyBzZWxlY3Rv
cnMgKDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxhcikKLSAgICAvLyBpbiB0aGUgY3VycmVudCBzZXQg
b2Ygc3R5bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24g
dG8gcmVqZWN0Ci0gICAgLy8gc2hhcmluZyBjYW5kaWRhdGVzLgotICAgIG1fZmVhdHVyZXMuYWRk
KGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKSk7Ci0gICAgbV9mZWF0dXJlcy5hZGQobV9hdXRob3JT
dHlsZS0+ZmVhdHVyZXMoKSk7Ci0gICAgaWYgKGRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKQot
ICAgICAgICBtX2ZlYXR1cmVzLmFkZCh2aWV3U291cmNlU3R5bGUoKS0+ZmVhdHVyZXMoKSk7Ci0K
LSAgICBpZiAobV9zY29wZVJlc29sdmVyKQotICAgICAgICBtX3Njb3BlUmVzb2x2ZXItPmNvbGxl
Y3RGZWF0dXJlc1RvKG1fZmVhdHVyZXMpOwotICAgIGlmIChtX3VzZXJTdHlsZSkKLSAgICAgICAg
bV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOwotCi0gICAgbV9zaWJsaW5n
UnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKTsKLSAgICBtX3Vu
Y29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25B
dHRyaWJ1dGVSdWxlcyk7Ci19Ci0KIHZvaWQgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRp
ZXM6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8p
IGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhp
cywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwpAQCAtNTQxOSwxMSArNTExNyw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5
T2JqZWN0SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmpl
Y3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7CiAgICAgaW5mby5hZGRNZW1i
ZXIobV9zdHlsZSk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9hdXRob3JTdHlsZSk7Ci0gICAgaW5m
by5hZGRNZW1iZXIobV91c2VyU3R5bGUpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fZmVhdHVyZXMp
OwotICAgIGluZm8uYWRkTWVtYmVyKG1fc2libGluZ1J1bGVTZXQpOwotICAgIGluZm8uYWRkTWVt
YmVyKG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0KTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX3J1
bGVTZXRzKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2tleWZyYW1lc1J1bGVNYXApOwogICAgIGlu
Zm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk7CiAgICAgaW5mby5hZGRNZW1i
ZXIobV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcik7CkBAIC01NDQ3LDE4ICs1MTQx
LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZE1lbWJlcihtX2ZvbnRT
ZWxlY3Rvcik7CiAgICAgaW5mby5hZGRNZW1iZXIobV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVl
cnlSZXN1bHRzKTsKICAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3N0eWxlQnVpbGRlcik7Ci0gICAg
aW5mby5hZGRNZW1iZXIobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCk7Ci0gICAgaW5mby5h
ZGRNZW1iZXIobV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0KTsKKyAgICBpbmZvLmFkZE1lbWJl
cihtX2Nzc29tV3JhcHBlcik7CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZH
KQogICAgIGluZm8uYWRkTWVtYmVyKG1fcGVuZGluZ1NWR0RvY3VtZW50cyk7CiAjZW5kaWYKICAg
ICBpbmZvLmFkZE1lbWJlcihtX3Njb3BlUmVzb2x2ZXIpOwotCi0gICAgLy8gRklYTUU6IG1vdmUg
dGhpcyB0byBhIHBsYWNlIHdoZXJlIGl0IHdvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2U/Ci0gICAg
aW5mby5hZGRNZW1iZXIoZGVmYXVsdFN0eWxlKTsKLSAgICBpbmZvLmFkZE1lbWJlcihkZWZhdWx0
UXVpcmtzU3R5bGUpOwotICAgIGluZm8uYWRkTWVtYmVyKGRlZmF1bHRQcmludFN0eWxlKTsKLSAg
ICBpbmZvLmFkZE1lbWJlcihkZWZhdWx0Vmlld1NvdXJjZVN0eWxlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggZWM1NGE1Njhj
YTI3NGY3NzhiMzg3YzllMjcwZjNhZTkxNjc2YzdjYy4uZTYzNGIzMzUyZTYyYjQzOWI0ZWMzNTg4
OTc2MGNlOTRkNTVkZTQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0yNSw2
ICsyNSw3IEBACiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgogI2luY2x1ZGUgIkNTU1RvU3R5bGVNYXAu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRz
LmgiCiAjaW5jbHVkZSAiTGlua0hhc2guaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTE2Niw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAg
UmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVt
ZW50U3R5bGU7IH0KICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50OyB9CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVu
dDsgfQorICAgIFN0eWxlU2NvcGVSZXNvbHZlciogc2NvcGVSZXNvbHZlcigpIGNvbnN0IHsgcmV0
dXJuIG1fc2NvcGVSZXNvbHZlci5nZXQoKTsgfQogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0K
ICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0
dXJuIHBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9CiAgICAgdm9pZCBzZXRGb250
RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9m
b250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
IH0KQEAgLTE3NiwxMCArMTc4LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHRPcmllbnRh
dGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0
eWxlKCktPnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CiAgICAgYm9vbCBo
YXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnROb2RlOyB9CiAKLSAgICB2b2lk
IHJlc2V0QXV0aG9yU3R5bGUoKTsKKyAgICAvLyBGSVhNRTogSXQgY291bGQgYmUgYmV0dGVyIHRv
IGNhbGwgcnVsZVNldHMoKS5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cygpIGRpcmVjdGx5IHdoZW4g
d2UgZmFjdG9yIFN0eWxlUnNvbHZlciBmdXJ0aGVyLgogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5
bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gPiYpOwogCi1wcml2YXRlOgorICAgIERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzKCkg
eyByZXR1cm4gbV9ydWxlU2V0czsgfQorICAgIGNvbnN0IERvY3VtZW50UnVsZVNldHMmIHJ1bGVT
ZXRzKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlU2V0czsgfQorCiAjaWYgRU5BQkxFKFNUWUxFX1ND
T1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCiAgICAgU3R5bGVTY29wZVJlc29sdmVyKiBlbnN1
cmVTY29wZVJlc29sdmVyKCkKICAgICB7CkBAIC0xOTgsOSArMjAyLDkgQEAgcHJpdmF0ZToKICAg
ICB9CiAjZW5kaWYKIAorcHJpdmF0ZToKICAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxl
bWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8p
OwogICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwotICAgIHZvaWQgY29sbGVjdEZlYXR1
cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgYm9vbCBz
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CiAgICAgYm9vbCBz
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCk7CkBAIC0yNDIsNiArMjQ2LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9h
dCBzaXplKTsKIAorCiBwcml2YXRlOgogICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIFJlbmRlclN0eWxlKiwgYm9vbCBpc0Fic29sdXRl
U2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpOwogCkBAIC0y
NjgsMTcgKzI3MywxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrUmVnaW9uU3R5bGUoRWxl
bWVudCogcmVnaW9uRWxlbWVudCk7CiAKLSAgICBib29sIHVzZXNTaWJsaW5nUnVsZXMoKSBjb25z
dCB7IHJldHVybiAhbV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9v
bCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNGaXJz
dExpbmVSdWxlczsgfQotICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzLnVzZXNCZWZvcmVBZnRlclJ1bGVzOyB9CisgICAgYm9vbCB1c2VzU2li
bGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fcnVsZVNldHMuZmVhdHVyZXMoKS5zaWJsaW5n
UnVsZXMuaXNFbXB0eSgpOyB9CisgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7
IHJldHVybiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkudXNlc0ZpcnN0TGluZVJ1bGVzOyB9CisgICAg
Ym9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZVNldHMuZmVh
dHVyZXMoKS51c2VzQmVmb3JlQWZ0ZXJSdWxlczsgfQogCiAgICAgc3RhdGljIGJvb2wgY3JlYXRl
VHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5
bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJh
dGlvbnMpOwogICAgIAogICAgIHZvaWQgaW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUo
KTsKLSAgICAKLSAgICAvLyBXQVJOSU5HLiBUaGlzIHdpbGwgY29uc3RydWN0IENTU09NIHdyYXBw
ZXJzIGZvciBhbGwgc3R5bGUgcnVsZXMgYW5kIGNhY2hlIHRoZW4gaW4gYSBtYXAgZm9yIHNpZ25p
ZmljYW50IG1lbW9yeSBjb3N0LgotICAgIC8vIEl0IGlzIGhlcmUgdG8gc3VwcG9ydCBpbnNwZWN0
b3IuIERvbid0IHVzZSBmb3IgYW55IHJlZ3VsYXIgZW5naW5lIGZ1bmN0aW9ucy4KLSAgICBDU1NT
dHlsZVJ1bGUqIGVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVSdWxlKik7
CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRp
b25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUq
IHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CkBAIC00MTEsMTIg
KzQxMiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBj
b25zdDsKICAgICBTdHJpbmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7CiAKLSAgICBP
d25QdHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKLSAgICBPd25QdHI8UnVsZVNldD4gbV91c2Vy
U3R5bGU7Ci0KLSAgICBSdWxlRmVhdHVyZVNldCBtX2ZlYXR1cmVzOwotICAgIE93blB0cjxSdWxl
U2V0PiBtX3NpYmxpbmdSdWxlU2V0OwotICAgIE93blB0cjxSdWxlU2V0PiBtX3VuY29tbW9uQXR0
cmlidXRlUnVsZVNldDsKKyAgICBEb2N1bWVudFJ1bGVTZXRzIG1fcnVsZVNldHM7CiAKICAgICBi
b29sIG1faGFzVUFBcHBlYXJhbmNlOwogICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOwpAQCAt
NDQ0LDE0ICs0NDAsMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvRmxv
YXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBy
b290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7CiAKICAgICBDU1NUb1N0eWxlTWFwKiBz
dHlsZU1hcCgpIHsgcmV0dXJuICZtX3N0eWxlTWFwOyB9CisgICAgRG9jdW1lbnRDU1NPTVdyYXBw
ZXImIGNzc29tV3JhcGVwcigpIHsgcmV0dXJuIG1fY3Nzb21XcmFwcGVyOyB9CiAKICAgICB2b2lk
IHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKICAgICAKIHByaXZh
dGU6CiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwogCi0g
ICAgdm9pZCBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4gPiYsIFJ1bGVTZXQmIHVzZXJTdHlsZSk7Ci0KICAgICB2b2lkIGNh
Y2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogCiBwcml2YXRlOgpAQCAtNTM1LDkgKzUzMCw2IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKICAgICBi
b29sIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKICAgICBjb25zdCBTdHlsZUJ1
aWxkZXImIG1fc3R5bGVCdWlsZGVyOwotICAgIAotICAgIEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVm
UHRyPENTU1N0eWxlUnVsZT4gPiBtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwOwotICAgIEhh
c2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0
OwogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIGJvb2wgbV9oYXNQZW5kaW5nU2hhZGVy
czsKQEAgLTU0OSw2ICs1NDEsNyBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFN0eWxlU2NvcGVS
ZXNvbHZlcj4gbV9zY29wZVJlc29sdmVyOwogICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsK
KyAgICBEb2N1bWVudENTU09NV3JhcHBlciBtX2Nzc29tV3JhcHBlcjsKIAogICAgIGZyaWVuZCBj
bGFzcyBTdHlsZUJ1aWxkZXI7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRj
aGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJik7CkBAIC01NjAsMTkgKzU1
MywxOSBAQCBwcml2YXRlOgogaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JG
b3JBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nICZhdHRyaWJ1dGVOYW1lKSBjb25zdAogewog
ICAgIEFTU0VSVCghYXR0cmlidXRlTmFtZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX2ZlYXR1
cmVzLmF0dHJzSW5SdWxlcy5jb250YWlucyhhdHRyaWJ1dGVOYW1lLmltcGwoKSk7CisgICAgcmV0
dXJuIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyc0luUnVsZXMuY29udGFpbnMoYXR0cmlidXRl
TmFtZS5pbXBsKCkpOwogfQogCiBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpoYXNTZWxlY3Rv
ckZvckNsYXNzKGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NWYWx1ZSkgY29uc3QKIHsKICAgICBB
U1NFUlQoIWNsYXNzVmFsdWUuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9mZWF0dXJlcy5jbGFz
c2VzSW5SdWxlcy5jb250YWlucyhjbGFzc1ZhbHVlLmltcGwoKSk7CisgICAgcmV0dXJuIG1fcnVs
ZVNldHMuZmVhdHVyZXMoKS5jbGFzc2VzSW5SdWxlcy5jb250YWlucyhjbGFzc1ZhbHVlLmltcGwo
KSk7CiB9CiAKIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9ySWQoY29u
c3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlKSBjb25zdAogewogICAgIEFTU0VSVCghaWRWYWx1ZS5p
c0VtcHR5KCkpOwotICAgIHJldHVybiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoaWRW
YWx1ZS5pbXBsKCkpOworICAgIHJldHVybiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxl
cy5jb250YWlucyhpZFZhbHVlLmltcGwoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
LmNwcAppbmRleCBkNjEwODc3ZTdmZmE3NDhiOGNlODhjYjQwYmIzZWE5YWZkODc3NjcxLi41OGI5
MWM3YTc5NTNkNzlmYTRlNTUyYmFmODU4MmQxNzZmZGQxMjM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCkBAIC00NzgsNyAr
NDc4LDcgQEAgYm9vbCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVBY3RpdmVT
dHlsZVNoZWV0cyhVcGRhdGVGbGFnIHVwZGF0ZUZsYWcKICAgICBlbHNlIHsKICAgICAgICAgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQtPnN0eWxlUmVzb2x2ZXIoKTsK
ICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID09IFJlc2V0KSB7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5yZXNldEF1dGhvclN0eWxlKCk7CisgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5ydWxlU2V0cygpLnJlc2V0QXV0aG9yU3R5bGUoKTsKICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKDAsIGFjdGl2ZUNTU1N0eWxlU2hl
ZXRzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChzdHlsZVJlc29sdmVy
VXBkYXRlVHlwZSA9PSBBZGRpdGl2ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA5MzBlYzA3YjI5MDUwNmMyZjhlNTM4ZjExNjViYzVj
NWY1OTFlNTAwLi44NTA0NzFlMmVkMjI1ZTgyYjIzMzNmZTZhMzFlZmM1ZDEzM2NkM2U5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTk1
OSw3ICs5NTksNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmls
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnN0b3BTZWxlY3RvclBybwogdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6d2lsbE1hdGNoUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIpCiB7CiAgICAgaWYgKG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZSkKLSAgICAgICAg
bV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLT5zdGFydFNlbGVjdG9yKHN0eWxlUmVzb2x2ZXItPmVu
c3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IocnVsZSkpOworICAgICAgICBtX2N1cnJl
bnRTZWxlY3RvclByb2ZpbGUtPnN0YXJ0U2VsZWN0b3Ioc3R5bGVSZXNvbHZlci0+Y3Nzb21XcmFw
ZXByKCkuZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3RvcihydWxlLCBzdHlsZVJlc29s
dmVyLT5kb2N1bWVudCgpLT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmRpZE1hdGNoUnVsZShib29sIG1hdGNoZWQpCkBAIC05NzEsNyArOTcx
LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkTWF0Y2hSdWxlKGJvb2wgbWF0Y2hlZCkK
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxQcm9jZXNzUnVsZShTdHlsZVJ1bGUqIHJ1bGUs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiB7CiAgICAgaWYgKG1fY3VycmVudFNlbGVj
dG9yUHJvZmlsZSkKLSAgICAgICAgbV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLT5zdGFydFNlbGVj
dG9yKHN0eWxlUmVzb2x2ZXItPmVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IocnVs
ZSkpOworICAgICAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPnN0YXJ0U2VsZWN0b3Ioc3R5
bGVSZXNvbHZlci0+Y3Nzb21XcmFwZXByKCkuZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3Bl
Y3RvcihydWxlLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zdHlsZVNoZWV0Q29sbGVjdGlv
bigpKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFByb2Nlc3NSdWxlKCkKQEAg
LTExMjUsNyArMTEyNSw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTCiAgICAgLy8gU2luY2Ug
dGhlIGluc3BlY3RvciB3YW50cyB0byB3YWxrIHRoZSBwYXJlbnQgY2hhaW4sIHdlIGNvbnN0cnVj
dCB0aGUgZnVsbCB3cmFwcGVycyBoZXJlLgogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIGZh
Y3RvcmVkIGJldHRlci4gU3R5bGVSZXNvbHZlcjo6c3R5bGVSdWxlc0ZvckVsZW1lbnQgc2hvdWxk
IHJldHVybiBhIFN0eWxlUnVsZSB2ZWN0b3IsIG5vdCBhIENTU1J1bGVMaXN0LgogICAgIGlmICgh
cnVsZS0+cGFyZW50U3R5bGVTaGVldCgpKSB7Ci0gICAgICAgIHJ1bGUgPSBzdHlsZVJlc29sdmVy
LT5lbnN1cmVGdWxsQ1NTT01XcmFwcGVyRm9ySW5zcGVjdG9yKHJ1bGUtPnN0eWxlUnVsZSgpKTsK
KyAgICAgICAgcnVsZSA9IHN0eWxlUmVzb2x2ZXItPmNzc29tV3JhcGVwcigpLmVuc3VyZUZ1bGxD
U1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IocnVsZS0+c3R5bGVSdWxlKCksIHN0eWxlUmVzb2x2ZXIt
PmRvY3VtZW50KCktPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkpOwogICAgICAgICBpZiAoIXJ1bGUp
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186537</attachid>
            <date>2013-02-04 21:06:48 -0800</date>
            <delta_ts>2013-02-04 21:25:12 -0800</delta_ts>
            <desc>factor RuleSets and features</desc>
            <filename>bug-107777-20130205140326.patch</filename>
            <type>text/plain</type>
            <size>39739</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzNkMWU5YWZiN2Q5ODIx
MjM2ODQyNWI2NzIwZGY0MDgzNjZmZTFjZS4uMDkwYzE1ZTg3ODhhZjc2MWU3ZDliZDkxYzIzOWE3
OGVmMjhmY2ExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEzLTAyLTA0ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBTcGxpdCBlYWNoIFJ1bGVT
ZXQgYW5kIGZlYXR1cmUgb3V0IGZyb20gU3R5bGVSZXNvbHZlciBpbnRvIGl0cyBvd24gY2xhc3Mu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc3NzcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdHRp
bmcgZWFjaCBSdWxlU2V0IGFuZCBmZWF0dXJlIG91dCBmcm9tIFN0eWxlUmVzb3ZlciBpbnRvIGl0
cyBvbncgY2xhc3MsIERvY3VtZW50UnVsZVNldHMsCisgICAgICAgIHRvIG1hbmFnZSB0aGVtIHNl
cGFyYXRlbHkuCisKKyAgICAgICAgVGhpcyBpcyBvbmUgb2YgdGhlIGF0dGVtcHRzIHRvIHRyeSB0
byByZXNvbHZlIG1ldGEgYnVnIChidWcgODk4NzkpCisgICAgICAgIHRvIGxvc2UgU3R5bGVSZXNv
bHZlcidzIHdlaWdodC4gIFdlIG5lZWQgZnVydGhlciBhY3Rpb24gdG8gZmFjdG9yCisgICAgICAg
IFN0eWxlUmVzb2x2ZXIgdG8gc2VwYXJhdGUgaXQgaW50byBzb21lIGNsYXNzZXMgY2xlYW5seS4K
KyAgICAgICAgU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwODg5MC4gQSBmb2xsb3dpbmcgcGF0Y2ggd2lsbCBhZGRyZXNzIHRoYXQuCisKKyAgICAgICAg
Tm8gdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NBbGxJbk9uZS5jcHA6CisgICAgICAg
ICogY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6RG9jdW1lbnRSdWxlU2V0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjp+RG9jdW1lbnRSdWxlU2V0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjppbml0VXNlclN0eWxlKTogTmV3IGhl
bHBlciB0byBpbml0aWFsaXplIGVhY2ggUnVsZVNldHMuCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKTogRmFjdG9yZWQg
b3V0IGZyb20gU3R5bGVSZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSdWxlU2V0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjpyZXNldEF1dGhvclN0
eWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjphcHBlbmRB
dXRob3JTdHlsZVNoZWV0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxl
U2V0czo6Y29sbGVjdEZlYXR1cmVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dFJ1bGVTZXRzOjpyZXBvcnRNZW1vcnlVc2FnZSk6IE5ldyBtZXRob2RzIHRvIHJlcG9ydCBtZW1v
cnkgdXNhZ2UuIEZhY3RvcmVkIG91dCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgICogY3Nz
L0RvY3VtZW50UnVsZVNldHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KERvY3VtZW50UnVsZVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6
YXV0aG9yU3R5bGUpOiBNb3ZlZCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFJ1bGVTZXRzOjp1c2VyU3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50UnVsZVNldHM6OmZlYXR1cmVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudFJ1bGVTZXRzOjpzaWJsaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFJ1bGVTZXRzOjp1bmNvbW1vbkF0dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAqIGNzcy9T
dHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxl
UmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVTaGVldHMpOiBOb3cgY2FsbHMgRG9jdW1lbnRSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5
bGVTaGVldHMuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1
bGVzKTogVXNlIG1fcnVsZVNldHMuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpt
YXRjaFVzZXJSdWxlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
Y2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblN0eWxlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6IE5vdyBj
YWxscyBEb2N1bWVudFJ1bGVTZXRzOjpyZXBvcnRNZW1vcnlVc2FnZS4KKyAgICAgICAgKiBjc3Mv
U3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2NvcGVS
ZXNvbHZlcik6CisgICAgICAgIChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnJ1bGVTZXRzKTogYWNjZXNzb3IgciB0byBEb2N1bWVudFJ1bGVTZXRzLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlc1NpYmxpbmdSdWxlcyk6IFVzZSBt
X3J1bGVTZXRzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlc0ZpcnN0TGlu
ZVJ1bGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1c2VzQmVm
b3JlQWZ0ZXJSdWxlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9yQ2xhc3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9ySWQpOiBEaXR0by4KKyAgICAgICAgKiBkb20v
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyk6CisKIDIw
MTMtMDItMDQgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtDaHJvbWl1bV0gQWRkIGEgc2lnbmFsIGZvciB3aGVuIHRoZSBib2R5IGlzIGluc2VydGVk
IGluIHRoZSBkb2N1bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiZDIzM2I5ZjFlMzk4ZjAz
Njk3YTAzMzIzNzU1MWQ3OWMxNWJiOGU3Li41MGMxNDhhZWQ1OWVkYjA5Yjg0ODcwODlkM2JlMTJm
MDk1MzBmNTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA2OCw2ICsxMDY4LDcgQEAgc2V0
KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9DU1NWYWx1ZS5jcHAKICAgICBjc3MvQ1NTVmFsdWVM
aXN0LmNwcAogICAgIGNzcy9DU1NWYWx1ZVBvb2wuY3BwCisgICAgY3NzL0RvY3VtZW50UnVsZVNl
dHMuY3BwCiAgICAgY3NzL0ZvbnRGZWF0dXJlVmFsdWUuY3BwCiAgICAgY3NzL0ZvbnRWYWx1ZS5j
cHAKICAgICBjc3MvSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IDcxZDdhYWU3YjI0ZDkwNzVlY2E1NGM3NDdmOTJlYzZkMWQwNWRmYTIu
LjIxOTY5NGIzMThlNWMzNTA1MDYwYTIzYTk0YWRhOGE5M2FkNDllM2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtMjYxNyw2ICsyNjE3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYXJpYWJsZVZhbHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9EYXNoYm9hcmRS
ZWdpb24uaCBcCisJU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9j
c3MvRm9udEZlYXR1cmVWYWx1ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmVhdHVy
ZVZhbHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250VmFsdWUuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CmluZGV4IGU4ZjZmYzE2MmQzOTk0NWM0NDFiMGU2YzQyOTkzMGRjYWQ3ZDBiNjUuLmQ2M2QxNDE1
Nzk3YTc2ZmI1NDc1MTUzNzU4ZjNhYzVjYTg1MmI3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMjk1LDYg
KzI5NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGNzcy9DU1NWYWx1ZS5jcHAgXAogICAgIGNzcy9D
U1NWYWx1ZUxpc3QuY3BwIFwKICAgICBjc3MvQ1NTVmFsdWVQb29sLmNwcCBcCisgICAgY3NzL0Rv
Y3VtZW50UnVsZVNldHMuY3BwIFwKICAgICBjc3MvRm9udEZlYXR1cmVWYWx1ZS5jcHAgXAogICAg
IGNzcy9Gb250VmFsdWUuY3BwIFwKICAgICBjc3MvSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IGM1ZDVjMGM0YmUxOWZhN2Y1NmU1ZmQ4ZmMzMjAzMDFkNzAz
OGRhNjEuLjAwMmQyY2Y2YjliOGFkMzdkMjI1MzBmMzliYzNkNDRmNDc4OGVhOTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTE1MzgsNiArMTUzOCw4IEBACiAgICAgICAgICAgICAnY3NzL0NTU1Zhcmlh
YmxlVmFsdWUuaCcsCiAgICAgICAgICAgICAnY3NzL0NvdW50ZXIuaCcsCiAgICAgICAgICAgICAn
Y3NzL0Rhc2hib2FyZFJlZ2lvbi5oJywKKyAgICAgICAgICAgICdjc3MvRG9jdW1lbnRSdWxlU2V0
cy5jcHAnLAorICAgICAgICAgICAgJ2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmgnLAogICAgICAgICAg
ICAgJ2Nzcy9Gb250RmVhdHVyZVZhbHVlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL0ZvbnRGZWF0
dXJlVmFsdWUuaCcsCiAgICAgICAgICAgICAnY3NzL0ZvbnRWYWx1ZS5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDliMjA4
ZDI4MTlhOGI2ZjliYTVkZTk5NzA4YjM1OWUwMzdiMmNhZGIuLmNmY2U5ZjA0NTVkYjc0NmZhYTA1
ZDcwNDRhZDIzNDZkYjQzZjRiOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0MzcsNiArMTQzNyw4IEBACiAJCTRBMUU3MUE2
MTRFMTA2QUMwMDYyNkY5RCAvKiBKU1NoYWRvd1Jvb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBMUU3MUE0MTRFMTA2QUMwMDYyNkY5RCAvKiBKU1No
YWRvd1Jvb3QuaCAqLzsgfTsKIAkJNEEzOEJGNTAxNEZFMUMwOTAwNjEyNTEyIC8qIFdlYlNvY2tl
dERlZmxhdGVGcmFtZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEEzOEJGNEUxNEZFMUMwOTAwNjEyNTEyIC8qIFdlYlNvY2tldERlZmxhdGVGcmFt
ZXIuY3BwICovOyB9OwogCQk0QTM4QkY1MTE0RkUxQzA5MDA2MTI1MTIgLyogV2ViU29ja2V0RGVm
bGF0ZUZyYW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEEzOEJGNEYxNEZFMUMwOTAwNjEyNTEyIC8qIFdlYlNvY2tldERlZmxhdGVGcmFtZXIuaCAq
LzsgfTsKKwkJNEE0RjQ4QTkxNkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE0RjQ4QTcx
NkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuY3BwICovOyB9OworCQk0QTRGNDhB
QTE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE0RjQ4QTgxNkIwREZDMDAwRURCQjI5IC8q
IERvY3VtZW50UnVsZVNldHMuaCAqLzsgfTsKIAkJNEE1QTJBREIxNjFFN0UwMDAwNTg4OUREIC8q
IFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QTVBMkFEOTE2MUU3RTAwMDA1ODg5REQgLyogV2ViU29ja2V0
RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLzsgfTsKIAkJNEE1QTJBREMxNjFFN0UwMDAwNTg4OUREIC8q
IFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEE1QTJBREExNjFFN0UwMDAwNTg4OUREIC8qIFdlYlNvY2tldEV4
dGVuc2lvblBhcnNlci5oICovOyB9OwogCQk0QTZBMEM1QjE1MjMyRjI0MDBCMDlDNkUgLyogQ29t
cG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRBNkEwQzU5MTUyMzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRv
d1RyZWVXYWxrZXIuY3BwICovOyB9OwpAQCAtODgwOSw2ICs4ODExLDggQEAKIAkJNEExRTcxQTQx
NEUxMDZBQzAwNjI2RjlEIC8qIEpTU2hhZG93Um9vdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1NoYWRvd1Jvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NEEzOEJGNEUxNEZFMUMwOTAwNjEyNTEyIC8qIFdlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU29ja2V0RGVmbGF0ZUZyYW1l
ci5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBMzhCRjRGMTRGRTFDMDkwMDYxMjUx
MiAvKiBXZWJTb2NrZXREZWZsYXRlRnJhbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdlYlNvY2tldERlZmxhdGVGcmFtZXIuaDsgcGF0aCA9IE1vZHVsZXMvd2Vic29ja2V0
cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTRBNEY0OEE3MTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50UnVsZVNldHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QTRGNDhBODE2QjBERkMwMDBFREJCMjkgLyogRG9j
dW1lbnRSdWxlU2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVu
dFJ1bGVTZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBNUEyQUQ5MTYxRTdF
MDAwMDU4ODlERCAvKiBXZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmNwcDsgcGF0
aCA9IE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTVBMkFEQTE2MUU3RTAwMDA1ODg5REQgLyogV2Vi
U29ja2V0RXh0ZW5zaW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5oOyBwYXRoID0gTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldEV4dGVuc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
QTZBMEM1OTE1MjMyRjI0MDBCMDlDNkUgLyogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2VkU2hhZG93VHJlZVdh
bGtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTgxOCw2ICsyMTgyMiw4
IEBACiAJCQkJRTQ5QkQ5RjkxMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oICovLAog
CQkJCUNBRTlGOTBFMTQ2NDQxRjAwMEMyNDVCMSAvKiBDU1NWYXJpYWJsZVZhbHVlLmggKi8sCiAJ
CQkJQTgwRTZDRTEwQTE5ODlDQTAwN0ZCOEM1IC8qIERhc2hib2FyZFJlZ2lvbi5oICovLAorCQkJ
CTRBNEY0OEE3MTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmNwcCAqLywKKwkJ
CQk0QTRGNDhBODE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5oICovLAogCQkJ
CTRBNkU5RkMxMTNDMTdEMUQwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVZhbHVlLmNwcCAqLywKIAkJ
CQk0QTZFOUZDMjEzQzE3RDFEMDA0NkE3RjggLyogRm9udEZlYXR1cmVWYWx1ZS5oICovLAogCQkJ
CUE4MEU2Q0M3MEExOTg5Q0EwMDdGQjhDNSAvKiBGb250VmFsdWUuY3BwICovLApAQCAtMjMzOTAs
NiArMjMzOTYsNyBAQAogCQkJCUNFMDU3RkE2MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OTQ3RkZFMTJGODBDRDIwMEEw
RjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0ZCQUU4
MEI1MTUyRUQwMDAxRjFENyAvKiBEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NEE0RjQ4QUExNkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFENkU3MUFEMTY2ODg5OUQwMDMyMEMxMyAvKiBEb2N1bWVudFNoYXJlZE9iamVj
dFBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQjkwNTYx
QTBGMjU3OEJGMDA5NUZGNkEgLyogRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI3MDI5LDYgKzI3MDM2LDcgQEAKIAkJCQlDRTA1N0ZBNTEyMjA3MzExMDBBNDc2
RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
OTQ3RkZEMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThDMjI4MEUxMUQ0QTU5NzAwRDVBN0QzIC8qIERvY3VtZW50UGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTRBNEY0OEE5MTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVu
dFJ1bGVTZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFENkU3MUFDMTY2ODg5OUQwMDMyMEMx
MyAvKiBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ3
RTI3NjgxNjAzNkVEQzAwRUUyQUZCIC8qIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEI5MDU2MTkwRjI1NzhCRTAwOTVGRjZBIC8qIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5P
bmUuY3BwCmluZGV4IGM4MWMzYjIxZjk4ZDk2ZDE0M2M5MmNiYWVjMTM5MDg1Y2FkZjBmMWEuLmU3
M2UzNThiMjcwOTQwODdhMTg5NmJhNmMxMDY0YjUzNmY1NTYxMjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0FsbEluT25lLmNwcApAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlLmNwcCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuY3BwIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5jcHAi
CisjaW5jbHVkZSAiRG9jdW1lbnRSdWxlU2V0cy5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NT
T01XcmFwcGVycy5jcHAiCiAjaW5jbHVkZSAiUnVsZUZlYXR1cmUuY3BwIgogI2luY2x1ZGUgIlJ1
bGVTZXQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNl
dHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE5NzQ4OWJmMTY3MWE2N2YwMDM0YTc3NTExOTk2MGQ2MjJjMjk3ZTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAKQEAgLTAsMCAr
MSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAo
a2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBT
aGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8
YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8p
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEx
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEb2N1
bWVudFJ1bGVTZXRzLmgiCisKKyNpbmNsdWRlICJDU1NEZWZhdWx0U3R5bGVTaGVldHMuaCIKKyNp
bmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbi5oIgorI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3R5bGVTaGVl
dENvbnRlbnRzOworCitEb2N1bWVudFJ1bGVTZXRzOjpEb2N1bWVudFJ1bGVTZXRzKCkKK3sKK30K
KworRG9jdW1lbnRSdWxlU2V0czo6fkRvY3VtZW50UnVsZVNldHMoKQoreworfQorCit2b2lkIERv
Y3VtZW50UnVsZVNldHM6OmluaXRVc2VyU3R5bGUoRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
biogc3R5bGVTaGVldENvbGxlY3Rpb24sIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1
bSwgU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIpCit7CisgICAgT3duUHRyPFJ1bGVTZXQ+IHRlbXBV
c2VyU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICBpZiAoQ1NTU3R5bGVTaGVldCogcGFn
ZVVzZXJTaGVldCA9IHN0eWxlU2hlZXRDb2xsZWN0aW9uLT5wYWdlVXNlclNoZWV0KCkpCisgICAg
ICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRl
bnRzKCksIG1lZGl1bSwgJnJlc29sdmVyKTsKKyAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxl
U2hlZXRzKHN0eWxlU2hlZXRDb2xsZWN0aW9uLT5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpLCAq
dGVtcFVzZXJTdHlsZSwgbWVkaXVtLCByZXNvbHZlcik7CisgICAgY29sbGVjdFJ1bGVzRnJvbVVz
ZXJTdHlsZVNoZWV0cyhzdHlsZVNoZWV0Q29sbGVjdGlvbi0+ZG9jdW1lbnRVc2VyU3R5bGVTaGVl
dHMoKSwgKnRlbXBVc2VyU3R5bGUsIG1lZGl1bSwgcmVzb2x2ZXIpOworICAgIGlmICh0ZW1wVXNl
clN0eWxlLT5tX3J1bGVDb3VudCA+IDAgfHwgdGVtcFVzZXJTdHlsZS0+bV9wYWdlUnVsZXMuc2l6
ZSgpID4gMCkKKyAgICAgICAgbV91c2VyU3R5bGUgPSB0ZW1wVXNlclN0eWxlLnJlbGVhc2UoKTsK
K30KKwordm9pZCBEb2N1bWVudFJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hl
ZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYgdXNlclNoZWV0cywgUnVs
ZVNldCYgdXNlclN0eWxlLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIFN0eWxl
UmVzb2x2ZXImIHJlc29sdmVyKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2Vy
U2hlZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFTU0VSVCh1c2VyU2hlZXRzW2ldLT5jb250
ZW50cygpLT5pc1VzZXJTdHlsZVNoZWV0KCkpOworICAgICAgICB1c2VyU3R5bGUuYWRkUnVsZXNG
cm9tU2hlZXQodXNlclNoZWV0c1tpXS0+Y29udGVudHMoKSwgbWVkaXVtLCAmcmVzb2x2ZXIpOwor
ICAgIH0KK30KKworc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gbWFrZVJ1bGVTZXQoY29uc3Qg
VmVjdG9yPFJ1bGVGZWF0dXJlPiYgcnVsZXMpCit7CisgICAgc2l6ZV90IHNpemUgPSBydWxlcy5z
aXplKCk7CisgICAgaWYgKCFzaXplKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBPd25Q
dHI8UnVsZVNldD4gcnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBydWxlU2V0LT5hZGRSdWxlKHJ1bGVzW2ld
LnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9ySW5kZXgsIHJ1bGVzW2ldLmhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IFJ1bGVIYXNOb1NwZWNp
YWxTdGF0ZSk7CisgICAgcnVsZVNldC0+c2hyaW5rVG9GaXQoKTsKKyAgICByZXR1cm4gcnVsZVNl
dC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRSdWxlU2V0czo6cmVzZXRBdXRob3JTdHls
ZSgpCit7CisgICAgbV9hdXRob3JTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIG1fYXV0
aG9yU3R5bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKK30KKwordm9pZCBEb2N1bWVudFJ1
bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3Qg
VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBzdHlsZVNoZWV0cywgTWVkaWFRdWVyeUV2
YWx1YXRvciogbWVkaXVtLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdy
YXBwZXJzLCBib29sIGlzVmlld1NvdXJjZSwgU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIpCit7Cisg
ICAgLy8gVGhpcyBoYW5kbGVzIHNoZWV0cyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzdHlsZXNo
ZWV0IGxpc3Qgb25seS4gSW4gb3RoZXIgY2FzZXMgdGhlIHN0eWxlIHJlc29sdmVyCisgICAgLy8g
bmVlZHMgdG8gYmUgcmVjb25zdHJ1Y3RlZC4gVG8gaGFuZGxlIGluc2VydGlvbnMgdG9vIHRoZSBy
dWxlIG9yZGVyIG51bWJlcnMgd291bGQgbmVlZCB0byBiZSB1cGRhdGVkLgorICAgIHVuc2lnbmVk
IHNpemUgPSBzdHlsZVNoZWV0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3RO
ZXc7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQ1NTU3R5bGVTaGVldCogY3NzU2hlZXQgPSBz
dHlsZVNoZWV0c1tpXS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKCFjc3NTaGVldC0+ZGlzYWJsZWQo
KSk7CisgICAgICAgIGlmIChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1lZGl1bS0+ZXZh
bChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCksIHJlc29sdmVyKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0ID0gY3NzU2hlZXQtPmNvbnRl
bnRzKCk7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCisg
ICAgICAgIGlmIChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IFN0eWxlU2NvcGVSZXNvbHZl
cjo6c2NvcGVGb3IoY3NzU2hlZXQpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIGEg
ZGVwZW5kZW5jeSB0byBjYWxsaW5nIGEgU3R5bGVSZXNvbHZlcidzIG1lbWJlciBmdW5jdGlvbi4K
KyAgICAgICAgICAgIC8vIElmIHdlIGNhbiBhdm9pZCBjYWxsaW5nIHJlc29sdmVyLT5lbnN1cmVT
Y29wZVJlc29sdmVyKCkgaGVyZSwgd2UgZG9uJ3QgaGF2ZSB0byBpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwODg5MAorICAgICAgICAgICAgcmVzb2x2ZXItPmVuc3VyZVNjb3BlUmVzb2x2ZXIo
KS0+ZW5zdXJlUnVsZVNldEZvcihzY29wZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbWVk
aXVtLCByZXNvbHZlciwgc2NvcGUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyNlbmRpZgorICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwg
Km1lZGl1bSwgcmVzb2x2ZXIpOworICAgICAgICBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNvbGxl
Y3RGcm9tU3R5bGVTaGVldElmTmVlZGVkKGNzc1NoZWV0KTsKKyAgICB9CisgICAgbV9hdXRob3JT
dHlsZS0+c2hyaW5rVG9GaXQoKTsKKyAgICBjb2xsZWN0RmVhdHVyZXMoaXNWaWV3U291cmNlLCBy
ZXNvbHZlci0+c2NvcGVSZXNvbHZlcigpKTsKK30KKwordm9pZCBEb2N1bWVudFJ1bGVTZXRzOjpj
b2xsZWN0RmVhdHVyZXMoYm9vbCBpc1ZpZXdTb3VyY2UsIFN0eWxlU2NvcGVSZXNvbHZlciogc2Nv
cGVSZXNvbHZlcikKK3sKKyAgICBtX2ZlYXR1cmVzLmNsZWFyKCk7CisgICAgLy8gQ29sbGVjdCBh
bGwgaWRzIGFuZCBydWxlcyB1c2luZyBzaWJsaW5nIHNlbGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFu
ZCBzaW1pbGFyKQorICAgIC8vIGluIHRoZSBjdXJyZW50IHNldCBvZiBzdHlsZXNoZWV0cy4gU3R5
bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byByZWplY3QKKyAgICAvLyBz
aGFyaW5nIGNhbmRpZGF0ZXMuCisgICAgaWYgKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVs
dFN0eWxlKQorICAgICAgICBtX2ZlYXR1cmVzLmFkZChDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRl
ZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKSk7CisgICAgaWYgKG1fYXV0aG9yU3R5bGUpCisgICAgICAg
IG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOworICAgIGlmIChpc1Zp
ZXdTb3VyY2UpCisgICAgICAgIG1fZmVhdHVyZXMuYWRkKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6
dmlld1NvdXJjZVN0eWxlKCktPmZlYXR1cmVzKCkpOworCisgICAgaWYgKHNjb3BlUmVzb2x2ZXIp
CisgICAgICAgIHNjb3BlUmVzb2x2ZXItPmNvbGxlY3RGZWF0dXJlc1RvKG1fZmVhdHVyZXMpOwor
ICAgIGlmIChtX3VzZXJTdHlsZSkKKyAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUt
PmZlYXR1cmVzKCkpOworCisgICAgbV9zaWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVh
dHVyZXMuc2libGluZ1J1bGVzKTsKKyAgICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1h
a2VSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7Cit9CisKK3ZvaWQg
RG9jdW1lbnRSdWxlU2V0czo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVt
b3J5T2JqZWN0SW5mbykgY29uc3QKK3sKKyAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlP
YmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7CisgICAgaW5mby5hZGRN
ZW1iZXIobV9hdXRob3JTdHlsZSk7CisgICAgaW5mby5hZGRNZW1iZXIobV91c2VyU3R5bGUpOwor
ICAgIGluZm8uYWRkTWVtYmVyKG1fZmVhdHVyZXMpOworICAgIGluZm8uYWRkTWVtYmVyKG1fc2li
bGluZ1J1bGVTZXQpOworICAgIGluZm8uYWRkTWVtYmVyKG1fdW5jb21tb25BdHRyaWJ1dGVSdWxl
U2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVu
dFJ1bGVTZXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBlMTQzNmUyMmQzZDA2OWQ2Yjk5N2U5YzVjZDZkMDJk
ZTI4N2U0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1
bGVTZXRzLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBEb2N1bWVudFJ1bGVTZXRzX2gKKyNkZWZpbmUgRG9jdW1l
bnRSdWxlU2V0c19oCisKKyNpbmNsdWRlICJSdWxlRmVhdHVyZS5oIgorCisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTU3R5bGVSdWxlOworY2xhc3Mg
Q1NTU3R5bGVTaGVldDsKK2NsYXNzIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb247CitjbGFz
cyBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzOworY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvcjsKK2Ns
YXNzIFJ1bGVTZXQ7CitjbGFzcyBTdHlsZVJlc29sdmVyOworY2xhc3MgU3R5bGVTY29wZVJlc29s
dmVyOworCitjbGFzcyBEb2N1bWVudFJ1bGVTZXRzIHsKK3B1YmxpYzoKKyAgICBEb2N1bWVudFJ1
bGVTZXRzKCk7CisgICAgfkRvY3VtZW50UnVsZVNldHMoKTsKKyAgICBSdWxlU2V0KiBhdXRob3JT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aG9yU3R5bGUuZ2V0KCk7IH0KKyAgICBSdWxlU2V0
KiB1c2VyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTdHlsZS5nZXQoKTsgfQorICAgIFJ1
bGVGZWF0dXJlU2V0JiBmZWF0dXJlcygpIHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KKyAgICBjb25z
dCBSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9
CisgICAgUnVsZVNldCogc2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2libGluZ1J1bGVTZXQu
Z2V0KCk7IH0KKyAgICBSdWxlU2V0KiB1bmNvbW1vbkF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpOyB9CisKKyAgICB2b2lkIGluaXRVc2Vy
U3R5bGUoRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiosIGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImLCBTdHlsZVJlc29sdmVyJik7CisgICAgdm9pZCByZXNldEF1dGhvclN0eWxlKCk7Cisg
ICAgdm9pZCBhcHBlbmRBdXRob3JTdHlsZVNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3Qg
VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiwgTWVkaWFRdWVyeUV2YWx1YXRvciosIElu
c3BlY3RvckNTU09NV3JhcHBlcnMmLCBib29sIGlzVmlld1NvdXJjZSwgU3R5bGVSZXNvbHZlciop
OworCisgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMoYm9vbCBpc1ZpZXdTb3VyY2UsIFN0eWxlU2Nv
cGVSZXNvbHZlciopOworICAgIHZvaWQgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhj
b25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mLCBSdWxlU2V0JiB1c2VyU3R5bGUs
IGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBTdHlsZVJlc29sdmVyJik7CisKKyAgICB2b2lk
IHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBPd25QdHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKKyAgICBPd25QdHI8UnVsZVNldD4g
bV91c2VyU3R5bGU7CisgICAgUnVsZUZlYXR1cmVTZXQgbV9mZWF0dXJlczsKKyAgICBPd25QdHI8
UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKKyAgICBPd25QdHI8UnVsZVNldD4gbV91bmNvbW1v
bkF0dHJpYnV0ZVJ1bGVTZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBEb2N1bWVudFJ1bGVTZXRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApp
bmRleCAxODI5MGYzODU2NDg5NTM3NmU1ODk2YWNhMjQwYTgwMDc3MjYyNzNjLi40MGUwOTA5NmEx
MTRmNDZmYjk5ZjMxNzI4NDg4ZThlODRiYTZlNmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCkBAIC0yNTksMTYgKzI1OSwxMCBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29s
dmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCiAg
ICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9IGFk
b3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5m
cmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpKTsKIAotICAgIHJlc2V0QXV0aG9yU3R5
bGUoKTsKKyAgICBtX3J1bGVTZXRzLnJlc2V0QXV0aG9yU3R5bGUoKTsKIAogICAgIERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24qIHN0eWxlU2hlZXRDb2xsZWN0aW9uID0gZG9jdW1lbnQtPnN0
eWxlU2hlZXRDb2xsZWN0aW9uKCk7Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IHRlbXBVc2VyU3R5bGUg
PSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVl
dCA9IHN0eWxlU2hlZXRDb2xsZWN0aW9uLT5wYWdlVXNlclNoZWV0KCkpCi0gICAgICAgIHRlbXBV
c2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCksICpt
X21lZGl1bSwgdGhpcyk7Ci0gICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhzdHls
ZVNoZWV0Q29sbGVjdGlvbi0+aW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSwgKnRlbXBVc2VyU3R5
bGUpOwotICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxl
Y3Rpb24tPmRvY3VtZW50VXNlclN0eWxlU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsKLSAgICBp
ZiAodGVtcFVzZXJTdHlsZS0+bV9ydWxlQ291bnQgPiAwIHx8IHRlbXBVc2VyU3R5bGUtPm1fcGFn
ZVJ1bGVzLnNpemUoKSA+IDApCi0gICAgICAgIG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHlsZS5y
ZWxlYXNlKCk7CisgICAgbV9ydWxlU2V0cy5pbml0VXNlclN0eWxlKHN0eWxlU2hlZXRDb2xsZWN0
aW9uLCAqbV9tZWRpdW0sICp0aGlzKTsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgaWYg
KGRvY3VtZW50LT5zdmdFeHRlbnNpb25zKCkpIHsKQEAgLTI4Miw1NiArMjc2LDkgQEAgU3R5bGVS
ZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzKQogICAgIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKDAsIHN0eWxlU2hl
ZXRDb2xsZWN0aW9uLT5hY3RpdmVBdXRob3JTdHlsZVNoZWV0cygpKTsKIH0KIAotdm9pZCBTdHls
ZVJlc29sdmVyOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYgdXNlclNoZWV0cywgUnVsZVNldCYgdXNlclN0eWxlKQot
ewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VyU2hlZXRzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIEFTU0VSVCh1c2VyU2hlZXRzW2ldLT5jb250ZW50cygpLT5pc1VzZXJTdHlsZVNo
ZWV0KCkpOwotICAgICAgICB1c2VyU3R5bGUuYWRkUnVsZXNGcm9tU2hlZXQodXNlclNoZWV0c1tp
XS0+Y29udGVudHMoKSwgKm1fbWVkaXVtLCB0aGlzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBQYXNz
T3duUHRyPFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3RvcjxSdWxlRmVhdHVyZT4mIHJ1
bGVzKQotewotICAgIHNpemVfdCBzaXplID0gcnVsZXMuc2l6ZSgpOwotICAgIGlmICghc2l6ZSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQgPSBS
dWxlU2V0OjpjcmVhdGUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5ydWxlLCBydWxlc1tpXS5zZWxlY3Rv
ckluZGV4LCBydWxlc1tpXS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4gOiBSdWxlSGFzTm9TcGVjaWFsU3RhdGUpOwotICAgIHJ1bGVTZXQt
PnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIHJ1bGVTZXQucmVsZWFzZSgpOwotfQotCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OnJlc2V0QXV0aG9yU3R5bGUoKQotewotICAgIG1fYXV0aG9yU3R5bGUg
PSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBtX2F1dGhvclN0eWxlLT5kaXNhYmxlQXV0b1Nocmlu
a1RvRml0KCk7Ci19Ci0KIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVTaGVl
dHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
PiYgc3R5bGVTaGVldHMpCiB7Ci0gICAgLy8gVGhpcyBoYW5kbGVzIHNoZWV0cyBhZGRlZCB0byB0
aGUgZW5kIG9mIHRoZSBzdHlsZXNoZWV0IGxpc3Qgb25seS4gSW4gb3RoZXIgY2FzZXMgdGhlIHN0
eWxlIHJlc29sdmVyCi0gICAgLy8gbmVlZHMgdG8gYmUgcmVjb25zdHJ1Y3RlZC4gVG8gaGFuZGxl
IGluc2VydGlvbnMgdG9vIHRoZSBydWxlIG9yZGVyIG51bWJlcnMgd291bGQgbmVlZCB0byBiZSB1
cGRhdGVkLgotICAgIHVuc2lnbmVkIHNpemUgPSBzdHlsZVNoZWV0cy5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gZmlyc3ROZXc7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgQ1NTU3R5
bGVTaGVldCogY3NzU2hlZXQgPSBzdHlsZVNoZWV0c1tpXS5nZXQoKTsKLSAgICAgICAgQVNTRVJU
KCFjc3NTaGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgICAgIGlmIChjc3NTaGVldC0+bWVkaWFRdWVy
aWVzKCkgJiYgIW1fbWVkaXVtLT5ldmFsKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSwgdGhpcykp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgU3R5bGVTaGVldENvbnRlbnRzKiBzaGVl
dCA9IGNzc1NoZWV0LT5jb250ZW50cygpOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVO
QUJMRShTSEFET1dfRE9NKQotICAgICAgICBpZiAoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUg
PSBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlRm9yKGNzc1NoZWV0KSkgewotICAgICAgICAgICAg
ZW5zdXJlU2NvcGVSZXNvbHZlcigpLT5lbnN1cmVSdWxlU2V0Rm9yKHNjb3BlKS0+YWRkUnVsZXNG
cm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOwotICAgICAgICBtX2luc3BlY3Rv
ckNTU09NV3JhcHBlcnMuY29sbGVjdEZyb21TdHlsZVNoZWV0SWZOZWVkZWQoY3NzU2hlZXQpOwot
ICAgIH0KLSAgICBtX2F1dGhvclN0eWxlLT5zaHJpbmtUb0ZpdCgpOwotICAgIGNvbGxlY3RGZWF0
dXJlcygpOwotICAgIAorICAgIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoZmly
c3ROZXcsIHN0eWxlU2hlZXRzLCBtX21lZGl1bS5nZXQoKSwgbV9pbnNwZWN0b3JDU1NPTVdyYXBw
ZXJzLCBkb2N1bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSwgdGhpcyk7CiAgICAgaWYgKGRvY3VtZW50
KCktPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKICAgICAg
ICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2Vs
ZWN0b3IoKSk7CiAKQEAgLTYzOSw3ICs1ODYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNo
QXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgotICAg
IE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9hdXRob3JTdHlsZS5nZXQoKSwgaW5jbHVkZUVt
cHR5UnVsZXMpOworICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9ydWxlU2V0cy5hdXRo
b3JTdHlsZSgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9
IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
UmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKQEAgLTY1MCwxMyArNTk3LDEzIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKLSAgICBp
ZiAoIW1fdXNlclN0eWxlKQorICAgIGlmICghbV9ydWxlU2V0cy51c2VyU3R5bGUoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKICAg
ICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCkgLSAxOwotICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV91c2VyU3R5bGUuZ2V0
KCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1f
cnVsZVNldHMudXNlclN0eWxlKCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBSdWxlUmFuZ2Ug
cnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy51c2VyUnVsZVJhbmdlKCk7CiAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKQEAgLTc5Miw3ICs3Mzks
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogYm9vbCBTdHlsZVJlc29sdmVyOjpjbGFzc05h
bWVzQWZmZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMpIGNv
bnN0CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFtZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKG1fZmVhdHVyZXMuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2xh
c3NOYW1lc1tpXS5pbXBsKCkpKQorICAgICAgICBpZiAobV9ydWxlU2V0cy5mZWF0dXJlcygpLmNs
YXNzZXNJblJ1bGVzLmNvbnRhaW5zKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC04NjcsNyArODE0LDcg
QEAgTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQs
IHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW4KICAgICBpZiAocC0+aXNTVkdFbGVtZW50KCkgJiYg
c3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHApLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKLSAgICBpZiAocC0+aGFzSUQoKSAmJiBtX2Zl
YXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMocC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBs
KCkpKQorICAgIGlmIChwLT5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJblJ1
bGVzLmNvbnRhaW5zKHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBwLT5yZW5kZXJTdHls
ZSgpOwpAQCAtMTA0OSw3ICs5OTYsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5
bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChlbGVt
ZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHls
ZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJl
cy5pZHNJblJ1bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1w
bCgpKSkKKyAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCku
aWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEzMiw3ICsxMDc5LDcg
QEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAg
ICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICAvLyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5nIGlmIHRo
ZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCi0gICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1l
bnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0YXRlLnN0eWxl
ZEVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAoc3RhdGUu
c3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxl
cy5jb250YWlucyhzdGF0ZS5zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmlt
cGwoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNT
aGFyaW5nKHN0YXRlLmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMTE2NCwxMCArMTExMSwxMCBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9j
YXRlU2hhcmVkU3R5bGUoKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENhbid0IHNoYXJl
IGlmIHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMgaXMgY2hlY2tlZCBhdCB0aGUgZW5kIGFzIGl0
IHNob3VsZCByYXJlbHkgZmFpbC4KLSAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hl
c1J1bGVTZXQobV9zaWJsaW5nUnVsZVNldC5nZXQoKSkpCisgICAgaWYgKHN0eWxlU2hhcmluZ0Nh
bmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1fcnVsZVNldHMuc2libGluZygpKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgotICAg
IGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmli
dXRlUnVsZVNldC5nZXQoKSkpCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNS
dWxlU2V0KG1fcnVsZVNldHMudW5jb21tb25BdHRyaWJ1dGUoKSkpCiAgICAgICAgIHJldHVybiAw
OwogICAgIC8vIENhbid0IHNoYXJlIGlmIEBob3N0IEAtcnVsZXMgYXBwbHkuCiAgICAgaWYgKHN0
eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKSkKQEAgLTE2MzcsOSArMTU4NCw5
IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShp
bnQgcGFnZUluZGV4KQogICAgIAogICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKICAgICBtYXRjaFBh
Z2VSdWxlcyhyZXN1bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFByaW50U3R5bGUs
IGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3Vz
ZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICBtYXRjaFBhZ2VSdWxl
cyhyZXN1bHQsIG1fcnVsZVNldHMudXNlclN0eWxlKCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7
CiAgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFn
ZSBydWxlcywgYXMgcGVyIHRoZSBIVE1MNSBzcGVjLgotICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3Vs
dCwgbV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICBtYXRj
aFBhZ2VSdWxlcyhyZXN1bHQsIG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKSwgaXNMZWZ0LCBpc0Zp
cnN0LCBwYWdlKTsKICAgICBtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYm9vbCBp
bmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCkBAIC0yMDA5
LDE4ICsxOTU2LDE4IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVt
ZW50KiByZWdpb25FbGVtZW50KQogICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBh
ZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBt
b21lbnQsCiAgICAgLy8gc28gYWxsIHJlZ2lvbiBydWxlcyBhcmUgZ2xvYmFsIGJ5IGRlZmF1bHQu
IFZlcmlmeSB3aGV0aGVyIHRoYXQgY2FuIHN0YW5kIG9yIG5lZWRzIGNoYW5naW5nLgogCi0gICAg
dW5zaWduZWQgcnVsZXNTaXplID0gbV9hdXRob3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRS
dWxlU2V0cy5zaXplKCk7CisgICAgdW5zaWduZWQgcnVsZXNTaXplID0gbV9ydWxlU2V0cy5hdXRo
b3JTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXNTaXplOyArK2kpIHsKLSAgICAgICAgQVNTRVJUKG1f
YXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5n
ZXQoKSk7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKG1fYXV0aG9yU3R5bGUtPm1f
cmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQp
KQorICAgICAgICBBU1NFUlQobV9ydWxlU2V0cy5hdXRob3JTdHlsZSgpLT5tX3JlZ2lvblNlbGVj
dG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOworICAgICAgICBpZiAoY2hlY2tS
ZWdpb25TZWxlY3RvcihtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCktPm1fcmVnaW9uU2VsZWN0b3Jz
QW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKG1fdXNlclN0eWxlKSB7Ci0gICAgICAgIHJ1
bGVzU2l6ZSA9IG1fdXNlclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUo
KTsKKyAgICBpZiAobV9ydWxlU2V0cy51c2VyU3R5bGUoKSkgeworICAgICAgICBydWxlc1NpemUg
PSBtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNp
emUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7
Ci0gICAgICAgICAgICBBU1NFUlQobV91c2VyU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVs
ZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoY2hlY2tSZWdpb25T
ZWxlY3RvcihtX3VzZXJTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5z
ZWxlY3RvciwgcmVnaW9uRWxlbWVudCkpCisgICAgICAgICAgICBBU1NFUlQobV9ydWxlU2V0cy51
c2VyU3R5bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0Lmdl
dCgpKTsKKyAgICAgICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKG1fcnVsZVNldHMudXNl
clN0eWxlKCktPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJl
Z2lvbkVsZW1lbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMjg4NCw3ICsyODMxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiB2
YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJp
YnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQotICAgICAgICAgICAgICAgICAgICBtX2ZlYXR1
cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICAg
ICAgICAgICAgICBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuYXR0cnNJblJ1bGVzLmFkZChhdHRyLmxv
Y2FsTmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFs
dWUtPmlzQ291bnRlcigpKSB7CiAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50ZXJW
YWx1ZSA9IGNvbnRlbnRWYWx1ZS0+Z2V0Q291bnRlclZhbHVlKCk7CiAgICAgICAgICAgICAgICAg
ICAgIEVMaXN0U3R5bGVUeXBlIGxpc3RTdHlsZVR5cGUgPSBOb25lTGlzdFN0eWxlOwpAQCAtNTE2
NiwyOCArNTExMyw2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMo
KQogI2VuZGlmCiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzKCkKLXsK
LSAgICBtX2ZlYXR1cmVzLmNsZWFyKCk7Ci0gICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxl
cyB1c2luZyBzaWJsaW5nIHNlbGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQotICAg
IC8vIGluIHRoZSBjdXJyZW50IHNldCBvZiBzdHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2Rl
IHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byByZWplY3QKLSAgICAvLyBzaGFyaW5nIGNhbmRpZGF0
ZXMuCi0gICAgaWYgKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFN0eWxlKQotICAgICAg
ICBtX2ZlYXR1cmVzLmFkZChDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRTdHlsZS0+ZmVh
dHVyZXMoKSk7Ci0gICAgaWYgKG1fYXV0aG9yU3R5bGUpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRk
KG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOwotICAgIGlmIChkb2N1bWVudCgpLT5pc1ZpZXdT
b3VyY2UoKSkKLSAgICAgICAgbV9mZWF0dXJlcy5hZGQoQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjp2
aWV3U291cmNlU3R5bGUoKS0+ZmVhdHVyZXMoKSk7Ci0KLSAgICBpZiAobV9zY29wZVJlc29sdmVy
KQotICAgICAgICBtX3Njb3BlUmVzb2x2ZXItPmNvbGxlY3RGZWF0dXJlc1RvKG1fZmVhdHVyZXMp
OwotICAgIGlmIChtX3VzZXJTdHlsZSkKLSAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5
bGUtPmZlYXR1cmVzKCkpOwotCi0gICAgbV9zaWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1f
ZmVhdHVyZXMuc2libGluZ1J1bGVzKTsKLSAgICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9
IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7Ci19Ci0KIHZv
aWQgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXM6OnJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xh
c3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpD
U1MpOwpAQCAtNTIxMiwxMSArNTEzNyw3IEBAIHZvaWQgTWVkaWFRdWVyeVJlc3VsdDo6cmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uCiB2b2lk
IFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2Jq
ZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgIGluZm8uYWRkTWVt
YmVyKG1fYXV0aG9yU3R5bGUsICJhdXRob3JTdHlsZSIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1f
dXNlclN0eWxlLCAidXNlclN0eWxlIik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9mZWF0dXJlcywg
ImZlYXR1cmVzIik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9zaWJsaW5nUnVsZVNldCwgInNpYmxp
bmdSdWxlU2V0Iik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVT
ZXQsICJ1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQiKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX3J1
bGVTZXRzLCAicnVsZVNldHMiKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2tleWZyYW1lc1J1bGVN
YXAsICJrZXlmcmFtZXNSdWxlTWFwIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUHJv
cGVydGllc0NhY2hlLCAibWF0Y2hlZFByb3BlcnRpZXNDYWNoZSIpOwogICAgIGluZm8uYWRkTWVt
YmVyKG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIsICJtYXRjaGVkUHJvcGVydGll
c0NhY2hlU3dlZXBUaW1lciIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggODRj
M2NkMWZjMDM3ZGFiMGRmZDc1YThmZmQ3ZDhiOWE1YzQ5NzNmOC4uZThjYTNjMDdkM2QxMjAwNDM4
ZmIzOWM5ZTAyOTUwZTJiMzgxNGRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NU
b1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRSdWxlU2V0cy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU09NV3JhcHBlcnMuaCIKICNpbmNs
dWRlICJMaW5rSGFzaC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKQEAgLTE2OSw2ICsx
NzAsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGU7IH0KICAgICBFbGVtZW50KiBlbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5lbGVtZW50OyB9CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQorICAgIFN0eWxlU2NvcGVSZXNv
bHZlciogc2NvcGVSZXNvbHZlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVSZXNvbHZlci5nZXQo
KTsgfQogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1
cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KICAgICBjb25zdCBGb250RGVzY3JpcHRp
b24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVudFN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOyB9CiAgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUo
KS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KQEAgLTE3OSwxMCArMTgx
LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRp
b24gdGV4dE9yaWVudGF0aW9uKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRl
eHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CiAgICAgYm9vbCBoYXNQYXJlbnROb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnROb2RlOyB9CiAKLSAgICB2b2lkIHJlc2V0
QXV0aG9yU3R5bGUoKTsKKyAgICAvLyBGSVhNRTogSXQgY291bGQgYmUgYmV0dGVyIHRvIGNhbGwg
bV9ydWxlU2V0cy5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cygpIGRpcmVjdGx5IGFmdGVyIHdlIGZh
Y3RvciBTdHlsZVJzb2x2ZXIgZnVydGhlci4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA4ODkwCiAgICAgdm9pZCBhcHBlbmRBdXRob3JTdHlsZVNoZWV0
cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+
Jik7CiAKLXByaXZhdGU6CisgICAgRG9jdW1lbnRSdWxlU2V0cyYgcnVsZVNldHMoKSB7IHJldHVy
biBtX3J1bGVTZXRzOyB9CisgICAgY29uc3QgRG9jdW1lbnRSdWxlU2V0cyYgcnVsZVNldHMoKSBj
b25zdCB7IHJldHVybiBtX3J1bGVTZXRzOyB9CisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8
fCBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBTdHlsZVNjb3BlUmVzb2x2ZXIqIGVuc3VyZVNjb3Bl
UmVzb2x2ZXIoKQogICAgIHsKQEAgLTIwMSw5ICsyMDYsOSBAQCBwcml2YXRlOgogICAgIH0KICNl
bmRpZgogCitwcml2YXRlOgogICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50Kiwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7CiAgICAg
dm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7Ci0gICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMoKTsK
ICAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKICAgICBib29sIHN0eWxlU2hh
cmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqKTsKICAgICBib29sIHN0eWxlU2hh
cmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKTsKQEAgLTI3MSw5ICsyNzYsOSBAQCBwdWJs
aWM6CiAKICAgICBib29sIGNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogcmVnaW9uRWxlbWVudCk7
CiAKLSAgICBib29sIHVzZXNTaWJsaW5nUnVsZXMoKSBjb25zdCB7IHJldHVybiAhbV9mZWF0dXJl
cy5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMo
KSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlczsgfQotICAgIGJv
b2wgdXNlc0JlZm9yZUFmdGVyUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNC
ZWZvcmVBZnRlclJ1bGVzOyB9CisgICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyBy
ZXR1cm4gIW1fcnVsZVNldHMuZmVhdHVyZXMoKS5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpOyB9Cisg
ICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3J1bGVTZXRzLmZl
YXR1cmVzKCkudXNlc0ZpcnN0TGluZVJ1bGVzOyB9CisgICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJS
dWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZVNldHMuZmVhdHVyZXMoKS51c2VzQmVmb3JlQWZ0
ZXJSdWxlczsgfQogCiAgICAgc3RhdGljIGJvb2wgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhD
U1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290
U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwogICAgIApAQCAtNDEy
LDEyICs0MTcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRl
eCkgY29uc3Q7CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OwogCi0g
ICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IG1f
dXNlclN0eWxlOwotCi0gICAgUnVsZUZlYXR1cmVTZXQgbV9mZWF0dXJlczsKLSAgICBPd25QdHI8
UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKLSAgICBPd25QdHI8UnVsZVNldD4gbV91bmNvbW1v
bkF0dHJpYnV0ZVJ1bGVTZXQ7CisgICAgRG9jdW1lbnRSdWxlU2V0cyBtX3J1bGVTZXRzOwogCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5
ZnJhbWVzPiA+IEtleWZyYW1lc1J1bGVNYXA7CiAgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZy
YW1lc1J1bGVNYXA7CkBAIC01MjQsOCArNTI0LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBz
dGF0aWMgUmVuZGVyU3R5bGUqIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKLSAgICB2b2lkIGNv
bGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiA+JiwgUnVsZVNldCYgdXNlclN0eWxlKTsKLQogICAgIHZvaWQgY2FjaGVCb3JkZXJB
bmRCYWNrZ3JvdW5kKCk7CiAKIHByaXZhdGU6CkBAIC02MDMsMTkgKzYwMSwxOSBAQCBwcml2YXRl
OgogaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29u
c3QgQXRvbWljU3RyaW5nICZhdHRyaWJ1dGVOYW1lKSBjb25zdAogewogICAgIEFTU0VSVCghYXR0
cmlidXRlTmFtZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX2ZlYXR1cmVzLmF0dHJzSW5SdWxl
cy5jb250YWlucyhhdHRyaWJ1dGVOYW1lLmltcGwoKSk7CisgICAgcmV0dXJuIG1fcnVsZVNldHMu
ZmVhdHVyZXMoKS5hdHRyc0luUnVsZXMuY29udGFpbnMoYXR0cmlidXRlTmFtZS5pbXBsKCkpOwog
fQogCiBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpoYXNTZWxlY3RvckZvckNsYXNzKGNvbnN0
IEF0b21pY1N0cmluZyYgY2xhc3NWYWx1ZSkgY29uc3QKIHsKICAgICBBU1NFUlQoIWNsYXNzVmFs
dWUuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9mZWF0dXJlcy5jbGFzc2VzSW5SdWxlcy5jb250
YWlucyhjbGFzc1ZhbHVlLmltcGwoKSk7CisgICAgcmV0dXJuIG1fcnVsZVNldHMuZmVhdHVyZXMo
KS5jbGFzc2VzSW5SdWxlcy5jb250YWlucyhjbGFzc1ZhbHVlLmltcGwoKSk7CiB9CiAKIGlubGlu
ZSBib29sIFN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9ySWQoY29uc3QgQXRvbWljU3RyaW5n
JiBpZFZhbHVlKSBjb25zdAogewogICAgIEFTU0VSVCghaWRWYWx1ZS5pc0VtcHR5KCkpOwotICAg
IHJldHVybiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoaWRWYWx1ZS5pbXBsKCkpOwor
ICAgIHJldHVybiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhpZFZh
bHVlLmltcGwoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAppbmRleCA2MzJm
YTk0YWEzMzVjYWIwZWU0MTRkZmJhZGJkN2M3MmZjMzBjNzdmLi4zYWMxZjVlYzRjNzgyZjM2NjEw
MWQ0ZjEyMzk4MGQwOTljMzdjYzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCkBAIC00NzgsNyArNDc4LDcgQEAgYm9vbCBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRh
dGVGbGFnIHVwZGF0ZUZsYWcKICAgICBlbHNlIHsKICAgICAgICAgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQtPnN0eWxlUmVzb2x2ZXIoKTsKICAgICAgICAgaWYgKHN0
eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID09IFJlc2V0KSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5yZXNldEF1dGhvclN0eWxlKCk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5ydWxl
U2V0cygpLnJlc2V0QXV0aG9yU3R5bGUoKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPmFw
cGVuZEF1dGhvclN0eWxlU2hlZXRzKDAsIGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9PSBB
ZGRpdGl2ZSk7Cg==
</data>
<flag name="commit-queue"
          id="206025"
          type_id="3"
          status="-"
          setter="peter+ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186540</attachid>
            <date>2013-02-04 21:25:16 -0800</date>
            <delta_ts>2013-02-05 20:53:59 -0800</delta_ts>
            <desc>Fix build errors.</desc>
            <filename>bug-107777-20130205142154.patch</filename>
            <type>text/plain</type>
            <size>40199</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzNkMWU5YWZiN2Q5ODIx
MjM2ODQyNWI2NzIwZGY0MDgzNjZmZTFjZS4uMDkwYzE1ZTg3ODhhZjc2MWU3ZDliZDkxYzIzOWE3
OGVmMjhmY2ExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEzLTAyLTA0ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBTcGxpdCBlYWNoIFJ1bGVT
ZXQgYW5kIGZlYXR1cmUgb3V0IGZyb20gU3R5bGVSZXNvbHZlciBpbnRvIGl0cyBvd24gY2xhc3Mu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc3NzcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdHRp
bmcgZWFjaCBSdWxlU2V0IGFuZCBmZWF0dXJlIG91dCBmcm9tIFN0eWxlUmVzb3ZlciBpbnRvIGl0
cyBvbncgY2xhc3MsIERvY3VtZW50UnVsZVNldHMsCisgICAgICAgIHRvIG1hbmFnZSB0aGVtIHNl
cGFyYXRlbHkuCisKKyAgICAgICAgVGhpcyBpcyBvbmUgb2YgdGhlIGF0dGVtcHRzIHRvIHRyeSB0
byByZXNvbHZlIG1ldGEgYnVnIChidWcgODk4NzkpCisgICAgICAgIHRvIGxvc2UgU3R5bGVSZXNv
bHZlcidzIHdlaWdodC4gIFdlIG5lZWQgZnVydGhlciBhY3Rpb24gdG8gZmFjdG9yCisgICAgICAg
IFN0eWxlUmVzb2x2ZXIgdG8gc2VwYXJhdGUgaXQgaW50byBzb21lIGNsYXNzZXMgY2xlYW5seS4K
KyAgICAgICAgU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwODg5MC4gQSBmb2xsb3dpbmcgcGF0Y2ggd2lsbCBhZGRyZXNzIHRoYXQuCisKKyAgICAgICAg
Tm8gdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NBbGxJbk9uZS5jcHA6CisgICAgICAg
ICogY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6RG9jdW1lbnRSdWxlU2V0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjp+RG9jdW1lbnRSdWxlU2V0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjppbml0VXNlclN0eWxlKTogTmV3IGhl
bHBlciB0byBpbml0aWFsaXplIGVhY2ggUnVsZVNldHMuCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKTogRmFjdG9yZWQg
b3V0IGZyb20gU3R5bGVSZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSdWxlU2V0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjpyZXNldEF1dGhvclN0
eWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjphcHBlbmRB
dXRob3JTdHlsZVNoZWV0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxl
U2V0czo6Y29sbGVjdEZlYXR1cmVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dFJ1bGVTZXRzOjpyZXBvcnRNZW1vcnlVc2FnZSk6IE5ldyBtZXRob2RzIHRvIHJlcG9ydCBtZW1v
cnkgdXNhZ2UuIEZhY3RvcmVkIG91dCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgICogY3Nz
L0RvY3VtZW50UnVsZVNldHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KERvY3VtZW50UnVsZVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6
YXV0aG9yU3R5bGUpOiBNb3ZlZCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFJ1bGVTZXRzOjp1c2VyU3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50UnVsZVNldHM6OmZlYXR1cmVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudFJ1bGVTZXRzOjpzaWJsaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFJ1bGVTZXRzOjp1bmNvbW1vbkF0dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAqIGNzcy9T
dHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxl
UmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVTaGVldHMpOiBOb3cgY2FsbHMgRG9jdW1lbnRSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5
bGVTaGVldHMuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1
bGVzKTogVXNlIG1fcnVsZVNldHMuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpt
YXRjaFVzZXJSdWxlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
Y2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblN0eWxlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6IE5vdyBj
YWxscyBEb2N1bWVudFJ1bGVTZXRzOjpyZXBvcnRNZW1vcnlVc2FnZS4KKyAgICAgICAgKiBjc3Mv
U3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2NvcGVS
ZXNvbHZlcik6CisgICAgICAgIChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnJ1bGVTZXRzKTogYWNjZXNzb3IgciB0byBEb2N1bWVudFJ1bGVTZXRzLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlc1NpYmxpbmdSdWxlcyk6IFVzZSBt
X3J1bGVTZXRzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlc0ZpcnN0TGlu
ZVJ1bGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1c2VzQmVm
b3JlQWZ0ZXJSdWxlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9yQ2xhc3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9ySWQpOiBEaXR0by4KKyAgICAgICAgKiBkb20v
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyk6CisKIDIw
MTMtMDItMDQgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtDaHJvbWl1bV0gQWRkIGEgc2lnbmFsIGZvciB3aGVuIHRoZSBib2R5IGlzIGluc2VydGVk
IGluIHRoZSBkb2N1bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiZDIzM2I5ZjFlMzk4ZjAz
Njk3YTAzMzIzNzU1MWQ3OWMxNWJiOGU3Li41MGMxNDhhZWQ1OWVkYjA5Yjg0ODcwODlkM2JlMTJm
MDk1MzBmNTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA2OCw2ICsxMDY4LDcgQEAgc2V0
KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9DU1NWYWx1ZS5jcHAKICAgICBjc3MvQ1NTVmFsdWVM
aXN0LmNwcAogICAgIGNzcy9DU1NWYWx1ZVBvb2wuY3BwCisgICAgY3NzL0RvY3VtZW50UnVsZVNl
dHMuY3BwCiAgICAgY3NzL0ZvbnRGZWF0dXJlVmFsdWUuY3BwCiAgICAgY3NzL0ZvbnRWYWx1ZS5j
cHAKICAgICBjc3MvSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IDcxZDdhYWU3YjI0ZDkwNzVlY2E1NGM3NDdmOTJlYzZkMWQwNWRmYTIu
LjIxOTY5NGIzMThlNWMzNTA1MDYwYTIzYTk0YWRhOGE5M2FkNDllM2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtMjYxNyw2ICsyNjE3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYXJpYWJsZVZhbHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9EYXNoYm9hcmRS
ZWdpb24uaCBcCisJU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9j
c3MvRm9udEZlYXR1cmVWYWx1ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmVhdHVy
ZVZhbHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250VmFsdWUuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CmluZGV4IGU4ZjZmYzE2MmQzOTk0NWM0NDFiMGU2YzQyOTkzMGRjYWQ3ZDBiNjUuLmQ2M2QxNDE1
Nzk3YTc2ZmI1NDc1MTUzNzU4ZjNhYzVjYTg1MmI3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMjk1LDYg
KzI5NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGNzcy9DU1NWYWx1ZS5jcHAgXAogICAgIGNzcy9D
U1NWYWx1ZUxpc3QuY3BwIFwKICAgICBjc3MvQ1NTVmFsdWVQb29sLmNwcCBcCisgICAgY3NzL0Rv
Y3VtZW50UnVsZVNldHMuY3BwIFwKICAgICBjc3MvRm9udEZlYXR1cmVWYWx1ZS5jcHAgXAogICAg
IGNzcy9Gb250VmFsdWUuY3BwIFwKICAgICBjc3MvSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IGM1ZDVjMGM0YmUxOWZhN2Y1NmU1ZmQ4ZmMzMjAzMDFkNzAz
OGRhNjEuLjAwMmQyY2Y2YjliOGFkMzdkMjI1MzBmMzliYzNkNDRmNDc4OGVhOTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTE1MzgsNiArMTUzOCw4IEBACiAgICAgICAgICAgICAnY3NzL0NTU1Zhcmlh
YmxlVmFsdWUuaCcsCiAgICAgICAgICAgICAnY3NzL0NvdW50ZXIuaCcsCiAgICAgICAgICAgICAn
Y3NzL0Rhc2hib2FyZFJlZ2lvbi5oJywKKyAgICAgICAgICAgICdjc3MvRG9jdW1lbnRSdWxlU2V0
cy5jcHAnLAorICAgICAgICAgICAgJ2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmgnLAogICAgICAgICAg
ICAgJ2Nzcy9Gb250RmVhdHVyZVZhbHVlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL0ZvbnRGZWF0
dXJlVmFsdWUuaCcsCiAgICAgICAgICAgICAnY3NzL0ZvbnRWYWx1ZS5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDliMjA4
ZDI4MTlhOGI2ZjliYTVkZTk5NzA4YjM1OWUwMzdiMmNhZGIuLmNmY2U5ZjA0NTVkYjc0NmZhYTA1
ZDcwNDRhZDIzNDZkYjQzZjRiOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0MzcsNiArMTQzNyw4IEBACiAJCTRBMUU3MUE2
MTRFMTA2QUMwMDYyNkY5RCAvKiBKU1NoYWRvd1Jvb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBMUU3MUE0MTRFMTA2QUMwMDYyNkY5RCAvKiBKU1No
YWRvd1Jvb3QuaCAqLzsgfTsKIAkJNEEzOEJGNTAxNEZFMUMwOTAwNjEyNTEyIC8qIFdlYlNvY2tl
dERlZmxhdGVGcmFtZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEEzOEJGNEUxNEZFMUMwOTAwNjEyNTEyIC8qIFdlYlNvY2tldERlZmxhdGVGcmFt
ZXIuY3BwICovOyB9OwogCQk0QTM4QkY1MTE0RkUxQzA5MDA2MTI1MTIgLyogV2ViU29ja2V0RGVm
bGF0ZUZyYW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEEzOEJGNEYxNEZFMUMwOTAwNjEyNTEyIC8qIFdlYlNvY2tldERlZmxhdGVGcmFtZXIuaCAq
LzsgfTsKKwkJNEE0RjQ4QTkxNkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE0RjQ4QTcx
NkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuY3BwICovOyB9OworCQk0QTRGNDhB
QTE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE0RjQ4QTgxNkIwREZDMDAwRURCQjI5IC8q
IERvY3VtZW50UnVsZVNldHMuaCAqLzsgfTsKIAkJNEE1QTJBREIxNjFFN0UwMDAwNTg4OUREIC8q
IFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QTVBMkFEOTE2MUU3RTAwMDA1ODg5REQgLyogV2ViU29ja2V0
RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLzsgfTsKIAkJNEE1QTJBREMxNjFFN0UwMDAwNTg4OUREIC8q
IFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEE1QTJBREExNjFFN0UwMDAwNTg4OUREIC8qIFdlYlNvY2tldEV4
dGVuc2lvblBhcnNlci5oICovOyB9OwogCQk0QTZBMEM1QjE1MjMyRjI0MDBCMDlDNkUgLyogQ29t
cG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRBNkEwQzU5MTUyMzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRv
d1RyZWVXYWxrZXIuY3BwICovOyB9OwpAQCAtODgwOSw2ICs4ODExLDggQEAKIAkJNEExRTcxQTQx
NEUxMDZBQzAwNjI2RjlEIC8qIEpTU2hhZG93Um9vdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1NoYWRvd1Jvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NEEzOEJGNEUxNEZFMUMwOTAwNjEyNTEyIC8qIFdlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU29ja2V0RGVmbGF0ZUZyYW1l
ci5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBMzhCRjRGMTRGRTFDMDkwMDYxMjUx
MiAvKiBXZWJTb2NrZXREZWZsYXRlRnJhbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdlYlNvY2tldERlZmxhdGVGcmFtZXIuaDsgcGF0aCA9IE1vZHVsZXMvd2Vic29ja2V0
cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTRBNEY0OEE3MTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50UnVsZVNldHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QTRGNDhBODE2QjBERkMwMDBFREJCMjkgLyogRG9j
dW1lbnRSdWxlU2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVu
dFJ1bGVTZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBNUEyQUQ5MTYxRTdF
MDAwMDU4ODlERCAvKiBXZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmNwcDsgcGF0
aCA9IE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTVBMkFEQTE2MUU3RTAwMDA1ODg5REQgLyogV2Vi
U29ja2V0RXh0ZW5zaW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5oOyBwYXRoID0gTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldEV4dGVuc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
QTZBMEM1OTE1MjMyRjI0MDBCMDlDNkUgLyogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2VkU2hhZG93VHJlZVdh
bGtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTgxOCw2ICsyMTgyMiw4
IEBACiAJCQkJRTQ5QkQ5RjkxMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oICovLAog
CQkJCUNBRTlGOTBFMTQ2NDQxRjAwMEMyNDVCMSAvKiBDU1NWYXJpYWJsZVZhbHVlLmggKi8sCiAJ
CQkJQTgwRTZDRTEwQTE5ODlDQTAwN0ZCOEM1IC8qIERhc2hib2FyZFJlZ2lvbi5oICovLAorCQkJ
CTRBNEY0OEE3MTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmNwcCAqLywKKwkJ
CQk0QTRGNDhBODE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5oICovLAogCQkJ
CTRBNkU5RkMxMTNDMTdEMUQwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVZhbHVlLmNwcCAqLywKIAkJ
CQk0QTZFOUZDMjEzQzE3RDFEMDA0NkE3RjggLyogRm9udEZlYXR1cmVWYWx1ZS5oICovLAogCQkJ
CUE4MEU2Q0M3MEExOTg5Q0EwMDdGQjhDNSAvKiBGb250VmFsdWUuY3BwICovLApAQCAtMjMzOTAs
NiArMjMzOTYsNyBAQAogCQkJCUNFMDU3RkE2MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OTQ3RkZFMTJGODBDRDIwMEEw
RjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0ZCQUU4
MEI1MTUyRUQwMDAxRjFENyAvKiBEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NEE0RjQ4QUExNkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFENkU3MUFEMTY2ODg5OUQwMDMyMEMxMyAvKiBEb2N1bWVudFNoYXJlZE9iamVj
dFBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQjkwNTYx
QTBGMjU3OEJGMDA5NUZGNkEgLyogRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI3MDI5LDYgKzI3MDM2LDcgQEAKIAkJCQlDRTA1N0ZBNTEyMjA3MzExMDBBNDc2
RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
OTQ3RkZEMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThDMjI4MEUxMUQ0QTU5NzAwRDVBN0QzIC8qIERvY3VtZW50UGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTRBNEY0OEE5MTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVu
dFJ1bGVTZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFENkU3MUFDMTY2ODg5OUQwMDMyMEMx
MyAvKiBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ3
RTI3NjgxNjAzNkVEQzAwRUUyQUZCIC8qIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEI5MDU2MTkwRjI1NzhCRTAwOTVGRjZBIC8qIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5P
bmUuY3BwCmluZGV4IGM4MWMzYjIxZjk4ZDk2ZDE0M2M5MmNiYWVjMTM5MDg1Y2FkZjBmMWEuLmU3
M2UzNThiMjcwOTQwODdhMTg5NmJhNmMxMDY0YjUzNmY1NTYxMjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0FsbEluT25lLmNwcApAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlLmNwcCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuY3BwIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5jcHAi
CisjaW5jbHVkZSAiRG9jdW1lbnRSdWxlU2V0cy5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NT
T01XcmFwcGVycy5jcHAiCiAjaW5jbHVkZSAiUnVsZUZlYXR1cmUuY3BwIgogI2luY2x1ZGUgIlJ1
bGVTZXQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNl
dHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQ3MTI5MTUwNjI4MTAwYjNhZjY5ZmU0MzE0Yzk2NmVjOGE5MmMxMDgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAKQEAgLTAsMCAr
MSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAo
a2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBT
aGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8
YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8p
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEx
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEb2N1
bWVudFJ1bGVTZXRzLmgiCisKKyNpbmNsdWRlICJDU1NEZWZhdWx0U3R5bGVTaGVldHMuaCIKKyNp
bmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbi5oIgorI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRG9jdW1lbnRSdWxlU2V0czo6RG9jdW1lbnRSdWxlU2V0cygpCit7
Cit9CisKK0RvY3VtZW50UnVsZVNldHM6On5Eb2N1bWVudFJ1bGVTZXRzKCkKK3sKK30KKwordm9p
ZCBEb2N1bWVudFJ1bGVTZXRzOjppbml0VXNlclN0eWxlKERvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb24qIHN0eWxlU2hlZXRDb2xsZWN0aW9uLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBt
ZWRpdW0sIFN0eWxlUmVzb2x2ZXImIHJlc29sdmVyKQoreworICAgIE93blB0cjxSdWxlU2V0PiB0
ZW1wVXNlclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgaWYgKENTU1N0eWxlU2hlZXQq
IHBhZ2VVc2VyU2hlZXQgPSBzdHlsZVNoZWV0Q29sbGVjdGlvbi0+cGFnZVVzZXJTaGVldCgpKQor
ICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlVXNlclNoZWV0LT5j
b250ZW50cygpLCBtZWRpdW0sICZyZXNvbHZlcik7CisgICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJT
dHlsZVNoZWV0cyhzdHlsZVNoZWV0Q29sbGVjdGlvbi0+aW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMo
KSwgKnRlbXBVc2VyU3R5bGUsIG1lZGl1bSwgcmVzb2x2ZXIpOworICAgIGNvbGxlY3RSdWxlc0Zy
b21Vc2VyU3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxlY3Rpb24tPmRvY3VtZW50VXNlclN0eWxl
U2hlZXRzKCksICp0ZW1wVXNlclN0eWxlLCBtZWRpdW0sIHJlc29sdmVyKTsKKyAgICBpZiAodGVt
cFVzZXJTdHlsZS0+bV9ydWxlQ291bnQgPiAwIHx8IHRlbXBVc2VyU3R5bGUtPm1fcGFnZVJ1bGVz
LnNpemUoKSA+IDApCisgICAgICAgIG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHlsZS5yZWxlYXNl
KCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRSdWxlU2V0czo6Y29sbGVjdFJ1bGVzRnJvbVVzZXJTdHls
ZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHVzZXJTaGVldHMs
IFJ1bGVTZXQmIHVzZXJTdHlsZSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBT
dHlsZVJlc29sdmVyJiByZXNvbHZlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dXNlclNoZWV0cy5zaXplKCk7ICsraSkgeworICAgICAgICBBU1NFUlQodXNlclNoZWV0c1tpXS0+
Y29udGVudHMoKS0+aXNVc2VyU3R5bGVTaGVldCgpKTsKKyAgICAgICAgdXNlclN0eWxlLmFkZFJ1
bGVzRnJvbVNoZWV0KHVzZXJTaGVldHNbaV0tPmNvbnRlbnRzKCksIG1lZGl1bSwgJnJlc29sdmVy
KTsKKyAgICB9Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNv
bnN0IFZlY3RvcjxSdWxlRmVhdHVyZT4mIHJ1bGVzKQoreworICAgIHNpemVfdCBzaXplID0gcnVs
ZXMuc2l6ZSgpOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
T3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxl
c1tpXS5ydWxlLCBydWxlc1tpXS5zZWxlY3RvckluZGV4LCBydWxlc1tpXS5oYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gOiBSdWxlSGFzTm9T
cGVjaWFsU3RhdGUpOworICAgIHJ1bGVTZXQtPnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHJ1
bGVTZXQucmVsZWFzZSgpOworfQorCit2b2lkIERvY3VtZW50UnVsZVNldHM6OnJlc2V0QXV0aG9y
U3R5bGUoKQoreworICAgIG1fYXV0aG9yU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICBt
X2F1dGhvclN0eWxlLT5kaXNhYmxlQXV0b1Nocmlua1RvRml0KCk7Cit9CisKK3ZvaWQgRG9jdW1l
bnRSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYgc3R5bGVTaGVldHMsIE1lZGlhUXVl
cnlFdmFsdWF0b3IqIG1lZGl1bSwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NT
T01XcmFwcGVycywgYm9vbCBpc1ZpZXdTb3VyY2UsIFN0eWxlUmVzb2x2ZXIqIHJlc29sdmVyKQor
eworICAgIC8vIFRoaXMgaGFuZGxlcyBzaGVldHMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3R5
bGVzaGVldCBsaXN0IG9ubHkuIEluIG90aGVyIGNhc2VzIHRoZSBzdHlsZSByZXNvbHZlcgorICAg
IC8vIG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhhbmRsZSBpbnNlcnRpb25zIHRvbyB0
aGUgcnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZC4KKyAgICB1bnNp
Z25lZCBzaXplID0gc3R5bGVTaGVldHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGZp
cnN0TmV3OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1N0eWxlU2hlZXQqIGNzc1NoZWV0
ID0gc3R5bGVTaGVldHNbaV0uZ2V0KCk7CisgICAgICAgIEFTU0VSVCghY3NzU2hlZXQtPmRpc2Fi
bGVkKCkpOworICAgICAgICBpZiAoY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpICYmICFtZWRpdW0t
PmV2YWwoY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCA9IGNzc1NoZWV0LT5j
b250ZW50cygpOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9N
KQorICAgICAgICBpZiAoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBTdHlsZVNjb3BlUmVz
b2x2ZXI6OnNjb3BlRm9yKGNzc1NoZWV0KSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92
ZSBhIGRlcGVuZGVuY3kgdG8gY2FsbGluZyBhIFN0eWxlUmVzb2x2ZXIncyBtZW1iZXIgZnVuY3Rp
b24uCisgICAgICAgICAgICAvLyBJZiB3ZSBjYW4gYXZvaWQgY2FsbGluZyByZXNvbHZlci0+ZW5z
dXJlU2NvcGVSZXNvbHZlcigpIGhlcmUsIHdlIGRvbid0IGhhdmUgdG8gaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIi4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDg4OTAKKyAgICAgICAgICAgIHJlc29sdmVyLT5lbnN1cmVTY29wZVJlc29s
dmVyKCktPmVuc3VyZVJ1bGVTZXRGb3Ioc2NvcGUpLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwg
Km1lZGl1bSwgcmVzb2x2ZXIsIHNjb3BlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisjZW5kaWYKKyAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hl
ZXQsICptZWRpdW0sIHJlc29sdmVyKTsKKyAgICAgICAgaW5zcGVjdG9yQ1NTT01XcmFwcGVycy5j
b2xsZWN0RnJvbVN0eWxlU2hlZXRJZk5lZWRlZChjc3NTaGVldCk7CisgICAgfQorICAgIG1fYXV0
aG9yU3R5bGUtPnNocmlua1RvRml0KCk7CisgICAgY29sbGVjdEZlYXR1cmVzKGlzVmlld1NvdXJj
ZSwgcmVzb2x2ZXItPnNjb3BlUmVzb2x2ZXIoKSk7Cit9CisKK3ZvaWQgRG9jdW1lbnRSdWxlU2V0
czo6Y29sbGVjdEZlYXR1cmVzKGJvb2wgaXNWaWV3U291cmNlLCBTdHlsZVNjb3BlUmVzb2x2ZXIq
IHNjb3BlUmVzb2x2ZXIpCit7CisgICAgbV9mZWF0dXJlcy5jbGVhcigpOworICAgIC8vIENvbGxl
Y3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2libGluZyBzZWxlY3RvcnMgKDpmaXJzdC1jaGls
ZCBhbmQgc2ltaWxhcikKKyAgICAvLyBpbiB0aGUgY3VycmVudCBzZXQgb2Ygc3R5bGVzaGVldHMu
IFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVqZWN0CisgICAg
Ly8gc2hhcmluZyBjYW5kaWRhdGVzLgorICAgIGlmIChDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRl
ZmF1bHRTdHlsZSkKKyAgICAgICAgbV9mZWF0dXJlcy5hZGQoQ1NTRGVmYXVsdFN0eWxlU2hlZXRz
OjpkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkpOworICAgIGlmIChtX2F1dGhvclN0eWxlKQorICAg
ICAgICBtX2ZlYXR1cmVzLmFkZChtX2F1dGhvclN0eWxlLT5mZWF0dXJlcygpKTsKKyAgICBpZiAo
aXNWaWV3U291cmNlKQorICAgICAgICBtX2ZlYXR1cmVzLmFkZChDU1NEZWZhdWx0U3R5bGVTaGVl
dHM6OnZpZXdTb3VyY2VTdHlsZSgpLT5mZWF0dXJlcygpKTsKKworICAgIGlmIChzY29wZVJlc29s
dmVyKQorICAgICAgICBzY29wZVJlc29sdmVyLT5jb2xsZWN0RmVhdHVyZXNUbyhtX2ZlYXR1cmVz
KTsKKyAgICBpZiAobV91c2VyU3R5bGUpCisgICAgICAgIG1fZmVhdHVyZXMuYWRkKG1fdXNlclN0
eWxlLT5mZWF0dXJlcygpKTsKKworICAgIG1fc2libGluZ1J1bGVTZXQgPSBtYWtlUnVsZVNldCht
X2ZlYXR1cmVzLnNpYmxpbmdSdWxlcyk7CisgICAgbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQg
PSBtYWtlUnVsZVNldChtX2ZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOworfQorCit2
b2lkIERvY3VtZW50UnVsZVNldHM6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
IG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVt
b3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOworICAgIGluZm8u
YWRkTWVtYmVyKG1fYXV0aG9yU3R5bGUpOworICAgIGluZm8uYWRkTWVtYmVyKG1fdXNlclN0eWxl
KTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX2ZlYXR1cmVzKTsKKyAgICBpbmZvLmFkZE1lbWJlciht
X3NpYmxpbmdSdWxlU2V0KTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX3VuY29tbW9uQXR0cmlidXRl
UnVsZVNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9j
dW1lbnRSdWxlU2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwZTE0MzZlMjJkM2QwNjlkNmI5OTdlOWM1Y2Q2
ZDAyZGUyODdlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1l
bnRSdWxlU2V0cy5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRG9jdW1lbnRSdWxlU2V0c19oCisjZGVmaW5lIERv
Y3VtZW50UnVsZVNldHNfaAorCisjaW5jbHVkZSAiUnVsZUZlYXR1cmUuaCIKKworI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU1N0eWxlUnVsZTsKK2Ns
YXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOwor
Y2xhc3MgSW5zcGVjdG9yQ1NTT01XcmFwcGVyczsKK2NsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7
CitjbGFzcyBSdWxlU2V0OworY2xhc3MgU3R5bGVSZXNvbHZlcjsKK2NsYXNzIFN0eWxlU2NvcGVS
ZXNvbHZlcjsKKworY2xhc3MgRG9jdW1lbnRSdWxlU2V0cyB7CitwdWJsaWM6CisgICAgRG9jdW1l
bnRSdWxlU2V0cygpOworICAgIH5Eb2N1bWVudFJ1bGVTZXRzKCk7CisgICAgUnVsZVNldCogYXV0
aG9yU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2F1dGhvclN0eWxlLmdldCgpOyB9CisgICAgUnVs
ZVNldCogdXNlclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU3R5bGUuZ2V0KCk7IH0KKyAg
ICBSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMoKSB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CisgICAg
Y29uc3QgUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJl
czsgfQorICAgIFJ1bGVTZXQqIHNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3NpYmxpbmdSdWxl
U2V0LmdldCgpOyB9CisgICAgUnVsZVNldCogdW5jb21tb25BdHRyaWJ1dGUoKSBjb25zdCB7IHJl
dHVybiBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKTsgfQorCisgICAgdm9pZCBpbml0
VXNlclN0eWxlKERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24qLCBjb25zdCBNZWRpYVF1ZXJ5
RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciYpOworICAgIHZvaWQgcmVzZXRBdXRob3JTdHlsZSgp
OworICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYsIE1lZGlhUXVlcnlFdmFsdWF0b3Iq
LCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiwgYm9vbCBpc1ZpZXdTb3VyY2UsIFN0eWxlUmVzb2x2
ZXIqKTsKKworICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKGJvb2wgaXNWaWV3U291cmNlLCBTdHls
ZVNjb3BlUmVzb2x2ZXIqKTsKKyAgICB2b2lkIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVl
dHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiwgUnVsZVNldCYgdXNlclN0
eWxlLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciYpOworCisgICAg
dm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CisgICAgT3duUHRyPFJ1bGVT
ZXQ+IG1fdXNlclN0eWxlOworICAgIFJ1bGVGZWF0dXJlU2V0IG1fZmVhdHVyZXM7CisgICAgT3du
UHRyPFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVTZXQ7CisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdW5j
b21tb25BdHRyaWJ1dGVSdWxlU2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRG9jdW1lbnRSdWxlU2V0c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAKaW5kZXggMTgyOTBmMzg1NjQ4OTUzNzZlNTg5NmFjYTI0MGE4MDA3NzI2MjczYy4uOTcwNTAw
YzZmMWFmNDE5ZjlhM2NhYmY0YmVhNzA3NzE2OWQ4OTkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcApAQCAtMjU5LDE2ICsyNTksMTAgQEAgU3R5bGVSZXNvbHZlcjo6U3R5bGVS
ZXNvbHZlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
KQogICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmlldykKICAgICAgICAgbV9tZWRpdW0g
PSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3LT5tZWRpYVR5cGUoKSwgdmll
dy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxlLmdldCgpKSk7CiAKLSAgICByZXNldEF1dGhv
clN0eWxlKCk7CisgICAgbV9ydWxlU2V0cy5yZXNldEF1dGhvclN0eWxlKCk7CiAKICAgICBEb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKiBzdHlsZVNoZWV0Q29sbGVjdGlvbiA9IGRvY3VtZW50
LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpOwotICAgIE93blB0cjxSdWxlU2V0PiB0ZW1wVXNlclN0
eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgaWYgKENTU1N0eWxlU2hlZXQqIHBhZ2VVc2Vy
U2hlZXQgPSBzdHlsZVNoZWV0Q29sbGVjdGlvbi0+cGFnZVVzZXJTaGVldCgpKQotICAgICAgICB0
ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlVXNlclNoZWV0LT5jb250ZW50cygp
LCAqbV9tZWRpdW0sIHRoaXMpOwotICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMo
c3R5bGVTaGVldENvbGxlY3Rpb24tPmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCksICp0ZW1wVXNl
clN0eWxlKTsKLSAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRD
b2xsZWN0aW9uLT5kb2N1bWVudFVzZXJTdHlsZVNoZWV0cygpLCAqdGVtcFVzZXJTdHlsZSk7Ci0g
ICAgaWYgKHRlbXBVc2VyU3R5bGUtPm1fcnVsZUNvdW50ID4gMCB8fCB0ZW1wVXNlclN0eWxlLT5t
X3BhZ2VSdWxlcy5zaXplKCkgPiAwKQotICAgICAgICBtX3VzZXJTdHlsZSA9IHRlbXBVc2VyU3R5
bGUucmVsZWFzZSgpOworICAgIG1fcnVsZVNldHMuaW5pdFVzZXJTdHlsZShzdHlsZVNoZWV0Q29s
bGVjdGlvbiwgKm1fbWVkaXVtLCAqdGhpcyk7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAg
IGlmIChkb2N1bWVudC0+c3ZnRXh0ZW5zaW9ucygpKSB7CkBAIC0yODIsNTYgKzI3Niw5IEBAIFN0
eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcykKICAgICBhcHBlbmRBdXRob3JTdHlsZVNoZWV0cygwLCBzdHls
ZVNoZWV0Q29sbGVjdGlvbi0+YWN0aXZlQXV0aG9yU3R5bGVTaGVldHMoKSk7CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6Y29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0
b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHls
ZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlclNoZWV0cy5zaXplKCk7ICsr
aSkgewotICAgICAgICBBU1NFUlQodXNlclNoZWV0c1tpXS0+Y29udGVudHMoKS0+aXNVc2VyU3R5
bGVTaGVldCgpKTsKLSAgICAgICAgdXNlclN0eWxlLmFkZFJ1bGVzRnJvbVNoZWV0KHVzZXJTaGVl
dHNbaV0tPmNvbnRlbnRzKCksICptX21lZGl1bSwgdGhpcyk7Ci0gICAgfQotfQotCi1zdGF0aWMg
UGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8UnVsZUZlYXR1cmU+
JiBydWxlcykKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IHJ1bGVzLnNpemUoKTsKLSAgICBpZiAoIXNp
emUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIE93blB0cjxSdWxlU2V0PiBydWxlU2V0
ID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZXNbaV0ucnVsZSwgcnVsZXNbaV0uc2Vs
ZWN0b3JJbmRleCwgcnVsZXNbaV0uaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luIDogUnVsZUhhc05vU3BlY2lhbFN0YXRlKTsKLSAgICBydWxl
U2V0LT5zaHJpbmtUb0ZpdCgpOwotICAgIHJldHVybiBydWxlU2V0LnJlbGVhc2UoKTsKLX0KLQot
dm9pZCBTdHlsZVJlc29sdmVyOjpyZXNldEF1dGhvclN0eWxlKCkKLXsKLSAgICBtX2F1dGhvclN0
eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgbV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1dG9T
aHJpbmtUb0ZpdCgpOwotfQotCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxl
U2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+ID4mIHN0eWxlU2hlZXRzKQogewotICAgIC8vIFRoaXMgaGFuZGxlcyBzaGVldHMgYWRkZWQg
dG8gdGhlIGVuZCBvZiB0aGUgc3R5bGVzaGVldCBsaXN0IG9ubHkuIEluIG90aGVyIGNhc2VzIHRo
ZSBzdHlsZSByZXNvbHZlcgotICAgIC8vIG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhh
bmRsZSBpbnNlcnRpb25zIHRvbyB0aGUgcnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8g
YmUgdXBkYXRlZC4KLSAgICB1bnNpZ25lZCBzaXplID0gc3R5bGVTaGVldHMuc2l6ZSgpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IGZpcnN0TmV3OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIENT
U1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0gc3R5bGVTaGVldHNbaV0uZ2V0KCk7Ci0gICAgICAgIEFT
U0VSVCghY3NzU2hlZXQtPmRpc2FibGVkKCkpOwotICAgICAgICBpZiAoY3NzU2hlZXQtPm1lZGlh
UXVlcmllcygpICYmICFtX21lZGl1bS0+ZXZhbChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCksIHRo
aXMpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFN0eWxlU2hlZXRDb250ZW50cyog
c2hlZXQgPSBjc3NTaGVldC0+Y29udGVudHMoKTsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8
fCBFTkFCTEUoU0hBRE9XX0RPTSkKLSAgICAgICAgaWYgKGNvbnN0IENvbnRhaW5lck5vZGUqIHNj
b3BlID0gU3R5bGVTY29wZVJlc29sdmVyOjpzY29wZUZvcihjc3NTaGVldCkpIHsKLSAgICAgICAg
ICAgIGVuc3VyZVNjb3BlUmVzb2x2ZXIoKS0+ZW5zdXJlUnVsZVNldEZvcihzY29wZSktPmFkZFJ1
bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBtX2F1dGhvclN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKLSAgICAgICAgbV9pbnNw
ZWN0b3JDU1NPTVdyYXBwZXJzLmNvbGxlY3RGcm9tU3R5bGVTaGVldElmTmVlZGVkKGNzc1NoZWV0
KTsKLSAgICB9Ci0gICAgbV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsKLSAgICBjb2xsZWN0
RmVhdHVyZXMoKTsKLSAgICAKKyAgICBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRz
KGZpcnN0TmV3LCBzdHlsZVNoZWV0cywgbV9tZWRpdW0uZ2V0KCksIG1faW5zcGVjdG9yQ1NTT01X
cmFwcGVycywgZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCksIHRoaXMpOwogICAgIGlmIChkb2N1
bWVudCgpLT5yZW5kZXJlcigpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkpCiAg
ICAgICAgIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9u
dFNlbGVjdG9yKCkpOwogCkBAIC02MzksNyArNTg2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpt
YXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2ggZ2xvYmFsIGF1dGhvciBydWxlcy4K
LSAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fYXV0aG9yU3R5bGUuZ2V0KCksIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKKyAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fcnVsZVNldHMu
YXV0aG9yU3R5bGUoKSwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIFJ1bGVSYW5nZSBydWxlUmFu
Z2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwogICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
c0ZvclJlZ2lvbihtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CkBAIC02NTAsMTMgKzU5NywxMyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNl
clJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7Ci0g
ICAgaWYgKCFtX3VzZXJTdHlsZSkKKyAgICBpZiAoIW1fcnVsZVNldHMudXNlclN0eWxlKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOwog
CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuc2l6ZSgpIC0gMTsKLSAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fdXNlclN0eWxl
LmdldCgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVz
dChtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgUnVsZVJh
bmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMudXNlclJ1bGVSYW5nZSgpOwogICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbihtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CkBAIC03OTIsNyAr
NzM5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiBy
ZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWUKIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2xh
c3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVz
KSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjbGFzc05hbWVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2ZlYXR1cmVzLmNsYXNzZXNJblJ1bGVzLmNvbnRhaW5z
KGNsYXNzTmFtZXNbaV0uaW1wbCgpKSkKKyAgICAgICAgaWYgKG1fcnVsZVNldHMuZmVhdHVyZXMo
KS5jbGFzc2VzSW5SdWxlcy5jb250YWlucyhjbGFzc05hbWVzW2ldLmltcGwoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODY3LDcgKzgx
NCw3IEBAIE5vZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFy
ZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VuCiAgICAgaWYgKHAtPmlzU1ZHRWxlbWVudCgp
ICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0
aWVzKCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCi0gICAgaWYgKHAtPmhhc0lEKCkgJiYg
bV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCku
aW1wbCgpKSkKKyAgICBpZiAocC0+aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRz
SW5SdWxlcy5jb250YWlucyhwLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gcC0+cmVuZGVy
U3R5bGUoKTsKQEAgLTEwNDksNyArOTk2LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFy
ZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAo
ZWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUu
c3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1fZmVh
dHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigp
LmltcGwoKSkpCisgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJl
cygpLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5p
bXBsKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmhhc1Njb3Bl
ZEhUTUxTdHlsZUNoaWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExMzIsNyArMTA3
OSw3IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAg
ICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBp
ZiB0aGV5IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRzLgotICAgIGlmIChzdGF0ZS5zdHlsZWRF
bGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhzdGF0ZS5z
dHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgaWYgKHN0
YXRlLnN0eWxlZEVsZW1lbnQtPmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0lu
UnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVkRWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24o
KS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAocGFyZW50RWxlbWVudFByZXZl
bnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1
cm4gMDsKQEAgLTExNjQsMTAgKzExMTEsMTAgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6
OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBDYW4ndCBz
aGFyZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVuZCBh
cyBpdCBzaG91bGQgcmFyZWx5IGZhaWwuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1h
dGNoZXNSdWxlU2V0KG1fc2libGluZ1J1bGVTZXQuZ2V0KCkpKQorICAgIGlmIChzdHlsZVNoYXJp
bmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3J1bGVTZXRzLnNpYmxpbmcoKSkpCiAgICAgICAg
IHJldHVybiAwOwogICAgIC8vIENhbid0IHNoYXJlIGlmIGF0dHJpYnV0ZSBydWxlcyBhcHBseS4K
LSAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQobV91bmNvbW1vbkF0
dHJpYnV0ZVJ1bGVTZXQuZ2V0KCkpKQorICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzUnVsZVNldChtX3J1bGVTZXRzLnVuY29tbW9uQXR0cmlidXRlKCkpKQogICAgICAgICByZXR1
cm4gMDsKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBAaG9zdCBALXJ1bGVzIGFwcGx5LgogICAgIGlm
IChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkpCkBAIC0xNDM2LDcgKzEz
ODMsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogICAgIGJvb2wgbmVlZHNDb2xsZWN0aW9u
ID0gZmFsc2U7CiAgICAgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5bGVT
aGVldHNGb3JFbGVtZW50KGVsZW1lbnQsIG5lZWRzQ29sbGVjdGlvbik7CiAgICAgaWYgKG5lZWRz
Q29sbGVjdGlvbikKLSAgICAgICAgY29sbGVjdEZlYXR1cmVzKCk7CisgICAgICAgIG1fcnVsZVNl
dHMuY29sbGVjdEZlYXR1cmVzKGRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpLCBtX3Njb3BlUmVz
b2x2ZXIuZ2V0KCkpOwogCiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CiAgICAgaWYgKG1h
dGNoaW5nQmVoYXZpb3IgPT0gTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpCkBAIC0xNjM3LDkgKzE1
ODQsOSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBh
Z2UoaW50IHBhZ2VJbmRleCkKICAgICAKICAgICBNYXRjaFJlc3VsdCByZXN1bHQ7CiAgICAgbWF0
Y2hQYWdlUnVsZXMocmVzdWx0LCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRQcmludFN0
eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwg
bV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAgbWF0Y2hQYWdl
UnVsZXMocmVzdWx0LCBtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLCBpc0xlZnQsIGlzRmlyc3QsIHBh
Z2UpOwogICAgIC8vIE9ubHkgY29uc2lkZXIgdGhlIGdsb2JhbCBhdXRob3IgUnVsZVNldCBmb3Ig
QHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KLSAgICBtYXRjaFBhZ2VSdWxlcyhy
ZXN1bHQsIG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAg
bWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCksIGlzTGVmdCwg
aXNGaXJzdCwgcGFnZSk7CiAgICAgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIGJv
b2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQpAQCAt
MjAwOSwxOCArMTk1NiwxOCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU3R5bGUo
RWxlbWVudCogcmVnaW9uRWxlbWVudCkKICAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9u
J3QgYWRkIEAtd2Via2l0LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0
aGUgbW9tZW50LAogICAgIC8vIHNvIGFsbCByZWdpb24gcnVsZXMgYXJlIGdsb2JhbCBieSBkZWZh
dWx0LiBWZXJpZnkgd2hldGhlciB0aGF0IGNhbiBzdGFuZCBvciBuZWVkcyBjaGFuZ2luZy4KIAot
ICAgIHVuc2lnbmVkIHJ1bGVzU2l6ZSA9IG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3Jz
QW5kUnVsZVNldHMuc2l6ZSgpOworICAgIHVuc2lnbmVkIHJ1bGVzU2l6ZSA9IG1fcnVsZVNldHMu
YXV0aG9yU3R5bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7Ci0gICAgICAgIEFTU0VS
VChtX2F1dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVT
ZXQuZ2V0KCkpOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX2F1dGhvclN0eWxl
LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVt
ZW50KSkKKyAgICAgICAgQVNTRVJUKG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKS0+bV9yZWdpb25T
ZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpKTsKKyAgICAgICAgaWYgKGNo
ZWNrUmVnaW9uU2VsZWN0b3IobV9ydWxlU2V0cy5hdXRob3JTdHlsZSgpLT5tX3JlZ2lvblNlbGVj
dG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50KSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChtX3VzZXJTdHlsZSkgewotICAgICAg
ICBydWxlc1NpemUgPSBtX3VzZXJTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5z
aXplKCk7CisgICAgaWYgKG1fcnVsZVNldHMudXNlclN0eWxlKCkpIHsKKyAgICAgICAgcnVsZXNT
aXplID0gbV9ydWxlU2V0cy51c2VyU3R5bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0
cy5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlc1NpemU7ICsr
aSkgewotICAgICAgICAgICAgQVNTRVJUKG1fdXNlclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0Fu
ZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGNoZWNrUmVn
aW9uU2VsZWN0b3IobV91c2VyU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQo
aSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQorICAgICAgICAgICAgQVNTRVJUKG1fcnVsZVNl
dHMudXNlclN0eWxlKCktPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNl
dC5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX3J1bGVTZXRz
LnVzZXJTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9y
LCByZWdpb25FbGVtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KQEAgLTI4ODQsNyArMjgzMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9t
IDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBh
dHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUKLSAgICAgICAgICAgICAgICAgICAgbV9m
ZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmF0dHJzSW5SdWxlcy5hZGQoYXR0
ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVu
dFZhbHVlLT5pc0NvdW50ZXIoKSkgewogICAgICAgICAgICAgICAgICAgICBDb3VudGVyKiBjb3Vu
dGVyVmFsdWUgPSBjb250ZW50VmFsdWUtPmdldENvdW50ZXJWYWx1ZSgpOwogICAgICAgICAgICAg
ICAgICAgICBFTGlzdFN0eWxlVHlwZSBsaXN0U3R5bGVUeXBlID0gTm9uZUxpc3RTdHlsZTsKQEAg
LTUxNjYsMjggKzUxMTMsNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3Vy
Y2VzKCkKICNlbmRpZgogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygp
Ci17Ci0gICAgbV9mZWF0dXJlcy5jbGVhcigpOwotICAgIC8vIENvbGxlY3QgYWxsIGlkcyBhbmQg
cnVsZXMgdXNpbmcgc2libGluZyBzZWxlY3RvcnMgKDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxhcikK
LSAgICAvLyBpbiB0aGUgY3VycmVudCBzZXQgb2Ygc3R5bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcg
Y29kZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVqZWN0Ci0gICAgLy8gc2hhcmluZyBjYW5k
aWRhdGVzLgotICAgIGlmIChDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRTdHlsZSkKLSAg
ICAgICAgbV9mZWF0dXJlcy5hZGQoQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0U3R5bGUt
PmZlYXR1cmVzKCkpOwotICAgIGlmIChtX2F1dGhvclN0eWxlKQotICAgICAgICBtX2ZlYXR1cmVz
LmFkZChtX2F1dGhvclN0eWxlLT5mZWF0dXJlcygpKTsKLSAgICBpZiAoZG9jdW1lbnQoKS0+aXNW
aWV3U291cmNlKCkpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRkKENTU0RlZmF1bHRTdHlsZVNoZWV0
czo6dmlld1NvdXJjZVN0eWxlKCktPmZlYXR1cmVzKCkpOwotCi0gICAgaWYgKG1fc2NvcGVSZXNv
bHZlcikKLSAgICAgICAgbV9zY29wZVJlc29sdmVyLT5jb2xsZWN0RmVhdHVyZXNUbyhtX2ZlYXR1
cmVzKTsKLSAgICBpZiAobV91c2VyU3R5bGUpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRkKG1fdXNl
clN0eWxlLT5mZWF0dXJlcygpKTsKLQotICAgIG1fc2libGluZ1J1bGVTZXQgPSBtYWtlUnVsZVNl
dChtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcyk7Ci0gICAgbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVT
ZXQgPSBtYWtlUnVsZVNldChtX2ZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOwotfQot
CiB2b2lkIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzOjpyZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9y
eUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBl
czo6Q1NTKTsKQEAgLTUyMTIsMTEgKzUxMzcsNyBAQCB2b2lkIE1lZGlhUXVlcnlSZXN1bHQ6OnJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbgog
dm9pZCBTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBt
ZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9y
eU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKLSAgICBpbmZvLmFk
ZE1lbWJlcihtX2F1dGhvclN0eWxlLCAiYXV0aG9yU3R5bGUiKTsKLSAgICBpbmZvLmFkZE1lbWJl
cihtX3VzZXJTdHlsZSwgInVzZXJTdHlsZSIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fZmVhdHVy
ZXMsICJmZWF0dXJlcyIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc2libGluZ1J1bGVTZXQsICJz
aWJsaW5nUnVsZVNldCIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fdW5jb21tb25BdHRyaWJ1dGVS
dWxlU2V0LCAidW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0Iik7CisgICAgaW5mby5hZGRNZW1iZXIo
bV9ydWxlU2V0cywgInJ1bGVTZXRzIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9rZXlmcmFtZXNS
dWxlTWFwLCAia2V5ZnJhbWVzUnVsZU1hcCIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZSwgIm1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUiKTsKICAgICBpbmZvLmFk
ZE1lbWJlcihtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyLCAibWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZVN3ZWVwVGltZXIiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4
IDg0YzNjZDFmYzAzN2RhYjBkZmQ3NWE4ZmZkN2Q4YjlhNWM0OTczZjguLmU4Y2EzYzA3ZDNkMTIw
MDQzOGZiMzljOWUwMjk1MGUyYjM4MTRkZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
aApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAi
Q1NTVG9TdHlsZU1hcC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50UnVsZVNldHMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmgiCiAj
aW5jbHVkZSAiTGlua0hhc2guaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCkBAIC0xNjks
NiArMTcwLDcgQEAgcHVibGljOgogICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlOyB9CiAgICAgRWxlbWVudCog
ZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZWxlbWVudDsgfQogICAgIERvY3VtZW50
KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKyAgICBTdHlsZVNjb3Bl
UmVzb2x2ZXIqIHNjb3BlUmVzb2x2ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlUmVzb2x2ZXIu
Z2V0KCk7IH0KICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsg
cmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9CiAgICAgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBwYXJlbnRTdHlsZSgpLT5m
b250RGVzY3JpcHRpb24oKTsgfQogICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0
eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CkBAIC0xNzksMTAg
KzE4MSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVu
dGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5z
ZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQogICAgIGJvb2wgaGFzUGFyZW50
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Tm9kZTsgfQogCi0gICAgdm9pZCBy
ZXNldEF1dGhvclN0eWxlKCk7CisgICAgLy8gRklYTUU6IEl0IGNvdWxkIGJlIGJldHRlciB0byBj
YWxsIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoKSBkaXJlY3RseSBhZnRlciB3
ZSBmYWN0b3IgU3R5bGVSc29sdmVyIGZ1cnRoZXIuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODg5MAogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVT
aGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gPiYpOwogCi1wcml2YXRlOgorICAgIERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzKCkgeyBy
ZXR1cm4gbV9ydWxlU2V0czsgfQorICAgIGNvbnN0IERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRz
KCkgY29uc3QgeyByZXR1cm4gbV9ydWxlU2V0czsgfQorCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BF
RCkgfHwgRU5BQkxFKFNIQURPV19ET00pCiAgICAgU3R5bGVTY29wZVJlc29sdmVyKiBlbnN1cmVT
Y29wZVJlc29sdmVyKCkKICAgICB7CkBAIC0yMDEsOSArMjA2LDkgQEAgcHJpdmF0ZToKICAgICB9
CiAjZW5kaWYKIAorcHJpdmF0ZToKICAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVu
dCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwog
ICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwotICAgIHZvaWQgY29sbGVjdEZlYXR1cmVz
KCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgYm9vbCBzdHls
ZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CiAgICAgYm9vbCBzdHls
ZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCk7CkBAIC0yNzEsOSArMjc2LDkgQEAg
cHVibGljOgogCiAgICAgYm9vbCBjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqIHJlZ2lvbkVsZW1l
bnQpOwogCi0gICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmVh
dHVyZXMuc2libGluZ1J1bGVzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1
bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXM7IH0KLSAg
ICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51
c2VzQmVmb3JlQWZ0ZXJSdWxlczsgfQorICAgIGJvb2wgdXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0
IHsgcmV0dXJuICFtX3J1bGVTZXRzLmZlYXR1cmVzKCkuc2libGluZ1J1bGVzLmlzRW1wdHkoKTsg
fQorICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlU2V0
cy5mZWF0dXJlcygpLnVzZXNGaXJzdExpbmVSdWxlczsgfQorICAgIGJvb2wgdXNlc0JlZm9yZUFm
dGVyUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkudXNlc0JlZm9y
ZUFmdGVyUnVsZXM7IH0KIAogICAgIHN0YXRpYyBib29sIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlv
bnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSog
cm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKICAgICAKQEAg
LTQxMiwxMiArNDE3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdl
SW5kZXgpIGNvbnN0OwogICAgIFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsK
IAotICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0eWxlOwotICAgIE93blB0cjxSdWxlU2V0
PiBtX3VzZXJTdHlsZTsKLQotICAgIFJ1bGVGZWF0dXJlU2V0IG1fZmVhdHVyZXM7Ci0gICAgT3du
UHRyPFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVTZXQ7Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IG1fdW5j
b21tb25BdHRyaWJ1dGVSdWxlU2V0OworICAgIERvY3VtZW50UnVsZVNldHMgbV9ydWxlU2V0czsK
IAogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPFN0eWxlUnVs
ZUtleWZyYW1lcz4gPiBLZXlmcmFtZXNSdWxlTWFwOwogICAgIEtleWZyYW1lc1J1bGVNYXAgbV9r
ZXlmcmFtZXNSdWxlTWFwOwpAQCAtNTI0LDggKzUyNCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgc3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwogCi0gICAgdm9p
ZCBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gPiYsIFJ1bGVTZXQmIHVzZXJTdHlsZSk7Ci0KICAgICB2b2lkIGNhY2hlQm9y
ZGVyQW5kQmFja2dyb3VuZCgpOwogCiBwcml2YXRlOgpAQCAtNjAzLDE5ICs2MDEsMTkgQEAgcHJp
dmF0ZToKIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9yQXR0cmlidXRl
KGNvbnN0IEF0b21pY1N0cmluZyAmYXR0cmlidXRlTmFtZSkgY29uc3QKIHsKICAgICBBU1NFUlQo
IWF0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9mZWF0dXJlcy5hdHRyc0lu
UnVsZXMuY29udGFpbnMoYXR0cmlidXRlTmFtZS5pbXBsKCkpOworICAgIHJldHVybiBtX3J1bGVT
ZXRzLmZlYXR1cmVzKCkuYXR0cnNJblJ1bGVzLmNvbnRhaW5zKGF0dHJpYnV0ZU5hbWUuaW1wbCgp
KTsKIH0KIAogaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JGb3JDbGFzcyhj
b25zdCBBdG9taWNTdHJpbmcmIGNsYXNzVmFsdWUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjbGFz
c1ZhbHVlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIG1fZmVhdHVyZXMuY2xhc3Nlc0luUnVsZXMu
Y29udGFpbnMoY2xhc3NWYWx1ZS5pbXBsKCkpOworICAgIHJldHVybiBtX3J1bGVTZXRzLmZlYXR1
cmVzKCkuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2xhc3NWYWx1ZS5pbXBsKCkpOwogfQogCiBp
bmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpoYXNTZWxlY3RvckZvcklkKGNvbnN0IEF0b21pY1N0
cmluZyYgaWRWYWx1ZSkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlkVmFsdWUuaXNFbXB0eSgpKTsK
LSAgICByZXR1cm4gbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKGlkVmFsdWUuaW1wbCgp
KTsKKyAgICByZXR1cm4gbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMo
aWRWYWx1ZS5pbXBsKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKaW5kZXgg
NjMyZmE5NGFhMzM1Y2FiMGVlNDE0ZGZiYWRiZDdjNzJmYzMwYzc3Zi4uM2FjMWY1ZWM0Yzc4MmYz
NjYxMDFkNGYxMjM5ODBkMDk5YzM3Y2M5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcApAQCAtNDc4LDcgKzQ3OCw3IEBAIGJv
b2wgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMo
VXBkYXRlRmxhZyB1cGRhdGVGbGFnCiAgICAgZWxzZSB7CiAgICAgICAgIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LT5zdHlsZVJlc29sdmVyKCk7CiAgICAgICAgIGlm
IChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9PSBSZXNldCkgewotICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+cmVzZXRBdXRob3JTdHlsZSgpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
cnVsZVNldHMoKS5yZXNldEF1dGhvclN0eWxlKCk7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cygwLCBhY3RpdmVDU1NTdHlsZVNoZWV0cyk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUg
PT0gQWRkaXRpdmUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186747</attachid>
            <date>2013-02-05 19:56:30 -0800</date>
            <delta_ts>2013-02-06 03:09:15 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-107777-20130206125307.patch</filename>
            <type>text/plain</type>
            <size>40255</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE4NGQwMjhlOWUzNGZi
NzMzZGQyZGI2ZWRkZTRiOGYwNGJhMDVkMy4uYTViZGJmN2IwYmM3MmRlNThkMTc3ODA4MTFjMTE0
YTlhY2RlODE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEzLTAyLTA0ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBTcGxpdCBlYWNoIFJ1bGVT
ZXQgYW5kIGZlYXR1cmUgb3V0IGZyb20gU3R5bGVSZXNvbHZlciBpbnRvIGl0cyBvd24gY2xhc3Mu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc3NzcK
KworICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCisKKyAgICAgICAgU3BsaXR0
aW5nIGVhY2ggUnVsZVNldCBhbmQgZmVhdHVyZSBvdXQgZnJvbSBTdHlsZVJlc292ZXIgaW50byBp
dHMgb253IGNsYXNzLCBEb2N1bWVudFJ1bGVTZXRzLAorICAgICAgICB0byBtYW5hZ2UgdGhlbSBz
ZXBhcmF0ZWx5LgorCisgICAgICAgIFRoaXMgaXMgb25lIG9mIHRoZSBhdHRlbXB0cyB0byB0cnkg
dG8gcmVzb2x2ZSBtZXRhIGJ1ZyAoYnVnIDg5ODc5KQorICAgICAgICB0byBsb3NlIFN0eWxlUmVz
b2x2ZXIncyB3ZWlnaHQuICBXZSBuZWVkIGZ1cnRoZXIgYWN0aW9uIHRvIGZhY3RvcgorICAgICAg
ICBTdHlsZVJlc29sdmVyIHRvIHNlcGFyYXRlIGl0IGludG8gc29tZSBjbGFzc2VzIGNsZWFubHku
CisgICAgICAgIFNlZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDg4OTAuIEEgZm9sbG93aW5nIHBhdGNoIHdpbGwgYWRkcmVzcyB0aGF0LgorCisgICAgICAg
IE5vIHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5w
cmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTQWxsSW5PbmUuY3BwOgorICAgICAg
ICAqIGNzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UnVsZVNldHM6OkRvY3VtZW50UnVsZVNldHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6fkRvY3VtZW50UnVsZVNldHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6aW5pdFVzZXJTdHlsZSk6IE5ldyBo
ZWxwZXIgdG8gaW5pdGlhbGl6ZSBlYWNoIFJ1bGVTZXRzLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRSdWxlU2V0czo6Y29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyk6IEZhY3RvcmVk
IG91dCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjptYWtlUnVsZVNldCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6cmVzZXRBdXRob3JT
dHlsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6YXBwZW5k
QXV0aG9yU3R5bGVTaGVldHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UnVs
ZVNldHM6OmNvbGxlY3RGZWF0dXJlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRSdWxlU2V0czo6cmVwb3J0TWVtb3J5VXNhZ2UpOiBOZXcgbWV0aG9kcyB0byByZXBvcnQgbWVt
b3J5IHVzYWdlLiBGYWN0b3JlZCBvdXQgZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAgICAqIGNz
cy9Eb2N1bWVudFJ1bGVTZXRzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChEb2N1bWVudFJ1bGVTZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UnVsZVNldHM6
OmF1dGhvclN0eWxlKTogTW92ZWQgZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRSdWxlU2V0czo6dXNlclN0eWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFJ1bGVTZXRzOjpmZWF0dXJlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRSdWxlU2V0czo6c2libGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRSdWxlU2V0czo6dW5jb21tb25BdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKiBjc3Mv
U3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdHls
ZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhv
clN0eWxlU2hlZXRzKTogTm93IGNhbGxzIERvY3VtZW50UnVsZVNldHM6OmFwcGVuZEF1dGhvclN0
eWxlU2hlZXRzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JS
dWxlcyk6IFVzZSBtX3J1bGVTZXRzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
bWF0Y2hVc2VyUnVsZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TdHlsZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOiBOb3cg
Y2FsbHMgRG9jdW1lbnRSdWxlU2V0czo6cmVwb3J0TWVtb3J5VXNhZ2UuCisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNjb3Bl
UmVzb2x2ZXIpOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpydWxlU2V0cyk6IGFjY2Vzc29yIHIgdG8gRG9jdW1lbnRSdWxlU2V0cy4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnVzZXNTaWJsaW5nUnVsZXMpOiBVc2Ug
bV9ydWxlU2V0cy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnVzZXNGaXJzdExp
bmVSdWxlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlc0Jl
Zm9yZUFmdGVyUnVsZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
Omhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpoYXNTZWxlY3RvckZvckNsYXNzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpoYXNTZWxlY3RvckZvcklkKTogRGl0dG8uCisgICAgICAgICogZG9t
L0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMpOgorCiAy
MDEzLTAyLTA1ICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFtDU1MgR3JpZCBMYXlvdXRdIEdyaWQgaXRlbSdzIGxvZ2ljYWwgaGVpZ2h0IGlzIG5v
dCBwcm9wZXJseSByZWNvbXB1dGVkIGFmdGVyIC13ZWJraXQtZ3JpZC1jb2x1bW4gLyAtd2Via2l0
LWdyaWQtcm93IGNoYW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZWMyODZiYmRkMmExYTJk
ZWU1YjlhY2U0MTQ5NjQ4MzRhZmUwZTFmNC4uODkzMWRmMzA5YThjMWQ2MGM0YTE2MGQ1NjBiNDVl
ZWFiODY1OGY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEwNzAsNiArMTA3MCw3IEBAIHNl
dChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3MvQ1NTVmFsdWUuY3BwCiAgICAgY3NzL0NTU1ZhbHVl
TGlzdC5jcHAKICAgICBjc3MvQ1NTVmFsdWVQb29sLmNwcAorICAgIGNzcy9Eb2N1bWVudFJ1bGVT
ZXRzLmNwcAogICAgIGNzcy9Gb250RmVhdHVyZVZhbHVlLmNwcAogICAgIGNzcy9Gb250VmFsdWUu
Y3BwCiAgICAgY3NzL0luc3BlY3RvckNTU09NV3JhcHBlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCBhYWU1YzNiOGVlYTFlODQ0ZDlhYTM0NDhhYzNiOWQ3MzkwOTUwZGEy
Li41NzE1NzVhODU4N2JhYTQ3ZmFkYjk2NTc3MDlkZmUwNGMyZmNhODk5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI2MjAsNiArMjYyMCw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVmFyaWFibGVWYWx1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvRGFzaGJvYXJk
UmVnaW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuaCBcCiAJU291cmNlL1dlYkNvcmUv
Y3NzL0ZvbnRGZWF0dXJlVmFsdWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZlYXR1
cmVWYWx1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvRm9udFZhbHVlLmNwcCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQppbmRleCA1MjkzY2FkNTRjYjFmY2FlNjhlZGFjOWJhY2QxZWQ1OTYwYjE3MGUxLi45NGU2ZTFi
OTZlMWE3NGJhZjU5M2EyMTRkMmExODM2MzljYWY3OTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTMwNyw2
ICszMDcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBjc3MvQ1NTVmFsdWUuY3BwIFwKICAgICBjc3Mv
Q1NTVmFsdWVMaXN0LmNwcCBcCiAgICAgY3NzL0NTU1ZhbHVlUG9vbC5jcHAgXAorICAgIGNzcy9E
b2N1bWVudFJ1bGVTZXRzLmNwcCBcCiAgICAgY3NzL0ZvbnRGZWF0dXJlVmFsdWUuY3BwIFwKICAg
ICBjc3MvRm9udFZhbHVlLmNwcCBcCiAgICAgY3NzL0luc3BlY3RvckNTU09NV3JhcHBlcnMuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1NjMzOTBlZTRmMDQzNDFjYzMwYjE5MzQ5YTA2NGY0NDcw
MDgzM2YwLi4xNmQxMzQ4NDk1YjVlNTllNWI2Nzc4NzU3YmEyY2IyOWY0YTQyZDgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC0xNTQ1LDYgKzE1NDUsOCBAQAogICAgICAgICAgICAgJ2Nzcy9DU1NWYXJp
YWJsZVZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9Db3VudGVyLmgnLAogICAgICAgICAgICAg
J2Nzcy9EYXNoYm9hcmRSZWdpb24uaCcsCisgICAgICAgICAgICAnY3NzL0RvY3VtZW50UnVsZVNl
dHMuY3BwJywKKyAgICAgICAgICAgICdjc3MvRG9jdW1lbnRSdWxlU2V0cy5oJywKICAgICAgICAg
ICAgICdjc3MvRm9udEZlYXR1cmVWYWx1ZS5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9Gb250RmVh
dHVyZVZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9Gb250VmFsdWUuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjMmFm
ZWZkZTE1OTU5NWFkNWVjN2EzOTMwM2ExZmVhMGVjNjliOWY3Li4yMjcxYTc2NjI0YzVlMTI2YjVl
MWM1OTA2YjVlZjg2ZTZlMDNkZjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDM3LDYgKzE0MzcsOCBAQAogCQk0QTFFNzFB
NjE0RTEwNkFDMDA2MjZGOUQgLyogSlNTaGFkb3dSb290LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTFFNzFBNDE0RTEwNkFDMDA2MjZGOUQgLyogSlNT
aGFkb3dSb290LmggKi87IH07CiAJCTRBMzhCRjUwMTRGRTFDMDkwMDYxMjUxMiAvKiBXZWJTb2Nr
ZXREZWZsYXRlRnJhbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRBMzhCRjRFMTRGRTFDMDkwMDYxMjUxMiAvKiBXZWJTb2NrZXREZWZsYXRlRnJh
bWVyLmNwcCAqLzsgfTsKIAkJNEEzOEJGNTExNEZFMUMwOTAwNjEyNTEyIC8qIFdlYlNvY2tldERl
ZmxhdGVGcmFtZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRBMzhCRjRGMTRGRTFDMDkwMDYxMjUxMiAvKiBXZWJTb2NrZXREZWZsYXRlRnJhbWVyLmgg
Ki87IH07CisJCTRBNEY0OEE5MTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNEY0OEE3
MTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmNwcCAqLzsgfTsKKwkJNEE0RjQ4
QUExNkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNEY0OEE4MTZCMERGQzAwMEVEQkIyOSAv
KiBEb2N1bWVudFJ1bGVTZXRzLmggKi87IH07CiAJCTRBNUEyQURCMTYxRTdFMDAwMDU4ODlERCAv
KiBXZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEE1QTJBRDkxNjFFN0UwMDAwNTg4OUREIC8qIFdlYlNvY2tl
dEV4dGVuc2lvblBhcnNlci5jcHAgKi87IH07CiAJCTRBNUEyQURDMTYxRTdFMDAwMDU4ODlERCAv
KiBXZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRBNUEyQURBMTYxRTdFMDAwMDU4ODlERCAvKiBXZWJTb2NrZXRF
eHRlbnNpb25QYXJzZXIuaCAqLzsgfTsKIAkJNEE2QTBDNUIxNTIzMkYyNDAwQjA5QzZFIC8qIENv
bXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0QTZBMEM1OTE1MjMyRjI0MDBCMDlDNkUgLyogQ29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyLmNwcCAqLzsgfTsKQEAgLTg4MTcsNiArODgxOSw4IEBACiAJCTRBMUU3MUE0
MTRFMTA2QUMwMDYyNkY5RCAvKiBKU1NoYWRvd1Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNTaGFkb3dSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTRBMzhCRjRFMTRGRTFDMDkwMDYxMjUxMiAvKiBXZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlNvY2tldERlZmxhdGVGcmFt
ZXIuY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTM4QkY0RjE0RkUxQzA5MDA2MTI1
MTIgLyogV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJTb2NrZXREZWZsYXRlRnJhbWVyLmg7IHBhdGggPSBNb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0QTRGNDhBNzE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudFJ1bGVTZXRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEE0RjQ4QTgxNkIwREZDMDAwRURCQjI5IC8qIERv
Y3VtZW50UnVsZVNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1l
bnRSdWxlU2V0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTVBMkFEOTE2MUU3
RTAwMDA1ODg5REQgLyogV2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5jcHA7IHBh
dGggPSBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEE1QTJBREExNjFFN0UwMDAwNTg4OUREIC8qIFdl
YlNvY2tldEV4dGVuc2lvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuaDsgcGF0aCA9IE1vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NEE2QTBDNTkxNTIzMkYyNDAwQjA5QzZFIC8qIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21wb3NlZFNoYWRvd1RyZWVX
YWxrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE4NDIsNiArMjE4NDYs
OCBAQAogCQkJCUU0OUJEOUY5MTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wuaCAqLywK
IAkJCQlDQUU5RjkwRTE0NjQ0MUYwMDBDMjQ1QjEgLyogQ1NTVmFyaWFibGVWYWx1ZS5oICovLAog
CQkJCUE4MEU2Q0UxMEExOTg5Q0EwMDdGQjhDNSAvKiBEYXNoYm9hcmRSZWdpb24uaCAqLywKKwkJ
CQk0QTRGNDhBNzE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5jcHAgKi8sCisJ
CQkJNEE0RjQ4QTgxNkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuaCAqLywKIAkJ
CQk0QTZFOUZDMTEzQzE3RDFEMDA0NkE3RjggLyogRm9udEZlYXR1cmVWYWx1ZS5jcHAgKi8sCiAJ
CQkJNEE2RTlGQzIxM0MxN0QxRDAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlVmFsdWUuaCAqLywKIAkJ
CQlBODBFNkNDNzBBMTk4OUNBMDA3RkI4QzUgLyogRm9udFZhbHVlLmNwcCAqLywKQEAgLTIzNDE4
LDYgKzIzNDI0LDcgQEAKIAkJCQlDRTA1N0ZBNjEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDk0N0ZGRTEyRjgwQ0QyMDBB
MEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGQkFF
ODBCNTE1MkVEMDAwMUYxRDcgLyogRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTRBNEY0OEFBMTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBRDZFNzFBRDE2Njg4OTlEMDAzMjBDMTMgLyogRG9jdW1lbnRTaGFyZWRPYmpl
Y3RQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDdFMjc2NTE2MDM2RUQyMDBFRTJBRkIgLyog
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEI5MDU2
MUEwRjI1NzhCRjAwOTVGRjZBIC8qIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNzA2MSw2ICsyNzA2OCw3IEBACiAJCQkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3
NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDk0N0ZGRDEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4QzIyODBFMTFENEE1OTcwMEQ1QTdEMyAvKiBEb2N1bWVudFBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk0QTRGNDhBOTE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1l
bnRSdWxlU2V0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDZFNzFBQzE2Njg4OTlEMDAzMjBD
MTMgLyogRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0
N0UyNzY4MTYwMzZFREMwMEVFMkFGQiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBCOTA1NjE5MEYyNTc4QkUwMDk1RkY2QSAvKiBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbElu
T25lLmNwcAppbmRleCBjODFjM2IyMWY5OGQ5NmQxNDNjOTJjYmFlYzEzOTA4NWNhZGYwZjFhLi5l
NzNlMzU4YjI3MDk0MDg3YTE4OTZiYTZjMTA2NGI1MzZmNTU2MTIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NBbGxJbk9uZS5jcHAKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZS5jcHAi
CiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmNwcCIKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuY3Bw
IgorI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuY3BwIgogI2luY2x1ZGUgIkluc3BlY3RvckNT
U09NV3JhcHBlcnMuY3BwIgogI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmNwcCIKICNpbmNsdWRlICJS
dWxlU2V0LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVT
ZXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40MDU5N2NiNTdkNzAzMTQ4ODg5NWE5OWIyYTU0NDk2NDUwZmIxNmJmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCkBAIC0wLDAg
KzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4g
KGtkZUBjYXJld29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMg
U2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3Yg
PGFwQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
KQorICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRSdWxlU2V0cy5oIgorCisjaW5jbHVkZSAiQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmgiCisj
aW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb24uaCIKKyNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisjaW5jbHVkZSAi
U3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0RvY3VtZW50UnVsZVNldHM6OkRvY3VtZW50UnVsZVNldHMoKQor
eworfQorCitEb2N1bWVudFJ1bGVTZXRzOjp+RG9jdW1lbnRSdWxlU2V0cygpCit7Cit9CisKK3Zv
aWQgRG9jdW1lbnRSdWxlU2V0czo6aW5pdFVzZXJTdHlsZShEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uKiBzdHlsZVNoZWV0Q29sbGVjdGlvbiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYg
bWVkaXVtLCBTdHlsZVJlc29sdmVyJiByZXNvbHZlcikKK3sKKyAgICBPd25QdHI8UnVsZVNldD4g
dGVtcFVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIGlmIChDU1NTdHlsZVNoZWV0
KiBwYWdlVXNlclNoZWV0ID0gc3R5bGVTaGVldENvbGxlY3Rpb24tPnBhZ2VVc2VyU2hlZXQoKSkK
KyAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZVVzZXJTaGVldC0+
Y29udGVudHMoKSwgbWVkaXVtLCAmcmVzb2x2ZXIpOworICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2Vy
U3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxlY3Rpb24tPmluamVjdGVkVXNlclN0eWxlU2hlZXRz
KCksICp0ZW1wVXNlclN0eWxlLCBtZWRpdW0sIHJlc29sdmVyKTsKKyAgICBjb2xsZWN0UnVsZXNG
cm9tVXNlclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRDb2xsZWN0aW9uLT5kb2N1bWVudFVzZXJTdHls
ZVNoZWV0cygpLCAqdGVtcFVzZXJTdHlsZSwgbWVkaXVtLCByZXNvbHZlcik7CisgICAgaWYgKHRl
bXBVc2VyU3R5bGUtPm1fcnVsZUNvdW50ID4gMCB8fCB0ZW1wVXNlclN0eWxlLT5tX3BhZ2VSdWxl
cy5zaXplKCkgPiAwKQorICAgICAgICBtX3VzZXJTdHlsZSA9IHRlbXBVc2VyU3R5bGUucmVsZWFz
ZSgpOworfQorCit2b2lkIERvY3VtZW50UnVsZVNldHM6OmNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5
bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiB1c2VyU2hlZXRz
LCBSdWxlU2V0JiB1c2VyU3R5bGUsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwg
U3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHVzZXJTaGVldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKHVzZXJTaGVldHNbaV0t
PmNvbnRlbnRzKCktPmlzVXNlclN0eWxlU2hlZXQoKSk7CisgICAgICAgIHVzZXJTdHlsZS5hZGRS
dWxlc0Zyb21TaGVldCh1c2VyU2hlZXRzW2ldLT5jb250ZW50cygpLCBtZWRpdW0sICZyZXNvbHZl
cik7CisgICAgfQorfQorCitzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChj
b25zdCBWZWN0b3I8UnVsZUZlYXR1cmU+JiBydWxlcykKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IHJ1
bGVzLnNpemUoKTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IE93blB0cjxSdWxlU2V0PiBydWxlU2V0ID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVs
ZXNbaV0ucnVsZSwgcnVsZXNbaV0uc2VsZWN0b3JJbmRleCwgcnVsZXNbaV0uaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogUnVsZUhhc05v
U3BlY2lhbFN0YXRlKTsKKyAgICBydWxlU2V0LT5zaHJpbmtUb0ZpdCgpOworICAgIHJldHVybiBy
dWxlU2V0LnJlbGVhc2UoKTsKK30KKwordm9pZCBEb2N1bWVudFJ1bGVTZXRzOjpyZXNldEF1dGhv
clN0eWxlKCkKK3sKKyAgICBtX2F1dGhvclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAg
bV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOworfQorCit2b2lkIERvY3Vt
ZW50UnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBj
b25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHN0eWxlU2hlZXRzLCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yKiBtZWRpdW0sIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNT
U09NV3JhcHBlcnMsIGJvb2wgaXNWaWV3U291cmNlLCBTdHlsZVJlc29sdmVyKiByZXNvbHZlcikK
K3sKKyAgICAvLyBUaGlzIGhhbmRsZXMgc2hlZXRzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHN0
eWxlc2hlZXQgbGlzdCBvbmx5LiBJbiBvdGhlciBjYXNlcyB0aGUgc3R5bGUgcmVzb2x2ZXIKKyAg
ICAvLyBuZWVkcyB0byBiZSByZWNvbnN0cnVjdGVkLiBUbyBoYW5kbGUgaW5zZXJ0aW9ucyB0b28g
dGhlIHJ1bGUgb3JkZXIgbnVtYmVycyB3b3VsZCBuZWVkIHRvIGJlIHVwZGF0ZWQuCisgICAgdW5z
aWduZWQgc2l6ZSA9IHN0eWxlU2hlZXRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBm
aXJzdE5ldzsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTaGVl
dCA9IHN0eWxlU2hlZXRzW2ldLmdldCgpOworICAgICAgICBBU1NFUlQoIWNzc1NoZWV0LT5kaXNh
YmxlZCgpKTsKKyAgICAgICAgaWYgKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaXVt
LT5ldmFsKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQgPSBjc3NTaGVldC0+
Y29udGVudHMoKTsKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RP
TSkKKyAgICAgICAgaWYgKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gU3R5bGVTY29wZVJl
c29sdmVyOjpzY29wZUZvcihjc3NTaGVldCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1v
dmUgYSBkZXBlbmRlbmN5IHRvIGNhbGxpbmcgYSBTdHlsZVJlc29sdmVyJ3MgbWVtYmVyIGZ1bmN0
aW9uLgorICAgICAgICAgICAgLy8gSWYgd2UgY2FuIGF2b2lkIGNhbGxpbmcgcmVzb2x2ZXItPmVu
c3VyZVNjb3BlUmVzb2x2ZXIoKSBoZXJlLCB3ZSBkb24ndCBoYXZlIHRvIGluY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA4ODkwCisgICAgICAgICAgICByZXNvbHZlci0+ZW5zdXJlU2NvcGVSZXNv
bHZlcigpLT5lbnN1cmVSdWxlU2V0Rm9yKHNjb3BlKS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQs
ICptZWRpdW0sIHJlc29sdmVyLCBzY29wZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNo
ZWV0LCAqbWVkaXVtLCByZXNvbHZlcik7CisgICAgICAgIGluc3BlY3RvckNTU09NV3JhcHBlcnMu
Y29sbGVjdEZyb21TdHlsZVNoZWV0SWZOZWVkZWQoY3NzU2hlZXQpOworICAgIH0KKyAgICBtX2F1
dGhvclN0eWxlLT5zaHJpbmtUb0ZpdCgpOworICAgIGNvbGxlY3RGZWF0dXJlcyhpc1ZpZXdTb3Vy
Y2UsIHJlc29sdmVyLT5zY29wZVJlc29sdmVyKCkpOworfQorCit2b2lkIERvY3VtZW50UnVsZVNl
dHM6OmNvbGxlY3RGZWF0dXJlcyhib29sIGlzVmlld1NvdXJjZSwgU3R5bGVTY29wZVJlc29sdmVy
KiBzY29wZVJlc29sdmVyKQoreworICAgIG1fZmVhdHVyZXMuY2xlYXIoKTsKKyAgICAvLyBDb2xs
ZWN0IGFsbCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxpbmcgc2VsZWN0b3JzICg6Zmlyc3QtY2hp
bGQgYW5kIHNpbWlsYXIpCisgICAgLy8gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIHN0eWxlc2hlZXRz
LiBTdHlsZSBzaGFyaW5nIGNvZGUgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRvIHJlamVjdAorICAg
IC8vIHNoYXJpbmcgY2FuZGlkYXRlcy4KKyAgICBpZiAoQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpk
ZWZhdWx0U3R5bGUpCisgICAgICAgIG1fZmVhdHVyZXMuYWRkKENTU0RlZmF1bHRTdHlsZVNoZWV0
czo6ZGVmYXVsdFN0eWxlLT5mZWF0dXJlcygpKTsKKyAgICBpZiAobV9hdXRob3JTdHlsZSkKKyAg
ICAgICAgbV9mZWF0dXJlcy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7CisgICAgaWYg
KGlzVmlld1NvdXJjZSkKKyAgICAgICAgbV9mZWF0dXJlcy5hZGQoQ1NTRGVmYXVsdFN0eWxlU2hl
ZXRzOjp2aWV3U291cmNlU3R5bGUoKS0+ZmVhdHVyZXMoKSk7CisKKyAgICBpZiAoc2NvcGVSZXNv
bHZlcikKKyAgICAgICAgc2NvcGVSZXNvbHZlci0+Y29sbGVjdEZlYXR1cmVzVG8obV9mZWF0dXJl
cyk7CisgICAgaWYgKG1fdXNlclN0eWxlKQorICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJT
dHlsZS0+ZmVhdHVyZXMoKSk7CisKKyAgICBtX3NpYmxpbmdSdWxlU2V0ID0gbWFrZVJ1bGVTZXQo
bV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMpOworICAgIG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0
ID0gbWFrZVJ1bGVTZXQobV9mZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKK30KKwor
dm9pZCBEb2N1bWVudFJ1bGVTZXRzOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAoreworICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1l
bW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKKyAgICBpbmZv
LmFkZE1lbWJlcihtX2F1dGhvclN0eWxlKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX3VzZXJTdHls
ZSk7CisgICAgaW5mby5hZGRNZW1iZXIobV9mZWF0dXJlcyk7CisgICAgaW5mby5hZGRNZW1iZXIo
bV9zaWJsaW5nUnVsZVNldCk7CisgICAgaW5mby5hZGRNZW1iZXIobV91bmNvbW1vbkF0dHJpYnV0
ZVJ1bGVTZXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0Rv
Y3VtZW50UnVsZVNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NmE1MGZjNDUzOThjOWQzZGM1NTcyYmY4Y2Q5
YmVkOGNmYzk4MzZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0RvY3Vt
ZW50UnVsZVNldHMuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIERvY3VtZW50UnVsZVNldHNfaAorI2RlZmluZSBE
b2N1bWVudFJ1bGVTZXRzX2gKKworI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCisKKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NTdHlsZVJ1bGU7Citj
bGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjsK
K2NsYXNzIEluc3BlY3RvckNTU09NV3JhcHBlcnM7CitjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9y
OworY2xhc3MgUnVsZVNldDsKK2NsYXNzIFN0eWxlUmVzb2x2ZXI7CitjbGFzcyBTdHlsZVNjb3Bl
UmVzb2x2ZXI7CisKK2NsYXNzIERvY3VtZW50UnVsZVNldHMgeworcHVibGljOgorICAgIERvY3Vt
ZW50UnVsZVNldHMoKTsKKyAgICB+RG9jdW1lbnRSdWxlU2V0cygpOworICAgIFJ1bGVTZXQqIGF1
dGhvclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hdXRob3JTdHlsZS5nZXQoKTsgfQorICAgIFJ1
bGVTZXQqIHVzZXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlLmdldCgpOyB9Cisg
ICAgUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzKCkgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAg
IGNvbnN0IFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVy
ZXM7IH0KKyAgICBSdWxlU2V0KiBzaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaWJsaW5nUnVs
ZVNldC5nZXQoKTsgfQorICAgIFJ1bGVTZXQqIHVuY29tbW9uQXR0cmlidXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0KCk7IH0KKworICAgIHZvaWQgaW5p
dFVzZXJTdHlsZShEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKiwgY29uc3QgTWVkaWFRdWVy
eUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXImKTsKKyAgICB2b2lkIHJlc2V0QXV0aG9yU3R5bGUo
KTsKKyAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBj
b25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mLCBNZWRpYVF1ZXJ5RXZhbHVhdG9y
KiwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYsIGJvb2wgaXNWaWV3U291cmNlLCBTdHlsZVJlc29s
dmVyKik7CisKKyAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcyhib29sIGlzVmlld1NvdXJjZSwgU3R5
bGVTY29wZVJlc29sdmVyKik7CisgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmpl
Y3RJbmZvKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb2xsZWN0UnVsZXNGcm9tVXNl
clN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYsIFJ1bGVT
ZXQmIHVzZXJTdHlsZSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXIm
KTsKKyAgICBPd25QdHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKKyAgICBPd25QdHI8UnVsZVNl
dD4gbV91c2VyU3R5bGU7CisgICAgUnVsZUZlYXR1cmVTZXQgbV9mZWF0dXJlczsKKyAgICBPd25Q
dHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKKyAgICBPd25QdHI8UnVsZVNldD4gbV91bmNv
bW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBEb2N1bWVudFJ1bGVTZXRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAppbmRleCAxODI5MGYzODU2NDg5NTM3NmU1ODk2YWNhMjQwYTgwMDc3MjYyNzNjLi45NzA1MDBj
NmYxYWY0MTlmOWEzY2FiZjRiZWE3MDc3MTY5ZDg5OTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCkBAIC0yNTksMTYgKzI1OSwxMCBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJl
c29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMp
CiAgICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9
IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3
LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpKTsKIAotICAgIHJlc2V0QXV0aG9y
U3R5bGUoKTsKKyAgICBtX3J1bGVTZXRzLnJlc2V0QXV0aG9yU3R5bGUoKTsKIAogICAgIERvY3Vt
ZW50U3R5bGVTaGVldENvbGxlY3Rpb24qIHN0eWxlU2hlZXRDb2xsZWN0aW9uID0gZG9jdW1lbnQt
PnN0eWxlU2hlZXRDb2xsZWN0aW9uKCk7Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IHRlbXBVc2VyU3R5
bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJT
aGVldCA9IHN0eWxlU2hlZXRDb2xsZWN0aW9uLT5wYWdlVXNlclNoZWV0KCkpCi0gICAgICAgIHRl
bXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCks
ICptX21lZGl1bSwgdGhpcyk7Ci0gICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhz
dHlsZVNoZWV0Q29sbGVjdGlvbi0+aW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSwgKnRlbXBVc2Vy
U3R5bGUpOwotICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoc3R5bGVTaGVldENv
bGxlY3Rpb24tPmRvY3VtZW50VXNlclN0eWxlU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsKLSAg
ICBpZiAodGVtcFVzZXJTdHlsZS0+bV9ydWxlQ291bnQgPiAwIHx8IHRlbXBVc2VyU3R5bGUtPm1f
cGFnZVJ1bGVzLnNpemUoKSA+IDApCi0gICAgICAgIG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHls
ZS5yZWxlYXNlKCk7CisgICAgbV9ydWxlU2V0cy5pbml0VXNlclN0eWxlKHN0eWxlU2hlZXRDb2xs
ZWN0aW9uLCAqbV9tZWRpdW0sICp0aGlzKTsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAg
aWYgKGRvY3VtZW50LT5zdmdFeHRlbnNpb25zKCkpIHsKQEAgLTI4Miw1NiArMjc2LDkgQEAgU3R5
bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzKQogICAgIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKDAsIHN0eWxl
U2hlZXRDb2xsZWN0aW9uLT5hY3RpdmVBdXRob3JTdHlsZVNoZWV0cygpKTsKIH0KIAotdm9pZCBT
dHlsZVJlc29sdmVyOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYgdXNlclNoZWV0cywgUnVsZVNldCYgdXNlclN0eWxl
KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VyU2hlZXRzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIEFTU0VSVCh1c2VyU2hlZXRzW2ldLT5jb250ZW50cygpLT5pc1VzZXJTdHls
ZVNoZWV0KCkpOwotICAgICAgICB1c2VyU3R5bGUuYWRkUnVsZXNGcm9tU2hlZXQodXNlclNoZWV0
c1tpXS0+Y29udGVudHMoKSwgKm1fbWVkaXVtLCB0aGlzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBQ
YXNzT3duUHRyPFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3RvcjxSdWxlRmVhdHVyZT4m
IHJ1bGVzKQotewotICAgIHNpemVfdCBzaXplID0gcnVsZXMuc2l6ZSgpOwotICAgIGlmICghc2l6
ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQg
PSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKLSAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5ydWxlLCBydWxlc1tpXS5zZWxl
Y3RvckluZGV4LCBydWxlc1tpXS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID8gUnVsZUhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4gOiBSdWxlSGFzTm9TcGVjaWFsU3RhdGUpOwotICAgIHJ1bGVT
ZXQtPnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIHJ1bGVTZXQucmVsZWFzZSgpOwotfQotCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc2V0QXV0aG9yU3R5bGUoKQotewotICAgIG1fYXV0aG9yU3R5
bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBtX2F1dGhvclN0eWxlLT5kaXNhYmxlQXV0b1No
cmlua1RvRml0KCk7Ci19Ci0KIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVT
aGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gPiYgc3R5bGVTaGVldHMpCiB7Ci0gICAgLy8gVGhpcyBoYW5kbGVzIHNoZWV0cyBhZGRlZCB0
byB0aGUgZW5kIG9mIHRoZSBzdHlsZXNoZWV0IGxpc3Qgb25seS4gSW4gb3RoZXIgY2FzZXMgdGhl
IHN0eWxlIHJlc29sdmVyCi0gICAgLy8gbmVlZHMgdG8gYmUgcmVjb25zdHJ1Y3RlZC4gVG8gaGFu
ZGxlIGluc2VydGlvbnMgdG9vIHRoZSBydWxlIG9yZGVyIG51bWJlcnMgd291bGQgbmVlZCB0byBi
ZSB1cGRhdGVkLgotICAgIHVuc2lnbmVkIHNpemUgPSBzdHlsZVNoZWV0cy5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gZmlyc3ROZXc7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgQ1NT
U3R5bGVTaGVldCogY3NzU2hlZXQgPSBzdHlsZVNoZWV0c1tpXS5nZXQoKTsKLSAgICAgICAgQVNT
RVJUKCFjc3NTaGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgICAgIGlmIChjc3NTaGVldC0+bWVkaWFR
dWVyaWVzKCkgJiYgIW1fbWVkaXVtLT5ldmFsKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSwgdGhp
cykpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgU3R5bGVTaGVldENvbnRlbnRzKiBz
aGVldCA9IGNzc1NoZWV0LT5jb250ZW50cygpOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8
IEVOQUJMRShTSEFET1dfRE9NKQotICAgICAgICBpZiAoY29uc3QgQ29udGFpbmVyTm9kZSogc2Nv
cGUgPSBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlRm9yKGNzc1NoZWV0KSkgewotICAgICAgICAg
ICAgZW5zdXJlU2NvcGVSZXNvbHZlcigpLT5lbnN1cmVSdWxlU2V0Rm9yKHNjb3BlKS0+YWRkUnVs
ZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIG1fYXV0aG9yU3R5bGUtPmFk
ZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOwotICAgICAgICBtX2luc3Bl
Y3RvckNTU09NV3JhcHBlcnMuY29sbGVjdEZyb21TdHlsZVNoZWV0SWZOZWVkZWQoY3NzU2hlZXQp
OwotICAgIH0KLSAgICBtX2F1dGhvclN0eWxlLT5zaHJpbmtUb0ZpdCgpOwotICAgIGNvbGxlY3RG
ZWF0dXJlcygpOwotICAgIAorICAgIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMo
Zmlyc3ROZXcsIHN0eWxlU2hlZXRzLCBtX21lZGl1bS5nZXQoKSwgbV9pbnNwZWN0b3JDU1NPTVdy
YXBwZXJzLCBkb2N1bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSwgdGhpcyk7CiAgICAgaWYgKGRvY3Vt
ZW50KCktPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKICAg
ICAgICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250
U2VsZWN0b3IoKSk7CiAKQEAgLTYzOSw3ICs1ODYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cwogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgot
ICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9hdXRob3JTdHlsZS5nZXQoKSwgaW5jbHVk
ZUVtcHR5UnVsZXMpOworICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9ydWxlU2V0cy5h
dXRob3JTdHlsZSgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5n
ZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7CiAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKQEAgLTY1MCwxMyArNTk3LDEzIEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2Vy
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKLSAg
ICBpZiAoIW1fdXNlclN0eWxlKQorICAgIGlmICghbV9ydWxlU2V0cy51c2VyU3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAK
ICAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxOwotICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV91c2VyU3R5bGUu
Z2V0KCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0
KG1fcnVsZVNldHMudXNlclN0eWxlKCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBSdWxlUmFu
Z2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy51c2VyUnVsZVJhbmdlKCk7CiAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKQEAgLTc5Miw3ICs3
MzksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogYm9vbCBTdHlsZVJlc29sdmVyOjpjbGFz
c05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMp
IGNvbnN0CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFtZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKG1fZmVhdHVyZXMuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMo
Y2xhc3NOYW1lc1tpXS5pbXBsKCkpKQorICAgICAgICBpZiAobV9ydWxlU2V0cy5mZWF0dXJlcygp
LmNsYXNzZXNJblJ1bGVzLmNvbnRhaW5zKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC04NjcsNyArODE0
LDcgQEAgTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJl
bnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW4KICAgICBpZiAocC0+aXNTVkdFbGVtZW50KCkg
JiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHApLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRp
ZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKLSAgICBpZiAocC0+aGFzSUQoKSAmJiBt
X2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMocC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5p
bXBsKCkpKQorICAgIGlmIChwLT5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJ
blJ1bGVzLmNvbnRhaW5zKHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBwLT5yZW5kZXJT
dHlsZSgpOwpAQCAtMTA0OSw3ICs5OTYsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJl
U3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChl
bGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5z
dHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0
dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCku
aW1wbCgpKSkKKyAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVz
KCkuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmlt
cGwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVk
SFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEzMiw3ICsxMDc5
LDcgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAg
ICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICAvLyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5nIGlm
IHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCi0gICAgaWYgKHN0YXRlLnN0eWxlZEVs
ZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0YXRlLnN0
eWxlZEVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAoc3Rh
dGUuc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5S
dWxlcy5jb250YWlucyhzdGF0ZS5zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigp
LmltcGwoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVu
dHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMTE2NCwxMCArMTExMSwxMCBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6
bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENhbid0IHNo
YXJlIGlmIHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMgaXMgY2hlY2tlZCBhdCB0aGUgZW5kIGFz
IGl0IHNob3VsZCByYXJlbHkgZmFpbC4KLSAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0
Y2hlc1J1bGVTZXQobV9zaWJsaW5nUnVsZVNldC5nZXQoKSkpCisgICAgaWYgKHN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1fcnVsZVNldHMuc2libGluZygpKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5Lgot
ICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0
cmlidXRlUnVsZVNldC5nZXQoKSkpCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNo
ZXNSdWxlU2V0KG1fcnVsZVNldHMudW5jb21tb25BdHRyaWJ1dGUoKSkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIC8vIENhbid0IHNoYXJlIGlmIEBob3N0IEAtcnVsZXMgYXBwbHkuCiAgICAgaWYg
KHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKSkKQEAgLTE0MzYsNyArMTM4
Myw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAgICAgYm9vbCBuZWVkc0NvbGxlY3Rpb24g
PSBmYWxzZTsKICAgICBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bHRTdHlsZVNo
ZWV0c0ZvckVsZW1lbnQoZWxlbWVudCwgbmVlZHNDb2xsZWN0aW9uKTsKICAgICBpZiAobmVlZHND
b2xsZWN0aW9uKQotICAgICAgICBjb2xsZWN0RmVhdHVyZXMoKTsKKyAgICAgICAgbV9ydWxlU2V0
cy5jb2xsZWN0RmVhdHVyZXMoZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCksIG1fc2NvcGVSZXNv
bHZlci5nZXQoKSk7CiAKICAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKICAgICBpZiAobWF0
Y2hpbmdCZWhhdmlvciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykKQEAgLTE2MzcsOSArMTU4
NCw5IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFn
ZShpbnQgcGFnZUluZGV4KQogICAgIAogICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKICAgICBtYXRj
aFBhZ2VSdWxlcyhyZXN1bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFByaW50U3R5
bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBt
X3VzZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICBtYXRjaFBhZ2VS
dWxlcyhyZXN1bHQsIG1fcnVsZVNldHMudXNlclN0eWxlKCksIGlzTGVmdCwgaXNGaXJzdCwgcGFn
ZSk7CiAgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZvciBA
cGFnZSBydWxlcywgYXMgcGVyIHRoZSBIVE1MNSBzcGVjLgotICAgIG1hdGNoUGFnZVJ1bGVzKHJl
c3VsdCwgbV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICBt
YXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKSwgaXNMZWZ0LCBp
c0ZpcnN0LCBwYWdlKTsKICAgICBtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYm9v
bCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCkBAIC0y
MDA5LDE4ICsxOTU2LDE4IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TdHlsZShF
bGVtZW50KiByZWdpb25FbGVtZW50KQogICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24n
dCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRo
ZSBtb21lbnQsCiAgICAgLy8gc28gYWxsIHJlZ2lvbiBydWxlcyBhcmUgZ2xvYmFsIGJ5IGRlZmF1
bHQuIFZlcmlmeSB3aGV0aGVyIHRoYXQgY2FuIHN0YW5kIG9yIG5lZWRzIGNoYW5naW5nLgogCi0g
ICAgdW5zaWduZWQgcnVsZXNTaXplID0gbV9hdXRob3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNB
bmRSdWxlU2V0cy5zaXplKCk7CisgICAgdW5zaWduZWQgcnVsZXNTaXplID0gbV9ydWxlU2V0cy5h
dXRob3JTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXNTaXplOyArK2kpIHsKLSAgICAgICAgQVNTRVJU
KG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNl
dC5nZXQoKSk7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKG1fYXV0aG9yU3R5bGUt
Pm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1l
bnQpKQorICAgICAgICBBU1NFUlQobV9ydWxlU2V0cy5hdXRob3JTdHlsZSgpLT5tX3JlZ2lvblNl
bGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOworICAgICAgICBpZiAoY2hl
Y2tSZWdpb25TZWxlY3RvcihtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCktPm1fcmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKG1fdXNlclN0eWxlKSB7Ci0gICAgICAg
IHJ1bGVzU2l6ZSA9IG1fdXNlclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNp
emUoKTsKKyAgICBpZiAobV9ydWxlU2V0cy51c2VyU3R5bGUoKSkgeworICAgICAgICBydWxlc1Np
emUgPSBtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRz
LnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICBBU1NFUlQobV91c2VyU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5k
UnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoY2hlY2tSZWdp
b25TZWxlY3RvcihtX3VzZXJTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChp
KS5zZWxlY3RvciwgcmVnaW9uRWxlbWVudCkpCisgICAgICAgICAgICBBU1NFUlQobV9ydWxlU2V0
cy51c2VyU3R5bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKG1fcnVsZVNldHMu
dXNlclN0eWxlKCktPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3Is
IHJlZ2lvbkVsZW1lbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgfQpAQCAtMjg4NCw3ICsyODMxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20g
OiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0
dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQotICAgICAgICAgICAgICAgICAgICBtX2Zl
YXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAg
ICAgICAgICAgICAgICBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuYXR0cnNJblJ1bGVzLmFkZChhdHRy
LmxvY2FsTmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50
VmFsdWUtPmlzQ291bnRlcigpKSB7CiAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50
ZXJWYWx1ZSA9IGNvbnRlbnRWYWx1ZS0+Z2V0Q291bnRlclZhbHVlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIEVMaXN0U3R5bGVUeXBlIGxpc3RTdHlsZVR5cGUgPSBOb25lTGlzdFN0eWxlOwpAQCAt
NTE2NiwyOCArNTExMyw2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJj
ZXMoKQogI2VuZGlmCiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzKCkK
LXsKLSAgICBtX2ZlYXR1cmVzLmNsZWFyKCk7Ci0gICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBy
dWxlcyB1c2luZyBzaWJsaW5nIHNlbGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQot
ICAgIC8vIGluIHRoZSBjdXJyZW50IHNldCBvZiBzdHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBj
b2RlIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byByZWplY3QKLSAgICAvLyBzaGFyaW5nIGNhbmRp
ZGF0ZXMuCi0gICAgaWYgKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFN0eWxlKQotICAg
ICAgICBtX2ZlYXR1cmVzLmFkZChDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRTdHlsZS0+
ZmVhdHVyZXMoKSk7Ci0gICAgaWYgKG1fYXV0aG9yU3R5bGUpCi0gICAgICAgIG1fZmVhdHVyZXMu
YWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOwotICAgIGlmIChkb2N1bWVudCgpLT5pc1Zp
ZXdTb3VyY2UoKSkKLSAgICAgICAgbV9mZWF0dXJlcy5hZGQoQ1NTRGVmYXVsdFN0eWxlU2hlZXRz
Ojp2aWV3U291cmNlU3R5bGUoKS0+ZmVhdHVyZXMoKSk7Ci0KLSAgICBpZiAobV9zY29wZVJlc29s
dmVyKQotICAgICAgICBtX3Njb3BlUmVzb2x2ZXItPmNvbGxlY3RGZWF0dXJlc1RvKG1fZmVhdHVy
ZXMpOwotICAgIGlmIChtX3VzZXJTdHlsZSkKLSAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2Vy
U3R5bGUtPmZlYXR1cmVzKCkpOwotCi0gICAgbV9zaWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0
KG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKTsKLSAgICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNl
dCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7Ci19Ci0K
IHZvaWQgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXM6OnJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5
Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVz
OjpDU1MpOwpAQCAtNTIxMiwxMSArNTEzNyw3IEBAIHZvaWQgTWVkaWFRdWVyeVJlc3VsdDo6cmVw
b3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uCiB2
b2lkIFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1l
bW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5
T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgIGluZm8uYWRk
TWVtYmVyKG1fYXV0aG9yU3R5bGUsICJhdXRob3JTdHlsZSIpOwotICAgIGluZm8uYWRkTWVtYmVy
KG1fdXNlclN0eWxlLCAidXNlclN0eWxlIik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9mZWF0dXJl
cywgImZlYXR1cmVzIik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9zaWJsaW5nUnVsZVNldCwgInNp
YmxpbmdSdWxlU2V0Iik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV91bmNvbW1vbkF0dHJpYnV0ZVJ1
bGVTZXQsICJ1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQiKTsKKyAgICBpbmZvLmFkZE1lbWJlciht
X3J1bGVTZXRzLCAicnVsZVNldHMiKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2tleWZyYW1lc1J1
bGVNYXAsICJrZXlmcmFtZXNSdWxlTWFwIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlLCAibWF0Y2hlZFByb3BlcnRpZXNDYWNoZSIpOwogICAgIGluZm8uYWRk
TWVtYmVyKG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIsICJtYXRjaGVkUHJvcGVy
dGllc0NhY2hlU3dlZXBUaW1lciIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXgg
ODRjM2NkMWZjMDM3ZGFiMGRmZDc1YThmZmQ3ZDhiOWE1YzQ5NzNmOC4uZThjYTNjMDdkM2QxMjAw
NDM4ZmIzOWM5ZTAyOTUwZTJiMzgxNGRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJD
U1NUb1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRSdWxlU2V0cy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU09NV3JhcHBlcnMuaCIKICNp
bmNsdWRlICJMaW5rSGFzaC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKQEAgLTE2OSw2
ICsxNzAsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGU7IH0KICAgICBFbGVtZW50KiBl
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5lbGVtZW50OyB9CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQorICAgIFN0eWxlU2NvcGVS
ZXNvbHZlciogc2NvcGVSZXNvbHZlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVSZXNvbHZlci5n
ZXQoKTsgfQogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyBy
ZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KICAgICBjb25zdCBGb250RGVzY3Jp
cHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVudFN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpOyB9CiAgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5
bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KQEAgLTE3OSwxMCAr
MTgxLDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50
YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNl
dFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CiAgICAgYm9vbCBoYXNQYXJlbnRO
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnROb2RlOyB9CiAKLSAgICB2b2lkIHJl
c2V0QXV0aG9yU3R5bGUoKTsKKyAgICAvLyBGSVhNRTogSXQgY291bGQgYmUgYmV0dGVyIHRvIGNh
bGwgbV9ydWxlU2V0cy5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cygpIGRpcmVjdGx5IGFmdGVyIHdl
IGZhY3RvciBTdHlsZVJzb2x2ZXIgZnVydGhlci4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4ODkwCiAgICAgdm9pZCBhcHBlbmRBdXRob3JTdHlsZVNo
ZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0
PiA+Jik7CiAKLXByaXZhdGU6CisgICAgRG9jdW1lbnRSdWxlU2V0cyYgcnVsZVNldHMoKSB7IHJl
dHVybiBtX3J1bGVTZXRzOyB9CisgICAgY29uc3QgRG9jdW1lbnRSdWxlU2V0cyYgcnVsZVNldHMo
KSBjb25zdCB7IHJldHVybiBtX3J1bGVTZXRzOyB9CisKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVE
KSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBTdHlsZVNjb3BlUmVzb2x2ZXIqIGVuc3VyZVNj
b3BlUmVzb2x2ZXIoKQogICAgIHsKQEAgLTIwMSw5ICsyMDYsOSBAQCBwcml2YXRlOgogICAgIH0K
ICNlbmRpZgogCitwcml2YXRlOgogICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50
KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7CiAg
ICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7Ci0gICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMo
KTsKICAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKICAgICBib29sIHN0eWxl
U2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqKTsKICAgICBib29sIHN0eWxl
U2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKTsKQEAgLTI3MSw5ICsyNzYsOSBAQCBw
dWJsaWM6CiAKICAgICBib29sIGNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogcmVnaW9uRWxlbWVu
dCk7CiAKLSAgICBib29sIHVzZXNTaWJsaW5nUnVsZXMoKSBjb25zdCB7IHJldHVybiAhbV9mZWF0
dXJlcy5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVs
ZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlczsgfQotICAg
IGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVz
ZXNCZWZvcmVBZnRlclJ1bGVzOyB9CisgICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3Qg
eyByZXR1cm4gIW1fcnVsZVNldHMuZmVhdHVyZXMoKS5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpOyB9
CisgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3J1bGVTZXRz
LmZlYXR1cmVzKCkudXNlc0ZpcnN0TGluZVJ1bGVzOyB9CisgICAgYm9vbCB1c2VzQmVmb3JlQWZ0
ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZVNldHMuZmVhdHVyZXMoKS51c2VzQmVmb3Jl
QWZ0ZXJSdWxlczsgfQogCiAgICAgc3RhdGljIGJvb2wgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9u
cyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiBy
b290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwogICAgIApAQCAt
NDEyLDEyICs0MTcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJ
bmRleCkgY29uc3Q7CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0Owog
Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7Ci0gICAgT3duUHRyPFJ1bGVTZXQ+
IG1fdXNlclN0eWxlOwotCi0gICAgUnVsZUZlYXR1cmVTZXQgbV9mZWF0dXJlczsKLSAgICBPd25Q
dHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKLSAgICBPd25QdHI8UnVsZVNldD4gbV91bmNv
bW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7CisgICAgRG9jdW1lbnRSdWxlU2V0cyBtX3J1bGVTZXRzOwog
CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxl
S2V5ZnJhbWVzPiA+IEtleWZyYW1lc1J1bGVNYXA7CiAgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tl
eWZyYW1lc1J1bGVNYXA7CkBAIC01MjQsOCArNTI0LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBzdGF0aWMgUmVuZGVyU3R5bGUqIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKLSAgICB2b2lk
IGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0PiA+JiwgUnVsZVNldCYgdXNlclN0eWxlKTsKLQogICAgIHZvaWQgY2FjaGVCb3Jk
ZXJBbmRCYWNrZ3JvdW5kKCk7CiAKIHByaXZhdGU6CkBAIC02MDMsMTkgKzYwMSwxOSBAQCBwcml2
YXRlOgogaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUo
Y29uc3QgQXRvbWljU3RyaW5nICZhdHRyaWJ1dGVOYW1lKSBjb25zdAogewogICAgIEFTU0VSVCgh
YXR0cmlidXRlTmFtZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX2ZlYXR1cmVzLmF0dHJzSW5S
dWxlcy5jb250YWlucyhhdHRyaWJ1dGVOYW1lLmltcGwoKSk7CisgICAgcmV0dXJuIG1fcnVsZVNl
dHMuZmVhdHVyZXMoKS5hdHRyc0luUnVsZXMuY29udGFpbnMoYXR0cmlidXRlTmFtZS5pbXBsKCkp
OwogfQogCiBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpoYXNTZWxlY3RvckZvckNsYXNzKGNv
bnN0IEF0b21pY1N0cmluZyYgY2xhc3NWYWx1ZSkgY29uc3QKIHsKICAgICBBU1NFUlQoIWNsYXNz
VmFsdWUuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9mZWF0dXJlcy5jbGFzc2VzSW5SdWxlcy5j
b250YWlucyhjbGFzc1ZhbHVlLmltcGwoKSk7CisgICAgcmV0dXJuIG1fcnVsZVNldHMuZmVhdHVy
ZXMoKS5jbGFzc2VzSW5SdWxlcy5jb250YWlucyhjbGFzc1ZhbHVlLmltcGwoKSk7CiB9CiAKIGlu
bGluZSBib29sIFN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9ySWQoY29uc3QgQXRvbWljU3Ry
aW5nJiBpZFZhbHVlKSBjb25zdAogewogICAgIEFTU0VSVCghaWRWYWx1ZS5pc0VtcHR5KCkpOwot
ICAgIHJldHVybiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoaWRWYWx1ZS5pbXBsKCkp
OworICAgIHJldHVybiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhp
ZFZhbHVlLmltcGwoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAppbmRleCA2
MzJmYTk0YWEzMzVjYWIwZWU0MTRkZmJhZGJkN2M3MmZjMzBjNzdmLi4zYWMxZjVlYzRjNzgyZjM2
NjEwMWQ0ZjEyMzk4MGQwOTljMzdjYzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCkBAIC00NzgsNyArNDc4LDcgQEAgYm9v
bCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhV
cGRhdGVGbGFnIHVwZGF0ZUZsYWcKICAgICBlbHNlIHsKICAgICAgICAgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQtPnN0eWxlUmVzb2x2ZXIoKTsKICAgICAgICAgaWYg
KHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID09IFJlc2V0KSB7Ci0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5yZXNldEF1dGhvclN0eWxlKCk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5y
dWxlU2V0cygpLnJlc2V0QXV0aG9yU3R5bGUoKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKDAsIGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9
PSBBZGRpdGl2ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186810</attachid>
            <date>2013-02-06 03:09:25 -0800</date>
            <delta_ts>2013-02-11 20:33:43 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-107777-20130206200601.patch</filename>
            <type>text/plain</type>
            <size>39827</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWY0ZmNjYjE3NTc5NjFl
NjYzNGJkNzUyM2M2ODA5MDFiMTYzNmI0NS4uZTY0YjdhOTk1OWY0NjA5ZDM4NmI3MWIwZjZmNjNm
MGM5YjFjYzY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEzLTAyLTA0ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBTcGxpdCBlYWNoIFJ1bGVT
ZXQgYW5kIGZlYXR1cmUgb3V0IGZyb20gU3R5bGVSZXNvbHZlciBpbnRvIGl0cyBvd24gY2xhc3Mu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc3NzcK
KworICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCisKKyAgICAgICAgUmUtbGFu
ZGluZyByMTQxOTY0LCB3aGljaCB3YXMgcmV2ZXJ0ZWQgaW4gcjE0MTk3Mywgc2luY2UgcjE0MTk2
NCBzZWVtIHRvIGJlIGlubm9jZW50LgorCisgICAgICAgIE5vIHRlc3RzLiBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBjc3MvQ1NTQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGNzcy9Eb2N1bWVudFJ1bGVTZXRz
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50UnVsZVNldHM6OkRvY3VtZW50UnVsZVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRSdWxlU2V0czo6fkRvY3VtZW50UnVsZVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRSdWxlU2V0czo6aW5pdFVzZXJTdHlsZSk6IE5ldyBoZWxwZXIgdG8gaW5pdGlhbGl6ZSBlYWNo
IFJ1bGVTZXRzLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6Y29sbGVjdFJ1
bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyk6IEZhY3RvcmVkIG91dCBmcm9tIFN0eWxlUmVzb2x2ZXIu
CisgICAgICAgIChXZWJDb3JlOjptYWtlUnVsZVNldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRSdWxlU2V0czo6cmVzZXRBdXRob3JTdHlsZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UnVsZVNldHM6OmNvbGxlY3RGZWF0dXJlcyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6cmVwb3J0TWVtb3J5
VXNhZ2UpOiBOZXcgbWV0aG9kcyB0byByZXBvcnQgbWVtb3J5IHVzYWdlLiBGYWN0b3JlZCBvdXQg
ZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAgICAqIGNzcy9Eb2N1bWVudFJ1bGVTZXRzLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEb2N1bWVudFJ1bGVTZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UnVsZVNldHM6OmF1dGhvclN0eWxlKTogTW92ZWQgZnJv
bSBTdHlsZVJlc29sdmVyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6dXNl
clN0eWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjpmZWF0
dXJlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6c2libGlu
Zyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6dW5jb21tb25B
dHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKTogTm93IGNhbGxz
IERvY3VtZW50UnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyk6IFVzZSBtX3J1bGVTZXRzLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVs
ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNp
bkxpc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJl
U3R5bGVXaXRoRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9jYXRlU2hhcmVkU3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yUGFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6Y2hlY2tSZWdpb25TdHlsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOiBOb3cgY2FsbHMgRG9jdW1lbnRSdWxlU2V0czo6
cmVwb3J0TWVtb3J5VXNhZ2UuCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNjb3BlUmVzb2x2ZXIpOgorICAgICAgICAoU3R5
bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlU2V0cyk6
IGFjY2Vzc29yIHIgdG8gRG9jdW1lbnRSdWxlU2V0cy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnVzZXNTaWJsaW5nUnVsZXMpOiBVc2UgbV9ydWxlU2V0cy4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnVzZXNGaXJzdExpbmVSdWxlcyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlc0JlZm9yZUFmdGVyUnVsZXMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9yQXR0cmlidXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpoYXNTZWxlY3RvckZv
ckNsYXNzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpoYXNTZWxl
Y3RvckZvcklkKTogRGl0dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bjo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMpOgorCiAyMDEzLTAyLTA2ICBQYXZlbCBGZWxkbWFu
ICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGZpbGUg
c2VsZWN0b3IgbGlzdCBqdW1wcyBhcyBJIHR5cGUgb3IgbW92ZSBVcC9Eb3duCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CmluZGV4IGVjMjg2YmJkZDJhMWEyZGVlNWI5YWNlNDE0OTY0ODM0YWZlMGUxZjQuLjg5
MzFkZjMwOWE4YzFkNjBjNGExNjBkNTYwYjQ1ZWVhYjg2NThmNjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CkBAIC0xMDcwLDYgKzEwNzAsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL0NT
U1ZhbHVlLmNwcAogICAgIGNzcy9DU1NWYWx1ZUxpc3QuY3BwCiAgICAgY3NzL0NTU1ZhbHVlUG9v
bC5jcHAKKyAgICBjc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAKICAgICBjc3MvRm9udEZlYXR1cmVW
YWx1ZS5jcHAKICAgICBjc3MvRm9udFZhbHVlLmNwcAogICAgIGNzcy9JbnNwZWN0b3JDU1NPTVdy
YXBwZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYWFlNWMzYjhlZWEx
ZTg0NGQ5YWEzNDQ4YWMzYjlkNzM5MDk1MGRhMi4uNTcxNTc1YTg1ODdiYWE0N2ZhZGI5NjU3NzA5
ZGZlMDRjMmZjYTg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yNjIwLDYg
KzI2MjAsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NW
YWx1ZVBvb2wuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlVmFsdWUuaCBcCiAJ
U291cmNlL1dlYkNvcmUvY3NzL0Rhc2hib2FyZFJlZ2lvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9j
c3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1
bGVTZXRzLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmVhdHVyZVZhbHVlLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGZWF0dXJlVmFsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUv
Y3NzL0ZvbnRWYWx1ZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNTI5M2NhZDU0Y2IxZmNhZTY4ZWRh
YzliYWNkMWVkNTk2MGIxNzBlMS4uOTRlNmUxYjk2ZTFhNzRiYWY1OTNhMjE0ZDJhMTgzNjM5Y2Fm
Nzk0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zMDcsNiArMzA3LDcgQEAgU09VUkNFUyArPSBcCiAgICAg
Y3NzL0NTU1ZhbHVlLmNwcCBcCiAgICAgY3NzL0NTU1ZhbHVlTGlzdC5jcHAgXAogICAgIGNzcy9D
U1NWYWx1ZVBvb2wuY3BwIFwKKyAgICBjc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAgXAogICAgIGNz
cy9Gb250RmVhdHVyZVZhbHVlLmNwcCBcCiAgICAgY3NzL0ZvbnRWYWx1ZS5jcHAgXAogICAgIGNz
cy9JbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNTYzMzkw
ZWU0ZjA0MzQxY2MzMGIxOTM0OWEwNjRmNDQ3MDA4MzNmMC4uMTZkMTM0ODQ5NWI1ZTU5ZTViNjc3
ODc1N2JhMmNiMjlmNGE0MmQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTU0NSw2ICsxNTQ1LDgg
QEAKICAgICAgICAgICAgICdjc3MvQ1NTVmFyaWFibGVWYWx1ZS5oJywKICAgICAgICAgICAgICdj
c3MvQ291bnRlci5oJywKICAgICAgICAgICAgICdjc3MvRGFzaGJvYXJkUmVnaW9uLmgnLAorICAg
ICAgICAgICAgJ2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcCcsCisgICAgICAgICAgICAnY3NzL0Rv
Y3VtZW50UnVsZVNldHMuaCcsCiAgICAgICAgICAgICAnY3NzL0ZvbnRGZWF0dXJlVmFsdWUuY3Bw
JywKICAgICAgICAgICAgICdjc3MvRm9udEZlYXR1cmVWYWx1ZS5oJywKICAgICAgICAgICAgICdj
c3MvRm9udFZhbHVlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzJhZmVmZGUxNTk1OTVhZDVlYzdhMzkzMDNhMWZlYTBl
YzY5YjlmNy4uMjI3MWE3NjYyNGM1ZTEyNmI1ZTFjNTkwNmI1ZWY4NmU2ZTAzZGY0NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTQzNyw2ICsxNDM3LDggQEAKIAkJNEExRTcxQTYxNEUxMDZBQzAwNjI2RjlEIC8qIEpTU2hhZG93
Um9vdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEEx
RTcxQTQxNEUxMDZBQzAwNjI2RjlEIC8qIEpTU2hhZG93Um9vdC5oICovOyB9OwogCQk0QTM4QkY1
MDE0RkUxQzA5MDA2MTI1MTIgLyogV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTM4QkY0RTE0RkUxQzA5MDA2
MTI1MTIgLyogV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAgKi87IH07CiAJCTRBMzhCRjUxMTRG
RTFDMDkwMDYxMjUxMiAvKiBXZWJTb2NrZXREZWZsYXRlRnJhbWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTM4QkY0RjE0RkUxQzA5MDA2MTI1MTIg
LyogV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5oICovOyB9OworCQk0QTRGNDhBOTE2QjBERkMwMDBF
REJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QTRGNDhBNzE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRS
dWxlU2V0cy5jcHAgKi87IH07CisJCTRBNEY0OEFBMTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVu
dFJ1bGVTZXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QTRGNDhBODE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5oICovOyB9Owog
CQk0QTVBMkFEQjE2MUU3RTAwMDA1ODg5REQgLyogV2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNUEyQUQ5
MTYxRTdFMDAwMDU4ODlERCAvKiBXZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuY3BwICovOyB9Owog
CQk0QTVBMkFEQzE2MUU3RTAwMDA1ODg5REQgLyogV2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTVBMkFEQTE2
MUU3RTAwMDA1ODg5REQgLyogV2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmggKi87IH07CiAJCTRB
NkEwQzVCMTUyMzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE2QTBDNTkxNTIz
MkYyNDAwQjA5QzZFIC8qIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAgKi87IH07CkBAIC04
ODE3LDYgKzg4MTksOCBAQAogCQk0QTFFNzFBNDE0RTEwNkFDMDA2MjZGOUQgLyogSlNTaGFkb3dS
b290LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2hhZG93Um9vdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTM4QkY0RTE0RkUxQzA5MDA2MTI1MTIgLyog
V2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBXZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNEEzOEJGNEYxNEZFMUMwOTAwNjEyNTEyIC8qIFdlYlNvY2tldERlZmxhdGVGcmFtZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViU29ja2V0RGVmbGF0ZUZyYW1l
ci5oOyBwYXRoID0gTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEE0RjQ4QTcxNkIwREZDMDAwRURCQjI5IC8q
IERvY3VtZW50UnVsZVNldHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRG9jdW1lbnRSdWxlU2V0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRB
NEY0OEE4MTZCMERGQzAwMEVEQkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvY3VtZW50UnVsZVNldHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNEE1QTJBRDkxNjFFN0UwMDAwNTg4OUREIC8qIFdlYlNvY2tldEV4dGVu
c2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJT
b2NrZXRFeHRlbnNpb25QYXJzZXIuY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldEV4dGVuc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRB
NUEyQURBMTYxRTdFMDAwMDU4ODlERCAvKiBXZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmg7
IHBhdGggPSBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBNkEwQzU5MTUyMzJGMjQwMEIwOUM2RSAvKiBD
b21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTIxODQyLDYgKzIxODQ2LDggQEAKIAkJCQlFNDlCRDlGOTEzMUZEMkVEMDAz
QzU2RjAgLyogQ1NTVmFsdWVQb29sLmggKi8sCiAJCQkJQ0FFOUY5MEUxNDY0NDFGMDAwQzI0NUIx
IC8qIENTU1ZhcmlhYmxlVmFsdWUuaCAqLywKIAkJCQlBODBFNkNFMTBBMTk4OUNBMDA3RkI4QzUg
LyogRGFzaGJvYXJkUmVnaW9uLmggKi8sCisJCQkJNEE0RjQ4QTcxNkIwREZDMDAwRURCQjI5IC8q
IERvY3VtZW50UnVsZVNldHMuY3BwICovLAorCQkJCTRBNEY0OEE4MTZCMERGQzAwMEVEQkIyOSAv
KiBEb2N1bWVudFJ1bGVTZXRzLmggKi8sCiAJCQkJNEE2RTlGQzExM0MxN0QxRDAwNDZBN0Y4IC8q
IEZvbnRGZWF0dXJlVmFsdWUuY3BwICovLAogCQkJCTRBNkU5RkMyMTNDMTdEMUQwMDQ2QTdGOCAv
KiBGb250RmVhdHVyZVZhbHVlLmggKi8sCiAJCQkJQTgwRTZDQzcwQTE5ODlDQTAwN0ZCOEM1IC8q
IEZvbnRWYWx1ZS5jcHAgKi8sCkBAIC0yMzQxOCw2ICsyMzQyNCw3IEBACiAJCQkJQ0UwNTdGQTYx
MjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQ5NDdGRkUxMkY4MENEMjAwQTBGNjMxIC8qIERvY3VtZW50T3JkZXJlZE1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRkJBRTgwQjUxNTJFRDAwMDFGMUQ3IC8qIERvY3VtZW50
UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0QTRGNDhBQTE2QjBERkMwMDBFREJCMjkgLyog
RG9jdW1lbnRSdWxlU2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ2RTcxQUQxNjY4ODk5RDAw
MzIwQzEzIC8qIERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZCIC8qIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBCOTA1NjFBMEYyNTc4QkYwMDk1RkY2QSAvKiBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjcwNjEsNiArMjcwNjgsNyBA
QAogCQkJCUNFMDU3RkE1MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NDdGRkQxMkY4MENEMjAwQTBGNjMxIC8qIERv
Y3VtZW50T3JkZXJlZE1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEMyMjgwRTExRDRBNTk3
MDBENUE3RDMgLyogRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEE0RjQ4
QTkxNkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQUQ2RTcxQUMxNjY4ODk5RDAwMzIwQzEzIC8qIERvY3VtZW50U2hhcmVkT2JqZWN0UG9v
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDdFMjc2ODE2MDM2RURDMDBFRTJBRkIgLyogRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwQjkwNTYx
OTBGMjU3OEJFMDA5NUZGNkEgLyogRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKaW5kZXggYzgxYzNiMjFmOThkOTZk
MTQzYzkyY2JhZWMxMzkwODVjYWRmMGYxYS4uZTczZTM1OGIyNzA5NDA4N2ExODk2YmE2YzEwNjRi
NTM2ZjU1NjEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCkBAIC02OSw2ICs2OSw3
IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWUuY3BwIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5jcHAi
CiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmNwcCIKKyNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRz
LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNwcCIKICNpbmNsdWRlICJS
dWxlRmVhdHVyZS5jcHAiCiAjaW5jbHVkZSAiUnVsZVNldC5jcHAiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
RG9jdW1lbnRSdWxlU2V0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDA1OTdjYjU3ZDcwMzE0ODg4OTVhOTli
MmE1NDQ5NjQ1MGZiMTZiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9E
b2N1bWVudFJ1bGVTZXRzLmNwcApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA0
LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29t
KQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAy
MDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29k
ZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuaCIKKworI2luY2x1ZGUg
IkNTU0RlZmF1bHRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNp
bmNsdWRlICJEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFR
dWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJT
dHlsZVNoZWV0Q29udGVudHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEb2N1bWVudFJ1
bGVTZXRzOjpEb2N1bWVudFJ1bGVTZXRzKCkKK3sKK30KKworRG9jdW1lbnRSdWxlU2V0czo6fkRv
Y3VtZW50UnVsZVNldHMoKQoreworfQorCit2b2lkIERvY3VtZW50UnVsZVNldHM6OmluaXRVc2Vy
U3R5bGUoRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiogc3R5bGVTaGVldENvbGxlY3Rpb24s
IGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVSZXNvbHZlciYgcmVzb2x2
ZXIpCit7CisgICAgT3duUHRyPFJ1bGVTZXQ+IHRlbXBVc2VyU3R5bGUgPSBSdWxlU2V0OjpjcmVh
dGUoKTsKKyAgICBpZiAoQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCA9IHN0eWxlU2hlZXRD
b2xsZWN0aW9uLT5wYWdlVXNlclNoZWV0KCkpCisgICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCksIG1lZGl1bSwgJnJlc29sdmVy
KTsKKyAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRDb2xsZWN0
aW9uLT5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpLCAqdGVtcFVzZXJTdHlsZSwgbWVkaXVtLCBy
ZXNvbHZlcik7CisgICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhzdHlsZVNoZWV0
Q29sbGVjdGlvbi0+ZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSwgKnRlbXBVc2VyU3R5bGUsIG1l
ZGl1bSwgcmVzb2x2ZXIpOworICAgIGlmICh0ZW1wVXNlclN0eWxlLT5tX3J1bGVDb3VudCA+IDAg
fHwgdGVtcFVzZXJTdHlsZS0+bV9wYWdlUnVsZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgbV91c2Vy
U3R5bGUgPSB0ZW1wVXNlclN0eWxlLnJlbGVhc2UoKTsKK30KKwordm9pZCBEb2N1bWVudFJ1bGVT
ZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8
Q1NTU3R5bGVTaGVldD4gPiYgdXNlclNoZWV0cywgUnVsZVNldCYgdXNlclN0eWxlLCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIFN0eWxlUmVzb2x2ZXImIHJlc29sdmVyKQorewor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VyU2hlZXRzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIEFTU0VSVCh1c2VyU2hlZXRzW2ldLT5jb250ZW50cygpLT5pc1VzZXJTdHlsZVNoZWV0
KCkpOworICAgICAgICB1c2VyU3R5bGUuYWRkUnVsZXNGcm9tU2hlZXQodXNlclNoZWV0c1tpXS0+
Y29udGVudHMoKSwgbWVkaXVtLCAmcmVzb2x2ZXIpOworICAgIH0KK30KKworc3RhdGljIFBhc3NP
d25QdHI8UnVsZVNldD4gbWFrZVJ1bGVTZXQoY29uc3QgVmVjdG9yPFJ1bGVGZWF0dXJlPiYgcnVs
ZXMpCit7CisgICAgc2l6ZV90IHNpemUgPSBydWxlcy5zaXplKCk7CisgICAgaWYgKCFzaXplKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldCA9IFJ1
bGVTZXQ6OmNyZWF0ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQor
ICAgICAgICBydWxlU2V0LT5hZGRSdWxlKHJ1bGVzW2ldLnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9y
SW5kZXgsIHJ1bGVzW2ldLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiA6IFJ1bGVIYXNOb1NwZWNpYWxTdGF0ZSk7CisgICAgcnVsZVNldC0+
c2hyaW5rVG9GaXQoKTsKKyAgICByZXR1cm4gcnVsZVNldC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQg
RG9jdW1lbnRSdWxlU2V0czo6cmVzZXRBdXRob3JTdHlsZSgpCit7CisgICAgbV9hdXRob3JTdHls
ZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIG1fYXV0aG9yU3R5bGUtPmRpc2FibGVBdXRvU2hy
aW5rVG9GaXQoKTsKK30KKwordm9pZCBEb2N1bWVudFJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHls
ZVNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiA+JiBzdHlsZVNoZWV0cywgTWVkaWFRdWVyeUV2YWx1YXRvciogbWVkaXVtLCBJbnNwZWN0
b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzLCBib29sIGlzVmlld1NvdXJj
ZSwgU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIpCit7CisgICAgLy8gVGhpcyBoYW5kbGVzIHNoZWV0
cyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzdHlsZXNoZWV0IGxpc3Qgb25seS4gSW4gb3RoZXIg
Y2FzZXMgdGhlIHN0eWxlIHJlc29sdmVyCisgICAgLy8gbmVlZHMgdG8gYmUgcmVjb25zdHJ1Y3Rl
ZC4gVG8gaGFuZGxlIGluc2VydGlvbnMgdG9vIHRoZSBydWxlIG9yZGVyIG51bWJlcnMgd291bGQg
bmVlZCB0byBiZSB1cGRhdGVkLgorICAgIHVuc2lnbmVkIHNpemUgPSBzdHlsZVNoZWV0cy5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3ROZXc7IGkgPCBzaXplOyArK2kpIHsKKyAg
ICAgICAgQ1NTU3R5bGVTaGVldCogY3NzU2hlZXQgPSBzdHlsZVNoZWV0c1tpXS5nZXQoKTsKKyAg
ICAgICAgQVNTRVJUKCFjc3NTaGVldC0+ZGlzYWJsZWQoKSk7CisgICAgICAgIGlmIChjc3NTaGVl
dC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1lZGl1bS0+ZXZhbChjc3NTaGVldC0+bWVkaWFRdWVyaWVz
KCksIHJlc29sdmVyKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBTdHlsZVNoZWV0
Q29udGVudHMqIHNoZWV0ID0gY3NzU2hlZXQtPmNvbnRlbnRzKCk7CisjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCisgICAgICAgIGlmIChjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSA9IFN0eWxlU2NvcGVSZXNvbHZlcjo6c2NvcGVGb3IoY3NzU2hlZXQpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIGEgZGVwZW5kZW5jeSB0byBjYWxsaW5nIGEg
U3R5bGVSZXNvbHZlcidzIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgICAgIC8vIElmIHdlIGNh
biBhdm9pZCBjYWxsaW5nIHJlc29sdmVyLT5lbnN1cmVTY29wZVJlc29sdmVyKCkgaGVyZSwgd2Ug
ZG9uJ3QgaGF2ZSB0byBpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiLgorICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODg5MAorICAgICAgICAg
ICAgcmVzb2x2ZXItPmVuc3VyZVNjb3BlUmVzb2x2ZXIoKS0+ZW5zdXJlUnVsZVNldEZvcihzY29w
ZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbWVkaXVtLCByZXNvbHZlciwgc2NvcGUpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBtX2F1dGhv
clN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1lZGl1bSwgcmVzb2x2ZXIpOworICAg
ICAgICBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNvbGxlY3RGcm9tU3R5bGVTaGVldElmTmVlZGVk
KGNzc1NoZWV0KTsKKyAgICB9CisgICAgbV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsKKyAg
ICBjb2xsZWN0RmVhdHVyZXMoaXNWaWV3U291cmNlLCByZXNvbHZlci0+c2NvcGVSZXNvbHZlcigp
KTsKK30KKwordm9pZCBEb2N1bWVudFJ1bGVTZXRzOjpjb2xsZWN0RmVhdHVyZXMoYm9vbCBpc1Zp
ZXdTb3VyY2UsIFN0eWxlU2NvcGVSZXNvbHZlciogc2NvcGVSZXNvbHZlcikKK3sKKyAgICBtX2Zl
YXR1cmVzLmNsZWFyKCk7CisgICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2luZyBz
aWJsaW5nIHNlbGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQorICAgIC8vIGluIHRo
ZSBjdXJyZW50IHNldCBvZiBzdHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhp
cyBpbmZvcm1hdGlvbiB0byByZWplY3QKKyAgICAvLyBzaGFyaW5nIGNhbmRpZGF0ZXMuCisgICAg
aWYgKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFN0eWxlKQorICAgICAgICBtX2ZlYXR1
cmVzLmFkZChDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKSk7
CisgICAgaWYgKG1fYXV0aG9yU3R5bGUpCisgICAgICAgIG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9y
U3R5bGUtPmZlYXR1cmVzKCkpOworICAgIGlmIChpc1ZpZXdTb3VyY2UpCisgICAgICAgIG1fZmVh
dHVyZXMuYWRkKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6dmlld1NvdXJjZVN0eWxlKCktPmZlYXR1
cmVzKCkpOworCisgICAgaWYgKHNjb3BlUmVzb2x2ZXIpCisgICAgICAgIHNjb3BlUmVzb2x2ZXIt
PmNvbGxlY3RGZWF0dXJlc1RvKG1fZmVhdHVyZXMpOworICAgIGlmIChtX3VzZXJTdHlsZSkKKyAg
ICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOworCisgICAgbV9z
aWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKTsKKyAg
ICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMudW5j
b21tb25BdHRyaWJ1dGVSdWxlcyk7Cit9CisKK3ZvaWQgRG9jdW1lbnRSdWxlU2V0czo6cmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3sK
KyAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3Jl
TWVtb3J5VHlwZXM6OkNTUyk7CisgICAgaW5mby5hZGRNZW1iZXIobV9hdXRob3JTdHlsZSk7Cisg
ICAgaW5mby5hZGRNZW1iZXIobV91c2VyU3R5bGUpOworICAgIGluZm8uYWRkTWVtYmVyKG1fZmVh
dHVyZXMpOworICAgIGluZm8uYWRkTWVtYmVyKG1fc2libGluZ1J1bGVTZXQpOworICAgIGluZm8u
YWRkTWVtYmVyKG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNl
dHMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDZhNTBmYzQ1Mzk4YzlkM2RjNTU3MmJmOGNkOWJlZDhjZmM5ODM2YgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmgKQEAgLTAsMCArMSw3MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQor
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBE
b2N1bWVudFJ1bGVTZXRzX2gKKyNkZWZpbmUgRG9jdW1lbnRSdWxlU2V0c19oCisKKyNpbmNsdWRl
ICJSdWxlRmVhdHVyZS5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ1NTU3R5bGVSdWxlOworY2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNzIERv
Y3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb247CitjbGFzcyBJbnNwZWN0b3JDU1NPTVdyYXBwZXJz
OworY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvcjsKK2NsYXNzIFJ1bGVTZXQ7CitjbGFzcyBTdHls
ZVJlc29sdmVyOworY2xhc3MgU3R5bGVTY29wZVJlc29sdmVyOworCitjbGFzcyBEb2N1bWVudFJ1
bGVTZXRzIHsKK3B1YmxpYzoKKyAgICBEb2N1bWVudFJ1bGVTZXRzKCk7CisgICAgfkRvY3VtZW50
UnVsZVNldHMoKTsKKyAgICBSdWxlU2V0KiBhdXRob3JTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YXV0aG9yU3R5bGUuZ2V0KCk7IH0KKyAgICBSdWxlU2V0KiB1c2VyU3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3VzZXJTdHlsZS5nZXQoKTsgfQorICAgIFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcygp
IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KKyAgICBjb25zdCBSdWxlRmVhdHVyZVNldCYgZmVhdHVy
ZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CisgICAgUnVsZVNldCogc2libGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fc2libGluZ1J1bGVTZXQuZ2V0KCk7IH0KKyAgICBSdWxlU2V0KiB1
bmNvbW1vbkF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5jb21tb25BdHRyaWJ1dGVSdWxl
U2V0LmdldCgpOyB9CisKKyAgICB2b2lkIGluaXRVc2VyU3R5bGUoRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbiosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBTdHlsZVJlc29sdmVyJik7
CisgICAgdm9pZCByZXNldEF1dGhvclN0eWxlKCk7CisgICAgdm9pZCBhcHBlbmRBdXRob3JTdHls
ZVNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiA+JiwgTWVkaWFRdWVyeUV2YWx1YXRvciosIEluc3BlY3RvckNTU09NV3JhcHBlcnMmLCBi
b29sIGlzVmlld1NvdXJjZSwgU3R5bGVSZXNvbHZlciopOworCisgICAgdm9pZCBjb2xsZWN0RmVh
dHVyZXMoYm9vbCBpc1ZpZXdTb3VyY2UsIFN0eWxlU2NvcGVSZXNvbHZlciopOworICAgIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OworCitwcml2YXRlOgor
ICAgIHZvaWQgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+ID4mLCBSdWxlU2V0JiB1c2VyU3R5bGUsIGNvbnN0IE1lZGlhUXVl
cnlFdmFsdWF0b3ImLCBTdHlsZVJlc29sdmVyJik7CisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0
aG9yU3R5bGU7CisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxlOworICAgIFJ1bGVGZWF0
dXJlU2V0IG1fZmVhdHVyZXM7CisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVTZXQ7
CisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRG9jdW1lbnRSdWxlU2V0c19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMTgyOTBmMzg1NjQ4OTUzNzZlNTg5
NmFjYTI0MGE4MDA3NzI2MjczYy4uOTcwNTAwYzZmMWFmNDE5ZjlhM2NhYmY0YmVhNzA3NzE2OWQ4
OTkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMjU5LDE2ICsyNTks
MTAgQEAgU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCogZG9jdW1lbnQsIGJv
b2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQogICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUg
JiYgdmlldykKICAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1
YXRvcih2aWV3LT5tZWRpYVR5cGUoKSwgdmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxl
LmdldCgpKSk7CiAKLSAgICByZXNldEF1dGhvclN0eWxlKCk7CisgICAgbV9ydWxlU2V0cy5yZXNl
dEF1dGhvclN0eWxlKCk7CiAKICAgICBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKiBzdHls
ZVNoZWV0Q29sbGVjdGlvbiA9IGRvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpOwotICAg
IE93blB0cjxSdWxlU2V0PiB0ZW1wVXNlclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAg
aWYgKENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQgPSBzdHlsZVNoZWV0Q29sbGVjdGlvbi0+
cGFnZVVzZXJTaGVldCgpKQotICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVl
dChwYWdlVXNlclNoZWV0LT5jb250ZW50cygpLCAqbV9tZWRpdW0sIHRoaXMpOwotICAgIGNvbGxl
Y3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxlY3Rpb24tPmluamVjdGVk
VXNlclN0eWxlU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsKLSAgICBjb2xsZWN0UnVsZXNGcm9t
VXNlclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRDb2xsZWN0aW9uLT5kb2N1bWVudFVzZXJTdHlsZVNo
ZWV0cygpLCAqdGVtcFVzZXJTdHlsZSk7Ci0gICAgaWYgKHRlbXBVc2VyU3R5bGUtPm1fcnVsZUNv
dW50ID4gMCB8fCB0ZW1wVXNlclN0eWxlLT5tX3BhZ2VSdWxlcy5zaXplKCkgPiAwKQotICAgICAg
ICBtX3VzZXJTdHlsZSA9IHRlbXBVc2VyU3R5bGUucmVsZWFzZSgpOworICAgIG1fcnVsZVNldHMu
aW5pdFVzZXJTdHlsZShzdHlsZVNoZWV0Q29sbGVjdGlvbiwgKm1fbWVkaXVtLCAqdGhpcyk7CiAK
ICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGlmIChkb2N1bWVudC0+c3ZnRXh0ZW5zaW9ucygp
KSB7CkBAIC0yODIsNTYgKzI3Niw5IEBAIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9j
dW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKICAgICBhcHBl
bmRBdXRob3JTdHlsZVNoZWV0cygwLCBzdHlsZVNoZWV0Q29sbGVjdGlvbi0+YWN0aXZlQXV0aG9y
U3R5bGVTaGVldHMoKSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdFJ1bGVzRnJv
bVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHVz
ZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdXNlclNoZWV0cy5zaXplKCk7ICsraSkgewotICAgICAgICBBU1NFUlQodXNlclNoZWV0
c1tpXS0+Y29udGVudHMoKS0+aXNVc2VyU3R5bGVTaGVldCgpKTsKLSAgICAgICAgdXNlclN0eWxl
LmFkZFJ1bGVzRnJvbVNoZWV0KHVzZXJTaGVldHNbaV0tPmNvbnRlbnRzKCksICptX21lZGl1bSwg
dGhpcyk7Ci0gICAgfQotfQotCi1zdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNl
dChjb25zdCBWZWN0b3I8UnVsZUZlYXR1cmU+JiBydWxlcykKLXsKLSAgICBzaXplX3Qgc2l6ZSA9
IHJ1bGVzLnNpemUoKTsKLSAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIE93blB0cjxSdWxlU2V0PiBydWxlU2V0ID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUo
cnVsZXNbaV0ucnVsZSwgcnVsZXNbaV0uc2VsZWN0b3JJbmRleCwgcnVsZXNbaV0uaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogUnVsZUhh
c05vU3BlY2lhbFN0YXRlKTsKLSAgICBydWxlU2V0LT5zaHJpbmtUb0ZpdCgpOwotICAgIHJldHVy
biBydWxlU2V0LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNldEF1dGhv
clN0eWxlKCkKLXsKLSAgICBtX2F1dGhvclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAg
bV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOwotfQotCiB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25z
dCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHN0eWxlU2hlZXRzKQogewotICAgIC8v
IFRoaXMgaGFuZGxlcyBzaGVldHMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3R5bGVzaGVldCBs
aXN0IG9ubHkuIEluIG90aGVyIGNhc2VzIHRoZSBzdHlsZSByZXNvbHZlcgotICAgIC8vIG5lZWRz
IHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhhbmRsZSBpbnNlcnRpb25zIHRvbyB0aGUgcnVsZSBv
cmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZC4KLSAgICB1bnNpZ25lZCBzaXpl
ID0gc3R5bGVTaGVldHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0TmV3OyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIENTU1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0gc3R5bGVT
aGVldHNbaV0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghY3NzU2hlZXQtPmRpc2FibGVkKCkpOwot
ICAgICAgICBpZiAoY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpICYmICFtX21lZGl1bS0+ZXZhbChj
c3NTaGVldC0+bWVkaWFRdWVyaWVzKCksIHRoaXMpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQgPSBjc3NTaGVldC0+Y29udGVudHMoKTsK
LSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKLSAgICAgICAg
aWYgKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gU3R5bGVTY29wZVJlc29sdmVyOjpzY29w
ZUZvcihjc3NTaGVldCkpIHsKLSAgICAgICAgICAgIGVuc3VyZVNjb3BlUmVzb2x2ZXIoKS0+ZW5z
dXJlUnVsZVNldEZvcihzY29wZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0s
IHRoaXMsIHNjb3BlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYK
LQotICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVk
aXVtLCB0aGlzKTsKLSAgICAgICAgbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNvbGxlY3RGcm9t
U3R5bGVTaGVldElmTmVlZGVkKGNzc1NoZWV0KTsKLSAgICB9Ci0gICAgbV9hdXRob3JTdHlsZS0+
c2hyaW5rVG9GaXQoKTsKLSAgICBjb2xsZWN0RmVhdHVyZXMoKTsKLSAgICAKKyAgICBtX3J1bGVT
ZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGZpcnN0TmV3LCBzdHlsZVNoZWV0cywgbV9tZWRp
dW0uZ2V0KCksIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVycywgZG9jdW1lbnQoKS0+aXNWaWV3U291
cmNlKCksIHRoaXMpOwogICAgIGlmIChkb2N1bWVudCgpLT5yZW5kZXJlcigpICYmIGRvY3VtZW50
KCktPnJlbmRlcmVyKCktPnN0eWxlKCkpCiAgICAgICAgIGRvY3VtZW50KCktPnJlbmRlcmVyKCkt
PnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogCkBAIC02MzksNyArNTg2
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiBy
ZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
TWF0Y2ggZ2xvYmFsIGF1dGhvciBydWxlcy4KLSAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0
KG1fYXV0aG9yU3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBNYXRjaFJlcXVl
c3QgbWF0Y2hSZXF1ZXN0KG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKSwgaW5jbHVkZUVtcHR5UnVs
ZXMpOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVS
YW5nZSgpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdl
KTsKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtYXRjaFJlcXVlc3QsIHJ1bGVS
YW5nZSk7CkBAIC02NTAsMTMgKzU5NywxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0
aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogCiB2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7Ci0gICAgaWYgKCFtX3VzZXJTdHlsZSkKKyAgICBpZiAo
IW1fcnVsZVNldHMudXNlclN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBtX3N0
YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOwogCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1
bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKLSAgICBNYXRjaFJlcXVl
c3QgbWF0Y2hSZXF1ZXN0KG1fdXNlclN0eWxlLmdldCgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7Cisg
ICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLCBpbmNs
dWRlRW1wdHlSdWxlcyk7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMu
dXNlclJ1bGVSYW5nZSgpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwg
cnVsZVJhbmdlKTsKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtYXRjaFJlcXVl
c3QsIHJ1bGVSYW5nZSk7CkBAIC03OTIsNyArNzM5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpt
YXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0
aWUKIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBT
cGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzKSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjbGFzc05hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2ZlYXR1
cmVzLmNsYXNzZXNJblJ1bGVzLmNvbnRhaW5zKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSkKKyAgICAg
ICAgaWYgKG1fcnVsZVNldHMuZmVhdHVyZXMoKS5jbGFzc2VzSW5SdWxlcy5jb250YWlucyhjbGFz
c05hbWVzW2ldLmltcGwoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtODY3LDcgKzgxNCw3IEBAIE5vZGUqIFN0eWxlUmVzb2x2ZXI6Omxv
Y2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3Vu
CiAgICAgaWYgKHAtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihw
KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJldHVybiAwOwogI2Vu
ZGlmCi0gICAgaWYgKHAtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5z
KHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAocC0+aGFzSUQoKSAm
JiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhwLT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gcC0+cmVuZGVyU3R5bGUoKTsKQEAgLTEwNDksNyArOTk2LDcgQEAg
Ym9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlv
bkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChlbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVt
ZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgaWYgKGVsZW1lbnQtPmhh
c0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVu
dC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKGVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTExMzIsNyArMTA3OSw3IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29s
dmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAgICAg
Ly8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hl
ZXRzLgotICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMu
aWRzSW5SdWxlcy5jb250YWlucyhzdGF0ZS5zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1
dGlvbigpLmltcGwoKSkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmhhc0lEKCkgJiYg
bV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVkRWxl
bWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gMDsK
ICAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50LT5wYXJl
bnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTExNjQsMTAgKzExMTEsMTAgQEAg
UmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiBU
aGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVuZCBhcyBpdCBzaG91bGQgcmFyZWx5IGZhaWwuCi0gICAg
aWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1fc2libGluZ1J1bGVTZXQu
Z2V0KCkpKQorICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3J1
bGVTZXRzLnNpYmxpbmcoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIENhbid0IHNoYXJl
IGlmIGF0dHJpYnV0ZSBydWxlcyBhcHBseS4KLSAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc1J1bGVTZXQobV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0KCkpKQorICAgIGlm
IChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3J1bGVTZXRzLnVuY29tbW9u
QXR0cmlidXRlKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBA
aG9zdCBALXJ1bGVzIGFwcGx5LgogICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVz
SG9zdFJ1bGVzKCkpCkBAIC0xNDM2LDcgKzEzODMsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVy
UwogICAgIGJvb2wgbmVlZHNDb2xsZWN0aW9uID0gZmFsc2U7CiAgICAgQ1NTRGVmYXVsdFN0eWxl
U2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KGVsZW1lbnQsIG5lZWRz
Q29sbGVjdGlvbik7CiAgICAgaWYgKG5lZWRzQ29sbGVjdGlvbikKLSAgICAgICAgY29sbGVjdEZl
YXR1cmVzKCk7CisgICAgICAgIG1fcnVsZVNldHMuY29sbGVjdEZlYXR1cmVzKGRvY3VtZW50KCkt
PmlzVmlld1NvdXJjZSgpLCBtX3Njb3BlUmVzb2x2ZXIuZ2V0KCkpOwogCiAgICAgTWF0Y2hSZXN1
bHQgbWF0Y2hSZXN1bHQ7CiAgICAgaWYgKG1hdGNoaW5nQmVoYXZpb3IgPT0gTWF0Y2hPbmx5VXNl
ckFnZW50UnVsZXMpCkBAIC0xNjM3LDkgKzE1ODQsOSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICAKICAgICBN
YXRjaFJlc3VsdCByZXN1bHQ7CiAgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBDU1NEZWZhdWx0
U3R5bGVTaGVldHM6OmRlZmF1bHRQcmludFN0eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwot
ICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNG
aXJzdCwgcGFnZSk7CisgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3J1bGVTZXRzLnVzZXJT
dHlsZSgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwogICAgIC8vIE9ubHkgY29uc2lkZXIgdGhl
IGdsb2JhbCBhdXRob3IgUnVsZVNldCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUg
c3BlYy4KLSAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlz
TGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3J1bGVT
ZXRzLmF1dGhvclN0eWxlKCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgbV9zdGF0ZS5s
aW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwogI2lm
IEVOQUJMRShDU1NfVkFSSUFCTEVTKQpAQCAtMjAwOSwxOCArMTk1NiwxOCBAQCBib29sIFN0eWxl
UmVzb2x2ZXI6OmNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogcmVnaW9uRWxlbWVudCkKICAgICAv
LyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0LXJlZ2lvbiBydWxlcyBv
ZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LAogICAgIC8vIHNvIGFsbCByZWdp
b24gcnVsZXMgYXJlIGdsb2JhbCBieSBkZWZhdWx0LiBWZXJpZnkgd2hldGhlciB0aGF0IGNhbiBz
dGFuZCBvciBuZWVkcyBjaGFuZ2luZy4KIAotICAgIHVuc2lnbmVkIHJ1bGVzU2l6ZSA9IG1fYXV0
aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOworICAgIHVuc2ln
bmVkIHJ1bGVzU2l6ZSA9IG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKS0+bV9yZWdpb25TZWxlY3Rv
cnNBbmRSdWxlU2V0cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVz
U2l6ZTsgKytpKSB7Ci0gICAgICAgIEFTU0VSVChtX2F1dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVj
dG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOwotICAgICAgICBpZiAoY2hlY2tS
ZWdpb25TZWxlY3RvcihtX2F1dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRz
LmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50KSkKKyAgICAgICAgQVNTRVJUKG1fcnVsZVNl
dHMuYXV0aG9yU3R5bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxl
U2V0LmdldCgpKTsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IobV9ydWxlU2V0cy5h
dXRob3JTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9y
LCByZWdpb25FbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IGlmIChtX3VzZXJTdHlsZSkgewotICAgICAgICBydWxlc1NpemUgPSBtX3VzZXJTdHlsZS0+bV9y
ZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CisgICAgaWYgKG1fcnVsZVNldHMudXNl
clN0eWxlKCkpIHsKKyAgICAgICAgcnVsZXNTaXplID0gbV9ydWxlU2V0cy51c2VyU3R5bGUoKS0+
bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBydWxlc1NpemU7ICsraSkgewotICAgICAgICAgICAgQVNTRVJUKG1fdXNl
clN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkp
OwotICAgICAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IobV91c2VyU3R5bGUtPm1fcmVn
aW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQor
ICAgICAgICAgICAgQVNTRVJUKG1fcnVsZVNldHMudXNlclN0eWxlKCktPm1fcmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY2hl
Y2tSZWdpb25TZWxlY3RvcihtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9y
c0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4ODQsNyArMjgzMSw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50
KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwogICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyBy
ZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5
bGUKLSAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKGF0dHIu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ydWxlU2V0cy5mZWF0
dXJlcygpLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLT5pc0NvdW50ZXIoKSkgewogICAgICAg
ICAgICAgICAgICAgICBDb3VudGVyKiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFsdWUtPmdldENv
dW50ZXJWYWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBFTGlzdFN0eWxlVHlwZSBsaXN0U3R5
bGVUeXBlID0gTm9uZUxpc3RTdHlsZTsKQEAgLTUxNjYsMjggKzUxMTMsNiBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3VyY2VzKCkKICNlbmRpZgogfQogCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygpCi17Ci0gICAgbV9mZWF0dXJlcy5jbGVhcigpOwot
ICAgIC8vIENvbGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2libGluZyBzZWxlY3RvcnMg
KDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxhcikKLSAgICAvLyBpbiB0aGUgY3VycmVudCBzZXQgb2Yg
c3R5bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8g
cmVqZWN0Ci0gICAgLy8gc2hhcmluZyBjYW5kaWRhdGVzLgotICAgIGlmIChDU1NEZWZhdWx0U3R5
bGVTaGVldHM6OmRlZmF1bHRTdHlsZSkKLSAgICAgICAgbV9mZWF0dXJlcy5hZGQoQ1NTRGVmYXVs
dFN0eWxlU2hlZXRzOjpkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkpOwotICAgIGlmIChtX2F1dGhv
clN0eWxlKQotICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX2F1dGhvclN0eWxlLT5mZWF0dXJlcygp
KTsKLSAgICBpZiAoZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCkpCi0gICAgICAgIG1fZmVhdHVy
ZXMuYWRkKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6dmlld1NvdXJjZVN0eWxlKCktPmZlYXR1cmVz
KCkpOwotCi0gICAgaWYgKG1fc2NvcGVSZXNvbHZlcikKLSAgICAgICAgbV9zY29wZVJlc29sdmVy
LT5jb2xsZWN0RmVhdHVyZXNUbyhtX2ZlYXR1cmVzKTsKLSAgICBpZiAobV91c2VyU3R5bGUpCi0g
ICAgICAgIG1fZmVhdHVyZXMuYWRkKG1fdXNlclN0eWxlLT5mZWF0dXJlcygpKTsKLQotICAgIG1f
c2libGluZ1J1bGVTZXQgPSBtYWtlUnVsZVNldChtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcyk7Ci0g
ICAgbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQgPSBtYWtlUnVsZVNldChtX2ZlYXR1cmVzLnVu
Y29tbW9uQXR0cmlidXRlUnVsZXMpOwotfQotCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQ
cm9wZXJ0aWVzOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdElu
Zm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKQEAgLTUyMTIsMTEgKzUxMzcsNyBA
QCB2b2lkIE1lZGlhUXVlcnlSZXN1bHQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdElu
Zm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbgogdm9pZCBTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAg
IE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1v
cnlUeXBlczo6Q1NTKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2F1dGhvclN0eWxlLCAiYXV0aG9y
U3R5bGUiKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3VzZXJTdHlsZSwgInVzZXJTdHlsZSIpOwot
ICAgIGluZm8uYWRkTWVtYmVyKG1fZmVhdHVyZXMsICJmZWF0dXJlcyIpOwotICAgIGluZm8uYWRk
TWVtYmVyKG1fc2libGluZ1J1bGVTZXQsICJzaWJsaW5nUnVsZVNldCIpOwotICAgIGluZm8uYWRk
TWVtYmVyKG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LCAidW5jb21tb25BdHRyaWJ1dGVSdWxl
U2V0Iik7CisgICAgaW5mby5hZGRNZW1iZXIobV9ydWxlU2V0cywgInJ1bGVTZXRzIik7CiAgICAg
aW5mby5hZGRNZW1iZXIobV9rZXlmcmFtZXNSdWxlTWFwLCAia2V5ZnJhbWVzUnVsZU1hcCIpOwog
ICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZSwgIm1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUiKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX21hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGVTd2VlcFRpbWVyLCAibWF0Y2hlZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIiKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IDg0YzNjZDFmYzAzN2RhYjBkZmQ3NWE4ZmZkN2Q4
YjlhNWM0OTczZjguLmU4Y2EzYzA3ZDNkMTIwMDQzOGZiMzljOWUwMjk1MGUyYjM4MTRkZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
IkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgogI2luY2x1ZGUgIkNT
U1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JDU1NPTVdyYXBwZXJzLmgiCiAjaW5jbHVkZSAiTGlua0hhc2guaCIKICNpbmNsdWRl
ICJNZWRpYVF1ZXJ5RXhwLmgiCkBAIC0xNjksNiArMTcwLDcgQEAgcHVibGljOgogICAgIFJlbmRl
clN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxl
bWVudFN0eWxlOyB9CiAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuZWxlbWVudDsgfQogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZG9jdW1lbnQ7IH0KKyAgICBTdHlsZVNjb3BlUmVzb2x2ZXIqIHNjb3BlUmVzb2x2ZXIoKSBjb25z
dCB7IHJldHVybiBtX3Njb3BlUmVzb2x2ZXIuZ2V0KCk7IH0KICAgICBjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlwdGlv
bigpOyB9CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24o
KSB7IHJldHVybiBwYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQogICAgIHZvaWQg
c2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOyB9CkBAIC0xNzksMTAgKzE4MSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX3N0
YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0
aW9uKTsgfQogICAgIGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
cGFyZW50Tm9kZTsgfQogCi0gICAgdm9pZCByZXNldEF1dGhvclN0eWxlKCk7CisgICAgLy8gRklY
TUU6IEl0IGNvdWxkIGJlIGJldHRlciB0byBjYWxsIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5
bGVTaGVldHMoKSBkaXJlY3RseSBhZnRlciB3ZSBmYWN0b3IgU3R5bGVSc29sdmVyIGZ1cnRoZXIu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODg5MAog
ICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYpOwogCi1wcml2YXRlOgorICAgIERvY3Vt
ZW50UnVsZVNldHMmIHJ1bGVTZXRzKCkgeyByZXR1cm4gbV9ydWxlU2V0czsgfQorICAgIGNvbnN0
IERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlU2V0czsg
fQorCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCiAgICAg
U3R5bGVTY29wZVJlc29sdmVyKiBlbnN1cmVTY29wZVJlc29sdmVyKCkKICAgICB7CkBAIC0yMDEs
OSArMjA2LDkgQEAgcHJpdmF0ZToKICAgICB9CiAjZW5kaWYKIAorcHJpdmF0ZToKICAgICB2b2lk
IGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwogICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCop
OwotICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNo
YXJlZFN0eWxlKCk7CiAgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNl
dChSdWxlU2V0Kik7CiAgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1
bGVzKCk7CkBAIC0yNzEsOSArMjc2LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja1JlZ2lv
blN0eWxlKEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwogCi0gICAgYm9vbCB1c2VzU2libGluZ1J1
bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmVhdHVyZXMuc2libGluZ1J1bGVzLmlzRW1wdHkoKTsg
fQotICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJl
cy51c2VzRmlyc3RMaW5lUnVsZXM7IH0KLSAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzQmVmb3JlQWZ0ZXJSdWxlczsgfQorICAgIGJv
b2wgdXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0IHsgcmV0dXJuICFtX3J1bGVTZXRzLmZlYXR1cmVz
KCkuc2libGluZ1J1bGVzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVz
KCkgY29uc3QgeyByZXR1cm4gbV9ydWxlU2V0cy5mZWF0dXJlcygpLnVzZXNGaXJzdExpbmVSdWxl
czsgfQorICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3J1
bGVTZXRzLmZlYXR1cmVzKCkudXNlc0JlZm9yZUFmdGVyUnVsZXM7IH0KIAogICAgIHN0YXRpYyBi
b29sIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0
eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiBvdXRPcGVyYXRpb25zKTsKICAgICAKQEAgLTQxMiwxMiArNDE3LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwogICAgIFN0cmluZyBwYWdl
TmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKIAotICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhv
clN0eWxlOwotICAgIE93blB0cjxSdWxlU2V0PiBtX3VzZXJTdHlsZTsKLQotICAgIFJ1bGVGZWF0
dXJlU2V0IG1fZmVhdHVyZXM7Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVTZXQ7
Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0OworICAgIERv
Y3VtZW50UnVsZVNldHMgbV9ydWxlU2V0czsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNT
dHJpbmdJbXBsKiwgUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4gPiBLZXlmcmFtZXNSdWxlTWFw
OwogICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxlTWFwOwpAQCAtNTI0LDggKzUy
NCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxl
Tm90WWV0QXZhaWxhYmxlOwogCi0gICAgdm9pZCBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hl
ZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYsIFJ1bGVTZXQmIHVzZXJT
dHlsZSk7Ci0KICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogCiBwcml2YXRl
OgpAQCAtNjAzLDE5ICs2MDEsMTkgQEAgcHJpdmF0ZToKIGlubGluZSBib29sIFN0eWxlUmVzb2x2
ZXI6Omhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyAmYXR0cmlidXRl
TmFtZSkgY29uc3QKIHsKICAgICBBU1NFUlQoIWF0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKTsKLSAg
ICByZXR1cm4gbV9mZWF0dXJlcy5hdHRyc0luUnVsZXMuY29udGFpbnMoYXR0cmlidXRlTmFtZS5p
bXBsKCkpOworICAgIHJldHVybiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuYXR0cnNJblJ1bGVzLmNv
bnRhaW5zKGF0dHJpYnV0ZU5hbWUuaW1wbCgpKTsKIH0KIAogaW5saW5lIGJvb2wgU3R5bGVSZXNv
bHZlcjo6aGFzU2VsZWN0b3JGb3JDbGFzcyhjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzVmFsdWUp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjbGFzc1ZhbHVlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJu
IG1fZmVhdHVyZXMuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2xhc3NWYWx1ZS5pbXBsKCkpOwor
ICAgIHJldHVybiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMo
Y2xhc3NWYWx1ZS5pbXBsKCkpOwogfQogCiBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpoYXNT
ZWxlY3RvckZvcklkKGNvbnN0IEF0b21pY1N0cmluZyYgaWRWYWx1ZSkgY29uc3QKIHsKICAgICBB
U1NFUlQoIWlkVmFsdWUuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9mZWF0dXJlcy5pZHNJblJ1
bGVzLmNvbnRhaW5zKGlkVmFsdWUuaW1wbCgpKTsKKyAgICByZXR1cm4gbV9ydWxlU2V0cy5mZWF0
dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoaWRWYWx1ZS5pbXBsKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbi5jcHAKaW5kZXggNjMyZmE5NGFhMzM1Y2FiMGVlNDE0ZGZiYWRiZDdj
NzJmYzMwYzc3Zi4uM2FjMWY1ZWM0Yzc4MmYzNjYxMDFkNGYxMjM5ODBkMDk5YzM3Y2M5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
LmNwcApAQCAtNDc4LDcgKzQ3OCw3IEBAIGJvb2wgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bjo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoVXBkYXRlRmxhZyB1cGRhdGVGbGFnCiAgICAgZWxz
ZSB7CiAgICAgICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LT5z
dHlsZVJlc29sdmVyKCk7CiAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9PSBS
ZXNldCkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+cmVzZXRBdXRob3JTdHlsZSgpOwor
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+cnVsZVNldHMoKS5yZXNldEF1dGhvclN0eWxlKCk7
CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cygwLCBh
Y3RpdmVDU1NTdHlsZVNoZWV0cyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NF
UlQoc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPT0gQWRkaXRpdmUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>